mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge remote-tracking branch 'upstream/master' into wellsmanager-rates
This commit is contained in:
commit
1548984acd
@ -7,6 +7,7 @@ void
|
|||||||
BlackoilState::init(const UnstructuredGrid& g, int num_phases) {
|
BlackoilState::init(const UnstructuredGrid& g, int num_phases) {
|
||||||
SimulatorState::init(g, num_phases);
|
SimulatorState::init(g, num_phases);
|
||||||
gor_.resize(g.number_of_cells, 0.) ;
|
gor_.resize(g.number_of_cells, 0.) ;
|
||||||
|
rv_.resize(g.number_of_cells,0.);
|
||||||
// surfvol_ intentionally empty, left to initBlackoilSurfvol
|
// surfvol_ intentionally empty, left to initBlackoilSurfvol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,13 +47,16 @@ namespace Opm
|
|||||||
|
|
||||||
std::vector<double>& surfacevol () { return surfvol_; }
|
std::vector<double>& surfacevol () { return surfvol_; }
|
||||||
std::vector<double>& gasoilratio () { return gor_ ; }
|
std::vector<double>& gasoilratio () { return gor_ ; }
|
||||||
|
std::vector<double>& rv () {return rv_ ; }
|
||||||
|
|
||||||
const std::vector<double>& surfacevol () const { return surfvol_; }
|
const std::vector<double>& surfacevol () const { return surfvol_; }
|
||||||
const std::vector<double>& gasoilratio () const { return gor_ ; }
|
const std::vector<double>& gasoilratio () const { return gor_ ; }
|
||||||
|
const std::vector<double>& rv () const {return rv_ ; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<double> surfvol_;
|
std::vector<double> surfvol_;
|
||||||
std::vector<double> gor_ ;
|
std::vector<double> gor_ ;
|
||||||
|
std::vector<double> rv_ ;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
@ -609,26 +609,26 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// Initialize surface volume from pressure and saturation by z = As.
|
/// Initialize surface volume from pressure and saturation by z = As.
|
||||||
/// Here the gas/oil ratio is used to compute an intial z for the
|
/// Here the solution gas/oil ratio or vapor oil/gas ratio is used to
|
||||||
/// computation of A.
|
/// compute an intial z for the computation of A.
|
||||||
template <class Props, class State>
|
template <class Props, class State>
|
||||||
void initBlackoilSurfvolUsingRS(const UnstructuredGrid& grid,
|
void initBlackoilSurfvolUsingRSorRV(const UnstructuredGrid& grid,
|
||||||
const Props& props,
|
const Props& props,
|
||||||
State& state)
|
State& state)
|
||||||
{
|
{
|
||||||
if (props.numPhases() != 3) {
|
if (props.numPhases() != 3) {
|
||||||
OPM_THROW(std::runtime_error, "initBlackoilSurfvol() is only supported in three-phase simulations.");
|
OPM_THROW(std::runtime_error, "initBlackoilSurfvol() is only supported in three-phase simulations.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<double>& rs = state.gasoilratio();
|
const std::vector<double>& rs = state.gasoilratio();
|
||||||
|
const std::vector<double>& rv = state.rv();
|
||||||
|
|
||||||
//make input for computation of the A matrix
|
//make input for computation of the A matrix
|
||||||
state.surfacevol() = state.saturation();
|
state.surfacevol() = state.saturation();
|
||||||
//const PhaseUsage pu = phaseUsageFromDeck(deck);
|
|
||||||
const PhaseUsage pu = props.phaseUsage();
|
const PhaseUsage pu = props.phaseUsage();
|
||||||
|
|
||||||
const int np = props.numPhases();
|
const int np = props.numPhases();
|
||||||
const int nc = grid.number_of_cells;
|
const int nc = grid.number_of_cells;
|
||||||
|
|
||||||
std::vector<double> allA_a(nc*np*np);
|
std::vector<double> allA_a(nc*np*np);
|
||||||
std::vector<double> allA_l(nc*np*np);
|
std::vector<double> allA_l(nc*np*np);
|
||||||
std::vector<double> allA_v(nc*np*np);
|
std::vector<double> allA_v(nc*np*np);
|
||||||
@ -641,6 +641,17 @@ namespace Opm
|
|||||||
allcells[c] = c;
|
allcells[c] = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<double> capPressures(nc*np);
|
||||||
|
props.capPress(nc,&state.saturation()[0],&allcells[0],&capPressures[0],NULL);
|
||||||
|
|
||||||
|
std::vector<double> Pw(nc);
|
||||||
|
std::vector<double> Pg(nc);
|
||||||
|
|
||||||
|
for (int c = 0; c < nc; ++c){
|
||||||
|
Pw[c] = state.pressure()[c] + capPressures[c*np + BlackoilPhases::Aqua];
|
||||||
|
Pg[c] = state.pressure()[c] + capPressures[c*np + BlackoilPhases::Vapour];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
double z_tmp;
|
double z_tmp;
|
||||||
|
|
||||||
@ -687,7 +698,7 @@ namespace Opm
|
|||||||
if(state.saturation()[np*c + p] > 0)
|
if(state.saturation()[np*c + p] > 0)
|
||||||
z_tmp = 1e10;
|
z_tmp = 1e10;
|
||||||
else
|
else
|
||||||
z_tmp = rs[c];
|
z_tmp = rv[c];
|
||||||
}
|
}
|
||||||
else if(p == BlackoilPhases::Vapour)
|
else if(p == BlackoilPhases::Vapour)
|
||||||
z_tmp = 1;
|
z_tmp = 1;
|
||||||
@ -717,7 +728,9 @@ namespace Opm
|
|||||||
z[2] += A_v[2 + np*col]*s[col];
|
z[2] += A_v[2 + np*col]*s[col];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
double ztmp = z[2];
|
||||||
z[2] += z[1]*rs[c];
|
z[2] += z[1]*rs[c];
|
||||||
|
z[1] += ztmp*rv[c];
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -739,10 +752,21 @@ namespace Opm
|
|||||||
int c_deck = (grid.global_cell == NULL) ? c : grid.global_cell[c];
|
int c_deck = (grid.global_cell == NULL) ? c : grid.global_cell[c];
|
||||||
state.gasoilratio()[c] = rs_deck[c_deck];
|
state.gasoilratio()[c] = rs_deck[c_deck];
|
||||||
}
|
}
|
||||||
initBlackoilSurfvolUsingRS(grid, props, state);
|
initBlackoilSurfvolUsingRSorRV(grid, props, state);
|
||||||
computeSaturation(props,state);
|
computeSaturation(props,state);
|
||||||
} else {
|
} else if (deck.hasField("RV")){
|
||||||
OPM_THROW(std::runtime_error, "Temporarily, we require the RS field.");
|
const std::vector<double>& rv_deck = deck.getFloatingPointValue("RV");
|
||||||
|
const int num_cells = grid.number_of_cells;
|
||||||
|
for (int c = 0; c < num_cells; ++c) {
|
||||||
|
int c_deck = (grid.global_cell == NULL) ? c : grid.global_cell[c];
|
||||||
|
state.rv()[c] = rv_deck[c_deck];
|
||||||
|
}
|
||||||
|
initBlackoilSurfvolUsingRSorRV(grid, props, state);
|
||||||
|
computeSaturation(props,state);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
OPM_THROW(std::runtime_error, "Temporarily, we require the RS or the RV field.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
36
tests/liveoil.DATA
Normal file
36
tests/liveoil.DATA
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
WATER
|
||||||
|
|
||||||
|
FIELD
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
.0 14.7 1.0000 1.20 /
|
||||||
|
.165 400. 1.0120 1.17 /
|
||||||
|
.335 800. 1.0255 1.14 /
|
||||||
|
.500 1200. 1.0380 1.11 /
|
||||||
|
.665 1600. 1.0510 1.08 /
|
||||||
|
.828 2000. 1.0630 1.06 /
|
||||||
|
.985 2400. 1.0750 1.03 /
|
||||||
|
1.130 2800. 1.0870 1.00 /
|
||||||
|
1.270 3200. 1.0985 .98 /
|
||||||
|
1.390 3600. 1.1100 .95 /
|
||||||
|
1.500 4000. 1.1200 .94
|
||||||
|
5000. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVDG
|
||||||
|
-- Pg Bg Vg
|
||||||
|
14.7 178.08 .0125
|
||||||
|
400. 5.4777 .0130
|
||||||
|
800. 2.7392 .0135
|
||||||
|
1200. 1.8198 .0140
|
||||||
|
1600. 1.3648 .0145
|
||||||
|
2000. 1.0957 .0150
|
||||||
|
2400. 0.9099 .0155
|
||||||
|
2800. 0.7799 .0160
|
||||||
|
3200. 0.6871 .0165
|
||||||
|
3600. 0.6035 .0170
|
||||||
|
4000. 0.5432 .0175 /
|
||||||
|
|
71
tests/wetgas.DATA
Normal file
71
tests/wetgas.DATA
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
|
||||||
|
FIELD
|
||||||
|
|
||||||
|
-- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL)
|
||||||
|
-- FROM SPE3 Blackoil Kleppe
|
||||||
|
--
|
||||||
|
-- 'Pressure' 'Oil FVF' 'Oil Visc'
|
||||||
|
PVDO
|
||||||
|
1214.7000 1.0632 0.3668
|
||||||
|
1814.7000 1.0518 0.4241
|
||||||
|
2414.7000 1.0418 0.5018
|
||||||
|
3014.7000 1.0332 0.6068
|
||||||
|
3214.7000 1.0308 0.6461
|
||||||
|
3364.7000 1.0291 0.6753
|
||||||
|
3414.7000 1.0285 0.6852
|
||||||
|
3443.8831 1.0282 0.6912
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Wet Gas PVT Properties (Vapourised Oil)
|
||||||
|
-- Column Properties are:
|
||||||
|
-- 'Gas Pressure' 'Gas OGR' 'Gas FVF' 'Gas Visc'
|
||||||
|
-- Units: psia stb /Mscf rb /Mscf cp
|
||||||
|
PVTG
|
||||||
|
1214.7000 0.0013130 2.2799 0.0149
|
||||||
|
0 2.2815 0.01488/
|
||||||
|
1814.7000 0.00353 1.4401 0.01791
|
||||||
|
0.001313 1.4429 0.01782
|
||||||
|
0 1.4445 0.01735 /
|
||||||
|
2414.7000 0.01102 1.0438 0.02328
|
||||||
|
0.00353 1.0495 0.02267
|
||||||
|
0.001313 1.0512 0.0225
|
||||||
|
0 1.0522 0.02240 /
|
||||||
|
3014.7000 0.0331 0.8456 0.0318
|
||||||
|
0.01102 0.8489 0.02924
|
||||||
|
0.00353 0.8500 0.02844
|
||||||
|
0.001313 0.8503 0.02820
|
||||||
|
0 0.8505 0.02807 /
|
||||||
|
3214.7000 0.0454 0.8082 0.03539
|
||||||
|
0.0331 0.8080 0.03371
|
||||||
|
0.01102 0.8075 0.03113
|
||||||
|
0.00353 0.8073 0.03029
|
||||||
|
0.001313 0.8073 0.03004
|
||||||
|
0 0.8073 0.02989 /
|
||||||
|
3364.7000 0.05670 0.7875 0.0384
|
||||||
|
0.04540 0.7860 0.03667
|
||||||
|
0.03310 0.7843 0.03515
|
||||||
|
0.01102 0.7814 0.03429
|
||||||
|
0.00353 0.7804 0.03162
|
||||||
|
0.001313 0.7801 0.03136
|
||||||
|
0 0.7799 0.03121 /
|
||||||
|
3416.7575 0.0612 0.7816 0.03955
|
||||||
|
0.0567 0.7809 0.0386
|
||||||
|
0.0454 0.7789 0.03717
|
||||||
|
0.0331 0.7768 0.03564
|
||||||
|
0.01102 0.7731 0.03296
|
||||||
|
0.00353 0.7718 0.03207
|
||||||
|
0.001313 0.7714 0.03181
|
||||||
|
0 0.7712 0.03166 /
|
||||||
|
3449.3322 0.0642 0.7783 0.0403
|
||||||
|
0.0612 0.7777 0.0395
|
||||||
|
0.0567 0.7769 0.03892
|
||||||
|
0.0454 0.7747 0.03748
|
||||||
|
0.0331 0.7723 0.03594
|
||||||
|
0.01102 0.7681 0.03325
|
||||||
|
0.00353 0.7666 0.03236
|
||||||
|
0.001313 0.7662 0.0321
|
||||||
|
0 0.7660 0.03194 /
|
||||||
|
/
|
Loading…
Reference in New Issue
Block a user