diff --git a/opm/autodiff/BlackoilModelEbos.hpp b/opm/autodiff/BlackoilModelEbos.hpp index 8b7e22d68..9f2529e94 100644 --- a/opm/autodiff/BlackoilModelEbos.hpp +++ b/opm/autodiff/BlackoilModelEbos.hpp @@ -171,9 +171,9 @@ namespace Opm { , has_solvent_(GET_PROP_VALUE(TypeTag, EnableSolvent)) , has_polymer_(GET_PROP_VALUE(TypeTag, EnablePolymer)) , param_( param ) - , well_model_ (well_model) + , well_model_ (well_model) , terminal_output_ (terminal_output) - , rate_converter_(phaseUsage_, ebosSimulator_.problem().pvtRegionArray().empty()?nullptr:ebosSimulator_.problem().pvtRegionArray().data(), AutoDiffGrid::numCells(grid_), std::vector(AutoDiffGrid::numCells(grid_),0)) + , rate_converter_(wellModel().rateConverter()) , current_relaxation_(1.0) , dx_old_(AutoDiffGrid::numCells(grid_)) , isBeginReportStep_(false) @@ -1505,7 +1505,7 @@ namespace Opm { long int global_nc_; // rate converter between the surface volume rates and reservoir voidage rates - RateConverterType rate_converter_; + RateConverterType* rate_converter_; std::vector> residual_norms_history_; double current_relaxation_; @@ -1660,7 +1660,7 @@ namespace Opm { global_number_wells = info.communicator().sum(global_number_wells); if ( global_number_wells ) { - rate_converter_.defineState(reservoir_state, boost::any_cast(istlSolver_->parallelInformation())); + rate_converter_->defineState(reservoir_state, boost::any_cast(istlSolver_->parallelInformation())); } } else @@ -1668,7 +1668,7 @@ namespace Opm { { if ( global_number_wells ) { - rate_converter_.defineState(reservoir_state); + rate_converter_->defineState(reservoir_state); } } } diff --git a/opm/autodiff/StandardWellsDense.hpp b/opm/autodiff/StandardWellsDense.hpp index 644db37b5..a23a4c66a 100644 --- a/opm/autodiff/StandardWellsDense.hpp +++ b/opm/autodiff/StandardWellsDense.hpp @@ -121,7 +121,7 @@ enum WellVariablePositions { const double gravity_arg, const std::vector& depth_arg, const std::vector& pv_arg, - const RateConverterType* rate_converter, + RateConverterType* rate_converter, long int global_nc, const Grid& grid); @@ -291,6 +291,7 @@ enum WellVariablePositions { void applyVREPGroupControl(WellState& well_state) const; + RateConverterType* rateConverter() const; protected: bool wells_active_; @@ -310,7 +311,7 @@ enum WellVariablePositions { std::vector active_; const VFPProperties* vfp_properties_; double gravity_; - const RateConverterType* rate_converter_; + RateConverterType* rate_converter_; // The efficiency factor for each connection. It is specified based on wells and groups, // We calculate the factor for each connection for the computation of contributions to the mass balance equations. diff --git a/opm/autodiff/StandardWellsDense_impl.hpp b/opm/autodiff/StandardWellsDense_impl.hpp index 9b66ee3a8..e04297eb5 100644 --- a/opm/autodiff/StandardWellsDense_impl.hpp +++ b/opm/autodiff/StandardWellsDense_impl.hpp @@ -46,7 +46,7 @@ namespace Opm { const double gravity_arg, const std::vector& depth_arg, const std::vector& pv_arg, - const RateConverterType* rate_converter, + RateConverterType* rate_converter, long int global_nc, const Grid& grid) { @@ -143,6 +143,19 @@ namespace Opm { + + template + typename StandardWellsDense::RateConverterType* + StandardWellsDense:: + rateConverter() const + { + return rate_converter_; + } + + + + + template SimulatorReport StandardWellsDense::