15 #if defined(QMP_COMMS) 17 #elif defined(MPI_COMMS) 31 #define MAX(a,b) ((a)>(b)?(a):(b)) 79 extern void usage(
char** );
93 printfQuda(
"prec sloppy_prec link_recon sloppy_link_recon S_dimension T_dimension Ls_dimension\n");
152 int pad_size =
MAX(x_face_size, y_face_size);
153 pad_size =
MAX(pad_size, z_face_size);
154 pad_size =
MAX(pad_size, t_face_size);
199 printfQuda(
"Twisted-mass doublet non supported (yet)\n");
316 printfQuda(
"Twisted-mass doublet non supported (yet)\n");
364 using namespace quda;
366 const double max_error = 1
e-10;
378 using namespace quda;
389 int main(
int argc,
char **argv)
392 for (
int i = 1;
i < argc;
i++){
396 printf(
"ERROR: Invalid option:%s\n", argv[
i]);
446 void *gauge[4], *
clover=0, *clover_inv=0;
448 for (
int dir = 0; dir < 4; dir++) {
491 using namespace quda;
504 int R[4] = {0,0,0,0};
506 for(
int dir=0; dir<4; ++dir)
y[dir] =
gauge_param.
X[dir] + 2 *
R[dir];
514 for(
int dir=0; dir<4; ++dir) gParamEx.r[dir] =
R[dir];
524 bool coldstart =
false;
525 double beta_value = 6.2;
535 Monte( *gaugeEx, *randstates, beta_value, 100*nhbsteps, 100*novrsteps);
566 for(
int step=1; step<=nsteps; ++step){
567 Monte( *gaugeEx, *randstates, beta_value, nhbsteps, novrsteps);
572 printfQuda(
"step=%d plaquette = %e\n", step, plaq.x);
600 time0 /= CLOCKS_PER_SEC;
602 printfQuda(
"Device memory used:\n Spinor: %f GiB\n Gauge: %f GiB\n",
607 printfQuda(
"\nDone: %i iter / %g secs = %g Gflops, total time = %g secs\n",
621 if (clover_inv)
free(clover_inv);
624 for (
int dir = 0; dir<4; dir++)
free(gauge[dir]);
int dimPartitioned(int dim)
QudaDiracFieldOrder dirac_order
QudaMassNormalization mass_normalization
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
QudaReconstructType reconstruct_sloppy
void freeCloverQuda(void)
void Init()
Initialize CURAND RNG states.
QudaGhostExchange ghostExchange
void construct_gauge_field(void **gauge, int type, QudaPrecision precision, QudaGaugeParam *param)
double3 plaquette(const GaugeField &U, QudaFieldLocation location)
QudaVerbosity verbosity_precondition
enum QudaPrecision_s QudaPrecision
QudaMultigridParam newQudaMultigridParam(void)
QudaSchwarzType schwarz_type
__host__ __device__ ValueType norm(const complex< ValueType > &z)
Returns the magnitude of z squared.
QudaPrecision prec_sloppy
enum QudaResidualType_s QudaResidualType
QudaInverterType inv_type_precondition
void invertQuda(void *h_x, void *h_b, QudaInvertParam *param)
void setUnitarizeLinksConstants(double unitarize_eps, double max_error, bool allow_svd, bool svd_only, double svd_rel_error, double svd_abs_error)
QudaDslashType dslash_type
QudaReconstructType reconstruct_precondition
QudaInverterType inv_type
int return_clover_inverse
QudaSolveType smoother_solve_type[QUDA_MAX_MG_LEVEL]
enum QudaSolveType_s QudaSolveType
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
QudaTwistFlavorType twist_flavor
static bool reunit_svd_only
int process_command_line_option(int argc, char **argv, int *idx)
QudaPrecision & cuda_prec
void CallUnitarizeLinks(quda::cudaGaugeField *cudaInGauge)
void destroyMultigridQuda(void *mg_instance)
Free resources allocated by the multigrid solver.
char * strcpy(char *__dst, const char *__src)
QudaGaugeParam gauge_param
QudaGaugeFieldOrder gauge_order
static double svd_rel_error
const char * get_prec_str(QudaPrecision prec)
void exit(int) __attribute__((noreturn))
QudaPrecision clover_cuda_prec_sloppy
QudaFieldLocation input_location
QudaPrecision & cuda_prec_precondition
int n_vec[QUDA_MAX_MG_LEVEL]
QudaPrecision prec_precondition
QudaDslashType dslash_type
QudaSolutionType solution_type
else return(__swbuf(_c, _p))
int geo_block_size[QUDA_MAX_MG_LEVEL][QUDA_MAX_DIM]
int strcmp(const char *__s1, const char *__s2)
QudaPrecision clover_cuda_prec
QudaBoolean global_reduction[QUDA_MAX_MG_LEVEL]
void initQuda(int device)
QudaFieldLocation output_location
void unitarizeLinks(cudaGaugeField &outfield, const cudaGaugeField &infield, int *fails)
void * malloc(size_t __size) __attribute__((__warn_unused_result__)) __attribute__((alloc_size(1)))
QudaPrecision clover_cuda_prec_precondition
QudaInvertParam inv_param
int printf(const char *,...) __attribute__((__format__(__printf__
QudaMultigridCycleType cycle_type[QUDA_MAX_MG_LEVEL]
void PGaugeExchangeFree()
Release all allocated memory used to exchange data between nodes.
void setTransferGPU(bool)
QudaPrecision cuda_prec_sloppy
void Release()
Release Device memory for CURAND RNG states.
QudaReconstructType link_recon
void setSpinorSiteSize(int n)
double tol_offset[QUDA_MAX_MULTI_SHIFT]
QudaInvertParam newQudaInvertParam(void)
const char * get_recon_str(QudaReconstructType recon)
QudaPrecision cuda_prec_precondition
QudaCloverFieldOrder clover_order
Class declaration to initialize and hold CURAND RNG states.
double omega[QUDA_MAX_MG_LEVEL]
enum QudaMatPCType_s QudaMatPCType
cpuColorSpinorField * spinorOut
void * newMultigridQuda(QudaMultigridParam *param)
QudaGaugeFieldOrder order
double smoother_tol[QUDA_MAX_MG_LEVEL]
QudaGammaBasis gamma_basis
QudaInverterType smoother_type
QudaPrecision cuda_prec_sloppy
QudaReconstructType link_recon_precondition
void setMultigridParam(QudaMultigridParam &mg_param)
void InitGaugeField(cudaGaugeField &data)
Perform a cold start to the gauge field, identity SU(3) matrix, also fills the ghost links in multi-G...
static double unitarize_eps
QudaReconstructType reconstruct
void updateMultigridQuda(void *mg_instance, QudaMultigridParam *param)
Updates the multigrid preconditioner for the new gauge / clover field.
int rand(void) __attribute__((__availability__(swift
int compute_clover_inverse
QudaFieldLocation location[QUDA_MAX_MG_LEVEL]
static bool reunit_allow_svd
void construct_clover_field(void *clover, double norm, double diag, QudaPrecision precision)
void * memset(void *__b, int __c, size_t __len)
QudaFieldLocation location
int spin_block_size[QUDA_MAX_MG_LEVEL]
QudaPrecision cuda_prec_precondition
QudaSolutionType coarse_grid_solution_type[QUDA_MAX_MG_LEVEL]
int geo_block_size[QUDA_MAX_MG_LEVEL][QUDA_MAX_DIM]
void setInvertParam(QudaInvertParam &inv_param)
static double svd_abs_error
QudaBoolean generate_all_levels
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
int nu_pre[QUDA_MAX_MG_LEVEL]
#define QUDA_MAX_MG_LEVEL
Maximum number of multi-grid levels. This number may be increased if needed.
QudaTwistFlavorType twist_flavor
QudaPrecision & cuda_prec_sloppy
#define device_malloc(size)
enum QudaDslashType_s QudaDslashType
int gridsize_from_cmdline[]
int main(int argc, char **argv)
QudaReconstructType reconstruct
QudaResidualType residual_type
clock_t clock(void) __asm("_" "clock")
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5...
int nu_post[QUDA_MAX_MG_LEVEL]
QudaComputeNullVector compute_null_vector
void Monte(cudaGaugeField &data, RNG &rngstate, double Beta, int nhb, int nover)
Perform heatbath and overrelaxation. Performs nhb heatbath steps followed by nover overrelaxation ste...
void read_gauge_field(const char *filename, void *gauge[], QudaPrecision prec, const int *X, int argc, char *argv[])
void setReunitarizationConsts()
QudaPrecision clover_cpu_prec
void initComms(int argc, char **argv, const int *commDims)
void copyExtendedGauge(GaugeField &out, const GaugeField &in, QudaFieldLocation location, void *Out=0, void *In=0)
QudaInverterType smoother[QUDA_MAX_MG_LEVEL]
void setGaugeParam(QudaGaugeParam &gauge_param)
enum QudaInverterType_s QudaInverterType
QudaReconstructType link_recon_sloppy
int comm_dim_partitioned(int dim)
QudaGaugeParam newQudaGaugeParam(void)
QudaPreserveSource preserve_source
QudaInvertParam * invert_param
enum QudaTwistFlavorType_s QudaTwistFlavorType