HiRep 0.1
Loading...
Searching...
No Matches
dirac.h
1/***************************************************************************\
2* Copyright (c) 2008-2022, Claudio Pica, Sofie Martins *
3* All rights reserved. *
4\***************************************************************************/
5
12
13// TODO: Clean up all the ifdefs here
14
15#ifndef DIRAC_H
16#define DIRAC_H
17
18#include "spinor_field.h"
19#include "Inverters/linear_solvers.h"
20#include "Utils/generics.h"
21#include "geometry.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#ifdef __cplusplus
28//there is no 'restrict' in C++, use an extension
29#define restrict __restrict__
30#endif
31
32#define _SPINOR_FIELD_TYPE spinor_field
33#define _SUFFIX
34#include "TMPL/dirac.h.tmpl"
35
36#define _SPINOR_FIELD_TYPE spinor_field_flt
37#define _SUFFIX _flt
38#include "TMPL/dirac.h.tmpl"
39
40// Dirac operator with twisted mass
41void Qhat_eopre(double m0, double mu, spinor_field *out, spinor_field *in);
42void Qhat_eopre_sq(double m0, double mu, spinor_field *out, spinor_field *in);
43
44typedef enum { DIRECT, DAGGER } tw_D_type;
45
46void Dxx_tw_inv(double mass, double twmass, spinor_field *out, spinor_field *in, tw_D_type tw_type);
47void g5Dphi_eopre_tw(double m0, double mu, spinor_field *out, spinor_field *in, tw_D_type tw_type);
48void g5Dphi_eopre_tw_sq(double m0, double mu, spinor_field *out, spinor_field *in);
49
50#if (NG == 3) && defined(REPR_FUNDAMENTAL)
51void Dphi_fused_(spinor_field *out, spinor_field *in); //TODO: should we remove this?
52#endif
53
54// Clover operators
55#ifdef WITH_CLOVER
56extern void (*Cphi_)(double mass, spinor_field *dptr, spinor_field *sptr, int assign);
57extern void (*Cphi_inv_)(double mass, spinor_field *dptr, spinor_field *sptr, int assign);
58
59#ifdef WITH_GPU // Only implemented for GPU
60extern void (*Cphi_flt_)(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr, int assign);
61extern void (*Cphi_inv_flt_)(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr, int assign);
62void Cphi_cpu_(double mass, spinor_field *dptr, spinor_field *sptr, int assign);
63void Cphi_inv_cpu_(double mass, spinor_field *dptr, spinor_field *sptr, int assign);
64#endif
65#endif
66
67#ifdef WITH_EXPCLOVER
68extern void (*Cphi_)(double mass, spinor_field *dptr, spinor_field *sptr, int assign, int inverse);
69
70#ifdef WITH_GPU // Only implemented for GPU
71extern void (*Cphi_flt_)(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr, int assign, int inverse);
72extern void (*Cphi_inv_flt_)(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr, int assign, int inverse);
73void Cphi_cpu_(double mass, spinor_field *dptr, spinor_field *sptr, int assign, int inverse);
74#endif
75
76#endif
77
78#if defined(WITH_CLOVER) || defined(WITH_EXPCLOVER)
79
80#ifdef WITH_GPU
81void Cphi_diag_flt(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr);
82void Cphi_diag_inv_flt(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr);
83#endif
84
85void Cphi(double mass, spinor_field *dptr, spinor_field *sptr);
86void Cphi_flt(double mass, spinor_field_flt *dptr, spinor_field_flt *sptr);
87void g5Cphi(double mass, spinor_field *dptr, spinor_field *sptr);
88void g5Cphi_sq(double mass, spinor_field *dptr, spinor_field *sptr);
89void Cphi_eopre(double mass, spinor_field *dptr, spinor_field *sptr);
90void g5Cphi_eopre(double mass, spinor_field *dptr, spinor_field *sptr);
91void g5Cphi_eopre_sq(double mass, spinor_field *dptr, spinor_field *sptr);
92void Cphi_diag(double mass, spinor_field *dptr, spinor_field *sptr);
93void Cphi_diag_inv(double mass, spinor_field *dptr, spinor_field *sptr);
94void Cphi_diag_inv_cpu(double mass, spinor_field *dptr, spinor_field *sptr);
95#endif
96
97// D_update.c
98void set_dirac_mass(double mass); // this is the mass used in the following operators
99double get_dirac_mass(void);
100void set_twisted_mass(double mu); // this is the twisted mass used in the twisted mass operators (Q)
101void Hoo(spinor_field *out, spinor_field *in);
102void Hoo2(spinor_field *out, spinor_field *in);
103void H2(spinor_field *out, spinor_field *in);
104void H(spinor_field *out, spinor_field *in);
105void H_flt(spinor_field_flt *out, spinor_field_flt *in);
106void D(spinor_field *out, spinor_field *in);
107void D_flt(spinor_field_flt *out, spinor_field_flt *in);
108void Qtm_p(spinor_field *out, spinor_field *in);
109void Qtm_m(spinor_field *out, spinor_field *in);
110void QpQm_tm(spinor_field *out, spinor_field *in);
111void Qtm_p_alt(spinor_field *out, spinor_field *in);
112void Qtm_m_alt(spinor_field *out, spinor_field *in);
113void QpQm_tm_alt(spinor_field *out, spinor_field *in);
114// Wrapper to invert the twisted mass operator Qtm_p
115void tm_invert(spinor_field *out, spinor_field *in, mshift_par *mpar);
116void tm_invert_alt(spinor_field *out, spinor_field *in, mshift_par *mpar);
117
118// D_ff.c
119/* Dirac operators with a four fermion interaction */
120void Dphi_eopre_4f(double m0, spinor_field *out, spinor_field *in, double shift);
121void Dphi_eopre_4f_dagger(double m0, spinor_field *out, spinor_field *in, double shift);
122void Dphieopre_4f_sq(double m0, spinor_field *out, spinor_field *in, double shift);
123
124void Dphi_eopre_4f_flt(double m0, spinor_field_flt *out, spinor_field_flt *in);
125// void Dphi_eopre_4f_dagger_flt(double m0, spinor_field_flt *out, spinor_field_flt *in); //TODO: this is not defined
126// void Dphieopre_4f_sq_flt(double m0, spinor_field_flt *out, spinor_field_flt *in); //TODO: this is not defined
127// void Dphieopre_4f_DDdagger(double m0, spinor_field *out, spinor_field *in, double shift); //TODO: this is defined but it was not in the header
128
129/* Dirac operators used in update */
130void set_ff_dirac_mass(double mass); // this is the mass used in the following operators
131void set_ff_dirac_shift(double mass); // The shift added to four fermion Hasenbush-Dirac operators (Dff, Dff_dagger and Df_sq)
132
133void Dff(spinor_field *out, spinor_field *in);
134void Dff_dagger(spinor_field *out, spinor_field *in);
135void Dff_sq(spinor_field *out, spinor_field *in);
136
137// void Dphi_4f(double m0, spinor_field *out, spinor_field *in); //TODO: this is defined but it was not in the header
138// void Dphi_4f_dagger(double m0, spinor_field *out, spinor_field *in); //TODO: this is defined but it was not in the header
139// void Dphi_4f_sq(double m0, spinor_field *out, spinor_field *in); //TODO: this is defined but it was not in the header
140
141#ifdef __cplusplus
142}
143#endif
144#endif
This file contains information on the geometry of the local lattice, block decomposed geometry,...
The elementary site structures defined in suN.h are used in this file to define field structures that...
Definition linear_solvers.h:21
Spinor field array containing single precision SU(N_f) spinors in chosen fermion representation.
Definition spinor_field.h:207
Spinor field array containing SU(N_f) spinors in chosen fermion representation.
Definition spinor_field.h:189