mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
Added smearing to the topological charge observable
This commit is contained in:
parent
237cfd11ab
commit
7abc5613bd
@ -84,8 +84,6 @@ class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, NoParameters>
|
|||||||
typedef ObservableModule<PlaquetteLogger<Impl>, NoParameters> ObsBase;
|
typedef ObservableModule<PlaquetteLogger<Impl>, NoParameters> ObsBase;
|
||||||
using ObsBase::ObsBase; // for constructors
|
using ObsBase::ObsBase; // for constructors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// acquire resource
|
// acquire resource
|
||||||
virtual void initialize(){
|
virtual void initialize(){
|
||||||
this->ObservablePtr.reset(new PlaquetteLogger<Impl>());
|
this->ObservablePtr.reset(new PlaquetteLogger<Impl>());
|
||||||
@ -94,23 +92,22 @@ class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, NoParameters>
|
|||||||
PlaquetteMod(): ObsBase(NoParameters()){}
|
PlaquetteMod(): ObsBase(NoParameters()){}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template < class Impl >
|
template < class Impl >
|
||||||
class TopologicalChargeMod: public ObservableModule<TopologicalCharge<Impl>, NoParameters>{
|
class TopologicalChargeMod: public ObservableModule<TopologicalCharge<Impl>, TopologyObsParameters>{
|
||||||
typedef ObservableModule<TopologicalCharge<Impl>, NoParameters> ObsBase;
|
typedef ObservableModule<TopologicalCharge<Impl>, TopologyObsParameters> ObsBase;
|
||||||
using ObsBase::ObsBase; // for constructors
|
using ObsBase::ObsBase; // for constructors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// acquire resource
|
// acquire resource
|
||||||
virtual void initialize(){
|
virtual void initialize(){
|
||||||
this->ObservablePtr.reset(new TopologicalCharge<Impl>());
|
this->ObservablePtr.reset(new TopologicalCharge<Impl>(this->Par_));
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
TopologicalChargeMod(): ObsBase(NoParameters()){}
|
TopologicalChargeMod(TopologyObsParameters Par): ObsBase(Par){}
|
||||||
|
TopologicalChargeMod(): ObsBase(){}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}// QCD temporarily here
|
}// QCD temporarily here
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,9 +33,45 @@ directory
|
|||||||
namespace Grid {
|
namespace Grid {
|
||||||
namespace QCD {
|
namespace QCD {
|
||||||
|
|
||||||
|
struct TopologySmearingParameters : Serializable {
|
||||||
|
GRID_SERIALIZABLE_CLASS_MEMBERS(TopologySmearingParameters,
|
||||||
|
int, steps,
|
||||||
|
float, step_size,
|
||||||
|
int, meas_interval,
|
||||||
|
float, maxTau);
|
||||||
|
|
||||||
|
TopologySmearingParameters(int s = 0, float ss = 0.0f, int mi = 0, float mT = 0.0f):
|
||||||
|
steps(s), step_size(ss), meas_interval(mi), maxTau(mT){}
|
||||||
|
|
||||||
|
template < class ReaderClass >
|
||||||
|
TopologySmearingParameters(Reader<ReaderClass>& Reader){
|
||||||
|
read(Reader, "Smearing", *this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct TopologyObsParameters : Serializable {
|
||||||
|
GRID_SERIALIZABLE_CLASS_MEMBERS(TopologyObsParameters,
|
||||||
|
int, interval,
|
||||||
|
bool, do_smearing,
|
||||||
|
TopologySmearingParameters, Smearing);
|
||||||
|
|
||||||
|
TopologyObsParameters(int interval = 1, bool smearing = false):
|
||||||
|
interval(interval), Smearing(smearing){}
|
||||||
|
|
||||||
|
template <class ReaderClass >
|
||||||
|
TopologyObsParameters(Reader<ReaderClass>& Reader){
|
||||||
|
read(Reader, "TopologyMeasurement", *this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// this is only defined for a gauge theory
|
// this is only defined for a gauge theory
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
class TopologicalCharge : public HmcObservable<typename Impl::Field> {
|
class TopologicalCharge : public HmcObservable<typename Impl::Field> {
|
||||||
|
TopologyObsParameters Pars;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// here forces the Impl to be of gauge fields
|
// here forces the Impl to be of gauge fields
|
||||||
// if not the compiler will complain
|
// if not the compiler will complain
|
||||||
@ -44,20 +80,40 @@ class TopologicalCharge : public HmcObservable<typename Impl::Field> {
|
|||||||
// necessary for HmcObservable compatibility
|
// necessary for HmcObservable compatibility
|
||||||
typedef typename Impl::Field Field;
|
typedef typename Impl::Field Field;
|
||||||
|
|
||||||
|
TopologicalCharge(int interval = 1, bool do_smearing = false):
|
||||||
|
Pars(interval, do_smearing){}
|
||||||
|
|
||||||
|
TopologicalCharge(TopologyObsParameters P):Pars(P){
|
||||||
|
std::cout << GridLogDebug << "Creating TopologicalCharge " << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void TrajectoryComplete(int traj,
|
void TrajectoryComplete(int traj,
|
||||||
Field &U,
|
Field &U,
|
||||||
GridSerialRNG &sRNG,
|
GridSerialRNG &sRNG,
|
||||||
GridParallelRNG &pRNG) {
|
GridParallelRNG &pRNG) {
|
||||||
|
|
||||||
Real q = WilsonLoops<Impl>::TopologicalCharge(U);
|
if (traj%Pars.interval == 0){
|
||||||
|
// Smearing
|
||||||
|
Field Usmear = U;
|
||||||
|
int def_prec = std::cout.precision();
|
||||||
|
|
||||||
|
if (Pars.do_smearing){
|
||||||
|
// using wilson flow by default here
|
||||||
|
std::cout << "1. " << Pars.Smearing.step_size << std::endl;
|
||||||
|
WilsonFlow<PeriodicGimplR> WF(Pars.Smearing.steps, Pars.Smearing.step_size, Pars.Smearing.meas_interval);
|
||||||
|
WF.smear_adaptive(Usmear, U, Pars.Smearing.maxTau);
|
||||||
|
Real T0 = WF.energyDensityPlaquette(Usmear);
|
||||||
|
std::cout << GridLogMessage << std::setprecision(std::numeric_limits<Real>::digits10 + 1)
|
||||||
|
<< "T0 : [ " << traj << " ] "<< T0 << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
int def_prec = std::cout.precision();
|
Real q = WilsonLoops<Impl>::TopologicalCharge(Usmear);
|
||||||
|
std::cout << GridLogMessage
|
||||||
|
<< std::setprecision(std::numeric_limits<Real>::digits10 + 1)
|
||||||
|
<< "Topological Charge: [ " << traj << " ] "<< q << std::endl;
|
||||||
|
|
||||||
std::cout << GridLogMessage
|
std::cout.precision(def_prec);
|
||||||
<< std::setprecision(std::numeric_limits<Real>::digits10 + 1)
|
}
|
||||||
<< "Topological Charge: [ " << traj << " ] "<< q << std::endl;
|
|
||||||
|
|
||||||
std::cout.precision(def_prec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -66,7 +66,10 @@ int main(int argc, char **argv) {
|
|||||||
typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs;
|
typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs;
|
||||||
typedef TopologicalChargeMod<HMCWrapper::ImplPolicy> QObs;
|
typedef TopologicalChargeMod<HMCWrapper::ImplPolicy> QObs;
|
||||||
TheHMC.Resources.AddObservable<PlaqObs>();
|
TheHMC.Resources.AddObservable<PlaqObs>();
|
||||||
TheHMC.Resources.AddObservable<QObs>();
|
TopologyObsParameters TopParams;
|
||||||
|
TopParams.interval = 1;
|
||||||
|
TopParams.do_smearing = false;
|
||||||
|
TheHMC.Resources.AddObservable<QObs>(TopParams);
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user