mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Added soMax to flow_legacy
This commit is contained in:
parent
bd0507cc3b
commit
e0e1ca51e6
@ -103,6 +103,8 @@ namespace Opm {
|
||||
ADB rsSat; // Saturated gas-oil ratio
|
||||
ADB rvSat; // Saturated oil-gas ratio
|
||||
|
||||
std::vector<double> soMax; // Maximum oil saturation
|
||||
|
||||
std::array<V, fipValues> fip;
|
||||
};
|
||||
|
||||
|
@ -463,6 +463,7 @@ typedef Eigen::Array<double,
|
||||
: rq(num_phases)
|
||||
, rsSat(ADB::null())
|
||||
, rvSat(ADB::null())
|
||||
, soMax()
|
||||
, fip()
|
||||
{
|
||||
}
|
||||
@ -662,6 +663,7 @@ typedef Eigen::Array<double,
|
||||
} else {
|
||||
state.rv = sd_.rvSat;
|
||||
}
|
||||
sd_.soMax = fluid_.satOilMax();
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -168,10 +168,10 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck&
|
||||
if (deck.hasKeyword("VAPPARS") && deck.hasKeyword("VAPOIL") && deck.hasKeyword("DISGAS")) {
|
||||
vap1_ = deck.getKeyword("VAPPARS").getRecord(0).getItem(0).get< double >(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<double>& 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<n; ++i) {
|
||||
if (satOilMax_[i] < s[np*i+posOil]) {
|
||||
satOilMax_[i] = s[np*i+posOil];
|
||||
}
|
||||
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<n; ++i) {
|
||||
if (satOilMax_[i] < s[np*i+posOil]) {
|
||||
satOilMax_[i] = s[np*i+posOil];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const std::vector<double>& 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<int>& 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<double>::epsilon());
|
||||
@ -943,7 +946,7 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck&
|
||||
const std::vector<int>& 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<double>::epsilon());
|
||||
|
@ -362,6 +362,9 @@ namespace Opm
|
||||
/// Update for max oil saturation.
|
||||
void updateSatOilMax(const std::vector<double>& saturation);
|
||||
|
||||
/// Returns the max oil saturation
|
||||
const std::vector<double>& 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.
|
||||
|
@ -154,7 +154,7 @@ public:
|
||||
|
||||
typedef std::vector<double> 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);
|
||||
|
@ -551,6 +551,8 @@ namespace Opm
|
||||
addToSimData( simData, "RSSAT", sd.rsSat );
|
||||
addToSimData( simData, "RVSAT", sd.rvSat );
|
||||
|
||||
addToSimData( simData, "SOMAX", sd.soMax );
|
||||
|
||||
return simData;
|
||||
}
|
||||
|
||||
|
@ -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<ReservoirResidualQuant> rq;
|
||||
ADB rsSat;
|
||||
ADB rvSat;
|
||||
std::vector<double> soMax;
|
||||
std::array<V, fipValues> fip;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user