mirror of
https://github.com/paboyle/Grid.git
synced 2025-06-23 10:12:02 +01:00
Compare commits
8 Commits
d16427b837
...
083b58e66d
Author | SHA1 | Date | |
---|---|---|---|
083b58e66d | |||
633427a2df | |||
2031d6910a | |||
79e34b3eb4 | |||
4f3d581ab4 | |||
4b1997e2f3 | |||
8939d5dc73 | |||
b051e00de0 |
@ -113,7 +113,43 @@ public:
|
|||||||
blockPromote(guess_coarse,guess,subspace);
|
blockPromote(guess_coarse,guess,subspace);
|
||||||
guess.Checkerboard() = src.Checkerboard();
|
guess.Checkerboard() = src.Checkerboard();
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
void operator()(const std::vector<FineField> &src,std::vector<FineField> &guess) {
|
||||||
|
int Nevec = (int)evec_coarse.size();
|
||||||
|
int Nsrc = (int)src.size();
|
||||||
|
// make temp variables
|
||||||
|
std::vector<CoarseField> src_coarse(Nsrc,evec_coarse[0].Grid());
|
||||||
|
std::vector<CoarseField> guess_coarse(Nsrc,evec_coarse[0].Grid());
|
||||||
|
//Preporcessing
|
||||||
|
std::cout << GridLogMessage << "Start BlockProject for loop" << std::endl;
|
||||||
|
for (int j=0;j<Nsrc;j++)
|
||||||
|
{
|
||||||
|
guess_coarse[j] = Zero();
|
||||||
|
std::cout << GridLogMessage << "BlockProject iter: " << j << std::endl;
|
||||||
|
blockProject(src_coarse[j],src[j],subspace);
|
||||||
|
}
|
||||||
|
//deflation set up for eigen vector batchsize 1 and source batch size equal number of sources
|
||||||
|
std::cout << GridLogMessage << "Start ProjectAccum for loop" << std::endl;
|
||||||
|
for (int i=0;i<Nevec;i++)
|
||||||
|
{
|
||||||
|
std::cout << GridLogMessage << "ProjectAccum Nvec: " << i << std::endl;
|
||||||
|
const CoarseField & tmp = evec_coarse[i];
|
||||||
|
for (int j=0;j<Nsrc;j++)
|
||||||
|
{
|
||||||
|
axpy(guess_coarse[j],TensorRemove(innerProduct(tmp,src_coarse[j])) / eval_coarse[i],tmp,guess_coarse[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//postprocessing
|
||||||
|
std::cout << GridLogMessage << "Start BlockPromote for loop" << std::endl;
|
||||||
|
for (int j=0;j<Nsrc;j++)
|
||||||
|
{
|
||||||
|
std::cout << GridLogMessage << "BlockProject iter: " << j << std::endl;
|
||||||
|
blockPromote(guess_coarse[j],guess[j],subspace);
|
||||||
|
guess[j].Checkerboard() = src[j].Checkerboard();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,6 +44,13 @@ void bench_wilson (
|
|||||||
double const volume,
|
double const volume,
|
||||||
int const dag );
|
int const dag );
|
||||||
|
|
||||||
|
void bench_wilson_eo (
|
||||||
|
LatticeFermion & src,
|
||||||
|
LatticeFermion & result,
|
||||||
|
WilsonFermionR & Dw,
|
||||||
|
double const volume,
|
||||||
|
int const dag );
|
||||||
|
|
||||||
int main (int argc, char ** argv)
|
int main (int argc, char ** argv)
|
||||||
{
|
{
|
||||||
Grid_init(&argc,&argv);
|
Grid_init(&argc,&argv);
|
||||||
@ -110,8 +117,8 @@ int main (int argc, char ** argv)
|
|||||||
bench_wilson(src,result,Dw,volume,DaggerYes);
|
bench_wilson(src,result,Dw,volume,DaggerYes);
|
||||||
std::cout << "\t";
|
std::cout << "\t";
|
||||||
// EO
|
// EO
|
||||||
bench_wilson(src,result,Dw,volume,DaggerNo);
|
bench_wilson_eo(src_o,result_e,Dw,volume,DaggerNo);
|
||||||
bench_wilson(src,result,Dw,volume,DaggerYes);
|
bench_wilson_eo(src_o,result_e,Dw,volume,DaggerYes);
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user