From e553678599078b8465936137601b80a60969c588 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Thu, 23 May 2019 16:38:13 +0100 Subject: [PATCH 01/18] add modules MSource::Gauss and MSource::Convolution --- Hadrons/Modules.hpp | 110 ++++++------ Hadrons/Modules/MSource/Convolution.cc | 7 + Hadrons/Modules/MSource/Convolution.hpp | 110 ++++++++++++ Hadrons/Modules/MSource/Gauss.cc | 7 + Hadrons/Modules/MSource/Gauss.hpp | 111 ++++++++++++ Hadrons/modules.inc | 222 ++++++++++++------------ 6 files changed, 404 insertions(+), 163 deletions(-) create mode 100644 Hadrons/Modules/MSource/Convolution.cc create mode 100644 Hadrons/Modules/MSource/Convolution.hpp create mode 100644 Hadrons/Modules/MSource/Gauss.cc create mode 100644 Hadrons/Modules/MSource/Gauss.hpp diff --git a/Hadrons/Modules.hpp b/Hadrons/Modules.hpp index 8d92580a..07b895bc 100644 --- a/Hadrons/Modules.hpp +++ b/Hadrons/Modules.hpp @@ -1,66 +1,68 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include #include #include #include -#include -#include -#include -#include -#include #include +#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/Hadrons/Modules/MSource/Convolution.cc b/Hadrons/Modules/MSource/Convolution.cc new file mode 100644 index 00000000..b8ffecf8 --- /dev/null +++ b/Hadrons/Modules/MSource/Convolution.cc @@ -0,0 +1,7 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MSource; + +template class Grid::Hadrons::MSource::TConvolution; diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp new file mode 100644 index 00000000..c8d06772 --- /dev/null +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -0,0 +1,110 @@ +#ifndef Hadrons_MSource_Convolution_hpp_ +#define Hadrons_MSource_Convolution_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Convolution * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MSource) + +class ConvolutionPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(ConvolutionPar, + std::string, field1, + std::string, field2); +}; + +template +class TConvolution: public Module +{ +public: + BASIC_TYPE_ALIASES(FImpl,); +public: + // constructor + TConvolution(const std::string name); + // destructor + virtual ~TConvolution(void) {}; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // setup + virtual void setup(void); + // execution + virtual void execute(void); +}; + +MODULE_REGISTER_TMP(Convolution, TConvolution, MSource); + +/****************************************************************************** + * TConvolution implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TConvolution::TConvolution(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TConvolution::getInput(void) +{ + std::vector in; + + return in; +} + +template +std::vector TConvolution::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TConvolution::setup(void) +{ + envCreateLat(LatticeFermion, getName()); + envTmpLat(LatticeComplex, "momfield1"); + envTmp(FFT, "fft", 1, env().getGrid()); +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TConvolution::execute(void) +{ + auto &field1 = envGet(LatticeComplex, par().field1); + auto &field2 = envGet(LatticeFermion, par().field2); + auto &out = envGet(LatticeFermion, getName()); + envGetTmp(LatticeComplex, momfield1); + envGetTmp(FFT, fft); + + std::vector mask(env().getNd(), 1); + mask.back()=0; //transform only the spatial dimensions + + startTimer("Fourier transform"); + fft.FFT_dim_mask(momfield1, field1, mask, FFT::forward); + fft.FFT_dim_mask(out, field2, mask, FFT::forward); + stopTimer("Fourier transform"); + + startTimer("momentum-space multiplication"); + out=momfield1*out; + stopTimer("momentum-space multiplication"); + + startTimer("Fourier transform"); + fft.FFT_dim_mask(out, out, mask, FFT::backward); + stopTimer("Fourier transform"); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MSource_Convolution_hpp_ diff --git a/Hadrons/Modules/MSource/Gauss.cc b/Hadrons/Modules/MSource/Gauss.cc new file mode 100644 index 00000000..89fcb8df --- /dev/null +++ b/Hadrons/Modules/MSource/Gauss.cc @@ -0,0 +1,7 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MSource; + +template class Grid::Hadrons::MSource::TGauss; diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp new file mode 100644 index 00000000..0a8c2c1a --- /dev/null +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -0,0 +1,111 @@ +#ifndef Hadrons_MSource_Gauss_hpp_ +#define Hadrons_MSource_Gauss_hpp_ + +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * Gauss * + * result[n] = 1/(sqrt(2*pi)*width)^dim*exp(-|n|^2/(2*width^2)) * + * where: * + * n=(n[0],n[1],...,n[dim-1]) (lattice coordinate) * + * dim=Nd-1 * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MSource) + +class GaussPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(GaussPar, + std::string, position, + double, width); +}; + +template +class TGauss: public Module +{ +public: + // constructor + TGauss(const std::string name); + // destructor + virtual ~TGauss(void) {}; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // setup + virtual void setup(void); + // execution + virtual void execute(void); +private: + std::vector position_; +}; + +MODULE_REGISTER_TMP(Gauss, TGauss, MSource); + +/****************************************************************************** + * TGauss implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TGauss::TGauss(const std::string name) +: Module(name) +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TGauss::getInput(void) +{ + std::vector in; + + return in; +} + +template +std::vector TGauss::getOutput(void) +{ + std::vector out = {getName()}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TGauss::setup(void) +{ + +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TGauss::execute(void) +{ + auto &rho = envGet(LatticeComplex, getName()); + envGetTmp(LatticeComplex, component); + const int dim=env().getNd()-1; + const double fact=-0.5/std::pow(par().width,2); + const std::vector latt_size { env().getGrid()->FullDimensions() }; + + //exp(fact*|n|^2) + rho=zero; + for(int mu=0; mu(std::pow(sqrt(2*M_PI)*par().width,dim)); +} + +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MSource_Gauss_hpp_ diff --git a/Hadrons/modules.inc b/Hadrons/modules.inc index 44bd4311..cd72b74b 100644 --- a/Hadrons/modules.inc +++ b/Hadrons/modules.inc @@ -1,133 +1,137 @@ modules_cc =\ - Modules/MContraction/Baryon.cc \ - Modules/MContraction/Meson.cc \ - Modules/MContraction/WeakEye3pt.cc \ - Modules/MContraction/A2ALoop.cc \ - Modules/MContraction/WeakNonEye3pt.cc \ - Modules/MContraction/A2AAslashField.cc \ - Modules/MContraction/A2AMesonField.cc \ - Modules/MContraction/DiscLoop.cc \ - Modules/MContraction/Gamma3pt.cc \ - Modules/MFermion/FreeProp.cc \ - Modules/MFermion/GaugeProp.cc \ - Modules/MSource/Momentum.cc \ - Modules/MSource/Point.cc \ - Modules/MSource/Wall.cc \ Modules/MSource/SeqConserved.cc \ - Modules/MSource/SeqGamma.cc \ + Modules/MSource/Convolution.cc \ + Modules/MSource/Wall.cc \ + Modules/MSource/Point.cc \ Modules/MSource/Z2.cc \ - Modules/MSink/Point.cc \ - Modules/MSink/Smear.cc \ - Modules/MSolver/A2AVectors.cc \ - Modules/MSolver/A2AAslashVectors.cc \ - Modules/MSolver/RBPrecCG.cc \ - Modules/MSolver/MixedPrecisionRBPrecCG.cc \ - Modules/MSolver/LocalCoherenceLanczos.cc \ - Modules/MGauge/StoutSmearing.cc \ - Modules/MGauge/Unit.cc \ - Modules/MGauge/UnitEm.cc \ - Modules/MGauge/StochEm.cc \ - Modules/MGauge/Random.cc \ - Modules/MGauge/Electrify.cc \ - Modules/MGauge/FundtoHirep.cc \ - Modules/MGauge/GaugeFix.cc \ + Modules/MSource/Gauss.cc \ + Modules/MSource/SeqGamma.cc \ + Modules/MSource/Momentum.cc \ + Modules/MScalarSUN/TwoPoint.cc \ + Modules/MScalarSUN/TransProj.cc \ + Modules/MScalarSUN/TwoPointNPR.cc \ + Modules/MScalarSUN/EMT.cc \ + Modules/MScalarSUN/TrKinetic.cc \ + Modules/MScalarSUN/TrPhi.cc \ + Modules/MScalarSUN/Div.cc \ + Modules/MScalarSUN/Grad.cc \ + Modules/MScalarSUN/StochFreeField.cc \ + Modules/MScalarSUN/TrMag.cc \ Modules/MNoise/FullVolumeSpinColorDiagonal.cc \ Modules/MNoise/TimeDilutedSpinColorDiagonal.cc \ - Modules/MUtilities/RandomVectors.cc \ - Modules/MUtilities/PrecisionCast.cc \ Modules/MScalar/FreeProp.cc \ Modules/MScalar/ChargedProp.cc \ - Modules/MNPR/Amputate.cc \ + Modules/MAction/Wilson.cc \ + Modules/MAction/DWF.cc \ + Modules/MAction/MobiusDWF.cc \ + Modules/MAction/ScaledDWF.cc \ + Modules/MAction/WilsonClover.cc \ + Modules/MAction/ZMobiusDWF.cc \ + Modules/MGauge/FundtoHirep.cc \ + Modules/MGauge/StochEm.cc \ + Modules/MGauge/Unit.cc \ + Modules/MGauge/StoutSmearing.cc \ + Modules/MGauge/Electrify.cc \ + Modules/MGauge/Random.cc \ + Modules/MGauge/UnitEm.cc \ + Modules/MGauge/GaugeFix.cc \ + Modules/MUtilities/PrecisionCast.cc \ + Modules/MUtilities/RandomVectors.cc \ + Modules/MIO/LoadA2AVectors.cc \ + Modules/MIO/LoadNersc.cc \ + Modules/MIO/LoadBinary.cc \ + Modules/MIO/LoadCoarseEigenPack.cc \ + Modules/MIO/LoadEigenPack.cc \ + Modules/MIO/LoadCosmHol.cc \ + Modules/MContraction/A2ALoop.cc \ + Modules/MContraction/WeakNonEye3pt.cc \ + Modules/MContraction/A2AMesonField.cc \ + Modules/MContraction/Gamma3pt.cc \ + Modules/MContraction/Baryon.cc \ + Modules/MContraction/A2AAslashField.cc \ + Modules/MContraction/DiscLoop.cc \ + Modules/MContraction/Meson.cc \ + Modules/MContraction/WeakEye3pt.cc \ Modules/MNPR/Bilinear.cc \ Modules/MNPR/FourQuark.cc \ - Modules/MAction/Wilson.cc \ - Modules/MAction/MobiusDWF.cc \ - Modules/MAction/ZMobiusDWF.cc \ - Modules/MAction/WilsonClover.cc \ - Modules/MAction/DWF.cc \ - Modules/MAction/ScaledDWF.cc \ - Modules/MScalarSUN/TrPhi.cc \ - Modules/MScalarSUN/Grad.cc \ - Modules/MScalarSUN/TrMag.cc \ - Modules/MScalarSUN/TrKinetic.cc \ - Modules/MScalarSUN/EMT.cc \ - Modules/MScalarSUN/TransProj.cc \ - Modules/MScalarSUN/StochFreeField.cc \ - Modules/MScalarSUN/TwoPoint.cc \ - Modules/MScalarSUN/TwoPointNPR.cc \ - Modules/MScalarSUN/Div.cc \ - Modules/MIO/LoadEigenPack.cc \ - Modules/MIO/LoadBinary.cc \ - Modules/MIO/LoadNersc.cc \ - Modules/MIO/LoadCoarseEigenPack.cc \ - Modules/MIO/LoadCosmHol.cc \ - Modules/MIO/LoadA2AVectors.cc + Modules/MNPR/Amputate.cc \ + Modules/MSolver/A2AAslashVectors.cc \ + Modules/MSolver/MixedPrecisionRBPrecCG.cc \ + Modules/MSolver/RBPrecCG.cc \ + Modules/MSolver/LocalCoherenceLanczos.cc \ + Modules/MSolver/A2AVectors.cc \ + Modules/MFermion/FreeProp.cc \ + Modules/MFermion/GaugeProp.cc \ + Modules/MSink/Smear.cc \ + Modules/MSink/Point.cc modules_hpp =\ - Modules/MContraction/WeakEye3pt.hpp \ - Modules/MContraction/Baryon.hpp \ - Modules/MContraction/A2AAslashField.hpp \ - Modules/MContraction/A2ALoop.hpp \ - Modules/MContraction/A2AMesonField.hpp \ - Modules/MContraction/Meson.hpp \ - Modules/MContraction/DiscLoop.hpp \ - Modules/MContraction/Gamma3pt.hpp \ - Modules/MContraction/WeakNonEye3pt.hpp \ - Modules/MFermion/FreeProp.hpp \ - Modules/MFermion/GaugeProp.hpp \ - Modules/MSource/SeqGamma.hpp \ - Modules/MSource/Point.hpp \ - Modules/MSource/Wall.hpp \ - Modules/MSource/Z2.hpp \ - Modules/MSource/SeqConserved.hpp \ + Modules/MSource/Gauss.hpp \ Modules/MSource/Momentum.hpp \ - Modules/MSink/Smear.hpp \ - Modules/MSink/Point.hpp \ - Modules/MSolver/MixedPrecisionRBPrecCG.hpp \ - Modules/MSolver/LocalCoherenceLanczos.hpp \ - Modules/MSolver/A2AAslashVectors.hpp \ - Modules/MSolver/Guesser.hpp \ - Modules/MSolver/RBPrecCG.hpp \ - Modules/MSolver/A2AVectors.hpp \ - Modules/MGauge/UnitEm.hpp \ - Modules/MGauge/StoutSmearing.hpp \ - Modules/MGauge/Unit.hpp \ - Modules/MGauge/Random.hpp \ - Modules/MGauge/GaugeFix.hpp \ - Modules/MGauge/FundtoHirep.hpp \ - Modules/MGauge/StochEm.hpp \ - Modules/MGauge/Electrify.hpp \ + Modules/MSource/Z2.hpp \ + Modules/MSource/Point.hpp \ + Modules/MSource/SeqGamma.hpp \ + Modules/MSource/Convolution.hpp \ + Modules/MSource/Wall.hpp \ + Modules/MSource/SeqConserved.hpp \ + Modules/MScalarSUN/Div.hpp \ + Modules/MScalarSUN/TrKinetic.hpp \ + Modules/MScalarSUN/TrPhi.hpp \ + Modules/MScalarSUN/TwoPoint.hpp \ + Modules/MScalarSUN/Grad.hpp \ + Modules/MScalarSUN/Utils.hpp \ + Modules/MScalarSUN/StochFreeField.hpp \ + Modules/MScalarSUN/EMT.hpp \ + Modules/MScalarSUN/TrMag.hpp \ + Modules/MScalarSUN/TwoPointNPR.hpp \ + Modules/MScalarSUN/TransProj.hpp \ Modules/MNoise/TimeDilutedSpinColorDiagonal.hpp \ Modules/MNoise/FullVolumeSpinColorDiagonal.hpp \ - Modules/MUtilities/PrecisionCast.hpp \ - Modules/MUtilities/RandomVectors.hpp \ Modules/MScalar/FreeProp.hpp \ Modules/MScalar/Scalar.hpp \ Modules/MScalar/ChargedProp.hpp \ - Modules/MNPR/Bilinear.hpp \ - Modules/MNPR/Amputate.hpp \ - Modules/MNPR/FourQuark.hpp \ - Modules/MAction/DWF.hpp \ - Modules/MAction/MobiusDWF.hpp \ Modules/MAction/Wilson.hpp \ + Modules/MAction/ScaledDWF.hpp \ + Modules/MAction/MobiusDWF.hpp \ Modules/MAction/WilsonClover.hpp \ Modules/MAction/ZMobiusDWF.hpp \ - Modules/MAction/ScaledDWF.hpp \ - Modules/MScalarSUN/StochFreeField.hpp \ - Modules/MScalarSUN/TwoPointNPR.hpp \ - Modules/MScalarSUN/Div.hpp \ - Modules/MScalarSUN/TrMag.hpp \ - Modules/MScalarSUN/EMT.hpp \ - Modules/MScalarSUN/TwoPoint.hpp \ - Modules/MScalarSUN/TrPhi.hpp \ - Modules/MScalarSUN/Utils.hpp \ - Modules/MScalarSUN/TransProj.hpp \ - Modules/MScalarSUN/Grad.hpp \ - Modules/MScalarSUN/TrKinetic.hpp \ + Modules/MAction/DWF.hpp \ + Modules/MGauge/UnitEm.hpp \ + Modules/MGauge/Electrify.hpp \ + Modules/MGauge/StoutSmearing.hpp \ + Modules/MGauge/Random.hpp \ + Modules/MGauge/FundtoHirep.hpp \ + Modules/MGauge/GaugeFix.hpp \ + Modules/MGauge/Unit.hpp \ + Modules/MGauge/StochEm.hpp \ + Modules/MUtilities/RandomVectors.hpp \ + Modules/MUtilities/PrecisionCast.hpp \ + Modules/MIO/LoadCosmHol.hpp \ + Modules/MIO/LoadA2AVectors.hpp \ Modules/MIO/LoadEigenPack.hpp \ Modules/MIO/LoadNersc.hpp \ - Modules/MIO/LoadA2AVectors.hpp \ - Modules/MIO/LoadCosmHol.hpp \ + Modules/MIO/LoadBinary.hpp \ Modules/MIO/LoadCoarseEigenPack.hpp \ - Modules/MIO/LoadBinary.hpp + Modules/MContraction/WeakEye3pt.hpp \ + Modules/MContraction/Gamma3pt.hpp \ + Modules/MContraction/A2AMesonField.hpp \ + Modules/MContraction/A2ALoop.hpp \ + Modules/MContraction/WeakNonEye3pt.hpp \ + Modules/MContraction/DiscLoop.hpp \ + Modules/MContraction/A2AAslashField.hpp \ + Modules/MContraction/Baryon.hpp \ + Modules/MContraction/Meson.hpp \ + Modules/MNPR/FourQuark.hpp \ + Modules/MNPR/Bilinear.hpp \ + Modules/MNPR/Amputate.hpp \ + Modules/MSolver/A2AAslashVectors.hpp \ + Modules/MSolver/RBPrecCG.hpp \ + Modules/MSolver/Guesser.hpp \ + Modules/MSolver/LocalCoherenceLanczos.hpp \ + Modules/MSolver/A2AVectors.hpp \ + Modules/MSolver/MixedPrecisionRBPrecCG.hpp \ + Modules/MFermion/FreeProp.hpp \ + Modules/MFermion/GaugeProp.hpp \ + Modules/MSink/Smear.hpp \ + Modules/MSink/Point.hpp From e43d59045ef3993a2a8fc464c8f055d7087b8b3d Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Thu, 23 May 2019 17:33:32 +0100 Subject: [PATCH 02/18] add option mom to MSource::Gauss --- Hadrons/Modules/MSource/Gauss.hpp | 32 ++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index 0a8c2c1a..f29a5386 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -9,7 +9,8 @@ BEGIN_HADRONS_NAMESPACE /****************************************************************************** * Gauss * - * result[n] = 1/(sqrt(2*pi)*width)^dim*exp(-|n|^2/(2*width^2)) * + * result[n] = 1/(sqrt(2*pi)*width)^dim * + * * exp(-|n-position|^2/(2*width^2) + i n.mom) * * where: * * n=(n[0],n[1],...,n[dim-1]) (lattice coordinate) * * dim=Nd-1 * @@ -21,6 +22,7 @@ class GaussPar: Serializable public: GRID_SERIALIZABLE_CLASS_MEMBERS(GaussPar, std::string, position, + std::string, mom, double, width); }; @@ -41,6 +43,7 @@ public: virtual void execute(void); private: std::vector position_; + std::vector mom_; }; MODULE_REGISTER_TMP(Gauss, TGauss, MSource); @@ -75,7 +78,21 @@ std::vector TGauss::getOutput(void) template void TGauss::setup(void) { - + auto parse_vector = [](const std::string &momentum, int dim, + const std::string &desc) + { + std::vector res = strToVec(momentum); + if(res.size() != dim) { + HADRONS_ERROR(Size, desc + " has " + std::to_string(res.size()) + + " instead of " + std::to_string(dim) + " components"); + } + return res; + }; + position_ = parse_vector(par().position, env().getNd()-1, "position"); + mom_ = parse_vector(par().mom, env().getNd()-1, "momentum"); + + envCreateLat(LatticeComplex, getName()); + envTmpLat(LatticeComplex, "component"); } // execution /////////////////////////////////////////////////////////////////// @@ -86,17 +103,18 @@ void TGauss::execute(void) envGetTmp(LatticeComplex, component); const int dim=env().getNd()-1; const double fact=-0.5/std::pow(par().width,2); - const std::vector latt_size { env().getGrid()->FullDimensions() }; + Complex i(0.0, 1.0); - //exp(fact*|n|^2) + //exp(fact*|n|^2 +i n.mom) rho=zero; for(int mu=0; mu(mom_[mu])/env().getDim(mu)))*component; //FIXME: the next three lines are very inefficient... // should not need any communication (Cshift) here - assert(latt_size[mu]%2==0); - component-=Complex(latt_size[mu]/2-1); - component=Cshift(component, mu, latt_size[mu]/2-1 -position_[mu]); + assert(env().getDim(mu)%2==0); + component-=Complex(env().getDim(mu)/2-1); + component=Cshift(component, mu, env().getDim(mu)/2-1 -position_[mu]); rho+=component*component*fact; } rho=exp(rho); From ab2e5f88cd902d64758b29471dff11048b9083a1 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Fri, 24 May 2019 15:57:30 +0100 Subject: [PATCH 03/18] add fields as input (for scheduler) --- Hadrons/Modules/MSource/Convolution.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index c8d06772..d0a169e0 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -54,7 +54,7 @@ TConvolution::TConvolution(const std::string name) template std::vector TConvolution::getInput(void) { - std::vector in; + std::vector in = {par().field1, par().field2}; return in; } From 6b27369ade5020e77fd87c4f79af15ef1dcfc7e4 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Fri, 24 May 2019 16:07:08 +0100 Subject: [PATCH 04/18] MSource::Convolution use type PropagatorField --- Hadrons/Modules/MSource/Convolution.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index d0a169e0..986a058b 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -71,7 +71,7 @@ std::vector TConvolution::getOutput(void) template void TConvolution::setup(void) { - envCreateLat(LatticeFermion, getName()); + envCreateLat(PropagatorField, getName()); envTmpLat(LatticeComplex, "momfield1"); envTmp(FFT, "fft", 1, env().getGrid()); } @@ -81,8 +81,8 @@ template void TConvolution::execute(void) { auto &field1 = envGet(LatticeComplex, par().field1); - auto &field2 = envGet(LatticeFermion, par().field2); - auto &out = envGet(LatticeFermion, getName()); + auto &field2 = envGet(PropagatorField, par().field2); + auto &out = envGet(PropagatorField, getName()); envGetTmp(LatticeComplex, momfield1); envGetTmp(FFT, fft); From 4e52e46a2c368dfc0e8df6fd46ace330f71a4cd5 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Fri, 24 May 2019 20:16:09 +0100 Subject: [PATCH 05/18] MSource::Gauss fix missing factor --- Hadrons/Modules/MSource/Gauss.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index f29a5386..c2534e1e 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -10,9 +10,10 @@ BEGIN_HADRONS_NAMESPACE /****************************************************************************** * Gauss * * result[n] = 1/(sqrt(2*pi)*width)^dim * - * * exp(-|n-position|^2/(2*width^2) + i n.mom) * + * * exp(-|n-position|^2/(2*width^2) + i p.n) * * where: * * n=(n[0],n[1],...,n[dim-1]) (lattice coordinate) * + * p[i]=2*pi/L[i]*mom[i] * * dim=Nd-1 * ******************************************************************************/ BEGIN_MODULE_NAMESPACE(MSource) @@ -103,13 +104,13 @@ void TGauss::execute(void) envGetTmp(LatticeComplex, component); const int dim=env().getNd()-1; const double fact=-0.5/std::pow(par().width,2); - Complex i(0.0, 1.0); + const Complex i(0.0, 1.0); //exp(fact*|n|^2 +i n.mom) rho=zero; for(int mu=0; mu(mom_[mu])/env().getDim(mu)))*component; + rho+=(i*(mom_[mu]*2*M_PI/env().getDim(mu)))*component; //FIXME: the next three lines are very inefficient... // should not need any communication (Cshift) here assert(env().getDim(mu)%2==0); From 6064f96fdecc7ed579f179f5013bef94b31acefd Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Fri, 24 May 2019 20:18:37 +0100 Subject: [PATCH 06/18] MSource::Gauss remove superfluous comment --- Hadrons/Modules/MSource/Gauss.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index c2534e1e..571d2cf0 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -106,7 +106,6 @@ void TGauss::execute(void) const double fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); - //exp(fact*|n|^2 +i n.mom) rho=zero; for(int mu=0; mu Date: Tue, 28 May 2019 17:26:55 +0100 Subject: [PATCH 07/18] move momentum phase from MSource::Gauss to MSource::Convolution --- Hadrons/Modules/MSource/Convolution.hpp | 22 ++++++++++++++++++++-- Hadrons/Modules/MSource/Gauss.hpp | 24 +++++++----------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index 986a058b..3454697d 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -17,14 +17,16 @@ class ConvolutionPar: Serializable public: GRID_SERIALIZABLE_CLASS_MEMBERS(ConvolutionPar, std::string, field1, - std::string, field2); + std::string, field2, + std::string, mom); }; template class TConvolution: public Module { public: - BASIC_TYPE_ALIASES(FImpl,); + //BASIC_TYPE_ALIASES(FImpl,); + FERM_TYPE_ALIASES(FImpl,); public: // constructor TConvolution(const std::string name); @@ -37,9 +39,12 @@ public: virtual void setup(void); // execution virtual void execute(void); +private: + std::vector mom_; }; MODULE_REGISTER_TMP(Convolution, TConvolution, MSource); +//MODULE_REGISTER_TMP(ScalarConvolution, TConvolution, MSource); /****************************************************************************** * TConvolution implementation * @@ -71,6 +76,13 @@ std::vector TConvolution::getOutput(void) template void TConvolution::setup(void) { + mom_ = strToVec(par().mom); + if(mom_.size() != env().getNd()-1) { + HADRONS_ERROR(Size, std::string("momentum has ") + + std::to_string(mom_.size()) + " instead of " + + std::to_string(env().getNd()-1) + " components"); + } + envCreateLat(PropagatorField, getName()); envTmpLat(LatticeComplex, "momfield1"); envTmp(FFT, "fft", 1, env().getGrid()); @@ -98,6 +110,12 @@ void TConvolution::execute(void) out=momfield1*out; stopTimer("momentum-space multiplication"); + startTimer("adding momentum"); + for(int mu=0; mu position_; - std::vector mom_; }; MODULE_REGISTER_TMP(Gauss, TGauss, MSource); @@ -79,18 +76,12 @@ std::vector TGauss::getOutput(void) template void TGauss::setup(void) { - auto parse_vector = [](const std::string &momentum, int dim, - const std::string &desc) - { - std::vector res = strToVec(momentum); - if(res.size() != dim) { - HADRONS_ERROR(Size, desc + " has " + std::to_string(res.size()) - + " instead of " + std::to_string(dim) + " components"); - } - return res; - }; - position_ = parse_vector(par().position, env().getNd()-1, "position"); - mom_ = parse_vector(par().mom, env().getNd()-1, "momentum"); + position_ = strToVec(par().position); + if(position_.size() != env().getNd()-1) { + HADRONS_ERROR(Size, std::string("position has ") + + std::to_string(position_.size()) + " instead of " + + std::to_string(env().getNd()-1) + " components"); + } envCreateLat(LatticeComplex, getName()); envTmpLat(LatticeComplex, "component"); @@ -109,7 +100,6 @@ void TGauss::execute(void) rho=zero; for(int mu=0; mu Date: Wed, 29 May 2019 16:06:10 +0100 Subject: [PATCH 08/18] MSource::Convolution fix sign in Momentum --- Hadrons/Modules/MSource/Convolution.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index 3454697d..863b4295 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -110,11 +110,15 @@ void TConvolution::execute(void) out=momfield1*out; stopTimer("momentum-space multiplication"); - startTimer("adding momentum"); - for(int mu=0; mu Date: Wed, 29 May 2019 16:25:45 +0100 Subject: [PATCH 09/18] MSource::Gauss and MSource::Convolution: change LatticeComplex to ComplexField --- Hadrons/Modules/MSource/Convolution.hpp | 6 +++--- Hadrons/Modules/MSource/Gauss.hpp | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index 863b4295..65621a09 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -84,7 +84,7 @@ void TConvolution::setup(void) } envCreateLat(PropagatorField, getName()); - envTmpLat(LatticeComplex, "momfield1"); + envTmpLat(ComplexField, "momfield1"); envTmp(FFT, "fft", 1, env().getGrid()); } @@ -92,10 +92,10 @@ void TConvolution::setup(void) template void TConvolution::execute(void) { - auto &field1 = envGet(LatticeComplex, par().field1); + auto &field1 = envGet(ComplexField, par().field1); auto &field2 = envGet(PropagatorField, par().field2); auto &out = envGet(PropagatorField, getName()); - envGetTmp(LatticeComplex, momfield1); + envGetTmp(ComplexField, momfield1); envGetTmp(FFT, fft); std::vector mask(env().getNd(), 1); diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index 916a9a52..d213b73b 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -28,6 +28,7 @@ public: template class TGauss: public Module { + BASIC_TYPE_ALIASES(FImpl,); public: // constructor TGauss(const std::string name); @@ -83,16 +84,16 @@ void TGauss::setup(void) + std::to_string(env().getNd()-1) + " components"); } - envCreateLat(LatticeComplex, getName()); - envTmpLat(LatticeComplex, "component"); + envCreateLat(ComplexField, getName()); + envTmpLat(ComplexField, "component"); } // execution /////////////////////////////////////////////////////////////////// template void TGauss::execute(void) { - auto &rho = envGet(LatticeComplex, getName()); - envGetTmp(LatticeComplex, component); + auto &rho = envGet(ComplexField, getName()); + envGetTmp(ComplexField, component); const int dim=env().getNd()-1; const double fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); From f569813b602af6e305e2aa44666a0c9fbb22294d Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Wed, 29 May 2019 17:07:07 +0100 Subject: [PATCH 10/18] remove commented code --- Hadrons/Modules/MSource/Convolution.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index 65621a09..efb0fae0 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -25,7 +25,6 @@ template class TConvolution: public Module { public: - //BASIC_TYPE_ALIASES(FImpl,); FERM_TYPE_ALIASES(FImpl,); public: // constructor @@ -44,7 +43,6 @@ private: }; MODULE_REGISTER_TMP(Convolution, TConvolution, MSource); -//MODULE_REGISTER_TMP(ScalarConvolution, TConvolution, MSource); /****************************************************************************** * TConvolution implementation * From 8d540a4e85424d29afdc99f1a415b4bba2927d58 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sat, 1 Jun 2019 23:56:14 +0100 Subject: [PATCH 11/18] MSource::Gauss add mom parameter + avoid Cshifts --- Hadrons/Modules/MSource/Gauss.hpp | 81 +++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 19 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index d213b73b..ce5b8cfe 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -11,6 +11,7 @@ BEGIN_HADRONS_NAMESPACE * Gauss * * result[n] = 1/(sqrt(2*pi)*width)^dim * * * exp(-|n-position|^2/(2*width^2)) * + * * exp(i*2*pi/L*mom*n) * * where: * * n=(n[0],n[1],...,n[dim-1]) (lattice coordinate) * * dim=Nd-1 * @@ -22,6 +23,7 @@ class GaussPar: Serializable public: GRID_SERIALIZABLE_CLASS_MEMBERS(GaussPar, std::string, position, + std::string, mom, double, width); }; @@ -43,9 +45,11 @@ public: virtual void execute(void); private: std::vector position_; + std::vector mom_; }; MODULE_REGISTER_TMP(Gauss, TGauss, MSource); +MODULE_REGISTER_TMP(ScalarGauss, TGauss, MSource); /****************************************************************************** * TGauss implementation * @@ -77,40 +81,79 @@ std::vector TGauss::getOutput(void) template void TGauss::setup(void) { - position_ = strToVec(par().position); - if(position_.size() != env().getNd()-1) { - HADRONS_ERROR(Size, std::string("position has ") - + std::to_string(position_.size()) + " instead of " - + std::to_string(env().getNd()-1) + " components"); - } + auto parse_vector = [](const std::string &vec, int dim, + const std::string &desc) + { + std::vector res = strToVec(vec); + if(res.size() != dim) { + HADRONS_ERROR(Size, desc + " has " + + std::to_string(res.size()) + " instead of " + + std::to_string(dim) + " components"); + } + return res; + }; + position_ = parse_vector(par().position, env().getNd()-1, "position"); + mom_ = parse_vector(par().mom, env().getNd(), "momentum"); - envCreateLat(ComplexField, getName()); + envCreateLat(PropagatorField, getName()); envTmpLat(ComplexField, "component"); + envTmpLat(ComplexField, "ScalarRho"); + envTmp(LatticeInteger, "compHelper", 1, envGetGrid(ComplexField)); } // execution /////////////////////////////////////////////////////////////////// template void TGauss::execute(void) { - auto &rho = envGet(ComplexField, getName()); + auto &rho = envGet(PropagatorField, getName()); envGetTmp(ComplexField, component); + envGetTmp(ComplexField, ScalarRho); + envGetTmp(LatticeInteger, compHelper); const int dim=env().getNd()-1; - const double fact=-0.5/std::pow(par().width,2); + const Real fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); + const SitePropagator idMat=[](){ SitePropagator s; s=1.; return s; }(); - rho=zero; + ScalarRho=zero; for(int mu=0; mu=0 && position_[mu](std::pow(sqrt(2*M_PI)*par().width,dim)); + const int Lmu=env().getDim(mu); + const int LmuHalf=Lmu/2; + const int posMu=position_[mu]; + const vTInteger vTLmuHalf=LmuHalf; + const vTInteger vTposMu=posMu; + + LatticeCoordinate(component, mu); + LatticeCoordinate(compHelper, mu); + + //spatial dimensions of momentum phase + ScalarRho+=(i*(mom_[mu]*2*M_PI/Lmu))*component; + + //Gauss distribution + component-=Complex(posMu); + compHelper-=vTposMu; + if(posMuvTLmuHalf), + component-Complex(Lmu), + component); + } + else + { + component=where((compHelper<=-vTLmuHalf), + component+Complex(Lmu), + component); + } + ScalarRho+=component*component*fact; + } + + //time component of momentum phase + LatticeCoordinate(component, dim); + ScalarRho+=(i*(mom_.at(dim)*2*M_PI/env().getDim(dim)))*component; + + rho=(exp(ScalarRho)*Complex(std::pow(sqrt(2*M_PI)*par().width,dim)))*idMat; } END_MODULE_NAMESPACE From 4bca2c17cef5e0e271e56bac0ac5c6b49178b1ec Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 00:04:07 +0100 Subject: [PATCH 12/18] MSource::Convolution rename parameters --- Hadrons/Modules/MSource/Convolution.hpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index efb0fae0..ee1f6f5a 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -16,8 +16,8 @@ class ConvolutionPar: Serializable { public: GRID_SERIALIZABLE_CLASS_MEMBERS(ConvolutionPar, - std::string, field1, - std::string, field2, + std::string, field, + std::string, filter, std::string, mom); }; @@ -57,7 +57,7 @@ TConvolution::TConvolution(const std::string name) template std::vector TConvolution::getInput(void) { - std::vector in = {par().field1, par().field2}; + std::vector in = {par().field, par().filter}; return in; } @@ -82,7 +82,7 @@ void TConvolution::setup(void) } envCreateLat(PropagatorField, getName()); - envTmpLat(ComplexField, "momfield1"); + envTmpLat(ComplexField, "momfield"); envTmp(FFT, "fft", 1, env().getGrid()); } @@ -90,22 +90,22 @@ void TConvolution::setup(void) template void TConvolution::execute(void) { - auto &field1 = envGet(ComplexField, par().field1); - auto &field2 = envGet(PropagatorField, par().field2); + auto &filter = envGet(ComplexField, par().filter); + auto &field = envGet(PropagatorField, par().field); auto &out = envGet(PropagatorField, getName()); - envGetTmp(ComplexField, momfield1); + envGetTmp(ComplexField, momfield); envGetTmp(FFT, fft); std::vector mask(env().getNd(), 1); mask.back()=0; //transform only the spatial dimensions startTimer("Fourier transform"); - fft.FFT_dim_mask(momfield1, field1, mask, FFT::forward); - fft.FFT_dim_mask(out, field2, mask, FFT::forward); + fft.FFT_dim_mask(momfield, filter, mask, FFT::forward); + fft.FFT_dim_mask(out, field, mask, FFT::forward); stopTimer("Fourier transform"); startTimer("momentum-space multiplication"); - out=momfield1*out; + out=momfield*out; stopTimer("momentum-space multiplication"); startTimer("inserting momentum"); From 7c3f400fc5ab2014086585e6b7f01bfa992e936b Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 00:12:15 +0100 Subject: [PATCH 13/18] MSource::Gauss add parameters tA and tB --- Hadrons/Modules/MSource/Gauss.cc | 1 + Hadrons/Modules/MSource/Gauss.hpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Hadrons/Modules/MSource/Gauss.cc b/Hadrons/Modules/MSource/Gauss.cc index 89fcb8df..5b469f70 100644 --- a/Hadrons/Modules/MSource/Gauss.cc +++ b/Hadrons/Modules/MSource/Gauss.cc @@ -5,3 +5,4 @@ using namespace Hadrons; using namespace MSource; template class Grid::Hadrons::MSource::TGauss; +template class Grid::Hadrons::MSource::TGauss; diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index ce5b8cfe..12f58c41 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -24,6 +24,8 @@ public: GRID_SERIALIZABLE_CLASS_MEMBERS(GaussPar, std::string, position, std::string, mom, + int, tA, + int, tB, double, width); }; @@ -152,6 +154,9 @@ void TGauss::execute(void) //time component of momentum phase LatticeCoordinate(component, dim); ScalarRho+=(i*(mom_.at(dim)*2*M_PI/env().getDim(dim)))*component; + ScalarRho=where((component>=par().tA && component<=tB), + ScalarRho, + 0.*ScalarRho); rho=(exp(ScalarRho)*Complex(std::pow(sqrt(2*M_PI)*par().width,dim)))*idMat; } From fc6e584f2c5056160ab0ab599d88973c40d80d58 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 11:52:05 +0100 Subject: [PATCH 14/18] MSource::Gauss fix sign in exponent of normalization + use correct types --- Hadrons/Modules/MSource/Gauss.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index 12f58c41..2519569e 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -115,6 +115,8 @@ void TGauss::execute(void) const Real fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); const SitePropagator idMat=[](){ SitePropagator s; s=1.; return s; }(); + const vTInteger vTtA=par().tA; + const vTInteger vTtB=par().tB; ScalarRho=zero; for(int mu=0; mu::execute(void) //time component of momentum phase LatticeCoordinate(component, dim); ScalarRho+=(i*(mom_.at(dim)*2*M_PI/env().getDim(dim)))*component; - ScalarRho=where((component>=par().tA && component<=tB), + + //compute scalar result + ScalarRho=exp(ScalarRho)*Complex(std::pow(sqrt(2*M_PI)*par().width,-dim)); + + //select time slices + LatticeCoordinate(compHelper, dim); + ScalarRho=where((compHelper>=vTtA && compHelper<=vTtB), ScalarRho, 0.*ScalarRho); - rho=(exp(ScalarRho)*Complex(std::pow(sqrt(2*M_PI)*par().width,dim)))*idMat; + //compute output field rho + rho=ScalarRho*idMat; } END_MODULE_NAMESPACE From 4bfe678218236256477afc69b5bfb687aa9b3b03 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 12:36:57 +0100 Subject: [PATCH 15/18] MSource::Gauss Integer is unsigned... --- Hadrons/Modules/MSource/Gauss.hpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index 2519569e..347b01f5 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -24,8 +24,8 @@ public: GRID_SERIALIZABLE_CLASS_MEMBERS(GaussPar, std::string, position, std::string, mom, - int, tA, - int, tB, + Integer, tA, + Integer, tB, double, width); }; @@ -115,8 +115,6 @@ void TGauss::execute(void) const Real fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); const SitePropagator idMat=[](){ SitePropagator s; s=1.; return s; }(); - const vTInteger vTtA=par().tA; - const vTInteger vTtB=par().tB; ScalarRho=zero; for(int mu=0; mu::execute(void) const int Lmu=env().getDim(mu); const int LmuHalf=Lmu/2; const int posMu=position_[mu]; - const vTInteger vTLmuHalf=LmuHalf; - const vTInteger vTposMu=posMu; LatticeCoordinate(component, mu); LatticeCoordinate(compHelper, mu); @@ -137,16 +133,15 @@ void TGauss::execute(void) //Gauss distribution component-=Complex(posMu); - compHelper-=vTposMu; - if(posMuvTLmuHalf), + component=where((compHelper>Integer(posMu+LmuHalf)), component-Complex(Lmu), component); } else { - component=where((compHelper<=-vTLmuHalf), + component=where((compHelper<=Integer(posMu-LmuHalf)), component+Complex(Lmu), component); } @@ -162,7 +157,7 @@ void TGauss::execute(void) //select time slices LatticeCoordinate(compHelper, dim); - ScalarRho=where((compHelper>=vTtA && compHelper<=vTtB), + ScalarRho=where((compHelper>=par().tA && compHelper<=par().tB), ScalarRho, 0.*ScalarRho); From 9c18638b241008d2f8748f81615e6f6c3551d7c5 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 13:41:39 +0100 Subject: [PATCH 16/18] MSource::Convolution let mom argument be Nd dimensional --- Hadrons/Modules/MSource/Convolution.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index ee1f6f5a..2689ab44 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -75,10 +75,10 @@ template void TConvolution::setup(void) { mom_ = strToVec(par().mom); - if(mom_.size() != env().getNd()-1) { + if(mom_.size() != env().getNd()) { HADRONS_ERROR(Size, std::string("momentum has ") + std::to_string(mom_.size()) + " instead of " - + std::to_string(env().getNd()-1) + " components"); + + std::to_string(env().getNd()) + " components"); } envCreateLat(PropagatorField, getName()); @@ -109,7 +109,7 @@ void TConvolution::execute(void) stopTimer("momentum-space multiplication"); startTimer("inserting momentum"); - for(int mu=0; mu::execute(void) startTimer("Fourier transform"); fft.FFT_dim_mask(out, out, mask, FFT::backward); stopTimer("Fourier transform"); + {std::ofstream f("tmp_conv"); f << out;} } END_MODULE_NAMESPACE From 620965781e69fdc4f5b76bf9a9ea36c913de6f4b Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Sun, 2 Jun 2019 13:44:19 +0100 Subject: [PATCH 17/18] MSource::Convolution remove test code --- Hadrons/Modules/MSource/Convolution.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Hadrons/Modules/MSource/Convolution.hpp b/Hadrons/Modules/MSource/Convolution.hpp index 2689ab44..646b9417 100644 --- a/Hadrons/Modules/MSource/Convolution.hpp +++ b/Hadrons/Modules/MSource/Convolution.hpp @@ -121,7 +121,6 @@ void TConvolution::execute(void) startTimer("Fourier transform"); fft.FFT_dim_mask(out, out, mask, FFT::backward); stopTimer("Fourier transform"); - {std::ofstream f("tmp_conv"); f << out;} } END_MODULE_NAMESPACE From e3966aa49babbde5782e345a539d678f01cb32cb Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Mon, 12 Aug 2019 14:57:11 +0100 Subject: [PATCH 18/18] Fix compiling of MSource::Gauss for single precision --- Hadrons/Modules/MSource/Gauss.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Hadrons/Modules/MSource/Gauss.hpp b/Hadrons/Modules/MSource/Gauss.hpp index 347b01f5..80111b75 100644 --- a/Hadrons/Modules/MSource/Gauss.hpp +++ b/Hadrons/Modules/MSource/Gauss.hpp @@ -114,6 +114,7 @@ void TGauss::execute(void) const int dim=env().getNd()-1; const Real fact=-0.5/std::pow(par().width,2); const Complex i(0.0, 1.0); + const Real Pi(M_PI); const SitePropagator idMat=[](){ SitePropagator s; s=1.; return s; }(); ScalarRho=zero; @@ -129,7 +130,7 @@ void TGauss::execute(void) LatticeCoordinate(compHelper, mu); //spatial dimensions of momentum phase - ScalarRho+=(i*(mom_[mu]*2*M_PI/Lmu))*component; + ScalarRho+=(i*(mom_[mu]*2*Pi/Lmu))*component; //Gauss distribution component-=Complex(posMu); @@ -150,10 +151,10 @@ void TGauss::execute(void) //time component of momentum phase LatticeCoordinate(component, dim); - ScalarRho+=(i*(mom_.at(dim)*2*M_PI/env().getDim(dim)))*component; + ScalarRho+=(i*(mom_.at(dim)*2*Pi/env().getDim(dim)))*component; //compute scalar result - ScalarRho=exp(ScalarRho)*Complex(std::pow(sqrt(2*M_PI)*par().width,-dim)); + ScalarRho=exp(ScalarRho)*Complex(std::pow(sqrt(2*Pi)*par().width,-dim)); //select time slices LatticeCoordinate(compHelper, dim);