mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 13:40:46 +01:00
Additional Local Coherance Deflation operator()
This commit is contained in:
parent
0274f40686
commit
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 batches
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user