16 #if defined(QMP_COMMS) 18 #elif defined(MPI_COMMS) 70 extern void usage(
char** );
103 printfQuda(
"prec prec_sloppy matpc_type recon recon_sloppy S_dimension T_dimension Ls_dimension dslash_type " 105 printfQuda(
"%6s %6s %12s %2s %2s %3d/%3d/%3d %3d %2d %14s %8s\n",
114 printfQuda(
"Deflation space info: location mem_type\n");
129 gauge_param.
X[0] =
xdim;
130 gauge_param.
X[1] =
ydim;
131 gauge_param.
X[2] =
zdim;
132 gauge_param.
X[3] =
tdim;
158 int x_face_size = gauge_param.
X[1]*gauge_param.
X[2]*gauge_param.
X[3]/2;
159 int y_face_size = gauge_param.
X[0]*gauge_param.
X[2]*gauge_param.
X[3]/2;
160 int z_face_size = gauge_param.
X[0]*gauge_param.
X[1]*gauge_param.
X[3]/2;
161 int t_face_size = gauge_param.
X[0]*gauge_param.
X[1]*gauge_param.
X[2]/2;
162 int pad_size =std::max(x_face_size, y_face_size);
163 pad_size = std::max(pad_size, z_face_size);
164 pad_size = std::max(pad_size, t_face_size);
165 gauge_param.
ga_pad = pad_size;
215 printfQuda(
"Twisted-mass doublet non supported (yet)\n");
282 inv_param.
omega = 1.0;
305 int main(
int argc,
char **argv)
308 for (
int i = 1; i < argc; i++){
312 printf(
"ERROR: Invalid option:%s\n", argv[i]);
357 kappa5 = 0.5 / (5 + inv_param.
m5);
359 for (
int k = 0; k <
Lsdim; k++)
363 inv_param.
b_5[k] = 1.452;
364 inv_param.
c_5[k] = 0.452;
388 void *gauge[4], *clover=0, *clover_inv=0;
390 for (
int dir = 0; dir < 4; dir++) {
429 double time0 = -((double)clock());
443 for (
int i=0; i<
Nsrc; i++) {
451 for (
int i=0; i<inv_param.
Ls*
V*
spinorSiteSize; i++) ((
float*)spinorIn)[i] = rand() / (float)RAND_MAX;
454 for (
int i=0; i<inv_param.
Ls*
V*
spinorSiteSize; i++) ((
double*)spinorIn)[i] = rand() / (double)RAND_MAX;
465 time0 /= CLOCKS_PER_SEC;
469 printfQuda(
"\nDone: %i iter / %g secs = %g Gflops, total time = %g secs\n", inv_param.
iter, inv_param.
secs,
482 double _Complex *kappa_b = (
double _Complex *)malloc(
Lsdim *
sizeof(
double _Complex));
483 double _Complex *kappa_c = (
double _Complex *)malloc(
Lsdim *
sizeof(
double _Complex));
484 for (
int xs = 0; xs <
Lsdim; xs++) {
485 kappa_b[xs] = 1.0 / (2 * (inv_param.
b_5[xs] * (4.0 + inv_param.
m5) + 1.0));
486 kappa_c[xs] = 1.0 / (2 * (inv_param.
c_5[xs] * (4.0 + inv_param.
m5) - 1.0));
488 mdw_mat(spinorCheck, gauge, spinorOut, kappa_b, kappa_c, inv_param.
dagger, inv_param.
cpu_prec, gauge_param,
489 inv_param.
mass, inv_param.
b_5, inv_param.
c_5);
525 double _Complex *kappa_b = (
double _Complex *)malloc(
Lsdim *
sizeof(
double _Complex));
526 double _Complex *kappa_c = (
double _Complex *)malloc(
Lsdim *
sizeof(
double _Complex));
527 for (
int xs = 0; xs <
Lsdim; xs++) {
528 kappa_b[xs] = 1.0 / (2 * (inv_param.
b_5[xs] * (4.0 + inv_param.
m5) + 1.0));
529 kappa_c[xs] = 1.0 / (2 * (inv_param.
c_5[xs] * (4.0 + inv_param.
m5) - 1.0));
532 gauge_param, inv_param.
mass, inv_param.
b_5, inv_param.
c_5);
559 double nrm2 =
norm_2(spinorCheck, vol*spinorSiteSize*inv_param.
Ls, inv_param.
cpu_prec);
560 double src2 =
norm_2(spinorIn, vol*spinorSiteSize*inv_param.
Ls, inv_param.
cpu_prec);
561 double l2r =
sqrt(nrm2 / src2);
563 printfQuda(
"Residuals: (L2 relative) tol %g, QUDA = %g, host = %g; (heavy-quark) tol %g, QUDA = %g\n",
577 if (clover) free(clover);
578 if (clover_inv) free(clover_inv);
581 for (
int dir = 0; dir<4; dir++) free(gauge[dir]);
QudaReconstructType link_recon
int dimPartitioned(int dim)
QudaDiracFieldOrder dirac_order
QudaMassNormalization mass_normalization
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
enum QudaMassNormalization_s QudaMassNormalization
QudaReconstructType reconstruct_sloppy
void freeCloverQuda(void)
void mdw_matpc(void *out, void **gauge, void *in, double _Complex *kappa_b, double _Complex *kappa_c, QudaMatPCType matpc_type, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm, double _Complex *b5, double _Complex *c5)
void dw_4d_matpc(void *out, void **gauge, void *in, double kappa, QudaMatPCType matpc_type, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
void construct_gauge_field(void **gauge, int type, QudaPrecision precision, QudaGaugeParam *param)
QudaVerbosity verbosity_precondition
enum QudaPrecision_s QudaPrecision
double_complex c_5[QUDA_MAX_DWF_LS]
void destroyDeflationQuda(void *df_instance)
void mdw_mat(void *out, void **gauge, void *in, double _Complex *kappa_b, double _Complex *kappa_c, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm, double _Complex *b5, double _Complex *c5)
void dw_setDims(int *X, const int L5)
QudaExtLibType extlib_type
QudaSchwarzType schwarz_type
__host__ __device__ ValueType norm(const complex< ValueType > &z)
Returns the magnitude of z squared.
void tm_mat(void *out, void **gauge, void *in, double kappa, double mu, QudaTwistFlavorType flavor, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param)
enum QudaResidualType_s QudaResidualType
QudaInverterType inv_type_precondition
QudaDslashType dslash_type
QudaPrecision cuda_prec_ritz
void invertQuda(void *h_x, void *h_b, QudaInvertParam *param)
QudaDslashType dslash_type
QudaReconstructType reconstruct_precondition
QudaInverterType inv_type
int return_clover_inverse
void setGaugeParam(QudaGaugeParam &gauge_param)
const char * get_memory_type_str(QudaMemoryType type)
enum QudaSolveType_s QudaSolveType
__host__ __device__ ValueType sqrt(ValueType x)
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
QudaExtLibType deflation_ext_lib
void setDeflationParam(QudaEigParam &df_param)
int process_command_line_option(int argc, char **argv, int *idx)
QudaPrecision & cuda_prec_refinement_sloppy
const char * get_matpc_str(QudaMatPCType type)
QudaGaugeParam gauge_param
QudaPrecision cuda_prec_refinement_sloppy
const char * get_ritz_location_str(QudaFieldLocation type)
QudaGaugeFieldOrder gauge_order
void dw_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
void tm_matpc(void *outEven, void **gauge, void *inEven, double kappa, double mu, QudaTwistFlavorType flavor, QudaMatPCType matpc_type, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
const char * get_prec_str(QudaPrecision prec)
void loadCloverQuda(void *h_clover, void *h_clovinv, QudaInvertParam *inv_param)
QudaPrecision & cuda_prec_precondition
QudaPrecision clover_cuda_prec_sloppy
QudaFieldLocation input_location
QudaInverterType inv_type
QudaPrecision prec_sloppy
double_complex b_5[QUDA_MAX_DWF_LS]
void setInvertParam(QudaInvertParam &inv_param)
QudaSolutionType solution_type
QudaPrecision & cuda_prec_ritz
QudaMemoryType mem_type_ritz
QudaPrecision clover_cuda_prec
QudaInvertParam * invert_param
void initQuda(int device)
void dw_matpc(void *out, void **gauge, void *in, double kappa, QudaMatPCType matpc_type, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
void ax(const double &a, GaugeField &u)
Scale the gauge field by the scalar a.
QudaFieldLocation output_location
QudaPrecision clover_cuda_prec_precondition
QudaInvertParam inv_param
QudaPrecision & cuda_prec_sloppy
QudaMassNormalization normalization
void setTransferGPU(bool)
void * newDeflationQuda(QudaEigParam *param)
QudaPrecision prec_refinement_sloppy
QudaPrecision cuda_prec_sloppy
void setSpinorSiteSize(int n)
const char * get_mass_normalization_str(QudaMassNormalization type)
double tol_offset[QUDA_MAX_MULTI_SHIFT]
QudaInvertParam newQudaInvertParam(void)
const char * get_recon_str(QudaReconstructType recon)
QudaPrecision cuda_prec_precondition
QudaCloverFieldOrder clover_order
void dw_4d_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
enum QudaMatPCType_s QudaMatPCType
cpuColorSpinorField * spinorOut
int main(int argc, char **argv)
QudaGammaBasis gamma_basis
QudaPrecision cuda_prec_sloppy
const char * get_dslash_str(QudaDslashType type)
QudaReconstructType link_recon_precondition
QudaReconstructType reconstruct
QudaBoolean import_vectors
QudaExtLibType solver_ext_lib
QudaFieldLocation location
QudaPrecision cuda_prec_refinement_sloppy
double norm_2(void *v, int len, QudaPrecision precision)
int compute_clover_inverse
QudaPrecision prec_precondition
void * memset(void *s, int c, size_t n)
void construct_clover_field(void *clover, double norm, double diag, QudaPrecision precision)
QudaPrecision & cuda_prec
enum QudaFieldLocation_s QudaFieldLocation
void wil_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaPrecision cuda_prec_precondition
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
QudaExtLibType extlib_type
QudaMemoryType mem_type_ritz
QudaInverterType precon_type
QudaTwistFlavorType twist_flavor
enum QudaDslashType_s QudaDslashType
QudaTwistFlavorType twist_flavor
QudaFieldLocation location_ritz
void mxpy(ColorSpinorField &x, ColorSpinorField &y)
QudaResidualType residual_type
int gridsize_from_cmdline[]
void wil_matpc(void *outEven, void **gauge, void *inEven, double kappa, QudaMatPCType matpc_type, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
enum QudaVerbosity_s QudaVerbosity
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 clover_cpu_prec
QudaPrecision cuda_prec_ritz
QudaEigParam newQudaEigParam(void)
enum QudaInverterType_s QudaInverterType
enum QudaMemoryType_s QudaMemoryType
QudaReconstructType reconstruct_refinement_sloppy
enum QudaExtLibType_s QudaExtLibType
QudaGaugeParam newQudaGaugeParam(void)
QudaPreserveSource preserve_source
enum QudaTwistFlavorType_s QudaTwistFlavorType
QudaReconstructType link_recon_sloppy