mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-09 23:45:36 +00:00
Hadrons: test cleaning
This commit is contained in:
parent
2eb584fdf0
commit
9c31305b8d
@ -1,665 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons.hpp
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Andrew Lawson <andrew.lawson1991@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include <Hadrons/Application.hpp>
|
||||
#include <Hadrons/Modules.hpp>
|
||||
|
||||
using namespace Grid;
|
||||
using namespace Hadrons;
|
||||
|
||||
/*******************************************************************************
|
||||
* Macros to reduce code duplication.
|
||||
******************************************************************************/
|
||||
// Common initialisation
|
||||
#define HADRONS_DEFAULT_INIT \
|
||||
Grid_init(&argc, &argv); \
|
||||
HadronsLogError.Active(GridLogError.isActive()); \
|
||||
HadronsLogWarning.Active(GridLogWarning.isActive()); \
|
||||
HadronsLogMessage.Active(GridLogMessage.isActive()); \
|
||||
HadronsLogIterative.Active(GridLogIterative.isActive()); \
|
||||
HadronsLogDebug.Active(GridLogDebug.isActive()); \
|
||||
LOG(Message) << "Grid initialized" << std::endl;
|
||||
|
||||
#define HADRONS_DEFAULT_GLOBALS(application) \
|
||||
{ \
|
||||
Application::GlobalPar globalPar; \
|
||||
globalPar.trajCounter.start = 1500; \
|
||||
globalPar.trajCounter.end = 1520; \
|
||||
globalPar.trajCounter.step = 20; \
|
||||
globalPar.runId = "test"; \
|
||||
globalPar.genetic.maxGen = 1000; \
|
||||
globalPar.genetic.maxCstGen = 200; \
|
||||
globalPar.genetic.popSize = 20; \
|
||||
globalPar.genetic.mutationRate = .1; \
|
||||
application.setPar(globalPar); \
|
||||
}
|
||||
|
||||
// Useful definitions
|
||||
#define ZERO_MOM "0. 0. 0. 0."
|
||||
#define INIT_INDEX(s, n) (std::string(s) + "_" + std::to_string(n))
|
||||
#define ADD_INDEX(s, n) (s + "_" + std::to_string(n))
|
||||
#define LABEL_3PT(s, t1, t2) ADD_INDEX(INIT_INDEX(s, t1), t2)
|
||||
#define LABEL_4PT(s, t1, t2, t3) ADD_INDEX(ADD_INDEX(INIT_INDEX(s, t1), t2), t3)
|
||||
#define LABEL_4PT_NOISE(s, t1, t2, t3, nn) ADD_INDEX(ADD_INDEX(ADD_INDEX(INIT_INDEX(s, t1), t2), t3), nn)
|
||||
#define LABEL_5D(s) s + "_5d";
|
||||
|
||||
// Wall source/sink macros
|
||||
#define NAME_3MOM_WALL_SOURCE(t, mom) ("wall_" + std::to_string(t) + "_" + mom)
|
||||
#define NAME_WALL_SOURCE(t) NAME_3MOM_WALL_SOURCE(t, ZERO_MOM)
|
||||
#define NAME_POINT_SOURCE(pos) ("point_" + pos)
|
||||
|
||||
// Meson module "gammas" special values
|
||||
#define ALL_GAMMAS "all"
|
||||
|
||||
#define MAKE_3MOM_WALL_PROP(tW, mom, propName, solver)\
|
||||
{\
|
||||
std::string srcName = NAME_3MOM_WALL_SOURCE(tW, mom);\
|
||||
makeWallSource(application, srcName, tW, mom);\
|
||||
makePropagator(application, propName, srcName, solver);\
|
||||
}
|
||||
|
||||
#define MAKE_WALL_PROP(tW, propName, solver)\
|
||||
MAKE_3MOM_WALL_PROP(tW, ZERO_MOM, propName, solver)
|
||||
|
||||
// Sequential source macros
|
||||
#define MAKE_SEQUENTIAL_PROP(tS, qSrc, mom, seqPropName, solver, gamma)\
|
||||
{\
|
||||
std::string srcName = seqPropName + "_src";\
|
||||
makeSequentialSource(application, srcName, qSrc, tS, gamma, mom);\
|
||||
makePropagator(application, seqPropName, srcName, solver);\
|
||||
}
|
||||
|
||||
// Point source macros
|
||||
#define MAKE_POINT_PROP(pos, propName, solver)\
|
||||
{\
|
||||
std::string srcName = NAME_POINT_SOURCE(pos);\
|
||||
makePointSource(application, srcName, pos);\
|
||||
makePropagator(application, propName, srcName, solver);\
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Action setups.
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeWilsonAction
|
||||
* Parameters: application - main application that stores modules.
|
||||
* actionName - name of action module to create.
|
||||
* gaugeField - gauge field module.
|
||||
* mass - quark mass.
|
||||
* boundary - fermion boundary conditions (default to periodic
|
||||
* space, antiperiodic time).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeWilsonAction(Application &application, std::string actionName,
|
||||
std::string &gaugeField, double mass,
|
||||
std::string boundary = "1 1 1 -1")
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(actionName)))
|
||||
{
|
||||
MAction::Wilson::Par actionPar;
|
||||
actionPar.gauge = gaugeField;
|
||||
actionPar.mass = mass;
|
||||
actionPar.boundary = boundary;
|
||||
actionPar.twist = "0. 0. 0. 0.";
|
||||
application.createModule<MAction::Wilson>(actionName, actionPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeDWFAction
|
||||
* Parameters: application - main application that stores modules.
|
||||
* actionName - name of action module to create.
|
||||
* gaugeField - gauge field module.
|
||||
* mass - quark mass.
|
||||
* M5 - domain wall height.
|
||||
* Ls - fifth dimension extent.
|
||||
* boundary - fermion boundary conditions (default to periodic
|
||||
* space, antiperiodic time).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeDWFAction(Application &application, std::string actionName,
|
||||
std::string &gaugeField, double mass, double M5,
|
||||
unsigned int Ls, std::string boundary = "1 1 1 -1")
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(actionName)))
|
||||
{
|
||||
MAction::DWF::Par actionPar;
|
||||
actionPar.gauge = gaugeField;
|
||||
actionPar.Ls = Ls;
|
||||
actionPar.M5 = M5;
|
||||
actionPar.mass = mass;
|
||||
actionPar.boundary = boundary;
|
||||
actionPar.twist = "0. 0. 0. 0.";
|
||||
application.createModule<MAction::DWF>(actionName, actionPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Functions for propagator construction.
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeRBPrecCGSolver
|
||||
* Purpose: Make RBPrecCG solver module for specified action.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* solverName - name of solver module to create.
|
||||
* actionName - action module corresponding to propagators to be
|
||||
* computed.
|
||||
* residual - CG target residual.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeRBPrecCGSolver(Application &application, std::string &solverName,
|
||||
std::string &actionName, double residual = 1e-8)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(solverName)))
|
||||
{
|
||||
MSolver::RBPrecCG::Par solverPar;
|
||||
solverPar.action = actionName;
|
||||
solverPar.residual = residual;
|
||||
solverPar.maxIteration = 10000;
|
||||
application.createModule<MSolver::RBPrecCG>(solverName,
|
||||
solverPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makePointSource
|
||||
* Purpose: Construct point source and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* srcName - name of source module to create.
|
||||
* pos - Position of point source.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makePointSource(Application &application, std::string srcName,
|
||||
std::string pos)
|
||||
{
|
||||
// If the source already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(srcName)))
|
||||
{
|
||||
MSource::Point::Par pointPar;
|
||||
pointPar.position = pos;
|
||||
application.createModule<MSource::Point>(srcName, pointPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeSequentialSource
|
||||
* Purpose: Construct sequential source and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* srcName - name of source module to create.
|
||||
* qSrc - Input quark for sequential inversion.
|
||||
* tS - sequential source timeslice.
|
||||
* mom - momentum insertion (default is zero).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeSequentialSource(Application &application, std::string srcName,
|
||||
std::string qSrc, unsigned int tS,
|
||||
Gamma::Algebra gamma = Gamma::Algebra::GammaT,
|
||||
std::string mom = ZERO_MOM)
|
||||
{
|
||||
// If the source already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(srcName)))
|
||||
{
|
||||
MSource::SeqGamma::Par seqPar;
|
||||
seqPar.q = qSrc;
|
||||
seqPar.tA = tS;
|
||||
seqPar.tB = tS;
|
||||
seqPar.mom = mom;
|
||||
seqPar.gamma = gamma;
|
||||
application.createModule<MSource::SeqGamma>(srcName, seqPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeConservedSequentialSource
|
||||
* Purpose: Construct sequential source with conserved current insertion and
|
||||
* add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* srcName - name of source module to create.
|
||||
* qSrc - Input quark for sequential inversion.
|
||||
* actionName - action corresponding to quark.
|
||||
* tS - sequential source timeslice.
|
||||
* curr - conserved current type to insert.
|
||||
* mu - Lorentz index of current to insert.
|
||||
* mom - momentum insertion (default is zero).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeConservedSequentialSource(Application &application,
|
||||
std::string &srcName,
|
||||
std::string &qSrc,
|
||||
std::string &actionName,
|
||||
unsigned int tS,
|
||||
Current curr,
|
||||
unsigned int mu,
|
||||
std::string mom = ZERO_MOM)
|
||||
{
|
||||
// If the source already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(srcName)))
|
||||
{
|
||||
MSource::SeqConserved::Par seqPar;
|
||||
seqPar.q = qSrc;
|
||||
seqPar.action = actionName;
|
||||
seqPar.tA = tS;
|
||||
seqPar.tB = tS;
|
||||
seqPar.curr_type = curr;
|
||||
seqPar.mu_min = mu;
|
||||
seqPar.mu_min = mu;
|
||||
seqPar.mom = mom;
|
||||
application.createModule<MSource::SeqConserved>(srcName, seqPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeNoiseSource
|
||||
* Parameters: application - main application that stores modules.
|
||||
* srcName - name of source module to create.
|
||||
* tA - lower source timeslice limit.
|
||||
* tB - upper source timeslice limit.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeNoiseSource(Application &application, std::string &srcName,
|
||||
unsigned int tA, unsigned int tB)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(srcName)))
|
||||
{
|
||||
MSource::Z2::Par noisePar;
|
||||
noisePar.tA = tA;
|
||||
noisePar.tB = tB;
|
||||
application.createModule<MSource::Z2>(srcName, noisePar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeWallSource
|
||||
* Purpose: Construct wall source and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* srcName - name of source module to create.
|
||||
* tW - wall source timeslice.
|
||||
* mom - momentum insertion (default is zero).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeWallSource(Application &application, std::string &srcName,
|
||||
unsigned int tW, std::string mom = ZERO_MOM)
|
||||
{
|
||||
// If the source already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(srcName)))
|
||||
{
|
||||
MSource::Wall::Par wallPar;
|
||||
wallPar.tW = tW;
|
||||
wallPar.mom = mom;
|
||||
application.createModule<MSource::Wall>(srcName, wallPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makePointSink
|
||||
* Purpose: Create function for point sink smearing of a propagator.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* propName - name of input propagator.
|
||||
* sinkFnct - name of output sink smearing module.
|
||||
* mom - momentum insertion (default is zero).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makePointSink(Application &application, std::string &sinkFnct,
|
||||
std::string mom = ZERO_MOM)
|
||||
{
|
||||
// If the sink function already exists, don't make it again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(sinkFnct)))
|
||||
{
|
||||
MSink::Point::Par pointPar;
|
||||
pointPar.mom = mom;
|
||||
application.createModule<MSink::Point>(sinkFnct, pointPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: sinkSmear
|
||||
* Purpose: Perform sink smearing of a propagator.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* sinkFnct - sink smearing module.
|
||||
* propName - propagator to smear.
|
||||
* smearedProp - name of output smeared propagator.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void sinkSmear(Application &application, std::string &sinkFnct,
|
||||
std::string &propName, std::string &smearedProp)
|
||||
{
|
||||
// If the propagator has already been smeared, don't smear it again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(smearedProp)))
|
||||
{
|
||||
MSink::Smear::Par smearPar;
|
||||
smearPar.q = propName;
|
||||
smearPar.sink = sinkFnct;
|
||||
application.createModule<MSink::Smear>(smearedProp, smearPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makePropagator
|
||||
* Purpose: Construct source and propagator then add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* propName - name of propagator module to create.
|
||||
* srcName - name of source module to use.
|
||||
* solver - solver to use (default is CG).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makePropagator(Application &application, std::string &propName,
|
||||
std::string &srcName, std::string &solver)
|
||||
{
|
||||
// If the propagator already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(propName)))
|
||||
{
|
||||
MFermion::GaugeProp::Par quarkPar;
|
||||
quarkPar.source = srcName;
|
||||
quarkPar.solver = solver;
|
||||
application.createModule<MFermion::GaugeProp>(propName, quarkPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeLoop
|
||||
* Purpose: Use noise source and inversion result to make loop propagator, then
|
||||
* add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* propName - name of propagator module to create.
|
||||
* srcName - name of noise source module to use.
|
||||
* resName - name of inversion result on given noise source.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeLoop(Application &application, std::string &propName,
|
||||
std::string &srcName, std::string &resName)
|
||||
{
|
||||
// If the loop propagator already exists, don't make the module again.
|
||||
if (!(VirtualMachine::getInstance().hasModule(propName)))
|
||||
{
|
||||
MLoop::NoiseLoop::Par loopPar;
|
||||
loopPar.q = resName;
|
||||
loopPar.eta = srcName;
|
||||
application.createModule<MLoop::NoiseLoop>(propName, loopPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Contraction module creation.
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: mesonContraction
|
||||
* Purpose: Create meson contraction module and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* modName - unique module name.
|
||||
* output - name of output files.
|
||||
* q1 - quark propagator 1.
|
||||
* q2 - quark propagator 2.
|
||||
* sink - sink smearing module.
|
||||
* gammas - gamma insertions at source and sink.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void mesonContraction(Application &application,
|
||||
std::string &modName, std::string &output,
|
||||
std::string &q1, std::string &q2,
|
||||
std::string &sink,
|
||||
std::string gammas = "<Gamma5 Gamma5>")
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MContraction::Meson::Par mesPar;
|
||||
mesPar.output = output;
|
||||
mesPar.q1 = q1;
|
||||
mesPar.q2 = q2;
|
||||
mesPar.sink = sink;
|
||||
mesPar.gammas = gammas;
|
||||
application.createModule<MContraction::Meson>(modName, mesPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: gamma3ptContraction
|
||||
* Purpose: Create gamma3pt contraction module and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* npt - specify n-point correlator (for labelling).
|
||||
* q1 - quark propagator 1, sink smeared.
|
||||
* q2 - quark propagator 2.
|
||||
* q3 - quark propagator 3.
|
||||
* label - unique label to construct module name.
|
||||
* tSnk - sink position of sink for q1.
|
||||
* gamma - gamma insertions between q2 and q3.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void gamma3ptContraction(Application &application, unsigned int npt,
|
||||
std::string &q1, std::string &q2,
|
||||
std::string &q3, std::string &label,
|
||||
unsigned int tSnk = 0,
|
||||
Gamma::Algebra gamma = Gamma::Algebra::Identity)
|
||||
{
|
||||
std::string modName = std::to_string(npt) + "pt_" + label;
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MContraction::Gamma3pt::Par gamma3ptPar;
|
||||
gamma3ptPar.output = std::to_string(npt) + "pt/" + label;
|
||||
gamma3ptPar.q1 = q1;
|
||||
gamma3ptPar.q2 = q2;
|
||||
gamma3ptPar.q3 = q3;
|
||||
gamma3ptPar.tSnk = tSnk;
|
||||
gamma3ptPar.gamma = gamma;
|
||||
application.createModule<MContraction::Gamma3pt>(modName, gamma3ptPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: weakContraction[Eye,NonEye]
|
||||
* Purpose: Create Weak Hamiltonian contraction module for Eye/NonEye topology
|
||||
* and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* npt - specify n-point correlator (for labelling).
|
||||
* q1 - quark propagator 1.
|
||||
* q2 - quark propagator 2.
|
||||
* q3 - quark propagator 3.
|
||||
* q4 - quark propagator 4.
|
||||
* label - unique label to construct module name.
|
||||
* tSnk - time position of sink (for sink smearing).
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
#define HW_CONTRACTION(top) \
|
||||
inline void weakContraction##top(Application &application, unsigned int npt,\
|
||||
std::string &q1, std::string &q2, \
|
||||
std::string &q3, std::string &q4, \
|
||||
std::string &label, unsigned int tSnk = 0)\
|
||||
{\
|
||||
std::string modName = std::to_string(npt) + "pt_" + label;\
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))\
|
||||
{\
|
||||
MContraction::WeakHamiltonian##top::Par weakPar;\
|
||||
weakPar.output = std::to_string(npt) + "pt/" + label;\
|
||||
weakPar.q1 = q1;\
|
||||
weakPar.q2 = q2;\
|
||||
weakPar.q3 = q3;\
|
||||
weakPar.q4 = q4;\
|
||||
weakPar.tSnk = tSnk;\
|
||||
application.createModule<MContraction::WeakHamiltonian##top>(modName, weakPar);\
|
||||
}\
|
||||
}
|
||||
HW_CONTRACTION(Eye) // weakContractionEye
|
||||
HW_CONTRACTION(NonEye) // weakContractionNonEye
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: disc0Contraction
|
||||
* Purpose: Create contraction module for 4pt Weak Hamiltonian + current
|
||||
* disconnected topology for neutral mesons and add to application
|
||||
* module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* q1 - quark propagator 1.
|
||||
* q2 - quark propagator 2.
|
||||
* q3 - quark propagator 3.
|
||||
* q4 - quark propagator 4.
|
||||
* label - unique label to construct module name.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void disc0Contraction(Application &application,
|
||||
std::string &q1, std::string &q2,
|
||||
std::string &q3, std::string &q4,
|
||||
std::string &label)
|
||||
{
|
||||
std::string modName = "4pt_" + label;
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MContraction::WeakNeutral4ptDisc::Par disc0Par;
|
||||
disc0Par.output = "4pt/" + label;
|
||||
disc0Par.q1 = q1;
|
||||
disc0Par.q2 = q2;
|
||||
disc0Par.q3 = q3;
|
||||
disc0Par.q4 = q4;
|
||||
application.createModule<MContraction::WeakNeutral4ptDisc>(modName, disc0Par);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: discLoopContraction
|
||||
* Purpose: Create contraction module for disconnected loop and add to
|
||||
* application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* q_loop - loop quark propagator.
|
||||
* modName - unique module name.
|
||||
* gamma - gamma matrix to use in contraction.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void discLoopContraction(Application &application,
|
||||
std::string &q_loop, std::string &modName,
|
||||
Gamma::Algebra gamma = Gamma::Algebra::Identity)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MContraction::DiscLoop::Par discPar;
|
||||
discPar.output = "disc/" + modName;
|
||||
discPar.q_loop = q_loop;
|
||||
discPar.gamma = gamma;
|
||||
application.createModule<MContraction::DiscLoop>(modName, discPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeWITest
|
||||
* Purpose: Create module to test Ward Identities for conserved current
|
||||
* contractions and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* modName - name of module to create.
|
||||
* propName - 4D quark propagator.
|
||||
* actionName - action used to compute quark propagator.
|
||||
* mass - mass of quark.
|
||||
* Ls - length of 5th dimension (default = 1).
|
||||
* test_axial - whether or not to check PCAC relation.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeWITest(Application &application, std::string &modName,
|
||||
std::string &propName, std::string &actionName,
|
||||
double mass, unsigned int Ls = 1, bool test_axial = false)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MContraction::WardIdentity::Par wiPar;
|
||||
if (Ls > 1)
|
||||
{
|
||||
wiPar.q = LABEL_5D(propName);
|
||||
}
|
||||
else
|
||||
{
|
||||
wiPar.q = propName;
|
||||
}
|
||||
wiPar.action = actionName;
|
||||
wiPar.mass = mass;
|
||||
wiPar.test_axial = test_axial;
|
||||
application.createModule<MContraction::WardIdentity>(modName, wiPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeSeqCurrComparison
|
||||
* Purpose: Create module to compare sequential insertion of conserved current
|
||||
* against sink contraction and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* modName - name of module to create.
|
||||
* propName - quark propagator (point source), 5D if available.
|
||||
* seqName - 4D quark propagator with sequential insertion of
|
||||
* conserved current.
|
||||
* actionName - action used to compute quark propagators.
|
||||
* origin - origin of point source propagator.
|
||||
* t_J - time at which sequential current is inserted.
|
||||
* mu - Lorentz index of sequential current.
|
||||
* curr - type of conserved current inserted.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeSeqCurrComparison(Application &application, std::string &modName,
|
||||
std::string &propName, std::string &seqName,
|
||||
std::string &actionName, std::string &origin,
|
||||
unsigned int t_J, unsigned int mu, Current curr)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MUtilities::TestSeqConserved::Par seqPar;
|
||||
seqPar.q = propName;
|
||||
seqPar.qSeq = seqName;
|
||||
seqPar.action = actionName;
|
||||
seqPar.origin = origin;
|
||||
seqPar.t_J = t_J;
|
||||
seqPar.mu = mu;
|
||||
seqPar.curr = curr;
|
||||
application.createModule<MUtilities::TestSeqConserved>(modName, seqPar);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Name: makeSeqGamComparison
|
||||
* Purpose: Create module to compare sequential insertion of gamma matrix
|
||||
* against sink contraction and add to application module.
|
||||
* Parameters: application - main application that stores modules.
|
||||
* modName - name of module to create.
|
||||
* propName - 4D quark propagator.
|
||||
* seqProp - 4D quark propagator with sequential insertion of
|
||||
* gamma matrix.
|
||||
* gamma - Inserted gamma matrix.
|
||||
* t_g - time at which gamma matrix is inserted
|
||||
* sequentially.
|
||||
* Returns: None.
|
||||
******************************************************************************/
|
||||
inline void makeSeqGamComparison(Application &application, std::string &modName,
|
||||
std::string &propName, std::string &seqProp,
|
||||
std::string &origin, Gamma::Algebra gamma,
|
||||
unsigned int t_g)
|
||||
{
|
||||
if (!(VirtualMachine::getInstance().hasModule(modName)))
|
||||
{
|
||||
MUtilities::TestSeqGamma::Par seqPar;
|
||||
seqPar.q = propName;
|
||||
seqPar.qSeq = seqProp;
|
||||
seqPar.origin = origin;
|
||||
seqPar.t_g = t_g;
|
||||
seqPar.gamma = gamma;
|
||||
application.createModule<MUtilities::TestSeqGamma>(modName, seqPar);
|
||||
}
|
||||
}
|
@ -1,123 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons_3pt_contractions.cc
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Andrew Lawson <andrew.lawson1991@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include "Test_hadrons.hpp"
|
||||
|
||||
using namespace Grid;
|
||||
using namespace Hadrons;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// initialization //////////////////////////////////////////////////////////
|
||||
HADRONS_DEFAULT_INIT;
|
||||
|
||||
// run setup ///////////////////////////////////////////////////////////////
|
||||
Application application;
|
||||
double mass = 0.04;
|
||||
double M5 = 1.8;
|
||||
unsigned int Ls = 12;
|
||||
unsigned int nt = GridDefaultLatt()[Tp];
|
||||
unsigned int t_i = 0;
|
||||
unsigned int t_f = nt / 2;
|
||||
std::string mom = "1. 0. 0. 0.";
|
||||
|
||||
// global parameters
|
||||
HADRONS_DEFAULT_GLOBALS(application);
|
||||
|
||||
// gauge field
|
||||
std::string gaugeField = "gauge";
|
||||
application.createModule<MGauge::Unit>(gaugeField);
|
||||
|
||||
// Action & solver setup.
|
||||
std::string action = "DWF";
|
||||
std::string solver = "CG";
|
||||
makeDWFAction(application, action, gaugeField, mass, M5, Ls);
|
||||
makeRBPrecCGSolver(application, solver, action);
|
||||
|
||||
/***************************************************************************
|
||||
* Weak Contraction test: Non-Eye class.
|
||||
**************************************************************************/
|
||||
// Make wall source propagators for each leg of 4-quark vertex.
|
||||
std::string q_i_0 = "q_i_0";
|
||||
std::string q_i_p = "q_i_p";
|
||||
std::string q_f_0 = "q_f_0";
|
||||
std::string q_f_p = "q_f_p";
|
||||
MAKE_WALL_PROP(t_i, q_i_0, solver);
|
||||
MAKE_WALL_PROP(t_f, q_f_0, solver);
|
||||
MAKE_3MOM_WALL_PROP(t_i, mom, q_i_p, solver);
|
||||
MAKE_3MOM_WALL_PROP(t_f, mom, q_f_p, solver);
|
||||
|
||||
// Perform contractions, zero and non-zero momentum.
|
||||
std::string HW_CW_0 = LABEL_3PT("HW_CW_0", t_i, t_f);
|
||||
std::string HW_CW_p = LABEL_3PT("HW_CW_p", t_i, t_f);
|
||||
weakContractionNonEye(application, 3, q_i_0, q_i_0, q_f_0, q_f_0, HW_CW_0);
|
||||
weakContractionNonEye(application, 3, q_i_0, q_i_p, q_f_p, q_f_0, HW_CW_p);
|
||||
|
||||
/***************************************************************************
|
||||
* Weak Contraction test: Eye-class.
|
||||
**************************************************************************/
|
||||
// Create random propagator for loop.
|
||||
std::string eta = "noise_source";
|
||||
makeNoiseSource(application, eta, 0, nt - 1);
|
||||
std::string loopProp = "loop";
|
||||
std::string loopRes = loopProp + "_res";
|
||||
makePropagator(application, loopRes, eta, solver);
|
||||
makeLoop(application, loopProp, eta, loopRes);
|
||||
|
||||
// Wall sink smear the propagator directly connecting the source & sink.
|
||||
// (i.e. make point sink but smear before the contraction)
|
||||
std::string wallSink = "wall_sink";
|
||||
std::string qWall = "q_wall";
|
||||
makePointSink(application, wallSink);
|
||||
sinkSmear(application, wallSink, q_i_0, qWall);
|
||||
|
||||
// Perform contractions, zero and non-zero momentum.
|
||||
std::string HW_SE_0 = LABEL_3PT("HW_SE_0", t_i, t_f);
|
||||
std::string HW_SE_p = LABEL_3PT("HW_SE_p", t_i, t_f);
|
||||
weakContractionEye(application, 3, qWall, q_i_0, q_f_p, loopProp, HW_SE_0, t_f);
|
||||
weakContractionEye(application, 3, qWall, q_i_p, q_f_p, loopProp, HW_SE_p, t_f);
|
||||
|
||||
/***************************************************************************
|
||||
* Gamma insertion test.
|
||||
**************************************************************************/
|
||||
Gamma::Algebra gamma = Gamma::Algebra::GammaT;
|
||||
std::string sd_0 = LABEL_3PT("sd_0", t_i, t_f);
|
||||
std::string sd_p = LABEL_3PT("sd_p", t_i, t_f);
|
||||
gamma3ptContraction(application, 3, qWall, q_i_0, q_f_0, sd_0, t_f, gamma);
|
||||
gamma3ptContraction(application, 3, qWall, q_i_p, q_f_p, sd_p, t_f, gamma);
|
||||
|
||||
// execution
|
||||
application.saveParameterFile("ContractionTest3pt.xml");
|
||||
application.run();
|
||||
|
||||
// epilogue
|
||||
LOG(Message) << "Grid is finalizing now" << std::endl;
|
||||
Grid_finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -1,151 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons_conserved_current.cc
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Andrew Lawson <andrew.lawson1991@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include "Test_hadrons.hpp"
|
||||
|
||||
using namespace Grid;
|
||||
using namespace Hadrons;
|
||||
|
||||
inline void setupSeqCurrTests(Application &application, std::string modStem,
|
||||
std::string &pointProp, std::string &seqStem,
|
||||
std::string &actionName, std::string &solverName,
|
||||
std::string &origin, Current curr,
|
||||
unsigned int t_J, unsigned int mu,
|
||||
unsigned int Ls = 1)
|
||||
{
|
||||
std::string modName = ADD_INDEX(modStem, mu);
|
||||
std::string seqProp = ADD_INDEX(seqStem, mu);
|
||||
std::string seqSrc = seqProp + "_src";
|
||||
|
||||
// 5D actions require 5D propagator as input for conserved current
|
||||
// insertions.
|
||||
std::string propIn;
|
||||
if (Ls > 1)
|
||||
{
|
||||
propIn = LABEL_5D(pointProp);
|
||||
}
|
||||
else
|
||||
{
|
||||
propIn = pointProp;
|
||||
}
|
||||
|
||||
makeConservedSequentialSource(application, seqSrc, propIn,
|
||||
actionName, t_J, curr, mu);
|
||||
makePropagator(application, seqProp, seqSrc, solverName);
|
||||
makeSeqCurrComparison(application, modName, propIn, seqProp,
|
||||
actionName, origin, t_J, mu, curr);
|
||||
}
|
||||
|
||||
inline void setupWardIdentityTests(Application &application,
|
||||
std::string &actionName,
|
||||
double mass,
|
||||
unsigned int Ls = 1,
|
||||
bool perform_axial_tests = false)
|
||||
{
|
||||
// solver
|
||||
std::string solverName = actionName + "_CG";
|
||||
makeRBPrecCGSolver(application, solverName, actionName);
|
||||
|
||||
unsigned int nt = GridDefaultLatt()[Tp];
|
||||
unsigned int t_J = nt/2;
|
||||
|
||||
/***************************************************************************
|
||||
* Conserved current sink contractions: use a single point propagator for
|
||||
* the Ward Identity test.
|
||||
**************************************************************************/
|
||||
std::string pointProp = actionName + "_q_0";
|
||||
std::string origin = "0 0 0 0";
|
||||
std::string modName = actionName + " Ward Identity Test";
|
||||
MAKE_POINT_PROP(origin, pointProp, solverName);
|
||||
makeWITest(application, modName, pointProp, actionName, mass, Ls,
|
||||
perform_axial_tests);
|
||||
|
||||
/***************************************************************************
|
||||
* Conserved current tests with sequential insertion of vector/axial
|
||||
* current. If above Ward Identity passes, sufficient to test sequential
|
||||
* insertion of conserved current agrees with contracted version.
|
||||
**************************************************************************/
|
||||
// Compare sequential insertion to contraction. Should be enough to perform
|
||||
// for time and one space component.
|
||||
std::string seqStem = ADD_INDEX(pointProp + "seq_V", t_J);
|
||||
std::string modStem = actionName + " Vector Sequential Test mu";
|
||||
setupSeqCurrTests(application, modStem, pointProp, seqStem, actionName,
|
||||
solverName, origin, Current::Vector, t_J, Tp, Ls);
|
||||
setupSeqCurrTests(application, modStem, pointProp, seqStem, actionName,
|
||||
solverName, origin, Current::Vector, t_J, Xp, Ls);
|
||||
|
||||
// Perform axial tests only if partially-conserved axial current exists for
|
||||
// the action.
|
||||
if (perform_axial_tests)
|
||||
{
|
||||
seqStem = ADD_INDEX(pointProp + "seq_A", t_J);
|
||||
modStem = actionName + " Axial Sequential Test mu";
|
||||
setupSeqCurrTests(application, modStem, pointProp, seqStem, actionName,
|
||||
solverName, origin, Current::Axial, t_J, Tp, Ls);
|
||||
setupSeqCurrTests(application, modStem, pointProp, seqStem, actionName,
|
||||
solverName, origin, Current::Axial, t_J, Xp, Ls);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// initialization //////////////////////////////////////////////////////////
|
||||
HADRONS_DEFAULT_INIT;
|
||||
|
||||
// run setup ///////////////////////////////////////////////////////////////
|
||||
Application application;
|
||||
double mass = 0.04;
|
||||
double M5 = 1.8;
|
||||
unsigned int Ls = 12;
|
||||
|
||||
// global parameters
|
||||
HADRONS_DEFAULT_GLOBALS(application);
|
||||
|
||||
// gauge field
|
||||
std::string gaugeField = "gauge";
|
||||
application.createModule<MGauge::Unit>(gaugeField);
|
||||
|
||||
// Setup each action and the conserved current tests relevant to it.
|
||||
std::string actionName = "DWF";
|
||||
makeDWFAction(application, actionName, gaugeField, mass, M5, Ls);
|
||||
setupWardIdentityTests(application, actionName, mass, Ls, true);
|
||||
|
||||
actionName = "Wilson";
|
||||
makeWilsonAction(application, actionName, gaugeField, mass);
|
||||
setupWardIdentityTests(application, actionName, mass);
|
||||
|
||||
// execution
|
||||
application.saveParameterFile("ConservedCurrentTest.xml");
|
||||
application.run();
|
||||
|
||||
// epilogue
|
||||
LOG(Message) << "Grid is finalizing now" << std::endl;
|
||||
Grid_finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons_meson_conserved_3pt.cc
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Andrew Lawson <andrew.lawson1991@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include "Test_hadrons.hpp"
|
||||
|
||||
using namespace Grid;
|
||||
using namespace Hadrons;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// initialization //////////////////////////////////////////////////////////
|
||||
HADRONS_DEFAULT_INIT;
|
||||
|
||||
// run setup ///////////////////////////////////////////////////////////////
|
||||
Application application;
|
||||
|
||||
// actions parameters
|
||||
double mass = 0.04;
|
||||
unsigned int Ls = 16;
|
||||
double M5 = 1.8;
|
||||
|
||||
// kinematics
|
||||
unsigned int nt = GridDefaultLatt()[Tp];
|
||||
unsigned int tSrc = 0;
|
||||
unsigned int tJ = nt / 4;
|
||||
std::string kmom = "0. 0. 0. 0.";
|
||||
std::string pmom = "1. 0. 0. 0.";
|
||||
|
||||
// Global parameters.
|
||||
HADRONS_DEFAULT_GLOBALS(application);
|
||||
|
||||
// Unit gauge field.
|
||||
std::string gaugeField = "Unit gauge";
|
||||
application.createModule<MGauge::Unit>(gaugeField);
|
||||
|
||||
// DWF action
|
||||
std::string actionName = "DWF";
|
||||
makeDWFAction(application, actionName, gaugeField, mass, M5, Ls);
|
||||
|
||||
// Solver
|
||||
std::string solver = "CG";
|
||||
makeRBPrecCGSolver(application, solver, actionName);
|
||||
|
||||
// main test body //////////////////////////////////////////////////////////
|
||||
// Point sink modules.
|
||||
std::string sink_0 = "sink_0";
|
||||
std::string sink_p = "sink_p";
|
||||
MSink::Point::Par sinkPar;
|
||||
sinkPar.mom = kmom;
|
||||
application.createModule<MSink::ScalarPoint>(sink_0, sinkPar);
|
||||
sinkPar.mom = pmom;
|
||||
application.createModule<MSink::ScalarPoint>(sink_p, sinkPar);
|
||||
|
||||
// 2pt pion contraction, zero momentum.
|
||||
std::string q_0 = "Q_0";
|
||||
MAKE_WALL_PROP(tSrc, q_0, solver);
|
||||
std::string modName = INIT_INDEX("2pt_pion_WP", tSrc);
|
||||
std::string output = "2pt/pion_WP_0";
|
||||
mesonContraction(application, modName, output, q_0, q_0, sink_0);
|
||||
|
||||
// 2pt pion contraction, with momentum p.
|
||||
std::string q_p = "Q_p";
|
||||
MAKE_3MOM_WALL_PROP(tSrc, pmom, q_p, solver);
|
||||
modName = INIT_INDEX("2pt_pion_WP_p", tSrc);
|
||||
output = "2pt/pion_WP_p";
|
||||
mesonContraction(application, modName, output, q_0, q_p, sink_p);
|
||||
|
||||
// 3pt pion(0) -> pion(p), with sequentially inserted vector current in
|
||||
// time direction.
|
||||
std::string qSeq = q_0 + INIT_INDEX("_seq_Vc3", tJ);
|
||||
std::string q5d = LABEL_5D(q_0); // Need 5D prop for DWF conserved current.
|
||||
std::string srcName = qSeq + "_src";
|
||||
modName = LABEL_3PT("3pt_pion_Vc3", tSrc, tJ);
|
||||
output = "3pt/pion_Vc3_p";
|
||||
makeConservedSequentialSource(application, srcName, q5d, actionName,
|
||||
tJ, Current::Vector, Tp, pmom);
|
||||
makePropagator(application, qSeq, srcName, solver);
|
||||
mesonContraction(application, modName, output, q_0, qSeq, sink_p);
|
||||
|
||||
std::string par_file_name = "conserved_3pt.xml";
|
||||
application.saveParameterFile(par_file_name);
|
||||
application.run();
|
||||
|
||||
// epilogue
|
||||
LOG(Message) << "Grid is finalizing now" << std::endl;
|
||||
Grid_finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1,90 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons_seq_gamma.cc
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Andrew Lawson <andrew.lawson1991@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include "Test_hadrons.hpp"
|
||||
|
||||
using namespace Grid;
|
||||
using namespace QCD;
|
||||
using namespace Hadrons;
|
||||
|
||||
/*******************************************************************************
|
||||
* Consistency test for sequential gamma insertion.
|
||||
******************************************************************************/
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// initialization //////////////////////////////////////////////////////////
|
||||
HADRONS_DEFAULT_INIT;
|
||||
|
||||
// run setup ///////////////////////////////////////////////////////////////
|
||||
Application application;
|
||||
unsigned int nt = GridDefaultLatt()[Tp];
|
||||
unsigned int tS = nt / 2;
|
||||
unsigned int Ls = 12;
|
||||
double mass = 0.04;
|
||||
double M5 = 1.8;
|
||||
|
||||
// global parameters
|
||||
HADRONS_DEFAULT_GLOBALS(application);
|
||||
|
||||
// gauge field
|
||||
std::string gaugeField = "gauge";
|
||||
application.createModule<MGauge::Unit>(gaugeField);
|
||||
|
||||
// action
|
||||
std::string actionName = "DWF";
|
||||
makeDWFAction(application, actionName, gaugeField, mass, M5, Ls);
|
||||
|
||||
// solver
|
||||
std::string solverName = "CG";
|
||||
makeRBPrecCGSolver(application, solverName, actionName);
|
||||
|
||||
// test sequential propagator, with g5 insertion.
|
||||
Gamma::Algebra g = Gamma::Algebra::Gamma5;
|
||||
std::string pointProp = "q_0";
|
||||
std::string point5d = LABEL_5D(pointProp);
|
||||
std::string origin = "0 0 0 0";
|
||||
MAKE_POINT_PROP(origin, pointProp, solverName);
|
||||
|
||||
std::string seqProp = ADD_INDEX(pointProp + "_seqg5", tS);
|
||||
std::string seqSrc = seqProp + "_src";
|
||||
MAKE_SEQUENTIAL_PROP(tS, pointProp, ZERO_MOM, seqProp, solverName, g);
|
||||
|
||||
std::string modName = "Test g5 sequential insertion";
|
||||
makeSeqGamComparison(application, modName, pointProp, seqProp, origin, g, tS);
|
||||
|
||||
// execution
|
||||
application.saveParameterFile("SeqGamma5Test.xml");
|
||||
application.run();
|
||||
|
||||
// epilogue
|
||||
LOG(Message) << "Grid is finalizing now" << std::endl;
|
||||
Grid_finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -1,159 +0,0 @@
|
||||
/*************************************************************************************
|
||||
|
||||
Grid physics library, www.github.com/paboyle/Grid
|
||||
|
||||
Source file: Tests/Hadrons/Test_hadrons_wilsonFund.cc
|
||||
|
||||
Copyright (C) 2015-2018
|
||||
|
||||
Author: Antonin Portelli <antonin.portelli@me.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
See the full license in the file "LICENSE" in the top level distribution directory
|
||||
*************************************************************************************/
|
||||
/* END LEGAL */
|
||||
|
||||
#include <Hadrons/Application.hpp>
|
||||
#include <Hadrons/Modules.hpp>
|
||||
|
||||
using namespace Grid;
|
||||
using namespace Hadrons;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// initialization //////////////////////////////////////////////////////////
|
||||
Grid_init(&argc, &argv);
|
||||
HadronsLogError.Active(GridLogError.isActive());
|
||||
HadronsLogWarning.Active(GridLogWarning.isActive());
|
||||
HadronsLogMessage.Active(GridLogMessage.isActive());
|
||||
HadronsLogIterative.Active(GridLogIterative.isActive());
|
||||
HadronsLogDebug.Active(GridLogDebug.isActive());
|
||||
LOG(Message) << "Grid initialized" << std::endl;
|
||||
|
||||
// run setup ///////////////////////////////////////////////////////////////
|
||||
Application application;
|
||||
std::vector<std::string> flavour = {"l"};
|
||||
std::vector<double> mass = {-0.1};
|
||||
double csw = 0.0;
|
||||
|
||||
// global parameters
|
||||
Application::GlobalPar globalPar;
|
||||
|
||||
globalPar.trajCounter.start = 309;
|
||||
globalPar.trajCounter.end = 310;
|
||||
globalPar.trajCounter.step = 1;
|
||||
globalPar.runId = "test";
|
||||
|
||||
application.setPar(globalPar);
|
||||
// gauge field
|
||||
application.createModule<MIO::LoadNersc>("gauge");
|
||||
|
||||
// sources
|
||||
//MSource::Z2::Par z2Par;
|
||||
//z2Par.tA = 0;
|
||||
//z2Par.tB = 0;
|
||||
//application.createModule<MSource::Z2>("z2", z2Par);
|
||||
MSource::Point::Par ptPar;
|
||||
ptPar.position = "0 0 0 0";
|
||||
application.createModule<MSource::Point>("pt", ptPar);
|
||||
// sink
|
||||
MSink::Point::Par sinkPar;
|
||||
sinkPar.mom = "0 0 0";
|
||||
application.createModule<MSink::ScalarPoint>("sink", sinkPar);
|
||||
|
||||
// set fermion boundary conditions to be periodic space, antiperiodic time.
|
||||
std::string boundary = "1 1 1 -1";
|
||||
|
||||
for (unsigned int i = 0; i < flavour.size(); ++i)
|
||||
{
|
||||
// actions
|
||||
MAction::WilsonClover::Par actionPar;
|
||||
actionPar.gauge = "gauge";
|
||||
actionPar.mass = mass[i];
|
||||
actionPar.boundary = boundary;
|
||||
actionPar.csw_r = csw;
|
||||
actionPar.csw_t = csw;
|
||||
|
||||
// !!!!! Check if Anisotropy works !!!!!
|
||||
actionPar.clover_anisotropy.isAnisotropic= false;
|
||||
actionPar.clover_anisotropy.t_direction = 3 ; // Explicit for D=4
|
||||
actionPar.clover_anisotropy.xi_0 = 1.0 ;
|
||||
actionPar.clover_anisotropy.nu = 1.0 ;
|
||||
|
||||
application.createModule<MAction::WilsonClover>("WilsonClover_" + flavour[i], actionPar);
|
||||
|
||||
// solvers
|
||||
MSolver::RBPrecCG::Par solverPar;
|
||||
solverPar.action = "WilsonClover_" + flavour[i];
|
||||
solverPar.residual = 1.0e-8;
|
||||
solverPar.maxIteration = 10000;
|
||||
application.createModule<MSolver::RBPrecCG>("CG_" + flavour[i],
|
||||
solverPar);
|
||||
|
||||
// propagators
|
||||
MFermion::GaugeProp::Par quarkPar;
|
||||
quarkPar.solver = "CG_" + flavour[i];
|
||||
quarkPar.source = "pt";
|
||||
application.createModule<MFermion::GaugeProp>("Qpt_" + flavour[i], quarkPar);
|
||||
// quarkPar.source = "z2";
|
||||
// application.createModule<MFermion::GaugeProp>("QZ2_" + flavour[i], quarkPar);
|
||||
}
|
||||
for (unsigned int i = 0; i < flavour.size(); ++i)
|
||||
for (unsigned int j = i; j < flavour.size(); ++j)
|
||||
{
|
||||
MContraction::Meson::Par mesPar;
|
||||
|
||||
mesPar.output = "Fund_mesons/pt_" + flavour[i] + flavour[j];
|
||||
mesPar.q1 = "Qpt_" + flavour[i];
|
||||
mesPar.q2 = "Qpt_" + flavour[j];
|
||||
mesPar.gammas = "all";
|
||||
mesPar.sink = "sink";
|
||||
application.createModule<MContraction::Meson>("meson_pt_"
|
||||
+ flavour[i] + flavour[j],
|
||||
mesPar);
|
||||
// mesPar.output = "mesons/Z2_" + flavour[i] + flavour[j];
|
||||
// mesPar.q1 = "QZ2_" + flavour[i];
|
||||
// mesPar.q2 = "QZ2_" + flavour[j];
|
||||
// mesPar.gammas = "all";
|
||||
// mesPar.sink = "sink";
|
||||
// application.createModule<MContraction::Meson>("meson_Z2_"
|
||||
// + flavour[i] + flavour[j],
|
||||
// mesPar);
|
||||
}
|
||||
for (unsigned int i = 0; i < flavour.size(); ++i)
|
||||
for (unsigned int j = i; j < flavour.size(); ++j)
|
||||
for (unsigned int k = j; k < flavour.size(); ++k)
|
||||
{
|
||||
MContraction::Baryon::Par barPar;
|
||||
|
||||
barPar.output = "Fund_baryons/pt_" + flavour[i] + flavour[j] + flavour[k];
|
||||
barPar.q1 = "Qpt_" + flavour[i];
|
||||
barPar.q2 = "Qpt_" + flavour[j];
|
||||
barPar.q3 = "Qpt_" + flavour[k];
|
||||
application.createModule<MContraction::Baryon>(
|
||||
"baryon_pt_" + flavour[i] + flavour[j] + flavour[k], barPar);
|
||||
}
|
||||
|
||||
// execution
|
||||
application.saveParameterFile("WilsonClover_spectrum.xml");
|
||||
application.run();
|
||||
|
||||
// epilogue
|
||||
LOG(Message) << "Grid is finalizing now" << std::endl;
|
||||
Grid_finalize();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Loading…
Reference in New Issue
Block a user