mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
adding function iterateWellEqWithSwitching
when we do the local solve for well equations, control/status will be updated during the iteration process, such that the converged well gets correct control/status regarding to the current reservoir state. various change in the other parts of the code were made to make the function work as intended.
This commit is contained in:
@@ -174,6 +174,10 @@ template<class TypeTag, class MyTypeTag>
|
||||
struct UseAverageDensityMsWells {
|
||||
using type = UndefinedProperty;
|
||||
};
|
||||
template<class TypeTag, class MyTypeTag>
|
||||
struct LocalWellSolveControlSwitching {
|
||||
using type = UndefinedProperty;
|
||||
};
|
||||
// Network solver parameters
|
||||
template<class TypeTag, class MyTypeTag>
|
||||
struct NetworkMaxStrictIterations {
|
||||
@@ -366,6 +370,11 @@ template<class TypeTag>
|
||||
struct UseAverageDensityMsWells<TypeTag, TTag::FlowModelParameters> {
|
||||
static constexpr bool value = false;
|
||||
};
|
||||
template<class TypeTag>
|
||||
struct LocalWellSolveControlSwitching<TypeTag, TTag::FlowModelParameters> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
// Network solver parameters
|
||||
template<class TypeTag>
|
||||
struct NetworkMaxStrictIterations<TypeTag, TTag::FlowModelParameters> {
|
||||
@@ -530,6 +539,9 @@ namespace Opm
|
||||
/// Whether to approximate segment densities by averaging over segment and its outlet
|
||||
bool use_average_density_ms_wells_;
|
||||
|
||||
/// Whether to allow control switching during local well solutions
|
||||
bool local_well_solver_control_switching_;
|
||||
|
||||
/// Maximum number of iterations in the network solver before relaxing tolerance
|
||||
int network_max_strict_iterations_;
|
||||
|
||||
@@ -586,6 +598,7 @@ namespace Opm
|
||||
check_well_operability_iter_ = EWOMS_GET_PARAM(TypeTag, bool, EnableWellOperabilityCheckIter);
|
||||
max_number_of_well_switches_ = EWOMS_GET_PARAM(TypeTag, int, MaximumNumberOfWellSwitches);
|
||||
use_average_density_ms_wells_ = EWOMS_GET_PARAM(TypeTag, bool, UseAverageDensityMsWells);
|
||||
local_well_solver_control_switching_ = EWOMS_GET_PARAM(TypeTag, bool, LocalWellSolveControlSwitching);
|
||||
nonlinear_solver_ = EWOMS_GET_PARAM(TypeTag, std::string, NonlinearSolver);
|
||||
std::string approach = EWOMS_GET_PARAM(TypeTag, std::string, LocalSolveApproach);
|
||||
if (approach == "jacobi") {
|
||||
@@ -651,6 +664,7 @@ namespace Opm
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableWellOperabilityCheckIter, "Enable the well operability checking during iterations");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, int, MaximumNumberOfWellSwitches, "Maximum number of times a well can switch to the same control");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, UseAverageDensityMsWells, "Approximate segment densitities by averaging over segment and its outlet");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, LocalWellSolveControlSwitching, "Allow control switching during local well solutions");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, int, NetworkMaxStrictIterations, "Maximum iterations in network solver before relaxing tolerance");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, int, NetworkMaxIterations, "Maximum number of iterations in the network solver before giving up");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, std::string, NonlinearSolver, "Choose nonlinear solver. Valid choices are newton or nldd.");
|
||||
|
Reference in New Issue
Block a user