Skip to content
Snippets Groups Projects
Commit edab03a8 authored by Tom Fischer's avatar Tom Fischer
Browse files

CG method works correctly again

parent 1709256a
No related branches found
No related tags found
No related merge requests found
...@@ -80,34 +80,32 @@ unsigned CGParallel(CRSMatrix<double,unsigned> const * mat, double const * const ...@@ -80,34 +80,32 @@ unsigned CGParallel(CRSMatrix<double,unsigned> const * mat, double const * const
} }
mat->precondApply(rhat); mat->precondApply(rhat);
#pragma omp parallel // rho = r * r^;
{ rho = scpr(r, rhat, N);
// rho = r * r^;
rho = scpr(r, rhat, N); if (l > 1) {
double beta = rho / rho1;
if (l > 1) { // p = r^ + beta * p
double beta = rho / rho1; #pragma omp parallel for
// p = r^ + beta * p for (k = 0; k < N; k++) {
#pragma omp parallel for p[k] = rhat[k] + beta * p[k];
for (k = 0; k < N; k++) { }
p[k] = rhat[k] + beta * p[k]; } else {
}
} else {
// blas::copy(N, rhat, p); // blas::copy(N, rhat, p);
#pragma omp parallel for #pragma omp parallel for
for (k = 0; k < N; k++) { for (k = 0; k < N; k++) {
p[k] = rhat[k]; p[k] = rhat[k];
}
} }
} }
// q = Ap // q = Ap
mat->amux(D_ONE, p, q); mat->amux(D_ONE, p, q);
// alpha = rho / p*q
double alpha = rho / scpr(p, q, N);
#pragma omp parallel #pragma omp parallel
{ {
// alpha = rho / p*q
double alpha = rho / scpr(p, q, N);
// x += alpha * p // x += alpha * p
#pragma omp for nowait #pragma omp for nowait
for (k = 0; k < N; k++) { for (k = 0; k < N; k++) {
...@@ -121,10 +119,10 @@ unsigned CGParallel(CRSMatrix<double,unsigned> const * mat, double const * const ...@@ -121,10 +119,10 @@ unsigned CGParallel(CRSMatrix<double,unsigned> const * mat, double const * const
} }
#pragma omp barrier #pragma omp barrier
resid = sqrt(scpr(r, r, N));
} // end #pragma omp parallel } // end #pragma omp parallel
resid = sqrt(scpr(r, r, N));
if (resid <= eps * nrmb) { if (resid <= eps * nrmb) {
eps = resid / nrmb; eps = resid / nrmb;
nsteps = l; nsteps = l;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment