From 8a600747fa0ffd89c3536f3ff0aacf6310afbb79 Mon Sep 17 00:00:00 2001 From: Tor Harald Sandve Date: Tue, 27 May 2014 13:36:22 +0200 Subject: [PATCH] Read DISGAS and VAPOIL from deck and pass them to the simulator --- examples/sim_fibo_ad.cpp | 5 ++++- examples/test_implicit_ad.cpp | 2 +- opm/autodiff/BlackoilPropsAdFromDeck.cpp | 2 ++ opm/autodiff/BlackoilPropsAdFromDeck.hpp | 2 ++ opm/autodiff/FullyImplicitBlackoilSolver.hpp | 6 +++++- .../FullyImplicitBlackoilSolver_impl.hpp | 6 +++++- opm/autodiff/SimulatorFullyImplicitBlackoil.hpp | 4 +++- .../SimulatorFullyImplicitBlackoil_impl.hpp | 16 +++++++++++----- 8 files changed, 33 insertions(+), 10 deletions(-) diff --git a/examples/sim_fibo_ad.cpp b/examples/sim_fibo_ad.cpp index 3a6d24ec5..e3cc97f23 100644 --- a/examples/sim_fibo_ad.cpp +++ b/examples/sim_fibo_ad.cpp @@ -218,7 +218,10 @@ try rock_comp->isActive() ? rock_comp.get() : 0, wells, *fis_solver, - grav); + grav, + deck->hasKeyword("DISGAS"), + deck->hasKeyword("VAPOIL") ); + SimulatorReport episodeReport = simulator.run(simtimer, state, well_state); ++simtimer; diff --git a/examples/test_implicit_ad.cpp b/examples/test_implicit_ad.cpp index 842e981dd..44420f8f1 100644 --- a/examples/test_implicit_ad.cpp +++ b/examples/test_implicit_ad.cpp @@ -104,7 +104,7 @@ try Opm::NewtonIterationBlackoilSimple fis_solver(param); - Opm::FullyImplicitBlackoilSolver solver(param, *g, props, geo, 0, *wells, fis_solver); + Opm::FullyImplicitBlackoilSolver solver(param, *g, props, geo, 0, *wells, fis_solver, /*hasDisgas*/ true, /*hasVapoil=*/false); Opm::BlackoilState state; initStateBasic(*g, props0, param, 0.0, state); diff --git a/opm/autodiff/BlackoilPropsAdFromDeck.cpp b/opm/autodiff/BlackoilPropsAdFromDeck.cpp index 17b382daa..ae5c9e186 100644 --- a/opm/autodiff/BlackoilPropsAdFromDeck.cpp +++ b/opm/autodiff/BlackoilPropsAdFromDeck.cpp @@ -94,6 +94,8 @@ namespace Opm phase_usage_ = phaseUsageFromDeck(deck); + + // Surface densities. Accounting for different orders in eclipse and our code. Opm::DeckKeywordConstPtr densityKeyword = deck->getKeyword("DENSITY"); int numRegions = densityKeyword->size(); diff --git a/opm/autodiff/BlackoilPropsAdFromDeck.hpp b/opm/autodiff/BlackoilPropsAdFromDeck.hpp index 6677b0bdb..bced83fa9 100644 --- a/opm/autodiff/BlackoilPropsAdFromDeck.hpp +++ b/opm/autodiff/BlackoilPropsAdFromDeck.hpp @@ -360,6 +360,8 @@ namespace Opm std::unique_ptr satprops_; PhaseUsage phase_usage_; + bool has_vapoil_; + bool has_disgas_; // The PVT region which is to be used for each cell std::vector cellPvtRegionIdx_; diff --git a/opm/autodiff/FullyImplicitBlackoilSolver.hpp b/opm/autodiff/FullyImplicitBlackoilSolver.hpp index a85f719dc..706f3c763 100644 --- a/opm/autodiff/FullyImplicitBlackoilSolver.hpp +++ b/opm/autodiff/FullyImplicitBlackoilSolver.hpp @@ -70,7 +70,9 @@ namespace Opm { const DerivedGeology& geo , const RockCompressibility* rock_comp_props, const Wells& wells, - const NewtonIterationBlackoilInterface& linsolver); + const NewtonIterationBlackoilInterface& linsolver, + const bool has_disgas, + const bool has_vapoil ); /// Take a single forward step, modifiying /// state.pressure() @@ -144,6 +146,8 @@ namespace Opm { HelperOps ops_; const WellOps wops_; const M grav_; + const bool has_disgas_; + const bool has_vapoil_; double dp_max_rel_; double ds_max_; double drs_max_rel_; diff --git a/opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp b/opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp index c4a041dc1..13fb2179d 100644 --- a/opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp +++ b/opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp @@ -219,7 +219,9 @@ namespace { const DerivedGeology& geo , const RockCompressibility* rock_comp_props, const Wells& wells, - const NewtonIterationBlackoilInterface& linsolver) + const NewtonIterationBlackoilInterface& linsolver, + const bool has_disgas, + const bool has_vapoil) : grid_ (grid) , fluid_ (fluid) , geo_ (geo) @@ -232,6 +234,8 @@ namespace { , ops_ (grid) , wops_ (wells) , grav_ (gravityOperator(grid_, ops_, geo_)) + , has_disgas_(has_disgas) + , has_vapoil_(has_vapoil) , dp_max_rel_ (1.0e9) , ds_max_ (0.2) , drs_max_rel_ (1.0e9) diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoil.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoil.hpp index 67f7cda81..efad51ff6 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoil.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoil.hpp @@ -74,7 +74,9 @@ namespace Opm const RockCompressibility* rock_comp_props, WellsManager& wells_manager, NewtonIterationBlackoilInterface& linsolver, - const double* gravity); + const double* gravity, + const bool disgas, + const bool vapoil ); /// Run the simulation. /// This will run succesive timesteps until timer.done() is true. It will diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoil_impl.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoil_impl.hpp index 81fa58fce..fcad56038 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoil_impl.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoil_impl.hpp @@ -66,7 +66,9 @@ namespace Opm const RockCompressibility* rock_comp_props, WellsManager& wells_manager, NewtonIterationBlackoilInterface& linsolver, - const double* gravity); + const double* gravity, + bool has_disgas, + bool has_vapoil ); SimulatorReport run(SimulatorTimer& timer, BlackoilState& state, @@ -107,10 +109,12 @@ namespace Opm const RockCompressibility* rock_comp_props, WellsManager& wells_manager, NewtonIterationBlackoilInterface& linsolver, - const double* gravity) + const double* gravity, + const bool has_disgas, + const bool has_vapoil ) { - pimpl_.reset(new Impl(param, grid, props, rock_comp_props, wells_manager, linsolver, gravity)); + pimpl_.reset(new Impl(param, grid, props, rock_comp_props, wells_manager, linsolver, gravity, has_disgas, has_vapoil)); } @@ -192,7 +196,9 @@ namespace Opm const RockCompressibility* rock_comp_props, WellsManager& wells_manager, NewtonIterationBlackoilInterface& linsolver, - const double* gravity) + const double* gravity, + const bool has_disgas, + const bool has_vapoil) : grid_(grid), props_(props), rock_comp_props_(rock_comp_props), @@ -200,7 +206,7 @@ namespace Opm wells_(wells_manager.c_wells()), gravity_(gravity), geo_(grid_, props_, gravity_), - solver_(param, grid_, props_, geo_, rock_comp_props, *wells_manager.c_wells(), linsolver) + solver_(param, grid_, props_, geo_, rock_comp_props, *wells_manager.c_wells(), linsolver, has_disgas, has_vapoil) /* param.getDefault("nl_pressure_residual_tolerance", 0.0), param.getDefault("nl_pressure_change_tolerance", 1.0), param.getDefault("nl_pressure_maxiter", 10),