From 97843e2b5818667ab5f6802003bb4c04d6076503 Mon Sep 17 00:00:00 2001 From: Antonin Portelli Date: Thu, 5 Jan 2017 14:58:55 +0000 Subject: [PATCH] Hadrons: free scalar buffer fix and output --- extras/Hadrons/Modules/MScalar/FreeProp.cc | 34 ++++++++++++++++++--- extras/Hadrons/Modules/MScalar/FreeProp.hpp | 5 +-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/extras/Hadrons/Modules/MScalar/FreeProp.cc b/extras/Hadrons/Modules/MScalar/FreeProp.cc index 7419a954..ba85e041 100644 --- a/extras/Hadrons/Modules/MScalar/FreeProp.cc +++ b/extras/Hadrons/Modules/MScalar/FreeProp.cc @@ -1,11 +1,13 @@ #include +#define KERNAME "_" + getName() + "_momKernel" + using namespace Grid; using namespace Hadrons; using namespace MScalar; /****************************************************************************** -* TFreeProp implementation * +* TFreeProp implementation * ******************************************************************************/ // constructor ///////////////////////////////////////////////////////////////// TFreeProp::TFreeProp(const std::string name) @@ -30,6 +32,12 @@ std::vector TFreeProp::getOutput(void) // setup /////////////////////////////////////////////////////////////////////// void TFreeProp::setup(void) { + std::string kerName = KERNAME; + + if (!env().hasRegisteredObject(kerName)) + { + env().registerLattice(kerName); + } env().registerLattice(getName()); } @@ -39,13 +47,13 @@ void TFreeProp::execute(void) ScalarField &prop = *env().createLattice(getName()); ScalarField &source = *env().getObject(par().source); ScalarField *momKernel; - std::string kerName = "_" + getName() + "_momKernel"; - + std::string kerName = KERNAME; + if (!env().hasCreatedObject(kerName)) { LOG(Message) << "Caching momentum space free scalar propagator" - << "(mass= " << par().mass << ")..." << std::endl; - momKernel = env().template createLattice(kerName); + << " (mass= " << par().mass << ")..." << std::endl; + momKernel = env().createLattice(kerName); Scalar::MomentumSpacePropagator(*momKernel, par().mass); } else @@ -54,4 +62,20 @@ void TFreeProp::execute(void) } LOG(Message) << "Computing free scalar propagator..." << std::endl; Scalar::FreePropagator(source, prop, *momKernel); + + if (!par().output.empty()) + { + TextWriter writer(par().output + "." + + std::to_string(env().getTrajectory())); + std::vector buf; + std::vector result; + + sliceSum(prop, buf, Tp); + result.resize(buf.size()); + for (unsigned int t = 0; t < buf.size(); ++t) + { + result[t] = TensorRemove(buf[t]); + } + write(writer, "prop", result); + } } diff --git a/extras/Hadrons/Modules/MScalar/FreeProp.hpp b/extras/Hadrons/Modules/MScalar/FreeProp.hpp index 6a0cd930..81bb8121 100644 --- a/extras/Hadrons/Modules/MScalar/FreeProp.hpp +++ b/extras/Hadrons/Modules/MScalar/FreeProp.hpp @@ -8,7 +8,7 @@ BEGIN_HADRONS_NAMESPACE /****************************************************************************** - * FreeProp * + * FreeProp * ******************************************************************************/ BEGIN_MODULE_NAMESPACE(MScalar) @@ -17,7 +17,8 @@ class FreePropPar: Serializable public: GRID_SERIALIZABLE_CLASS_MEMBERS(FreePropPar, std::string, source, - double, mass); + double, mass, + std::string, output); }; class TFreeProp: public Module