QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
misc.cpp
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "quda.h"
4 #include <string.h>
5 #include "invert_quda.h"
6 #include "misc.h"
7  #include <assert.h>
8 #include "util_quda.h"
9 #include <test_util.h>
10 
11 
12 #define stSpinorSiteSize 6
13 template<typename Float>
15 {
16  printf("(%f,%f) (%f,%f) (%f,%f) \t",
17  spinor[0], spinor[1], spinor[2],
18  spinor[3], spinor[4], spinor[5]);
19 
20  printf("\n");
21  return;
22 }
23 
24 
25 
26 void display_spinor(void* spinor, int len, int precision)
27 {
28  int i;
29 
30  if (precision == QUDA_DOUBLE_PRECISION){
31  double* myspinor = (double*)spinor;
32  for (i = 0;i < len; i++){
34  }
35  }else if (precision == QUDA_SINGLE_PRECISION){
36  float* myspinor = (float*)spinor;
37  for (i=0;i < len ;i++){
39  }
40  }
41  return;
42 }
43 
44 
45 
46 template<typename Float>
47 void display_link_internal(Float* link)
48 {
49  int i, j;
50 
51  for (i = 0;i < 3; i++){
52  for(j=0;j < 3; j++){
53  printf("(%.10f,%.10f) \t", link[i*3*2 + j*2], link[i*3*2 + j*2 + 1]);
54  }
55  printf("\n");
56  }
57  printf("\n");
58  return;
59 }
60 
61 
62 
63 void display_link(void* link, int len, int precision)
64 {
65  int i;
66 
67  if (precision == QUDA_DOUBLE_PRECISION){
68  double* mylink = (double*)link;
69  for (i = 0;i < len; i++){
71  }
72  }else if (precision == QUDA_SINGLE_PRECISION){
73  float* mylink = (float*)link;
74  for (i=0;i < len ;i++){
76  }
77  }
78  return;
79 }
80 
81 
82 
83 template <typename Float>
84 void accumulateConjugateProduct(Float *a, Float *b, Float *c, int sign) {
85  a[0] += sign * (b[0]*c[0] - b[1]*c[1]);
86  a[1] -= sign * (b[0]*c[1] + b[1]*c[0]);
87 }
88 
89 
90 template<typename Float>
91 int link_sanity_check_internal_12(Float* link, int dir, int ga_idx, QudaGaugeParam* gaugeParam, int oddBit)
92 {
93  //printf("link sanity check is called\n");
94 
95  int ret =0;
96 
97  Float refc_buf[6];
98  Float* refc = &refc_buf[0];
99 
100  memset((void*)refc, 0, sizeof(refc_buf));
101 
102  Float* a = link;
103  Float* b = link + 6;
104  Float* c = link + 12;
105 
106  accumulateConjugateProduct(refc + 0*2, a + 1*2, b + 2*2, +1);
107  accumulateConjugateProduct(refc + 0*2, a + 2*2, b + 1*2, -1);
108  accumulateConjugateProduct(refc + 1*2, a + 2*2, b + 0*2, +1);
109  accumulateConjugateProduct(refc + 1*2, a + 0*2, b + 2*2, -1);
110  accumulateConjugateProduct(refc + 2*2, a + 0*2, b + 1*2, +1);
111  accumulateConjugateProduct(refc + 2*2, a + 1*2, b + 0*2, -1);
112 
113  int X1h=gaugeParam->X[0]/2;
114  int X1 =gaugeParam->X[0];
115  int X2 =gaugeParam->X[1];
116  int X3 =gaugeParam->X[2];
117  int X4 =gaugeParam->X[3];
118  double t_boundary = (gaugeParam->t_boundary ==QUDA_ANTI_PERIODIC_T)? -1.0:1.0;
119 
120  double u0 = gaugeParam->tadpole_coeff;
121  double coff= -u0*u0*24;
122  //coff = (dir < 6) ? coff : ( (ga_idx >= (X4-3)*X1h*X2*X3 )? t_boundary : 1);
123 
124  //float u0 = (dir < 6) ? gaugeParam->anisotropy : ( (ga_idx >= (X4-3)*X1h*X2*X3 )? t_boundary : 1);
125 
126 
127 #if 1
128 
129  {
130  int index = fullLatticeIndex(ga_idx, oddBit);
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;
135 
136  if (dir == 0) {
137  if (i4 % 2 == 1){
138  coff *= -1;
139  }
140  }
141 
142  if (dir == 2){
143  if ((i1+i4) % 2 == 1){
144  coff *= -1;
145  }
146  }
147  if (dir == 4){
148  if ( (i4+i1+i2) % 2 == 1){
149  coff *= -1;
150  }
151  }
152  if (dir == 6){
153  if (ga_idx >= (X4-3)*X1h*X2*X3 ){
154  coff *= -1;
155  }
156  }
157 
158  //printf("local ga_idx =%d, index=%d, i4,3,2,1 =%d %d %d %d\n", ga_idx, index, i4, i3, i2,i1);
159 
160  }
161 #endif
162 
163 
164  refc[0]*=coff; refc[1]*=coff; refc[2]*=coff; refc[3]*=coff; refc[4]*=coff; refc[5]*=coff;
165 
166 
167  double delta = 0.0001;
168  int i;
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");
174  display_link_internal(link);
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);
178  printf("X=%d %d %d %d, X1h=%d\n", gaugeParam->X[0], X2, X3, X4, X1h);
179  return -1;
180  }
181 
182  }
183 
184 
185  return ret;
186 }
187 
188 
189 template<typename Float>
190 int site_link_sanity_check_internal_12(Float* link, int dir, int ga_idx, QudaGaugeParam* gaugeParam, int oddBit)
191 {
192  int ret = 0;
193 
194  Float refc_buf[6];
195  Float* refc = &refc_buf[0];
196 
197  memset((void*)refc, 0, sizeof(refc_buf));
198 
199  Float* a = link;
200  Float* b = link + 6;
201  Float* c = link + 12;
202 
203  accumulateConjugateProduct(refc + 0*2, a + 1*2, b + 2*2, +1);
204  accumulateConjugateProduct(refc + 0*2, a + 2*2, b + 1*2, -1);
205  accumulateConjugateProduct(refc + 1*2, a + 2*2, b + 0*2, +1);
206  accumulateConjugateProduct(refc + 1*2, a + 0*2, b + 2*2, -1);
207  accumulateConjugateProduct(refc + 2*2, a + 0*2, b + 1*2, +1);
208  accumulateConjugateProduct(refc + 2*2, a + 1*2, b + 0*2, -1);
209 
210  int X1h=gaugeParam->X[0]/2;
211  int X1 =gaugeParam->X[0];
212  int X2 =gaugeParam->X[1];
213  int X3 =gaugeParam->X[2];
214  int X4 =gaugeParam->X[3];
215 
216 #if 1
217  double coeff= 1.0;
218 
219  {
220  int index = fullLatticeIndex(ga_idx, oddBit);
221  int i4 = index /(X3*X2*X1);
222  int i3 = (index - i4*(X3*X2*X1))/(X2*X1);
223  int i2 = (index - i4*(X3*X2*X1) - i3*(X2*X1))/X1;
224  int i1 = index - i4*(X3*X2*X1) - i3*(X2*X1) - i2*X1;
225 
226  if (dir == XUP) {
227  if (i4 % 2 == 1){
228  coeff *= -1;
229  }
230  }
231 
232  if (dir == YUP){
233  if ((i1+i4) % 2 == 1){
234  coeff *= -1;
235  }
236  }
237  if (dir == ZUP){
238  if ( (i4+i1+i2) % 2 == 1){
239  coeff *= -1;
240  }
241  }
242  if (dir == TUP){
243  if (last_node_in_t() && i4 == (X4-1) ){
244  coeff *= -1;
245  }
246  }
247  }
248 
249 
250  refc[0]*=coeff; refc[1]*=coeff; refc[2]*=coeff; refc[3]*=coeff; refc[4]*=coeff; refc[5]*=coeff;
251 #endif
252 
253 
254  double delta = 0.0001;
255  int i;
256  for (i =0;i < 6; i++){
257  double diff = refc[i] - c[i];
258  double absdiff = diff > 0? diff: (-diff);
259  if (absdiff > delta){
260  printf("ERROR: sanity check failed for site link\n");
261  display_link_internal(link);
262  printf("refc = (%.10f,%.10f) (%.10f,%.10f) (%.10f,%.10f)\n",
263  refc[0], refc[1], refc[2], refc[3], refc[4], refc[5]);
264  printf("X=%d %d %d %d, X1h=%d\n", gaugeParam->X[0], X2, X3, X4, X1h);
265  return -1;
266  }
267 
268  }
269 
270 
271  return ret;
272 }
273 
274 
275 
276 
277 
278 
279 // a+=b
280 template <typename Float>
281 void complexAddTo(Float *a, Float *b) {
282  a[0] += b[0];
283  a[1] += b[1];
284 }
285 
286 // a = b*c
287 template <typename Float>
288 void complexProduct(Float *a, Float *b, Float *c) {
289  a[0] = b[0]*c[0] - b[1]*c[1];
290  a[1] = b[0]*c[1] + b[1]*c[0];
291 }
292 
293 // a = conj(b)*conj(c)
294 template <typename Float>
295 void complexConjugateProduct(Float *a, Float *b, Float *c) {
296  a[0] = b[0]*c[0] - b[1]*c[1];
297  a[1] = -b[0]*c[1] - b[1]*c[0];
298 }
299 
300 // a = conj(b)*c
301 template <typename Float>
302 void complexDotProduct(Float *a, Float *b, Float *c) {
303  a[0] = b[0]*c[0] + b[1]*c[1];
304  a[1] = b[0]*c[1] - b[1]*c[0];
305 }
306 
307 // a += b*c
308 template <typename Float>
309 void accumulateComplexProduct(Float *a, Float *b, Float *c, Float sign) {
310  a[0] += sign*(b[0]*c[0] - b[1]*c[1]);
311  a[1] += sign*(b[0]*c[1] + b[1]*c[0]);
312 }
313 
314 // a += conj(b)*c)
315 template <typename Float>
316 void accumulateComplexDotProduct(Float *a, Float *b, Float *c) {
317  a[0] += b[0]*c[0] + b[1]*c[1];
318  a[1] += b[0]*c[1] - b[1]*c[0];
319 }
320 
321 
322 template<typename Float>
323 int link_sanity_check_internal_8(Float* link, int dir, int ga_idx, QudaGaugeParam* gaugeParam, int oddBit)
324 {
325  int ret =0;
326 
327  Float ref_link_buf[18];
328  Float* ref = & ref_link_buf[0];
329  memset(ref, 0, sizeof(ref_link_buf));
330 
331  ref[0] = atan2(link[1], link[0]);
332  ref[1] = atan2(link[13], link[12]);
333  for (int i=2; i<7; i++) {
334  ref[i] = link[i];
335  }
336 
337  int X1h=gaugeParam->X[0]/2;
338  int X2 =gaugeParam->X[1];
339  int X3 =gaugeParam->X[2];
340  int X4 =gaugeParam->X[3];
341  double t_boundary = (gaugeParam->t_boundary ==QUDA_ANTI_PERIODIC_T)? -1.0:1.0;
342 
343 
344  // First reconstruct first row
345  Float row_sum = 0.0;
346  row_sum += ref[2]*ref[2];
347  row_sum += ref[3]*ref[3];
348  row_sum += ref[4]*ref[4];
349  row_sum += ref[5]*ref[5];
350 
351 #define SMALL_NUM 1e-24
352  row_sum = (row_sum != 0)?row_sum: SMALL_NUM;
353 #if 1
354  Float u0= -gaugeParam->tadpole_coeff*gaugeParam->tadpole_coeff*24;
355  {
356  int X1h=gaugeParam->X[0]/2;
357  int X1 =gaugeParam->X[0];
358  int X2 =gaugeParam->X[1];
359  int X3 =gaugeParam->X[2];
360  int X4 =gaugeParam->X[3];
361 
362  int index = fullLatticeIndex(ga_idx, oddBit);
363  int i4 = index /(X3*X2*X1);
364  int i3 = (index - i4*(X3*X2*X1))/(X2*X1);
365  int i2 = (index - i4*(X3*X2*X1) - i3*(X2*X1))/X1;
366  int i1 = index - i4*(X3*X2*X1) - i3*(X2*X1) - i2*X1;
367 
368  if (dir == 0) {
369  if (i4 % 2 == 1){
370  u0 *= -1;
371  }
372  }
373 
374  if (dir == 1){
375  if ((i1+i4) % 2 == 1){
376  u0 *= -1;
377  }
378  }
379  if (dir == 2){
380  if ( (i4+i1+i2) % 2 == 1){
381  u0 *= -1;
382  }
383  }
384  if (dir == 3){
385  if (ga_idx >= (X4-3)*X1h*X2*X3 ){
386  u0 *= -1;
387  }
388  }
389 
390  //printf("local ga_idx =%d, index=%d, i4,3,2,1 =%d %d %d %d\n", ga_idx, index, i4, i3, i2,i1);
391 
392  }
393 #endif
394 
395 
396  Float U00_mag = sqrt( (1.f/(u0*u0) - row_sum)>0? (1.f/(u0*u0)-row_sum):0);
397 
398  ref[14] = ref[0];
399  ref[15] = ref[1];
400 
401  ref[0] = U00_mag * cos(ref[14]);
402  ref[1] = U00_mag * sin(ref[14]);
403 
404  Float column_sum = 0.0;
405  for (int i=0; i<2; i++) column_sum += ref[i]*ref[i];
406  for (int i=6; i<8; i++) column_sum += ref[i]*ref[i];
407  Float U20_mag = sqrt( (1.f/(u0*u0) - column_sum) > 0? (1.f/(u0*u0)-column_sum) : 0);
408 
409  ref[12] = U20_mag * cos(ref[15]);
410  ref[13] = U20_mag * sin(ref[15]);
411 
412  // First column now restored
413 
414  // finally reconstruct last elements from SU(2) rotation
415  Float r_inv2 = 1.0/(u0*row_sum);
416 
417  // U11
418  Float A[2];
419  complexDotProduct(A, ref+0, ref+6);
420  complexConjugateProduct(ref+8, ref+12, ref+4);
421  accumulateComplexProduct(ref+8, A, ref+2, u0);
422  ref[8] *= -r_inv2;
423  ref[9] *= -r_inv2;
424 
425  // U12
426  complexConjugateProduct(ref+10, ref+12, ref+2);
427  accumulateComplexProduct(ref+10, A, ref+4, -u0);
428  ref[10] *= r_inv2;
429  ref[11] *= r_inv2;
430 
431  // U21
432  complexDotProduct(A, ref+0, ref+12);
433  complexConjugateProduct(ref+14, ref+6, ref+4);
434  accumulateComplexProduct(ref+14, A, ref+2, -u0);
435  ref[14] *= r_inv2;
436  ref[15] *= r_inv2;
437 
438  // U12
439  complexConjugateProduct(ref+16, ref+6, ref+2);
440  accumulateComplexProduct(ref+16, A, ref+4, u0);
441  ref[16] *= -r_inv2;
442  ref[17] *= -r_inv2;
443 
444  double delta = 0.0001;
445  int i;
446  for (i =0;i < 18; i++){
447 
448  double diff = ref[i] - link[i];
449  double absdiff = diff > 0? diff: (-diff);
450  if ( (ref[i] != ref[i]) || (absdiff > delta)){
451  printf("ERROR: sanity check failed for link\n");
452  display_link_internal(link);
453  printf("reconstructed link is\n");
455  printf("dir=%d, ga_idx=%d, u0=%f, t_boundary=%f\n",dir, ga_idx, u0, t_boundary);
456  printf("X=%d %d %d %d, X1h=%d\n", gaugeParam->X[0], X2, X3, X4, X1h);
457  return -1;
458  }
459 
460  }
461 
462 
463  return ret;
464 }
465 
466 
467 //this len must be V
468 int
469 link_sanity_check(void* link, int len, int precision, int dir, QudaGaugeParam* gaugeParam)
470 {
471  int i;
472  int rc = 0;
473 
474  if (precision == QUDA_DOUBLE_PRECISION){
475  double* mylink = (double*)link;
476  //even
477  for (i = 0;i < len/2; i++){
478  rc = link_sanity_check_internal_12(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 0);
479  if (rc != 0){
480  printf("ERROR: even link sanity check failed, i=%d\n",i);
482  exit(1);
483  }
484  }
485 
486  mylink = mylink + gaugeSiteSize*len/2;
487  //odd
488  for (i = 0;i < len/2; i++){
489  rc = link_sanity_check_internal_12(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 1);
490  if (rc != 0){
491  printf("ERROR: odd link sanity check failed, i=%d\n",i);
493  exit(1);
494  }
495  }
496 
497  }else if (precision == QUDA_SINGLE_PRECISION){
498  float* mylink = (float*)link;
499 
500  //even
501  for (i=0;i < len/2 ;i++){
502  rc = link_sanity_check_internal_12(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 0);
503  if (rc != 0){
504  printf("ERROR: even link sanity check 12 failed, i=%d\n",i);
505  exit(1);
506  }
507  /*
508  rc = link_sanity_check_internal_8(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 0);
509  if (rc != 0){
510  printf("ERROR: even link sanity check 8 failed, i=%d\n",i);
511  exit(1);
512  }
513  */
514 
515  }
516  mylink = mylink + gaugeSiteSize*len/2;
517  //odd
518  for (i=0;i < len/2 ;i++){
519  rc = link_sanity_check_internal_12(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 1);
520  if (rc != 0){
521  printf("ERROR: odd link sanity check 12 failed, i=%d\n", i);
522  exit(1);
523  }
524  /*
525  rc = link_sanity_check_internal_8(mylink + gaugeSiteSize*i, dir, i, gaugeParam, 0);
526  if (rc != 0){
527  printf("ERROR: even link sanity check 8 failed, i=%d\n",i);
528  exit(1);
529  }
530  */
531  }
532 
533  }
534 
535  return rc;
536 }
537 
538 
539 
540 //this len must be V
541 int
542 site_link_sanity_check(void* link, int len, int precision, QudaGaugeParam* gaugeParam)
543 {
544  int i;
545  int rc = 0;
546  int dir;
547 
548  if (precision == QUDA_DOUBLE_PRECISION){
549  double* mylink = (double*)link;
550  //even
551  for (i = 0;i < len/2; i++){
552  for(dir=XUP;dir <= TUP; dir++){
553  rc = site_link_sanity_check_internal_12(mylink + gaugeSiteSize*(4*i+dir), dir, i, gaugeParam, 0);
554  if (rc != 0){
555  printf("ERROR: even link sanity check failed, i=%d, function %s\n",i, __FUNCTION__);
557  exit(1);
558  }
559  }
560  }
561 
562  mylink = mylink + 4*gaugeSiteSize*len/2;
563  //odd
564  for (i = 0;i < len/2; i++){
565  for(dir=XUP;dir <= TUP; dir++){
566  rc = site_link_sanity_check_internal_12(mylink + gaugeSiteSize*(4*i+dir), dir, i, gaugeParam, 1);
567  if (rc != 0){
568  printf("ERROR: odd link sanity check failed, i=%d, function %s\n",i, __FUNCTION__);
570  exit(1);
571  }
572  }
573  }
574 
575  }else if (precision == QUDA_SINGLE_PRECISION){
576  float* mylink = (float*)link;
577 
578  //even
579  for (i=0;i < len/2 ;i++){
580  for(dir=XUP;dir <= TUP; dir++){
581  rc = site_link_sanity_check_internal_12(mylink + gaugeSiteSize*(4*i+dir), dir, i, gaugeParam, 0);
582  if (rc != 0){
583  printf("ERROR: even link sanity check 12 failed, i=%d, function %s\n",i, __FUNCTION__);
584  exit(1);
585  }
586  }
587  }
588  mylink = mylink + 4*gaugeSiteSize*len/2;
589  //odd
590  for (i=0;i < len/2 ;i++){
591  for(dir=XUP;dir <= TUP; dir++){
592  rc = site_link_sanity_check_internal_12(mylink + gaugeSiteSize*(4*i+dir), dir, i, gaugeParam, 1);
593  if (rc != 0){
594  printf("ERROR: odd link sanity check 12 failed, i=%d, function %s\n", i, __FUNCTION__);
595  exit(1);
596  }
597  }
598  }
599 
600  }
601 
602  return rc;
603 }
604 
607 {
609 
610  if (strcmp(s, "silent") == 0){
611  ret = QUDA_SILENT;
612  }else if (strcmp(s, "summarize") == 0){
613  ret = QUDA_SUMMARIZE;
614  }else if (strcmp(s, "verbose") == 0){
615  ret = QUDA_VERBOSE;
616  }else if (strcmp(s, "debug") == 0){
617  ret = QUDA_DEBUG_VERBOSE;
618  }else{
619  fprintf(stderr, "Error: invalid verbosity type %s\n", s);
620  exit(1);
621  }
622 
623  return ret;
624 }
625 
626 const char *
628 {
629  const char* ret;
630 
631  switch(type) {
632  case QUDA_SILENT:
633  ret = "silent";
634  break;
635  case QUDA_SUMMARIZE:
636  ret = "summarize";
637  break;
638  case QUDA_VERBOSE:
639  ret = "verbose";
640  break;
641  case QUDA_DEBUG_VERBOSE:
642  ret = "debug";
643  break;
644  default:
645  fprintf(stderr, "Error: invalid verbosity type %d\n", type);
646  exit(1);
647  }
648 
649  return ret;
650 }
651 
653 get_recon(char* s)
654 {
656 
657  if (strcmp(s, "8") == 0){
658  ret = QUDA_RECONSTRUCT_8;
659  }else if (strcmp(s, "9") == 0){
660  ret = QUDA_RECONSTRUCT_9;
661  }else if (strcmp(s, "12") == 0){
662  ret = QUDA_RECONSTRUCT_12;
663  }else if (strcmp(s, "13") == 0){
664  ret = QUDA_RECONSTRUCT_13;
665  }else if (strcmp(s, "18") == 0){
666  ret = QUDA_RECONSTRUCT_NO;
667  }else{
668  fprintf(stderr, "Error: invalid reconstruct type\n");
669  exit(1);
670  }
671 
672  return ret;
673 
674 
675 }
676 
678 get_prec(char* s)
679 {
681 
682  if (strcmp(s, "double") == 0) {
683  ret = QUDA_DOUBLE_PRECISION;
684  } else if (strcmp(s, "single") == 0) {
685  ret = QUDA_SINGLE_PRECISION;
686  } else if (strcmp(s, "half") == 0) {
687  ret = QUDA_HALF_PRECISION;
688  } else if (strcmp(s, "half") == 0) {
689  ret = QUDA_HALF_PRECISION;
690  } else if (strcmp(s, "quarter") == 0) {
692  } else {
693  fprintf(stderr, "Error: invalid precision type\n");
694  exit(1);
695  }
696 
697  return ret;
698 }
699 
700 const char*
702 {
703  const char* ret;
704 
705  switch (prec) {
707  ret= "double";
708  break;
710  ret= "single";
711  break;
712  case QUDA_HALF_PRECISION:
713  ret= "half";
714  break;
716  ret= "quarter";
717  break;
718  default:
719  ret = "unknown";
720  break;
721  }
722 
723  return ret;
724 }
725 
726 
727 const char*
728 get_unitarization_str(bool svd_only)
729 {
730  const char* ret;
731 
732  if(svd_only){
733  ret = "SVD";
734  }else{
735  ret = "Cayley-Hamilton/SVD";
736  }
737  return ret;
738 }
739 
740 const char*
742 {
743  const char* ret;
744 
745  switch(order){
747  ret = "qdp";
748  break;
749 
751  ret = "milc";
752  break;
753 
755  ret = "cps_wilson";
756  break;
757 
758  default:
759  ret = "unknown";
760  break;
761  }
762 
763  return ret;
764 }
765 
766 
767 const char*
769 {
770  const char* ret;
771  switch(recon){
772  case QUDA_RECONSTRUCT_13:
773  ret="13";
774  break;
775  case QUDA_RECONSTRUCT_12:
776  ret= "12";
777  break;
778  case QUDA_RECONSTRUCT_9:
779  ret="9";
780  break;
781  case QUDA_RECONSTRUCT_8:
782  ret = "8";
783  break;
784  case QUDA_RECONSTRUCT_NO:
785  ret = "18";
786  break;
787  default:
788  ret="unknown";
789  break;
790  }
791 
792  return ret;
793 }
794 
795 const char*
797 {
798  const char* ret;
799  switch(t){
800  case 0:
801  ret = "even";
802  break;
803  case 1:
804  ret = "odd";
805  break;
806  case 2:
807  ret = "full";
808  break;
809  case 3:
810  ret = "mcg_even";
811  break;
812  case 4:
813  ret = "mcg_odd";
814  break;
815  case 5:
816  ret = "mcg_full";
817  break;
818  default:
819  ret = "unknown";
820  break;
821  }
822 
823  return ret;
824 }
825 
826 const char*
828 {
829  const char* ret;
830  switch(t){
831  case 0:
832  ret = "full";
833  break;
834  case 1:
835  ret = "full_ee_prec";
836  break;
837  case 2:
838  ret = "full_oo_prec";
839  break;
840  case 3:
841  ret = "even";
842  break;
843  case 4:
844  ret = "odd";
845  break;
846  case 5:
847  ret = "mcg_even";
848  break;
849  case 6:
850  ret = "mcg_odd";
851  break;
852  default:
853  ret = "unknown";
854  break;
855  }
856 
857  return ret;
858 }
859 
860 int get_rank_order(char* s)
861 {
862  int ret = -1;
863 
864  if (strcmp(s, "col") == 0) {
865  ret = 0;
866  } else if (strcmp(s, "row") == 0) {
867  ret = 1;
868  } else {
869  fprintf(stderr, "Error: invalid rank order type\n");
870  exit(1);
871  }
872 
873  return ret;
874 }
875 
878 {
880 
881  if (strcmp(s, "wilson") == 0){
882  ret = QUDA_WILSON_DSLASH;
883  }else if (strcmp(s, "clover") == 0){
885  }else if (strcmp(s, "twisted-mass") == 0){
887  }else if (strcmp(s, "twisted-clover") == 0){
889  }else if (strcmp(s, "staggered") == 0){
890  ret = QUDA_STAGGERED_DSLASH;
891  }else if (strcmp(s, "asqtad") == 0){
892  ret = QUDA_ASQTAD_DSLASH;
893  }else if (strcmp(s, "domain-wall") == 0){
895  }else if (strcmp(s, "domain-wall-4d") == 0){
897  }else if (strcmp(s, "mobius") == 0){
899  }else if (strcmp(s, "laplace") == 0){
900  ret = QUDA_LAPLACE_DSLASH;
901  }else{
902  fprintf(stderr, "Error: invalid dslash type\n");
903  exit(1);
904  }
905 
906  return ret;
907 }
908 
909 const char*
911 {
912  const char* ret;
913 
914  switch( type){
915  case QUDA_WILSON_DSLASH:
916  ret= "wilson";
917  break;
919  ret= "clover";
920  break;
922  ret= "twisted-mass";
923  break;
925  ret= "twisted-clover";
926  break;
928  ret = "staggered";
929  break;
930  case QUDA_ASQTAD_DSLASH:
931  ret = "asqtad";
932  break;
934  ret = "domain-wall";
935  break;
937  ret = "domain_wall_4d";
938  break;
940  ret = "mobius";
941  break;
942  case QUDA_LAPLACE_DSLASH:
943  ret = "laplace";
944  break;
945  default:
946  ret = "unknown";
947  break;
948  }
949 
950 
951  return ret;
952 
953 }
954 
956 {
958 
959  if (strcmp(s, "open") == 0 || strcmp(s, "OPEN") == 0 || strcmp(s, "Open") == 0) {
961  } else if (strcmp(s, "dr") == 0 || strcmp(s, "DR") == 0) {
962  ret = QUDA_CONTRACT_TYPE_DR;
963  } else {
964  fprintf(stderr, "Error: invalid contract type\n");
965  exit(1);
966  }
967  return ret;
968 }
969 
971 {
972  const char *ret;
973 
974  switch (type) {
975  case QUDA_CONTRACT_TYPE_OPEN: ret = "open"; break;
976  case QUDA_CONTRACT_TYPE_DR: ret = "Degrand-Rossi"; break;
977  default: ret = "unknown"; break;
978  }
979 
980  return ret;
981 }
982 
984 {
985 
987 
988  if (strcmp(s, "SR") == 0) {
989  ret = QUDA_SPECTRUM_SR_EIG;
990  } else if (strcmp(s, "LR") == 0) {
991  ret = QUDA_SPECTRUM_LR_EIG;
992  } else if (strcmp(s, "SM") == 0) {
993  ret = QUDA_SPECTRUM_SM_EIG;
994  } else if (strcmp(s, "LM") == 0) {
995  ret = QUDA_SPECTRUM_LM_EIG;
996  } else if (strcmp(s, "SI") == 0) {
997  ret = QUDA_SPECTRUM_SI_EIG;
998  } else if (strcmp(s, "LI") == 0) {
999  ret = QUDA_SPECTRUM_LI_EIG;
1000  } else {
1001  fprintf(stderr, "Error: invalid eigen spectrum type\n");
1002  exit(1);
1003  }
1004 
1005  return ret;
1006 }
1007 
1009 {
1010  const char *ret;
1011 
1012  switch (type) {
1013  case QUDA_SPECTRUM_SR_EIG: ret = "SR"; break;
1014  case QUDA_SPECTRUM_LR_EIG: ret = "LR"; break;
1015  case QUDA_SPECTRUM_SM_EIG: ret = "SM"; break;
1016  case QUDA_SPECTRUM_LM_EIG: ret = "LM"; break;
1017  case QUDA_SPECTRUM_SI_EIG: ret = "SI"; break;
1018  case QUDA_SPECTRUM_LI_EIG: ret = "LI"; break;
1019  default: ret = "unknown eigenspectrum"; break;
1020  }
1021 
1022  return ret;
1023 }
1024 
1026 {
1027 
1029 
1030  if (strcmp(s, "trlm") == 0) {
1031  ret = QUDA_EIG_TR_LANCZOS;
1032  } else if (strcmp(s, "irlm") == 0) {
1033  ret = QUDA_EIG_IR_LANCZOS;
1034  } else if (strcmp(s, "iram") == 0) {
1035  ret = QUDA_EIG_IR_ARNOLDI;
1036  } else {
1037  fprintf(stderr, "Error: invalid quda eigensolver type\n");
1038  exit(1);
1039  }
1040 
1041  return ret;
1042 }
1043 
1045 {
1046  const char *ret;
1047 
1048  switch (type) {
1049  case QUDA_EIG_TR_LANCZOS: ret = "trlm"; break;
1050  case QUDA_EIG_IR_LANCZOS: ret = "irlm"; break;
1051  case QUDA_EIG_IR_ARNOLDI: ret = "iram"; break;
1052  default: ret = "unknown eigensolver"; break;
1053  }
1054 
1055  return ret;
1056 }
1057 
1059 {
1061 
1062  if (strcmp(s, "kappa") == 0) {
1064  } else if (strcmp(s, "mass") == 0) {
1066  } else if (strcmp(s, "asym-mass") == 0) {
1068  } else {
1069  fprintf(stderr, "Error: invalid mass normalization\n");
1070  exit(1);
1071  }
1072 
1073  return ret;
1074 }
1075 
1076 const char*
1078 {
1079  const char *s;
1080 
1081  switch (type) {
1083  s = "kappa";
1084  break;
1086  s = "mass";
1087  break;
1089  s = "asym-mass";
1090  break;
1091  default:
1092  fprintf(stderr, "Error: invalid mass normalization\n");
1093  exit(1);
1094  }
1095 
1096  return s;
1097 }
1098 
1101 {
1103 
1104  if (strcmp(s, "even-even") == 0){
1105  ret = QUDA_MATPC_EVEN_EVEN;
1106  }else if (strcmp(s, "odd-odd") == 0){
1107  ret = QUDA_MATPC_ODD_ODD;
1108  }else if (strcmp(s, "even-even-asym") == 0){
1110  }else if (strcmp(s, "odd-odd-asym") == 0){
1112  }else{
1113  fprintf(stderr, "Error: invalid matpc type %s\n", s);
1114  exit(1);
1115  }
1116 
1117  return ret;
1118 }
1119 
1120 const char *
1122 {
1123  const char* ret;
1124 
1125  switch(type) {
1126  case QUDA_MATPC_EVEN_EVEN:
1127  ret = "even-even";
1128  break;
1129  case QUDA_MATPC_ODD_ODD:
1130  ret = "odd-odd";
1131  break;
1133  ret = "even-even-asym";
1134  break;
1136  ret = "odd-odd-asym";
1137  break;
1138  default:
1139  fprintf(stderr, "Error: invalid matpc type %d\n", type);
1140  exit(1);
1141  }
1142 
1143  return ret;
1144 }
1145 
1147 {
1149 
1150  if (strcmp(s, "direct") == 0) {
1151  ret = QUDA_DIRECT_SOLVE;
1152  } else if (strcmp(s, "direct-pc") == 0) {
1153  ret = QUDA_DIRECT_PC_SOLVE;
1154  } else if (strcmp(s, "normop") == 0) {
1155  ret = QUDA_NORMOP_SOLVE;
1156  } else if (strcmp(s, "normop-pc") == 0) {
1157  ret = QUDA_NORMOP_PC_SOLVE;
1158  } else if (strcmp(s, "normerr") == 0) {
1159  ret = QUDA_NORMERR_SOLVE;
1160  } else if (strcmp(s, "normerr-pc") == 0) {
1161  ret = QUDA_NORMERR_PC_SOLVE;
1162  } else {
1163  fprintf(stderr, "Error: invalid matpc type %s\n", s);
1164  exit(1);
1165  }
1166 
1167  return ret;
1168 }
1169 
1170 const char *
1172 {
1173  const char* ret;
1174 
1175  switch(type) {
1176  case QUDA_DIRECT_SOLVE:
1177  ret = "direct";
1178  break;
1179  case QUDA_DIRECT_PC_SOLVE:
1180  ret = "direct-pc";
1181  break;
1182  case QUDA_NORMOP_SOLVE:
1183  ret = "normop";
1184  break;
1185  case QUDA_NORMOP_PC_SOLVE:
1186  ret = "normop-pc";
1187  break;
1188  case QUDA_NORMERR_SOLVE:
1189  ret = "normerr";
1190  break;
1191  case QUDA_NORMERR_PC_SOLVE:
1192  ret = "normerr-pc";
1193  break;
1194  default:
1195  fprintf(stderr, "Error: invalid solve type %d\n", type);
1196  exit(1);
1197  }
1198 
1199  return ret;
1200 }
1201 
1203 {
1205 
1206  if (strcmp(s, "mat") == 0) {
1207  ret = QUDA_MAT_SOLUTION;
1208  } else if (strcmp(s, "mat-dag-mat") == 0) {
1210  } else if (strcmp(s, "mat-pc") == 0) {
1211  ret = QUDA_MATPC_SOLUTION;
1212  } else if (strcmp(s, "mat-pc-dag") == 0) {
1214  } else if (strcmp(s, "mat-pc-dag-mat-pc") == 0) {
1216  } else {
1217  fprintf(stderr, "Error: invalid solution type %s\n", s);
1218  exit(1);
1219  }
1220 
1221  return ret;
1222 }
1223 
1225 {
1227 
1228  if (strcmp(s, "false") == 0) {
1229  ret = QUDA_INVALID_SCHWARZ;
1230  } else if (strcmp(s, "add") == 0) {
1231  ret = QUDA_ADDITIVE_SCHWARZ;
1232  } else if (strcmp(s, "mul") == 0) {
1234  } else {
1235  fprintf(stderr, "Error: invalid Schwarz type %s\n", s);
1236  exit(1);
1237  }
1238 
1239  return ret;
1240 }
1241 
1244 {
1246 
1247  if (strcmp(s, "singlet") == 0){
1248  ret = QUDA_TWIST_SINGLET;
1249  }else if (strcmp(s, "deg-doublet") == 0){
1250  ret = QUDA_TWIST_DEG_DOUBLET;
1251  }else if (strcmp(s, "nondeg-doublet") == 0){
1253  }else if (strcmp(s, "no") == 0){
1254  ret = QUDA_TWIST_NO;
1255  }else{
1256  fprintf(stderr, "Error: invalid flavor type\n");
1257  exit(1);
1258  }
1259 
1260  return ret;
1261 }
1262 
1263 const char*
1265 {
1266  const char* ret;
1267 
1268  switch(type) {
1269  case QUDA_TWIST_SINGLET:
1270  ret = "singlet";
1271  break;
1273  ret = "deg-doublet";
1274  break;
1276  ret = "nondeg-doublet";
1277  break;
1278  case QUDA_TWIST_NO:
1279  ret = "no";
1280  break;
1281  default:
1282  ret = "unknown";
1283  break;
1284  }
1285 
1286  return ret;
1287 }
1288 
1291 {
1293 
1294  if (strcmp(s, "cg") == 0){
1295  ret = QUDA_CG_INVERTER;
1296  } else if (strcmp(s, "bicgstab") == 0){
1297  ret = QUDA_BICGSTAB_INVERTER;
1298  } else if (strcmp(s, "gcr") == 0){
1299  ret = QUDA_GCR_INVERTER;
1300  } else if (strcmp(s, "pcg") == 0){
1301  ret = QUDA_PCG_INVERTER;
1302  } else if (strcmp(s, "mpcg") == 0){
1303  ret = QUDA_MPCG_INVERTER;
1304  } else if (strcmp(s, "mpbicgstab") == 0){
1306  } else if (strcmp(s, "mr") == 0){
1307  ret = QUDA_MR_INVERTER;
1308  } else if (strcmp(s, "sd") == 0){
1309  ret = QUDA_SD_INVERTER;
1310  } else if (strcmp(s, "eigcg") == 0){
1311  ret = QUDA_EIGCG_INVERTER;
1312  } else if (strcmp(s, "inc-eigcg") == 0){
1314  } else if (strcmp(s, "gmresdr") == 0){
1315  ret = QUDA_GMRESDR_INVERTER;
1316  } else if (strcmp(s, "gmresdr-proj") == 0){
1318  } else if (strcmp(s, "gmresdr-sh") == 0){
1320  } else if (strcmp(s, "fgmresdr") == 0){
1321  ret = QUDA_FGMRESDR_INVERTER;
1322  } else if (strcmp(s, "mg") == 0){
1323  ret = QUDA_MG_INVERTER;
1324  } else if (strcmp(s, "bicgstab-l") == 0){
1326  } else if (strcmp(s, "cgne") == 0){
1327  ret = QUDA_CGNE_INVERTER;
1328  } else if (strcmp(s, "cgnr") == 0){
1329  ret = QUDA_CGNR_INVERTER;
1330  } else if (strcmp(s, "cg3") == 0){
1331  ret = QUDA_CG3_INVERTER;
1332  } else if (strcmp(s, "cg3ne") == 0){
1333  ret = QUDA_CG3NE_INVERTER;
1334  } else if (strcmp(s, "cg3nr") == 0){
1335  ret = QUDA_CG3NR_INVERTER;
1336  } else if (strcmp(s, "ca-cg") == 0){
1337  ret = QUDA_CA_CG_INVERTER;
1338  } else if (strcmp(s, "ca-cgne") == 0){
1339  ret = QUDA_CA_CGNE_INVERTER;
1340  } else if (strcmp(s, "ca-cgnr") == 0){
1341  ret = QUDA_CA_CGNR_INVERTER;
1342  } else if (strcmp(s, "ca-gcr") == 0){
1343  ret = QUDA_CA_GCR_INVERTER;
1344  } else {
1345  fprintf(stderr, "Error: invalid solver type %s\n", s);
1346  exit(1);
1347  }
1348 
1349  return ret;
1350 }
1351 
1352 const char*
1354 {
1355  const char* ret;
1356 
1357  switch(type){
1358  case QUDA_CG_INVERTER:
1359  ret = "cg";
1360  break;
1362  ret = "bicgstab";
1363  break;
1364  case QUDA_GCR_INVERTER:
1365  ret = "gcr";
1366  break;
1367  case QUDA_PCG_INVERTER:
1368  ret = "pcg";
1369  break;
1370  case QUDA_MPCG_INVERTER:
1371  ret = "mpcg";
1372  break;
1374  ret = "mpbicgstab";
1375  break;
1376  case QUDA_MR_INVERTER:
1377  ret = "mr";
1378  break;
1379  case QUDA_SD_INVERTER:
1380  ret = "sd";
1381  break;
1382  case QUDA_EIGCG_INVERTER:
1383  ret = "eigcg";
1384  break;
1386  ret = "inc-eigcg";
1387  break;
1388  case QUDA_GMRESDR_INVERTER:
1389  ret = "gmresdr";
1390  break;
1392  ret = "gmresdr-proj";
1393  break;
1395  ret = "gmresdr-sh";
1396  break;
1398  ret = "fgmresdr";
1399  break;
1400  case QUDA_MG_INVERTER:
1401  ret= "mg";
1402  break;
1404  ret = "bicgstab-l";
1405  break;
1406  case QUDA_CGNE_INVERTER:
1407  ret = "cgne";
1408  break;
1409  case QUDA_CGNR_INVERTER:
1410  ret = "cgnr";
1411  break;
1412  case QUDA_CG3_INVERTER:
1413  ret = "cg3";
1414  break;
1415  case QUDA_CG3NE_INVERTER:
1416  ret = "cg3ne";
1417  break;
1418  case QUDA_CG3NR_INVERTER:
1419  ret = "cg3nr";
1420  break;
1421  case QUDA_CA_CG_INVERTER:
1422  ret = "ca-cg";
1423  break;
1424  case QUDA_CA_CGNE_INVERTER:
1425  ret = "ca-cgne";
1426  break;
1427  case QUDA_CA_CGNR_INVERTER:
1428  ret = "ca-cgnr";
1429  break;
1430  case QUDA_CA_GCR_INVERTER:
1431  ret = "ca-gcr";
1432  break;
1433  default:
1434  ret = "unknown";
1435  errorQuda("Error: invalid solver type %d\n", type);
1436  break;
1437  }
1438 
1439  return ret;
1440 }
1441 
1442 const char*
1444 {
1445  static char vstr[32];
1446  int major_num = QUDA_VERSION_MAJOR;
1447  int minor_num = QUDA_VERSION_MINOR;
1448  int ext_num = QUDA_VERSION_SUBMINOR;
1449  sprintf(vstr, "%1d.%1d.%1d",
1450  major_num,
1451  minor_num,
1452  ext_num);
1453  return vstr;
1454 }
1455 
1456 
1459 {
1461 
1462  if (strcmp(s, "eigen") == 0) {
1463  ret = QUDA_EIGEN_EXTLIB;
1464  } else if (strcmp(s, "magma") == 0) {
1465  ret = QUDA_MAGMA_EXTLIB;
1466  } else {
1467  fprintf(stderr, "Error: invalid external library type %s\n", s);
1468  exit(1);
1469  }
1470 
1471  return ret;
1472 }
1473 
1476 {
1478 
1479  if (strcmp(s, "cpu") == 0 || strcmp(s, "host") == 0) {
1481  } else if (strcmp(s, "gpu") == 0 || strcmp(s, "cuda") == 0) {
1483  } else {
1484  fprintf(stderr, "Error: invalid location %s\n", s);
1485  exit(1);
1486  }
1487 
1488  return ret;
1489 }
1490 
1492 {
1493  const char *s;
1494 
1495  switch (type) {
1496  case QUDA_CPU_FIELD_LOCATION: s = "cpu"; break;
1497  case QUDA_CUDA_FIELD_LOCATION: s = "cuda"; break;
1498  default: fprintf(stderr, "Error: invalid location\n"); exit(1);
1499  }
1500 
1501  return s;
1502 }
1503 
1506 {
1508 
1509  if (strcmp(s, "device") == 0) {
1510  ret = QUDA_MEMORY_DEVICE;
1511  } else if (strcmp(s, "pinned") == 0) {
1512  ret = QUDA_MEMORY_PINNED;
1513  } else if (strcmp(s, "mapped") == 0) {
1514  ret = QUDA_MEMORY_MAPPED;
1515  } else {
1516  fprintf(stderr, "Error: invalid memory type %s\n", s);
1517  exit(1);
1518  }
1519 
1520  return ret;
1521 }
1522 
1524 {
1525  const char *s;
1526 
1527  switch (type) {
1528  case QUDA_MEMORY_DEVICE: s = "device"; break;
1529  case QUDA_MEMORY_PINNED: s = "pinned"; break;
1530  case QUDA_MEMORY_MAPPED: s = "mapped"; break;
1531  default: fprintf(stderr, "Error: invalid memory type\n"); exit(1);
1532  }
1533 
1534  return s;
1535 }
enum QudaMassNormalization_s QudaMassNormalization
QudaGaugeParam gaugeParam
Definition: covdev_test.cpp:36
QudaSolutionType get_solution_type(char *s)
Definition: misc.cpp:1202
#define SMALL_NUM
void complexDotProduct(Float *a, Float *b, Float *c)
Definition: misc.cpp:302
enum QudaPrecision_s QudaPrecision
QudaTwistFlavorType get_flavor_type(char *s)
Definition: misc.cpp:1243
QudaPrecision get_prec(char *s)
Definition: misc.cpp:678
void accumulateComplexDotProduct(Float *a, Float *b, Float *c)
Definition: misc.cpp:316
int site_link_sanity_check(void *link, int len, int precision, QudaGaugeParam *gaugeParam)
Definition: misc.cpp:542
static int X2
Definition: face_gauge.cpp:42
#define errorQuda(...)
Definition: util_quda.h:121
#define stSpinorSiteSize
Definition: misc.cpp:12
const char * get_memory_type_str(QudaMemoryType type)
Definition: misc.cpp:1523
enum QudaSolveType_s QudaSolveType
__host__ __device__ ValueType sqrt(ValueType x)
Definition: complex_quda.h:120
const char * get_eig_spectrum_str(QudaEigSpectrumType type)
Definition: misc.cpp:1008
#define QUDA_VERSION_MINOR
Definition: quda_constants.h:2
const char * get_matpc_str(QudaMatPCType type)
Definition: misc.cpp:1121
const char * get_contract_str(QudaContractType type)
Definition: misc.cpp:970
const char * get_ritz_location_str(QudaFieldLocation type)
Definition: misc.cpp:1491
const char * get_gauge_order_str(QudaGaugeFieldOrder order)
Definition: misc.cpp:741
const char * get_staggered_test_type(int t)
Definition: misc.cpp:827
const char * get_prec_str(QudaPrecision prec)
Definition: misc.cpp:701
int get_rank_order(char *s)
Definition: misc.cpp:860
enum QudaEigType_s QudaEigType
QudaReconstructType get_recon(char *s)
Definition: misc.cpp:653
void accumulateConjugateProduct(Float *a, Float *b, Float *c, int sign)
Definition: misc.cpp:84
QudaFieldLocation get_location(char *s)
Definition: misc.cpp:1475
void accumulateComplexProduct(Float *a, Float *b, Float *c, Float sign)
Definition: misc.cpp:309
const char * get_flavor_str(QudaTwistFlavorType type)
Definition: misc.cpp:1264
const char * get_test_type(int t)
Definition: misc.cpp:796
QudaSchwarzType get_schwarz_type(char *s)
Definition: misc.cpp:1224
const char * get_solver_str(QudaInverterType type)
Definition: misc.cpp:1353
int fullLatticeIndex(int dim[4], int index, int oddBit)
Definition: test_util.cpp:439
QudaSolveType get_solve_type(char *s)
Definition: misc.cpp:1146
bool last_node_in_t()
Definition: test_util.cpp:118
void complexProduct(Float *a, Float *b, Float *c)
Definition: misc.cpp:288
QudaExtLibType get_solve_ext_lib_type(char *s)
Definition: misc.cpp:1458
const char * get_eig_type_str(QudaEigType type)
Definition: misc.cpp:1044
const char * get_solve_str(QudaSolveType type)
Definition: misc.cpp:1171
const char * get_unitarization_str(bool svd_only)
Definition: misc.cpp:728
QudaInverterType get_solver_type(char *s)
Definition: misc.cpp:1290
void display_link_internal(Float *link)
Definition: misc.cpp:47
__host__ __device__ ValueType sin(ValueType x)
Definition: complex_quda.h:51
void display_spinor(void *spinor, int len, int precision)
Definition: misc.cpp:26
const char * get_mass_normalization_str(QudaMassNormalization type)
Definition: misc.cpp:1077
QudaDslashType get_dslash_type(char *s)
Definition: misc.cpp:877
const char * get_recon_str(QudaReconstructType recon)
Definition: misc.cpp:768
QudaEigSpectrumType get_eig_spectrum_type(char *s)
Definition: misc.cpp:983
__host__ __device__ ValueType atan2(ValueType x, ValueType y)
Definition: complex_quda.h:76
enum QudaMatPCType_s QudaMatPCType
int link_sanity_check(void *link, int len, int precision, int dir, QudaGaugeParam *gaugeParam)
Definition: misc.cpp:469
enum QudaSolutionType_s QudaSolutionType
#define QUDA_VERSION_SUBMINOR
Definition: quda_constants.h:3
enum QudaSchwarzType_s QudaSchwarzType
QudaMatPCType get_matpc_type(char *s)
Definition: misc.cpp:1100
const char * get_dslash_str(QudaDslashType type)
Definition: misc.cpp:910
enum QudaGaugeFieldOrder_s QudaGaugeFieldOrder
int link_sanity_check_internal_8(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
Definition: misc.cpp:323
int X[4]
Definition: quda.h:36
QudaEigType get_eig_type(char *s)
Definition: misc.cpp:1025
static int X3
Definition: face_gauge.cpp:42
QudaMemoryType get_df_mem_type_ritz(char *s)
Definition: misc.cpp:1505
void display_link(void *link, int len, int precision)
Definition: misc.cpp:63
static int X1
Definition: face_gauge.cpp:42
void * memset(void *s, int c, size_t n)
static int index(int ndim, const int *dims, const int *x)
Definition: comm_common.cpp:32
enum QudaFieldLocation_s QudaFieldLocation
double tadpole_coeff
Definition: quda.h:39
int link_sanity_check_internal_12(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
Definition: misc.cpp:91
cpuColorSpinorField * ref
enum QudaEigSpectrumType_s QudaEigSpectrumType
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
__shared__ float s[]
const char * get_verbosity_str(QudaVerbosity type)
Definition: misc.cpp:627
QudaTboundary t_boundary
Definition: quda.h:45
void complexConjugateProduct(Float *a, Float *b, Float *c)
Definition: misc.cpp:295
QudaMassNormalization get_mass_normalization_type(char *s)
Definition: misc.cpp:1058
enum QudaDslashType_s QudaDslashType
void display_spinor_internal(Float *spinor)
Definition: misc.cpp:14
enum QudaContractType_s QudaContractType
int site_link_sanity_check_internal_12(Float *link, int dir, int ga_idx, QudaGaugeParam *gaugeParam, int oddBit)
Definition: misc.cpp:190
__host__ __device__ ValueType cos(ValueType x)
Definition: complex_quda.h:46
enum QudaVerbosity_s QudaVerbosity
QudaVerbosity get_verbosity_type(char *s)
Definition: misc.cpp:606
const char * get_quda_ver_str()
Definition: misc.cpp:1443
QudaContractType get_contract_type(char *s)
Definition: misc.cpp:955
QudaPrecision prec
Definition: test_util.cpp:1608
#define QUDA_VERSION_MAJOR
Definition: quda_constants.h:1
void complexAddTo(Float *a, Float *b)
Definition: misc.cpp:281
enum QudaInverterType_s QudaInverterType
enum QudaMemoryType_s QudaMemoryType
cpuColorSpinorField * spinor
Definition: covdev_test.cpp:41
enum QudaExtLibType_s QudaExtLibType
static int X4
Definition: face_gauge.cpp:42
#define gaugeSiteSize
Definition: face_gauge.cpp:34
enum QudaTwistFlavorType_s QudaTwistFlavorType