QDP++
generic_blas_vaxmby3_norm.h
Go to the documentation of this file.
1// $Id: generic_blas_vaxmby3_norm.h,v 1.2 2007-06-10 14:32:10 edwards Exp $
2
7
8#ifndef QDP_GENERIC_BLAS_VAXMBY3_NORM
9#define QDP_GENERIC_BLAS_VAXMBY3_NORM
10
11namespace QDP {
12
13// (Vector) Out = Scalar(*ap) * (Vector) xp - (Scalar)(*bp) * (Vector)yp
14// *norm = local sumsq(Out);
15
16inline
17void vaxmby3_norm(REAL *Out,REAL *ap,REAL *xp, REAL *bp, REAL *yp,
18 int n_3vec, REAL *norm)
19{
20 double a;
21 double b;
22 double x0r;
23 double x0i;
24
25 double x1r;
26 double x1i;
27
28 double x2r;
29 double x2i;
30
31 double y0r;
32 double y0i;
33
34 double y1r;
35 double y1i;
36
37 double y2r;
38 double y2i;
39
40 double z0r;
41 double z0i;
42
43 double z1r;
44 double z1i;
45
46 double z2r;
47 double z2i;
48 double norm_out=0;
49
50 a = *ap;
51 b = *bp;
52 int index_x = 0;
53 int index_y = 0;
54 int index_z = 0;
55
56 int counter;
57
58 for( counter = 0; counter < n_3vec; counter++) {
59 x0r = (double)xp[index_x++];
60 y0r = (double)yp[index_y++];
61 z0r = a*x0r;
62 z0r = z0r - b*y0r;
63 Out[index_z++] =(REAL) z0r;
64 norm_out += z0r*z0r;
65
66 x0i = (double)xp[index_x++];
67 y0i = (double)yp[index_y++];
68 z0i = a*x0i;
69 z0i = z0i - b*y0i;
70 Out[index_z++] =(REAL) z0i;
71 norm_out += z0i*z0i;
72
73 x1r = (double)xp[index_x++];
74 y1r = (double)yp[index_y++];
75 z1r = a*x1r;
76 z1r = z1r - b*y1r;
77 Out[index_z++] = (REAL)z1r;
78 norm_out += z1r * z1r;
79
80 x1i = (double)xp[index_x++];
81 y1i = (double)yp[index_y++];
82 z1i = a*x1i;
83 z1i = z1i - b*y1i;
84 Out[index_z++] = (REAL)z1i;
85 norm_out += z1i*z1i;
86
87 x2r = (double)xp[index_x++];
88 y2r = (double)yp[index_y++];
89 z2r = a*x2r;
90 z2r = z2r - b*y2r;
91 Out[index_z++] = (REAL)z2r;
92 norm_out += z2r*z2r;
93
94 x2i = (double)xp[index_x++];
95 y2i = (double)yp[index_y++];
96 z2i = a*x2i;
97 z2i = z2i - b*y2i;
98 Out[index_z++] = (REAL)z2i;
99 norm_out += z2i*z2i;
100 }
101 *norm=(REAL)norm_out;
102}
103
104} // namespace QDP;
105
106#endif // guard
REAL32 REAL
Yet another random number generator.
void vaxmby3_norm(REAL *Out, REAL *ap, REAL *xp, REAL *bp, REAL *yp, int n_3vec, REAL *norm)