46 return ( (i-j)*(i-k)*(i-l)*(j-k)*(j-l)*(k-l)/12 );
54 m_name =
"Top. Charge";
64 m_size = m_lat->getSize();
65 m_norm = 1.0 / 32.0 / M_PI / M_PI;
74 for(
int x = 0; x < m_size[0]; x++){
75 for(
int y = 0; y < m_size[1]; y++){
76 for(
int z = 0; z < m_size[2]; z++){
77 for(
int t = 0; t < m_size[3]; t++){
78 for(
int mu = 0; mu < 4; mu++){
79 for(
int nu = 0; nu < 4; nu++){
82 Gmn = (*m_lat)(x,y,z,t)[mu]
83 * m_lat->shift(x,y,z,t,nu, mu, 1)
84 * ~(m_lat->shift(x,y,z,t,mu, nu, 1))
85 * ~(*m_lat)(x,y,z,t)[nu];
87 Gmn += (*m_lat)(x,y,z,t)[nu]
88 * ~(m_lat->shift2 (x,y,z,t,mu,nu,1,mu,-1))
89 * ~(m_lat->shift(x,y,z,t,nu, mu, -1))
90 * (m_lat->shift(x,y,z,t,mu, mu, -1));
92 Gmn += ~(m_lat->shift(x,y,z,t,mu, mu, -1))
93 * ~(m_lat->shift2 (x,y,z,t,nu,nu,-1,mu,-1))
94 * (m_lat->shift2 (x,y,z,t,mu,nu,-1,mu,-1))
95 * (m_lat->shift(x,y,z,t,nu, nu, -1));
97 Gmn += ~(m_lat->shift(x,y,z,t,nu, nu, -1))
98 * (m_lat->shift(x,y,z,t,mu, nu, -1))
99 * (m_lat->shift2 (x,y,z,t,nu,nu,-1,mu,1))
100 * ~(*m_lat)(x,y,z,t)[mu];
103 for(
int i = 0; i < 18; i+=2)
106 for(
int rho = 0; rho < 4; rho++){
107 if(rho!=mu && rho != nu){
108 for(
int sig = 0; sig < 4; sig++){
109 if(sig!=mu && sig!=nu && sig!=rho){
111 Grs = (*m_lat)(x,y,z,t)[rho]
112 * m_lat->shift(x,y,z,t,sig, rho, 1)
113 * ~(m_lat->shift(x,y,z,t,rho, sig, 1))
114 * ~(*m_lat)(x,y,z,t)[sig];
116 Grs += (*m_lat)(x,y,z,t)[sig]
117 * ~(m_lat->shift2 (x,y,z,t,rho,sig,1,rho,-1))
118 * ~(m_lat->shift(x,y,z,t,sig, rho, -1))
119 * (m_lat->shift(x,y,z,t,rho, rho, -1));
121 Grs += ~(m_lat->shift(x,y,z,t,rho, rho, -1))
122 * ~(m_lat->shift2 (x,y,z,t,sig,sig,-1,rho,-1))
123 * (m_lat->shift2 (x,y,z,t,rho,sig,-1,rho,-1))
124 * (m_lat->shift(x,y,z,t,sig, sig, -1));
126 Grs += ~(m_lat->shift(x,y,z,t,sig, sig, -1))
127 * (m_lat->shift(x,y,z,t,rho, sig, -1))
128 * (m_lat->shift2 (x,y,z,t,sig,sig,-1,rho,1))
129 * ~(*m_lat)(x,y,z,t)[rho];
132 for(
int i = 0; i < 18; i+=2)
135 m_value += (Gmn*Grs).realTrace()*
leviCivita(mu, nu, rho, sig);
Contains the definition of the Lattice class.
Implementation of a class to perform arithmetics between links.
Contains the definition of the Observable prototype.
Contains the definition of the TopologicalCharge observable.
void initObservable(Lattice *lattice)
initializer of the TopologicalCharge class
Utilities for parallelization.
Basic library to implement SU3 matrix arithmetics and functions.
void gatherResults()
MPI reduction of the observable value.
void compute()
computes the TopologicalCharge value using the clover definition of the field strength tensor ...
Template class to store an array with 4 dimensional indices of a given datatype. Includes functionali...
TopologicalCharge()
constructor of the TopologicalCharge class
Prototype for the Observable class group.
int leviCivita(int i, int j, int k, int l)
levi-civita symbol evaluator