diff --git a/extras/Hadrons/AllToAllVectors.hpp b/extras/Hadrons/AllToAllVectors.hpp new file mode 100644 index 00000000..7ddc0e81 --- /dev/null +++ b/extras/Hadrons/AllToAllVectors.hpp @@ -0,0 +1,296 @@ +#ifndef A2A_Vectors_hpp_ +#define A2A_Vectors_hpp_ + +#include +#include + +BEGIN_HADRONS_NAMESPACE + +//////////////////////////////// +// A2A Modes +//////////////////////////////// + +template +class A2AModesSchurDiagTwo +{ + public: + A2AModesSchurDiagTwo(void) = default; + virtual ~A2AModesSchurDiagTwo(void) = default; + + void low_mode_v(Matrix &_Matrix, const Field &evec, const RealD &eval, Field &vout) + { + + GridBase *grid = _Matrix.RedBlackGrid(); + + Field src_o(grid); + Field sol_e(grid); + Field sol_o(grid); + Field tmp(grid); + + pickCheckerboard(Odd, src_o, evec); + pickCheckerboard(Even, sol_e, vout); + pickCheckerboard(Odd, sol_o, vout); + + ///////////////////////////////////////////////////// + // v_ie = -(1/eval_i)* Mee Meo MooInv evec_i + ///////////////////////////////////////////////////// + _Matrix.MooeeInv(src_o, tmp); + assert(tmp.checkerboard == Odd); + _Matrix.Meooe(tmp, sol_e); + assert(sol_e.checkerboard == Even); + _Matrix.Mooee(sol_e, tmp); + assert(tmp.checkerboard == Even); + sol_e = -(1.0 / eval) * tmp; + assert(sol_e.checkerboard == Even); + + ///////////////////////////////////////////////////// + // v_io = -(1/eval_i)* MooInv evec_i + ///////////////////////////////////////////////////// + _Matrix.MooeeInv(src_o, tmp); + assert(tmp.checkerboard == Odd); + sol_o = -(1.0 / eval) * tmp; + assert(sol_o.checkerboard == Odd); + + setCheckerboard(vout, sol_e); + assert(sol_e.checkerboard == Even); + setCheckerboard(vout, sol_o); + assert(sol_o.checkerboard == Odd); + } + + void low_mode_w(Matrix &_Matrix, const Field &evec, const RealD &eval, Field &wout) + { + GridBase *grid = _Matrix.RedBlackGrid(); + SchurDiagTwoOperator _HermOpEO(_Matrix); + + Field src_o(grid); + Field sol_e(grid); + Field sol_o(grid); + Field tmp(grid); + + GridBase *fgrid = _Matrix.Grid(); + Field tmp_out(fgrid); + + pickCheckerboard(Odd, src_o, evec); + pickCheckerboard(Even, sol_e, wout); + pickCheckerboard(Odd, sol_o, wout); + + ///////////////////////////////////////////////////// + // w_ie = MeeInvDag MoeDag Doo evec_i + ///////////////////////////////////////////////////// + _HermOpEO.Mpc(src_o, sol_e); + assert(sol_e.checkerboard == Odd); + _Matrix.MeooeDag(sol_e, tmp); + assert(tmp.checkerboard == Even); + _Matrix.MooeeInvDag(tmp, sol_e); + assert(sol_e.checkerboard == Even); + + ///////////////////////////////////////////////////// + // w_io = Doo evec_i + ///////////////////////////////////////////////////// + _HermOpEO.Mpc(src_o, sol_o); + assert(sol_o.checkerboard == Odd); + + setCheckerboard(tmp_out, sol_e); + assert(sol_e.checkerboard == Even); + setCheckerboard(tmp_out, sol_o); + assert(sol_o.checkerboard == Odd); + + _Matrix.Dminus(tmp_out, wout); + } + + void high_mode_v(Matrix &_Matrix, std::function &Solver, const Field &source, Field &vout) + { + GridBase *fgrid = _Matrix.Grid(); + Field tmp(fgrid); + + _Matrix.Dminus(source, tmp); + Solver(vout, tmp); + } + + void high_mode_w(Matrix &_Matrix, const Field &source, Field &wout) + { + wout = source; + } +}; + +//////////////////////////////// +// Low Modes +//////////////////////////////// + +template +class A2ALMSchurDiagTwo : public A2AModesSchurDiagTwo +{ + private: + const std::vector &evec; + const std::vector &eval; + Matrix &action; + + public: + A2ALMSchurDiagTwo(const std::vector &_evec, const std::vector &_eval, Matrix &_action) : evec(_evec), eval(_eval), action(_action){}; + void operator()(int i, Field &vout, Field &wout) + { + this->low_mode_v(action, evec[i], eval[i], vout); + this->low_mode_w(action, evec[i], eval[i], wout); + } +}; + +template +class A2ALMSchurDiagTwoCoarse : public A2AModesSchurDiagTwo +{ + private: + const std::vector &subspace; + const std::vector &evec_coarse; + const std::vector &eval_coarse; + Matrix &action; + + public: + A2ALMSchurDiagTwoCoarse(const std::vector &_subspace, const std::vector &_evec_coarse, const std::vector &_eval_coarse, Matrix &_action) + : subspace(_subspace), evec_coarse(_evec_coarse), eval_coarse(_eval_coarse), action(_action){}; + + void operator()(int i, FineField &vout, FineField &wout) + { + FineField prom_evec(subspace[0]._grid); + blockPromote(evec_coarse[i], prom_evec, subspace); + this->low_mode_v(action, prom_evec, eval_coarse[i], vout); + this->low_mode_w(action, prom_evec, eval_coarse[i], wout); + } +}; + +//////////////////////////////// +// High Modes +//////////////////////////////// + +template +class A2AHMSchurDiagTwo : virtual public A2AModesSchurDiagTwo +{ + public: + void operator()(Matrix &_Matrix, std::function &Solver, const Field &source, Field &vout, Field &wout) + { + this->high_mode_v(_Matrix, Solver, source, vout); + this->high_mode_w(_Matrix, source, wout); + } +}; + +template +class A2AVectorsReturnHigh : public A2AModesSchurDiagTwo +{ + private: + Matrix &action; + std::function &Solver; + const int Nh, Ls; + + public: + std::vector w_high, v_high; + A2AVectorsReturnHigh(Matrix &_action, + std::function &_Solver, + const int _Nh, const int _Ls) + : action(_action), + Solver(_Solver), + Nh(_Nh), Ls(_Ls) + { + GridBase *fgrid = action.Grid(); + resize(Nh, fgrid); + }; + + void resize(const size_t size, GridBase *grid) + { + w_high.resize(size, grid); + v_high.resize(size, grid); + } + + void high_modes(Field &source, int i) + { + this->high_mode_v(action, Solver, source, v_high[i]); + this->high_mode_w(action, source, w_high[i]); + } + + void operator()(int i, Field &vout, Field &wout) + { + if (Ls > 1) + { + vout = v_high[i]; + wout = w_high[i]; + } + else + { + action.ExportPhysicalFermionSolution(v_high[i], vout); + action.ExportPhysicalFermionSolution(w_high[i], wout); + } + } +}; + +//////////////////////////////// +// Both Modes +//////////////////////////////// + +template +class A2AVectorsReturn : public A2AModesSchurDiagTwo +{ + private: + const std::vector &evec; + const std::vector &eval; + Matrix &action; + std::function &Solver; + const int Nl, Nh, Ls; + + public: + std::vector w_high, v_high; + + A2AVectorsReturn(const std::vector &_evec, const std::vector &_eval, + Matrix &_action, + std::function &_Solver, + const int _Nl, const int _Nh, const int _Ls) + : evec(_evec), eval(_eval), + action(_action), + Solver(_Solver), + Nl(_Nl), Nh(_Nh), Ls(_Ls) + { + GridBase *fgrid = action.Grid(); + resize(Nh, fgrid); + }; + + void resize(const size_t size, GridBase *grid) + { + w_high.resize(size, grid); + v_high.resize(size, grid); + } + + void high_modes(Field &source, int i) + { + this->high_mode_v(action, Solver, source, v_high[i]); + this->high_mode_w(action, source, w_high[i]); + } + + void operator()(int i, Field &vout, Field &wout) + { + + GridBase *fgrid = action.Grid(); + Field vtmp(fgrid); + Field wtmp(fgrid); + if (i < Nl) + { + this->low_mode_v(action, evec[i], eval[i], vtmp); + this->low_mode_w(action, evec[i], eval[i], wtmp); + } + else + { + vtmp = v_high[i-Nl]; + wtmp = w_high[i-Nl]; + } + + if (Ls > 1) + { + vout = vtmp; + wout = wtmp; + } + else + { + action.ExportPhysicalFermionSolution(vtmp, vout); + action.ExportPhysicalFermionSolution(wtmp, wout); + } + } +}; + +END_HADRONS_NAMESPACE + +#endif // A2A_Vectors_hpp_ \ No newline at end of file diff --git a/extras/Hadrons/Makefile.am b/extras/Hadrons/Makefile.am index 3b945124..959cf597 100644 --- a/extras/Hadrons/Makefile.am +++ b/extras/Hadrons/Makefile.am @@ -14,6 +14,7 @@ libHadrons_a_SOURCES = \ libHadrons_adir = $(pkgincludedir)/Hadrons nobase_libHadrons_a_HEADERS = \ $(modules_hpp) \ + AllToAllVectors.hpp \ Application.hpp \ Environment.hpp \ Exceptions.hpp \ diff --git a/extras/Hadrons/Modules.hpp b/extras/Hadrons/Modules.hpp index 4b420517..e46bf01b 100644 --- a/extras/Hadrons/Modules.hpp +++ b/extras/Hadrons/Modules.hpp @@ -1,51 +1,52 @@ +#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/extras/Hadrons/Modules/MSolver/A2AVectors.cc b/extras/Hadrons/Modules/MSolver/A2AVectors.cc new file mode 100644 index 00000000..f72f405d --- /dev/null +++ b/extras/Hadrons/Modules/MSolver/A2AVectors.cc @@ -0,0 +1,8 @@ +#include + +using namespace Grid; +using namespace Hadrons; +using namespace MSolver; + +template class Grid::Hadrons::MSolver::TA2AVectors; +template class Grid::Hadrons::MSolver::TA2AVectors; diff --git a/extras/Hadrons/Modules/MSolver/A2AVectors.hpp b/extras/Hadrons/Modules/MSolver/A2AVectors.hpp new file mode 100644 index 00000000..e4690b13 --- /dev/null +++ b/extras/Hadrons/Modules/MSolver/A2AVectors.hpp @@ -0,0 +1,206 @@ +#ifndef Hadrons_MSolver_A2AVectors_hpp_ +#define Hadrons_MSolver_A2AVectors_hpp_ + +#include +#include +#include +#include +#include + +BEGIN_HADRONS_NAMESPACE + +/****************************************************************************** + * A2AVectors * + ******************************************************************************/ +BEGIN_MODULE_NAMESPACE(MSolver) + +class A2AVectorsPar: Serializable +{ +public: + GRID_SERIALIZABLE_CLASS_MEMBERS(A2AVectorsPar, + int, Ls, + int, Nl, + int, N, + std::vector, sources, + std::string, action, + std::string, eigenpack, + std::string, solver); +}; + +template +class TA2AVectors : public Module +{ + public: + FERM_TYPE_ALIASES(FImpl,); + SOLVER_TYPE_ALIASES(FImpl,); + + typedef FermionEigenPack EPack; + typedef CoarseFermionEigenPack CoarseEPack; + + typedef A2AModesSchurDiagTwo A2ABase; + typedef A2AVectorsReturn A2AReturn; + typedef A2AVectorsReturnHigh A2AReturnHigh; + + public: + // constructor + TA2AVectors(const std::string name); + // destructor + virtual ~TA2AVectors(void) {}; + // dependency relation + virtual std::vector getInput(void); + virtual std::vector getOutput(void); + // setup + virtual void setup(void); + // execution + virtual void execute(void); + + private: + unsigned int Ls_; + std::string retName_; +}; + +MODULE_REGISTER_TMP(A2AVectors, ARG(TA2AVectors), MSolver); +MODULE_REGISTER_TMP(ZA2AVectors, ARG(TA2AVectors), MSolver); + +/****************************************************************************** + * TA2AVectors implementation * + ******************************************************************************/ +// constructor ///////////////////////////////////////////////////////////////// +template +TA2AVectors::TA2AVectors(const std::string name) +: Module(name) +, retName_ (name + "_ret") +{} + +// dependencies/products /////////////////////////////////////////////////////// +template +std::vector TA2AVectors::getInput(void) +{ + std::vector in = {par().action, par().solver + "_subtract"}; + + int n = par().sources.size(); + + for (unsigned int t = 0; t < n; t += 1) + { + in.push_back(par().sources[t]); + } + + return in; +} + +template +std::vector TA2AVectors::getOutput(void) +{ + std::vector out = {getName(), retName_}; + + return out; +} + +// setup /////////////////////////////////////////////////////////////////////// +template +void TA2AVectors::setup(void) +{ + int N = par().N; + int Nl = par().Nl; + int Nh = N - Nl; + int Ls = par().Ls; + Ls_ = env().getObjectLs(par().solver + "_subtract"); + + auto &action = envGet(FMat, par().action); + auto &solver = envGet(SolverFn, par().solver + "_subtract"); + + GridBase *fgrid = action.Grid(); + + envTmpLat(FermionField, "ferm_src", Ls_); + envTmpLat(FermionField, "tmp"); + + if (Nl > 0) + { + // Low modes + auto &epack = envGet(EPack, par().eigenpack); + + LOG(Message) << "using a2a with eigenpack '" + << par().eigenpack << "' (" + << epack.evec.size() << " modes)" << std::endl; + + envCreateDerived(A2ABase, A2AReturn, retName_, Ls, + epack.evec, epack.eval, + action, + solver, + Nl, Nh, Ls); + } + else + { + LOG(Message) << "using a2a with high modes only" << std::endl; + envCreateDerived(A2ABase, A2AReturnHigh, retName_, Ls, action, + solver, + Nh, Ls); + } +} + +// execution /////////////////////////////////////////////////////////////////// +template +void TA2AVectors::execute(void) +{ + auto &action = envGet(FMat, par().action); + + int Nt = env().getDim(Tp); + int Nl = par().Nl; // Number of low modes + int Nc = FImpl::Dimension; + + // High modes + auto sources = par().sources; + + envGetTmp(FermionField, ferm_src); + envGetTmp(FermionField, tmp); + int N_count = 0; + for (unsigned int s = 0; s < Ns; ++s) + for (unsigned int c = 0; c < Nc; ++c) + for (unsigned int T = 0; T < Nt; T++) + { + auto &fullSrc = envGet(PropagatorField, sources[T]); + // source conversion for 4D sources + if (!env().isObject5d(sources[T])) + { + if (Ls_ == 1) + { + PropToFerm(ferm_src, fullSrc, s, c); + } + else + { + PropToFerm(tmp, fullSrc, s, c); + action.ImportPhysicalFermionSource(tmp, ferm_src); + } + } + // source conversion for 5D sources + else + { + if (Ls_ != env().getObjectLs(sources[T])) + { + HADRONS_ERROR(Size, "Ls mismatch between quark action and source"); + } + else + { + PropToFerm(ferm_src, fullSrc, s, c); + } + } + + if (Nl > 0) + { + auto a2areturn = envGetDerived(A2ABase, A2AReturn, retName_); + a2areturn.high_modes(ferm_src, N_count); + } + else + { + auto a2areturnhigh = envGetDerived(A2ABase, A2AReturnHigh, retName_); + a2areturnhigh.high_modes(ferm_src, N_count); + } + N_count++; + } + +} +END_MODULE_NAMESPACE + +END_HADRONS_NAMESPACE + +#endif // Hadrons_MSolver_A2AVectors_hpp_ diff --git a/extras/Hadrons/modules.inc b/extras/Hadrons/modules.inc index 57dc8d20..aecfdd5a 100644 --- a/extras/Hadrons/modules.inc +++ b/extras/Hadrons/modules.inc @@ -1,103 +1,105 @@ modules_cc =\ Modules/MContraction/WeakHamiltonianEye.cc \ Modules/MContraction/Baryon.cc \ - Modules/MContraction/Meson.cc \ Modules/MContraction/WeakNeutral4ptDisc.cc \ - Modules/MContraction/WeakHamiltonianNonEye.cc \ - Modules/MContraction/WardIdentity.cc \ Modules/MContraction/DiscLoop.cc \ + Modules/MContraction/WeakHamiltonianNonEye.cc \ + Modules/MContraction/Meson.cc \ + Modules/MContraction/WardIdentity.cc \ Modules/MContraction/Gamma3pt.cc \ - Modules/MFermion/FreeProp.cc \ - Modules/MFermion/GaugeProp.cc \ - Modules/MSource/Point.cc \ - Modules/MSource/Wall.cc \ - Modules/MSource/SeqConserved.cc \ - Modules/MSource/SeqGamma.cc \ - Modules/MSource/Z2.cc \ - Modules/MSink/Point.cc \ - Modules/MSink/Smear.cc \ - Modules/MSolver/RBPrecCG.cc \ - Modules/MSolver/LocalCoherenceLanczos.cc \ Modules/MGauge/Unit.cc \ + Modules/MGauge/FundtoHirep.cc \ Modules/MGauge/StochEm.cc \ Modules/MGauge/Random.cc \ - Modules/MGauge/FundtoHirep.cc \ - Modules/MUtilities/TestSeqGamma.cc \ + Modules/MSource/Wall.cc \ + Modules/MSource/SeqConserved.cc \ + Modules/MSource/Z2.cc \ + Modules/MSource/SeqGamma.cc \ + Modules/MSource/Point.cc \ Modules/MUtilities/TestSeqConserved.cc \ + Modules/MUtilities/TestSeqGamma.cc \ Modules/MLoop/NoiseLoop.cc \ - Modules/MScalar/FreeProp.cc \ - Modules/MScalar/ChargedProp.cc \ - Modules/MAction/Wilson.cc \ - Modules/MAction/ZMobiusDWF.cc \ - Modules/MAction/WilsonClover.cc \ - Modules/MAction/DWF.cc \ Modules/MScalarSUN/TrPhi.cc \ - Modules/MScalarSUN/Grad.cc \ - Modules/MScalarSUN/TimeMomProbe.cc \ Modules/MScalarSUN/TrMag.cc \ - Modules/MScalarSUN/TrKinetic.cc \ - Modules/MScalarSUN/EMT.cc \ - Modules/MScalarSUN/ShiftProbe.cc \ + Modules/MScalarSUN/Grad.cc \ Modules/MScalarSUN/TransProj.cc \ Modules/MScalarSUN/StochFreeField.cc \ Modules/MScalarSUN/TwoPoint.cc \ Modules/MScalarSUN/TwoPointNPR.cc \ + Modules/MScalarSUN/EMT.cc \ + Modules/MScalarSUN/ShiftProbe.cc \ + Modules/MScalarSUN/TrKinetic.cc \ Modules/MScalarSUN/Div.cc \ + Modules/MScalarSUN/TimeMomProbe.cc \ + Modules/MScalar/FreeProp.cc \ + Modules/MScalar/ChargedProp.cc \ + Modules/MIO/LoadCoarseEigenPack.cc \ + Modules/MIO/LoadNersc.cc \ Modules/MIO/LoadEigenPack.cc \ Modules/MIO/LoadBinary.cc \ - Modules/MIO/LoadNersc.cc \ - Modules/MIO/LoadCoarseEigenPack.cc + Modules/MFermion/FreeProp.cc \ + Modules/MFermion/GaugeProp.cc \ + Modules/MSolver/LocalCoherenceLanczos.cc \ + Modules/MSolver/A2AVectors.cc \ + Modules/MSolver/RBPrecCG.cc \ + Modules/MAction/WilsonClover.cc \ + Modules/MAction/Wilson.cc \ + Modules/MAction/DWF.cc \ + Modules/MAction/ZMobiusDWF.cc \ + Modules/MSink/Point.cc \ + Modules/MSink/Smear.cc modules_hpp =\ + Modules/MContraction/WeakNeutral4ptDisc.hpp \ + Modules/MContraction/WeakHamiltonianEye.hpp \ + Modules/MContraction/DiscLoop.hpp \ + Modules/MContraction/WeakHamiltonianNonEye.hpp \ + Modules/MContraction/WeakHamiltonian.hpp \ + Modules/MContraction/WardIdentity.hpp \ + Modules/MContraction/Gamma3pt.hpp \ Modules/MContraction/Baryon.hpp \ Modules/MContraction/Meson.hpp \ - Modules/MContraction/WeakHamiltonian.hpp \ - Modules/MContraction/WeakHamiltonianNonEye.hpp \ - Modules/MContraction/DiscLoop.hpp \ - Modules/MContraction/WeakNeutral4ptDisc.hpp \ - Modules/MContraction/Gamma3pt.hpp \ - Modules/MContraction/WardIdentity.hpp \ - Modules/MContraction/WeakHamiltonianEye.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/MSink/Smear.hpp \ - Modules/MSink/Point.hpp \ - Modules/MSolver/LocalCoherenceLanczos.hpp \ - Modules/MSolver/RBPrecCG.hpp \ - Modules/MGauge/Unit.hpp \ Modules/MGauge/Random.hpp \ Modules/MGauge/FundtoHirep.hpp \ Modules/MGauge/StochEm.hpp \ + Modules/MGauge/Unit.hpp \ + Modules/MSource/Wall.hpp \ + Modules/MSource/Point.hpp \ + Modules/MSource/Z2.hpp \ + Modules/MSource/SeqConserved.hpp \ + Modules/MSource/SeqGamma.hpp \ Modules/MUtilities/TestSeqGamma.hpp \ Modules/MUtilities/TestSeqConserved.hpp \ Modules/MLoop/NoiseLoop.hpp \ - Modules/MScalar/FreeProp.hpp \ - Modules/MScalar/Scalar.hpp \ - Modules/MScalar/ChargedProp.hpp \ - Modules/MAction/DWF.hpp \ - Modules/MAction/Wilson.hpp \ - Modules/MAction/WilsonClover.hpp \ - Modules/MAction/ZMobiusDWF.hpp \ - Modules/MScalarSUN/StochFreeField.hpp \ Modules/MScalarSUN/TwoPointNPR.hpp \ - Modules/MScalarSUN/ShiftProbe.hpp \ - Modules/MScalarSUN/Div.hpp \ - Modules/MScalarSUN/TimeMomProbe.hpp \ Modules/MScalarSUN/TrMag.hpp \ + Modules/MScalarSUN/Grad.hpp \ Modules/MScalarSUN/EMT.hpp \ Modules/MScalarSUN/TwoPoint.hpp \ + Modules/MScalarSUN/TimeMomProbe.hpp \ + Modules/MScalarSUN/TrKinetic.hpp \ + Modules/MScalarSUN/Div.hpp \ + Modules/MScalarSUN/ShiftProbe.hpp \ + Modules/MScalarSUN/StochFreeField.hpp \ Modules/MScalarSUN/TrPhi.hpp \ Modules/MScalarSUN/Utils.hpp \ Modules/MScalarSUN/TransProj.hpp \ - Modules/MScalarSUN/Grad.hpp \ - Modules/MScalarSUN/TrKinetic.hpp \ - Modules/MIO/LoadEigenPack.hpp \ + Modules/MScalar/ChargedProp.hpp \ + Modules/MScalar/Scalar.hpp \ + Modules/MScalar/FreeProp.hpp \ Modules/MIO/LoadNersc.hpp \ + Modules/MIO/LoadEigenPack.hpp \ + Modules/MIO/LoadBinary.hpp \ Modules/MIO/LoadCoarseEigenPack.hpp \ - Modules/MIO/LoadBinary.hpp + Modules/MFermion/GaugeProp.hpp \ + Modules/MFermion/FreeProp.hpp \ + Modules/MSolver/LocalCoherenceLanczos.hpp \ + Modules/MSolver/RBPrecCG.hpp \ + Modules/MSolver/A2AVectors.hpp \ + Modules/MAction/Wilson.hpp \ + Modules/MAction/ZMobiusDWF.hpp \ + Modules/MAction/WilsonClover.hpp \ + Modules/MAction/DWF.hpp \ + Modules/MSink/Point.hpp \ + Modules/MSink/Smear.hpp