A nonlinear solver class suitable for general fully-implicit models, as well as pressure, transport and sequential models. More...
#include <NonlinearSolver.hpp>
Classes | |
struct | SolverParameters |
Public Types | |
enum | RelaxType { DAMPEN, SOR } |
typedef PhysicalModel::ReservoirState | ReservoirState |
typedef PhysicalModel::WellState | WellState |
Public Member Functions | |
NonlinearSolver (const SolverParameters ¶m, std::unique_ptr< PhysicalModel > model) | |
Construct solver for a given model. | |
SimulatorReport | step (const SimulatorTimerInterface &timer, ReservoirState &reservoir_state, WellState &well_state) |
Take a single forward step, after which the states will be modified according to the physical model. | |
SimulatorReport | step (const SimulatorTimerInterface &timer, const ReservoirState &initial_reservoir_state, const WellState &initial_well_state, ReservoirState &reservoir_state, WellState &well_state) |
Take a single forward step, after which the states will be modified according to the physical model. | |
const SimulatorReport & | failureReport () const |
return the statistics if the step() method failed | |
int | linearizations () const |
Number of linearizations used in all calls to step(). | |
int | nonlinearIterations () const |
Number of full nonlinear solver iterations used in all calls to step(). | |
int | linearIterations () const |
Number of linear solver iterations used in all calls to step(). | |
int | wellIterations () const |
Number of well iterations used in all calls to step(). | |
int | nonlinearIterationsLastStep () const |
Number of nonlinear solver iterations used in the last call to step(). | |
int | linearIterationsLastStep () const |
Number of linear solver iterations used in the last call to step(). | |
int | wellIterationsLastStep () const |
Number of well iterations used in all calls to step(). | |
std::vector< std::vector < double > > | computeFluidInPlace (const ReservoirState &x, const std::vector< int > &fipnum) const |
Compute fluid in place. | |
std::vector< std::vector < double > > | computeFluidInPlace (const std::vector< int > &fipnum) const |
const PhysicalModel & | model () const |
Reference to physical model. | |
PhysicalModel & | model () |
Mutable reference to physical model. | |
void | detectOscillations (const std::vector< std::vector< double >> &residual_history, const int it, bool &oscillate, bool &stagnate) const |
Detect oscillation or stagnation in a given residual history. | |
template<class BVector > | |
void | stabilizeNonlinearUpdate (BVector &dx, BVector &dxOld, const double omega) const |
Apply a stabilization to dx, depending on dxOld and relaxation parameters. | |
double | relaxMax () const |
The greatest relaxation factor (i.e. smallest factor) allowed. | |
double | relaxIncrement () const |
The step-change size for the relaxation factor. | |
enum RelaxType | relaxType () const |
The relaxation type (DAMPEN or SOR). | |
double | relaxRelTol () const |
The relaxation relative tolerance. | |
int | maxIter () const |
The maximum number of nonlinear iterations allowed. | |
int | minIter () const |
The minimum number of nonlinear iterations allowed. | |
void | setParameters (const SolverParameters ¶m) |
Set parameters to override those given at construction time. |
A nonlinear solver class suitable for general fully-implicit models, as well as pressure, transport and sequential models.
Opm::NonlinearSolver< PhysicalModel >::NonlinearSolver | ( | const SolverParameters & | param, | |
std::unique_ptr< PhysicalModel > | model | |||
) | [inline, explicit] |
Construct solver for a given model.
The model is a std::unique_ptr because the object to which model points to is not allowed to be deleted as long as the NonlinearSolver object exists.
[in] | param | parameters controlling nonlinear process |
[in,out] | model | physical simulation model. |
std::vector<std::vector<double> > Opm::NonlinearSolver< PhysicalModel >::computeFluidInPlace | ( | const ReservoirState & | x, | |
const std::vector< int > & | fipnum | |||
) | const [inline] |
Compute fluid in place.
[in] | ReservoirState | |
[in] | FIPNUM | for active cells not global cells. |
void Opm::NonlinearSolver< PhysicalModel >::stabilizeNonlinearUpdate | ( | BVector & | dx, | |
BVector & | dxOld, | |||
const double | omega | |||
) | const [inline] |
Apply a stabilization to dx, depending on dxOld and relaxation parameters.
Implemention for Dune block vectors.
SimulatorReport Opm::NonlinearSolver< PhysicalModel >::step | ( | const SimulatorTimerInterface & | timer, | |
const ReservoirState & | initial_reservoir_state, | |||
const WellState & | initial_well_state, | |||
ReservoirState & | reservoir_state, | |||
WellState & | well_state | |||
) | [inline] |
Take a single forward step, after which the states will be modified according to the physical model.
This version allows for the states passed as in/out arguments to be different from the initial states.
[in] | timer | simulation timer |
[in] | initial_reservoir_state | reservoir state variables at start of timestep |
[in] | initial_well_state | well state variables at start of timestep |
[in,out] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |
SimulatorReport Opm::NonlinearSolver< PhysicalModel >::step | ( | const SimulatorTimerInterface & | timer, | |
ReservoirState & | reservoir_state, | |||
WellState & | well_state | |||
) | [inline] |
Take a single forward step, after which the states will be modified according to the physical model.
[in] | timer | simulation timer |
[in,out] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |