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