48 void *milc_fatlink_eps =
nullptr;
49 void *milc_longlink_eps =
nullptr;
118 double act_path_coeff_1[6] = {
121 u2 * (-1.0 / 8.0) * 0.5,
122 u4 * (1.0 / 8.0) * 0.25 * 0.5,
123 u6 * (-1.0 / 8.0) * 0.125 * (1.0 / 6.0),
128 double act_path_coeff_2[6] = {
129 ((1.0 / 8.0) + (2.0 * 6.0 / 16.0) + (1.0 / 8.0)),
133 (1.0 / 8.0) * 0.25 * 0.5,
134 (-1.0 / 8.0) * 0.125 * (1.0 / 6.0),
139 double act_path_coeff_3[6] = {
148 for (
int i = 0; i < 6; i++) {
149 act_paths[0][i] = act_path_coeff_1[i];
150 act_paths[1][i] = act_path_coeff_2[i];
151 act_paths[2][i] = act_path_coeff_3[i];
167 act_paths =
new double *[3];
168 for (
int i = 0; i < 3; i++) act_paths[i] =
new double[6];
175 void *qdp_fatlink_naik_temp[4];
176 void *qdp_longlink_naik_temp[4];
178 for (
int dir = 0; dir < 4; dir++) {
190 computeHISQLinksGPU(qdp_fatlink, qdp_longlink, (n_naiks == 2) ? qdp_fatlink_naik_temp :
nullptr,
191 (n_naiks == 2) ? qdp_longlink_naik_temp :
nullptr, qdp_inlink, gauge_param, act_paths, eps_naik,
196 for (
int dir = 0; dir < 4; dir++) {
197 memcpy(qdp_fatlink[dir], qdp_fatlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
198 memcpy(qdp_longlink[dir], qdp_longlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
199 free(qdp_fatlink_naik_temp[dir]);
200 qdp_fatlink_naik_temp[dir] =
nullptr;
201 free(qdp_longlink_naik_temp[dir]);
202 qdp_longlink_naik_temp[dir] =
nullptr;
206 for (
int i = 0; i < 3; i++)
delete act_paths[i];
216 act_paths =
new double *[3];
217 for (
int i = 0; i < 3; i++) act_paths[i] =
new double[6];
224 void *qdp_fatlink_naik_temp[4];
225 void *qdp_longlink_naik_temp[4];
227 for (
int dir = 0; dir < 4; dir++) {
240 computeHISQLinksCPU(qdp_fatlink_cpu, qdp_longlink_cpu, (n_naiks == 2) ? qdp_fatlink_naik_temp :
nullptr,
241 (n_naiks == 2) ? qdp_longlink_naik_temp :
nullptr, qdp_inlink, &gauge_param, act_paths, eps_naik);
245 for (
int dir = 0; dir < 4; dir++) {
246 memcpy(qdp_fatlink_cpu[dir], qdp_fatlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
247 memcpy(qdp_longlink_cpu[dir], qdp_longlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
259 computeHISQLinksGPU(qdp_fatlink_gpu, qdp_longlink_gpu, (n_naiks == 2) ? qdp_fatlink_naik_temp :
nullptr,
260 (n_naiks == 2) ? qdp_longlink_naik_temp :
nullptr, qdp_inlink, gauge_param, act_paths, eps_naik,
265 for (
int dir = 0; dir < 4; dir++) {
266 memcpy(qdp_fatlink_gpu[dir], qdp_fatlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
267 memcpy(qdp_longlink_gpu[dir], qdp_longlink_naik_temp[dir],
V *
gaugeSiteSize * gSize);
268 free(qdp_fatlink_naik_temp[dir]);
269 qdp_fatlink_naik_temp[dir] =
nullptr;
270 free(qdp_longlink_naik_temp[dir]);
271 qdp_longlink_naik_temp[dir] =
nullptr;
275 for (
int i = 0; i < 3; i++)
delete act_paths[i];
287 errorQuda(
"computeStaggeredPlaquetteQDPOrder does not support dslash type %d\n", dslash_type);
292 for (
int d = 0; d < 4; d++) {
293 gauge_param.
X[d] = gauge_param_in.
X[d];
314 int x_face_size = gauge_param.
X[1]*gauge_param.
X[2]*gauge_param.
X[3]/2;
315 int y_face_size = gauge_param.
X[0]*gauge_param.
X[2]*gauge_param.
X[3]/2;
316 int z_face_size = gauge_param.
X[0]*gauge_param.
X[1]*gauge_param.
X[3]/2;
317 int t_face_size = gauge_param.
X[0]*gauge_param.
X[1]*gauge_param.
X[2]/2;
318 int pad_size = x_face_size > y_face_size ? x_face_size : y_face_size;
319 pad_size = pad_size > z_face_size ? pad_size : z_face_size;
320 pad_size = pad_size > t_face_size ? pad_size : t_face_size;
321 gauge_param.
ga_pad = pad_size;
QudaDslashType dslash_type
void computeFatLongGPUandCPU(void **qdp_fatlink_gpu, void **qdp_longlink_gpu, void **qdp_fatlink_cpu, void **qdp_longlink_cpu, void **qdp_inlink, QudaGaugeParam &gauge_param, size_t gSize, int n_naiks, double eps_naik)
QudaReconstructType reconstruct_sloppy
#define pinned_malloc(size)
static bool reunit_allow_svd
void setUnitarizeLinksConstants(double unitarize_eps, double max_error, bool allow_svd, bool svd_only, double svd_rel_error, double svd_abs_error)
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
void plaqQuda(double plaq[3])
QudaGaugeParam gauge_param
QudaGaugeFieldOrder gauge_order
void computeKSLinkQuda(void *fatlink, void *longlink, void *ulink, void *inlink, double *path_coeff, QudaGaugeParam *param)
void * qdp_fatlink_cpu[4]
static double max_allowed_error
void computeStaggeredPlaquetteQDPOrder(void **qdp_link, double plaq[3], const QudaGaugeParam &gauge_param_in, const QudaDslashType dslash_type)
static double unitarize_eps
void reorderQDPtoMILC(Out *milc_out, In **qdp_in, int V, int siteSize)
void cpu_xpy(QudaPrecision prec, void *x, void *y, int size)
QudaPrecision cuda_prec_sloppy
static double svd_rel_error
void computeHISQLinksCPU(void **fatlink, void **longlink, void **fatlink_eps, void **longlink_eps, void **sitelink, void *qudaGaugeParamPtr, double **act_path_coeffs, double eps_naik)
QudaReconstructType reconstruct
void setActionPaths(double **act_paths)
void reorderMILCtoQDP(Out **qdp_out, In *milc_in, int V, int siteSize)
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)
Main header file for the QUDA library.
void cpu_axy(QudaPrecision prec, double a, void *x, void *y, int size)
enum QudaDslashType_s QudaDslashType
static double svd_abs_error
void computeHISQLinksGPU(void **qdp_fatlink, void **qdp_longlink, void **qdp_fatlink_eps, void **qdp_longlink_eps, void **qdp_inlink, QudaGaugeParam &gauge_param_in, double **act_path_coeffs, double eps_naik, size_t gSize, int n_naiks)
void * qdp_longlink_cpu[4]
static bool reunit_svd_only
QudaGaugeParam newQudaGaugeParam(void)