QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ritz_quda.cpp
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <math.h>
4 #include <quda_internal.h>
5 #include <color_spinor_field.h>
6 #include <blas_quda.h>
7 #include <dslash_quda.h>
8 #include <invert_quda.h>
9 #include <util_quda.h>
10 #include <sys/time.h>
11 #include <lanczos_quda.h>
12 #include <ritz_quda.h>
13 #include <face_quda.h>
14 #include <iostream>
15 
16 namespace quda {
17 
19  {
20  const double alpha = pow(cheby_param[0], 2);
21  const double beta = pow(cheby_param[1]+fabs(shift), 2);
22 
23  const double c1 = 2.0*(alpha+beta)/(alpha-beta);
24  const double c0 = 2.0/(alpha+beta);
25 
26  bool reset1 = newTmp( &tmp1, in);
27  bool reset2 = newTmp( &tmp2, in);
28 
29  *(tmp2) = in;
30  dirac_mat( *(tmp1), in);
31 
32  axpbyCuda(-0.5*c1, const_cast<cudaColorSpinorField&>(in), 0.5*c0*c1, *(tmp1));
33  for(int i=2; i < N_Poly+1; ++i)
34  {
35  dirac_mat(out,*(tmp1));
36  axpbyCuda(-c1,*(tmp1),c0*c1,out);
37  axpyCuda(-1.0,*(tmp2),out);
38  //printfQuda("ritzMat: Ritz mat loop %d\n",i);
39 
40  if(i != N_Poly)
41  {
42  // tmp2 = tmp
43  // tmp = out
44  cudaColorSpinorField *swap_Tmp = tmp2;
45  tmp2 = tmp1;
46  tmp1 = swap_Tmp;
47  *(tmp1) = out;
48  }
49  }
50  deleteTmp(&(tmp1), reset1);
51  deleteTmp(&(tmp2), reset2);
52 
53  }
56  if (*tmp) return false;
59  *tmp = new cudaColorSpinorField(a, param);
60  return true;
61  }
62 
63  void RitzMat::deleteTmp(cudaColorSpinorField **a, const bool &reset) const{
64  if (reset) {
65  delete *a;
66  *a = NULL;
67  }
68  }
69 }
const DiracMatrix & dirac_mat
Definition: ritz_quda.h:25
double shift
Definition: ritz_quda.h:27
cudaColorSpinorField * tmp1
Definition: ritz_quda.h:30
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: ritz_quda.cpp:18
void axpbyCuda(const double &a, cudaColorSpinorField &x, const double &b, cudaColorSpinorField &y)
Definition: blas_quda.cu:82
double * cheby_param
Definition: ritz_quda.h:28
virtual ~RitzMat()
Definition: ritz_quda.cpp:54
QudaGaugeParam param
Definition: pack_test.cpp:17
cudaColorSpinorField * tmp
cpuColorSpinorField * in
cudaColorSpinorField * tmp2
Definition: ritz_quda.h:31
__host__ __device__ ValueType pow(ValueType x, ExponentType e)
Definition: complex_quda.h:100
void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:115
bool newTmp(cudaColorSpinorField **tmp, const cudaColorSpinorField &a) const
Definition: ritz_quda.cpp:55
cpuColorSpinorField * out
void deleteTmp(cudaColorSpinorField **a, const bool &reset) const
Definition: ritz_quda.cpp:63