Skip to content

Commit de81c7e

Browse files
author
Mathieu Taillefumier
committed
Revert changes
1 parent 48d35dd commit de81c7e

File tree

1 file changed

+47
-100
lines changed

1 file changed

+47
-100
lines changed

src/lib/solver/gmres_precon.c

Lines changed: 47 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
#ifdef HAVE_CONFIG_H
4545
#include <tmlqcd_config.h>
4646
#endif
47-
#include <complex.h>
4847
#include <math.h>
4948
#include <stdio.h>
5049
#include <stdlib.h>
@@ -76,6 +75,7 @@ static double *s;
7675

7776
int gmres_precon(spinor *const P, spinor *const Q, const int m, const int max_restarts,
7877
const double eps_sq, const int rel_prec, const int N, matrix_mult f) {
78+
int restart, i, j, k;
7979
double beta, eps, norm;
8080
complex tmp1, tmp2;
8181
spinor **solver_field = NULL;
@@ -93,36 +93,36 @@ int gmres_precon(spinor *const P, spinor *const Q, const int m, const int max_re
9393

9494
/* assign(solver_field[1], P, N); */
9595
zero_spinor_field(solver_field[1], N);
96-
for (int restart = 0; restart < max_restarts; restart++) {
96+
for (restart = 0; restart < max_restarts; restart++) {
9797
/* r_0=Q-AP (b=Q, x+0=P) */
9898
f(solver_field[1], solver_field[1]);
9999
diff(solver_field[1], Q, solver_field[1], N);
100100
/* v_0=r_0/||r_0|| */
101-
alpha[0] = sqrt(square_norm(solver_field[1], N, 1)) + 0.0I;
101+
alpha[0].re = sqrt(square_norm(solver_field[1], N, 1));
102102

103103
/* if(alpha[0].re == 0.){ */
104104
/* assign(P, solver_field[1], N); */
105105
/* return(restart*m); */
106106
/* } */
107107

108-
if (creal(alpha[0]) != 0.) {
109-
mul_r(V[0], 1. / creal(alpha[0]), solver_field[1], N);
108+
if (alpha[0].re != 0.) {
109+
mul_r(V[0], 1. / alpha[0].re, solver_field[1], N);
110110

111-
for (int j = 0; j < m; j++) {
111+
for (j = 0; j < m; j++) {
112112
/* solver_field[1]=A*v_j */
113113

114114
f(solver_field[1], V[j]);
115115

116116
/* Set h_ij and omega_j */
117117
/* solver_field[0] <- omega_j */
118118
assign(solver_field[0], solver_field[1], N);
119-
for (int i = 0; i <= j; i++) {
119+
for (i = 0; i <= j; i++) {
120120
H[i][j] = scalar_prod(V[i], solver_field[0], N, 1);
121121
assign_diff_mul(solver_field[0], V[i], H[i][j], N);
122122
}
123123

124124
_complex_set(H[j + 1][j], sqrt(square_norm(solver_field[0], N, 1)), 0.);
125-
for (int i = 0; i < j; i++) {
125+
for (i = 0; i < j; i++) {
126126
tmp1 = H[i][j];
127127
tmp2 = H[i + 1][j];
128128
_mult_real(H[i][j], tmp2, s[i]);
@@ -133,7 +133,7 @@ int gmres_precon(spinor *const P, spinor *const Q, const int m, const int max_re
133133

134134
/* Set beta, s, c, alpha[j],[j+1] */
135135
beta = sqrt(_complex_square_norm(H[j][j]) + _complex_square_norm(H[j + 1][j]));
136-
s[j] = creal(H[j + 1][j]) / beta;
136+
s[j] = H[j + 1][j].re / beta;
137137
_mult_real(c[j], H[j][j], 1. / beta);
138138
_complex_set(H[j][j], beta, 0.);
139139
_mult_real(alpha[j + 1], alpha[j], s[j]);
@@ -146,19 +146,19 @@ int gmres_precon(spinor *const P, spinor *const Q, const int m, const int max_re
146146
alpha[j + 1].re * alpha[j + 1].re);
147147
fflush(stdout);
148148
}
149-
if (((creal(alpha[j + 1]) <= eps) && (rel_prec == 0)) ||
150-
(creal((alpha[j + 1]) <= eps * norm) && (rel_prec == 1))) {
151-
_mult_real(alpha[j], alpha[j], 1. / creal(H[j][j]));
149+
if (((alpha[j + 1].re <= eps) && (rel_prec == 0)) ||
150+
((alpha[j + 1].re <= eps * norm) && (rel_prec == 1))) {
151+
_mult_real(alpha[j], alpha[j], 1. / H[j][j].re);
152152
assign_add_mul(solver_field[1], V[j], alpha[j], N);
153-
for (int i = j - 1; i >= 0; i--) {
154-
for (int k = i + 1; k <= j; k++) {
153+
for (i = j - 1; i >= 0; i--) {
154+
for (k = i + 1; k <= j; k++) {
155155
_mult_assign_complex(tmp1, H[i][k], alpha[k]);
156156
_diff_complex(alpha[i], tmp1);
157157
}
158-
_mult_real(alpha[i], alpha[i], 1. / creal(H[i][i]));
158+
_mult_real(alpha[i], alpha[i], 1. / H[i][i].re);
159159
assign_add_mul(solver_field[1], V[i], alpha[i], N);
160160
}
161-
for (int i = 0; i < m; i++) {
161+
for (i = 0; i < m; i++) {
162162
alpha[i].im = 0.;
163163
}
164164
assign(P, solver_field[1], N);
@@ -168,24 +168,24 @@ int gmres_precon(spinor *const P, spinor *const Q, const int m, const int max_re
168168
/* if not */
169169
else {
170170
if (j != m - 1) {
171-
mul_r(V[(j + 1)], 1. / creal(H[j + 1][j]), solver_field[0], N);
171+
mul_r(V[(j + 1)], 1. / H[j + 1][j].re, solver_field[0], N);
172172
}
173173
}
174174
}
175175

176176
j = m - 1;
177177
/* prepare for restart */
178-
_mult_real(alpha[j], alpha[j], 1. / creal(H[j][j]));
178+
_mult_real(alpha[j], alpha[j], 1. / H[j][j].re);
179179
assign_add_mul(solver_field[1], V[j], alpha[j], N);
180-
for (int i = j - 1; i >= 0; i--) {
181-
for (int k = i + 1; k <= j; k++) {
180+
for (i = j - 1; i >= 0; i--) {
181+
for (k = i + 1; k <= j; k++) {
182182
_mult_assign_complex(tmp1, H[i][k], alpha[k]);
183183
_diff_complex(alpha[i], tmp1);
184184
}
185-
_mult_real(alpha[i], alpha[i], 1. / creal(H[i][i]));
185+
_mult_real(alpha[i], alpha[i], 1. / H[i][i].re);
186186
assign_add_mul(solver_field[1], V[i], alpha[i], N);
187187
}
188-
for (int i = 0; i < m; i++) {
188+
for (i = 0; i < m; i++) {
189189
alpha[i].im = 0.;
190190
}
191191
}
@@ -234,7 +234,6 @@ static void init_pgmres(const int _M, const int _V) {
234234
}
235235

236236
complex scalar_prod_nocom(spinor *const S, spinor *const R, const int N) {
237-
#ifdef __STDC_NO_COMPLEX__
238237
int ix;
239238
static double ks, kc, ds, tr, ts, tt;
240239
spinor *s, *r;
@@ -305,91 +304,39 @@ complex scalar_prod_nocom(spinor *const S, spinor *const R, const int N) {
305304

306305
c.im = kc;
307306
return (c);
308-
#else
309-
double complex ks, kc;
310-
311-
ks = 0.0 + 0.0I;
312-
kc = 0.0 + 0.0I;
313-
for (int ix = 0; ix < N; ix++) {
314-
spinor *s = (spinor *)S + ix;
315-
spinor *r = (spinor *)R + ix;
316-
double complex ds = (*r).s0.c0 * (*r).s0.c0 +
317-
(*r).s0.c1 * (*r).s0.c1 +
318-
(*r).s0.c2 * (*r).s0.c2 +
319-
(*r).s1.c0 * (*r).s1.c0 +
320-
(*r).s1.c1 * (*r).s1.c1 +
321-
(*r).s1.c2 * (*r).s1.c2 +
322-
(*r).s2.c0 * (*r).s2.c0 +
323-
(*r).s2.c1 * (*r).s2.c1 +
324-
(*r).s2.c2 * (*r).s2.c2 +
325-
(*r).s3.c0 * (*r).s3.c0 +
326-
(*r).s3.c1 * (*r).s3.c1 +
327-
(*r).s3.c2 * (*r).s3.c2;
328-
329-
double complex tr = ds + kc;
330-
double complex ts = tr + ks;
331-
double complex tt = ts - ks;
332-
ks = ts;
333-
kc = tr - tt;
334-
}
335-
return ks + kc;
336-
#endif
337307
}
338308

339-
340309
double square_norm_nocom(spinor *const P, const int N) {
341-
double ks = 0.0;
342-
double kc = 0.0;
310+
int ix;
311+
static double ks, kc, ds, tr, ts, tt;
312+
spinor *s;
313+
314+
ks = 0.0;
315+
kc = 0.0;
343316

344-
#ifdef __STDC_NO_COMPLEX__
345317
/* Change due to even-odd preconditioning : VOLUME to VOLUME/2 */
346-
for (int ix = 0; ix < N; ix++) {
347-
spinor *s = P + ix;
348-
349-
double ds = (*s).s0.c0.re * (*s).s0.c0.re + (*s).s0.c0.im * (*s).s0.c0.im +
350-
(*s).s0.c1.re * (*s).s0.c1.re + (*s).s0.c1.im * (*s).s0.c1.im +
351-
(*s).s0.c2.re * (*s).s0.c2.re + (*s).s0.c2.im * (*s).s0.c2.im +
352-
(*s).s1.c0.re * (*s).s1.c0.re + (*s).s1.c0.im * (*s).s1.c0.im +
353-
(*s).s1.c1.re * (*s).s1.c1.re + (*s).s1.c1.im * (*s).s1.c1.im +
354-
(*s).s1.c2.re * (*s).s1.c2.re + (*s).s1.c2.im * (*s).s1.c2.im +
355-
(*s).s2.c0.re * (*s).s2.c0.re + (*s).s2.c0.im * (*s).s2.c0.im +
356-
(*s).s2.c1.re * (*s).s2.c1.re + (*s).s2.c1.im * (*s).s2.c1.im +
357-
(*s).s2.c2.re * (*s).s2.c2.re + (*s).s2.c2.im * (*s).s2.c2.im +
358-
(*s).s3.c0.re * (*s).s3.c0.re + (*s).s3.c0.im * (*s).s3.c0.im +
359-
(*s).s3.c1.re * (*s).s3.c1.re + (*s).s3.c1.im * (*s).s3.c1.im +
360-
(*s).s3.c2.re * (*s).s3.c2.re + (*s).s3.c2.im * (*s).s3.c2.im;
361-
362-
double tr = ds + kc;
363-
double ts = tr + ks;
364-
double tt = ts - ks;
318+
for (ix = 0; ix < N; ix++) {
319+
s = P + ix;
320+
321+
ds = (*s).s0.c0.re * (*s).s0.c0.re + (*s).s0.c0.im * (*s).s0.c0.im +
322+
(*s).s0.c1.re * (*s).s0.c1.re + (*s).s0.c1.im * (*s).s0.c1.im +
323+
(*s).s0.c2.re * (*s).s0.c2.re + (*s).s0.c2.im * (*s).s0.c2.im +
324+
(*s).s1.c0.re * (*s).s1.c0.re + (*s).s1.c0.im * (*s).s1.c0.im +
325+
(*s).s1.c1.re * (*s).s1.c1.re + (*s).s1.c1.im * (*s).s1.c1.im +
326+
(*s).s1.c2.re * (*s).s1.c2.re + (*s).s1.c2.im * (*s).s1.c2.im +
327+
(*s).s2.c0.re * (*s).s2.c0.re + (*s).s2.c0.im * (*s).s2.c0.im +
328+
(*s).s2.c1.re * (*s).s2.c1.re + (*s).s2.c1.im * (*s).s2.c1.im +
329+
(*s).s2.c2.re * (*s).s2.c2.re + (*s).s2.c2.im * (*s).s2.c2.im +
330+
(*s).s3.c0.re * (*s).s3.c0.re + (*s).s3.c0.im * (*s).s3.c0.im +
331+
(*s).s3.c1.re * (*s).s3.c1.re + (*s).s3.c1.im * (*s).s3.c1.im +
332+
(*s).s3.c2.re * (*s).s3.c2.re + (*s).s3.c2.im * (*s).s3.c2.im;
333+
334+
tr = ds + kc;
335+
ts = tr + ks;
336+
tt = ts - ks;
365337
ks = ts;
366338
kc = tr - tt;
367339
}
368340
kc = ks + kc;
369-
#else
370-
/* Change due to even-odd preconditioning : VOLUME to VOLUME/2 */
371-
for (int ix = 0; ix < N; ix++) {
372-
spinor *s = P + ix;
373-
double complex ds = (*s).s0.c0 * conj((*s).s0.c0) +
374-
(*s).s0.c1 * conj((*s).s0.c1) +
375-
(*s).s0.c2 * conj((*s).s0.c2) +
376-
(*s).s1.c0 * conj((*s).s1.c0) +
377-
(*s).s1.c1 * conj((*s).s1.c1) +
378-
(*s).s1.c2 * conj((*s).s1.c2) +
379-
(*s).s2.c0 * conj((*s).s2.c0) +
380-
(*s).s2.c1 * conj((*s).s2.c1) +
381-
(*s).s2.c2 * conj((*s).s2.c2) +
382-
(*s).s3.c0 * conj((*s).s3.c0) +
383-
(*s).s3.c1 * conj((*s).s3.c1) +
384-
(*s).s3.c2 * conj((*s).s3.c2);
385-
386-
double tr = creal(ds) + kc;
387-
double ts = tr + ks;
388-
double tt = ts - ks;
389-
ks = ts;
390-
kc = tr - tt;
391-
}
392-
#endif
393-
394341
return kc;
395342
}

0 commit comments

Comments
 (0)