QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
eig_variables.h
Go to the documentation of this file.
1 #ifndef _EIG_VARIABLES_H
2 #define _EIG_VARIABLES_H
3 
4 #include <quda_internal.h>
5 #include <quda.h>
6 
7 #include <iostream>
8 #include <complex>
9 
10 #include <lattice_field.h>
11 
12 namespace quda {
13  typedef std::complex<double> Complex;
14 
15  class EigParam {
16  public:
17  int nk; // Number of wanted eigen values
18  int np; // Number of unwanted eigen values, but it is used for accelerating iteration sequence
19  int f_size; // number of eigen vector elements
20  QudaPrecision precision; // Precision of the field
23 
24  void *v; // pointer to eigen-value set
25 
26 
30  {}
31 
32 
33  // used to create cpu params
34  EigParam(QudaEigParam &eig_param, QudaFieldLocation location, void *h_v, ColorSpinorParam *CSP_param)
35  : nk(eig_param.nk), np(eig_param.np), f_size(eig_param.f_size),
36  CSPparam(CSP_param), create(QUDA_REFERENCE_FIELD_CREATE), v(h_v)
37  {
38  if (location == QUDA_CPU_FIELD_LOCATION) {
39  precision = eig_param.invert_param->cpu_prec;
40  } else {
41  precision = eig_param.invert_param->cuda_prec;
42  }
44  {
45  printfQuda("ERROR!!! current lanczos program supports double precision only\n");
46  exit(0);
47  }
48  }
49 
50  // used to create cuda param from a cpu param
51  EigParam(EigParam &cpuParam, QudaEigParam &eig_param)
52  : nk(cpuParam.nk), np(cpuParam.np), f_size(cpuParam.f_size),
53  precision(eig_param.invert_param->cuda_prec),
55  {
56  // Currently lanczos program supports double precision only
58  {
59  printfQuda("ERROR!!! current lanczos program supports double precision only\n");
60  exit(0);
61  }
62  }
63 
64 
66  this->precision = precision;
67  // Currently lanczos program supports double precision only
68  if( precision != QUDA_DOUBLE_PRECISION)
69  {
70  printfQuda("ERROR!!! current lanczos program supports double precision only\n");
71  exit(0);
72  }
73  }
74 
75  void print() {
76  printfQuda("nk = %d\n", nk);
77  printfQuda("np = %d\n", np);
78  printfQuda("eigen vector elements = %d\n",f_size);
79  printfQuda("precision = %d\n", precision);
80  printfQuda("Memory Addr = %lx\n", (unsigned long)v);
81  }
82 
83  virtual ~EigParam() {
84  }
85  };
86 
87 } // namespace quda
88 
89 #endif // _EIG_VARIABLES_H
enum QudaPrecision_s QudaPrecision
virtual ~EigParam()
Definition: eig_variables.h:83
QudaPrecision cuda_prec
Definition: quda.h:152
std::complex< double > Complex
Definition: eig_variables.h:13
QudaPrecision cpu_prec
Definition: quda.h:151
EigParam(QudaEigParam &eig_param, QudaFieldLocation location, void *h_v, ColorSpinorParam *CSP_param)
Definition: eig_variables.h:34
QudaInvertParam * invert_param
Definition: quda.h:261
const QudaFieldLocation location
Definition: pack_test.cpp:46
QudaPrecision precision
Definition: eig_variables.h:20
void setPrecision(QudaPrecision precision)
Definition: eig_variables.h:65
QudaFieldCreate create
Definition: eig_variables.h:22
QudaPrecision cuda_prec
Definition: dslash_test.cpp:35
enum QudaFieldLocation_s QudaFieldLocation
Main header file for the QUDA library.
#define printfQuda(...)
Definition: util_quda.h:67
ColorSpinorParam * CSPparam
Definition: eig_variables.h:21
enum QudaFieldCreate_s QudaFieldCreate
EigParam(EigParam &cpuParam, QudaEigParam &eig_param)
Definition: eig_variables.h:51