12 #define stSpinorSiteSize 6 13 template<
typename Float>
16 printf(
"(%f,%f) (%f,%f) (%f,%f) \t",
31 double* myspinor = (
double*)
spinor;
36 float* myspinor = (
float*)
spinor;
46 template<
typename Float>
51 for (
i = 0;
i < 3;
i++){
53 printf(
"(%.10f,%.10f) \t", link[
i*3*2 + j*2], link[
i*3*2 + j*2 + 1]);
68 double* mylink = (
double*)link;
73 float* mylink = (
float*)link;
83 template <
typename Float>
90 template<
typename Float>
98 Float* refc = &refc_buf[0];
100 memset((
void*)refc, 0,
sizeof(refc_buf));
104 Float*
c = link + 12;
121 double coff= -u0*u0*24;
131 int i4 =
index /(X3*X2*X1);
132 int i3 = (
index - i4*(X3*X2*X1))/(X2*X1);
133 int i2 = (
index - i4*(X3*X2*X1) - i3*(X2*X1))/X1;
134 int i1 =
index - i4*(X3*X2*X1) - i3*(X2*X1) - i2*X1;
143 if ((i1+i4) % 2 == 1){
148 if ( (i4+i1+i2) % 2 == 1){
153 if (
ga_idx >= (X4-3)*X1h*X2*X3 ){
164 refc[0]*=coff; refc[1]*=coff; refc[2]*=coff; refc[3]*=coff; refc[4]*=coff; refc[5]*=coff;
167 double delta = 0.0001;
169 for (
i =0;
i < 6;
i++){
170 double diff = refc[
i] -
c[
i];
171 double absdiff = diff > 0? diff: (-diff);
172 if (absdiff >
delta){
173 printf(
"ERROR: sanity check failed for link\n");
175 printf(
"refc = (%.10f,%.10f) (%.10f,%.10f) (%.10f,%.10f)\n",
176 refc[0], refc[1], refc[2], refc[3], refc[4], refc[5]);
177 printf(
"dir=%d, ga_idx=%d, coff=%f, t_boundary=%f\n",dir,
ga_idx,coff, t_boundary);
189 template<
typename Float>
195 Float* refc = &refc_buf[0];
197 memset((
void*)refc, 0,
sizeof(refc_buf));
201 Float*
c = link + 12;
220 bool last_node_in_t =
true;
228 int i4 =
index /(X3*X2*X1);
229 int i3 = (
index - i4*(X3*X2*X1))/(X2*X1);
230 int i2 = (
index - i4*(X3*X2*X1) - i3*(X2*X1))/X1;
231 int i1 =
index - i4*(X3*X2*X1) - i3*(X2*X1) - i2*X1;
240 if ((i1+i4) % 2 == 1){
245 if ( (i4+i1+i2) % 2 == 1){
250 if (last_node_in_t && i4 == (X4-1) ){
261 double delta = 0.0001;
263 for (
i =0;
i < 6;
i++){
264 double diff = refc[
i] -
c[
i];
265 double absdiff = diff > 0? diff: (-diff);
266 if (absdiff >
delta){
267 printf(
"ERROR: sanity check failed for site link\n");
269 printf(
"refc = (%.10f,%.10f) (%.10f,%.10f) (%.10f,%.10f)\n",
270 refc[0], refc[1], refc[2], refc[3], refc[4], refc[5]);
287 template <
typename Float>
294 template <
typename Float>
296 a[0] =
b[0]*
c[0] -
b[1]*
c[1];
297 a[1] =
b[0]*
c[1] +
b[1]*
c[0];
301 template <
typename Float>
303 a[0] =
b[0]*
c[0] -
b[1]*
c[1];
304 a[1] = -
b[0]*
c[1] -
b[1]*
c[0];
308 template <
typename Float>
310 a[0] =
b[0]*
c[0] +
b[1]*
c[1];
311 a[1] =
b[0]*
c[1] -
b[1]*
c[0];
315 template <
typename Float>
322 template <
typename Float>
324 a[0] +=
b[0]*
c[0] +
b[1]*
c[1];
325 a[1] +=
b[0]*
c[1] -
b[1]*
c[0];
329 template<
typename Float>
334 Float ref_link_buf[18];
335 Float*
ref = & ref_link_buf[0];
340 for (
int i=2;
i<7;
i++) {
358 #define SMALL_NUM 1e-24 359 row_sum = (row_sum != 0)?row_sum:
SMALL_NUM;
370 int i4 =
index /(X3*X2*X1);
371 int i3 = (
index - i4*(X3*X2*X1))/(X2*X1);
372 int i2 = (
index - i4*(X3*X2*X1) - i3*(X2*X1))/X1;
373 int i1 =
index - i4*(X3*X2*X1) - i3*(X2*X1) - i2*X1;
382 if ((i1+i4) % 2 == 1){
387 if ( (i4+i1+i2) % 2 == 1){
392 if (
ga_idx >= (X4-3)*X1h*X2*X3 ){
403 Float U00_mag =
sqrt( (1.
f/(u0*u0) - row_sum)>0? (1.
f/(u0*u0)-row_sum):0);
411 Float column_sum = 0.0;
412 for (
int i=0;
i<2;
i++) column_sum +=
ref[
i]*
ref[
i];
413 for (
int i=6;
i<8;
i++) column_sum +=
ref[
i]*
ref[
i];
414 Float U20_mag =
sqrt( (1.
f/(u0*u0) - column_sum) > 0? (1.
f/(u0*u0)-column_sum) : 0);
422 Float r_inv2 = 1.0/(u0*row_sum);
451 double delta = 0.0001;
453 for (
i =0;
i < 18;
i++){
455 double diff =
ref[
i] - link[
i];
456 double absdiff = diff > 0? diff: (-diff);
458 printf(
"ERROR: sanity check failed for link\n");
460 printf(
"reconstructed link is\n");
462 printf(
"dir=%d, ga_idx=%d, u0=%f, t_boundary=%f\n",dir,
ga_idx, u0, t_boundary);
482 double* mylink = (
double*)link;
484 for (
i = 0;
i <
len/2;
i++){
487 printf(
"ERROR: even link sanity check failed, i=%d\n",
i);
495 for (
i = 0;
i <
len/2;
i++){
498 printf(
"ERROR: odd link sanity check failed, i=%d\n",
i);
505 float* mylink = (
float*)link;
511 printf(
"ERROR: even link sanity check 12 failed, i=%d\n",
i);
528 printf(
"ERROR: odd link sanity check 12 failed, i=%d\n",
i);
556 double* mylink = (
double*)link;
558 for (
i = 0;
i <
len/2;
i++){
559 for(dir=
XUP;dir <=
TUP; dir++){
562 printf(
"ERROR: even link sanity check failed, i=%d, function %s\n",
i, __FUNCTION__);
571 for (
i = 0;
i <
len/2;
i++){
572 for(dir=
XUP;dir <=
TUP; dir++){
575 printf(
"ERROR: odd link sanity check failed, i=%d, function %s\n",
i, __FUNCTION__);
583 float* mylink = (
float*)link;
587 for(dir=
XUP;dir <=
TUP; dir++){
590 printf(
"ERROR: even link sanity check 12 failed, i=%d, function %s\n",
i, __FUNCTION__);
598 for(dir=
XUP;dir <=
TUP; dir++){
601 printf(
"ERROR: odd link sanity check 12 failed, i=%d, function %s\n",
i, __FUNCTION__);
619 }
else if (
strcmp(
s,
"summarize") == 0){
621 }
else if (
strcmp(
s,
"verbose") == 0){
623 }
else if (
strcmp(
s,
"debug") == 0){
626 fprintf(stderr,
"Error: invalid verbosity type %s\n",
s);
652 fprintf(stderr,
"Error: invalid verbosity type %d\n", type);
666 }
else if (
strcmp(
s,
"9") == 0){
668 }
else if (
strcmp(
s,
"12") == 0){
670 }
else if (
strcmp(
s,
"13") == 0){
672 }
else if (
strcmp(
s,
"18") == 0){
675 fprintf(stderr,
"Error: invalid reconstruct type\n");
691 }
else if (
strcmp(
s,
"single") == 0){
693 }
else if (
strcmp(
s,
"half") == 0){
696 fprintf(stderr,
"Error: invalid precision type\n");
737 ret =
"Cayley-Hamilton/SVD";
834 }
else if (
strcmp(
s,
"row") == 0) {
837 fprintf(stderr,
"Error: invalid rank order type\n");
851 }
else if (
strcmp(
s,
"clover") == 0){
853 }
else if (
strcmp(
s,
"twisted-mass") == 0){
855 }
else if (
strcmp(
s,
"twisted-clover") == 0){
857 }
else if (
strcmp(
s,
"staggered") == 0){
859 }
else if (
strcmp(
s,
"asqtad") == 0){
861 }
else if (
strcmp(
s,
"domain-wall") == 0){
863 }
else if (
strcmp(
s,
"domain-wall-4d") == 0){
865 }
else if (
strcmp(
s,
"mobius") == 0){
867 }
else if (
strcmp(
s,
"laplace") == 0){
870 fprintf(stderr,
"Error: invalid dslash type\n");
893 ret=
"twisted-clover";
905 ret =
"domain_wall_4d";
930 }
else if (
strcmp(
s,
"mass") == 0){
932 }
else if (
strcmp(
s,
"asym-mass") == 0){
935 fprintf(stderr,
"Error: invalid mass normalization\n");
958 fprintf(stderr,
"Error: invalid mass normalization\n");
970 if (
strcmp(
s,
"even-even") == 0){
972 }
else if (
strcmp(
s,
"odd-odd") == 0){
974 }
else if (
strcmp(
s,
"even-even-asym") == 0){
976 }
else if (
strcmp(
s,
"odd-odd-asym") == 0){
979 fprintf(stderr,
"Error: invalid matpc type %s\n",
s);
999 ret =
"even-even-asym";
1002 ret =
"odd-odd-asym";
1005 fprintf(stderr,
"Error: invalid matpc type %d\n", type);
1017 if (
strcmp(
s,
"direct") == 0) {
1019 }
else if (
strcmp(
s,
"direct-pc") == 0) {
1021 }
else if (
strcmp(
s,
"normop") == 0) {
1023 }
else if (
strcmp(
s,
"normop-pc") == 0) {
1025 }
else if (
strcmp(
s,
"normerr") == 0) {
1027 }
else if (
strcmp(
s,
"normerr-pc") == 0) {
1030 fprintf(stderr,
"Error: invalid matpc type %s\n",
s);
1062 fprintf(stderr,
"Error: invalid solve type %d\n", type);
1074 if (
strcmp(
s,
"singlet") == 0){
1076 }
else if (
strcmp(
s,
"deg-doublet") == 0){
1078 }
else if (
strcmp(
s,
"nondeg-doublet") == 0){
1080 }
else if (
strcmp(
s,
"no") == 0){
1083 fprintf(stderr,
"Error: invalid flavor type\n");
1100 ret =
"deg-doublet";
1103 ret =
"nondeg-doublet";
1123 }
else if (
strcmp(
s,
"bicgstab") == 0){
1125 }
else if (
strcmp(
s,
"gcr") == 0){
1127 }
else if (
strcmp(
s,
"pcg") == 0){
1129 }
else if (
strcmp(
s,
"mpcg") == 0){
1131 }
else if (
strcmp(
s,
"mpbicgstab") == 0){
1133 }
else if (
strcmp(
s,
"mr") == 0){
1135 }
else if (
strcmp(
s,
"sd") == 0){
1137 }
else if (
strcmp(
s,
"eigcg") == 0){
1139 }
else if (
strcmp(
s,
"inc-eigcg") == 0){
1141 }
else if (
strcmp(
s,
"gmresdr") == 0){
1143 }
else if (
strcmp(
s,
"gmresdr-proj") == 0){
1145 }
else if (
strcmp(
s,
"gmresdr-sh") == 0){
1147 }
else if (
strcmp(
s,
"fgmresdr") == 0){
1149 }
else if (
strcmp(
s,
"mg") == 0){
1151 }
else if (
strcmp(
s,
"bicgstab-l") == 0){
1153 }
else if (
strcmp(
s,
"cgne") == 0){
1155 }
else if (
strcmp(
s,
"cgnr") == 0){
1158 fprintf(stderr,
"Error: invalid solver type\n");
1205 ret =
"gmresdr-proj";
1221 errorQuda(
"Error: invalid solver type %d\n", type);
1231 static char vstr[32];
1248 if (
strcmp(
s,
"eigen") == 0) {
1250 }
else if (
strcmp(
s,
"magma") == 0) {
1253 fprintf(stderr,
"Error: invalid external library type %s\n",
s);
1267 }
else if (
strcmp(
s,
"cuda") == 0) {
1270 fprintf(stderr,
"Error: invalid external library type %s\n",
s);
1283 if (
strcmp(
s,
"device") == 0) {
1285 }
else if (
strcmp(
s,
"pinned") == 0) {
1287 }
else if (
strcmp(
s,
"mapped") == 0) {
1290 fprintf(stderr,
"Error: invalid external library type %s\n",
s);
enum QudaMassNormalization_s QudaMassNormalization
QudaGaugeParam gaugeParam
void complexDotProduct(Float *a, Float *b, Float *c)
enum QudaPrecision_s QudaPrecision
QudaTwistFlavorType get_flavor_type(char *s)
QudaPrecision get_prec(char *s)
void accumulateComplexDotProduct(Float *a, Float *b, Float *c)
int site_link_sanity_check(void *link, int len, int precision, QudaGaugeParam *gaugeParam)
enum QudaSolveType_s QudaSolveType
#define QUDA_VERSION_MINOR
const char * get_matpc_str(QudaMatPCType type)
double atan2(double, double)
const char * get_gauge_order_str(QudaGaugeFieldOrder order)
const char * get_prec_str(QudaPrecision prec)
int get_rank_order(char *s)
QudaReconstructType get_recon(char *s)
void accumulateConjugateProduct(Float *a, Float *b, Float *c, int sign)
void accumulateComplexProduct(Float *a, Float *b, Float *c, Float sign)
const char * get_flavor_str(QudaTwistFlavorType type)
const char * get_test_type(int t)
void exit(int) __attribute__((noreturn))
QudaFieldLocation get_df_location_ritz(char *s)
const char * get_solver_str(QudaInverterType type)
int fullLatticeIndex(int dim[4], int index, int oddBit)
QudaSolveType get_solve_type(char *s)
char * index(const char *, int)
void complexProduct(Float *a, Float *b, Float *c)
QudaExtLibType get_solve_ext_lib_type(char *s)
int strcmp(const char *__s1, const char *__s2)
const char * get_solve_str(QudaSolveType type)
const char * get_unitarization_str(bool svd_only)
static unsigned int delta
QudaInverterType get_solver_type(char *s)
void display_link_internal(Float *link)
int printf(const char *,...) __attribute__((__format__(__printf__
void display_spinor(void *spinor, int len, int precision)
const char * get_mass_normalization_str(QudaMassNormalization type)
QudaDslashType get_dslash_type(char *s)
const char * get_recon_str(QudaReconstructType recon)
enum QudaMatPCType_s QudaMatPCType
int link_sanity_check(void *link, int len, int precision, int dir, QudaGaugeParam *gaugeParam)
int int int enum cudaChannelFormatKind f
#define QUDA_VERSION_SUBMINOR
QudaMatPCType get_matpc_type(char *s)
const char * get_dslash_str(QudaDslashType type)
enum QudaGaugeFieldOrder_s QudaGaugeFieldOrder
int link_sanity_check_internal_8(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
int fprintf(FILE *, const char *,...) __attribute__((__format__(__printf__
QudaMemoryType get_df_mem_type_ritz(char *s)
void display_link(void *link, int len, int precision)
void * memset(void *__b, int __c, size_t __len)
enum QudaFieldLocation_s QudaFieldLocation
int link_sanity_check_internal_12(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
cpuColorSpinorField * ref
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
int sprintf(char *, const char *,...) __attribute__((__format__(__printf__
const char * get_verbosity_str(QudaVerbosity type)
void complexConjugateProduct(Float *a, Float *b, Float *c)
QudaMassNormalization get_mass_normalization_type(char *s)
enum QudaDslashType_s QudaDslashType
void display_spinor_internal(Float *spinor)
int site_link_sanity_check_internal_12(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
enum QudaVerbosity_s QudaVerbosity
QudaVerbosity get_verbosity_type(char *s)
const char * get_quda_ver_str()
#define QUDA_VERSION_MAJOR
void complexAddTo(Float *a, Float *b)
enum QudaInverterType_s QudaInverterType
enum QudaMemoryType_s QudaMemoryType
cpuColorSpinorField * spinor
enum QudaExtLibType_s QudaExtLibType
enum QudaTwistFlavorType_s QudaTwistFlavorType