Convergence criterion which looks at the weighted absolute value of the residual. More...
#include <weightedresidreductioncriterion.hh>
Public Member Functions | |
WeightedResidualReductionCriterion (const CollectiveCommunication &comm) | |
WeightedResidualReductionCriterion (const CollectiveCommunication &comm, const Vector &residWeights, Scalar residualReductionTolerance, Scalar fixPointTolerance, Scalar absResidualTolerance=0.0, Scalar maxError=0.0) | |
void | setResidualWeight (const Vector &residWeightVec) |
Sets the relative weight of each row of the residual. More... | |
Scalar | residualWeight (size_t outerIdx, unsigned innerIdx) const |
Return the relative weight of a row of the residual. More... | |
void | setResidualReductionTolerance (Scalar tol) |
Sets the residual reduction tolerance. | |
Scalar | residualReductionTolerance () const |
Returns the tolerance of the residual reduction of the solution. | |
void | setResidualTolerance (Scalar tol) |
Sets the maximum absolute tolerated residual. | |
Scalar | absResidualTolerance () const |
Returns the maximum absolute tolerated residual. | |
Scalar | residualAccuracy () const |
Returns the reduction of the weighted maximum of the residual compared to the initial solution. | |
void | setFixPointTolerance (Scalar tol) |
Sets the fix-point tolerance. | |
Scalar | fixPointTolerance () const |
Returns the maximum tolerated difference between two iterations to be met before a solution is considered to be converged. | |
Scalar | fixPointAccuracy () const |
Returns the weighted maximum of the difference between the last two iterative solutions. | |
void | setInitial (const Vector &curSol, const Vector &curResid) |
Set the initial solution of the linear system of equations. More... | |
void | update (const Vector &curSol, const Vector &curResid) |
bool | converged () const |
Returns true if and only if the convergence criterion is met. More... | |
bool | failed () const |
Returns true if the convergence criterion cannot be met anymore because the solver has broken down. More... | |
Scalar | accuracy () const |
Returns the accuracy of the solution at the last update. More... | |
void | printInitial (std::ostream &os=std::cout) const |
Prints the initial information about the convergence behaviour. More... | |
void | print (Scalar iter, std::ostream &os=std::cout) const |
Prints the information about the convergence behaviour for the current iteration. More... | |
![]() | |
virtual | ~ConvergenceCriterion () |
Destructor. More... | |
virtual void | update (const Vector &curSol, const Vector &changeIndicator, const Vector &curResid)=0 |
Update the internal members of the convergence criterion with the current solution. More... | |
virtual void | printInitial (std::ostream &os OPM_UNUSED=std::cout) const |
Prints the initial information about the convergence behaviour. More... | |
virtual void | print (Scalar iter OPM_UNUSED, std::ostream &os OPM_UNUSED=std::cout) const |
Prints the information about the convergence behaviour for the current iteration. More... | |
Convergence criterion which looks at the weighted absolute value of the residual.
For the WeightedResidualReductionCriterion, the error of the solution is defined as
where is the residual for the k-th iterative solution vector
and
is the weight of the
-th linear equation.
In addition, to the reduction of the maximum defect, the linear solver is also considered to be converged, if the defect goes below a given absolute limit.
|
inlinevirtual |
Returns the accuracy of the solution at the last update.
A value of zero means that the solution was exact.
For the accuracy we only take the residual into account,
Implements Ewoms::Linear::ConvergenceCriterion< Vector >.
|
inlinevirtual |
Returns true if and only if the convergence criterion is met.
Implements Ewoms::Linear::ConvergenceCriterion< Vector >.
|
inlinevirtual |
Returns true if the convergence criterion cannot be met anymore because the solver has broken down.
Reimplemented from Ewoms::Linear::ConvergenceCriterion< Vector >.
|
inline |
Prints the information about the convergence behaviour for the current iteration.
iter | The iteration number. The semantics of this parameter are chosen by the linear solver. |
os | The output stream to which the message gets written. |
|
inline |
Prints the initial information about the convergence behaviour.
This method is called after setInitial() if the solver thinks it's a good idea to be verbose. In practice, "printing the initial information" means printing column headers and the initial state.
os | The output stream to which the message gets written. |
|
inline |
Return the relative weight of a row of the residual.
outerIdx | The index of the outer vector (i.e. Dune::BlockVector) |
innerIdx | The index of the inner vector (i.e. Dune::FieldVector) |
|
inlinevirtual |
Set the initial solution of the linear system of equations.
This version of the method does NOT take the two-norm of the residual as argument. If the two-norm of the defect is available for the linear solver, the version of the update() method with it should be called.
curSol | The current iterative solution of the linear system of equations |
curResid | The residual vector of the current iterative solution of the linear system of equations |
Implements Ewoms::Linear::ConvergenceCriterion< Vector >.
|
inline |
Sets the relative weight of each row of the residual.
For the WeightedResidualReductionCriterion, the error of the solution is defined as
where is the residual for the k-th iterative solution vector
and
is the weight of the
-th linear equation.
This method is not part of the generic ConvergenceCriteria interface.
residWeightVec | A Dune::BlockVector<Dune::FieldVector<Scalar, n> > with the relative weights of the linear equations |
|
inline |