QUDA  0.9.0
check_params.h
Go to the documentation of this file.
1 // check_params.h
2 
3 // This file defines functions to either initialize, check, or print
4 // the QUDA gauge and inverter parameters. It gets included in
5 // interface_quda.cpp, after either INIT_PARAM, CHECK_PARAM, or
6 // PRINT_PARAM is defined.
7 //
8 // If you're reading this file because it was mentioned in a "QUDA
9 // error" message, it probably means that you forgot to set one of the
10 // gauge or inverter parameters in your application before calling
11 // loadGaugeQuda() or invertQuda().
12 
13 #include <float.h>
14 #define INVALID_INT QUDA_INVALID_ENUM
15 #define INVALID_DOUBLE DBL_MIN
16 
17 // define macro to carry out the appropriate action for a given parameter
18 
19 #if defined INIT_PARAM
20 #define P(x, val) ret.x = val
21 #elif defined CHECK_PARAM
22 #define P(x, val) if (param->x == val) errorQuda("Parameter " #x " undefined")
23 #elif defined PRINT_PARAM
24 #define P(x, val) \
25  { if (val == INVALID_DOUBLE) printfQuda(#x " = %g\n", (double)param->x); \
26  else printfQuda(#x " = %d\n", (int)param->x); }
27 #else
28 #error INIT_PARAM, CHECK_PARAM, and PRINT_PARAM all undefined in check_params.h
29 #endif
30 
31 
32 // define the appropriate function for GaugeParam
33 
34 #if defined INIT_PARAM
37 #elif defined CHECK_PARAM
38 static void checkGaugeParam(QudaGaugeParam *param) {
39 #else
41  printfQuda("QUDA Gauge Parameters:\n");
42 #endif
43 
44 #if defined INIT_PARAM
45  P(location, QUDA_CPU_FIELD_LOCATION);
46 #else
47  P(location, QUDA_INVALID_FIELD_LOCATION);
48 #endif
49 
50  for (int i=0; i<4; i++) P(X[i], INVALID_INT);
51 
52 #if defined INIT_PARAM
54  P(tadpole_coeff, INVALID_DOUBLE);
55  P(scale, INVALID_DOUBLE);
56 #else
57  if (param->type == QUDA_WILSON_LINKS) {
59  } else if (param->type == QUDA_ASQTAD_FAT_LINKS ||
61  P(tadpole_coeff, INVALID_DOUBLE);
62  //P(scale, INVALID_DOUBLE);
63  }
64 #endif
65 
66  P(type, QUDA_INVALID_LINKS);
68  P(t_boundary, QUDA_INVALID_T_BOUNDARY);
71  P(reconstruct, QUDA_RECONSTRUCT_INVALID);
72 #if defined INIT_PARAM
74  P(reconstruct_sloppy, QUDA_RECONSTRUCT_INVALID);
76  P(reconstruct_precondition, QUDA_RECONSTRUCT_INVALID);
77 #else
86 #endif
87 
88  P(gauge_fix, QUDA_GAUGE_FIXED_INVALID);
89 
90  P(ga_pad, INVALID_INT);
91 
92 #if defined INIT_PARAM
93  P(gaugeGiB, 0.0);
94 #else
95  P(gaugeGiB, INVALID_DOUBLE);
96 #endif
97 
98 
99 #if defined INIT_PARAM
100  P(staggered_phase_type, QUDA_STAGGERED_PHASE_NO);
101  P(staggered_phase_applied, 0);
102  P(i_mu, 0.0);
103  P(overlap, 0);
104 #else
105  P(staggered_phase_type, QUDA_STAGGERED_PHASE_INVALID);
106  P(staggered_phase_applied, INVALID_INT);
107  P(i_mu, INVALID_DOUBLE);
108  P(overlap, INVALID_INT);
109 #endif
110 
111 #if defined INIT_PARAM
112  P(overwrite_mom, 0);
113  P(use_resident_gauge, 0);
114  P(use_resident_mom, 0);
115  P(make_resident_gauge, 0);
116  P(make_resident_mom, 0);
117  P(return_result_gauge, 1);
118  P(return_result_mom, 1);
119  P(gauge_offset, 0);
120  P(mom_offset, 0);
121  P(site_size, 0);
122 #else
123  P(overwrite_mom, INVALID_INT);
124  P(use_resident_gauge, INVALID_INT);
125  P(use_resident_mom, INVALID_INT);
126  P(make_resident_gauge, INVALID_INT);
127  P(make_resident_mom, INVALID_INT);
128  P(return_result_gauge, INVALID_INT);
129  P(return_result_mom, INVALID_INT);
130 #endif
131 
132 #ifdef INIT_PARAM
133  return ret;
134 #endif
135 }
136 
137 // define the appropriate function for EigParam
138 
139 #if defined INIT_PARAM
142 #elif defined CHECK_PARAM
143 static void checkEigParam(QudaEigParam *param) {
144 #else
146  printfQuda("QUDA Eig Parameters:\n");
147 #endif
148 
149 #if defined INIT_PARAM
150  P(RitzMat_lanczos, QUDA_INVALID_SOLUTION);
151  P(RitzMat_Convcheck, QUDA_INVALID_SOLUTION);
152  P(eig_type, QUDA_INVALID_TYPE);
153  P(NPoly, 0);
154  P(Stp_residual, 0.0);
155  P(nk, 0);
156  P(np, 0);
157  P(f_size, 0);
158  P(eigen_shift, 0.0);
159  P(extlib_type, QUDA_EIGEN_EXTLIB);
161 #else
162  P(NPoly, INVALID_INT);
163  P(Stp_residual, INVALID_DOUBLE);
164  P(nk, INVALID_INT);
165  P(np, INVALID_INT);
166  P(f_size, INVALID_INT);
167  P(eigen_shift, INVALID_DOUBLE);
168  P(extlib_type, QUDA_EXTLIB_INVALID);
170 #endif
171 
172 #if defined INIT_PARAM
173  P(location, QUDA_CUDA_FIELD_LOCATION);
174 #else
175  P(location, QUDA_INVALID_FIELD_LOCATION);
176 #endif
177 
178 #ifdef INIT_PARAM
179  return ret;
180 #endif
181 }
182 // define the appropriate function for InvertParam
183 
184 #if defined INIT_PARAM
188 #elif defined CHECK_PARAM
189 static void checkInvertParam(QudaInvertParam *param) {
190 #else
192  printfQuda("QUDA Inverter Parameters:\n");
193 #endif
194 
197 
198 #if defined INIT_PARAM
199  P(mass, INVALID_DOUBLE);
200  P(kappa, INVALID_DOUBLE);
201  P(m5, INVALID_DOUBLE);
202  P(Ls, INVALID_INT);
203  P(mu, INVALID_DOUBLE);
205 #else
206  // asqtad and domain wall use mass parameterization
207  if (param->dslash_type == QUDA_STAGGERED_DSLASH ||
208  param->dslash_type == QUDA_ASQTAD_DSLASH ||
209  param->dslash_type == QUDA_DOMAIN_WALL_DSLASH ||
210  param->dslash_type == QUDA_DOMAIN_WALL_4D_DSLASH ||
211  param->dslash_type == QUDA_MOBIUS_DWF_DSLASH ) {
212  P(mass, INVALID_DOUBLE);
213  } else { // Wilson and clover use kappa parameterization
214  P(kappa, INVALID_DOUBLE);
215  }
216  if (param->dslash_type == QUDA_DOMAIN_WALL_DSLASH ||
217  param->dslash_type == QUDA_DOMAIN_WALL_4D_DSLASH ||
218  param->dslash_type == QUDA_MOBIUS_DWF_DSLASH ) {
219  P(m5, INVALID_DOUBLE);
220  P(Ls, INVALID_INT);
221  }
222  if (param->dslash_type == QUDA_TWISTED_MASS_DSLASH) {
223  P(mu, INVALID_DOUBLE);
225  }
226 #endif
227 
228  P(tol, INVALID_DOUBLE);
229 
230 #ifdef INIT_PARAM
231  P(residual_type, QUDA_L2_RELATIVE_RESIDUAL);
232 #else
233  P(residual_type, QUDA_INVALID_RESIDUAL);
234 #endif
235 
236  if (param->residual_type & QUDA_HEAVY_QUARK_RESIDUAL) {
238  }
239 
240  P(maxiter, INVALID_INT);
241  P(reliable_delta, INVALID_DOUBLE);
242 #ifdef INIT_PARAM
243  P(use_sloppy_partial_accumulator, 0);
245  P(max_res_increase, 1);
246  P(max_res_increase_total, 10);
247  P(heavy_quark_check, 10);
248  #else
249  P(use_sloppy_partial_accumulator, INVALID_INT);
251  P(max_res_increase, INVALID_INT);
252  P(max_res_increase_total, INVALID_INT);
253  P(heavy_quark_check, INVALID_INT);
254 #endif
255 
256 #ifndef CHECK_PARAM
257  P(pipeline, 0);
258  P(num_offset, 0);
259  P(num_src, 1);
260  P(overlap, 0);
261 #endif
262 
263 #ifdef INIT_PARAM
264  P(compute_action, 0);
265  P(compute_true_res, 1);
266 #else
267  P(compute_action, INVALID_INT);
268  P(compute_true_res, INVALID_INT);
269 #endif
270 
271  if (param->num_offset > 0) {
272 
273  for (int i=0; i<param->num_offset; i++) {
274  P(offset[i], INVALID_DOUBLE);
275  P(tol_offset[i], INVALID_DOUBLE);
276  if (param->residual_type & QUDA_HEAVY_QUARK_RESIDUAL)
277  P(tol_hq_offset[i], INVALID_DOUBLE);
278 #ifndef CHECK_PARAM
279  P(true_res_offset[i], INVALID_DOUBLE);
280  P(iter_res_offset[i], INVALID_DOUBLE);
281 #endif
282  if (param->compute_action) P(residue[i], INVALID_DOUBLE);
283  }
284 #ifndef CHECK_PARAM
285  P(action[0], INVALID_DOUBLE);
286  P(action[1], INVALID_DOUBLE);
287 #endif
288  }
289 
290  P(solution_type, QUDA_INVALID_SOLUTION);
294  P(mass_normalization, QUDA_INVALID_NORMALIZATION);
295 #ifndef CHECK_PARAM
296  P(solver_normalization, QUDA_DEFAULT_NORMALIZATION);
297 #endif
298  P(preserve_source, QUDA_PRESERVE_SOURCE_INVALID);
301 
302 #if defined INIT_PARAM
305 #else
310 #endif
311 
312  // leave the default behviour to cpu pointers
313 #if defined INIT_PARAM
314  P(input_location, QUDA_CPU_FIELD_LOCATION);
315  P(output_location, QUDA_CPU_FIELD_LOCATION);
316  P(clover_location, QUDA_CPU_FIELD_LOCATION);
317 #else
318  P(input_location, QUDA_INVALID_FIELD_LOCATION);
319  P(output_location, QUDA_INVALID_FIELD_LOCATION);
320  P(clover_location, QUDA_INVALID_FIELD_LOCATION);
321 #endif
322 
323  P(gamma_basis, QUDA_INVALID_GAMMA_BASIS);
324  P(dirac_order, QUDA_INVALID_DIRAC_ORDER);
325  P(sp_pad, INVALID_INT);
326 
327 #if defined INIT_PARAM
328  P(Nsteps, INVALID_INT);
329 #else
330  if(param->inv_type == QUDA_MPCG_INVERTER || param->inv_type == QUDA_MPBICGSTAB_INVERTER){
331  P(Nsteps, INVALID_INT);
332  }
333 #endif
334 
335 #if defined INIT_PARAM
337 #else
338  if (param->inv_type == QUDA_GCR_INVERTER) {
340  }
341 #endif
342 
343  // domain decomposition parameters
344  //P(inv_type_sloppy, QUDA_INVALID_INVERTER); // disable since invalid means no preconditioner
345 #if defined INIT_PARAM
346  P(inv_type_precondition, QUDA_INVALID_INVERTER);
347  P(preconditioner, 0);
348  P(tol_precondition, INVALID_DOUBLE);
349  P(maxiter_precondition, INVALID_INT);
350  P(verbosity_precondition, QUDA_INVALID_VERBOSITY);
351  P(schwarz_type, QUDA_ADDITIVE_SCHWARZ); // defaults match previous interface behaviour
352  P(precondition_cycle, 1); // defaults match previous interface behaviour
353 #else
354  if (param->inv_type_precondition == QUDA_BICGSTAB_INVERTER ||
355  param->inv_type_precondition == QUDA_CG_INVERTER ||
356  param->inv_type_precondition == QUDA_MR_INVERTER) {
357  P(tol_precondition, INVALID_DOUBLE);
358  P(maxiter_precondition, INVALID_INT);
359  P(verbosity_precondition, QUDA_INVALID_VERBOSITY);
360  P(schwarz_type, QUDA_INVALID_SCHWARZ);
361  P(precondition_cycle, 0);
362  }
363 #endif
364 
365 
366 
367 
368 #ifdef INIT_PARAM
369  P(use_init_guess, QUDA_USE_INIT_GUESS_NO); //set the default to no
370  //P(compute_null_vector, QUDA_COMPUTE_NULL_VECTOR_NO); //set the default to no
371  P(omega, 1.0); // set default to no relaxation
372 #else
373  P(use_init_guess, QUDA_USE_INIT_GUESS_INVALID);
374  //P(compute_null_vector, QUDA_COMPUTE_NULL_VECTOR_INVALID);
375  P(omega, INVALID_DOUBLE);
376 #endif
377 
378 #ifndef INIT_PARAM
379  if (param->dslash_type == QUDA_CLOVER_WILSON_DSLASH ||
380  param->dslash_type == QUDA_TWISTED_CLOVER_DSLASH) {
381 #endif
382  P(clover_cpu_prec, QUDA_INVALID_PRECISION);
383  P(clover_cuda_prec, QUDA_INVALID_PRECISION);
384 #if defined INIT_PARAM
385  P(clover_cuda_prec_sloppy, QUDA_INVALID_PRECISION);
386  P(clover_cuda_prec_precondition, QUDA_INVALID_PRECISION);
387  P(compute_clover_trlog, 0);
388  P(compute_clover, 0);
389  P(compute_clover_inverse, 0);
390  P(return_clover, 0);
391  P(return_clover_inverse, 0);
392  P(clover_rho, 0.0);
393 #else
394  if (param->clover_cuda_prec_sloppy == QUDA_INVALID_PRECISION)
395  param->clover_cuda_prec_sloppy = param->clover_cuda_prec;
396  if (param->clover_cuda_prec_precondition == QUDA_INVALID_PRECISION)
397  param->clover_cuda_prec_precondition = param->clover_cuda_prec_sloppy;
398  P(compute_clover_trlog, QUDA_INVALID_PRECISION);
400  P(compute_clover_inverse, QUDA_INVALID_PRECISION);
401  P(return_clover, QUDA_INVALID_PRECISION);
402  P(return_clover_inverse, QUDA_INVALID_PRECISION);
403  P(clover_rho, INVALID_DOUBLE);
404 #endif
405  P(clover_order, QUDA_INVALID_CLOVER_ORDER);
406  P(cl_pad, INVALID_INT);
407 
409 #ifndef INIT_PARAM
410  }
411 #endif
412 
414 
415 #ifdef INIT_PARAM
416  P(iter, 0);
417  P(spinorGiB, 0.0);
418  if (param->dslash_type == QUDA_CLOVER_WILSON_DSLASH)
419  P(cloverGiB, 0.0);
420  P(gflops, 0.0);
421  P(secs, 0.0);
422 #elif defined(PRINT_PARAM)
423  P(iter, INVALID_INT);
424  P(spinorGiB, INVALID_DOUBLE);
425  if (param->dslash_type == QUDA_CLOVER_WILSON_DSLASH)
426  P(cloverGiB, INVALID_DOUBLE);
427  P(gflops, INVALID_DOUBLE);
428  P(secs, INVALID_DOUBLE);
429 #endif
430 
431 
432 #ifdef INIT_PARAM
433  //p(ghostDim[0],0);
434  //p(ghostDim[1],0);
435  //p(ghostDim[2],0);
436  //p(ghostDim[3],0);
437 #endif
438 
439 
440 #if defined INIT_PARAM
442  P(nev, 8);
443  P(max_search_dim, 64);
444  P(rhs_idx, 0);
445  P(deflation_grid, 1);
446 
447  P(eigcg_max_restarts, 4);
448  P(max_restart_num, 3);
449  P(tol_restart,5e-5);
450  P(inc_tol, 1e-2);
451  P(eigenval_tol, 1e-1);
452 #else
454  P(nev, INVALID_INT);
456  P(rhs_idx, INVALID_INT);
463 #endif
464 
465 #if defined INIT_PARAM
466  P(use_resident_solution, 0);
467  P(make_resident_solution, 0);
468 #else
469  P(use_resident_solution, INVALID_INT);
470  P(make_resident_solution, INVALID_INT);
471 #endif
472 
473 
474 #if defined INIT_PARAM
475  P(use_resident_chrono, 0);
476  P(make_resident_chrono, 0);
477  P(max_chrono_dim, 0);
478  P(chrono_index, 0);
479 #else
480  P(use_resident_chrono, INVALID_INT);
481  P(make_resident_chrono, INVALID_INT);
482  P(max_chrono_dim, INVALID_INT);
483  P(chrono_index, INVALID_INT);
484 #endif
485 
486 #if defined INIT_PARAM
487  P(extlib_type, QUDA_EIGEN_EXTLIB);
488 #else
489  P(extlib_type, QUDA_EXTLIB_INVALID);
490 #endif
491 
492 #ifdef INIT_PARAM
493  return ret;
494 #endif
495 }
496 
497 
498 #if defined INIT_PARAM
501 #elif defined CHECK_PARAM
502  static void checkMultigridParam(QudaMultigridParam *param) {
503 #else
505  printfQuda("QUDA Multigrid Parameters:\n");
506 #endif
507 
508 #ifdef INIT_PARAM
509  // do nothing
510 #elif defined CHECK_PARAM
511  checkInvertParam(param->invert_param);
512 #else
513  printQudaInvertParam(param->invert_param);
514 #endif
515 
516  P(n_level, INVALID_INT);
517 
518 #ifdef INIT_PARAM
519  int n_level = QUDA_MAX_MG_LEVEL;
520 #else
521  int n_level = param->n_level;
522 #endif
523 
524  for (int i=0; i<n_level; i++) {
525 #ifdef INIT_PARAM
526  P(verbosity[i], QUDA_SILENT);
527 #else
529 #endif
530 #ifdef INIT_PARAM
531  P(setup_inv_type[i], QUDA_BICGSTAB_INVERTER);
532 #else
533  P(setup_inv_type[i], QUDA_INVALID_INVERTER);
534 #endif
535 #ifdef INIT_PARAM
536  P(setup_tol[i], 5e-6);
537 #else
539 #endif
540  P(smoother[i], QUDA_INVALID_INVERTER);
541  P(smoother_solve_type[i], QUDA_INVALID_SOLVE);
542 
543  // these parameters are not set for the bottom grid
544  if (i<n_level-1) {
545  for (int j=0; j<4; j++) P(geo_block_size[i][j], INVALID_INT);
546  P(spin_block_size[i], INVALID_INT);
547  P(n_vec[i], INVALID_INT);
548  P(cycle_type[i], QUDA_MG_CYCLE_INVALID);
549  P(nu_pre[i], INVALID_INT);
550  P(nu_post[i], INVALID_INT);
551  P(coarse_grid_solution_type[i], QUDA_INVALID_SOLUTION);
552  }
553 
554 #ifdef INIT_PARAM
555  P(mu_factor[i], 1);
556 #else
558 #endif
559  P(smoother_tol[i], INVALID_DOUBLE);
560 #ifdef INIT_PARAM
561  P(global_reduction[i], QUDA_BOOLEAN_YES);
562 #else
563  P(global_reduction[i], QUDA_BOOLEAN_INVALID);
564 #endif
565 
566  P(omega[i], INVALID_DOUBLE);
567  P(location[i], QUDA_INVALID_FIELD_LOCATION);
568  }
569 
570  P(compute_null_vector, QUDA_COMPUTE_NULL_VECTOR_INVALID);
572 
573 #ifdef CHECK_PARAM
574  // if only doing top-level null-space generation, check that n_vec
575  // is equal on all levels
576  if (param->generate_all_levels == QUDA_BOOLEAN_NO && param->compute_null_vector == QUDA_COMPUTE_NULL_VECTOR_YES) {
577  for (int i=1; i<n_level-1; i++)
578  if (param->n_vec[0] != param->n_vec[i])
579  errorQuda("n_vec %d != %d must be equal on all levels if generate_all_levels == false",
580  param->n_vec[0], param->n_vec[i]);
581  }
582 #endif
583 
584  P(run_verify, QUDA_BOOLEAN_INVALID);
585 
586 #ifdef INIT_PARAM
587  P(gflops, 0.0);
588  P(secs, 0.0);
589 #elif defined(PRINT_PARAM)
590  P(gflops, INVALID_DOUBLE);
591  P(secs, INVALID_DOUBLE);
592 #endif
593 
594 #ifdef INIT_PARAM
595  return ret;
596 #endif
597 
598 }
599 
600 
601 // clean up
602 
603 #undef INVALID_INT
604 #undef INVALID_DOUBLE
605 #undef P
QudaDslashType dslash_type
Definition: test_util.cpp:1626
int deflation_grid
Definition: test_util.cpp:1671
QudaReconstructType reconstruct_sloppy
Definition: quda.h:46
double mu
Definition: test_util.cpp:1643
QudaVerbosity verbosity
double tol_hq
Definition: test_util.cpp:1648
QudaMultigridParam newQudaMultigridParam(void)
int nu_post
Definition: test_util.cpp:1658
int nu_pre
Definition: test_util.cpp:1657
double eigenval_tol
Definition: test_util.cpp:1677
double tol_restart
Definition: test_util.cpp:1672
QudaLinkType type
Definition: quda.h:35
#define INVALID_INT
Definition: check_params.h:14
#define INVALID_DOUBLE
Definition: check_params.h:15
#define errorQuda(...)
Definition: util_quda.h:90
QudaReconstructType reconstruct_precondition
Definition: quda.h:49
QudaInverterType inv_type
Definition: test_util.cpp:1638
double mu_factor[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1659
double inc_tol
Definition: test_util.cpp:1676
#define m5
bool compute_clover
Definition: test_util.cpp:1646
bool generate_all_levels
Definition: test_util.cpp:1666
void printQudaInvertParam(QudaInvertParam *param)
Definition: check_params.h:191
double anisotropy
Definition: test_util.cpp:1644
void printQudaGaugeParam(QudaGaugeParam *param)
Definition: check_params.h:40
QudaPrecision & cuda_prec_precondition
QudaPrecision cpu_prec
Definition: covdev_test.cpp:33
size_t size_t offset
void printQudaEigParam(QudaEigParam *param)
Definition: check_params.h:145
int Ls
Definition: test_util.cpp:39
int pipeline
Definition: test_util.cpp:1632
QudaGaugeParam param
Definition: pack_test.cpp:17
QudaPrecision & cuda_prec_ritz
int geo_block_size[QUDA_MAX_MG_LEVEL][QUDA_MAX_DIM]
Definition: test_util.cpp:1668
double tol
Definition: test_util.cpp:1647
QudaPrecision & cuda_prec_sloppy
VOLATILE spinorFloat kappa
QudaPrecision cuda_prec
Definition: covdev_test.cpp:34
int solution_accumulator_pipeline
Definition: test_util.cpp:1633
QudaInvertParam newQudaInvertParam(void)
QudaPrecision cuda_prec_precondition
Definition: quda.h:48
int max_search_dim
Definition: test_util.cpp:1670
QudaPrecision cuda_prec_sloppy
Definition: quda.h:45
int eigcg_max_restarts
Definition: test_util.cpp:1674
int max_restart_num
Definition: test_util.cpp:1675
QudaReconstructType reconstruct
Definition: quda.h:43
QudaPrecision cuda_prec
Definition: quda.h:42
QudaMatPCType matpc_type
Definition: test_util.cpp:1652
void printQudaMultigridParam(QudaMultigridParam *param)
Definition: check_params.h:504
QudaSolveType solve_type
Definition: test_util.cpp:1653
double clover_coeff
Definition: test_util.cpp:1645
QudaGaugeFieldOrder gauge_order
int nev
Definition: test_util.cpp:1669
#define QUDA_MAX_MG_LEVEL
Maximum number of multi-grid levels. This number may be increased if needed.
QudaMemoryType mem_type_ritz
Definition: test_util.cpp:1682
#define printfQuda(...)
Definition: util_quda.h:84
QudaTwistFlavorType twist_flavor
Definition: test_util.cpp:1649
double omega
Definition: test_util.cpp:1663
int gcrNkrylov
Definition: test_util.cpp:1631
QudaEigParam newQudaEigParam(void)
double setup_tol
Definition: test_util.cpp:1662
QudaGaugeParam newQudaGaugeParam(void)