1 /* { dg-do compile } */
2
3 #include <stdio.h>
4 extern float average (float, float, float);
5 void
a12(float * x,float * xold,int n,float tol)6 a12 (float *x, float *xold, int n, float tol)
7 {
8 int c, i, toobig;
9 float error, y;
10 c = 0;
11 #pragma omp parallel
12 {
13 do
14 {
15 #pragma omp for private(i)
16 for (i = 1; i < n - 1; ++i)
17 {
18 xold[i] = x[i];
19 }
20 #pragma omp single
21 {
22 toobig = 0;
23 }
24 #pragma omp for private(i,y,error) reduction(+:toobig)
25 for (i = 1; i < n - 1; ++i)
26 {
27 y = x[i];
28 x[i] = average (xold[i - 1], x[i], xold[i + 1]);
29 error = y - x[i];
30 if (error > tol || error < -tol)
31 ++toobig;
32 }
33 #pragma omp master
34 {
35 ++c;
36 printf ("iteration %d, toobig=%d\n", c, toobig);
37 }
38 }
39 while (toobig > 0);
40 }
41 }
42