mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Hadrons: several Lanczos fixes and improvements
This commit is contained in:
		@@ -56,6 +56,9 @@ class TLoadCoarseEigenPack: public Module<LoadCoarseEigenPackPar>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    typedef CoarseEigenPack<typename Pack::Field, typename Pack::CoarseField> BasePack;
 | 
			
		||||
    template <typename vtype> 
 | 
			
		||||
    using iImplScalar = iScalar<iScalar<iScalar<vtype>>>;
 | 
			
		||||
    typedef iImplScalar<typename Pack::Field::vector_type> SiteComplex;
 | 
			
		||||
public:
 | 
			
		||||
    // constructor
 | 
			
		||||
    TLoadCoarseEigenPack(const std::string name);
 | 
			
		||||
@@ -114,9 +117,15 @@ void TLoadCoarseEigenPack<Pack>::setup(void)
 | 
			
		||||
template <typename Pack>
 | 
			
		||||
void TLoadCoarseEigenPack<Pack>::execute(void)
 | 
			
		||||
{
 | 
			
		||||
    auto &epack = envGetDerived(BasePack, Pack, getName());
 | 
			
		||||
    auto                 cg     = env().getCoarseGrid(par().blockSize, par().Ls);
 | 
			
		||||
    auto                 &epack = envGetDerived(BasePack, Pack, getName());
 | 
			
		||||
    Lattice<SiteComplex> dummy(cg);
 | 
			
		||||
 | 
			
		||||
    epack.read(par().filestem, vm().getTrajectory());
 | 
			
		||||
    LOG(Message) << "Block Gramm-Schmidt pass 1"<< std::endl;
 | 
			
		||||
    blockOrthogonalise(dummy, epack.evec);
 | 
			
		||||
    LOG(Message) << "Block Gramm-Schmidt pass 2"<< std::endl;
 | 
			
		||||
    blockOrthogonalise(dummy, epack.evec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
END_MODULE_NAMESPACE
 | 
			
		||||
 
 | 
			
		||||
@@ -125,19 +125,18 @@ void TLocalCoherenceLanczos<FImpl, nBasis>::setup(void)
 | 
			
		||||
 | 
			
		||||
    env().createCoarseGrid(blockSize, Ls);
 | 
			
		||||
 | 
			
		||||
    auto cg   = env().getCoarseGrid(blockSize, Ls);
 | 
			
		||||
    auto cgrb = env().getRbCoarseGrid(blockSize, Ls);
 | 
			
		||||
    int  cNm  = (par().doCoarse) ? par().coarseParams.Nm : 0;
 | 
			
		||||
    auto cg  = env().getCoarseGrid(blockSize, Ls);
 | 
			
		||||
    int  cNm = (par().doCoarse) ? par().coarseParams.Nm : 0;
 | 
			
		||||
 | 
			
		||||
    LOG(Message) << "Coarse grid: " << cg->GlobalDimensions() << std::endl;
 | 
			
		||||
    envCreateDerived(BasePack, CoarsePack, getName(), Ls,
 | 
			
		||||
                     par().fineParams.Nm, cNm, env().getRbGrid(Ls), cgrb);
 | 
			
		||||
                     par().fineParams.Nm, cNm, env().getRbGrid(Ls), cg);
 | 
			
		||||
 | 
			
		||||
    auto &epack = envGetDerived(BasePack, CoarsePack, getName());
 | 
			
		||||
 | 
			
		||||
    envTmp(SchurFMat, "mat", Ls, envGet(FMat, par().action));
 | 
			
		||||
    envGetTmp(SchurFMat, mat);
 | 
			
		||||
    envTmp(LCL, "solver", Ls, env().getRbGrid(Ls), cgrb, mat, 
 | 
			
		||||
    envTmp(LCL, "solver", Ls, env().getRbGrid(Ls), cg, mat, 
 | 
			
		||||
           Odd, epack.evec, epack.evecCoarse, epack.eval, epack.evalCoarse);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -157,6 +156,10 @@ void TLocalCoherenceLanczos<FImpl, nBasis>::execute(void)
 | 
			
		||||
                    finePar.resid,finePar.MaxIt, finePar.betastp, 
 | 
			
		||||
                    finePar.MinRes);
 | 
			
		||||
    solver.testFine(finePar.resid*100.0);
 | 
			
		||||
    if (!par().output.empty())
 | 
			
		||||
    {
 | 
			
		||||
        epack.writeFine(par().output, vm().getTrajectory());
 | 
			
		||||
    }
 | 
			
		||||
    if (par().doCoarse)
 | 
			
		||||
    {
 | 
			
		||||
        LOG(Message) << "Orthogonalising" << std::endl;
 | 
			
		||||
@@ -173,7 +176,7 @@ void TLocalCoherenceLanczos<FImpl, nBasis>::execute(void)
 | 
			
		||||
    }
 | 
			
		||||
    if (!par().output.empty())
 | 
			
		||||
    {
 | 
			
		||||
        epack.write(par().output, vm().getTrajectory());
 | 
			
		||||
        epack.writeCoarse(par().output, vm().getTrajectory());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user