From e0e1ca51e61ecbcae62274732396c58fd9b012ae Mon Sep 17 00:00:00 2001 From: babrodtk Date: Wed, 15 Mar 2017 13:51:51 +0100 Subject: [PATCH] Added soMax to flow_legacy --- opm/autodiff/BlackoilModelBase.hpp | 2 ++ opm/autodiff/BlackoilModelBase_impl.hpp | 2 ++ opm/autodiff/BlackoilPropsAdFromDeck.cpp | 27 ++++++++++--------- opm/autodiff/BlackoilPropsAdFromDeck.hpp | 3 +++ .../SimulatorFullyImplicitBlackoilEbos.hpp | 2 +- .../SimulatorFullyImplicitBlackoilOutput.hpp | 2 ++ ...FullyImplicitCompressiblePolymerSolver.hpp | 2 ++ 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/opm/autodiff/BlackoilModelBase.hpp b/opm/autodiff/BlackoilModelBase.hpp index 300efa46a..c46205c61 100644 --- a/opm/autodiff/BlackoilModelBase.hpp +++ b/opm/autodiff/BlackoilModelBase.hpp @@ -103,6 +103,8 @@ namespace Opm { ADB rsSat; // Saturated gas-oil ratio ADB rvSat; // Saturated oil-gas ratio + std::vector soMax; // Maximum oil saturation + std::array fip; }; diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 56bec6762..1d425f9c7 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -463,6 +463,7 @@ typedef Eigen::Array(0); vap2_ = deck.getKeyword("VAPPARS").getRecord(0).getItem(1).get< double >(0); - satOilMax_.resize(number_of_cells, 0.0); } else if (deck.hasKeyword("VAPPARS")) { OPM_THROW(std::runtime_error, "Input has VAPPARS, but missing VAPOIL and/or DISGAS\n"); } + satOilMax_.resize(number_of_cells, 0.0); SaturationPropsFromDeck* ptr = new SaturationPropsFromDeck(); @@ -879,19 +879,22 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck& /// Update for max oil saturation. void BlackoilPropsAdFromDeck::updateSatOilMax(const std::vector& saturation) { - if (!satOilMax_.empty()) { - const int n = satOilMax_.size(); - const int np = phase_usage_.num_phases; - const int posOil = phase_usage_.phase_pos[Oil]; - const double* s = saturation.data(); - for (int i=0; i& BlackoilPropsAdFromDeck::satOilMax() const + { + return satOilMax_; + } + /// Set capillary pressure scaling according to pressure diff. and initial water saturation. /// \param[in] saturation Array of n*numPhases saturation values. /// \param[in] pc Array of n*numPhases capillary pressure values. @@ -918,7 +921,7 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck& const std::vector& cells, const double vap) const { - if (!satOilMax_.empty() && vap > 0.0) { + if (vap > 0.0) { const int n = cells.size(); V factor = V::Ones(n, 1); const double eps_sqrt = std::sqrt(std::numeric_limits::epsilon()); @@ -943,7 +946,7 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck& const std::vector& cells, const double vap) const { - if (!satOilMax_.empty() && vap > 0.0) { + if (vap > 0.0) { const int n = cells.size(); V factor = V::Ones(n, 1); const double eps_sqrt = std::sqrt(std::numeric_limits::epsilon()); diff --git a/opm/autodiff/BlackoilPropsAdFromDeck.hpp b/opm/autodiff/BlackoilPropsAdFromDeck.hpp index cd86fad98..41277b2bd 100644 --- a/opm/autodiff/BlackoilPropsAdFromDeck.hpp +++ b/opm/autodiff/BlackoilPropsAdFromDeck.hpp @@ -362,6 +362,9 @@ namespace Opm /// Update for max oil saturation. void updateSatOilMax(const std::vector& saturation); + /// Returns the max oil saturation + const std::vector& satOilMax() const; + /// Set capillary pressure scaling according to pressure diff. and initial water saturation. /// \param[in] saturation Array of n*numPhases saturation values. /// \param[in] pc Array of n*numPhases capillary pressure values. diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilEbos.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoilEbos.hpp index 0a8860efc..a1c225009 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilEbos.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilEbos.hpp @@ -154,7 +154,7 @@ public: typedef std::vector VectorType; - VectorType& somax = state.getCellData( "SOMAX" ); + const VectorType& somax = state.getCellData( "SOMAX" ); for (int cellIdx = 0; cellIdx < num_cells; ++cellIdx) { ebosSimulator_.model().setMaxOilSaturation(somax[cellIdx], cellIdx); diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp index 4fef4a445..209eb3fef 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp @@ -551,6 +551,8 @@ namespace Opm addToSimData( simData, "RSSAT", sd.rsSat ); addToSimData( simData, "RVSAT", sd.rvSat ); + addToSimData( simData, "SOMAX", sd.soMax ); + return simData; } diff --git a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp index 241deaf48..5ef511292 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp +++ b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp @@ -82,6 +82,7 @@ namespace Opm { : rq(num_phases) , rsSat(ADB::null()) , rvSat(ADB::null()) + , soMax() , fip() { } @@ -92,6 +93,7 @@ namespace Opm { std::vector rq; ADB rsSat; ADB rvSat; + std::vector soMax; std::array fip; };