7 template <
typename Float>
9 for (
int i=0; i<N; i++) y[i] = a*x[i] + b*y[i];
17 axpby((
float)a, (
float*)x.
V(), (float)b, (
float*)y.
V(), x.
Length());
36 axpby((
float)a, (
float*)x.
V(), 1.0f, (
float*)y.
V(), x.
Length());
46 axpby(1.0f, (
float*)x.
V(), (float)a, (
float*)y.
V(), x.
Length());
64 axpby(0.0f, (
float*)x.
V(), (float)a, (
float*)x.
V(), x.
Length());
69 template <
typename Float>
70 void caxpby(
const std::complex<Float> &a,
const std::complex<Float> *
x,
71 const std::complex<Float> &b, std::complex<Float> *y,
int N) {
73 for (
int i=0; i<N; i++) {
74 y[i] = a*x[i] + b*y[i];
86 caxpby((std::complex<float>)a, (std::complex<float>*)x.
V(), std::complex<float>(1.0),
87 (std::complex<float>*)y.
V(), x.
Length()/2);
98 caxpby((std::complex<float>)a, (std::complex<float>*)x.
V(), (std::complex<float>)b,
99 (std::complex<float>*)y.
V(), x.
Length()/2);
104 template <
typename Float>
105 void caxpbypcz(
const std::complex<Float> &a,
const std::complex<Float> *
x,
106 const std::complex<Float> &b,
const std::complex<Float> *y,
107 const std::complex<Float> &c, std::complex<Float> *z,
int N) {
109 for (
int i=0; i<N; i++) {
110 z[i] = a*x[i] + b*y[i] + c*z[i];
123 caxpbypcz(std::complex<float>(1, 0), (std::complex<float>*)x.
V(), (std::complex<float>)a, (std::complex<float>*)y.
V(),
124 (std::complex<float>)b, (std::complex<float>*)z.
V(), x.
Length()/2);
150 caxpbypcz((std::complex<float>)a, (std::complex<float>*)x.
V(),
151 (std::complex<float>)b, (std::complex<float>*)y.
V(),
152 (std::complex<float>)(1.0f), (std::complex<float>*)z.
V(), x.
Length()/2);
159 template <
typename Float>
162 for (
int i=0; i<N; i++) norm2 += a[i]*a[i];
184 template <
typename Float>
187 for (
int i=0; i<N; i++) dot += a[i]*b[i];
210 template <
typename Float>
213 for (
int i=0; i<N; i++) dot +=
conj(a[i])*b[i];
240 return make_double3(real(dot), imag(dot), norm);
246 return make_double3(real(dot), imag(dot), norm);
309 template <
typename Float>
312 double3 sum = make_double3(0.0, 0.0, 0.0);
313 for (
int i = 0; i<volume; i++) {
317 for (
int j=0; j<Nint; j++) {
325 sum.z += (x2 > 0.0) ? (r2 /
x2) : 1.0;
334 rtn = HeavyQuarkResidualNorm<double>((
const double*)(x.
V()), (
const double*)(r.
V()),
337 rtn = HeavyQuarkResidualNorm<float>((
const float*)(x.
V()), (
const float*)(r.
V()),