1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-06-12 20:27:06 +01:00

Try lanczos to set up hdcr subspace

This commit is contained in:
azusa
2016-03-17 10:36:16 +00:00
parent a155a362da
commit f54e0ec9bd
4 changed files with 4278 additions and 2603 deletions

View File

@ -147,6 +147,36 @@ namespace Grid {
}
Orthogonalise();
}
virtual void CreateSubspaceLanczos(GridParallelRNG &RNG,LinearOperatorBase<FineField> &hermop,int nn=nbasis)
{
// Run a Lanczos with sloppy convergence
const int Nstop = nn;
const int Nk = nn+10;
const int Np = nn+10;
const int Nm = Nk+Np;
const int MaxIt= 10000;
RealD resid = 1.0e-5;
Chebyshev<FineField> Cheb(0.2,5.,11);
ImplicitlyRestartedLanczos<FineField> IRL(hermop,Cheb,Nstop,Nk,Nm,resid,MaxIt);
FineField noise(FineGrid); gaussian(RNG,noise);
std::vector<RealD> eval(Nm);
std::vector<FineField> evec(Nm,FineGrid);
int Nconv;
IRL.calc(eval,evec,
noise,
Nconv);
// pull back nn vectors
for(int b=0;b<nn;b++){
subspace[b] = evec[b];
}
Orthogonalise();
}
virtual void CreateSubspace(GridParallelRNG &RNG,LinearOperatorBase<FineField> &hermop,int nn=nbasis) {
RealD scale;