20 char *funcname =
"Gauge_Update";
22 cuGauge_Update(d,pp,ut[0],ut[1],dimGrid,dimBlock);
24#pragma omp parallel for simd collapse(2) aligned(pp:AVX)
25 for(
int i=0;i<
kvol;i++)
26 for(
int mu = 0; mu<
ndim; mu++){
37 double CCC = cos(AAA);
38 double SSS = d*sin(AAA)/AAA;
43 complex b11 = ut[0][i*
ndim+mu];
44 ut[0][i*
ndim+mu] = a11*b11-a12*conj(ut[1][i*
ndim+mu]);
45 ut[1][i*
ndim+mu] = a11*ut[1][i*
ndim+mu]+a12*conj(b11);
56 cublasDaxpy(cublas_handle,
kmom, &d, dSdpi, 1, pp, 1);
58 cblas_daxpy(
kmom, d, dSdpi, 1, pp, 1);
60#pragma omp parallel for simd
61 for(
int i=0;i<
kmom;i++)
67 float beta,
float akappa,
int stepl,
float dt,
double *ancg,
int *itot,
float proby)
71 const double d =-dt*0.5;
75 printf(
"Evaluating force on rank %i\n",
rank);
77 Force(dSdpi, 1,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
81 bool end_traj=
false;
int step =1;
86 printf(
"Step: %d\n", step);
96 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
118 float beta,
float akappa,
int stepl,
float dt,
double *ancg,
int *itot,
float proby)
120 const double lambda=0.5-(pow(2.0*sqrt(326.0)+36.0,1.0/3.0)/12.0)+1.0/(6*pow(2.0*sqrt(326.0) + 36.0,1.0/3.0));
125 const double dU = dt*0.5;
128 const double dp= -lambda*dt;
129 const double dp2= 2.0*dp;
130 const double dpm= -(1.0-2.0*lambda)*dt;
134 printf(
"Evaluating force on rank %i\n",
rank);
136 Force(dSdpi, 1,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
138 printf(
"Initial force dSdpi[0]=%e\n", dSdpi[0]);
143 printf(
"Initial OMF2 momentum pp[0]=%e\n", pp[0]);
148 bool end_traj=
false;
int step =1;
153 printf(
"Step: %d\n", step);
159 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
163 printf(
"Middle OMF2 momentum pp[0]=%e\n", pp[0]);
170 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
177 printf(
"Final OMF2 momentum pp[0]=%e\n", pp[0]);
196 float beta,
float akappa,
int stepl,
float dt,
double *ancg,
int *itot,
float proby)
200 const double r1 = 0.08398315262876693;
201 const double r2 = 0.2539785108410595;
202 const double r3 = 0.6822365335719091;
203 const double r4 = -0.03230286765269967;
206 const double dpO= -r1*dt;
207 const double dpO2= 2*dpO;
209 const double dpM= -r3*dt;
211 const double dpI= -(0.5-r1-r3)*dt;
215 const double duO = dt*r2;
217 const double duM = dt*r4;
219 const double duI = dt*(1-2*(r2+r4));
224 printf(
"Evaluating force on rank %i\n",
rank);
226 Force(dSdpi, 1,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
231 bool end_traj=
false;
int step =1;
236 printf(
"Step: %d\n", step);
242 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
250 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
258 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
266 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
274 Force(dSdpi, 0,
rescgg,X0,X1,Phi,ut,ut_f,iu,
id,gamval,gamval_f,gamin,dk,dk_f,jqq,akappa,beta,ancg);
int OMF2(Complex *ut[2], Complex_f *ut_f[2], Complex *X0, Complex *X1, Complex *Phi, double *dk[2], float *dk_f[2], double *dSdpi, double *pp, int *iu, int *id, Complex *gamval, Complex_f *gamval_f, int *gamin, Complex jqq, float beta, float akappa, int stepl, float dt, double *ancg, int *itot, float proby)
OMF second order five step integrator.
int Leapfrog(Complex *ut[2], Complex_f *ut_f[2], Complex *X0, Complex *X1, Complex *Phi, double *dk[2], float *dk_f[2], double *dSdpi, double *pp, int *iu, int *id, Complex *gamval, Complex_f *gamval_f, int *gamin, Complex jqq, float beta, float akappa, int stepl, float dt, double *ancg, int *itot, float proby)
Leapfrog integrator. Each trajectory step takes the form of p->p+dt/2,u->u+dt,p->p+dt/2 In practice t...
int OMF4(Complex *ut[2], Complex_f *ut_f[2], Complex *X0, Complex *X1, Complex *Phi, double *dk[2], float *dk_f[2], double *dSdpi, double *pp, int *iu, int *id, Complex *gamval, Complex_f *gamval_f, int *gamin, Complex jqq, float beta, float akappa, int stepl, float dt, double *ancg, int *itot, float proby)
OMF fourth order eleven step integrator.
int Gauge_Update(const double d, double *pp, Complex *ut[2], Complex_f *ut_f[2])
Gauge update for the integration step of the HMC.
int Momentum_Update(const double d, const double *dSdpi, double *pp)
Wrapper for the momentum update during the integration step of the HMC.
int Trial_Exchange(Complex *ut[2], Complex_f *ut_f[2])
Exchanges the trial fields.
#define rescgg
Conjugate gradient residue for update.
#define kmom
sublattice momentum sites
#define nadj
adjacent spatial indices
#define kvol
Sublattice volume.
#define Complex
Double precision complex number.
#define Complex_f
Single precision complex number.
Function declarations for most of the routines.
int Force(double *dSdpi, int iflag, double res1, Complex *X0, Complex *X1, Complex *Phi, Complex *ut[2], Complex_f *ut_f[2], unsigned int *iu, unsigned int *id, Complex *gamval, Complex_f *gamval_f, int *gamin, double *dk[2], float *dk_f[2], Complex_f jqq, float akappa, float beta, double *ancg)
Calculates the force at each intermediate time.
int Reunitarise(Complex *ut[2])
Reunitarises u11t and u12t as in conj(u11t[i])*u11t[i]+conj(u12t[i])*u12t[i]=1.