22 namespace LinOpSysSolverQUDANEFEnv
37 Handle<
FermState< LatticeFermion, multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> > >
state,
57 SystemSolverResults_t LinOpSysSolverQUDANEF::qudaInvert(
const multi1d<T>& chi_s, multi1d<T>& psi_s)
const{
59 SystemSolverResults_t ret;
62 const multi1d<int>& latdims = Layout::subgridLattSize();
63 int halfsize=latdims[0]*latdims[1]*latdims[2]*latdims[3]/2;
64 int fermsize=halfsize*Nc*Ns*2;
66 REAL* spinorIn =
new REAL[quda_inv_param.Ls*fermsize];
67 REAL* spinorOut =
new REAL[quda_inv_param.Ls*fermsize];
68 memset(
reinterpret_cast<char*
>(spinorIn), 0, fermsize*quda_inv_param.Ls*
sizeof(REAL));
69 memset(
reinterpret_cast<char*
>(spinorOut), 0, fermsize*quda_inv_param.Ls*
sizeof(REAL));
72 #ifndef BUILD_QUDA_DEVIFACE_SPINOR
73 for(
unsigned int s=0;
s<quda_inv_param.Ls;
s++){
74 memcpy(
reinterpret_cast<char*
>(&spinorIn[fermsize*
s]),
reinterpret_cast<char*
>(
const_cast<REAL*
>(&(chi_s[
s].elem(rb[1].start()).elem(0).elem(0).real()))),fermsize*
sizeof(REAL));
88 invertQuda(
reinterpret_cast<void*
>(spinorOut),
reinterpret_cast<void*
>(spinorIn), (QudaInvertParam*)&quda_inv_param);
92 psi_s.resize(quda_inv_param.Ls);
95 #ifndef BUILD_QUDA_DEVIFACE_SPINOR
96 for(
unsigned int s=0;
s<quda_inv_param.Ls;
s++){
98 memcpy(
reinterpret_cast<char*
>(
const_cast<REAL*
>(&(psi_s[
s].elem(rb[1].start()).elem(0).elem(0).real()))),
reinterpret_cast<char*
>(&spinorOut[fermsize*
s]),fermsize*
sizeof(REAL));
111 QDPIO::cout <<
"Norm2 psi = " << norm2(psi_s, rb[1]) << std::endl;
113 QDPIO::cout <<
"QUDA_" << solver_string <<
"_NEF_SOLVER: time=" << quda_inv_param.secs <<
" s" ;
114 QDPIO::cout <<
"\tPerformance="<< quda_inv_param.gflops/quda_inv_param.secs<<
" GFLOPS" ;
115 QDPIO::cout <<
"\tTotal Time (incl. load gauge)=" << swatch1.getTimeInSeconds() <<
" s"<<std::endl;
117 ret.n_count =quda_inv_param.iter;
Support class for fermion actions and linear operators.
Class for counted reference semantics.
Linear Operator to arrays.
4D Even Odd preconditioned NEF domain-wall fermion linear operator
Class for counted reference semantics.
static bool registered
Local registration flag.
const std::string name
Name to be used.
LinOpSystemSolverArray< LatticeFermion > * createFerm(XMLReader &xml_in, const std::string &path, Handle< FermState< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > state, Handle< LinearOperatorArray< LatticeFermion > > A)
bool registerAll()
Register all the factories.
Asqtad Staggered-Dirac operator.
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > state
multi1d< LatticeFermion > s(Ncb)
Periodic ferm state and a creator.
Register linop system solvers that solve M*psi=chi.
Factory for solving M*psi=chi where M is not hermitian or pos. def.
Solve a MdagM*psi=chi linear system by BiCGStab.