16 extern void *
memset(
void *
s,
int c,
size_t n);
29 template<
typename Float>
34 for (
i = 0;
i < 3;
i++){
36 printf(
"(%10f,%10f) \t", link[
i*3*2 + j*2], link[
i*3*2 + j*2 + 1]);
45 template <
typename sFloat,
typename gFloat>
47 int oddBit,
int daggerBit,
int mu)
51 gFloat *linkEven[4], *linkOdd[4];
53 for (
int dir = 0; dir < 4; dir++) {
54 linkEven[dir] = link[dir];
67 for (
int s = 0;
s < 4;
s++)
70 for (
int s = 0;
s < 4;
s++)
81 void covdev_dslash(
void *res,
void **link,
void *spinorField,
int oddBit,
int daggerBit,
int mu,
86 covdevReference((
double*)res, (
double**)link, (
double*)spinorField, oddBit, daggerBit,
mu);
88 covdevReference((
double*)res, (
float**) link, (
double*)spinorField, oddBit, daggerBit,
mu);
93 covdevReference((
float*)res, (
double**)link, (
float*)spinorField, oddBit, daggerBit,
mu);
95 covdevReference((
float*)res, (
float**) link, (
float*)spinorField, oddBit, daggerBit,
mu);
103 template <
typename sFloat,
typename gFloat>
104 void Mat(sFloat *
out, gFloat **link, sFloat *
in,
int daggerBit,
int mu)
108 sFloat *outEven =
out;
117 void mat(
void *
out,
void **link,
void *
in,
int dagger_bit,
int mu,
123 Mat((
double*)
out, (
double**)link, (
double*)
in, dagger_bit,
mu);
125 Mat((
double*)
out, (
float**) link, (
double*)
in, dagger_bit,
mu);
129 Mat((
float*)
out, (
double**)link, (
float*)
in, dagger_bit,
mu);
131 Mat((
float*)
out, (
float**) link, (
float*)
in, dagger_bit,
mu);
138 template <
typename sFloat,
typename gFloat>
145 sFloat *outEven =
out;
153 sFloat *outOdd =
out;
160 fprintf(stderr,
"ERROR: invalid parity in %s,line %d\n", __FUNCTION__, __LINE__);
188 template <
typename sFloat,
typename gFloat>
189 void covdevReference_mg4dir(sFloat *res, gFloat **link, gFloat **ghostLink, sFloat *spinorField,
190 sFloat **fwd_nbr_spinor, sFloat **back_nbr_spinor,
191 int oddBit,
int daggerBit,
int mu)
195 gFloat *linkEven[4], *linkOdd[4];
196 gFloat *ghostLinkEven[4], *ghostLinkOdd[4];
198 for (
int dir = 0; dir < 4; dir++) {
199 linkEven[dir] = link[dir];
202 ghostLinkEven[dir] = ghostLink[dir];
209 gFloat *lnk = gaugeLink_mg4dir(
sid,
mu, oddBit, linkEven, linkOdd, ghostLinkEven, ghostLinkOdd, 1, 1);
210 sFloat *
spinor = spinorNeighbor_mg4dir(
sid,
mu, oddBit, spinorField, fwd_nbr_spinor, back_nbr_spinor, 1, 1);
215 for (
int s = 0;
s < 4;
s++)
218 for (
int s = 0;
s < 4;
s++)
235 errorQuda(
"ERROR: full parity not supported in function %s", __FUNCTION__);
246 covdevReference_mg4dir((
double*)
out->
V(), (
double**)link, (
double**)ghostLink, (
double*)
in->
V(),
247 (
double**)fwd_nbr_spinor, (
double**)back_nbr_spinor, oddBit, daggerBit,
mu);
249 covdevReference_mg4dir((
double*)
out->
V(), (
float**) link, (
float**) ghostLink, (
double*)
in->
V(),
250 (
double**)fwd_nbr_spinor, (
double**)back_nbr_spinor, oddBit, daggerBit,
mu);
254 covdevReference_mg4dir((
float*)
out->
V(), (
double**)link, (
double**)ghostLink, (
float*)
in->
V(),
255 (
float**)fwd_nbr_spinor, (
float**)back_nbr_spinor, oddBit, daggerBit,
mu);
257 covdevReference_mg4dir((
float*)
out->
V(), (
float**)link, (
float**)ghostLink, (
float*)
in->
V(),
258 (
float**)fwd_nbr_spinor, (
float**)back_nbr_spinor, oddBit, daggerBit,
mu);
264 template <
typename sFloat,
typename gFloat>
274 covdevReference_mg4dir(reinterpret_cast<sFloat*>(outOdd.
V()), link, ghostLink,
275 reinterpret_cast<sFloat*>(inEven.
V()),
287 covdevReference_mg4dir(reinterpret_cast<sFloat*>(outEven.
V()), link, ghostLink,
288 reinterpret_cast<sFloat*>(inOdd.
V()),
302 Mat_mg4dir<double, double>(
out, (
double**)link, (
double**) ghostLink,
in, dagger_bit,
mu);
304 Mat_mg4dir<double, float> (
out, (
float**) link, (
float**) ghostLink,
in, dagger_bit,
mu);
308 Mat_mg4dir<float, double> (
out, (
double**)link, (
double**) ghostLink,
in, dagger_bit,
mu);
310 Mat_mg4dir<float, float> (
out, (
float**) link, (
float**) ghostLink,
in, dagger_bit,
mu);
322 if (sPrecision != gPrecision){
323 errorQuda(
"Spinor precision and gPrecison is not the same");
332 errorQuda(
"ERROR: full parity not supported in function %s\n", __FUNCTION__);
enum QudaPrecision_s QudaPrecision
void covdevReference(sFloat *res, gFloat **link, sFloat *spinorField, int oddBit, int daggerBit, int mu)
void covdev_dslash(void *res, void **link, void *spinorField, int oddBit, int daggerBit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
cudaColorSpinorField * tmp
const ColorSpinorField & Even() const
const ColorSpinorField & Odd() const
void matdagmat_mg4dir(cpuColorSpinorField *out, void **link, void **ghostLink, cpuColorSpinorField *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision, cpuColorSpinorField *tmp, QudaParity parity)
void Mat(sFloat *out, gFloat **link, sFloat *in, int daggerBit, int mu)
void Matdagmat(sFloat *out, gFloat **link, sFloat *in, int daggerBit, int mu, sFloat *tmp, QudaParity parity)
void exchangeGhost(QudaParity parity, int nFace, int dagger, const MemoryLocation *pack_destination=nullptr, const MemoryLocation *halo_location=nullptr, bool gdr_send=false, bool gdr_recv=false) const
This is a unified ghost exchange function for doing a complete halo exchange regardless of the type o...
static Float * spinorNeighbor(int i, int dir, int oddBit, Float *spinorField, int neighbor_distance)
int printf(const char *,...) __attribute__((__format__(__printf__
void display_link_internal(Float *link)
__host__ __device__ void sum(double &a, double &b)
void matdagmat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision, void *tmp, QudaParity parity)
static void * backGhostFaceBuffer[QUDA_MAX_DIM]
enum QudaParity_s QudaParity
int fprintf(FILE *, const char *,...) __attribute__((__format__(__printf__
static void * fwdGhostFaceBuffer[QUDA_MAX_DIM]
void * memset(void *s, int c, size_t n)
static Float * gaugeLink(int i, int dir, int oddBit, Float **gaugeEven, Float **gaugeOdd, int nbr_distance)
cpuColorSpinorField * out
void covdev_dslash_mg4dir(cpuColorSpinorField *out, void **link, void **ghostLink, cpuColorSpinorField *in, int oddBit, int daggerBit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
Main header file for the QUDA library.
static void su3Mul(sFloat *res, gFloat *mat, sFloat *vec)
static void su3Tmul(sFloat *res, gFloat *mat, sFloat *vec)
void mat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
void mat_mg4dir(cpuColorSpinorField *out, void **link, void **ghostLink, cpuColorSpinorField *in, int daggerBit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
cpuColorSpinorField * spinor