mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Hadrons: Scalar SU(N) utility functions
This commit is contained in:
parent
550142bd6a
commit
614a0e8277
@ -65,6 +65,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Modules/MScalarSUN/TrMag.hpp>
|
#include <Grid/Hadrons/Modules/MScalarSUN/TrMag.hpp>
|
||||||
#include <Grid/Hadrons/Modules/MScalarSUN/TwoPoint.hpp>
|
#include <Grid/Hadrons/Modules/MScalarSUN/TwoPoint.hpp>
|
||||||
#include <Grid/Hadrons/Modules/MScalarSUN/TrPhi.hpp>
|
#include <Grid/Hadrons/Modules/MScalarSUN/TrPhi.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
#include <Grid/Hadrons/Modules/MScalarSUN/TrKinetic.hpp>
|
#include <Grid/Hadrons/Modules/MScalarSUN/TrKinetic.hpp>
|
||||||
#include <Grid/Hadrons/Modules/MIO/LoadNersc.hpp>
|
#include <Grid/Hadrons/Modules/MIO/LoadNersc.hpp>
|
||||||
#include <Grid/Hadrons/Modules/MIO/LoadBinary.hpp>
|
#include <Grid/Hadrons/Modules/MIO/LoadBinary.hpp>
|
||||||
|
@ -31,6 +31,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Global.hpp>
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
#include <Grid/Hadrons/Module.hpp>
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
#include <Grid/Hadrons/ModuleFactory.hpp>
|
#include <Grid/Hadrons/ModuleFactory.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
|
|
||||||
BEGIN_HADRONS_NAMESPACE
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
@ -42,7 +43,6 @@ BEGIN_MODULE_NAMESPACE(MScalarSUN)
|
|||||||
class DivPar: Serializable
|
class DivPar: Serializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GRID_SERIALIZABLE_ENUM(DiffType, undef, forward, 1, backward, 2, central, 3);
|
|
||||||
GRID_SERIALIZABLE_CLASS_MEMBERS(DivPar,
|
GRID_SERIALIZABLE_CLASS_MEMBERS(DivPar,
|
||||||
std::vector<std::string>, op,
|
std::vector<std::string>, op,
|
||||||
DiffType, type,
|
DiffType, type,
|
||||||
@ -59,8 +59,8 @@ public:
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GRID_SERIALIZABLE_CLASS_MEMBERS(Result,
|
GRID_SERIALIZABLE_CLASS_MEMBERS(Result,
|
||||||
DivPar::DiffType, type,
|
DiffType, type,
|
||||||
Complex, value);
|
Complex, value);
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
// constructor
|
// constructor
|
||||||
@ -135,18 +135,7 @@ void TDiv<SImpl>::execute(void)
|
|||||||
for (unsigned int mu = 0; mu < nd; ++mu)
|
for (unsigned int mu = 0; mu < nd; ++mu)
|
||||||
{
|
{
|
||||||
auto &op = envGet(ComplexField, par().op[mu]);
|
auto &op = envGet(ComplexField, par().op[mu]);
|
||||||
switch(par().type)
|
dmuAcc(div, op, mu, par().type);
|
||||||
{
|
|
||||||
case DivPar::DiffType::backward:
|
|
||||||
div += op - Cshift(op, mu, -1);
|
|
||||||
break;
|
|
||||||
case DivPar::DiffType::forward:
|
|
||||||
div += Cshift(op, mu, 1) - op;
|
|
||||||
break;
|
|
||||||
case DivPar::DiffType::central:
|
|
||||||
div += 0.5*(Cshift(op, mu, 1) - Cshift(op, mu, -1));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!par().output.empty())
|
if (!par().output.empty())
|
||||||
{
|
{
|
||||||
|
@ -31,6 +31,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Global.hpp>
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
#include <Grid/Hadrons/Module.hpp>
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
#include <Grid/Hadrons/ModuleFactory.hpp>
|
#include <Grid/Hadrons/ModuleFactory.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
|
|
||||||
BEGIN_HADRONS_NAMESPACE
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
@ -42,7 +43,6 @@ BEGIN_MODULE_NAMESPACE(MScalarSUN)
|
|||||||
class TrKineticPar: Serializable
|
class TrKineticPar: Serializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GRID_SERIALIZABLE_ENUM(DiffType, undef, forward, 1, backward, 2, central, 3);
|
|
||||||
GRID_SERIALIZABLE_CLASS_MEMBERS(TrKineticPar,
|
GRID_SERIALIZABLE_CLASS_MEMBERS(TrKineticPar,
|
||||||
std::string, field,
|
std::string, field,
|
||||||
DiffType, type,
|
DiffType, type,
|
||||||
@ -74,9 +74,6 @@ public:
|
|||||||
virtual void setup(void);
|
virtual void setup(void);
|
||||||
// execution
|
// execution
|
||||||
virtual void execute(void);
|
virtual void execute(void);
|
||||||
private:
|
|
||||||
std::string outName(const unsigned int mu, const unsigned int nu);
|
|
||||||
std::string bufName(const unsigned int mu);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_REGISTER_NS(TrKineticSU2, TTrKinetic<ScalarNxNAdjImplR<2>>, MScalarSUN);
|
MODULE_REGISTER_NS(TrKineticSU2, TTrKinetic<ScalarNxNAdjImplR<2>>, MScalarSUN);
|
||||||
@ -111,7 +108,7 @@ std::vector<std::string> TTrKinetic<SImpl>::getOutput(void)
|
|||||||
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
||||||
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
||||||
{
|
{
|
||||||
out.push_back(outName(mu, nu));
|
out.push_back(varName(getName(), mu, nu));
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
@ -124,7 +121,7 @@ void TTrKinetic<SImpl>::setup(void)
|
|||||||
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
||||||
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
||||||
{
|
{
|
||||||
envCreateLat(ComplexField, outName(mu, nu));
|
envCreateLat(ComplexField, varName(getName(), mu, nu));
|
||||||
}
|
}
|
||||||
envTmp(std::vector<Field>, "der", 1, env().getNd(), env().getGrid());
|
envTmp(std::vector<Field>, "der", 1, env().getNd(), env().getGrid());
|
||||||
}
|
}
|
||||||
@ -142,23 +139,12 @@ void TTrKinetic<SImpl>::execute(void)
|
|||||||
envGetTmp(std::vector<Field>, der);
|
envGetTmp(std::vector<Field>, der);
|
||||||
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
||||||
{
|
{
|
||||||
switch(par().type)
|
dmu(der[mu], phi, mu, par().type);
|
||||||
{
|
|
||||||
case TrKineticPar::DiffType::backward:
|
|
||||||
der[mu] = phi - Cshift(phi, mu, -1);
|
|
||||||
break;
|
|
||||||
case TrKineticPar::DiffType::forward:
|
|
||||||
der[mu] = Cshift(phi, mu, 1) - phi;
|
|
||||||
break;
|
|
||||||
case TrKineticPar::DiffType::central:
|
|
||||||
der[mu] = 0.5*(Cshift(phi, mu, 1) - Cshift(phi, mu, -1));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
for (unsigned int mu = 0; mu < env().getNd(); ++mu)
|
||||||
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
for (unsigned int nu = mu; nu < env().getNd(); ++nu)
|
||||||
{
|
{
|
||||||
auto &out = envGet(ComplexField, outName(mu, nu));
|
auto &out = envGet(ComplexField, varName(getName(), mu, nu));
|
||||||
|
|
||||||
out = -trace(der[mu]*der[nu]);
|
out = -trace(der[mu]*der[nu]);
|
||||||
if (!par().output.empty())
|
if (!par().output.empty())
|
||||||
@ -177,21 +163,6 @@ void TTrKinetic<SImpl>::execute(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// variable name generators ////////////////////////////////////////////////////
|
|
||||||
template <typename SImpl>
|
|
||||||
std::string TTrKinetic<SImpl>::outName(const unsigned int mu,
|
|
||||||
const unsigned int nu)
|
|
||||||
{
|
|
||||||
return getName() + "_" + std::to_string(mu) + "_" + std::to_string(nu);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename SImpl>
|
|
||||||
std::string TTrKinetic<SImpl>::bufName(const unsigned int mu)
|
|
||||||
{
|
|
||||||
return "d_" + std::to_string(mu);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
END_MODULE_NAMESPACE
|
END_MODULE_NAMESPACE
|
||||||
|
|
||||||
END_HADRONS_NAMESPACE
|
END_HADRONS_NAMESPACE
|
||||||
|
@ -31,6 +31,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Global.hpp>
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
#include <Grid/Hadrons/Module.hpp>
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
#include <Grid/Hadrons/ModuleFactory.hpp>
|
#include <Grid/Hadrons/ModuleFactory.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
|
|
||||||
BEGIN_HADRONS_NAMESPACE
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Global.hpp>
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
#include <Grid/Hadrons/Module.hpp>
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
#include <Grid/Hadrons/ModuleFactory.hpp>
|
#include <Grid/Hadrons/ModuleFactory.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
|
|
||||||
BEGIN_HADRONS_NAMESPACE
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
@ -73,9 +74,6 @@ public:
|
|||||||
virtual void setup(void);
|
virtual void setup(void);
|
||||||
// execution
|
// execution
|
||||||
virtual void execute(void);
|
virtual void execute(void);
|
||||||
private:
|
|
||||||
// output name generator
|
|
||||||
std::string outName(const unsigned int n);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_REGISTER_NS(TrPhiSU2, TTrPhi<ScalarNxNAdjImplR<2>>, MScalarSUN);
|
MODULE_REGISTER_NS(TrPhiSU2, TTrPhi<ScalarNxNAdjImplR<2>>, MScalarSUN);
|
||||||
@ -109,7 +107,7 @@ std::vector<std::string> TTrPhi<SImpl>::getOutput(void)
|
|||||||
|
|
||||||
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
||||||
{
|
{
|
||||||
out.push_back(outName(n));
|
out.push_back(varName(getName(), n));
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
@ -127,7 +125,7 @@ void TTrPhi<SImpl>::setup(void)
|
|||||||
envTmpLat(Field, "buf");
|
envTmpLat(Field, "buf");
|
||||||
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
||||||
{
|
{
|
||||||
envCreateLat(ComplexField, outName(n));
|
envCreateLat(ComplexField, varName(getName(), n));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,7 +145,7 @@ void TTrPhi<SImpl>::execute(void)
|
|||||||
phi2 = -phi*phi;
|
phi2 = -phi*phi;
|
||||||
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
for (unsigned int n = 2; n <= par().maxPow; n += 2)
|
||||||
{
|
{
|
||||||
auto &phin = envGet(ComplexField, outName(n));
|
auto &phin = envGet(ComplexField, varName(getName(), n));
|
||||||
|
|
||||||
buf = buf*phi2;
|
buf = buf*phi2;
|
||||||
phin = trace(buf);
|
phin = trace(buf);
|
||||||
@ -166,13 +164,6 @@ void TTrPhi<SImpl>::execute(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// output name generator ///////////////////////////////////////////////////////
|
|
||||||
template <typename SImpl>
|
|
||||||
std::string TTrPhi<SImpl>::outName(const unsigned int n)
|
|
||||||
{
|
|
||||||
return getName() + "_" + std::to_string(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
END_MODULE_NAMESPACE
|
END_MODULE_NAMESPACE
|
||||||
|
|
||||||
END_HADRONS_NAMESPACE
|
END_HADRONS_NAMESPACE
|
||||||
|
@ -31,6 +31,7 @@ See the full license in the file "LICENSE" in the top level distribution directo
|
|||||||
#include <Grid/Hadrons/Global.hpp>
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
#include <Grid/Hadrons/Module.hpp>
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
#include <Grid/Hadrons/ModuleFactory.hpp>
|
#include <Grid/Hadrons/ModuleFactory.hpp>
|
||||||
|
#include <Grid/Hadrons/Modules/MScalarSUN/Utils.hpp>
|
||||||
|
|
||||||
BEGIN_HADRONS_NAMESPACE
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
|
80
extras/Hadrons/Modules/MScalarSUN/Utils.hpp
Normal file
80
extras/Hadrons/Modules/MScalarSUN/Utils.hpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#ifndef Hadrons_MScalarSUN_Utils_hpp_
|
||||||
|
#define Hadrons_MScalarSUN_Utils_hpp_
|
||||||
|
|
||||||
|
#include <Grid/Hadrons/Global.hpp>
|
||||||
|
#include <Grid/Hadrons/Module.hpp>
|
||||||
|
|
||||||
|
BEGIN_HADRONS_NAMESPACE
|
||||||
|
|
||||||
|
BEGIN_MODULE_NAMESPACE(MScalarSUN)
|
||||||
|
|
||||||
|
GRID_SERIALIZABLE_ENUM(DiffType, undef, forward, 1, backward, 2, central, 3);
|
||||||
|
|
||||||
|
template <typename Field>
|
||||||
|
inline void dmu(Field &out, const Field &in, const unsigned int mu, const DiffType type)
|
||||||
|
{
|
||||||
|
auto & env = Environment::getInstance();
|
||||||
|
|
||||||
|
if (mu >= env.getNd())
|
||||||
|
{
|
||||||
|
HADRON_ERROR(Range, "Derivative direction out of range");
|
||||||
|
}
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case DiffType::backward:
|
||||||
|
out = in - Cshift(in, mu, -1);
|
||||||
|
break;
|
||||||
|
case DiffType::forward:
|
||||||
|
out = Cshift(in, mu, 1) - in;
|
||||||
|
break;
|
||||||
|
case DiffType::central:
|
||||||
|
out = 0.5*(Cshift(in, mu, 1) - Cshift(in, mu, -1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HADRON_ERROR(Argument, "Derivative type invalid");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Field>
|
||||||
|
inline void dmuAcc(Field &out, const Field &in, const unsigned int mu, const DiffType type)
|
||||||
|
{
|
||||||
|
auto & env = Environment::getInstance();
|
||||||
|
|
||||||
|
if (mu >= env.getNd())
|
||||||
|
{
|
||||||
|
HADRON_ERROR(Range, "Derivative direction out of range");
|
||||||
|
}
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case DiffType::backward:
|
||||||
|
out += in - Cshift(in, mu, -1);
|
||||||
|
break;
|
||||||
|
case DiffType::forward:
|
||||||
|
out += Cshift(in, mu, 1) - in;
|
||||||
|
break;
|
||||||
|
case DiffType::central:
|
||||||
|
out += 0.5*(Cshift(in, mu, 1) - Cshift(in, mu, -1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HADRON_ERROR(Argument, "Derivative type invalid");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::string varName(const std::string name, const unsigned int mu)
|
||||||
|
{
|
||||||
|
return name + "_" + std::to_string(mu);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::string varName(const std::string name, const unsigned int mu,
|
||||||
|
const unsigned int nu)
|
||||||
|
{
|
||||||
|
return name + "_" + std::to_string(mu) + "_" + std::to_string(nu);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_MODULE_NAMESPACE
|
||||||
|
|
||||||
|
END_HADRONS_NAMESPACE
|
||||||
|
|
||||||
|
#endif // Hadrons_MScalarSUN_Utils_hpp_
|
@ -48,6 +48,7 @@ modules_hpp =\
|
|||||||
Modules/MScalarSUN/TrMag.hpp \
|
Modules/MScalarSUN/TrMag.hpp \
|
||||||
Modules/MScalarSUN/TwoPoint.hpp \
|
Modules/MScalarSUN/TwoPoint.hpp \
|
||||||
Modules/MScalarSUN/TrPhi.hpp \
|
Modules/MScalarSUN/TrPhi.hpp \
|
||||||
|
Modules/MScalarSUN/Utils.hpp \
|
||||||
Modules/MScalarSUN/TrKinetic.hpp \
|
Modules/MScalarSUN/TrKinetic.hpp \
|
||||||
Modules/MIO/LoadNersc.hpp \
|
Modules/MIO/LoadNersc.hpp \
|
||||||
Modules/MIO/LoadBinary.hpp
|
Modules/MIO/LoadBinary.hpp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user