1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-09 21:50:45 +01:00

Namespace

This commit is contained in:
paboyle 2018-01-14 22:17:43 +00:00
parent 361ce948c3
commit e61189db3f

View File

@ -25,44 +25,43 @@ with this program; if not, write to the Free Software Foundation, Inc.,
See the full license in the file "LICENSE" in the top level distribution See the full license in the file "LICENSE" in the top level distribution
directory directory
*************************************************************************************/ *************************************************************************************/
/* END LEGAL */ /* END LEGAL */
#ifndef HMC_TOP_CHARGE_H #ifndef HMC_TOP_CHARGE_H
#define HMC_TOP_CHARGE_H #define HMC_TOP_CHARGE_H
namespace Grid { NAMESPACE_BEGIN(Grid);
namespace QCD {
struct TopologySmearingParameters : Serializable { struct TopologySmearingParameters : Serializable {
GRID_SERIALIZABLE_CLASS_MEMBERS(TopologySmearingParameters, GRID_SERIALIZABLE_CLASS_MEMBERS(TopologySmearingParameters,
int, steps, int, steps,
float, step_size, float, step_size,
int, meas_interval, int, meas_interval,
float, maxTau); float, maxTau);
TopologySmearingParameters(int s = 0, float ss = 0.0f, int mi = 0, float mT = 0.0f): 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){} steps(s), step_size(ss), meas_interval(mi), maxTau(mT){}
template < class ReaderClass > template < class ReaderClass >
TopologySmearingParameters(Reader<ReaderClass>& Reader){ TopologySmearingParameters(Reader<ReaderClass>& Reader){
read(Reader, "Smearing", *this); read(Reader, "Smearing", *this);
} }
}; };
struct TopologyObsParameters : Serializable { struct TopologyObsParameters : Serializable {
GRID_SERIALIZABLE_CLASS_MEMBERS(TopologyObsParameters, GRID_SERIALIZABLE_CLASS_MEMBERS(TopologyObsParameters,
int, interval, int, interval,
bool, do_smearing, bool, do_smearing,
TopologySmearingParameters, Smearing); TopologySmearingParameters, Smearing);
TopologyObsParameters(int interval = 1, bool smearing = false): TopologyObsParameters(int interval = 1, bool smearing = false):
interval(interval), Smearing(smearing){} interval(interval), Smearing(smearing){}
template <class ReaderClass > template <class ReaderClass >
TopologyObsParameters(Reader<ReaderClass>& Reader){ TopologyObsParameters(Reader<ReaderClass>& Reader){
read(Reader, "TopologyMeasurement", *this); read(Reader, "TopologyMeasurement", *this);
} }
}; };
@ -70,53 +69,53 @@ struct TopologyObsParameters : Serializable {
// 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; 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
INHERIT_GIMPL_TYPES(Impl); INHERIT_GIMPL_TYPES(Impl);
// 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): TopologicalCharge(int interval = 1, bool do_smearing = false):
Pars(interval, do_smearing){} Pars(interval, do_smearing){}
TopologicalCharge(TopologyObsParameters P):Pars(P){ TopologicalCharge(TopologyObsParameters P):Pars(P){
std::cout << GridLogDebug << "Creating TopologicalCharge " << std::endl; 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) {
if (traj%Pars.interval == 0){ if (traj%Pars.interval == 0){
// Smearing // Smearing
Field Usmear = U; Field Usmear = U;
int def_prec = std::cout.precision(); int def_prec = std::cout.precision();
if (Pars.do_smearing){ if (Pars.do_smearing){
// using wilson flow by default here // using wilson flow by default here
WilsonFlow<PeriodicGimplR> WF(Pars.Smearing.steps, Pars.Smearing.step_size, Pars.Smearing.meas_interval); WilsonFlow<PeriodicGimplR> WF(Pars.Smearing.steps, Pars.Smearing.step_size, Pars.Smearing.meas_interval);
WF.smear_adaptive(Usmear, U, Pars.Smearing.maxTau); WF.smear_adaptive(Usmear, U, Pars.Smearing.maxTau);
Real T0 = WF.energyDensityPlaquette(Usmear); Real T0 = WF.energyDensityPlaquette(Usmear);
std::cout << GridLogMessage << std::setprecision(std::numeric_limits<Real>::digits10 + 1) std::cout << GridLogMessage << std::setprecision(std::numeric_limits<Real>::digits10 + 1)
<< "T0 : [ " << traj << " ] "<< T0 << std::endl; << "T0 : [ " << traj << " ] "<< T0 << std::endl;
} }
Real q = WilsonLoops<Impl>::TopologicalCharge(Usmear); Real q = WilsonLoops<Impl>::TopologicalCharge(Usmear);
std::cout << GridLogMessage std::cout << GridLogMessage
<< std::setprecision(std::numeric_limits<Real>::digits10 + 1) << std::setprecision(std::numeric_limits<Real>::digits10 + 1)
<< "Topological Charge: [ " << traj << " ] "<< q << std::endl; << "Topological Charge: [ " << traj << " ] "<< q << std::endl;
std::cout.precision(def_prec); std::cout.precision(def_prec);
}
} }
}
}; };
}
} NAMESPACE_END(Grid);
#endif // HMC_TOP_CHARGE_H #endif // HMC_TOP_CHARGE_H