mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
test implementation of DWF inverter
This commit is contained in:
parent
a0d8eb2c24
commit
5980fa8640
@ -156,6 +156,7 @@ void Application::configLoop(void)
|
|||||||
{
|
{
|
||||||
LOG(Message) << "Starting measurement for trajectory " << t
|
LOG(Message) << "Starting measurement for trajectory " << t
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
env_.loadUnitGauge();
|
||||||
execute(program_);
|
execute(program_);
|
||||||
env_.freeAll();
|
env_.freeAll();
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,15 @@ using namespace Hadrons;
|
|||||||
// constructor /////////////////////////////////////////////////////////////////
|
// constructor /////////////////////////////////////////////////////////////////
|
||||||
Environment::Environment(void)
|
Environment::Environment(void)
|
||||||
{
|
{
|
||||||
|
std::vector<int> seed4d({1,2,3,4});
|
||||||
|
|
||||||
grid4d_.reset(SpaceTimeGrid::makeFourDimGrid(
|
grid4d_.reset(SpaceTimeGrid::makeFourDimGrid(
|
||||||
GridDefaultLatt(), GridDefaultSimd(Nd, vComplex::Nsimd()),
|
GridDefaultLatt(), GridDefaultSimd(Nd, vComplex::Nsimd()),
|
||||||
GridDefaultMpi()));
|
GridDefaultMpi()));
|
||||||
|
gridRb4d_.reset(SpaceTimeGrid::makeFourDimRedBlackGrid(grid4d_.get()));
|
||||||
|
rng4d_.reset(new GridParallelRNG(grid4d_.get()));
|
||||||
|
rng4d_->SeedFixedIntegers(seed4d);
|
||||||
|
gauge_.reset(new LatticeGaugeField(grid4d_.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// dry run /////////////////////////////////////////////////////////////////////
|
// dry run /////////////////////////////////////////////////////////////////////
|
||||||
@ -45,30 +51,67 @@ bool Environment::isDryRun(void)
|
|||||||
return dryRun_;
|
return dryRun_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// grids ///////////////////////////////////////////////////////////////////////
|
||||||
|
GridCartesian * Environment::get4dGrid(void)
|
||||||
|
{
|
||||||
|
return grid4d_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
GridRedBlackCartesian * Environment::getRb4dGrid(void)
|
||||||
|
{
|
||||||
|
return gridRb4d_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
GridCartesian * Environment::get5dGrid(const unsigned int Ls)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return grid5d_.at(Ls).get();
|
||||||
|
}
|
||||||
|
catch(std::out_of_range &)
|
||||||
|
{
|
||||||
|
HADRON_ERROR("no 5D grid with Ls= " << Ls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GridRedBlackCartesian * Environment::getRb5dGrid(const unsigned int Ls)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return gridRb5d_.at(Ls).get();
|
||||||
|
}
|
||||||
|
catch(std::out_of_range &)
|
||||||
|
{
|
||||||
|
HADRON_ERROR("no red-black 5D grid with Ls= " << Ls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// quark propagators ///////////////////////////////////////////////////////////
|
// quark propagators ///////////////////////////////////////////////////////////
|
||||||
void Environment::addProp(const std::string name, const unsigned int Ls)
|
void Environment::addProp(const std::string name, const unsigned int Ls)
|
||||||
{
|
{
|
||||||
|
GridCartesian *p4 = grid4d_.get();
|
||||||
|
|
||||||
if (propExists(name))
|
if (propExists(name))
|
||||||
{
|
{
|
||||||
HADRON_ERROR("propagator '" + name + "' already exists");
|
HADRON_ERROR("propagator '" + name + "' already exists");
|
||||||
}
|
}
|
||||||
if (Ls > 1)
|
if (Ls > 1)
|
||||||
{
|
{
|
||||||
GridCartesian *pt;
|
GridCartesian *p;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
pt = grid5d_.at(Ls).get();
|
p = grid5d_.at(Ls).get();
|
||||||
}
|
}
|
||||||
catch(std::out_of_range &)
|
catch(std::out_of_range &)
|
||||||
{
|
{
|
||||||
grid5d_[Ls].reset(SpaceTimeGrid::makeFiveDimGrid(Ls,
|
grid5d_[Ls].reset(SpaceTimeGrid::makeFiveDimGrid(Ls, p4));
|
||||||
grid4d_.get()));
|
gridRb5d_[Ls].reset(SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls, p4));
|
||||||
pt = grid5d_[Ls].get();
|
p = grid5d_[Ls].get();
|
||||||
}
|
}
|
||||||
if (!isDryRun())
|
if (!isDryRun())
|
||||||
{
|
{
|
||||||
prop_[name].reset(new LatticePropagator(pt));
|
prop_[name].reset(new LatticePropagator(p));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -80,7 +123,7 @@ void Environment::addProp(const std::string name, const unsigned int Ls)
|
|||||||
{
|
{
|
||||||
if (!isDryRun())
|
if (!isDryRun())
|
||||||
{
|
{
|
||||||
prop_[name].reset(new LatticePropagator(grid4d_.get()));
|
prop_[name].reset(new LatticePropagator(p4));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -143,6 +186,22 @@ unsigned int Environment::nProp(void)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gauge configuration /////////////////////////////////////////////////////////
|
||||||
|
LatticeGaugeField * Environment::getGauge(void)
|
||||||
|
{
|
||||||
|
return gauge_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Environment::loadUnitGauge(void)
|
||||||
|
{
|
||||||
|
SU3::ColdConfiguration(*rng4d_, *gauge_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Environment::loadRandomGauge(void)
|
||||||
|
{
|
||||||
|
SU3::HotConfiguration(*rng4d_, *gauge_);
|
||||||
|
}
|
||||||
|
|
||||||
// general free ////////////////////////////////////////////////////////////////
|
// general free ////////////////////////////////////////////////////////////////
|
||||||
void Environment::free(const std::string name)
|
void Environment::free(const std::string name)
|
||||||
{
|
{
|
||||||
|
@ -31,28 +31,45 @@ class Environment
|
|||||||
{
|
{
|
||||||
SINGLETON(Environment);
|
SINGLETON(Environment);
|
||||||
public:
|
public:
|
||||||
typedef std::unique_ptr<GridCartesian> GridPt;
|
typedef std::unique_ptr<GridCartesian> GridPt;
|
||||||
typedef std::unique_ptr<LatticePropagator> PropPt;
|
typedef std::unique_ptr<GridRedBlackCartesian> GridRbPt;
|
||||||
|
typedef std::unique_ptr<GridParallelRNG> RngPt;
|
||||||
|
typedef std::unique_ptr<LatticePropagator> PropPt;
|
||||||
|
typedef std::unique_ptr<LatticeGaugeField> GaugePt;
|
||||||
public:
|
public:
|
||||||
// dry run
|
// dry run
|
||||||
void dryRun(const bool isDry);
|
void dryRun(const bool isDry);
|
||||||
bool isDryRun(void);
|
bool isDryRun(void);
|
||||||
|
// grids
|
||||||
|
GridCartesian * get4dGrid(void);
|
||||||
|
GridRedBlackCartesian * getRb4dGrid(void);
|
||||||
|
GridCartesian * get5dGrid(const unsigned int Ls);
|
||||||
|
GridRedBlackCartesian * getRb5dGrid(const unsigned int Ls);
|
||||||
// quark propagators
|
// quark propagators
|
||||||
void addProp(const std::string name,
|
void addProp(const std::string name,
|
||||||
const unsigned int Ls = 1);
|
const unsigned int Ls = 1);
|
||||||
void freeProp(const std::string name);
|
void freeProp(const std::string name);
|
||||||
LatticePropagator * getProp(const std::string name);
|
LatticePropagator * getProp(const std::string name);
|
||||||
bool propExists(const std::string name);
|
bool propExists(const std::string name);
|
||||||
unsigned int nProp(void);
|
unsigned int nProp(void);
|
||||||
|
// gauge configuration
|
||||||
|
LatticeGaugeField * getGauge(void);
|
||||||
|
void loadUnitGauge(void);
|
||||||
|
void loadRandomGauge(void);
|
||||||
// general free
|
// general free
|
||||||
void free(const std::string name);
|
void free(const std::string name);
|
||||||
void freeAll(void);
|
void freeAll(void);
|
||||||
private:
|
private:
|
||||||
bool dryRun_{false};
|
bool dryRun_{false};
|
||||||
GridPt grid4d_;
|
GridPt grid4d_;
|
||||||
std::map<unsigned int, GridPt> grid5d_;
|
std::map<unsigned int, GridPt> grid5d_;
|
||||||
|
GridRbPt gridRb4d_;
|
||||||
|
std::map<unsigned int, GridRbPt> gridRb5d_;
|
||||||
|
RngPt rng4d_;
|
||||||
std::map<std::string, PropPt> prop_;
|
std::map<std::string, PropPt> prop_;
|
||||||
std::map<std::string, unsigned int> propSize_;
|
std::map<std::string, unsigned int> propSize_;
|
||||||
|
GaugePt gauge_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
END_HADRONS_NAMESPACE
|
END_HADRONS_NAMESPACE
|
||||||
|
@ -66,4 +66,20 @@ void MQuark::execute(Environment &env)
|
|||||||
{
|
{
|
||||||
LOG(Message) << "computing quark propagator '" << getName() << "'"
|
LOG(Message) << "computing quark propagator '" << getName() << "'"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
|
GridCartesian *g4d = env.get4dGrid(),
|
||||||
|
*g5d = env.get5dGrid(par_.Ls);
|
||||||
|
GridRedBlackCartesian *gRb4d = env.getRb4dGrid(),
|
||||||
|
*gRb5d = env.getRb5dGrid(par_.Ls);
|
||||||
|
LatticeGaugeField &Umu = *env.getGauge();
|
||||||
|
LatticeFermion src(g5d); src=zero;
|
||||||
|
LatticeFermion result(g5d); result=zero;
|
||||||
|
|
||||||
|
RealD mass=0.1;
|
||||||
|
RealD M5=1.8;
|
||||||
|
DomainWallFermionR Ddwf(Umu, *g5d, *gRb5d, *g4d, *gRb4d, mass, M5);
|
||||||
|
|
||||||
|
ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
|
||||||
|
SchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
|
||||||
|
SchurSolver(Ddwf,src,result);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user