su2hmc
Loading...
Searching...
No Matches
clover.h File Reference

Routines needed for Clover improved wilson fermions. More...

#include <su2hmc.h>
Include dependency graph for clover.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Bilinear_a
 Structure of arrays for Hermitian bilinear \(X_{\mu\nu}\) in memory. More...
struct  Bilinear
 Hermitian bilinear \(X_{\mu\nu}\) on the local stack. More...

Functions

void ByGenLeft (Complex_f a[nc], const unsigned short gen)
 Multiply leaf (or part of one) by generator from left.
void ByGenRight (Complex_f a[nc], const unsigned short gen)
 Multiply leaf (or part of one) by generator from right.
void Clover_SU2plaq (Complex_f *ut[nc], Complex_f Leaves[nc], unsigned int *iu, int i, int mu, int nu)
 Calculates the SU2 plaquette at site i in the \(\mu--\nu\) direction.
void Half_Leaves (Complex_f *hLeaves[2], Complex_f *ut[2], unsigned int *iu, unsigned int *id, const unsigned short mu, const unsigned short nu)
 Calculates the products of the first two links in a plaquette.
void Leaf (Complex_f Leaves[nc], Complex_f *ut[nc], unsigned int *iu, unsigned int *id, unsigned int i, const unsigned short mu, const unsigned short nu, const unsigned short leaf)
 Calculates a leaf for a clover term.
void Clover (Complex_f *clover[2], Complex_f *ut[2], unsigned int *iu, unsigned int *id)
 Calculates the clovers in all directions at all sites.
void ByClover (Complex *phi, Complex *r, Complex *clover[2], Complex *sigval, const float akappa, unsigned short *sigin, bool dag)
 Clover analogue of the Dslash operation. This version acts on all flavours similar to Dslash and Dslash_d.
void ByClover_f (Complex_f *phi, Complex_f *r, Complex_f *clover[2], Complex_f *sigval, const float akappa, unsigned short *sigin, bool dag)
 Clover analogue of the Dslash operation. This version acts on all flavours similar to Dslash and Dslash_d.
void HbyClover (Complex *phi, Complex *r, Complex *clover[2], Complex *sigval, const float akappa, unsigned short *sigin, bool dag)
 Clover analogue of the Dslash operation. This version acts on all flavours similar to Dslash and Dslash_d.
void HbyClover_f (Complex_f *phi, Complex_f *r, Complex_f *clover[2], Complex_f *sigval, const float akappa, unsigned short *sigin, bool dag)
 Clover analogue of the Dslash operation. This version acts on all flavours similar to Dslash and Dslash_d.
void CalcXmunu (Bilinear_a Xmunu, Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned short mu, const unsigned short nu)
 Gets \(X_{\mu\nu}\) for the clover force.
void Clov_Force (double *dSdpi, Complex_f *ut[2], Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, unsigned int *iu, unsigned int *id, const float akappa)
 Gets the clover contribution to the force.
int Init_clover (Complex **sigval, Complex_f **sigval_f, unsigned short **sigin, float c_sw)
 Initialise values needed for the clover terms.
void Clover_free (Complex_f *clover[nc])
 Free's memory used for clover terms and leaves.
int cuClover (Complex_f *clover[nc], Complex_f *ut[nc], unsigned int *iu, unsigned int *id)
 CUDA wrapper for calculating the clovers in all directions at all sites \( F_{\mu\nu}(n)=\frac{-i}{8a^2}\left(Q_{\mu\nu}(n)-Q_{\nu\mu}(n)\right)\).
void cuByClover (Complex *phi, Complex *r, Complex *clover[nc], Complex *sigval, const float akappa, unsigned short *sigin, bool dag)
 CUDA wrapper for ByClover.
void cuHbyClover (Complex *phi, Complex *r, Complex *clover[nc], Complex *sigval, const float akappa, unsigned short *sigin, bool dag)
 CUDA wrapper for HbyClover.
void cuByClover_f (Complex_f *phi, Complex_f *r, Complex_f *clover[nc], Complex_f *sigval, const float akappa, unsigned short *sigin, bool dag)
 CUDA wrapper for ByClover_f.
void cuHbyClover_f (Complex_f *phi, Complex_f *r, Complex_f *clover[nc], Complex_f *sigval, const float akappa, unsigned short *sigin, bool dag)
 CUDA wrapper for HbyClover_f.
void cuCalcXmunu (Bilinear_a Xmunu, Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned short mu, const unsigned short nu)
 CUDA wrapper for CalcXmunu. Only called during testing to be honest.
int cuClov_Force (double *dSdpi, Complex_f *ut[nc], Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned int *iu, const unsigned int *id, const float akappa)
 CUDA wrapper for Clover_Force.

Detailed Description

Routines needed for Clover improved wilson fermions.

Author
D. Lawlor
Todo
We can make the clover a little quicker by storing it as a struct with a real and imaginary part. This gets a little complex as we need it in both single and double precision, and C doesn't do templating
Todo
Multiple MPI Ranks are not currently supported for the clover action. This is due to the corner halo terms needed to compute the clover force not being implemented.

Definition in file clover.h.