1#ifndef LINEAR_ALGEBRA_GENERIC_GPU_HPP
2#define LINEAR_ALGEBRA_GENERIC_GPU_HPP
9#define _FUNC_GENERIC(_type, _name, _args) _type _name _args
10#define _DECLARE_LINA_HEADER(a, b, c) a b c;
13#define _FIELD_TYPE spinor_field
15#define _COMPLEX hr_complex
16#include "TMPL/linear_algebra_reduction.h.tmpl"
17#include "TMPL/linear_algebra_base_operations.h.tmpl"
18#include "TMPL/linear_algebra_lc.h.tmpl"
19#include "TMPL/linear_algebra_gamma.h.tmpl"
20#include "TMPL/linear_algebra_base.h.tmpl"
23#define _FIELD_TYPE spinor_field_flt
25#define _COMPLEX hr_complex_flt
26#include "TMPL/linear_algebra_reduction.h.tmpl"
27#include "TMPL/linear_algebra_base_operations.h.tmpl"
28#include "TMPL/linear_algebra_lc.h.tmpl"
29#include "TMPL/linear_algebra_gamma.h.tmpl"
30#include "TMPL/linear_algebra_base.h.tmpl"
33#define _FIELD_TYPE scalar_field
35#define _COMPLEX hr_complex
36#include "TMPL/linear_algebra_reduction.h.tmpl"
37#include "TMPL/linear_algebra_base_operations.h.tmpl"
38#include "TMPL/linear_algebra_base.h.tmpl"
40#define _FIELD_TYPE suNg_field
42#define _COMPLEX hr_complex
43#include "TMPL/linear_algebra_reduction.h.tmpl"
44#include "TMPL/linear_algebra_base_operations.h.tmpl"
45#include "TMPL/linear_algebra_base.h.tmpl"
47#define _FIELD_TYPE suNf_field
49#define _COMPLEX hr_complex
50#include "TMPL/linear_algebra_reduction.h.tmpl"
51#include "TMPL/linear_algebra_base_operations.h.tmpl"
52#include "TMPL/linear_algebra_base.h.tmpl"
54#define _FIELD_TYPE suNfc_field
56#define _COMPLEX hr_complex
57#include "TMPL/linear_algebra_reduction.h.tmpl"
58#include "TMPL/linear_algebra_base_operations.h.tmpl"
59#include "TMPL/linear_algebra_base.h.tmpl"
61#define _FIELD_TYPE suNg_field_flt
63#define _COMPLEX hr_complex_flt
64#include "TMPL/linear_algebra_reduction.h.tmpl"
65#include "TMPL/linear_algebra_base_operations.h.tmpl"
66#include "TMPL/linear_algebra_base.h.tmpl"
68#define _FIELD_TYPE suNf_field_flt
70#define _COMPLEX hr_complex_flt
71#include "TMPL/linear_algebra_reduction.h.tmpl"
72#include "TMPL/linear_algebra_base_operations.h.tmpl"
73#include "TMPL/linear_algebra_base.h.tmpl"
75#define _FIELD_TYPE suNg_scalar_field
77#define _COMPLEX hr_complex
78#include "TMPL/linear_algebra_reduction.h.tmpl"
79#include "TMPL/linear_algebra_base_operations.h.tmpl"
80#include "TMPL/linear_algebra_base.h.tmpl"
82#define _FIELD_TYPE suNg_av_field
84#define _COMPLEX hr_complex
85#include "TMPL/linear_algebra_reduction.h.tmpl"
86#include "TMPL/linear_algebra_base_operations.h.tmpl"
87#include "TMPL/linear_algebra_base.h.tmpl"
89#define _FIELD_TYPE gtransf
91#define _COMPLEX hr_complex
92#include "TMPL/linear_algebra_reduction.h.tmpl"
93#include "TMPL/linear_algebra_base_operations.h.tmpl"
94#include "TMPL/linear_algebra_base.h.tmpl"
96#define _FIELD_TYPE ldl_field
98#define _COMPLEX hr_complex
99#include "TMPL/linear_algebra_base.h.tmpl"
101#define _FIELD_TYPE clover_term
103#define _COMPLEX hr_complex
104#include "TMPL/linear_algebra_reduction.h.tmpl"
105#include "TMPL/linear_algebra_base_operations.h.tmpl"
106#include "TMPL/linear_algebra_base.h.tmpl"
108#define _FIELD_TYPE clover_force
110#define _COMPLEX hr_complex
111#include "TMPL/linear_algebra_reduction.h.tmpl"
112#include "TMPL/linear_algebra_base_operations.h.tmpl"
113#include "TMPL/linear_algebra_base.h.tmpl"
115#define _FIELD_TYPE staple_field
117#define _COMPLEX hr_complex
118#include "TMPL/linear_algebra_reduction.h.tmpl"
119#include "TMPL/linear_algebra_base_operations.h.tmpl"
120#include "TMPL/linear_algebra_base.h.tmpl"
124#define template_error
126visible __forceinline__
void mul_add_assign(suNf_spinor *s1,
double rho, suNf_spinor *s2) {
127 _spinor_mul_add_assign_f(*s1, rho, *s2);
130visible __forceinline__
void mul_add_assign(suNf_spinor_flt *s1,
double rho, suNf_spinor_flt *s2) {
131 _spinor_mul_add_assign_f(*s1, rho, *s2);
134visible __forceinline__
void mul_add_assign(suNf *s1,
double rho, suNf *s2) {
135 _suNf_mul_add(*s1, 1.0, *s1, rho, *s2);
139visible __forceinline__
void mul_add_assign(suNfc *s1,
double rho, suNfc *s2) {
140 _suNfc_mul_add(*s1, 1.0, *s1, rho, *s2);
144visible __forceinline__
void mul_add_assign(suNg *s1,
double rho, suNg *s2) {
145 _suNg_mul_add(*s1, 1.0, *s1, rho, *s2);
148visible __forceinline__
void mul_add_assign(suNf_flt *s1,
double rho, suNf_flt *s2) {
149 _suNf_mul_add(*s1, 1.0, *s1, rho, *s2);
152visible __forceinline__
void mul_add_assign(suNg_flt *s1,
double rho, suNg_flt *s2) {
153 _suNg_mul_add(*s1, 1.0, *s1, rho, *s2);
156visible __forceinline__
void mul_add_assign(suNf_vector *s1,
double rho, suNf_vector *s2) {
157 _vector_mul_add_assign_f(*s1, rho, *s2);
160visible __forceinline__
void mul_add_assign(suNg_vector *s1,
double rho, suNg_vector *s2) {
161 _vector_mul_add_assign_g(*s1, rho, *s2);
164visible __forceinline__
void mul_add_assign(suNg_algebra_vector *s1,
double rho, suNg_algebra_vector *s2) {
165 _algebra_vector_mul_add_assign_g(*s1, rho, *s2);
168visible __forceinline__
void mul_add_assign(
double *s1,
double rho,
double *s2) {
169 (*s1) += rho * (*s2);
172visible __forceinline__
void mul_add_assign(
float *s1,
float rho,
float *s2) {
173 (*s1) += rho * (*s2);
176visible __forceinline__
void mulc_add_assign(suNf_spinor *s1, hr_complex rho, suNf_spinor *s2) {
177 _spinor_mulc_add_assign_f(*s1, rho, *s2);
180visible __forceinline__
void mulc_add_assign(suNf_spinor_flt *s1, hr_complex_flt rho, suNf_spinor_flt *s2) {
181 _spinor_mulc_add_assign_f(*s1, rho, *s2);
184visible __forceinline__
void mulc_add_assign(suNf *s1, hr_complex rho, suNf *s2) {
189 _suNf_mulc(tmp, rho, *s2);
190 _suNf_add_assign(*s1, tmp);
195visible __forceinline__
void mulc_add_assign(suNfc *s1, hr_complex rho, suNfc *s2) {
197 _suNfc_mulc(tmp, rho, *s2);
198 _suNfc_add_assign(*s1, tmp);
202visible __forceinline__
void mulc_add_assign(suNg *s1, hr_complex rho, suNg *s2) {
204 _suNg_mulc(tmp, rho, *s2);
205 _suNg_add_assign(*s1, tmp);
208visible __forceinline__
void mulc_add_assign(suNf_flt *s1, hr_complex_flt rho, suNf_flt *s2) {
213 _suNf_mulc(tmp, rho, *s2);
214 _suNf_add_assign(*s1, tmp);
218visible __forceinline__
void mulc_add_assign(suNg_flt *s1, hr_complex_flt rho, suNg_flt *s2) {
220 _suNg_mulc(tmp, rho, *s2);
221 _suNg_add_assign(*s1, tmp);
224visible __forceinline__
void mulc_add_assign(suNf_vector *s1, hr_complex rho, suNf_vector *s2) {
225 _vector_mulc_add_assign_f(*s1, rho, *s2);
228visible __forceinline__
void mulc_add_assign(suNg_vector *s1, hr_complex rho, suNg_vector *s2) {
229 _vector_mulc_add_assign_f(*s1, rho, *s2);
232visible __forceinline__
void mulc_add_assign(suNg_algebra_vector *s1, hr_complex rho, suNg_algebra_vector *s2) {
233 _algebra_vector_mul_g(*s1, creal(rho), *s2);
236visible __forceinline__
void mulc_add_assign(
double *s1, hr_complex rho,
double *s2) {
238 (*s1) += creal(rho) * (*s2);
241visible __forceinline__
void mulc_add_assign(
float *s1, hr_complex_flt rho,
float *s2) {
243 (*s1) += creal(rho) * (*s2);
246visible __forceinline__
void mul(suNf_spinor *s1,
double rho, suNf_spinor *s2) {
247 _spinor_mul_f(*s1, rho, *s2);
250visible __forceinline__
void mul(suNf_spinor_flt *s1,
double rho, suNf_spinor_flt *s2) {
251 _spinor_mul_f(*s1, rho, *s2);
254visible __forceinline__
void mul(suNf *s1,
double rho, suNf *s2) {
255 _suNf_mul(*s1, rho, *s2);
259visible __forceinline__
void mul(suNfc *s1,
double rho, suNfc *s2) {
260 _suNfc_mul(*s1, rho, *s2);
264visible __forceinline__
void mul(suNg *s1,
double rho, suNg *s2) {
265 _suNg_mul(*s1, rho, *s2);
268visible __forceinline__
void mul(suNf_flt *s1,
double rho, suNf_flt *s2) {
269 _suNf_mul(*s1, rho, *s2);
272visible __forceinline__
void mul(suNg_flt *s1,
double rho, suNg_flt *s2) {
273 _suNg_mul(*s1, rho, *s2);
276visible __forceinline__
void mul(suNf_vector *s1,
double rho, suNf_vector *s2) {
277 _vector_mul_f(*s1, rho, *s2);
280visible __forceinline__
void mul(suNg_vector *s1,
double rho, suNg_vector *s2) {
281 _vector_mul_g(*s1, rho, *s2);
284visible __forceinline__
void mul(suNg_algebra_vector *s1,
double rho, suNg_algebra_vector *s2) {
285 _algebra_vector_mul_g(*s1, rho, *s2);
288visible __forceinline__
void mul(
double *s1,
double rho,
double *s2) {
292visible __forceinline__
void mul(
float *s1,
float rho,
float *s2) {
296visible __forceinline__
void mulc(suNf_spinor *s1, hr_complex rho, suNf_spinor *s2) {
297 _spinor_mulc_f(*s1, rho, *s2);
300visible __forceinline__
void mulc(suNf_spinor_flt *s1, hr_complex_flt rho, suNf_spinor_flt *s2) {
301 _spinor_mulc_f(*s1, rho, *s2);
304visible __forceinline__
void mulc(suNf *s1, hr_complex rho, suNf *s2) {
308 _suNf_mulc(*s1, rho, *s2);
314visible __forceinline__
void mulc(suNfc *s1, hr_complex rho, suNfc *s2) {
315 _suNfc_mulc(*s1, rho, *s2);
319visible __forceinline__
void mulc(suNg *s1, hr_complex rho, suNg *s2) {
320 _suNg_mulc(*s1, rho, *s2);
323visible __forceinline__
void mulc(suNf_flt *s1, hr_complex_flt rho, suNf_flt *s2) {
327 _suNf_mulc(*s1, rho, *s2);
331visible __forceinline__
void mulc(suNg_flt *s1, hr_complex_flt rho, suNg_flt *s2) {
332 _suNg_mulc(*s1, rho, *s2);
335visible __forceinline__
void mulc(suNf_vector *s1, hr_complex rho, suNf_vector *s2) {
336 _vector_mulc_f(*s1, rho, *s2);
339visible __forceinline__
void mulc(suNg_vector *s1, hr_complex rho, suNg_vector *s2) {
340 _vector_mulc_g(*s1, rho, *s2);
343visible __forceinline__
void mulc(suNg_algebra_vector *s1, hr_complex rho, suNg_algebra_vector *s2) {
344 _algebra_vector_mul_g(*s1, creal(rho), *s2);
347visible __forceinline__
void mulc(
double *s1, hr_complex rho,
double *s2) {
351visible __forceinline__
void mulc(
float *s1, hr_complex rho,
float *s2) {
355visible __forceinline__
void add(suNf_spinor *r, suNf_spinor *s1, suNf_spinor *s2) {
356 _spinor_add_f(*r, *s1, *s2);
359visible __forceinline__
void add(suNf_spinor_flt *r, suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
360 _spinor_add_f(*r, *s1, *s2);
363visible __forceinline__
void add(suNf *r, suNf *s1, suNf *s2) {
364 _suNf_mul_add(*r, 1.0, *s1, 1.0, *s2);
368visible __forceinline__
void add(suNfc *r, suNfc *s1, suNfc *s2) {
369 _suNf_mul_add(*r, 1.0, *s1, 1.0, *s2);
373visible __forceinline__
void add(suNg *r, suNg *s1, suNg *s2) {
374 _suNg_mul_add(*r, 1.0, *s1, 1.0, *s2);
377visible __forceinline__
void add(suNf_flt *r, suNf_flt *s1, suNf_flt *s2) {
378 _suNf_mul_add(*r, 1.0, *s1, 1.0, *s2);
381visible __forceinline__
void add(suNg_flt *r, suNg_flt *s1, suNg_flt *s2) {
382 _suNg_mul_add(*r, 1.0, *s1, 1.0, *s2);
385visible __forceinline__
void add(suNf_vector *r, suNf_vector *s1, suNf_vector *s2) {
386 _vector_add_f(*r, *s1, *s2);
389visible __forceinline__
void add(suNg_vector *r, suNg_vector *s1, suNg_vector *s2) {
390 _vector_add_g(*r, *s1, *s2);
393visible __forceinline__
void add(suNg_algebra_vector *r, suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
394 _algebra_vector_zero_g(*r);
395 _algebra_vector_add_assign_g(*r, *s1);
396 _algebra_vector_add_assign_g(*r, *s2);
399visible __forceinline__
void add(
double *r,
double *s1,
double *s2) {
400 (*r) = (*s1) + (*s2);
403visible __forceinline__
void add(
float *r,
float *s1,
float *s2) {
404 (*r) = (*s1) + (*s2);
407visible __forceinline__
void sub(suNf_spinor *r, suNf_spinor *s1, suNf_spinor *s2) {
408 _spinor_sub_f(*r, *s1, *s2);
411visible __forceinline__
void sub(suNf_spinor_flt *r, suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
412 _spinor_sub_f(*r, *s1, *s2);
415visible __forceinline__
void sub(suNf *r, suNf *s1, suNf *s2) {
416 _suNf_mul_add(*r, 1.0, *s1, -1.0, *s2);
420visible __forceinline__
void sub(suNfc *r, suNfc *s1, suNfc *s2) {
421 _suNfc_mul_add(*r, 1.0, *s1, -1.0, *s2);
425visible __forceinline__
void sub(suNg *r, suNg *s1, suNg *s2) {
426 _suNg_mul_add(*r, 1.0, *s1, -1.0, *s2);
429visible __forceinline__
void sub(suNf_flt *r, suNf_flt *s1, suNf_flt *s2) {
430 _suNf_mul_add(*r, 1.0, *s1, -1.0, *s2);
433visible __forceinline__
void sub(suNg_flt *r, suNg_flt *s1, suNg_flt *s2) {
434 _suNg_mul_add(*r, 1.0, *s1, -1.0, *s2);
437visible __forceinline__
void sub(suNf_vector *r, suNf_vector *s1, suNf_vector *s2) {
438 _vector_sub_f(*r, *s1, *s2);
441visible __forceinline__
void sub(suNg_vector *r, suNg_vector *s1, suNg_vector *s2) {
442 _vector_sub_g(*r, *s1, *s2);
445visible __forceinline__
void sub(suNg_algebra_vector *r, suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
446 _algebra_vector_zero_g(*r);
447 _algebra_vector_add_assign_g(*r, *s1);
448 _algebra_vector_sub_assign_g(*r, *s2);
451visible __forceinline__
void sub(
double *r,
double *s1,
double *s2) {
452 (*r) = (*s1) - (*s2);
455visible __forceinline__
void sub(
float *r,
float *s1,
float *s2) {
456 (*r) = (*s1) - (*s2);
459visible __forceinline__
void sub_assign(suNf_spinor *s1, suNf_spinor *s2) {
460 _spinor_sub_assign_f(*s1, *s2);
463visible __forceinline__
void sub_assign(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
464 _spinor_sub_assign_f(*s1, *s2);
467visible __forceinline__
void sub_assign(suNf *s1, suNf *s2) {
468 _suNf_sub_assign(*s1, *s2);
472visible __forceinline__
void sub_assign(suNfc *s1, suNfc *s2) {
473 _suNfc_sub_assign(*s1, *s2);
477visible __forceinline__
void sub_assign(suNg *s1, suNg *s2) {
478 _suNg_sub_assign(*s1, *s2);
481visible __forceinline__
void sub_assign(suNf_flt *s1, suNf_flt *s2) {
482 _suNf_sub_assign(*s1, *s2);
485visible __forceinline__
void sub_assign(suNg_flt *s1, suNg_flt *s2) {
486 _suNg_sub_assign(*s1, *s2);
489visible __forceinline__
void sub_assign(suNf_vector *s1, suNf_vector *s2) {
490 _vector_sub_assign_f(*s1, *s2);
493visible __forceinline__
void sub_assign(suNg_vector *s1, suNg_vector *s2) {
494 _vector_sub_assign_g(*s1, *s2);
497visible __forceinline__
void sub_assign(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
498 _algebra_vector_sub_assign_g(*s1, *s2);
501visible __forceinline__
void sub_assign(
double *s1,
double *s2) {
505visible __forceinline__
void sub_assign(
float *s1,
float *s2) {
509visible __forceinline__
void minus(suNf_spinor *s1, suNf_spinor *s2) {
510 _spinor_minus_f(*s1, *s2);
513visible __forceinline__
void minus(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
514 _spinor_minus_f(*s1, *s2);
517visible __forceinline__
void minus(suNf *s1, suNf *s2) {
518 _suNf_minus(*s1, *s2);
522visible __forceinline__
void minus(suNfc *s1, suNfc *s2) {
523 _suNfc_minus(*s1, *s2);
527visible __forceinline__
void minus(suNg *s1, suNg *s2) {
528 _suNg_minus(*s1, *s2);
531visible __forceinline__
void minus(suNf_flt *s1, suNf_flt *s2) {
532 _suNf_minus(*s1, *s2);
535visible __forceinline__
void minus(suNg_flt *s1, suNg_flt *s2) {
536 _suNg_minus(*s1, *s2);
539visible __forceinline__
void minus(suNf_vector *s1, suNf_vector *s2) {
540 _vector_minus_f(*s1, *s2);
543visible __forceinline__
void minus(suNg_vector *s1, suNg_vector *s2) {
544 _vector_minus_g(*s1, *s2);
547visible __forceinline__
void minus(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
548 _algebra_vector_mul_g(*s1, -1.0, *s2);
551visible __forceinline__
void minus(
double *s1,
double *s2) {
555visible __forceinline__
void minus(
float *s1,
float *s2) {
559visible __forceinline__
void add_assign(suNf_spinor *s1, suNf_spinor *s2) {
560 _spinor_add_assign_f(*s1, *s2);
563visible __forceinline__
void add_assign(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
564 _spinor_add_assign_f(*s1, *s2);
567visible __forceinline__
void add_assign(suNf *s1, suNf *s2) {
568 _suNf_add_assign(*s1, *s2);
572visible __forceinline__
void add_assign(suNfc *s1, suNfc *s2) {
573 _suNfc_add_assign(*s1, *s2);
577visible __forceinline__
void add_assign(suNg *s1, suNg *s2) {
578 _suNg_add_assign(*s1, *s2);
581visible __forceinline__
void add_assign(suNf_flt *s1, suNf_flt *s2) {
582 _suNf_add_assign(*s1, *s2);
585visible __forceinline__
void add_assign(suNg_flt *s1, suNg_flt *s2) {
586 _suNg_add_assign(*s1, *s2);
589visible __forceinline__
void add_assign(suNf_vector *s1, suNf_vector *s2) {
590 _vector_add_assign_f(*s1, *s2);
593visible __forceinline__
void add_assign(suNg_vector *s1, suNg_vector *s2) {
594 _vector_add_assign_g(*s1, *s2);
597visible __forceinline__
void add_assign(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
598 _algebra_vector_add_assign_g(*s1, *s2);
601visible __forceinline__
void add_assign(
double *s1,
double *s2) {
605visible __forceinline__
void add_assign(
float *s1,
float *s2) {
609visible __forceinline__
double prod_re(suNf_spinor *s1, suNf_spinor *s2) {
611 _spinor_prod_re_f(k, *s1, *s2);
615visible __forceinline__
double prod_re(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
617 _spinor_prod_re_f(k, *s1, *s2);
621visible __forceinline__
double prod_re(suNf *s1, suNf *s2) {
624 _suNf_dagger_times_suNf(tmp, *s1, *s2);
625 _suNf_trace_re(res, tmp);
630visible __forceinline__
double prod_re(suNfc *s1, suNfc *s2) {
632 hr_complex res = 0.0;
633 _suNfc_dagger_times_suNfc(tmp, *s1, *s2);
634 _suNfc_trace(res, tmp);
639visible __forceinline__
double prod_re(suNg *s1, suNg *s2) {
642 _suNg_dagger_times_suNg(tmp, *s1, *s2);
643 _suNg_trace_re(res, tmp);
647visible __forceinline__
double prod_re(suNf_flt *s1, suNf_flt *s2) {
650 _suNf_dagger_times_suNf(tmp, *s1, *s2);
651 _suNf_trace_re(res, tmp);
655visible __forceinline__
double prod_re(suNg_flt *s1, suNg_flt *s2) {
658 _suNg_dagger_times_suNg(tmp, *s1, *s2);
659 _suNg_trace_re(res, tmp);
663visible __forceinline__
double prod_re(suNf_vector *s1, suNf_vector *s2) {
665 _vector_prod_re_f(prod, *s1, *s2);
669visible __forceinline__
double prod_re(suNg_vector *s1, suNg_vector *s2) {
671 _vector_prod_re_g(prod, *s1, *s2);
675visible __forceinline__
double prod_re(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
677 _algebra_vector_prod_g(prod, *s1, *s2);
681visible __forceinline__
double prod_re(
double *s1,
double *s2) {
682 return (*s1) * (*s2);
685visible __forceinline__
double prod_re(
float *s1,
float *s2) {
686 return (*s1) * (*s2);
689visible __forceinline__
double prod_im(suNf_spinor *s1, suNf_spinor *s2) {
691 _spinor_prod_im_f(k, *s1, *s2);
695visible __forceinline__
double prod_im(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
697 _spinor_prod_im_f(k, *s1, *s2);
701visible __forceinline__
double prod_im(suNf *s1, suNf *s2) {
707 _suNf_dagger_times_suNf(tmp, *s1, *s2);
708 _suNf_trace_im(res, tmp);
714visible __forceinline__
double prod_im(suNfc *s1, suNfc *s2) {
724visible __forceinline__
double prod_im(suNg *s1, suNg *s2) {
727 _suNg_dagger_times_suNg(tmp, *s1, *s2);
728 _suNg_trace_im(res, tmp);
732visible __forceinline__
double prod_im(suNf_flt *s1, suNf_flt *s2) {
738 _suNf_dagger_times_suNf(tmp, *s1, *s2);
739 _suNf_trace_im(res, tmp);
744visible __forceinline__
double prod_im(suNg_flt *s1, suNg_flt *s2) {
747 _suNg_dagger_times_suNg(tmp, *s1, *s2);
748 _suNg_trace_im(res, tmp);
752visible __forceinline__
double prod_im(suNf_vector *s1, suNf_vector *s2) {
754 _vector_prod_im_g(prod, *s1, *s2);
758visible __forceinline__
double prod_im(suNg_vector *s1, suNg_vector *s2) {
760 _vector_prod_im_g(prod, *s1, *s2);
764visible __forceinline__
double prod_im(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
768visible __forceinline__
double prod_im(
double *s1,
double *s2) {
772visible __forceinline__
double prod_im(
float *s1,
float *s2) {
776visible __forceinline__ hr_complex prod(suNf_spinor *s1, suNf_spinor *s2) {
778 _spinor_prod_f(z, *s1, *s2);
782visible __forceinline__ hr_complex prod(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
783 hr_complex_flt k = 0;
784 _spinor_prod_re_f(k, *s1, *s2);
785 hr_complex k1 = (double)creal(k) + I * (double)cimag(k);
789visible __forceinline__ hr_complex prod(suNf *s1, suNf *s2) {
792 _suNf_dagger_times_suNf(tmp, *s1, *s2);
793 _suNf_trace(res, tmp);
798visible __forceinline__ hr_complex prod(suNfc *s1, suNfc *s2) {
801 _suNfc_dagger_times_suNfc(tmp, *s1, *s2);
802 _suNfc_trace(res, tmp);
807visible __forceinline__ hr_complex prod(suNg *s1, suNg *s2) {
810 _suNg_dagger_times_suNg(tmp, *s1, *s2);
811 _suNg_trace(res, tmp);
815visible __forceinline__ hr_complex prod(suNf_flt *s1, suNf_flt *s2) {
818 _suNf_dagger_times_suNf(tmp, *s1, *s2);
819 _suNf_trace_re(res, tmp);
823visible __forceinline__ hr_complex prod(suNg_flt *s1, suNg_flt *s2) {
826 _suNg_dagger_times_suNg(tmp, *s1, *s2);
827 _suNg_trace_re(res, tmp);
831visible __forceinline__ hr_complex prod(suNf_vector *s1, suNf_vector *s2) {
833 _vector_prod_f(prod, *s1, *s2);
837visible __forceinline__ hr_complex prod(suNg_vector *s1, suNg_vector *s2) {
839 _vector_prod_g(prod, *s1, *s2);
843visible __forceinline__ hr_complex prod(suNg_algebra_vector *s1, suNg_algebra_vector *s2) {
845 _algebra_vector_prod_g(prod, *s1, *s2);
849visible __forceinline__ hr_complex prod(
double *s1,
double *s2) {
850 hr_complex prod = (*s1) * (*s2);
854visible __forceinline__ hr_complex prod(
float *s1,
float *s2) {
855 hr_complex prod = ((double)((*s1) * (*s2)));
859visible __forceinline__
double sqnorm(suNf_spinor *r) {
861 _spinor_prod_re_f(z, *r, *r);
865visible __forceinline__
double sqnorm(suNf_spinor_flt *r) {
867 _spinor_prod_re_f(z, *r, *r);
871visible __forceinline__
double sqnorm(suNf *r) {
873 _suNf_sqnorm(norm, *r);
878visible __forceinline__
double sqnorm(suNfc *r) {
880 _suNfc_sqnorm(norm, *r);
885visible __forceinline__
double sqnorm(suNg *r) {
887 _suNg_sqnorm(norm, *r);
891visible __forceinline__
double sqnorm(suNf_flt *r) {
893 _suNf_sqnorm(norm, *r);
897visible __forceinline__
double sqnorm(suNg_flt *r) {
899 _suNg_sqnorm(norm, *r);
903visible __forceinline__
double sqnorm(suNf_vector *r) {
905 _vector_prod_re_f(prod, *r, *r);
909visible __forceinline__
double sqnorm(suNg_vector *r) {
911 _vector_prod_re_g(prod, *r, *r);
915visible __forceinline__
double sqnorm(suNg_algebra_vector *r) {
917 _algebra_vector_sqnorm_g(sqnorm, *r);
921visible __forceinline__
double sqnorm(
double *r) {
925visible __forceinline__
double sqnorm(
float *r) {
926 return ((
double)((*r) * (*r)));
929visible __forceinline__
double max(suNf_spinor *r) {
930 double *a = (
double *)r;
932 for (
int i = 0; i <
sizeof(suNf_spinor) /
sizeof(*a); i++) {
933 double v = fabs(a[i]);
934 if (max < v) { max = v; }
939visible __forceinline__
double max(suNf_spinor_flt *r) {
940 double *a = (
double *)r;
942 for (
int i = 0; i <
sizeof(suNf_spinor_flt) /
sizeof(*a); i++) {
943 double v = fabs(a[i]);
944 if (max < v) { max = v; }
948visible __forceinline__
double max(suNf *r) {
949 double *a = (
double *)r;
951 for (
int i = 0; i <
sizeof(suNf) /
sizeof(*a); i++) {
952 double v = fabs(a[i]);
953 if (max < v) { max = v; }
958visible __forceinline__
double max(suNfc *r) {
959 double *a = (
double *)r;
961 for (
int i = 0; i <
sizeof(suNfc) /
sizeof(*a); i++) {
962 double v = fabs(a[i]);
963 if (max < v) { max = v; }
968visible __forceinline__
double max(suNg *r) {
969 double *a = (
double *)r;
971 for (
int i = 0; i <
sizeof(suNg) /
sizeof(*a); i++) {
972 double v = fabs(a[i]);
973 if (max < v) { max = v; }
977visible __forceinline__
double max(suNf_flt *r) {
978 double *a = (
double *)r;
980 for (
int i = 0; i <
sizeof(suNf_flt) /
sizeof(*a); i++) {
981 double v = fabs(a[i]);
982 if (max < v) { max = v; }
986visible __forceinline__
double max(suNg_flt *r) {
987 double *a = (
double *)r;
989 for (
int i = 0; i <
sizeof(suNg_flt) /
sizeof(*a); i++) {
990 double v = fabs(a[i]);
991 if (max < v) { max = v; }
995visible __forceinline__
double max(suNf_vector *r) {
996 double *a = (
double *)r;
998 for (
int i = 0; i <
sizeof(suNf_vector) /
sizeof(*a); i++) {
999 double v = fabs(a[i]);
1000 if (max < v) { max = v; }
1004visible __forceinline__
double max(suNg_vector *r) {
1005 double *a = (
double *)r;
1007 for (
int i = 0; i <
sizeof(suNg_vector) /
sizeof(*a); i++) {
1008 double v = fabs(a[i]);
1009 if (max < v) { max = v; }
1013visible __forceinline__
double max(suNg_algebra_vector *r) {
1014 double *a = (
double *)r;
1016 for (
int i = 0; i <
sizeof(suNg_algebra_vector) /
sizeof(*a); i++) {
1017 double v = fabs(a[i]);
1018 if (max < v) { max = v; }
1022visible __forceinline__
double max(
double *r) {
1025visible __forceinline__
double max(
float *r) {
1026 return (
double)(*r);
1029visible __forceinline__
double g5_prod_re(suNf_spinor *s1, suNf_spinor *s2) {
1031 _spinor_g5_prod_re_f(k, *s1, *s2);
1035visible __forceinline__
double g5_prod_re(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1037 _spinor_g5_prod_re_f(z, *s1, *s2);
1041visible __forceinline__
double g5_prod_im(suNf_spinor *s1, suNf_spinor *s2) {
1043 _spinor_g5_prod_im_f(z, *s1, *s2);
1047visible __forceinline__
double g5_prod_im(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1049 _spinor_g5_prod_im_f(z, *s1, *s2);
1053visible __forceinline__
void g5(suNf_spinor *s1, suNf_spinor *s2) {
1054 _spinor_g5_f(*s1, *s2);
1057visible __forceinline__
void g5(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1058 _spinor_g5_f(*s1, *s2);
1061visible __forceinline__
void g5_assign(suNf_spinor *s) {
1062 _spinor_g5_assign_f(*s);
1065visible __forceinline__
void g5_assign(suNf_spinor_flt *s) {
1066 _spinor_g5_assign_f(*s);
1069visible __forceinline__
void g0(suNf_spinor *s1, suNf_spinor *s2) {
1070 _spinor_g0_f(*s1, *s2);
1073visible __forceinline__
void g0(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1074 _spinor_g0_f(*s1, *s2);
1077visible __forceinline__
void g1(suNf_spinor *s1, suNf_spinor *s2) {
1078 _spinor_g1_f(*s1, *s2);
1081visible __forceinline__
void g1(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1082 _spinor_g1_f(*s1, *s2);
1085visible __forceinline__
void g2(suNf_spinor *s1, suNf_spinor *s2) {
1086 _spinor_g2_f(*s1, *s2);
1089visible __forceinline__
void g2(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1090 _spinor_g2_f(*s1, *s2);
1093visible __forceinline__
void g3(suNf_spinor *s1, suNf_spinor *s2) {
1094 _spinor_g3_f(*s1, *s2);
1097visible __forceinline__
void g3(suNf_spinor_flt *s1, suNf_spinor_flt *s2) {
1098 _spinor_g3_f(*s1, *s2);
1101visible __forceinline__
void lc(suNf_spinor *r,
double k1, suNf_spinor *s1,
double k2, suNf_spinor *s2) {
1102 _spinor_lc_f(*r, k1, *s1, k2, *s2);
1105visible __forceinline__
void lc(suNf_spinor_flt *r,
double k1, suNf_spinor_flt *s1,
double k2, suNf_spinor_flt *s2) {
1106 _spinor_lc_f(*r, k1, *s1, k2, *s2);
1109visible __forceinline__
void lc_add_assign(suNf_spinor *r,
double k1, suNf_spinor *s1,
double k2, suNf_spinor *s2) {
1110 _spinor_lc_add_assign_f(*r, k1, *s1, k2, *s2);
1113visible __forceinline__
void lc_add_assign(suNf_spinor_flt *r,
double k1, suNf_spinor_flt *s1,
double k2, suNf_spinor_flt *s2) {
1114 _spinor_lc_add_assign_f(*r, k1, *s1, k2, *s2);
1117visible __forceinline__
void clc(suNf_spinor *r, hr_complex k1, suNf_spinor *s1, hr_complex k2, suNf_spinor *s2) {
1118 _spinor_clc_f(*r, k1, *s1, k2, *s2);
1121visible __forceinline__
void clc(suNf_spinor_flt *r, hr_complex k1, suNf_spinor_flt *s1, hr_complex k2, suNf_spinor_flt *s2) {
1122 _spinor_clc_f(*r, k1, *s1, k2, *s2);
1125visible __forceinline__
void clc_add_assign(suNf_spinor *r, hr_complex k1, suNf_spinor *s1, hr_complex k2, suNf_spinor *s2) {
1126 _spinor_clc_add_assign_f(*r, k1, *s1, k2, *s2);
1129visible __forceinline__
void clc_add_assign(suNf_spinor_flt *r, hr_complex k1, suNf_spinor_flt *s1, hr_complex k2,
1130 suNf_spinor_flt *s2) {
1131 _spinor_clc_add_assign_f(*r, k1, *s1, k2, *s2);
1134visible __forceinline__
void zero(suNf_spinor *s) {
1138visible __forceinline__
void zero(suNf_spinor_flt *s) {
1143visible __forceinline__
void zero(suNfc *u) {
1148visible __forceinline__
void zero(suNg *u) {
1152visible __forceinline__
void zero(suNf *u) {
1156visible __forceinline__
void zero(suNf_flt *u) {
1160visible __forceinline__
void zero(suNg_flt *u) {
1164visible __forceinline__
void zero(suNf_vector *v) {
1168visible __forceinline__
void zero(suNg_vector *v) {
1172visible __forceinline__
void zero(suNg_algebra_vector *v) {
1173 _algebra_vector_zero_g(*v);
1176visible __forceinline__
void zero(
double *d) {
1180visible __forceinline__
void zero(
float *f) {
1184visible __forceinline__
void zero(ldl_t *t) {
1186 memset(t, 0,
sizeof(ldl_t));
1189#undef _DECLARE_LINA_HEADER