16 #include "LinearSolver.H" 17 #include "parstream.H" 19 #include "NamespaceHeader.H" 43 virtual void define(LinearOp<T>* a_op,
bool a_homogeneous);
46 virtual void solve(T& a_phi,
const T& a_rhs);
160 CH_TIMERS(
"CGSolver::solve");
162 CH_TIMER(
"CGSolver::solve::Initialize",timeInitialize);
163 CH_TIMER(
"CGSolver::solve::MainLoop",timeMainLoop);
164 CH_TIMER(
"CGSolver::solve::Cleanup",timeCleanup);
166 CH_START(timeInitialize);
170 m_op->create(r,a_rhs);
171 m_op->create(z,a_phi);
172 m_op->create(p,a_phi);
173 m_op->create(Lp,a_rhs);
175 CH_assert(
m_op != NULL);
181 Real norm = initial_norm;
184 pout() <<
" CG:: initial Residual norm = " 185 << initial_norm <<
"\n";
198 CH_STOP(timeInitialize);
200 CH_START(timeMainLoop);
205 m_op->applyOp(Lp, p,
true);
206 Real rdotz =
m_op->dotProduct(r, z);
207 Real alpha = rdotz /
m_op->dotProduct(p , Lp);
208 m_op->incr(a_phi, p , alpha);
209 m_op->incr(r, Lp , -alpha);
210 Real norm_old = norm;
214 pout() <<
" CG:: iteration = " << iter
215 <<
", error norm = " << norm
216 <<
", rate = " << norm_old/norm <<
"\n";
220 if(norm <
m_eps*initial_norm)
224 if (norm_old <
m_hang * norm)
230 Real beta =
m_op->dotProduct(r, z) / rdotz;
232 m_op->incr(p, z , 1.0);
235 CH_STOP(timeMainLoop);
237 CH_START(timeCleanup);
241 pout() <<
" CG:: " << iter
242 <<
" iterations, final Residual norm = " 252 CH_STOP(timeCleanup);
263 #include "NamespaceFooter.H" Real m_reps
Definition: CGSolver.H:88
Definition: CGSolver.H:26
Real m_convergenceMetric
Definition: CGSolver.H:95
virtual void solve(T &a_phi, const T &a_rhs)
solve the equation.
Definition: CGSolver.H:158
virtual void setConvergenceMetrics(Real a_metric, Real a_tolerance)
Definition: CGSolver.H:256
bool m_homogeneous
Definition: CGSolver.H:57
int m_normType
Definition: CGSolver.H:130
int m_numRestarts
Definition: CGSolver.H:123
LinearOp< T > * m_op
Definition: CGSolver.H:63
CGSolver()
Definition: CGSolver.H:139
Real m_small
Definition: CGSolver.H:117
Real m_eps
Definition: CGSolver.H:82
int m_verbosity
Definition: CGSolver.H:76
int m_exitStatus
Definition: CGSolver.H:111
virtual ~CGSolver()
Definition: CGSolver.H:145
int m_imax
Definition: CGSolver.H:69
Real m_hang
Definition: CGSolver.H:101
virtual void setHomogeneous(bool a_homogeneous)
Definition: CGSolver.H:34
virtual void define(LinearOp< T > *a_op, bool a_homogeneous)
Definition: CGSolver.H:151