PID controller based adaptive time step control as above that also takes target iterations into account.
More...
#include <TimeStepControl.hpp>
|
| | PIDAndIterationCountTimeStepControl (const int target_iterations, const double decayDampingFactor, const double growthDampingFactor, const double tol, const double minTimeStepBasedOnIterations, const bool verbose) |
| | constructor
|
| double | computeTimeStepSize (const double dt, const int iterations, const RelativeChangeInterface &relativeChange, const AdaptiveSimulatorTimer &) const override |
| | compute new time step size suggestions based on the PID controller
|
| bool | timeStepAccepted (const double, const double) const override |
| | For the general 3rd order controller, the internal shifting of errors and time steps happens here, and hence this method needs to be called for (after) each time step.
|
|
template<class Serializer> |
| void | serializeOp (Serializer &serializer) |
|
bool | operator== (const PIDAndIterationCountTimeStepControl &) const |
| | PIDTimeStepControl (const double tol, const bool verbose) |
| | constructor
|
| double | computeTimeStepSize (const double dt, const int, const RelativeChangeInterface &relativeChange, const AdaptiveSimulatorTimer &) const override |
| | compute new time step size suggestions based on the PID controller
|
| bool | timeStepAccepted (const double, const double) const override |
| | For the general 3rd order controller, the internal shifting of errors and time steps happens here, and hence this method needs to be called for (after) each time step.
|
|
template<class Serializer> |
| void | serializeOp (Serializer &serializer) |
|
bool | operator== (const PIDTimeStepControl &) const |
|
virtual | ~TimeStepControlInterface () |
| | virtual destructor (empty)
|
|
|
static PIDAndIterationCountTimeStepControl | serializationTestObject () |
|
static PIDTimeStepControl | serializationTestObject () |
|
|
static constexpr TimeStepControlType | Type = TimeStepControlType::PIDAndIterationCount |
|
static constexpr TimeStepControlType | Type = TimeStepControlType::PID |
|
|
const int | target_iterations_ = 8 |
|
const double | decayDampingFactor_ = 1.0 |
|
const double | growthDampingFactor_ = 3.2 |
|
const double | minTimeStepBasedOnIterations_ = 0.0 |
|
const bool | verbose_ = false |
|
const double | tol_ = 0.1 |
|
std::vector< double > | errors_ {} |
|
const bool | verbose_ = false |
PID controller based adaptive time step control as above that also takes target iterations into account.
◆ PIDAndIterationCountTimeStepControl()
| Opm::PIDAndIterationCountTimeStepControl::PIDAndIterationCountTimeStepControl |
( |
const int | target_iterations, |
|
|
const double | decayDampingFactor, |
|
|
const double | growthDampingFactor, |
|
|
const double | tol, |
|
|
const double | minTimeStepBasedOnIterations, |
|
|
const bool | verbose ) |
constructor
- Parameters
-
| target_iterations | number of desired iterations per time step |
| decayDampingFactor | limiting the decrease in time step if iteration count was high |
| growthDampingFactor | limiting the increase in time step if iteration count was low |
| tol | tolerance for the relative changes of the numerical solution to be accepted in one time step |
| minTimeStepBasedOnIterations | time step suggestion from target iterations should not be below this |
| verbose | if true, get some output |
◆ computeTimeStepSize()
compute new time step size suggestions based on the PID controller
- Parameters
-
| dt | time step size used in the current step |
| iterations | number of iterations used (linear/nonlinear) |
| relativeChange | Relative change handler |
| substepTimer | Sub step timer |
- Returns
- suggested time step size for the next step
- Parameters
-
| dt | Time step length |
| iterations | Number of iterations used |
| relativeChange | Relative change handler |
Implements Opm::TimeStepControlInterface.
◆ timeStepAccepted()
| bool Opm::PIDAndIterationCountTimeStepControl::timeStepAccepted |
( |
const double | error, |
|
|
const double | timeStepJustCompleted ) const |
|
inlineoverridevirtual |
For the general 3rd order controller, the internal shifting of errors and time steps happens here, and hence this method needs to be called for (after) each time step.
Implements Opm::TimeStepControlInterface.
The documentation for this class was generated from the following files:
- opm/simulators/timestepping/TimeStepControl.hpp
- opm/simulators/timestepping/TimeStepControl.cpp