23 #if defined(QMP_COMMS) 25 #elif defined(MPI_COMMS) 31 #define MAX(a, b) ((a) > (b) ? (a) : (b)) 36 #define mySpinorSiteSize 6 38 extern void usage(
char **argv);
123 printfQuda(
"prec sloppy_prec link_recon sloppy_link_recon test_type S_dimension T_dimension\n");
138 printfQuda(
" --test <0/3/4> # Test method\n");
140 printfQuda(
" 3: Even even spinor CG inverter\n");
141 printfQuda(
" 4: Odd odd spinor CG inverter\n");
147 gauge_param.
X[0] =
xdim;
148 gauge_param.
X[1] =
ydim;
149 gauge_param.
X[2] =
zdim;
150 gauge_param.
X[3] =
tdim;
171 gauge_param.
scale = -1.0 / 24.0;
174 gauge_param.
scale = 1.0;
185 int x_face_size = gauge_param.
X[1] * gauge_param.
X[2] * gauge_param.
X[3] / 2;
186 int y_face_size = gauge_param.
X[0] * gauge_param.
X[2] * gauge_param.
X[3] / 2;
187 int z_face_size = gauge_param.
X[0] * gauge_param.
X[1] * gauge_param.
X[3] / 2;
188 int t_face_size = gauge_param.
X[0] * gauge_param.
X[1] * gauge_param.
X[2] / 2;
189 int pad_size =
MAX(x_face_size, y_face_size);
190 pad_size =
MAX(pad_size, z_face_size);
191 pad_size =
MAX(pad_size, t_face_size);
192 gauge_param.
ga_pad = pad_size;
218 errorQuda(
"qudaInvert: requesting zero residual\n");
270 int tmpint =
MAX(
X[1] *
X[2] *
X[3], X[0] * X[2] * X[3]);
271 tmpint =
MAX(tmpint, X[0] * X[1] * X[3]);
272 tmpint =
MAX(tmpint, X[0] * X[1] * X[2]);
274 inv_param.
sp_pad = tmpint;
284 errorQuda(
"Only real spectrum type (LR or SR) can be passed to Lanczos type solver");
348 void *
qdp_inlink[4] = {
nullptr,
nullptr,
nullptr,
nullptr};
349 void *
qdp_fatlink[4] = {
nullptr,
nullptr,
nullptr,
nullptr};
350 void *
qdp_longlink[4] = {
nullptr,
nullptr,
nullptr,
nullptr};
351 void *milc_fatlink =
nullptr;
352 void *milc_longlink =
nullptr;
356 for (
int dir = 0; dir < 4; dir++) {
386 printfQuda(
"Computed plaquette is %e (spatial = %e, temporal = %e)\n", plaq[0], plaq[1], plaq[2]);
391 for (
int dir = 0; dir < 4; dir++) {
392 memcpy(qdp_fatlink[dir], qdp_inlink[dir],
V *
gaugeSiteSize * gSize);
400 for (
int dir = 0; dir < 4; dir++) { memcpy(qdp_fatlink[dir], qdp_inlink[dir],
V *
gaugeSiteSize * gSize); }
406 printfQuda(
"Computed fat link plaquette is %e (spatial = %e, temporal = %e)\n", plaq[0], plaq[1], plaq[2]);
417 int fat_pad = tmp_value;
418 int link_pad = 3 * tmp_value;
444 gauge_param.
ga_pad = fat_pad;
457 gauge_param.
ga_pad = link_pad;
474 void **host_evecs = (
void **)malloc(
eig_nConv *
sizeof(
void *));
478 double _Complex *host_evals = (
double _Complex *)malloc(eig_param.
nEv *
sizeof(
double _Complex));
485 double time = -((double)clock());
487 errorQuda(
"ARPACK check only available in double precision");
491 time += (double)clock();
492 printfQuda(
"Time for %s solution = %f\n", eig_param.
arpack_check ?
"ARPACK" :
"QUDA", time / CLOCKS_PER_SEC);
495 for (
int i = 0; i <
eig_nConv; i++) free(host_evecs[i]);
500 default:
errorQuda(
"Unsupported test type");
504 for (
int dir = 0; dir < 4; dir++) {
505 if (qdp_inlink[dir] !=
nullptr) {
506 free(qdp_inlink[dir]);
507 qdp_inlink[dir] =
nullptr;
509 if (qdp_fatlink[dir] !=
nullptr) {
510 free(qdp_fatlink[dir]);
511 qdp_fatlink[dir] =
nullptr;
513 if (qdp_longlink[dir] !=
nullptr) {
514 free(qdp_longlink[dir]);
515 qdp_longlink[dir] =
nullptr;
518 if (milc_fatlink !=
nullptr) {
520 milc_fatlink =
nullptr;
522 if (milc_longlink !=
nullptr) {
524 milc_longlink =
nullptr;
528 if (cpuFat !=
nullptr) {
532 if (cpuLong !=
nullptr) {
539 int main(
int argc,
char **argv)
545 for (
int i = 1; i < argc; i++) {
549 printf(
"ERROR: Invalid option:%s\n", argv[i]);
561 warningQuda(
"The dslash_type %d isn't staggered, asqtad, or laplace. Defaulting to asqtad.\n",
dslash_type);
606 printfQuda(
"Note: epsilon-naik != 0, testing epsilon correction links.\n");
609 printfQuda(
"Not computing fat-long, ignoring epsilon correction.\n");
612 printfQuda(
"Note: epsilon-naik = 0, testing original HISQ links.\n");
int dimPartitioned(int dim)
QudaDiracFieldOrder dirac_order
void applyGaugeFieldScaling_long(Float **gauge, int Vh, QudaGaugeParam *param, QudaDslashType dslash_type)
QudaMassNormalization mass_normalization
QudaReconstructType reconstruct_sloppy
QudaGhostExchange ghostExchange
void setGaugeParam(QudaGaugeParam &gauge_param)
void construct_gauge_field(void **gauge, int type, QudaPrecision precision, QudaGaugeParam *param)
QudaVerbosity verbosity_precondition
enum QudaPrecision_s QudaPrecision
void dw_setDims(int *X, const int L5)
void setInvertParam(QudaInvertParam &inv_param)
QudaInverterType inv_type_precondition
QudaPrecision prec_sloppy
QudaDslashType dslash_type
QudaReconstructType reconstruct_precondition
QudaInverterType inv_type
enum QudaSolveType_s QudaSolveType
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
QudaReconstructType link_recon
int process_command_line_option(int argc, char **argv, int *idx)
QudaStaggeredPhase staggered_phase_type
bool alternative_reliable
QudaReconstructType link_recon_sloppy
QudaGaugeParam gauge_param
QudaPrecision cuda_prec_refinement_sloppy
QudaGaugeFieldOrder gauge_order
const char * get_staggered_test_type(int t)
const char * get_prec_str(QudaPrecision prec)
enum QudaEigType_s QudaEigType
void usage_extra(char **argv)
QudaFieldLocation input_location
int solution_accumulator_pipeline
QudaSolutionType solution_type
int use_alternative_reliable
void computeStaggeredPlaquetteQDPOrder(void **qdp_link, double plaq[3], const QudaGaugeParam &gauge_param_in, const QudaDslashType dslash_type)
QudaInvertParam * invert_param
QudaBoolean require_convergence
void initQuda(int device)
QudaSolutionType solution_type
QudaFieldLocation output_location
QudaInvertParam inv_param
QudaPrecision cuda_prec_sloppy
void reorderQDPtoMILC(Out *milc_out, In **qdp_in, int V, int siteSize)
int gridsize_from_cmdline[]
void setSpinorSiteSize(int n)
QudaInvertParam newQudaInvertParam(void)
int main(int argc, char **argv)
const char * get_recon_str(QudaReconstructType recon)
QudaPrecision cuda_prec_precondition
enum QudaMatPCType_s QudaMatPCType
enum QudaSolutionType_s QudaSolutionType
void eigensolveQuda(void **h_evecs, double_complex *h_evals, QudaEigParam *param)
QudaGammaBasis gamma_basis
QudaPrecision cuda_prec_sloppy
const void ** Ghost() const
int use_sloppy_partial_accumulator
QudaReconstructType reconstruct
QudaPrecision cuda_prec_refinement_sloppy
QudaPrecision prec_refinement_sloppy
void computeFatLongGPU(void **qdp_fatlink, void **qdp_longlink, void **qdp_inlink, QudaGaugeParam &gauge_param, size_t gSize, int n_naiks, double eps_naik)
void * memset(void *s, int c, size_t n)
void construct_fat_long_gauge_field(void **fatlink, void **longlink, int type, QudaPrecision precision, QudaGaugeParam *param, QudaDslashType dslash_type)
void setEigParam(QudaEigParam &eig_param)
char eig_arpack_logfile[]
bool eig_require_convergence
QudaPrecision cuda_prec_precondition
enum QudaEigSpectrumType_s QudaEigSpectrumType
QudaEigSpectrumType eig_spectrum
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
enum QudaCABasis_s QudaCABasis
QudaDslashType dslash_type
int solution_accumulator_pipeline
enum QudaDslashType_s QudaDslashType
QudaEigSpectrumType spectrum
QudaResidualType residual_type
void initComms(int argc, char **argv, int *const commDims)
void read_gauge_field(const char *filename, void *gauge[], QudaPrecision prec, const int *X, int argc, char *argv[])
QudaPrecision cuda_prec_ritz
QudaEigParam newQudaEigParam(void)
QudaGaugeParam newQudaGaugeParam(void)
QudaPreserveSource preserve_source