3#ifndef OPM_ADAPTIVE_TIME_STEPPING_HPP
4#define OPM_ADAPTIVE_TIME_STEPPING_HPP
9#include <opm/simulators/flow/rescoup/ReservoirCouplingEnabled.hpp>
10#include <opm/simulators/timestepping/AdaptiveSimulatorTimer.hpp>
11#include <opm/simulators/timestepping/SimulatorReport.hpp>
12#include <opm/simulators/timestepping/SimulatorTimer.hpp>
13#include <opm/simulators/timestepping/TimeStepControl.hpp>
14#include <opm/simulators/timestepping/TimeStepControlInterface.hpp>
16#ifdef RESERVOIR_COUPLING_ENABLED
17#include <opm/simulators/flow/rescoup/ReservoirCoupling.hpp>
18#include <opm/simulators/flow/rescoup/ReservoirCouplingMaster.hpp>
19#include <opm/simulators/flow/rescoup/ReservoirCouplingSlave.hpp>
29namespace Opm::Parameters {
66 consistentlyFailingWells(
const std::vector<StepReport>& sr,
67 bool requireRepeatedFailures);
68 void registerAdaptiveParameters();
70 std::tuple<TimeStepControlType, std::unique_ptr<TimeStepControlInterface>,
bool>
71 createController(
const UnitSystem& unitSystem);
91template<
class TypeTag>
92class AdaptiveTimeStepping
118 double substep_length,
119 int sub_step_number)>;
124 template <
class Solver>
128 explicit SolutionTimeErrorSolverWrapper(
const Solver& solver);
132 const Solver& solver_;
136 template <
class Solver>
class SubStepIteration;
152 template <
class Solver>
167 friend class SubStepIteration<Solver>;
170 bool isReservoirCouplingMaster_()
const;
171 bool isReservoirCouplingSlave_()
const;
187 void maybeModifySuggestedTimeStepAtBeginningOfReportStep_(
const double originalTimeStep);
191 bool maybeUpdateTuning_(
double elapsed,
double substep_length,
int sub_step_number)
const;
193 double maxTimeStep_()
const;
198#ifdef RESERVOIR_COUPLING_ENABLED
213 double suggestedNextTimestep_()
const;
218 const bool is_event_;
234 template <
class Solver>
235 class SubStepIteration {
237 SubStepIteration(SubStepper<Solver>& substepper,
238 AdaptiveSimulatorTimer& substep_timer,
239 const double original_time_step,
240 const bool final_step);
244 SimulatorReport run();
247 bool checkContinueOnUnconvergedSolution_(
double dt)
const;
248 void checkTimeStepMaxRestartLimit_(
const int restarts)
const;
249 void checkTimeStepMinLimit_(
const double new_time_step)
const;
250 void chopTimeStep_(
const double new_time_step);
251 bool chopTimeStepOrCloseFailingWells_(
const double new_time_step);
252 boost::posix_time::ptime currentDateTime_()
const;
253 int getNumIterations_(
const SimulatorReportSingle& substep_report)
const;
254 double growthFactor_()
const;
255 bool ignoreConvergenceFailure_()
const;
256 bool isReservoirCouplingMaster_()
const;
257 bool isReservoirCouplingSlave_()
const;
258 void markFirstSubStepAsFinished_()
const;
259 void maybeReportSubStep_(SimulatorReportSingle substep_report)
const;
260 double maybeRestrictTimeStepGrowth_(
const double dt,
262 const int restarts)
const;
263 void maybeUpdateLastSubstepOfSyncTimestep_(
double dt);
282 void maybeUpdateTuningAndTimeStep_();
283 double maxGrowth_()
const;
284 double minTimeStepBeforeClosingWells_()
const;
285 double minTimeStep_()
const;
286 double restartFactor_()
const;
287 SimulatorReportSingle runSubStep_();
288 int solverRestartMax_()
const;
289 double suggestedNextTimestep_()
const;
290 void setSuggestedNextStep_(
double step);
291 void setTimeStep_(
double dt_estimate);
292 Solver& solver_()
const;
293 bool solverVerbose_()
const;
294 const SimulatorTimer& simulatorTimer_()
const;
295 boost::posix_time::ptime startDateTime_()
const;
296#ifdef RESERVOIR_COUPLING_ENABLED
297 ReservoirCouplingMaster<Scalar>& reservoirCouplingMaster_()
const;
298 ReservoirCouplingSlave<Scalar>& reservoirCouplingSlave_()
const;
300 double timeStepControlComputeEstimate_(
const double dt,
301 const int iterations,
302 const AdaptiveSimulatorTimer& substepTimer)
const;
303 bool timeStepVerbose_()
const;
304 void updateSuggestedNextStep_();
305 bool useNewtonIteration_()
const;
306 double writeOutput_()
const;
308 SubStepper<Solver>& substepper_;
309 AdaptiveSimulatorTimer& substep_timer_;
310 const double original_time_step_;
311 const bool final_step_;
312 std::string cause_of_failure_;
313 AdaptiveTimeStepping<TypeTag>& adaptive_time_stepping_;
317 AdaptiveTimeStepping() =
default;
319 AdaptiveTimeStepping(
const UnitSystem& unitSystem,
320 const SimulatorReport& full_report,
321 const double max_next_tstep = -1.0,
322 const bool terminalOutput =
true);
324 AdaptiveTimeStepping(
double max_next_tstep,
325 const Tuning& tuning,
326 const UnitSystem& unitSystem,
327 const SimulatorReport& full_report,
328 const bool terminalOutput =
true);
330 bool operator==(
const AdaptiveTimeStepping<TypeTag>& rhs)
const;
332 static void registerParameters();
342 const TimeStepControlInterface& timeStepControl()
const;
362 template <
class Solver>
363 SimulatorReport
step(
const SimulatorTimer& simulator_timer,
377 void updateTUNING(
double max_next_tstep,
const Tuning& tuning);
388 template<
class Serializer>
389 void serializeOp(Serializer& serializer);
391 SimulatorReport& report();
393 static AdaptiveTimeStepping<TypeTag> serializationTestObjectHardcoded();
394 static AdaptiveTimeStepping<TypeTag> serializationTestObjectPID();
395 static AdaptiveTimeStepping<TypeTag> serializationTestObjectPIDIt();
396 static AdaptiveTimeStepping<TypeTag> serializationTestObjectSimple();
397 static AdaptiveTimeStepping<TypeTag> serializationTestObject3rdOrder();
400 void maybeModifySuggestedTimeStepAtBeginningOfReportStep_(
const double original_time_step,
401 const bool is_event);
403 template<
class Controller>
404 static AdaptiveTimeStepping<TypeTag> serializationTestObject_();
406 template<
class T,
class Serializer>
407 void allocAndSerialize(Serializer& serializer);
410 bool castAndComp(
const AdaptiveTimeStepping<TypeTag>& Rhs)
const;
413 void init_(
const UnitSystem& unitSystem);
415 using TimeStepController = std::unique_ptr<TimeStepControlInterface>;
444#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
Adaptive time-stepping coordinator for the black-oil simulator.
Definition AdaptiveTimeStepping.hpp:93
double max_growth_
factor that limits the maximum growth of a time step
Definition AdaptiveTimeStepping.hpp:422
double max_time_step_
maximal allowed time step size in days
Definition AdaptiveTimeStepping.hpp:423
bool solver_verbose_
solver verbosity
Definition AdaptiveTimeStepping.hpp:427
int solver_restart_max_
how many restart of solver are allowed
Definition AdaptiveTimeStepping.hpp:426
double timestep_after_event_
suggested size of timestep after an event
Definition AdaptiveTimeStepping.hpp:431
void setSuggestedNextStep(const double x)
Set the suggested length for the next substep [s].
Definition AdaptiveTimeStepping_impl.hpp:299
double suggestedNextStep() const
Current suggested length for the next substep [s].
Definition AdaptiveTimeStepping_impl.hpp:307
bool ignore_convergence_failure_
continue instead of stop when minimum time step is reached
Definition AdaptiveTimeStepping.hpp:425
void updateTUNING(double max_next_tstep, const Tuning &tuning)
Apply TUNING keyword parameters.
Definition AdaptiveTimeStepping_impl.hpp:336
std::function< bool(double elapsed, double substep_length, int sub_step_number)> TuningUpdateCallback
Callback invoked at the start of each substep to apply TUNING, NEXTSTEP (via ACTIONX),...
Definition AdaptiveTimeStepping.hpp:117
double suggested_next_timestep_
suggested size of next timestep
Definition AdaptiveTimeStepping.hpp:429
TimeStepControlType time_step_control_type_
type of time step control object
Definition AdaptiveTimeStepping.hpp:418
bool full_timestep_initially_
beginning with the size of the time step from data file
Definition AdaptiveTimeStepping.hpp:430
SimulatorReport step(const SimulatorTimer &simulator_timer, Solver &solver, const bool is_event, const TuningUpdateCallback &tuning_updater)
Run one report step by orchestrating adaptive substepping.
Definition AdaptiveTimeStepping_impl.hpp:196
double growth_factor_
factor to multiply time step when solver recovered from failed convergence
Definition AdaptiveTimeStepping.hpp:421
double restart_factor_
factor to multiply time step with when solver fails to converge
Definition AdaptiveTimeStepping.hpp:420
double min_time_step_
minimal allowed time step size before throwing
Definition AdaptiveTimeStepping.hpp:424
void updateNEXTSTEP(double max_next_tstep)
Set suggested_next_timestep_ to max_next_tstep iff max_next_tstep > 0.
Definition AdaptiveTimeStepping_impl.hpp:324
TimeStepController time_step_control_
time step control object
Definition AdaptiveTimeStepping.hpp:419
double min_time_step_before_shutting_problematic_wells_
< shut problematic wells when time step size in days are less than this
Definition AdaptiveTimeStepping.hpp:435
bool timestep_verbose_
timestep verbosity
Definition AdaptiveTimeStepping.hpp:428
bool use_newton_iteration_
use newton iteration count for adaptive time step control
Definition AdaptiveTimeStepping.hpp:432
RelativeChangeInterface.
Definition TimeStepControlInterface.hpp:34
virtual double relativeChange() const =0
Definition ReservoirCouplingMaster.hpp:38
Definition ReservoirCouplingSlave.hpp:40
Definition SimulatorTimer.hpp:39
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilbioeffectsmodules.hh:45
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:233
The Opm property system, traits with inheritance.
Definition AdaptiveTimeStepping.hpp:36
Definition AdaptiveTimeStepping.hpp:35
Definition AdaptiveTimeStepping.hpp:47
Definition AdaptiveTimeStepping.hpp:46
Definition AdaptiveTimeStepping.hpp:31
Definition AdaptiveTimeStepping.hpp:32
Definition AdaptiveTimeStepping.hpp:33
Definition AdaptiveTimeStepping.hpp:43
Definition AdaptiveTimeStepping.hpp:41
Definition AdaptiveTimeStepping.hpp:45
Definition AdaptiveTimeStepping.hpp:44
Definition AdaptiveTimeStepping.hpp:42
Definition AdaptiveTimeStepping.hpp:51
Definition AdaptiveTimeStepping.hpp:52
Definition AdaptiveTimeStepping.hpp:49
Definition AdaptiveTimeStepping.hpp:48
Definition AdaptiveTimeStepping.hpp:39
Definition AdaptiveTimeStepping.hpp:40
Definition AdaptiveTimeStepping.hpp:50
Definition AdaptiveTimeStepping.hpp:38
Definition AdaptiveTimeStepping.hpp:37
Definition AdaptiveTimeStepping.hpp:34
Definition SimulatorReport.hpp:122
Definition ConvergenceReport.hpp:460