mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Use phase pressures for the fluid properties
There has been an inconsitancy in which pressure to use in the evaluation of the fluid properties. With this commit the phase pressure is used for all the evaluation of the fluid properties.
This commit is contained in:
parent
c04351d4ac
commit
0a0a3b2ba6
@ -529,20 +529,28 @@ namespace {
|
|||||||
so = so - sw;
|
so = so - sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ADB& xvar = vars[ nextvar++ ];
|
||||||
if (active_[ Gas]) {
|
if (active_[ Gas]) {
|
||||||
// Define Sg Rs and Rv in terms of xvar.
|
// Define Sg Rs and Rv in terms of xvar.
|
||||||
const ADB& xvar = vars[ nextvar++ ];
|
|
||||||
const ADB& sg = isSg*xvar + isRv* so;
|
const ADB& sg = isSg*xvar + isRv* so;
|
||||||
state.saturation[ pu.phase_pos[ Gas ] ] = sg;
|
state.saturation[ pu.phase_pos[ Gas ] ] = sg;
|
||||||
so = so - sg;
|
so = so - sg;
|
||||||
const ADB rsSat = fluidRsSat(state.pressure, so, cells_);
|
}
|
||||||
const ADB rvSat = fluidRvSat(state.pressure, so, cells_);
|
|
||||||
|
|
||||||
|
if (active_[ Oil ]) {
|
||||||
|
// Note that so is never a primary variable.
|
||||||
|
state.saturation[ pu.phase_pos[ Oil ] ] = so;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active_[ Oil ] & active_[ Gas]) {
|
||||||
|
const std::vector<ADB> pressures = computePressures(state);
|
||||||
|
const ADB rsSat = fluidRsSat(pressures[ pu.phase_pos[ Oil ] ], state.saturation[ pu.phase_pos[ Oil ] ], cells_);
|
||||||
if (has_disgas_) {
|
if (has_disgas_) {
|
||||||
state.rs = (1-isRs) * rsSat + isRs*xvar;
|
state.rs = (1-isRs) * rsSat + isRs*xvar;
|
||||||
} else {
|
} else {
|
||||||
state.rs = rsSat;
|
state.rs = rsSat;
|
||||||
}
|
}
|
||||||
|
const ADB rvSat = fluidRvSat(pressures[ pu.phase_pos[ Gas ] ], state.saturation[ pu.phase_pos[ Gas ] ], cells_);
|
||||||
if (has_vapoil_) {
|
if (has_vapoil_) {
|
||||||
state.rv = (1-isRv) * rvSat + isRv*xvar;
|
state.rv = (1-isRv) * rvSat + isRv*xvar;
|
||||||
} else {
|
} else {
|
||||||
@ -550,10 +558,7 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active_[ Oil ]) {
|
|
||||||
// Note that so is never a primary variable.
|
|
||||||
state.saturation[ pu.phase_pos[ Oil ] ] = so;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Qs.
|
// Qs.
|
||||||
@ -626,7 +631,7 @@ namespace {
|
|||||||
const int nperf = wells_.well_connpos[wells_.number_of_wells];
|
const int nperf = wells_.well_connpos[wells_.number_of_wells];
|
||||||
const std::vector<int> well_cells(wells_.well_cells, wells_.well_cells + nperf);
|
const std::vector<int> well_cells(wells_.well_cells, wells_.well_cells + nperf);
|
||||||
// Compute b, rsmax, rvmax values for perforations.
|
// Compute b, rsmax, rvmax values for perforations.
|
||||||
const ADB perf_press = subset(state.pressure, well_cells);
|
const std::vector<ADB> pressures = computePressures(state);
|
||||||
const ADB perf_temp = subset(state.temperature, well_cells);
|
const ADB perf_temp = subset(state.temperature, well_cells);
|
||||||
std::vector<PhasePresence> perf_cond(nperf);
|
std::vector<PhasePresence> perf_cond(nperf);
|
||||||
const std::vector<PhasePresence>& pc = phaseCondition();
|
const std::vector<PhasePresence>& pc = phaseCondition();
|
||||||
@ -638,6 +643,7 @@ namespace {
|
|||||||
std::vector<double> rssat_perf(nperf, 0.0);
|
std::vector<double> rssat_perf(nperf, 0.0);
|
||||||
std::vector<double> rvsat_perf(nperf, 0.0);
|
std::vector<double> rvsat_perf(nperf, 0.0);
|
||||||
if (pu.phase_used[BlackoilPhases::Aqua]) {
|
if (pu.phase_used[BlackoilPhases::Aqua]) {
|
||||||
|
const ADB perf_press = subset(pressures[ pu.phase_pos[ Water ]], well_cells);
|
||||||
const ADB bw = fluid_.bWat(perf_press, perf_temp, well_cells);
|
const ADB bw = fluid_.bWat(perf_press, perf_temp, well_cells);
|
||||||
b.col(pu.phase_pos[BlackoilPhases::Aqua]) = bw.value();
|
b.col(pu.phase_pos[BlackoilPhases::Aqua]) = bw.value();
|
||||||
}
|
}
|
||||||
@ -645,6 +651,7 @@ namespace {
|
|||||||
const ADB perf_so = subset(state.saturation[pu.phase_pos[Oil]], well_cells);
|
const ADB perf_so = subset(state.saturation[pu.phase_pos[Oil]], well_cells);
|
||||||
if (pu.phase_used[BlackoilPhases::Liquid]) {
|
if (pu.phase_used[BlackoilPhases::Liquid]) {
|
||||||
const ADB perf_rs = subset(state.rs, well_cells);
|
const ADB perf_rs = subset(state.rs, well_cells);
|
||||||
|
const ADB perf_press = subset(pressures[ pu.phase_pos[ Oil ]], well_cells);
|
||||||
const ADB bo = fluid_.bOil(perf_press, perf_temp, perf_rs, perf_cond, well_cells);
|
const ADB bo = fluid_.bOil(perf_press, perf_temp, perf_rs, perf_cond, well_cells);
|
||||||
b.col(pu.phase_pos[BlackoilPhases::Liquid]) = bo.value();
|
b.col(pu.phase_pos[BlackoilPhases::Liquid]) = bo.value();
|
||||||
const V rssat = fluidRsSat(perf_press.value(), perf_so.value(), well_cells);
|
const V rssat = fluidRsSat(perf_press.value(), perf_so.value(), well_cells);
|
||||||
@ -652,6 +659,7 @@ namespace {
|
|||||||
}
|
}
|
||||||
if (pu.phase_used[BlackoilPhases::Vapour]) {
|
if (pu.phase_used[BlackoilPhases::Vapour]) {
|
||||||
const ADB perf_rv = subset(state.rv, well_cells);
|
const ADB perf_rv = subset(state.rv, well_cells);
|
||||||
|
const ADB perf_press = subset(pressures[ pu.phase_pos[ Gas ]], well_cells);
|
||||||
const ADB bg = fluid_.bGas(perf_press, perf_temp, perf_rv, perf_cond, well_cells);
|
const ADB bg = fluid_.bGas(perf_press, perf_temp, perf_rv, perf_cond, well_cells);
|
||||||
b.col(pu.phase_pos[BlackoilPhases::Vapour]) = bg.value();
|
b.col(pu.phase_pos[BlackoilPhases::Vapour]) = bg.value();
|
||||||
const V rvsat = fluidRvSat(perf_press.value(), perf_so.value(), well_cells);
|
const V rvsat = fluidRvSat(perf_press.value(), perf_so.value(), well_cells);
|
||||||
@ -1258,6 +1266,8 @@ namespace {
|
|||||||
assert(null.size() == 0);
|
assert(null.size() == 0);
|
||||||
const V zero = V::Zero(nc);
|
const V zero = V::Zero(nc);
|
||||||
const V one = V::Constant(nc, 1.0);
|
const V one = V::Constant(nc, 1.0);
|
||||||
|
const SolutionState sol_state_old = constantState(state, well_state);
|
||||||
|
const std::vector<ADB> pressures_old = computePressures(sol_state_old);
|
||||||
|
|
||||||
// store cell status in vectors
|
// store cell status in vectors
|
||||||
V isRs = V::Zero(nc,1);
|
V isRs = V::Zero(nc,1);
|
||||||
@ -1444,8 +1454,10 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// phase transitions so <-> rv
|
// phase transitions so <-> rv
|
||||||
const V rvSat0 = fluidRvSat(p_old, s_old.col(pu.phase_pos[Oil]), cells_);
|
const SolutionState sol_state = constantState(state, well_state);
|
||||||
const V rvSat = fluidRvSat(p, so, cells_);
|
const std::vector<ADB> pressures = computePressures(sol_state);
|
||||||
|
const V rvSat0 = fluidRvSat(pressures_old[ pu.phase_pos[Gas] ].value(), s_old.col(pu.phase_pos[Gas]), cells_);
|
||||||
|
const V rvSat = fluidRvSat(pressures[ pu.phase_pos[Gas] ].value(), sg, cells_);
|
||||||
|
|
||||||
if (has_vapoil_) {
|
if (has_vapoil_) {
|
||||||
// The obvious case
|
// The obvious case
|
||||||
|
Loading…
Reference in New Issue
Block a user