Skip to content

Commit 91f9b55

Browse files
author
Mathieu Taillefumier
committed
Added hopping.h
1 parent 60fdb2f commit 91f9b55

File tree

3 files changed

+156
-0
lines changed

3 files changed

+156
-0
lines changed

operator/hopping.h

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/**********************************************************************
2+
*
3+
* Copyright (C) 2012 Carsten Urbach
4+
*
5+
* BG and halfspinor versions (C) 2007, 2008 Carsten Urbach
6+
*
7+
* This file is based on an implementation of the Dirac operator
8+
* written by Martin Luescher, modified by Martin Hasenbusch in 2002
9+
* and modified and extended by Carsten Urbach from 2003-2008
10+
*
11+
* This file is part of tmLQCD.
12+
*
13+
* tmLQCD is free software: you can redistribute it and/or modify
14+
* it under the terms of the GNU General Public License as published by
15+
* the Free Software Foundation, either version 3 of the License, or
16+
* (at your option) any later version.
17+
*
18+
* tmLQCD is distributed in the hope that it will be useful,
19+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21+
* GNU General Public License for more details.
22+
*
23+
* You should have received a copy of the GNU General Public License
24+
* along with tmLQCD. If not, see <http://www.gnu.org/licenses/>.
25+
*
26+
**********************************************************************/
27+
28+
#ifndef _HOPPING_H
29+
#define _HOPPING_H
30+
31+
#define _declare_regs() \
32+
su3_vector ALIGN psi, chi; \
33+
spinor ALIGN temp;
34+
35+
#define _hop_t_p() \
36+
_vector_add(psi, sp->s0, sp->s2); \
37+
_su3_multiply(chi, (*up), psi); \
38+
_complex_times_vector(psi, ka0, chi); \
39+
_vector_assign(temp.s0, psi); \
40+
_vector_assign(temp.s2, psi); \
41+
_vector_add(psi, sp->s1, sp->s3); \
42+
_su3_multiply(chi, (*up), psi); \
43+
_complex_times_vector(psi, ka0, chi); \
44+
_vector_assign(temp.s1, psi); \
45+
_vector_assign(temp.s3, psi);
46+
47+
#define _hop_t_m() \
48+
_vector_sub(psi, sm->s0, sm->s2); \
49+
_su3_inverse_multiply(chi, (*um), psi); \
50+
_complexcjg_times_vector(psi, ka0, chi); \
51+
_vector_add_assign(temp.s0, psi); \
52+
_vector_sub_assign(temp.s2, psi); \
53+
_vector_sub(psi, sm->s1, sm->s3); \
54+
_su3_inverse_multiply(chi, (*um), psi); \
55+
_complexcjg_times_vector(psi, ka0, chi); \
56+
_vector_add_assign(temp.s1, psi); \
57+
_vector_sub_assign(temp.s3, psi);
58+
59+
#define _hop_x_p() \
60+
_vector_i_add(psi, sp->s0, sp->s3); \
61+
_su3_multiply(chi, (*up), psi); \
62+
_complex_times_vector(psi, ka1, chi); \
63+
_vector_add_assign(temp.s0, psi); \
64+
_vector_i_sub_assign(temp.s3, psi); \
65+
_vector_i_add(psi, sp->s1, sp->s2); \
66+
_su3_multiply(chi, (*up), psi); \
67+
_complex_times_vector(psi, ka1, chi); \
68+
_vector_add_assign(temp.s1, psi); \
69+
_vector_i_sub_assign(temp.s2, psi);
70+
71+
#define _hop_x_m() \
72+
_vector_i_sub(psi, sm->s0, sm->s3); \
73+
_su3_inverse_multiply(chi, (*um), psi); \
74+
_complexcjg_times_vector(psi, ka1, chi); \
75+
_vector_add_assign(temp.s0, psi); \
76+
_vector_i_add_assign(temp.s3, psi); \
77+
_vector_i_sub(psi, sm->s1, sm->s2); \
78+
_su3_inverse_multiply(chi, (*um), psi); \
79+
_complexcjg_times_vector(psi, ka1, chi); \
80+
_vector_add_assign(temp.s1, psi); \
81+
_vector_i_add_assign(temp.s2, psi);
82+
83+
#define _hop_y_p() \
84+
_vector_add(psi, sp->s0, sp->s3); \
85+
_su3_multiply(chi, (*up), psi); \
86+
_complex_times_vector(psi, ka2, chi); \
87+
_vector_add_assign(temp.s0, psi); \
88+
_vector_add_assign(temp.s3, psi); \
89+
_vector_sub(psi, sp->s1, sp->s2); \
90+
_su3_multiply(chi, (*up), psi); \
91+
_complex_times_vector(psi, ka2, chi); \
92+
_vector_add_assign(temp.s1, psi); \
93+
_vector_sub_assign(temp.s2, psi);
94+
95+
#define _hop_y_m() \
96+
_vector_sub(psi, sm->s0, sm->s3); \
97+
_su3_inverse_multiply(chi, (*um), psi); \
98+
_complexcjg_times_vector(psi, ka2, chi); \
99+
_vector_add_assign(temp.s0, psi); \
100+
_vector_sub_assign(temp.s3, psi); \
101+
_vector_add(psi, sm->s1, sm->s2); \
102+
_su3_inverse_multiply(chi, (*um), psi); \
103+
_complexcjg_times_vector(psi, ka2, chi); \
104+
_vector_add_assign(temp.s1, psi); \
105+
_vector_add_assign(temp.s2, psi);
106+
107+
#define _hop_z_p() \
108+
_vector_i_add(psi, sp->s0, sp->s2); \
109+
_su3_multiply(chi, (*up), psi); \
110+
_complex_times_vector(psi, ka3, chi); \
111+
_vector_add_assign(temp.s0, psi); \
112+
_vector_i_sub_assign(temp.s2, psi); \
113+
_vector_i_sub(psi, sp->s1, sp->s3); \
114+
_su3_multiply(chi, (*up), psi); \
115+
_complex_times_vector(psi, ka3, chi); \
116+
_vector_add_assign(temp.s1, psi); \
117+
_vector_i_add_assign(temp.s3, psi);
118+
119+
#define _hop_z_m() \
120+
_vector_i_sub(psi, sm->s0, sm->s2); \
121+
_su3_inverse_multiply(chi, (*um), psi); \
122+
_complexcjg_times_vector(psi, ka3, chi); \
123+
_vector_add_assign(temp.s0, psi); \
124+
_vector_i_add_assign(temp.s2, psi); \
125+
_vector_i_add(psi, sm->s1, sm->s3); \
126+
_su3_inverse_multiply(chi, (*um), psi); \
127+
_complexcjg_times_vector(psi, ka3, chi); \
128+
_vector_add_assign(temp.s1, psi); \
129+
_vector_i_sub_assign(temp.s3, psi);
130+
131+
#define _hop_mul_g5_cmplx_and_store() \
132+
_complex_times_vector(rn->s0, cfactor, temp.s0); \
133+
_complex_times_vector(rn->s1, cfactor, temp.s1); \
134+
_complexcjg_times_vector(rn->s2, cfactor, temp.s2); \
135+
_complexcjg_times_vector(rn->s3, cfactor, temp.s3);
136+
137+
#define _g5_cmplx_sub_hop_and_g5store() \
138+
_complex_times_vector(psi, cfactor, pn->s0); \
139+
_vector_sub(rn->s0, psi, temp.s0); \
140+
_complex_times_vector(chi, cfactor, pn->s1); \
141+
_vector_sub(rn->s1, chi, temp.s1); \
142+
_complexcjg_times_vector(psi, cfactor, pn->s2); \
143+
_vector_sub(rn->s2, temp.s2, psi); \
144+
_complexcjg_times_vector(chi, cfactor, pn->s3); \
145+
_vector_sub(rn->s3, temp.s3, chi);
146+
147+
#define _store_res() \
148+
_vector_assign(rn->s0, temp.s0); \
149+
_vector_assign(rn->s1, temp.s1); \
150+
_vector_assign(rn->s2, temp.s2); \
151+
_vector_assign(rn->s3, temp.s3);
152+
#endif

operator/hopping_bg_dbl.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
*
2727
**********************************************************************/
2828

29+
#include "hopping.h"
30+
2931
void Hopping_Matrix(const int ieo, spinor* const l, spinor* const k) {
3032
int icx, icy, icz, ioff, ioff2;
3133
int ix, iy, iz;

operator/hopping_body_dbl.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
*
2525
**********************************************************************/
2626

27+
#include "hopping.h"
28+
2729
int ioff;
2830
int* hi;
2931
su3* restrict ALIGN up;

0 commit comments

Comments
 (0)