Newer
Older
}
/* solve Hy = w.
H is now upper-triangular, do back-substitution */
for ( i = j - 1; i >= 0; i-- )
{
temp = w[i];
for ( k = j - 1; k > i; k-- )
temp -= workspace->h[i][k] * workspace->y[k];
workspace->y[i] = temp / workspace->h[i][i];
}
for ( i = j - 1; i >= 0; i-- )
Vector_Add( x, workspace->y[i], z[i], N );
/* stopping condition */
Kurt A. O'Hearn
committed
if ( FABS( w[j] ) / bnorm <= tol )
// Sparse_MatVec( system, H, x, workspace->b_prm );
// for( i = 0; i < N; ++i )
// workspace->b_prm[i] *= workspace->Hdia_inv[i];
// fprintf( fout, "\n%10s%15s%15s\n", "b_prc", "b_prm", "x" );
// for( i = 0; i < N; ++i )
// fprintf( fout, "%10.5f%15.12f%15.12f\n",
// workspace->b_prc[i], workspace->b_prm[i], x[i] );
fprintf( fout, "GMRES outer:%d inner:%d iters, |rel residual| = %15.10f\n",
Kurt A. O'Hearn
committed
itr, j, FABS( workspace->g[j] ) / bnorm );
if ( itr >= MAX_ITR )
{
fprintf( stderr, "GMRES convergence failed\n" );
return FAILURE;