diff --git a/opm/simulators/timestepping/AdaptiveTimeSteppingEbos.hpp b/opm/simulators/timestepping/AdaptiveTimeSteppingEbos.hpp index 0c8b46109..18ad30f2f 100644 --- a/opm/simulators/timestepping/AdaptiveTimeSteppingEbos.hpp +++ b/opm/simulators/timestepping/AdaptiveTimeSteppingEbos.hpp @@ -41,6 +41,7 @@ NEW_PROP_TAG(TimeStepControlTargetNewtonIterations); NEW_PROP_TAG(TimeStepControlDecayRate); NEW_PROP_TAG(TimeStepControlGrowthRate); NEW_PROP_TAG(TimeStepControlFileName); +NEW_PROP_TAG(MinTimeStepBeforeShuttingProblematicWellsInDays); SET_SCALAR_PROP(FlowTimeSteppingParameters, SolverRestartFactor, 0.33); SET_SCALAR_PROP(FlowTimeSteppingParameters, SolverGrowthFactor, 2.0); @@ -60,6 +61,8 @@ SET_INT_PROP(FlowTimeSteppingParameters, TimeStepControlTargetNewtonIterations, SET_SCALAR_PROP(FlowTimeSteppingParameters, TimeStepControlDecayRate, 0.75); SET_SCALAR_PROP(FlowTimeSteppingParameters, TimeStepControlGrowthRate, 1.25); SET_STRING_PROP(FlowTimeSteppingParameters, TimeStepControlFileName, "timesteps"); +SET_SCALAR_PROP(FlowTimeSteppingParameters, MinTimeStepBeforeShuttingProblematicWellsInDays, 0.25); + END_PROPERTIES @@ -111,6 +114,8 @@ namespace Opm { , fullTimestepInitially_(EWOMS_GET_PARAM(TypeTag, bool, FullTimeStepInitially)) // false , timestepAfterEvent_(EWOMS_GET_PARAM(TypeTag, double, TimeStepAfterEventInDays)*24*60*60) // 1e30 , useNewtonIteration_(false) + , minTimeStepBeforeShuttingProblematicWells_(EWOMS_GET_PARAM(TypeTag, double, MinTimeStepBeforeShuttingProblematicWellsInDays)*unit::day) + { init_(); } @@ -136,6 +141,7 @@ namespace Opm { , fullTimestepInitially_(EWOMS_GET_PARAM(TypeTag, bool, FullTimeStepInitially)) // false , timestepAfterEvent_(EWOMS_GET_PARAM(TypeTag, double, TimeStepAfterEventInDays)*24*60*60) // 1e30 , useNewtonIteration_(false) + , minTimeStepBeforeShuttingProblematicWells_(EWOMS_GET_PARAM(TypeTag, double, MinTimeStepBeforeShuttingProblematicWellsInDays)*unit::day) { init_(); } @@ -179,6 +185,8 @@ namespace Opm { "The growth rate of the time step size of the number of target iterations is undercut"); EWOMS_REGISTER_PARAM(TypeTag, std::string, TimeStepControlFileName, "The name of the file which contains the hardcoded time steps sizes"); + EWOMS_REGISTER_PARAM(TypeTag, double, MinTimeStepBeforeShuttingProblematicWellsInDays, + "The minimum time step size in days for which problematic wells are not shut"); } /** \brief step method that acts like the solver::step method @@ -390,7 +398,7 @@ namespace Opm { ++restarts; }; - const double minimumChoppedTimestep = 0.25 * unit::day; + const double minimumChoppedTimestep = minTimeStepBeforeShuttingProblematicWells_; if (newTimeStep > minimumChoppedTimestep) { chopTimestep(); } else { @@ -578,6 +586,7 @@ namespace Opm { bool fullTimestepInitially_; //!< beginning with the size of the time step from data file double timestepAfterEvent_; //!< suggested size of timestep after an event bool useNewtonIteration_; //!< use newton iteration count for adaptive time step control + double minTimeStepBeforeShuttingProblematicWells_; //! < shut problematic wells when time step size in days are less than this }; }