QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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
36  QudaGaugeParam ret;
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, 1.0);
56 #else
57  if (param->type == QUDA_WILSON_LINKS) {
59  } else if (param->type == QUDA_ASQTAD_LONG_LINKS) {
60  P(tadpole_coeff, INVALID_DOUBLE);
61  P(scale, INVALID_DOUBLE);
62  }
63 #endif
64 
65  P(type, QUDA_INVALID_LINKS);
67  P(t_boundary, QUDA_INVALID_T_BOUNDARY);
70  P(reconstruct, QUDA_RECONSTRUCT_INVALID);
71 
72 #ifndef CHECK_PARAM
74  P(reconstruct_sloppy, QUDA_RECONSTRUCT_INVALID);
76  P(reconstruct_refinement_sloppy, QUDA_RECONSTRUCT_INVALID);
78  P(reconstruct_precondition, QUDA_RECONSTRUCT_INVALID);
79 #else
81  param->cuda_prec_sloppy = param->cuda_prec;
83  param->reconstruct_sloppy = param->reconstruct;
92 #endif
93 
94  P(gauge_fix, QUDA_GAUGE_FIXED_INVALID);
95  P(ga_pad, INVALID_INT);
96 
97 #if defined INIT_PARAM
98  P(staggered_phase_type, QUDA_STAGGERED_PHASE_NO);
99  P(staggered_phase_applied, 0);
100  P(i_mu, 0.0);
101  P(overlap, 0);
102 #else
103  P(staggered_phase_type, QUDA_STAGGERED_PHASE_INVALID);
104  P(staggered_phase_applied, INVALID_INT);
105  P(i_mu, INVALID_DOUBLE);
106  P(overlap, INVALID_INT);
107 #endif
108 
109 #if defined INIT_PARAM
110  P(overwrite_mom, 0);
111  P(use_resident_gauge, 0);
112  P(use_resident_mom, 0);
113  P(make_resident_gauge, 0);
114  P(make_resident_mom, 0);
115  P(return_result_gauge, 1);
116  P(return_result_mom, 1);
117  P(gauge_offset, 0);
118  P(mom_offset, 0);
119  P(site_size, 0);
120 #else
121  P(overwrite_mom, INVALID_INT);
122  P(use_resident_gauge, INVALID_INT);
123  P(use_resident_mom, INVALID_INT);
124  P(make_resident_gauge, INVALID_INT);
125  P(make_resident_mom, INVALID_INT);
126  P(return_result_gauge, INVALID_INT);
127  P(return_result_mom, INVALID_INT);
128 #endif
129 
130 #ifdef INIT_PARAM
131  return ret;
132 #endif
133 }
134 
135 // define the appropriate function for EigParam
136 
137 #if defined INIT_PARAM
139  QudaEigParam ret;
140 #elif defined CHECK_PARAM
141 static void checkEigParam(QudaEigParam *param) {
142 #else
144  printfQuda("QUDA Eig Parameters:\n");
145 #endif
146 
147 #if defined INIT_PARAM
148  P(use_poly_acc, QUDA_BOOLEAN_FALSE);
149  P(poly_deg, 0);
150  P(a_min, 0.0);
151  P(a_max, 0.0);
152  P(use_dagger, QUDA_BOOLEAN_FALSE);
153  P(use_norm_op, QUDA_BOOLEAN_FALSE);
154  P(compute_svd, QUDA_BOOLEAN_FALSE);
155  P(require_convergence, QUDA_BOOLEAN_TRUE);
156  P(spectrum, QUDA_SPECTRUM_LR_EIG);
157  P(nEv, 0);
158  P(nKr, 0);
159  P(nConv, 0);
160  P(tol, 0.0);
161  P(check_interval, 0);
162  P(max_restarts, 0);
163  P(arpack_check, QUDA_BOOLEAN_FALSE);
164  P(nk, 0);
165  P(np, 0);
167  P(extlib_type, QUDA_EIGEN_EXTLIB);
169 #else
170  P(use_poly_acc, QUDA_BOOLEAN_INVALID);
171  P(poly_deg, INVALID_INT);
172  P(a_min, INVALID_DOUBLE);
173  P(a_max, INVALID_DOUBLE);
174  P(use_dagger, QUDA_BOOLEAN_INVALID);
175  P(use_norm_op, QUDA_BOOLEAN_INVALID);
176  P(compute_svd, QUDA_BOOLEAN_INVALID);
177  P(require_convergence, QUDA_BOOLEAN_INVALID);
178  P(nEv, INVALID_INT);
179  P(nKr, INVALID_INT);
180  P(nConv, INVALID_INT);
181  P(tol, INVALID_DOUBLE);
182  P(check_interval, INVALID_INT);
183  P(max_restarts, INVALID_INT);
184  P(arpack_check, QUDA_BOOLEAN_INVALID);
185  P(nk, INVALID_INT);
186  P(np, INVALID_INT);
187  P(check_interval, INVALID_INT);
188  P(max_restarts, INVALID_INT);
190  P(extlib_type, QUDA_EXTLIB_INVALID);
192 #endif
193 
194 #if defined INIT_PARAM
195  P(location, QUDA_CUDA_FIELD_LOCATION);
196 #else
197  P(location, QUDA_INVALID_FIELD_LOCATION);
198 #endif
199 
200 #ifdef INIT_PARAM
201  return ret;
202 #endif
203 }
204 
205 // define the appropriate function for clover subset from InvertParam
206 #if defined INIT_PARAM
207 void newQudaCloverParam(QudaInvertParam *param)
208 {
209  QudaInvertParam &ret = *param;
210 #elif defined CHECK_PARAM
211 static void checkCloverParam(QudaInvertParam *param)
212 {
213 #else
215 {
216 #endif
217 
218 #if defined INIT_PARAM
219  P(clover_location, QUDA_CPU_FIELD_LOCATION);
220 #else
221  P(clover_location, QUDA_INVALID_FIELD_LOCATION);
222 #endif
223 
224 #ifndef INIT_PARAM
226 #endif
227  P(clover_cpu_prec, QUDA_INVALID_PRECISION);
228  P(clover_cuda_prec, QUDA_INVALID_PRECISION);
229 
230 #ifndef CHECK_PARAM
231  P(clover_cuda_prec_sloppy, QUDA_INVALID_PRECISION);
232  P(clover_cuda_prec_refinement_sloppy, QUDA_INVALID_PRECISION);
233  P(clover_cuda_prec_precondition, QUDA_INVALID_PRECISION);
234 #else
241 #endif
242 
243 #ifdef INIT_PARAM
244  P(compute_clover_trlog, 0);
245  P(compute_clover, 0);
246  P(compute_clover_inverse, 0);
247  P(return_clover, 0);
248  P(return_clover_inverse, 0);
249  P(clover_rho, 0.0);
250 #else
251  P(compute_clover_trlog, QUDA_INVALID_PRECISION);
253  P(compute_clover_inverse, QUDA_INVALID_PRECISION);
254  P(return_clover, QUDA_INVALID_PRECISION);
255  P(return_clover_inverse, QUDA_INVALID_PRECISION);
256  P(clover_rho, INVALID_DOUBLE);
257 #endif
258  P(clover_order, QUDA_INVALID_CLOVER_ORDER);
259  P(cl_pad, INVALID_INT);
260 
262 #ifndef INIT_PARAM
263  }
264 #endif
265 }
266 
267 // define the appropriate function for InvertParam
268 
269 #if defined INIT_PARAM
271 {
272  QudaInvertParam ret;
273  QudaInvertParam *param=&ret;
274 #elif defined CHECK_PARAM
275 static void checkInvertParam(QudaInvertParam *param, void *out_ptr=nullptr, void *in_ptr=nullptr) {
276 #else
278  printfQuda("QUDA Inverter Parameters:\n");
279 #endif
280 
283 
284 #if defined INIT_PARAM
285  P(mass, INVALID_DOUBLE);
286  P(kappa, INVALID_DOUBLE);
287  P(m5, INVALID_DOUBLE);
288  P(Ls, INVALID_INT);
289  P(mu, INVALID_DOUBLE);
292 #else
293  // asqtad and domain wall use mass parameterization
296  || param->dslash_type == QUDA_MOBIUS_DWF_DSLASH) {
297  P(mass, INVALID_DOUBLE);
298  } else { // Wilson and clover use kappa parameterization
299  P(kappa, INVALID_DOUBLE);
300  }
301  if (param->dslash_type == QUDA_DOMAIN_WALL_DSLASH ||
303  param->dslash_type == QUDA_MOBIUS_DWF_DSLASH ) {
304  P(m5, INVALID_DOUBLE);
305  P(Ls, INVALID_INT);
306  }
307  if (param->dslash_type == QUDA_TWISTED_MASS_DSLASH) {
308  P(mu, INVALID_DOUBLE);
310  }
311 #endif
312 
313  P(tol, INVALID_DOUBLE);
314 
315 #ifdef INIT_PARAM
316  P(residual_type, QUDA_L2_RELATIVE_RESIDUAL);
317 #else
318  P(residual_type, QUDA_INVALID_RESIDUAL);
319 #endif
320 
323  }
324 
325  P(maxiter, INVALID_INT);
327 #ifndef CHECK_PARAM
328  P(reliable_delta_refinement, INVALID_DOUBLE);
329 #else
331 #endif
332 
333 #ifdef INIT_PARAM
334  P(use_alternative_reliable, 0);
335  P(use_sloppy_partial_accumulator, 0);
337  P(max_res_increase, 1);
338  P(max_res_increase_total, 10);
339  P(max_hq_res_increase, 1);
340  P(max_hq_res_restart_total, 10);
341  P(heavy_quark_check, 10);
342  #else
343  P(use_alternative_reliable, INVALID_INT);
344  P(use_sloppy_partial_accumulator, INVALID_INT);
346  P(max_res_increase, INVALID_INT);
347  P(max_res_increase_total, INVALID_INT);
348  P(max_hq_res_increase, INVALID_INT);
349  P(max_hq_res_restart_total, INVALID_INT);
350  P(heavy_quark_check, INVALID_INT);
351 #endif
352 
353 #ifndef CHECK_PARAM
354  P(pipeline, 0);
355  P(num_offset, 0);
356  P(num_src, 1);
357  P(overlap, 0);
358 #endif
359 
360 #ifdef INIT_PARAM
361  P(compute_action, 0);
362  P(compute_true_res, 1);
363 #else
364  P(compute_action, INVALID_INT);
365  P(compute_true_res, INVALID_INT);
366 #endif
367 
368  if (param->num_offset > 0) {
369 
370  for (int i=0; i<param->num_offset; i++) {
371  P(offset[i], INVALID_DOUBLE);
372  P(tol_offset[i], INVALID_DOUBLE);
374  P(tol_hq_offset[i], INVALID_DOUBLE);
375 #ifndef CHECK_PARAM
376  P(true_res_offset[i], INVALID_DOUBLE);
377  P(iter_res_offset[i], INVALID_DOUBLE);
378 #endif
379  if (param->compute_action) P(residue[i], INVALID_DOUBLE);
380  }
381 #ifndef CHECK_PARAM
382  P(action[0], INVALID_DOUBLE);
383  P(action[1], INVALID_DOUBLE);
384 #endif
385  }
386 
391  P(mass_normalization, QUDA_INVALID_NORMALIZATION);
392 #ifndef CHECK_PARAM
393  P(solver_normalization, QUDA_DEFAULT_NORMALIZATION);
394 #endif
395  P(preserve_source, QUDA_PRESERVE_SOURCE_INVALID);
398 
399 #ifndef CHECK_PARAM
403 #else
405  param->cuda_prec_sloppy = param->cuda_prec;
410 #endif
411 
412  // leave the default behaviour to cpu pointers
413 #if defined INIT_PARAM
414  P(input_location, QUDA_CPU_FIELD_LOCATION);
415  P(output_location, QUDA_CPU_FIELD_LOCATION);
416  P(clover_location, QUDA_CPU_FIELD_LOCATION);
417 #else
418  P(input_location, QUDA_INVALID_FIELD_LOCATION);
419  P(output_location, QUDA_INVALID_FIELD_LOCATION);
420  P(clover_location, QUDA_INVALID_FIELD_LOCATION);
421 #endif
422 
423 #ifdef CHECK_PARAM
424  if (in_ptr && quda::get_pointer_location(in_ptr) != param->input_location) {
425  warningQuda("input_location=%d, however supplied pointer is location=%d", param->input_location, quda::get_pointer_location(in_ptr));
427  }
428 
429  if (out_ptr && quda::get_pointer_location(out_ptr) != param->output_location) {
430  warningQuda("output_location=%d, however supplied pointer is location=%d", param->output_location, quda::get_pointer_location(out_ptr));
432  }
433 #endif
434 
435  P(gamma_basis, QUDA_INVALID_GAMMA_BASIS);
436  P(dirac_order, QUDA_INVALID_DIRAC_ORDER);
437  P(sp_pad, INVALID_INT);
438 
439 #if defined INIT_PARAM
440  P(Nsteps, INVALID_INT);
441 #else
443  P(Nsteps, INVALID_INT);
444  }
445 #endif
446 
447 #if defined INIT_PARAM
449 #else
450  if (param->inv_type == QUDA_GCR_INVERTER ||
451  param->inv_type == QUDA_CA_GCR_INVERTER ||
452  param->inv_type == QUDA_CA_CG_INVERTER ||
453  param->inv_type == QUDA_CA_CGNE_INVERTER ||
454  param->inv_type == QUDA_CA_CGNR_INVERTER) {
456  }
457 #endif
458 
459  // domain decomposition parameters
460  //P(inv_type_sloppy, QUDA_INVALID_INVERTER); // disable since invalid means no preconditioner
461 #if defined INIT_PARAM
462  P(inv_type_precondition, QUDA_INVALID_INVERTER);
463  P(preconditioner, 0);
464  P(tol_precondition, INVALID_DOUBLE);
465  P(maxiter_precondition, INVALID_INT);
466  P(verbosity_precondition, QUDA_INVALID_VERBOSITY);
467  P(schwarz_type, QUDA_ADDITIVE_SCHWARZ); // defaults match previous interface behaviour
468  P(precondition_cycle, 1); // defaults match previous interface behaviour
469 #else
472  P(tol_precondition, INVALID_DOUBLE);
473  P(maxiter_precondition, INVALID_INT);
474  P(verbosity_precondition, QUDA_INVALID_VERBOSITY);
476  P(precondition_cycle, 0);
477  }
478 #endif
479 
480 #ifdef INIT_PARAM
481  P(use_init_guess, QUDA_USE_INIT_GUESS_NO); //set the default to no
482  P(omega, 1.0); // set default to no relaxation
483 #else
484  P(use_init_guess, QUDA_USE_INIT_GUESS_INVALID);
485  P(omega, INVALID_DOUBLE);
486 #endif
487 
488 #if defined(INIT_PARAM)
489  newQudaCloverParam(param);
490 #elif defined(CHECK_PARAM)
491  checkCloverParam(param);
492 #else
493  printQudaCloverParam(param);
494 #endif
495 
496 #ifdef INIT_PARAM
498  P(ca_lambda_min, 0.0);
499  P(ca_lambda_max, -1.0);
500 #else
501  if (param->inv_type == QUDA_CA_CG_INVERTER ||
502  param->inv_type == QUDA_CA_CGNE_INVERTER ||
503  param->inv_type == QUDA_CA_CGNR_INVERTER) {
505  if (param->ca_basis == QUDA_CHEBYSHEV_BASIS) {
508  }
509  }
510 #endif
511 
513 
514 #ifdef INIT_PARAM
515  P(iter, 0);
516  P(gflops, 0.0);
517  P(secs, 0.0);
518 #elif defined(PRINT_PARAM)
519  P(iter, INVALID_INT);
520  P(gflops, INVALID_DOUBLE);
521  P(secs, INVALID_DOUBLE);
522 #endif
523 
524 
525 #if defined INIT_PARAM
527  P(nev, 8);
528  P(max_search_dim, 64);
529  P(rhs_idx, 0);
530  P(deflation_grid, 1);
531 
532  P(eigcg_max_restarts, 4);
533  P(max_restart_num, 3);
534  P(tol_restart,5e-5);
535  P(inc_tol, 1e-2);
536  P(eigenval_tol, 1e-1);
537 #else
539  P(nev, INVALID_INT);
541  P(rhs_idx, INVALID_INT);
548 #endif
549 
550 #if defined INIT_PARAM
551  P(use_resident_solution, 0);
552  P(make_resident_solution, 0);
553 #else
554  P(use_resident_solution, INVALID_INT);
555  P(make_resident_solution, INVALID_INT);
556 #endif
557 
558 
559 #if defined INIT_PARAM
560  P(chrono_use_resident, 0);
561  P(chrono_make_resident, 0);
562  P(chrono_replace_last, 0);
563  P(chrono_max_dim, 0);
564  P(chrono_index, 0);
565 #else
566  P(chrono_use_resident, INVALID_INT);
567  P(chrono_make_resident, INVALID_INT);
568  P(chrono_replace_last, INVALID_INT);
569  P(chrono_max_dim, INVALID_INT);
570  P(chrono_index, INVALID_INT);
571 #endif
572 
573 #if !defined CHECK_PARAM
574  P(chrono_precision, QUDA_INVALID_PRECISION);
575 #else
576  // default the chrono precision to using outer precision
577  if (param->chrono_precision == QUDA_INVALID_PRECISION) param->chrono_precision = param->cuda_prec;
578 #endif
579 
580 #if defined INIT_PARAM
581  P(extlib_type, QUDA_EIGEN_EXTLIB);
582 #else
583  P(extlib_type, QUDA_EXTLIB_INVALID);
584 #endif
585 
586 #ifdef INIT_PARAM
587  return ret;
588 #endif
589 }
590 
591 
592 #if defined INIT_PARAM
594  QudaMultigridParam ret;
595 #elif defined CHECK_PARAM
596  static void checkMultigridParam(QudaMultigridParam *param) {
597 #else
599  printfQuda("QUDA Multigrid Parameters:\n");
600 #endif
601 
602 #ifdef INIT_PARAM
603  // do nothing
604 #elif defined CHECK_PARAM
605  checkInvertParam(param->invert_param);
606 #else
608 #endif
609 
610  P(n_level, INVALID_INT);
611 
612 #ifdef INIT_PARAM
613  int n_level = QUDA_MAX_MG_LEVEL;
614 #else
615  int n_level = param->n_level;
616 #endif
617 
618 #ifdef INIT_PARAM
620 #else
622 #endif
623 
624 #ifdef INIT_PARAM
626 #else
628 #endif
629 
630 #ifdef INIT_PARAM
632 #else
634 #endif
635 
636  for (int i=0; i<n_level; i++) {
637 #ifdef INIT_PARAM
638  P(verbosity[i], QUDA_SILENT);
639 #else
641 #endif
642 #ifdef INIT_PARAM
643  P(setup_inv_type[i], QUDA_BICGSTAB_INVERTER);
644 #else
645  P(setup_inv_type[i], QUDA_INVALID_INVERTER);
646 #endif
647 #ifdef INIT_PARAM
648  P(num_setup_iter[i], 1);
649 #else
651 #endif
652 #ifdef INIT_PARAM
653  P(use_eig_solver[i], QUDA_BOOLEAN_FALSE);
654 #else
655  P(use_eig_solver[i], QUDA_BOOLEAN_INVALID);
656 #endif
657 #ifdef INIT_PARAM
658  P(setup_tol[i], 5e-6);
659  P(setup_maxiter[i], 500);
660  P(setup_maxiter_refresh[i], 0);
661 #else
662  P(setup_tol[i], INVALID_DOUBLE);
663  P(setup_maxiter[i], INVALID_INT);
665 #endif
666 
667 #ifdef INIT_PARAM
669  P(setup_ca_basis_size[i], 4);
670  P(setup_ca_lambda_min[i], 0.0);
671  P(setup_ca_lambda_max[i], -1.0);
672 #else
677 #endif
678 
679 #ifdef INIT_PARAM
680  P(n_block_ortho[i], 1);
681 #else
682  P(n_block_ortho[i], INVALID_INT);
683 #endif
684 
687  P(smoother[i], QUDA_INVALID_INVERTER);
689 
690 #ifdef INIT_PARAM
693  P(coarse_solver_ca_lambda_min[i], 0.0);
694  P(coarse_solver_ca_lambda_max[i], -1.0);
695 #else
700 #endif
701 
702 #ifndef CHECK_PARAM
703  P(smoother_halo_precision[i], QUDA_INVALID_PRECISION);
704  P(smoother_schwarz_type[i], QUDA_INVALID_SCHWARZ);
705  P(smoother_schwarz_cycle[i], 1);
706 #else
707  P(smoother_schwarz_cycle[i], INVALID_INT);
708 #endif
709 
710  // these parameters are not set for the bottom grid
711  if (i<n_level-1) {
712  for (int j=0; j<4; j++) P(geo_block_size[i][j], INVALID_INT);
713  P(spin_block_size[i], INVALID_INT);
714 #ifdef INIT_PARAM
715  P(precision_null[i], QUDA_SINGLE_PRECISION);
716 #else
717  P(precision_null[i], INVALID_INT);
718 #endif
719  P(cycle_type[i], QUDA_MG_CYCLE_INVALID);
720  P(nu_pre[i], INVALID_INT);
721  P(nu_post[i], INVALID_INT);
722  P(coarse_grid_solution_type[i], QUDA_INVALID_SOLUTION);
723  }
724 
725 #ifdef INIT_PARAM
726  if (i<QUDA_MAX_MG_LEVEL) {
727  P(n_vec[i], INVALID_INT);
728  }
729 #else
730  if (i<n_level-1) {
731  P(n_vec[i], INVALID_INT);
732  }
733 #endif
734 
735 #ifdef INIT_PARAM
736  P(mu_factor[i], 1);
737 #else
738  P(mu_factor[i], INVALID_DOUBLE);
739 #endif
742 #ifdef INIT_PARAM
743  P(global_reduction[i], QUDA_BOOLEAN_TRUE);
744 #else
745  P(global_reduction[i], QUDA_BOOLEAN_INVALID);
746 #endif
747 
748  P(omega[i], INVALID_DOUBLE);
749  P(location[i], QUDA_INVALID_FIELD_LOCATION);
750 
751 #ifdef INIT_PARAM
753 #else
755 #endif
756  }
757 
758 #ifdef INIT_PARAM
759  P(setup_minimize_memory, QUDA_BOOLEAN_FALSE);
760 #else
761  P(setup_minimize_memory, QUDA_BOOLEAN_INVALID);
762 #endif
763 
764  P(compute_null_vector, QUDA_COMPUTE_NULL_VECTOR_INVALID);
766 
767 #ifdef CHECK_PARAM
768  // if only doing top-level null-space generation, check that n_vec
769  // is equal on all levels
771  for (int i=1; i<n_level-1; i++)
772  if (param->n_vec[0] != param->n_vec[i])
773  errorQuda("n_vec %d != %d must be equal on all levels if generate_all_levels == false",
774  param->n_vec[0], param->n_vec[i]);
775  }
776 #endif
777 
778  P(run_verify, QUDA_BOOLEAN_INVALID);
779 
780 #ifdef INIT_PARAM
781  P(run_low_mode_check, QUDA_BOOLEAN_FALSE);
782  P(run_oblique_proj_check, QUDA_BOOLEAN_FALSE);
783  P(coarse_guess, QUDA_BOOLEAN_FALSE);
784 #else
785  P(run_low_mode_check, QUDA_BOOLEAN_INVALID);
786  P(run_oblique_proj_check, QUDA_BOOLEAN_INVALID);
787  P(coarse_guess, QUDA_BOOLEAN_INVALID);
788 #endif
789 
790  for (int i = 0; i < n_level - 1; i++) {
791 #ifdef INIT_PARAM
792  P(vec_load[i], QUDA_BOOLEAN_INVALID);
793  P(vec_store[i], QUDA_BOOLEAN_INVALID);
794 #else
795  P(vec_load[i], QUDA_BOOLEAN_FALSE);
796  P(vec_store[i], QUDA_BOOLEAN_FALSE);
797 #endif
798  }
799 
800 #ifdef INIT_PARAM
801  P(gflops, 0.0);
802  P(secs, 0.0);
803 #elif defined(PRINT_PARAM)
804  P(gflops, INVALID_DOUBLE);
805  P(secs, INVALID_DOUBLE);
806 #endif
807 
808 #ifdef INIT_PARAM
809  return ret;
810 #endif
811 
812 }
813 
814 
815 // clean up
816 
817 #undef INVALID_INT
818 #undef INVALID_DOUBLE
819 #undef P
QudaDslashType dslash_type
Definition: test_util.cpp:1621
int deflation_grid
Definition: test_util.cpp:1709
QudaReconstructType reconstruct_sloppy
Definition: quda.h:53
double ca_lambda_max
Definition: test_util.cpp:1633
double mu
Definition: test_util.cpp:1648
QudaCABasis ca_basis
Definition: quda.h:298
int pipeline
Definition: test_util.cpp:1634
double tol_hq
Definition: test_util.cpp:1657
QudaMultigridParam newQudaMultigridParam(void)
double eigenval_tol
Definition: test_util.cpp:1715
double tol_restart
Definition: test_util.cpp:1710
QudaInverterType inv_type_precondition
Definition: quda.h:270
double kappa
Definition: test_util.cpp:1647
QudaLinkType type
Definition: quda.h:42
#define INVALID_INT
Definition: check_params.h:14
int setup_maxiter_refresh[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1682
#define INVALID_DOUBLE
Definition: check_params.h:15
#define errorQuda(...)
Definition: util_quda.h:121
QudaDslashType dslash_type
Definition: quda.h:102
QudaReconstructType reconstruct_precondition
Definition: quda.h:59
QudaInverterType inv_type
Definition: test_util.cpp:1640
QudaInverterType inv_type
Definition: quda.h:103
QudaPrecision cuda_prec
Definition: quda.h:214
QudaCABasis coarse_solver_ca_basis[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1697
QudaPrecision & cuda_prec
double inc_tol
Definition: test_util.cpp:1714
bool compute_clover
Definition: test_util.cpp:1654
bool generate_all_levels
Definition: test_util.cpp:1702
void printQudaInvertParam(QudaInvertParam *param)
Definition: check_params.h:277
QudaPrecision & cuda_prec_refinement_sloppy
double anisotropy
Definition: test_util.cpp:1650
double reliable_delta
Definition: test_util.cpp:1658
QudaPrecision cuda_prec_refinement_sloppy
Definition: quda.h:216
QudaPrecision clover_cuda_prec_refinement_sloppy
Definition: quda.h:227
void printQudaGaugeParam(QudaGaugeParam *param)
Definition: check_params.h:40
QudaPrecision & cuda_prec_precondition
QudaSchwarzType schwarz_type[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1703
QudaPrecision clover_cuda_prec_sloppy
Definition: quda.h:226
int compute_action
Definition: quda.h:197
QudaPrecision chrono_precision
Definition: quda.h:368
QudaFieldLocation input_location
Definition: quda.h:99
double reliable_delta
Definition: quda.h:129
void printQudaEigParam(QudaEigParam *param)
Definition: check_params.h:143
int Ls
Definition: test_util.cpp:38
int n_vec[QUDA_MAX_MG_LEVEL]
Definition: quda.h:492
QudaGaugeParam param
Definition: pack_test.cpp:17
int coarse_solver_maxiter[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1696
QudaPrecision & cuda_prec_ritz
int geo_block_size[QUDA_MAX_MG_LEVEL][QUDA_MAX_DIM]
Definition: test_util.cpp:1706
QudaPrecision clover_cuda_prec
Definition: quda.h:225
QudaPrecision & cuda_prec_sloppy
int num_setup_iter[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1679
QudaSolutionType solution_type
Definition: test_util.cpp:1664
double tol
Definition: test_util.cpp:1656
QudaFieldLocation output_location
Definition: quda.h:100
QudaPrecision clover_cuda_prec_precondition
Definition: quda.h:228
int coarse_solver_ca_basis_size[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1698
QudaSolveType smoother_solve_type[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1678
QudaPrecision cuda_prec_sloppy
Definition: quda.h:215
int solution_accumulator_pipeline
Definition: test_util.cpp:1635
QudaInvertParam newQudaInvertParam(void)
QudaPrecision cuda_prec_precondition
Definition: quda.h:58
double coarse_solver_ca_lambda_max[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1700
int max_search_dim
Definition: test_util.cpp:1708
double setup_ca_lambda_min[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1685
double omega
Definition: test_util.cpp:1690
#define warningQuda(...)
Definition: util_quda.h:133
double setup_ca_lambda_max[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1686
QudaPrecision cuda_prec_sloppy
Definition: quda.h:52
int eigcg_max_restarts
Definition: test_util.cpp:1712
int max_restart_num
Definition: test_util.cpp:1713
int gcrNkrylov
Definition: test_util.cpp:1630
int X[4]
Definition: covdev_test.cpp:70
QudaFieldLocation setup_location[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1669
QudaReconstructType reconstruct
Definition: quda.h:50
QudaPrecision cuda_prec
Definition: quda.h:49
QudaMatPCType matpc_type
Definition: test_util.cpp:1662
void printQudaMultigridParam(QudaMultigridParam *param)
Definition: check_params.h:598
QudaInverterType coarse_solver[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1691
double smoother_tol[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1695
QudaSolveType solve_type
Definition: test_util.cpp:1663
QudaPrecision cuda_prec_refinement_sloppy
Definition: quda.h:55
double coarse_solver_tol[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1692
QudaSetupType setup_type
Definition: test_util.cpp:1687
QudaFieldLocation get_pointer_location(const void *ptr)
Definition: malloc.cpp:399
double ca_lambda_min
Definition: test_util.cpp:1632
int nu_pre[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1671
bool pre_orthonormalize
Definition: test_util.cpp:1688
QudaPrecision cuda_prec_precondition
Definition: quda.h:217
double clover_coeff
Definition: test_util.cpp:1653
int laplace3D
Definition: test_util.cpp:1622
QudaGaugeFieldOrder gauge_order
QudaBoolean generate_all_levels
Definition: quda.h:615
int nev
Definition: test_util.cpp:1707
#define QUDA_MAX_MG_LEVEL
Maximum number of multi-grid levels. This number may be increased if needed.
bool post_orthonormalize
Definition: test_util.cpp:1689
QudaCABasis ca_basis
Definition: test_util.cpp:1631
int setup_ca_basis_size[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1684
double setup_tol[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1680
QudaMemoryType mem_type_ritz
Definition: test_util.cpp:1720
#define printfQuda(...)
Definition: util_quda.h:115
QudaEigType eig_type
Definition: test_util.cpp:1738
void printQudaCloverParam(QudaInvertParam *param)
Definition: check_params.h:214
double mu_factor[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1674
QudaTwistFlavorType twist_flavor
Definition: test_util.cpp:1660
int setup_maxiter[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1681
QudaResidualType residual_type
Definition: quda.h:320
int num_offset
Definition: quda.h:169
QudaPrecision & cpu_prec
QudaComputeNullVector compute_null_vector
Definition: quda.h:612
double coarse_solver_ca_lambda_min[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1699
QudaCABasis setup_ca_basis[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1683
int n_block_ortho[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1673
QudaDagType dagger
Definition: test_util.cpp:1620
int nu_post[QUDA_MAX_MG_LEVEL]
Definition: test_util.cpp:1672
QudaEigParam newQudaEigParam(void)
QudaReconstructType reconstruct_refinement_sloppy
Definition: quda.h:56
QudaGaugeParam newQudaGaugeParam(void)
QudaInvertParam * invert_param
Definition: quda.h:478
double reliable_delta_refinement
Definition: quda.h:130
QudaVerbosity verbosity
Definition: test_util.cpp:1614