35 #define MAX(a,b) ((a)>(b)?(a):(b)) 36 #define DABS(a) ((a)<(0.)?(-(a)):(a)) 46 const double max_error = 1
e-10;
67 double prec_val = 1.0e-5;
69 if( (a0 < prec_val) && (
a1 < prec_val) && (
a2 < prec_val) )
return true;
74 double prec_val = 5
e-8;
76 if(
DABS(1.0 - detu.x) < prec_val &&
DABS(detu.y) < prec_val)
return true;
86 errorQuda(
"Error in the unitarization\n");
130 int R[4] = {0,0,0,0};
132 for(
int dir=0; dir<4; ++dir)
y[dir] =
param.
X[dir] + 2 *
R[dir];
141 for(
int dir=0; dir<4; ++dir) gParamEx.r[dir] =
R[dir];
149 randstates =
new RNG(halfvolume, 1234,
param.
X);
160 a0.Start(__func__, __FILE__, __LINE__);
161 a1.Start(__func__, __FILE__, __LINE__);
171 SetReunitarizationConsts();
174 for(
int step=1; step<=nsteps; ++step){
176 Monte( *cudaInGauge, *randstates, beta_value, nhbsteps, novrsteps);
181 a1.Stop(__func__, __FILE__, __LINE__);
185 printfQuda(
"Plaq: %.16e , %.16e, %.16e\n", plaq.x, plaq.y, plaq.z);
192 printfQuda(
"Det: %.16e:%.16e\n", detu.x, detu.y);
193 printfQuda(
"Tr: %.16e:%.16e\n", tru.x/3.0, tru.y/3.0);
201 a0.Stop(__func__, __FILE__, __LINE__);
203 randstates->Release();
227 bool testgen =
false;
229 if(plaq.x < 0.614 && plaq.x > 0.611 && plaq.y < 0.614 && plaq.y > 0.611) testgen =
true;
232 ASSERT_TRUE(CheckDeterminant(detu));
237 const int reunit_interval = 10;
238 printfQuda(
"Landau gauge fixing with overrelaxation\n");
239 gaugefixingOVR(*cudaInGauge, 4, 100, 10, 1.5, 0, reunit_interval, 1);
244 const int reunit_interval = 10;
245 printfQuda(
"Coulomb gauge fixing with overrelaxation\n");
246 gaugefixingOVR(*cudaInGauge, 3, 100, 10, 1.5, 0, reunit_interval, 1);
251 if(!checkDimsPartitioned()){
252 printfQuda(
"Landau gauge fixing with steepest descent method with FFTs\n");
259 if(!checkDimsPartitioned()){
260 printfQuda(
"Coulomb gauge fixing with steepest descent method with FFTs\n");
272 int main(
int argc,
char **argv){
274 ::testing::InitGoogleTest(&argc, argv);
279 for (
i=1;
i<argc;
i++){
284 fprintf(stderr,
"ERROR: Invalid option:%s\n", argv[
i]);
290 test_rc = RUN_ALL_TESTS();
QudaReconstructType reconstruct_sloppy
QudaGhostExchange ghostExchange
double3 plaquette(const GaugeField &U, QudaFieldLocation location)
enum QudaPrecision_s QudaPrecision
bool comparePlaquette(double3 a, double3 b)
double2 getLinkDeterminant(cudaGaugeField &data)
Calculate the Determinant.
void setUnitarizeLinksConstants(double unitarize_eps, double max_error, bool allow_svd, bool svd_only, double svd_rel_error, double svd_abs_error)
static bool reunit_svd_only
int process_command_line_option(int argc, char **argv, int *idx)
void CallUnitarizeLinks(quda::cudaGaugeField *cudaInGauge)
QudaGaugeFieldOrder gauge_order
static double svd_rel_error
void gaugefixingOVR(cudaGaugeField &data, const int gauge_dir, const int Nsteps, const int verbose_interval, const double relax_boost, const double tolerance, const int reunit_interval, const int stopWtheta)
Gauge fixing with overrelaxation with support for single and multi GPU.
void exit(int) __attribute__((noreturn))
void initQuda(int device)
void unitarizeLinks(cudaGaugeField &outfield, const cudaGaugeField &infield, int *fails)
void PGaugeExchangeFree()
Release all allocated memory used to exchange data between nodes.
QudaReconstructType link_recon
Class declaration to initialize and hold CURAND RNG states.
QudaGaugeFieldOrder order
void CallUnitarizeLinks(cudaGaugeField *cudaInGauge)
double2 getLinkTrace(cudaGaugeField &data)
Calculate the Trace.
QudaPrecision cuda_prec_sloppy
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
bool checkDimsPartitioned()
QudaReconstructType reconstruct
void SetReunitarizationConsts()
int fprintf(FILE *, const char *,...) __attribute__((__format__(__printf__
static bool reunit_allow_svd
void gaugefixingFFT(cudaGaugeField &data, const int gauge_dir, const int Nsteps, const int verbose_interval, const double alpha, const int autotune, const double tolerance, const int stopWtheta)
Gauge fixing with Steepest descent method with FFTs with support for single GPU only.
bool CheckDeterminant(double2 detu)
static double svd_abs_error
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
TEST_F(GaugeAlgTest, Generation)
int main(int argc, char **argv)
cudaGaugeField * cudaInGauge
QudaReconstructType reconstruct
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...
int gridsize_from_cmdline[]
void initComms(int argc, char **argv, const int *commDims)
void setVerbosity(const QudaVerbosity verbosity)
int comm_dim_partitioned(int dim)
QudaGaugeParam newQudaGaugeParam(void)