3#ifndef OPM_ADAPTIVE_TIME_STEPPING_HPP
4#define OPM_ADAPTIVE_TIME_STEPPING_HPP
6#include <dune/common/version.hh>
7#include <dune/istl/istlexception.hh>
9#include <opm/common/OpmLog/OpmLog.hpp>
11#include <opm/input/eclipse/Schedule/Tuning.hpp>
16#include <opm/simulators/timestepping/AdaptiveSimulatorTimer.hpp>
17#include <opm/simulators/timestepping/SimulatorReport.hpp>
18#include <opm/simulators/timestepping/SimulatorTimer.hpp>
19#include <opm/simulators/timestepping/TimeStepControl.hpp>
20#include <opm/simulators/timestepping/TimeStepControlInterface.hpp>
23#define RESERVOIR_COUPLING_ENABLED
25#ifdef RESERVOIR_COUPLING_ENABLED
26#include <opm/simulators/flow/ReservoirCoupling.hpp>
27#include <opm/simulators/flow/ReservoirCouplingMaster.hpp>
28#include <opm/simulators/flow/ReservoirCouplingSlave.hpp>
41namespace Opm::Parameters {
73 void registerAdaptiveParameters();
75 std::tuple<TimeStepControlType, std::unique_ptr<TimeStepControlInterface>,
bool>
79template<
class TypeTag>
84 template <
class Solver>
88 explicit SolutionTimeErrorSolverWrapper(
const Solver& solver);
89 double relativeChange()
const;
92 const Solver& solver_;
98 template <
class Solver>
class SubStepIteration;
100 template <
class Solver>
108 const std::function<
bool(
const double,
const double,
const int)>&
tuning_updater
118 void maybeModifySuggestedTimeStepAtBeginningOfReportStep_(const double originalTimeStep);
119 bool maybeUpdateTuning_(double elapsed, double dt, int sub_step_number)
const;
122#ifdef RESERVOIR_COUPLING_ENABLED
134 const std::function<bool(double elapsed, double dt, int sub_step_number)>& tuning_updater_;
138 class SubStepIteration {
141 SubStepper<Solver>& substepper,
143 const double original_time_step,
144 const bool final_step
150 bool checkContinueOnUnconvergedSolution_(
double dt)
const;
151 void checkTimeStepMaxRestartLimit_(
const int restarts)
const;
152 void checkTimeStepMinLimit_(
const double new_time_step)
const;
153 void chopTimeStep_(
const double new_time_step);
154 bool chopTimeStepOrCloseFailingWells_(
const double new_time_step);
155 boost::posix_time::ptime currentDateTime_()
const;
157 double growthFactor_()
const;
158 bool ignoreConvergenceFailure_()
const;
160 double maybeRestrictTimeStepGrowth_(
161 const double dt,
double dt_estimate,
const int restarts)
const;
162 void maybeUpdateTuningAndTimeStep_();
163 double maxGrowth_()
const;
164 double minTimeStepBeforeClosingWells_()
const;
165 double minTimeStep_()
const;
166 double restartFactor_()
const;
168 int solverRestartMax_()
const;
169 double suggestedNextTimestep_()
const;
170 void setSuggestedNextStep_(
double step);
171 void setTimeStep_(
double dt_estimate);
172 Solver& solver_()
const;
173 bool solverVerbose_()
const;
175 boost::posix_time::ptime startDateTime_()
const;
176 double timeStepControlComputeEstimate_(
178 bool timeStepVerbose_()
const;
179 void updateSuggestedNextStep_();
180 bool useNewtonIteration_()
const;
181 double writeOutput_()
const;
183 SubStepper<Solver>& substepper_;
185 const double original_time_step_;
186 const bool final_step_;
187 std::string cause_of_failure_;
198 const bool terminalOutput =
true
206 const bool terminalOutput =
true
210 static void registerParameters();
211#ifdef RESERVOIR_COUPLING_ENABLED
215 void setSuggestedNextStep(
const double x);
216 double suggestedNextStep()
const;
218 template <
class Solver>
222 const std::function<
bool(
const double,
const double,
const int)>
228 template<
class Serializer>
240 void maybeModifySuggestedTimeStepAtBeginningOfReportStep_(
const double original_time_step,
243 template<
class Controller>
246 template<
class T,
class Serializer>
247 void allocAndSerialize(Serializer&
serializer);
255 using TimeStepController = std::unique_ptr<TimeStepControlInterface>;
275#ifdef RESERVOIR_COUPLING_ENABLED
287#include <opm/simulators/timestepping/AdaptiveTimeStepping_impl.hpp>
Defines a type tags and some fundamental properties all models.
Simulation timer for adaptive time stepping.
Definition AdaptiveSimulatorTimer.hpp:41
Definition AdaptiveTimeStepping.hpp:81
double max_growth_
factor that limits the maximum growth of a time step
Definition AdaptiveTimeStepping.hpp:261
double max_time_step_
maximal allowed time step size in days
Definition AdaptiveTimeStepping.hpp:262
bool solver_verbose_
solver verbosity
Definition AdaptiveTimeStepping.hpp:266
int solver_restart_max_
how many restart of solver are allowed
Definition AdaptiveTimeStepping.hpp:265
double timestep_after_event_
suggested size of timestep after an event
Definition AdaptiveTimeStepping.hpp:270
bool ignore_convergence_failure_
continue instead of stop when minimum time step is reached
Definition AdaptiveTimeStepping.hpp:264
double suggested_next_timestep_
suggested size of next timestep
Definition AdaptiveTimeStepping.hpp:268
TimeStepControlType time_step_control_type_
type of time step control object
Definition AdaptiveTimeStepping.hpp:257
SimulatorReport step(const SimulatorTimer &simulator_timer, Solver &solver, const bool is_event, const std::function< bool(const double, const double, const int)> tuning_updater)
step method that acts like the solver::step method in a sub cycle of time steps
Definition AdaptiveTimeStepping_impl.hpp:208
bool full_timestep_initially_
beginning with the size of the time step from data file
Definition AdaptiveTimeStepping.hpp:269
double growth_factor_
factor to multiply time step when solver recovered from failed convergence
Definition AdaptiveTimeStepping.hpp:260
double restart_factor_
factor to multiply time step with when solver fails to converge
Definition AdaptiveTimeStepping.hpp:259
double min_time_step_
minimal allowed time step size before throwing
Definition AdaptiveTimeStepping.hpp:263
TimeStepController time_step_control_
time step control object
Definition AdaptiveTimeStepping.hpp:258
double min_time_step_before_shutting_problematic_wells_
< shut problematic wells when time step size in days are less than this
Definition AdaptiveTimeStepping.hpp:274
bool timestep_verbose_
timestep verbosity
Definition AdaptiveTimeStepping.hpp:267
bool use_newton_iteration_
use newton iteration count for adaptive time step control
Definition AdaptiveTimeStepping.hpp:271
RelativeChangeInterface.
Definition TimeStepControlInterface.hpp:34
Definition ReservoirCouplingMaster.hpp:35
Definition ReservoirCouplingSlave.hpp:35
Definition SimulatorTimer.hpp:39
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:235
The Opm property system, traits with inheritance.
Definition AdaptiveTimeStepping.hpp:48
Definition AdaptiveTimeStepping.hpp:47
Definition AdaptiveTimeStepping.hpp:59
Definition AdaptiveTimeStepping.hpp:58
Definition AdaptiveTimeStepping.hpp:43
Definition AdaptiveTimeStepping.hpp:44
Definition AdaptiveTimeStepping.hpp:45
Definition AdaptiveTimeStepping.hpp:55
Definition AdaptiveTimeStepping.hpp:53
Definition AdaptiveTimeStepping.hpp:57
Definition AdaptiveTimeStepping.hpp:56
Definition AdaptiveTimeStepping.hpp:54
Definition AdaptiveTimeStepping.hpp:60
Definition AdaptiveTimeStepping.hpp:51
Definition AdaptiveTimeStepping.hpp:52
Definition AdaptiveTimeStepping.hpp:50
Definition AdaptiveTimeStepping.hpp:49
Definition AdaptiveTimeStepping.hpp:46
A struct for returning timing data from a simulator to its caller.
Definition SimulatorReport.hpp:34
Definition SimulatorReport.hpp:119
Definition ConvergenceReport.hpp:447