31 direct(true), inverse(true), clover(nullptr), norm(nullptr),
32 cloverInv(nullptr), invNorm(nullptr), twisted(false), mu2(0.0), rho(0.0) { }
35 direct(param.direct), inverse(param.inverse),
36 clover(param.clover), norm(param.norm),
37 cloverInv(param.cloverInv), invNorm(param.invNorm),
38 twisted(param.twisted), mu2(param.mu2), rho(param.rho) { }
68 mutable double trlog[2];
83 bool isNative()
const;
88 double*
TrLog()
const {
return trlog; }
140 void setRho(
double rho);
146 double norm1()
const;
152 double norm2()
const;
158 double abs_max()
const;
164 double abs_min()
const;
180 #ifdef USE_TEXTURE_OBJECTS 181 cudaTextureObject_t tex;
182 cudaTextureObject_t normTex;
183 cudaTextureObject_t invTex;
184 cudaTextureObject_t invNormTex;
185 cudaTextureObject_t evenTex;
186 cudaTextureObject_t evenNormTex;
187 cudaTextureObject_t oddTex;
188 cudaTextureObject_t oddNormTex;
189 cudaTextureObject_t evenInvTex;
190 cudaTextureObject_t evenInvNormTex;
191 cudaTextureObject_t oddInvTex;
192 cudaTextureObject_t oddInvNormTex;
193 void createTexObject(cudaTextureObject_t &tex, cudaTextureObject_t &texNorm,
void *field,
void *
norm,
bool full);
194 void destroyTexObject();
203 #ifdef USE_TEXTURE_OBJECTS 204 const cudaTextureObject_t& Tex()
const {
return tex; }
205 const cudaTextureObject_t& NormTex()
const {
return normTex; }
206 const cudaTextureObject_t& InvTex()
const {
return invTex; }
207 const cudaTextureObject_t& InvNormTex()
const {
return invNormTex; }
208 const cudaTextureObject_t& EvenTex()
const {
return evenTex; }
209 const cudaTextureObject_t& EvenNormTex()
const {
return evenNormTex; }
210 const cudaTextureObject_t& OddTex()
const {
return oddTex; }
211 const cudaTextureObject_t& OddNormTex()
const {
return oddNormTex; }
212 const cudaTextureObject_t& EvenInvTex()
const {
return evenInvTex; }
213 const cudaTextureObject_t& EvenInvNormTex()
const {
return evenInvNormTex; }
214 const cudaTextureObject_t& OddInvTex()
const {
return oddInvTex; }
215 const cudaTextureObject_t& OddInvNormTex()
const {
return oddInvNormTex; }
282 #ifdef USE_TEXTURE_OBJECTS 283 const cudaTextureObject_t &evenTex;
284 const cudaTextureObject_t &evenNormTex;
285 const cudaTextureObject_t &oddTex;
286 const cudaTextureObject_t &oddNormTex;
287 const cudaTextureObject_t& EvenTex()
const {
return evenTex; }
288 const cudaTextureObject_t& EvenNormTex()
const {
return evenNormTex; }
289 const cudaTextureObject_t& OddTex()
const {
return oddTex; }
290 const cudaTextureObject_t& OddNormTex()
const {
return oddNormTex; }
294 precision(clover.precision), bytes(clover.bytes), norm_bytes(clover.norm_bytes),
295 stride(clover.stride), rho(clover.rho)
296 #ifdef USE_TEXTURE_OBJECTS
297 , evenTex(
inverse ? clover.evenInvTex : clover.evenTex)
298 , evenNormTex(
inverse ? clover.evenInvNormTex : clover.evenNormTex)
299 , oddTex(
inverse ? clover.oddInvTex : clover.oddTex)
300 , oddNormTex(
inverse ? clover.oddInvNormTex : clover.oddNormTex)
336 QudaFieldLocation location,
void *Out=0,
void *In=0,
void *outNorm=0,
void *inNorm=0);
375 std::vector<ColorSpinorField*> &
x, std::vector<ColorSpinorField*> &p,
376 std::vector<double> &coeff);
388 std::vector<ColorSpinorField*> &x,
389 std::vector<ColorSpinorField*> &p,
390 std::vector< std::vector<double> > &coeff);
416 #endif // _CLOVER_QUDA_H QudaCloverFieldOrder order
void cloverDerivative(cudaGaugeField &force, cudaGaugeField &gauge, cudaGaugeField &oprod, double coeff, QudaParity parity)
Compute the derivative of the clover matrix in the direction mu,nu and compute the resulting force gi...
enum QudaPrecision_s QudaPrecision
void * V(bool inverse=false)
void computeCloverForce(GaugeField &force, const GaugeField &U, std::vector< ColorSpinorField *> &x, std::vector< ColorSpinorField *> &p, std::vector< double > &coeff)
Compute the force contribution from the solver solution fields.
FullClover(const cudaCloverField &clover, bool inverse=false)
__host__ __device__ void copy(T1 &a, const T2 &b)
QudaCloverFieldOrder order
QudaCloverFieldOrder Order() const
std::ostream & operator<<(std::ostream &output, const CloverFieldParam ¶m)
void cloverInvert(CloverField &clover, bool computeTraceLog)
This function compute the Cholesky decomposition of each clover matrix and stores the clover inverse ...
void computeCloverSigmaTrace(GaugeField &output, const CloverField &clover, double coeff)
Compute the matrix tensor field necessary for the force calculation from the clover trace action...
double norm2(const CloverField &a, bool inverse=false)
double norm1(const CloverField &u, bool inverse=false)
enum QudaCloverFieldOrder_s QudaCloverFieldOrder
void setPrecision(QudaPrecision precision)
enum QudaParity_s QudaParity
enum QudaFieldLocation_s QudaFieldLocation
cpuColorSpinorField * out
bool twisted
Clover coefficient.
void cloverRho(CloverField &clover, double rho)
This function adds a real scalar onto the clover diagonal (only to the direct field not the inverse) ...
void * Norm(bool inverse=false)
const void * V(bool inverse=false) const
QudaPrecision ghost_precision
enum QudaFieldCreate_s QudaFieldCreate
const void * Norm(bool inverse=false) const
void computeCloverSigmaOprod(GaugeField &oprod, std::vector< ColorSpinorField *> &x, std::vector< ColorSpinorField *> &p, std::vector< std::vector< double > > &coeff)
Compute the outer product from the solver solution fields arising from the diagonal term of the fermi...
void computeClover(CloverField &clover, const GaugeField &gauge, double coeff, QudaFieldLocation location)
CloverFieldParam(const CloverFieldParam ¶m)
void copyGenericClover(CloverField &out, const CloverField &in, bool inverse, QudaFieldLocation location, void *Out=0, void *In=0, void *outNorm=0, void *inNorm=0)
This generic function is used for copying the clover field where in the input and output can be in an...