QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
inv_xsd_quda.cpp
Go to the documentation of this file.
1 #include <cstdio>
2 #include <cstdlib>
3 #include <cmath>
4 
5 #include <quda_internal.h>
6 #include <color_spinor_field.h>
7 #include <blas_quda.h>
8 #include <dslash_quda.h>
9 #include <invert_quda.h>
10 #include <util_quda.h>
11 #include <sys/time.h>
12 
13 #include <face_quda.h>
14 #include <iostream>
15 
16 
17 namespace quda {
18 
19 #ifdef MULTI_GPU
20  XSD::XSD(DiracMatrix &mat, SolverParam &param, TimeProfile &profile) :
21  Solver(param,profile), mat(mat)
22  {
23  sd = new SD(mat,param,profile);
24  for(int i=0; i<4; ++i) R[i] = param.overlap_precondition*commDimPartitioned(i);
25  }
26 
27  XSD::~XSD(){
28  if(param.inv_type_precondition != QUDA_GCR_INVERTER) profile.Start(QUDA_PROFILE_FREE);
29  if(init){
30  delete xx;
31  delete bx;
32  }
33  delete sd;
34  if(param.inv_type_precondition != QUDA_GCR_INVERTER) profile.Stop(QUDA_PROFILE_FREE);
35  }
36 
37 
38  void XSD::operator()(cudaColorSpinorField &x, cudaColorSpinorField &b)
39  {
40  if(!init){
41  ColorSpinorParam csParam(b);
42  for(int i=0; i<4; ++i) csParam.x[i] += 2*R[i];
43  xx = new cudaColorSpinorField(csParam);
44  bx = new cudaColorSpinorField(csParam);
45  init = true;
46  }
47 
48  int parity = mat.getMatPCType();
49  copyExtendedColorSpinor(*bx, b, QUDA_CUDA_FIELD_LOCATION, parity, NULL, NULL, NULL, NULL);
50  exchangeExtendedGhost(bx, R, parity, streams);
51 
52  sd->operator()(*xx,*bx); // actuall run SD
53 
54  // copy the interior region of the solution back
55  copyExtendedColorSpinor(x, *xx, QUDA_CUDA_FIELD_LOCATION, parity, NULL, NULL, NULL, NULL);
56  return;
57  }
58 
59 #endif // MULTI_GPU
60 } // namespace quda
virtual ~XSD()
int commDimPartitioned(int dir)
cudaStream_t * streams
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
void mat(void *out, void **fatlink, void **longlink, void *in, double kappa, int dagger_bit, QudaPrecision sPrecision, QudaPrecision gPrecision)
QudaGaugeParam param
Definition: pack_test.cpp:17
ColorSpinorParam csParam
Definition: pack_test.cpp:24
void exchangeExtendedGhost(cudaColorSpinorField *spinor, int R[], int parity, cudaStream_t *stream_p)
int x[4]
SD(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)
Definition: inv_sd_quda.cpp:19
void copyExtendedColorSpinor(ColorSpinorField &dst, const ColorSpinorField &src, QudaFieldLocation location, const int parity, void *Dst, void *Src, void *dstNorm, void *srcNorm)
const QudaParity parity
Definition: dslash_test.cpp:29
XSD(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)