HiRep 0.1
Loading...
Searching...
No Matches
forces.h
1/***************************************************************************\
2* Copyright (c) 2022, Claudio Pica *
3* All rights reserved. *
4\***************************************************************************/
5
17
18#ifndef FORCE0_H
19#define FORCE0_H
20
21#include "spinor_field.h"
22#include "mre.h"
23#include "rational_functions.h"
24#include "field_update.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30//force0.c
31typedef struct force_gauge_par {
32 double beta;
33 double c0;
34 double c1;
35 suNg_av_field **momenta;
37
38void force0(double, void *);
39
40//luscherweisz.c
41void lw_force_gpu(double dt, void *vpar);
42void lw_force_cpu(double dt, void *vpar);
43
44double lw_action_gpu(double, double, double);
45double lw_action_cpu(double, double, double);
46
47void lw_local_action_gpu(scalar_field *, double, double, double);
48void lw_local_action_cpu(scalar_field *, double, double, double);
49
50extern double (*lw_action)(double beta, double c0, double c1);
51extern void (*lw_local_action)(scalar_field *loc_action, double beta, double c0, double c1);
52extern void (*lw_force)(double dt, void *vpar);
53extern void (*calculate_stfld)(int comm);
54double lw_action_density(int ix, double beta, double c0, double c1);
55
56//fermion_force_core.c
57#ifdef WITH_EXPCLOVER
58extern void (*force_clover_fermion)(spinor_field *Xs, spinor_field *Ys, double residue);
59void force_clover_fermion_taylor(spinor_field *Xs, spinor_field *Ys, double residue);
60#endif
61
62void force_fermion_core_gpu(spinor_field *, spinor_field *, int, double, double);
63void force_fermion_core_cpu(spinor_field *, spinor_field *, int, double, double);
64
65void fermion_force_begin_gpu(void);
66void fermion_force_begin_cpu(void);
67
68void fermion_force_end_gpu(double, suNg_av_field *);
69void fermion_force_end_cpu(double, suNg_av_field *);
70
71extern void (*force_fermion_core)(spinor_field *Xs, spinor_field *Ys, int auto_fill_odd, double dt, double residue);
72extern void (*fermion_force_begin)(void);
73extern void (*fermion_force_end)(double dt, suNg_av_field *force);
74#ifdef WITH_GPU
75void call_fermion_kernel(spinor_field *Xs, spinor_field *Ys, suNg_av_field *force_sum, double coeff);
76void exec_calculate_stfld(suNg_field *stfld[], int comm);
77void exec_lw_force(suNg_field **stfld, suNg_av_field *force, double dt, double beta, double c0, double c1);
78#endif
79
80//force_hmc.c
81typedef struct force_hmc_par {
82 int id;
83 int n_pf;
84 spinor_field *pf;
85 int hasenbusch;
86 double mass;
87 double b;
88 double mu;
89 double inv_err2, inv_err2_flt;
90 mre_par mpar;
91 int logdet;
92 suNg_av_field **momenta;
94
95void free_force_hmc(void); //TODO: this should be static but are used in force_hmc_ff.c
96void init_force_hmc(void); //TODO: this should be static but are used in force_hmc_ff.c
97void force_hmc(double, void *);
98
99//force_hmc_tm.c
100void force_hmc_tm(double, void *); //uses force_hmc_par
101
102//force_rhmc.c
103typedef struct force_rhmc_par {
104 int id;
105 int n_pf;
106 spinor_field *pf;
107 double mass;
108 rational_app *ratio;
109 double inv_err2;
110 suNg_av_field **momenta;
112
113void force_rhmc(double, void *);
114
115//force_hmc_ff.c
116void force_hmc_ff(double dt, void *vpar); //Force from a HMC_ff or Hasenbusch_ff monomial. Uses force_hmc_par
117
118//force_4f.c
119typedef struct force_auxfield_par {
120 double gamma;
122
123void force_hmc_auxfields(double dt, void *vpar); //Force from a four_fermion monomial
124void force_hmc_auxfields_fermion(double dt, void *vpar, scalar_field *sigma_mom, scalar_field *pi_mom, spinor_field *Xs,
125 spinor_field *Ys, int hasenbusch);
126void update_auxfields(double dt, void *vpar);
127
128//force_scalar.c
129typedef struct force_scalar_par {
130 double mass;
131 double lambda;
132 suNg_scalar_field **momenta;
133 suNg_av_field **g_momenta;
135
136void force_scalar(double dt, void *par);
137
138#ifdef WITH_GPU
139void force0_kernel_gpu(suNg_av_field *force, double coeff);
140#endif
141
142#ifdef __cplusplus
143}
144#endif
145#endif //FORCE0_H
The elementary site structures defined in suN.h are used in this file to define field structures that...
Definition forces.h:119
Definition forces.h:31
Definition forces.h:81
Definition forces.h:103
Definition forces.h:129
Definition mre.h:12
Definition rational_functions.h:16
Scalar field of double precision real values.
Definition spinor_field.h:240
Spinor field array containing SU(N_f) spinors in chosen fermion representation.
Definition spinor_field.h:189
Field of SU(N_g) algebra vectors.
Definition spinor_field.h:224
Gauge field of SU(N_g) matrices.
Definition spinor_field.h:98
SU(N_g) scalar field of SU(N_g) vectors.
Definition spinor_field.h:117