QUDA  v0.5.0
A library for QCD on GPUs
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lattice_field.h
Go to the documentation of this file.
1 #ifndef _LATTICE_FIELD_H
2 #define _LATTICE_FIELD_H
3 
4 #include <quda.h>
5 #include <iostream>
6 
7 namespace quda {
8 
9  // LatticeField is an abstract base clase for all Field objects.
10 
11  // Forward declaration of all children
12  class ColorSpinorField;
13  class cudaColorSpinorField;
14  class cpuColorSpinorField;
15 
16  class GaugeField;
17  class cpuGaugeField;
18  class cudaGaugeField;
19 
20  class CloverField;
21  class cudaCloverField;
22  class cpuCloverField;
23 
25  int nDim;
27  int pad;
28 
31 
33 
34  // constructor for creating a cpuGaugeField only
37  for (int i=0; i<nDim; i++) x[i] = param.X[i];
38  }
39  };
40 
41  std::ostream& operator<<(std::ostream& output, const LatticeFieldParam& param);
42 
43  class LatticeField {
44 
45  protected:
46  int volume; // lattice volume
47  int volumeCB; // the checkboarded volume
48  int stride;
49  int pad;
50 
51  size_t total_bytes;
52 
53  int nDim;
55 
58 
61 
64 
66  static void *bufferPinned;
67 
69  static bool bufferInit;
70 
72  static size_t bufferBytes;
73 
75  void resizeBuffer(size_t bytes) const;
76 
77  public:
79  virtual ~LatticeField() { ; }
80 
82  static void freeBuffer();
83 
84  int Ndim() const { return nDim; }
85  const int* X() const { return x; }
86  int Volume() const { return volume; }
87  int VolumeCB() const { return volumeCB; }
88  int SurfaceCB(const int i) const { return surfaceCB[i]; }
89  int Stride() const { return stride; }
90  int Pad() const { return pad; }
91 
92  QudaPrecision Precision() const { return precision; }
94  QudaVerbosity Verbosity() const { return verbosity; }
95  size_t GBytes() const { return total_bytes / (1<<30); } // returns total storage allocated
96 
97  void checkField(const LatticeField &);
98  };
99 
100 } // namespace quda
101 
102 #endif // _LATTICE_FIELD_H