mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Added gauge transform option to eigpack IO
This commit is contained in:
parent
d8512b03f8
commit
94accec311
@ -31,7 +31,7 @@ using namespace Grid;
|
|||||||
using namespace Hadrons;
|
using namespace Hadrons;
|
||||||
using namespace MIO;
|
using namespace MIO;
|
||||||
|
|
||||||
template class Grid::Hadrons::MIO::TLoadEigenPack<FermionEigenPack<FIMPL>>;
|
template class Grid::Hadrons::MIO::TLoadEigenPack<FermionEigenPack<FIMPL>, GIMPL>;
|
||||||
#ifdef GRID_DEFAULT_PRECISION_DOUBLE
|
#ifdef GRID_DEFAULT_PRECISION_DOUBLE
|
||||||
template class Grid::Hadrons::MIO::TLoadEigenPack<FermionEigenPack<FIMPL, FIMPLF>>;
|
template class Grid::Hadrons::MIO::TLoadEigenPack<FermionEigenPack<FIMPL, FIMPLF>, GIMPL>;
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,16 +47,21 @@ public:
|
|||||||
std::string, filestem,
|
std::string, filestem,
|
||||||
bool, multiFile,
|
bool, multiFile,
|
||||||
unsigned int, size,
|
unsigned int, size,
|
||||||
unsigned int, Ls);
|
unsigned int, Ls,
|
||||||
|
std::string, gaugeXform);
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
class TLoadEigenPack: public Module<LoadEigenPackPar>
|
class TLoadEigenPack: public Module<LoadEigenPackPar>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef typename Pack::Field Field;
|
typedef typename Pack::Field Field;
|
||||||
typedef typename Pack::FieldIo FieldIo;
|
typedef typename Pack::FieldIo FieldIo;
|
||||||
typedef BaseEigenPack<Field> BasePack;
|
typedef BaseEigenPack<Field> BasePack;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GAUGE_TYPE_ALIASES(GImpl, );
|
||||||
|
typedef typename GImpl::GaugeLinkField GaugeMat;
|
||||||
public:
|
public:
|
||||||
// constructor
|
// constructor
|
||||||
TLoadEigenPack(const std::string name);
|
TLoadEigenPack(const std::string name);
|
||||||
@ -71,31 +76,36 @@ public:
|
|||||||
virtual void execute(void);
|
virtual void execute(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_REGISTER_TMP(LoadFermionEigenPack, TLoadEigenPack<FermionEigenPack<FIMPL>>, MIO);
|
MODULE_REGISTER_TMP(LoadFermionEigenPack, ARG(TLoadEigenPack<FermionEigenPack<FIMPL>, GIMPL>), MIO);
|
||||||
#ifdef GRID_DEFAULT_PRECISION_DOUBLE
|
#ifdef GRID_DEFAULT_PRECISION_DOUBLE
|
||||||
MODULE_REGISTER_TMP(LoadFermionEigenPackIo32, ARG(TLoadEigenPack<FermionEigenPack<FIMPL, FIMPLF>>), MIO);
|
MODULE_REGISTER_TMP(LoadFermionEigenPackIo32, ARG(TLoadEigenPack<FermionEigenPack<FIMPL, FIMPLF>, GIMPL>), MIO);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* TLoadEigenPack implementation *
|
* TLoadEigenPack implementation *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
// constructor /////////////////////////////////////////////////////////////////
|
// constructor /////////////////////////////////////////////////////////////////
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
TLoadEigenPack<Pack>::TLoadEigenPack(const std::string name)
|
TLoadEigenPack<Pack, GImpl>::TLoadEigenPack(const std::string name)
|
||||||
: Module<LoadEigenPackPar>(name)
|
: Module<LoadEigenPackPar>(name)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// dependencies/products ///////////////////////////////////////////////////////
|
// dependencies/products ///////////////////////////////////////////////////////
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
std::vector<std::string> TLoadEigenPack<Pack>::getInput(void)
|
std::vector<std::string> TLoadEigenPack<Pack, GImpl>::getInput(void)
|
||||||
{
|
{
|
||||||
std::vector<std::string> in;
|
std::vector<std::string> in;
|
||||||
|
|
||||||
|
if (!par().gaugeXform.empty())
|
||||||
|
{
|
||||||
|
in = {par().gaugeXform};
|
||||||
|
}
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
std::vector<std::string> TLoadEigenPack<Pack>::getOutput(void)
|
std::vector<std::string> TLoadEigenPack<Pack, GImpl>::getOutput(void)
|
||||||
{
|
{
|
||||||
std::vector<std::string> out = {getName()};
|
std::vector<std::string> out = {getName()};
|
||||||
|
|
||||||
@ -103,8 +113,8 @@ std::vector<std::string> TLoadEigenPack<Pack>::getOutput(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// setup ///////////////////////////////////////////////////////////////////////
|
// setup ///////////////////////////////////////////////////////////////////////
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
void TLoadEigenPack<Pack>::setup(void)
|
void TLoadEigenPack<Pack, GImpl>::setup(void)
|
||||||
{
|
{
|
||||||
GridBase *gridIo = nullptr;
|
GridBase *gridIo = nullptr;
|
||||||
|
|
||||||
@ -114,16 +124,42 @@ void TLoadEigenPack<Pack>::setup(void)
|
|||||||
}
|
}
|
||||||
envCreateDerived(BasePack, Pack, getName(), par().Ls, par().size,
|
envCreateDerived(BasePack, Pack, getName(), par().Ls, par().size,
|
||||||
envGetRbGrid(Field, par().Ls), gridIo);
|
envGetRbGrid(Field, par().Ls), gridIo);
|
||||||
|
|
||||||
|
if (!par().gaugeXform.empty())
|
||||||
|
{
|
||||||
|
envTmp(GaugeMat, "tmp5dXform", par().Ls, envGetGrid5(Field, par().Ls));
|
||||||
|
envTmp(GaugeMat, "tmp5dXformOdd", par().Ls, envGetRbGrid5(Field, par().Ls));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// execution ///////////////////////////////////////////////////////////////////
|
// execution ///////////////////////////////////////////////////////////////////
|
||||||
template <typename Pack>
|
template <typename Pack, typename GImpl>
|
||||||
void TLoadEigenPack<Pack>::execute(void)
|
void TLoadEigenPack<Pack, GImpl>::execute(void)
|
||||||
{
|
{
|
||||||
auto &epack = envGetDerived(BasePack, Pack, getName());
|
auto &epack = envGetDerived(BasePack, Pack, getName());
|
||||||
|
|
||||||
epack.read(par().filestem, par().multiFile, vm().getTrajectory());
|
epack.read(par().filestem, par().multiFile, vm().getTrajectory());
|
||||||
epack.eval.resize(par().size);
|
epack.eval.resize(par().size);
|
||||||
|
|
||||||
|
if (!par().gaugeXform.empty())
|
||||||
|
{
|
||||||
|
auto &xform = envGet(GaugeMat, par().gaugeXform);
|
||||||
|
envGetTmp(GaugeMat, tmp5dXform);
|
||||||
|
envGetTmp(GaugeMat, tmp5dXformOdd);
|
||||||
|
|
||||||
|
for (unsigned int j = 0; j < par().Ls; j++)
|
||||||
|
{
|
||||||
|
InsertSlice(xform, tmp5dXform, j, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
pickCheckerboard(Odd, tmp5dXformOdd, tmp5dXform);
|
||||||
|
for (unsigned int i = 0; i < par().size; i++)
|
||||||
|
{
|
||||||
|
LOG(Message) << "Applying gauge transformation to eigenvector i = " << i << std::endl;
|
||||||
|
epack.evec[i].checkerboard = Odd;
|
||||||
|
epack.evec[i] = tmp5dXformOdd * epack.evec[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
END_MODULE_NAMESPACE
|
END_MODULE_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user