mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
HDCR back to working
This commit is contained in:
parent
d1a89af8c9
commit
26605ef387
@ -205,7 +205,7 @@ public:
|
|||||||
|
|
||||||
RealD scale;
|
RealD scale;
|
||||||
|
|
||||||
ConjugateGradient<FineField> CG(1.0e-2,10000);
|
ConjugateGradient<FineField> CG(1.0e-2,100,false);
|
||||||
FineField noise(FineGrid);
|
FineField noise(FineGrid);
|
||||||
FineField Mn(FineGrid);
|
FineField Mn(FineGrid);
|
||||||
|
|
||||||
@ -236,6 +236,39 @@ public:
|
|||||||
Orthogonalise();
|
Orthogonalise();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void CreateSubspaceChebyshev(GridParallelRNG &RNG,LinearOperatorBase<FineField> &hermop,int nn=nbasis) {
|
||||||
|
|
||||||
|
RealD scale;
|
||||||
|
|
||||||
|
|
||||||
|
Chebyshev<FineField> Cheb(0.1,64.0,900);
|
||||||
|
|
||||||
|
FineField noise(FineGrid);
|
||||||
|
FineField Mn(FineGrid);
|
||||||
|
|
||||||
|
for(int b=0;b<nn;b++){
|
||||||
|
|
||||||
|
gaussian(RNG,noise);
|
||||||
|
scale = std::pow(norm2(noise),-0.5);
|
||||||
|
noise=noise*scale;
|
||||||
|
|
||||||
|
hermop.Op(noise,Mn); std::cout<<GridLogMessage << "noise ["<<b<<"] <n|MdagM|n> "<<norm2(Mn)<<std::endl;
|
||||||
|
|
||||||
|
Cheb(hermop,noise,Mn);
|
||||||
|
|
||||||
|
scale = std::pow(norm2(Mn),-0.5);
|
||||||
|
Mn=Mn*scale;
|
||||||
|
subspace[b] = Mn;
|
||||||
|
|
||||||
|
hermop.Op(Mn,noise); std::cout<<GridLogMessage << "filtered["<<b<<"] <f|MdagM|f> "<<norm2(noise)<<std::endl;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Orthogonalise();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
// Fine Object == (per site) type of fine field
|
// Fine Object == (per site) type of fine field
|
||||||
// nbasis == number of deflation vectors
|
// nbasis == number of deflation vectors
|
||||||
@ -255,6 +288,7 @@ public:
|
|||||||
////////////////////
|
////////////////////
|
||||||
Geometry geom;
|
Geometry geom;
|
||||||
GridBase * _grid;
|
GridBase * _grid;
|
||||||
|
int hermitian;
|
||||||
|
|
||||||
CartesianStencil<siteVector,siteVector,int> Stencil;
|
CartesianStencil<siteVector,siteVector,int> Stencil;
|
||||||
|
|
||||||
@ -271,10 +305,11 @@ public:
|
|||||||
conformable(_grid,in.Grid());
|
conformable(_grid,in.Grid());
|
||||||
conformable(in.Grid(),out.Grid());
|
conformable(in.Grid(),out.Grid());
|
||||||
|
|
||||||
|
RealD Nin = norm2(in);
|
||||||
SimpleCompressor<siteVector> compressor;
|
SimpleCompressor<siteVector> compressor;
|
||||||
Stencil.HaloExchange(in,compressor);
|
Stencil.HaloExchange(in,compressor);
|
||||||
auto in_v = in.View();
|
auto in_v = in.View();
|
||||||
auto out_v = in.View();
|
auto out_v = out.View();
|
||||||
thread_for(ss,Grid()->oSites(),{
|
thread_for(ss,Grid()->oSites(),{
|
||||||
siteVector res = Zero();
|
siteVector res = Zero();
|
||||||
siteVector nbr;
|
siteVector nbr;
|
||||||
@ -296,19 +331,23 @@ public:
|
|||||||
}
|
}
|
||||||
vstream(out_v[ss],res);
|
vstream(out_v[ss],res);
|
||||||
});
|
});
|
||||||
return norm2(out);
|
RealD Nout= norm2(out);
|
||||||
|
return Nout;
|
||||||
};
|
};
|
||||||
|
|
||||||
RealD Mdag (const CoarseVector &in, CoarseVector &out){
|
RealD Mdag (const CoarseVector &in, CoarseVector &out)
|
||||||
// // corresponds to Petrov-Galerkin coarsening
|
{
|
||||||
// return M(in,out);
|
if(hermitian) {
|
||||||
|
// corresponds to Petrov-Galerkin coarsening
|
||||||
// corresponds to Galerkin coarsening
|
return M(in,out);
|
||||||
CoarseVector tmp(Grid());
|
} else {
|
||||||
G5C(tmp, in);
|
// corresponds to Galerkin coarsening
|
||||||
M(tmp, out);
|
CoarseVector tmp(Grid());
|
||||||
G5C(out, out);
|
G5C(tmp, in);
|
||||||
return norm2(out);
|
M(tmp, out);
|
||||||
|
G5C(out, out);
|
||||||
|
return norm2(out);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void Mdir(const CoarseVector &in, CoarseVector &out, int dir, int disp){
|
void Mdir(const CoarseVector &in, CoarseVector &out, int dir, int disp){
|
||||||
@ -356,10 +395,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
CoarsenedMatrix(GridCartesian &CoarseGrid) :
|
CoarsenedMatrix(GridCartesian &CoarseGrid, int hermitian_=0) :
|
||||||
|
|
||||||
_grid(&CoarseGrid),
|
_grid(&CoarseGrid),
|
||||||
geom(CoarseGrid._ndimension),
|
geom(CoarseGrid._ndimension),
|
||||||
|
hermitian(hermitian_),
|
||||||
Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements,0),
|
Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements,0),
|
||||||
A(geom.npoint,&CoarseGrid)
|
A(geom.npoint,&CoarseGrid)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user