HiRep 0.1
Loading...
Searching...
No Matches
spin_matrix.h
Go to the documentation of this file.
1/***************************************************************************\
2* Copyright (c) 2013, Rudy Arthur, Ari Hietanen *
3* All rights reserved. *
4\***************************************************************************/
5
11/*******************************************************************************
12*
13* |S_00 S_01| |1| = |S_00| = c[0]
14* |S_10 S_11| |0| |S_10|
15*
16* etc.
17* The notation I don't like _spinor_g5_f(r) = g5 r
18* becomes the more sensible _g5_spinmatrix(s) = g5 s and _spinmatrix_g5(s) = s g5
19*
20*******************************************************************************/
21
22#ifndef SPIN_MATRIX_H
23#define SPIN_MATRIX_H
24#include "suN_types.h"
25#include "suN.h"
26#include "gamma_spinor.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32typedef struct {
33 suNf_spinor c[4];
35
36/* r=0 (r spinmatrix) */
37#define _spinmatrix_zero(r) \
38 _spinor_zero_f((r).c[0]); \
39 _spinor_zero_f((r).c[1]); \
40 _spinor_zero_f((r).c[2]); \
41 _spinor_zero_f((r).c[3])
42
43//r spinmatrix, s spinor, i index
44#define _spinmatrix_assign_row(r, s, i) (r).c[i] = (s)
45
46//r spinmatrix, s spinor, i index
47/*#define _spinmatrix_assign_col(r, s, i) \
48 (r).c[0].c[i] = (s).c[0]; \
49 (r).c[1].c[i] = (s).c[1]; \
50 (r).c[2].c[i] = (s).c[2]; \
51 (r).c[3].c[i] = (s).c[3]*/
52
53//r = s + t
54#define _spinmatrix_add(r, s, t) \
55 _spinor_add_f((r).c[0], (s).c[0], (t).c[0]); \
56 _spinor_add_f((r).c[1], (s).c[1], (t).c[1]); \
57 _spinor_add_f((r).c[2], (s).c[2], (t).c[2]); \
58 _spinor_add_f((r).c[3], (s).c[3], (t).c[3])
59
60//r = s - t
61#define _spinmatrix_sub(r, s, t) \
62 _spinor_sub_f((r).c[0], (s).c[0], (t).c[0]); \
63 _spinor_sub_f((r).c[1], (s).c[1], (t).c[1]); \
64 _spinor_sub_f((r).c[2], (s).c[2], (t).c[2]); \
65 _spinor_sub_f((r).c[3], (s).c[3], (t).c[3])
66
67//s = r . gamma_5
68#define _spinmatrix_g5(s, r) \
69 _spinor_g5_f((s).c[0], (r).c[0]); \
70 _spinor_g5_f((s).c[1], (r).c[1]); \
71 _spinor_g5_f((s).c[2], (r).c[2]); \
72 _spinor_g5_f((s).c[3], (r).c[3])
73
74//s = gamma5 . r
75#define _g5_spinmatrix(s, r) \
76 (s).c[0] = (r).c[0]; \
77 (s).c[1] = (r).c[1]; \
78 _spinor_minus_f((s).c[2], (r).c[2]); \
79 _spinor_minus_f((s).c[3], (r).c[3])
80
81//s = r . gamma_0
82#define _spinmatrix_g0(s, r) \
83 _spinor_g0_f((s).c[0], (r).c[0]); \
84 _spinor_g0_f((s).c[1], (r).c[1]); \
85 _spinor_g0_f((s).c[2], (r).c[2]); \
86 _spinor_g0_f((s).c[3], (r).c[3])
87
88//s = gamma_0 . r
89#define _g0_spinmatrix(s, r) \
90 _spinor_minus_f((s).c[0], (r).c[2]); \
91 _spinor_minus_f((s).c[1], (r).c[3]); \
92 _spinor_minus_f((s).c[2], (r).c[0]); \
93 _spinor_minus_f((s).c[3], (r).c[1])
94
95//s = r . gamma_1
96#define _spinmatrix_g1(s, r) \
97 _spinor_g1_f((s).c[0], (r).c[0]); \
98 _spinor_g1_f((s).c[1], (r).c[1]); \
99 _spinor_g1_f((s).c[2], (r).c[2]); \
100 _spinor_g1_f((s).c[3], (r).c[3])
101
102//s = gamma_1 . r
103#define _g1_spinmatrix(s, r) \
104 _spinor_i_minus_f((s).c[0], (r).c[3]); \
105 _spinor_i_minus_f((s).c[1], (r).c[2]); \
106 _spinor_i_plus_f((s).c[2], (r).c[1]); \
107 _spinor_i_plus_f((s).c[3], (r).c[0])
108
109//s = r . gamma_2
110#define _spinmatrix_g2(s, r) \
111 _spinor_g2_f((s).c[0], (r).c[0]); \
112 _spinor_g2_f((s).c[1], (r).c[1]); \
113 _spinor_g2_f((s).c[2], (r).c[2]); \
114 _spinor_g2_f((s).c[3], (r).c[3])
115
116//s = gamma_2 . r
117#define _g2_spinmatrix(s, r) \
118 _spinor_minus_f((s).c[0], (r).c[3]); \
119 _spinor_plus_f((s).c[1], (r).c[2]); \
120 _spinor_plus_f((s).c[2], (r).c[1]); \
121 _spinor_minus_f((s).c[3], (r).c[0])
122
123//s = r . gamma_3
124#define _spinmatrix_g3(s, r) \
125 _spinor_g3_f((s).c[0], (r).c[0]); \
126 _spinor_g3_f((s).c[1], (r).c[1]); \
127 _spinor_g3_f((s).c[2], (r).c[2]); \
128 _spinor_g3_f((s).c[3], (r).c[3])
129
130//s = gamma_3 . r
131#define _g3_spinmatrix(s, r) \
132 _spinor_i_minus_f((s).c[0], (r).c[2]); \
133 _spinor_i_plus_f((s).c[1], (r).c[3]); \
134 _spinor_i_plus_f((s).c[2], (r).c[0]); \
135 _spinor_i_minus_f((s).c[3], (r).c[1])
136
137//s = gamma_0 gamma_5 . r
138#define _spinmatrix_g0g5(s, r) \
139 _spinor_g0g5_f((s).c[0], (r).c[0]); \
140 _spinor_g0g5_f((s).c[1], (r).c[1]); \
141 _spinor_g0g5_f((s).c[2], (r).c[2]); \
142 _spinor_g0g5_f((s).c[3], (r).c[3])
143
144//s = gamma_0 . gamma_5 . r
145#define _g0g5_spinmatrix(s, r) \
146 _spinor_plus_f((s).c[0], (r).c[2]); \
147 _spinor_plus_f((s).c[1], (r).c[3]); \
148 _spinor_minus_f((s).c[2], (r).c[0]); \
149 _spinor_minus_f((s).c[3], (r).c[1]);
150
151//s = gamma_5 gamma_0 . r
152#define _spinmatrix_g5g0(s, r) \
153 _spinor_g5g0_f((s).c[0], (r).c[0]); \
154 _spinor_g5g0_f((s).c[1], (r).c[1]); \
155 _spinor_g5g0_f((s).c[2], (r).c[2]); \
156 _spinor_g5g0_f((s).c[3], (r).c[3])
157
158//s = gamma_5 . gamma_0 . r
159#define _g5g0_spinmatrix(s, r) \
160 _spinor_minus_f((s).c[0], (r).c[2]); \
161 _spinor_minus_f((s).c[1], (r).c[3]); \
162 (s).c[2] = (r).c[0]; \
163 (s).c[3] = (r).c[1]
164
165//s = r . gamma_5 . gamma_1
166#define _spinmatrix_g5g1(s, r) \
167 _spinor_g5g1_f((s).c[0], (r).c[0]); \
168 _spinor_g5g1_f((s).c[1], (r).c[1]); \
169 _spinor_g5g1_f((s).c[2], (r).c[2]); \
170 _spinor_g5g1_f((s).c[3], (r).c[3])
171
172//s = gamma_5 . gamma_1 . r
173#define _g5g1_spinmatrix(s, r) \
174 _spinor_i_minus_f((s).c[0], (r).c[3]); \
175 _spinor_i_minus_f((s).c[1], (r).c[2]); \
176 _spinor_i_minus_f((s).c[2], (r).c[1]); \
177 _spinor_i_minus_f((s).c[3], (r).c[0])
178
179//s = r . gamma_5 .gamma_2
180#define _spinmatrix_g5g2(s, r) \
181 _spinor_g5g2_f((s).c[0], (r).c[0]); \
182 _spinor_g5g2_f((s).c[1], (r).c[1]); \
183 _spinor_g5g2_f((s).c[2], (r).c[2]); \
184 _spinor_g5g2_f((s).c[3], (r).c[3])
185
186//s = gamma_5.gamma_2 . r
187#define _g5g2_spinmatrix(s, r) \
188 _spinor_minus_f((s).c[0], (r).c[3]); \
189 (s).c[1] = (r).c[2]; \
190 _spinor_minus_f((s).c[2], (r).c[1]); \
191 (s).c[3] = (r).c[0]
192
193//s = r . gamma_5 gamma_3
194#define _spinmatrix_g5g3(s, r) \
195 _spinor_g5g3_f((s).c[0], (r).c[0]); \
196 _spinor_g5g3_f((s).c[1], (r).c[1]); \
197 _spinor_g5g3_f((s).c[2], (r).c[2]); \
198 _spinor_g5g3_f((s).c[3], (r).c[3])
199
200//s = gamma_5 . gamma_3 . r
201#define _g5g3_spinmatrix(s, r) \
202 _spinor_i_minus_f((s).c[0], (r).c[2]); \
203 _spinor_i_plus_f((s).c[1], (r).c[3]); \
204 _spinor_i_minus_f((s).c[2], (r).c[0]); \
205 _spinor_i_plus_f((s).c[3], (r).c[1])
206
207//s = r . gamma_0 . gamma_1
208#define _spinmatrix_g0g1(s, r) \
209 _spinor_g0g1_f((s).c[0], (r).c[0]); \
210 _spinor_g0g1_f((s).c[1], (r).c[1]); \
211 _spinor_g0g1_f((s).c[2], (r).c[2]); \
212 _spinor_g0g1_f((s).c[3], (r).c[3])
213
214//s = gamma_0 . gamma_1 . r
215#define _g0g1_spinmatrix(s, r) \
216 _spinor_i_minus_f((s).c[0], (r).c[1]); \
217 _spinor_i_minus_f((s).c[1], (r).c[0]); \
218 _spinor_i_plus_f((s).c[2], (r).c[3]); \
219 _spinor_i_plus_f((s).c[3], (r).c[2])
220
221//s = r . gamma_0 . gamma_2
222#define _spinmatrix_g0g2(s, r) \
223 _spinor_g0g2_f((s).c[0], (r).c[0]); \
224 _spinor_g0g2_f((s).c[1], (r).c[1]); \
225 _spinor_g0g2_f((s).c[2], (r).c[2]); \
226 _spinor_g0g2_f((s).c[3], (r).c[3])
227
228//s = gamma0 . gamma_2 . r
229#define _g0g2_spinmatrix(s, r) \
230 _spinor_minus_f((s).c[0], (r).c[1]); \
231 _spinor_plus_f((s).c[1], (r).c[0]); \
232 _spinor_plus_f((s).c[2], (r).c[3]); \
233 _spinor_minus_f((s).c[3], (r).c[2])
234
235//s = r . gamma0 .gamma_3
236#define _spinmatrix_g0g3(s, r) \
237 _spinor_g0g3_f((s).c[0], (r).c[0]); \
238 _spinor_g0g3_f((s).c[1], (r).c[1]); \
239 _spinor_g0g3_f((s).c[2], (r).c[2]); \
240 _spinor_g0g3_f((s).c[3], (r).c[3])
241
242//s = gamma_5 . gamma_3 . r
243#define _g0g3_spinmatrix(s, r) \
244 _spinor_i_minus_f((s).c[0], (r).c[0]); \
245 _spinor_i_plus_f((s).c[1], (r).c[1]); \
246 _spinor_i_plus_f((s).c[2], (r).c[2]); \
247 _spinor_i_minus_f((s).c[3], (r).c[3])
248
249//s = r . gamma_5 . gamma_0 . gamma_1
250#define _spinmatrix_g5g0g1(s, r) \
251 _spinor_g5g0g1_f((s).c[0], (r).c[0]); \
252 _spinor_g5g0g1_f((s).c[1], (r).c[1]); \
253 _spinor_g5g0g1_f((s).c[2], (r).c[2]); \
254 _spinor_g5g0g1_f((s).c[3], (r).c[3])
255
256//s = gamma_5 . gamma_0 . gamma_1 . r
257#define _g5g0g1_spinmatrix(s, r) \
258 _spinor_i_minus_f((s).c[0], (r).c[1]); \
259 _spinor_i_minus_f((s).c[1], (r).c[0]); \
260 _spinor_i_minus_f((s).c[2], (r).c[3]); \
261 _spinor_i_minus_f((s).c[3], (r).c[2])
262
263//s = r . gamma_5 . gamma_0 . gamma_2
264#define _spinmatrix_g5g0g2(s, r) \
265 _spinor_g5g0g2_f((s).c[0], (r).c[0]); \
266 _spinor_g5g0g2_f((s).c[1], (r).c[1]); \
267 _spinor_g5g0g2_f((s).c[2], (r).c[2]); \
268 _spinor_g5g0g2_f((s).c[3], (r).c[3])
269
270//s = gamma_5. gamma0 . gamma_2 . r
271#define _g5g0g2_spinmatrix(s, r) \
272 _spinor_minus_f((s).c[0], (r).c[1]); \
273 (s).c[1] = (r).c[0]; \
274 _spinor_minus_f((s).c[2], (r).c[3]); \
275 (s).c[3] = (r).c[2]
276
277//s = r . gamma_5 . gamma0 .gamma_3
278#define _spinmatrix_g5g0g3(s, r) \
279 _spinor_g5g0g3_f((s).c[0], (r).c[0]); \
280 _spinor_g5g0g3_f((s).c[1], (r).c[1]); \
281 _spinor_g5g0g3_f((s).c[2], (r).c[2]); \
282 _spinor_g5g0g3_f((s).c[3], (r).c[3])
283
284//s = gamma_5 . gamma_3 . r
285#define _g5g0g3_spinmatrix(s, r) \
286 _spinor_i_minus_f((s).c[0], (r).c[0]); \
287 _spinor_i_plus_f((s).c[1], (r).c[1]); \
288 _spinor_i_minus_f((s).c[2], (r).c[2]); \
289 _spinor_i_plus_f((s).c[3], (r).c[3])
290
291//r spinmatrix, s spinmatrix, k result; Tr [ r^dag . s]
292#define _spinmatrix_mul_trace(k, r, s) \
293 do { \
294 _complex_0(k); \
295 _spinor_prod_assign_f((k), (r).c[0], (s).c[0]); \
296 _spinor_prod_assign_f((k), (r).c[1], (s).c[1]); \
297 _spinor_prod_assign_f((k), (r).c[2], (s).c[2]); \
298 _spinor_prod_assign_f((k), (r).c[3], (s).c[3]); \
299 } while (0)
300
301//r spinmatrix, s spinmatrix, k += Tr [ r^dag . s]
302#define _spinmatrix_mul_trace_assign(k, r, s) \
303 do { \
304 _spinor_prod_assign_f((k), (r).c[0], (s).c[0]); \
305 _spinor_prod_assign_f((k), (r).c[1], (s).c[1]); \
306 _spinor_prod_assign_f((k), (r).c[2], (s).c[2]); \
307 _spinor_prod_assign_f((k), (r).c[3], (s).c[3]); \
308 } while (0)
309
310#define _spinmatrix_mul_trace_re(k, r, s) \
311 do { \
312 double _tmpVAR; \
313 (k) = 0; \
314 _spinor_prod_re_f((_tmpVAR), (r).c[0], (s).c[0]); \
315 (k) += _tmpVAR; \
316 _spinor_prod_re_f((_tmpVAR), (r).c[1], (s).c[1]); \
317 (k) += _tmpVAR; \
318 _spinor_prod_re_f((_tmpVAR), (r).c[2], (s).c[2]); \
319 (k) += _tmpVAR; \
320 _spinor_prod_re_f((_tmpVAR), (r).c[3], (s).c[3]); \
321 (k) += _tmpVAR; \
322 } while (0)
323
324#ifdef __cplusplus
325}
326#endif
327#endif
Macros for gamma x spinor.
Definition spin_matrix.h:32