changes in test-dataset and initial adaptions to the new data set, plus corrections for ScalingFactor
This commit is contained in:
parent
8a5a159450
commit
e96778c440
@ -461,6 +461,7 @@ if(ENABLE_ECL_OUTPUT)
|
||||
tests/UDQ_TEST_WCONPROD_IUAD-2.DATA
|
||||
tests/UDQ_ACTIONX_TEST1.DATA
|
||||
tests/UDQ_ACTIONX_TEST1_U.DATA
|
||||
tests/TEST_AGGREGATE_MSW.DATA
|
||||
tests/include_example_pvt.txt
|
||||
tests/include_example_summary.txt
|
||||
tests/include_sgof.txt
|
||||
|
@ -66,7 +66,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
||||
|
||||
DeviceBaseStrength = 86,
|
||||
|
||||
AbsValICDLength = 87,
|
||||
ScalingFactor = 87,
|
||||
|
||||
CalibrFluidDensity = 88,
|
||||
CalibrFluidViscosity = 89,
|
||||
|
@ -76,6 +76,7 @@ namespace Opm {
|
||||
energy,
|
||||
energy_rate,
|
||||
icd_strength,
|
||||
aicd_strength,
|
||||
polymer_density,
|
||||
salinity,
|
||||
_count // New entries must be added *before* this
|
||||
|
@ -638,10 +638,11 @@ namespace {
|
||||
const auto& aicd = segment.autoICD();
|
||||
|
||||
rSeg[baseIndex + Ix::DeviceBaseStrength] =
|
||||
usys.from_si(M::icd_strength, aicd.strength());
|
||||
usys.from_si(M::aicd_strength, aicd.strength());
|
||||
|
||||
rSeg[baseIndex + Ix::AbsValICDLength] =
|
||||
usys.from_si(M::length, std::abs(aicd.length()));
|
||||
rSeg[baseIndex + Ix::ScalingFactor] = ((aicd.methodFlowScaling() == 1) ||
|
||||
((aicd.methodFlowScaling() < 0) && (aicd.length() < 0))) ?
|
||||
usys.from_si(M::length, aicd.scalingFactor()) : aicd.scalingFactor();
|
||||
|
||||
rSeg[baseIndex + Ix::CalibrFluidDensity] =
|
||||
usys.from_si(M::density, aicd.densityCalibration());
|
||||
|
@ -88,6 +88,7 @@ namespace {
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
};
|
||||
|
||||
static const double to_metric[] = {
|
||||
@ -127,6 +128,7 @@ namespace {
|
||||
1 / Metric::Energy,
|
||||
1 / ( Metric::Energy / Metric::Time ),
|
||||
1 / (Metric::Pressure / Opm::unit::square(Metric::GeomVolume / Metric::Time)),
|
||||
1 / (Metric::Pressure / Metric::Density / Opm::unit::square(Metric::GeomVolume / Metric::Time)),
|
||||
1 / Metric::PolymerDensity,
|
||||
1 / Metric::Salinity,
|
||||
};
|
||||
@ -168,6 +170,7 @@ namespace {
|
||||
Metric::Energy,
|
||||
Metric::Energy / Metric::Time,
|
||||
Metric::Pressure / Opm::unit::square(Metric::GeomVolume / Metric::Time),
|
||||
Metric::Pressure / Metric::Density / Opm::unit::square(Metric::GeomVolume / Metric::Time),
|
||||
Metric::PolymerDensity,
|
||||
Metric::Salinity,
|
||||
};
|
||||
@ -209,6 +212,7 @@ namespace {
|
||||
"KJ", /* energy */
|
||||
"KJ/DAY", /* energy rate*/
|
||||
"BARS/(RM3/DAY)2", /* ICD strength parameter */
|
||||
"BARS/(KG/SM3)/(RM3/DAY)2", /* AICD strength parameter */
|
||||
"KG / SM3", /*polymer density */
|
||||
"KG / SM3", /*salinity */
|
||||
};
|
||||
@ -272,6 +276,7 @@ namespace {
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
};
|
||||
|
||||
static const double to_field[] = {
|
||||
@ -311,6 +316,7 @@ namespace {
|
||||
1 / Field::Energy,
|
||||
1 / (Field::Energy / Field::Time),
|
||||
1 / (Field::Pressure / Opm::unit::square(Field::GeomVolume / Field::Time)),
|
||||
1 / (Field::Pressure / Field::Density / Opm::unit::square(Field::GeomVolume / Field::Time)),
|
||||
1 / Field::PolymerDensity,
|
||||
1 / Field::Salinity,
|
||||
};
|
||||
@ -352,6 +358,7 @@ namespace {
|
||||
Field::Energy,
|
||||
Field::Energy / Field::Time,
|
||||
Field::Pressure / Opm::unit::square(Field::GeomVolume / Field::Time),
|
||||
Field::Pressure / Field::Density / Opm::unit::square(Field::GeomVolume / Field::Time),
|
||||
Field::PolymerDensity,
|
||||
Field::Salinity,
|
||||
};
|
||||
@ -393,6 +400,7 @@ namespace {
|
||||
"BTU", /* energy */
|
||||
"BTU/DAY", /* energy rate*/
|
||||
"PSI/(RFT3/DAY)2", /* ICD strength parameter */
|
||||
"PSI/(LB/FT3)/(RFT3/DAY)2", /* AICD strength parameter */
|
||||
"LB/STB", /*polymer density */
|
||||
"LB/STB", /*salinity */
|
||||
};
|
||||
@ -456,6 +464,7 @@ namespace {
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
};
|
||||
|
||||
static const double to_lab[] = {
|
||||
@ -495,6 +504,7 @@ namespace {
|
||||
1 / Lab::Energy,
|
||||
1 / ( Lab::Energy / Lab::Time ),
|
||||
1 / (Lab::Pressure / Opm::unit::square(Lab::GeomVolume / Lab::Time)),
|
||||
1 / (Lab::Pressure / Lab::Density / Opm::unit::square(Lab::GeomVolume / Lab::Time)),
|
||||
1 / Lab::PolymerDensity,
|
||||
1 / Lab::Salinity,
|
||||
};
|
||||
@ -536,6 +546,7 @@ namespace {
|
||||
Lab::Energy,
|
||||
Lab::Energy / Lab::Time,
|
||||
Lab::Pressure / Opm::unit::square(Lab::GeomVolume / Lab::Time),
|
||||
Lab::Pressure / Lab::Density / Opm::unit::square(Lab::GeomVolume / Lab::Time),
|
||||
Lab::PolymerDensity,
|
||||
Lab::Salinity,
|
||||
};
|
||||
@ -577,6 +588,7 @@ namespace {
|
||||
"J", /* energy */
|
||||
"J/HR", /* energy */
|
||||
"ATM/(RCC/H)2", /* ICD strength parameter */
|
||||
"ATM/(G/SCC)/(RCC/H)2", /* AICD strength parameter */
|
||||
"G/SCC", /*polymer density */
|
||||
"G/SCC", /*salinity */
|
||||
};
|
||||
@ -640,6 +652,7 @@ namespace {
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
};
|
||||
|
||||
static const double to_pvt_m[] = {
|
||||
@ -679,6 +692,7 @@ namespace {
|
||||
1 / PVT_M::Energy,
|
||||
1 / ( PVT_M::Energy/ PVT_M::Time ),
|
||||
1 / (PVT_M::Pressure / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time)),
|
||||
1 / (PVT_M::Pressure / PVT_M::Density / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time)),
|
||||
1 / PVT_M::PolymerDensity,
|
||||
1 / PVT_M::Salinity,
|
||||
};
|
||||
@ -720,6 +734,7 @@ namespace {
|
||||
PVT_M::Energy,
|
||||
PVT_M::Energy / PVT_M::Time,
|
||||
PVT_M::Pressure / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time),
|
||||
PVT_M::Pressure / PVT_M::Density / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time),
|
||||
PVT_M::PolymerDensity,
|
||||
PVT_M::Salinity,
|
||||
};
|
||||
@ -761,6 +776,7 @@ namespace {
|
||||
"KJ" /* energy */,
|
||||
"KJ/DAY" /* energy */,
|
||||
"ATM/(RM3/DAY)2", /* ICD strength parameter */
|
||||
"ATM/(KG/SM3)/(RM3/DAY)2", /* AICD strength parameter */
|
||||
"KG/SM3", /*polymer density */
|
||||
"KG/SM3", /*salinity */
|
||||
};
|
||||
@ -824,6 +840,7 @@ namespace {
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
};
|
||||
|
||||
static const double to_input[] = {
|
||||
@ -865,6 +882,7 @@ namespace {
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
};
|
||||
|
||||
static const double from_input[] = {
|
||||
@ -906,6 +924,7 @@ namespace {
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
};
|
||||
|
||||
static constexpr const char* input_names[static_cast<int>(UnitSystem::measure::_count)] = {
|
||||
@ -945,6 +964,7 @@ namespace {
|
||||
"KJ", /* energy */
|
||||
"KJ/DAY", /* energy rate*/
|
||||
"BARS/(RM3/DAY)2", /* ICD strength parameter */
|
||||
"BARS/(KG/SM3)/(RM3/DAY)2", /* AICD strength parameter */
|
||||
"KG/SM3", /*polymer density */
|
||||
"KG/SM3", /*salinity */
|
||||
};
|
||||
|
493
tests/TEST_AGGREGATE_MSW.DATA
Normal file
493
tests/TEST_AGGREGATE_MSW.DATA
Normal file
@ -0,0 +1,493 @@
|
||||
-- This reservoir simulation deck is made available under the Open Database
|
||||
-- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in
|
||||
-- individual contents of the database are licensed under the Database Contents
|
||||
-- License: http://opendatacommons.org/licenses/dbcl/1.0/
|
||||
|
||||
-- Copyright (C) 2015 Statoil
|
||||
|
||||
-- This simulation is based on the data given in
|
||||
-- 'Comparison of Solutions to a Three-Dimensional
|
||||
-- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh,
|
||||
-- Journal of Petroleum Technology, January 1981
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
------------------------ SPE1 - CASE 1 ------------------------------------
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
RUNSPEC
|
||||
-- -------------------------------------------------------------------------
|
||||
|
||||
TITLE
|
||||
SPE1 - CASE 1
|
||||
|
||||
DIMENS
|
||||
10 5 10 /
|
||||
|
||||
-- The number of equilibration regions is inferred from the EQLDIMS
|
||||
-- keyword.
|
||||
EQLDIMS
|
||||
/
|
||||
|
||||
-- The number of PVTW tables is inferred from the TABDIMS keyword;
|
||||
-- when no data is included in the keyword the default values are used.
|
||||
TABDIMS
|
||||
/
|
||||
|
||||
OIL
|
||||
GAS
|
||||
WATER
|
||||
DISGAS
|
||||
-- As seen from figure 4 in Odeh, GOR is increasing with time,
|
||||
-- which means that dissolved gas is present
|
||||
|
||||
FIELD
|
||||
|
||||
START
|
||||
1 'JAN' 2015 /
|
||||
|
||||
WELLDIMS
|
||||
-- Item 1: maximum number of wells in the model
|
||||
-- - there are two wells in the problem; injector and producer
|
||||
-- Item 2: maximum number of grid blocks connected to any one well
|
||||
-- - must be one as the wells are located at specific grid blocks
|
||||
-- Item 3: maximum number of groups in the model
|
||||
-- - we are dealing with only one 'group'
|
||||
-- Item 4: maximum number of wells in any one group
|
||||
-- - there must be two wells in a group as there are two wells in total
|
||||
3 20 1 3 /
|
||||
|
||||
|
||||
WSEGDIMS
|
||||
2 32 5 /
|
||||
|
||||
UNIFIN
|
||||
UNIFOUT
|
||||
|
||||
START
|
||||
1 'JAN' 2015 /
|
||||
|
||||
GRID
|
||||
|
||||
-- The INIT keyword is used to request an .INIT file. The .INIT file
|
||||
-- is written before the simulation actually starts, and contains grid
|
||||
-- properties and saturation tables as inferred from the input
|
||||
-- deck. There are no other keywords which can be used to configure
|
||||
-- exactly what is written to the .INIT file.
|
||||
INIT
|
||||
|
||||
|
||||
-- -------------------------------------------------------------------------
|
||||
--NOECHO
|
||||
|
||||
BOX
|
||||
1 10 1 5 1 1 /
|
||||
|
||||
TOPS
|
||||
50*7000 /
|
||||
|
||||
BOX
|
||||
1 10 1 5 1 10 /
|
||||
|
||||
DXV
|
||||
10*100 /
|
||||
DYV
|
||||
5*100 /
|
||||
DZ
|
||||
100*20
|
||||
50*100
|
||||
350*20
|
||||
/
|
||||
|
||||
EQUALS
|
||||
-- 'DX' 100 /
|
||||
-- 'DY' 100 /
|
||||
'PERMX' 500 /
|
||||
'PERMZ' 50 /
|
||||
-- 'DZ' 20 /
|
||||
'PORO' 0.2 /
|
||||
-- 'TOPS' 7000 1 10 1 5 1 1 /
|
||||
-- 'DZ' 100 1 10 1 5 3 3 /
|
||||
-- 'PORO' 0.0 1 10 1 5 3 3 /
|
||||
/
|
||||
|
||||
COPY
|
||||
PERMX PERMY /
|
||||
/
|
||||
|
||||
|
||||
ECHO
|
||||
|
||||
PROPS
|
||||
-- -------------------------------------------------------------------------
|
||||
|
||||
PVTW
|
||||
-- Item 1: pressure reference (psia)
|
||||
-- Item 2: water FVF (rb per bbl or rb per stb)
|
||||
-- Item 3: water compressibility (psi^{-1})
|
||||
-- Item 4: water viscosity (cp)
|
||||
-- Item 5: water 'viscosibility' (psi^{-1})
|
||||
|
||||
-- Using values from Norne:
|
||||
-- In METRIC units:
|
||||
-- 277.0 1.038 4.67E-5 0.318 0.0 /
|
||||
-- In FIELD units:
|
||||
4017.55 1.038 3.22E-6 0.318 0.0 /
|
||||
|
||||
ROCK
|
||||
-- Item 1: reference pressure (psia)
|
||||
-- Item 2: rock compressibility (psi^{-1})
|
||||
|
||||
-- Using values from table 1 in Odeh:
|
||||
14.7 3E-6 /
|
||||
|
||||
SWOF
|
||||
-- Column 1: water saturation
|
||||
-- - this has been set to (almost) equally spaced values from 0.12 to 1
|
||||
-- Column 2: water relative permeability
|
||||
-- - generated from the Corey-type approx. formula
|
||||
-- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12
|
||||
-- Column 3: oil relative permeability when only oil and water are present
|
||||
-- - we will use the same values as in column 3 in SGOF.
|
||||
-- This is not really correct, but since only the first
|
||||
-- two values are of importance, this does not really matter
|
||||
-- Column 4: water-oil capillary pressure (psi)
|
||||
|
||||
0.12 0 1 0
|
||||
0.18 4.64876033057851E-008 1 0
|
||||
0.24 0.000000186 0.997 0
|
||||
0.3 4.18388429752066E-007 0.98 0
|
||||
0.36 7.43801652892562E-007 0.7 0
|
||||
0.42 1.16219008264463E-006 0.35 0
|
||||
0.48 1.67355371900826E-006 0.2 0
|
||||
0.54 2.27789256198347E-006 0.09 0
|
||||
0.6 2.97520661157025E-006 0.021 0
|
||||
0.66 3.7654958677686E-006 0.01 0
|
||||
0.72 4.64876033057851E-006 0.001 0
|
||||
0.78 0.000005625 0.0001 0
|
||||
0.84 6.69421487603306E-006 0 0
|
||||
0.91 8.05914256198347E-006 0 0
|
||||
1 0.00001 0 0 /
|
||||
|
||||
|
||||
SGOF
|
||||
-- Column 1: gas saturation
|
||||
-- Column 2: gas relative permeability
|
||||
-- Column 3: oil relative permeability when oil, gas and connate water are present
|
||||
-- Column 4: oil-gas capillary pressure (psi)
|
||||
-- - stated to be zero in Odeh's paper
|
||||
|
||||
-- Values in column 1-3 are taken from table 3 in Odeh's paper:
|
||||
0 0 1 0
|
||||
0.001 0 1 0
|
||||
0.02 0 0.997 0
|
||||
0.05 0.005 0.980 0
|
||||
0.12 0.025 0.700 0
|
||||
0.2 0.075 0.350 0
|
||||
0.25 0.125 0.200 0
|
||||
0.3 0.190 0.090 0
|
||||
0.4 0.410 0.021 0
|
||||
0.45 0.60 0.010 0
|
||||
0.5 0.72 0.001 0
|
||||
0.6 0.87 0.0001 0
|
||||
0.7 0.94 0.000 0
|
||||
0.85 0.98 0.000 0
|
||||
0.88 0.984 0.000 0 /
|
||||
--1.00 1.0 0.000 0 /
|
||||
-- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF
|
||||
-- must not be greater than 1, but Eclipse still runs
|
||||
-- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88
|
||||
-- The corresponding krg value was estimated by assuming linear rel. between
|
||||
-- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given)
|
||||
|
||||
DENSITY
|
||||
-- Density (lb per ft³) at surface cond. of
|
||||
-- oil, water and gas, respectively (in that order)
|
||||
|
||||
-- Using values from Norne:
|
||||
-- In METRIC units:
|
||||
-- 859.5 1033.0 0.854 /
|
||||
-- In FIELD units:
|
||||
53.66 64.49 0.0533 /
|
||||
|
||||
PVDG
|
||||
-- Column 1: gas phase pressure (psia)
|
||||
-- Column 2: gas formation volume factor (rb per Mscf)
|
||||
-- - in Odeh's paper the units are said to be given in rb per bbl,
|
||||
-- but this is assumed to be a mistake: FVF-values in Odeh's paper
|
||||
-- are given in rb per scf, not rb per bbl. This will be in
|
||||
-- agreement with conventions
|
||||
-- Column 3: gas viscosity (cP)
|
||||
|
||||
-- Using values from lower right table in Odeh's table 2:
|
||||
14.700 166.666 0.008000
|
||||
264.70 12.0930 0.009600
|
||||
514.70 6.27400 0.011200
|
||||
1014.7 3.19700 0.014000
|
||||
2014.7 1.61400 0.018900
|
||||
2514.7 1.29400 0.020800
|
||||
3014.7 1.08000 0.022800
|
||||
4014.7 0.81100 0.026800
|
||||
5014.7 0.64900 0.030900
|
||||
9014.7 0.38600 0.047000 /
|
||||
|
||||
PVTO
|
||||
-- Column 1: dissolved gas-oil ratio (Mscf per stb)
|
||||
-- Column 2: bubble point pressure (psia)
|
||||
-- Column 3: oil FVF for saturated oil (rb per stb)
|
||||
-- Column 4: oil viscosity for saturated oil (cP)
|
||||
|
||||
-- Use values from top left table in Odeh's table 2:
|
||||
0.00100 14.7 1.0620 1.0400 /
|
||||
0.09050 264.7 1.1500 0.9750 /
|
||||
0.18000 514.7 1.2070 0.9100 /
|
||||
0.37100 1014.7 1.2950 0.8300 /
|
||||
0.63600 2014.7 1.4350 0.6950 /
|
||||
0.77500 2514.7 1.5000 0.6410 /
|
||||
0.93000 3014.7 1.5650 0.5940 /
|
||||
1.27000 4014.7 1.6950 0.5100
|
||||
5014.7 1.6710 0.5490
|
||||
9014.7 1.5790 0.7400 /
|
||||
1.61800 5014.7 1.8270 0.4490
|
||||
9014.7 1.7260 0.6050 /
|
||||
2.00000 8014.7 1.9500 0.3000
|
||||
9014.7 1.8500 0.5500 /
|
||||
/
|
||||
-- It is required to enter data for undersaturated oil for the highest GOR
|
||||
-- (i.e. the last row) in the PVTO table.
|
||||
-- In order to fulfill this requirement, values for oil FVF and viscosity
|
||||
-- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated:
|
||||
-- It has been assumed that there is a linear relation between the GOR
|
||||
-- and the FVF when keeping the pressure constant at 9014.7psia.
|
||||
-- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984
|
||||
-- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil,
|
||||
-- so it is possible to use the assumption described above.
|
||||
-- An equivalent approximation for the viscosity has been used.
|
||||
|
||||
SOLUTION
|
||||
-- -------------------------------------------------------------------------
|
||||
|
||||
EQUIL
|
||||
-- Item 1: datum depth (ft)
|
||||
-- Item 2: pressure at datum depth (psia)
|
||||
-- - Odeh's table 1 says that initial reservoir pressure is
|
||||
-- 4800 psi at 8400ft, which explains choice of item 1 and 2
|
||||
-- Item 3: depth of water-oil contact (ft)
|
||||
-- - chosen to be directly under the reservoir
|
||||
-- Item 4: oil-water capillary pressure at the water oil contact (psi)
|
||||
-- - given to be 0 in Odeh's paper
|
||||
-- Item 5: depth of gas-oil contact (ft)
|
||||
-- - chosen to be directly above the reservoir
|
||||
-- Item 6: gas-oil capillary pressure at gas-oil contact (psi)
|
||||
-- - given to be 0 in Odeh's paper
|
||||
-- Item 7: RSVD-table
|
||||
-- Item 8: RVVD-table
|
||||
-- Item 9: Set to 0 as this is the only value supported by OPM
|
||||
|
||||
-- Item #: 1 2 3 4 5 6 7 8 9
|
||||
7200 4800 7300 0 7000 0 1 0 0 /
|
||||
|
||||
RSVD
|
||||
-- Dissolved GOR is initially constant with depth through the reservoir.
|
||||
-- The reason is that the initial reservoir pressure given is higher
|
||||
---than the bubble point presssure of 4014.7psia, meaning that there is no
|
||||
-- free gas initially present.
|
||||
7000 1.270
|
||||
8000 1.270 /
|
||||
|
||||
SUMMARY
|
||||
-- -------------------------------------------------------------------------
|
||||
|
||||
-- 1a) Oil rate vs time
|
||||
FOPR
|
||||
-- Field Oil Production Rate
|
||||
|
||||
-- 1b) GOR vs time
|
||||
WGOR
|
||||
-- Well Gas-Oil Ratio
|
||||
'PROD'
|
||||
/
|
||||
-- Using FGOR instead of WGOR:PROD results in the same graph
|
||||
FGOR
|
||||
|
||||
|
||||
-- In order to compare Eclipse with Flow:
|
||||
WBHP
|
||||
/
|
||||
WGIR
|
||||
/
|
||||
WGIT
|
||||
/
|
||||
WGPR
|
||||
/
|
||||
WGPT
|
||||
/
|
||||
WOIR
|
||||
/
|
||||
WOIT
|
||||
|
||||
/
|
||||
WOPR
|
||||
|
||||
/
|
||||
WOPT
|
||||
/
|
||||
WWIR
|
||||
/
|
||||
WWIT
|
||||
/
|
||||
WWPR
|
||||
/
|
||||
WWPT
|
||||
/
|
||||
|
||||
SOFR
|
||||
'PROD' /
|
||||
'WINJ' /
|
||||
/
|
||||
|
||||
SPR
|
||||
'PROD' /
|
||||
'WINJ' /
|
||||
/
|
||||
|
||||
SPRD
|
||||
'PROD' /
|
||||
'WINJ' /
|
||||
/
|
||||
|
||||
|
||||
SCHEDULE
|
||||
-- -------------------------------------------------------------------------
|
||||
|
||||
TUNING
|
||||
1* 1. /
|
||||
/
|
||||
20 1 50 1 16 16 /
|
||||
|
||||
TUNINGDP
|
||||
/
|
||||
|
||||
|
||||
RPTSCHED
|
||||
'PRES' 'SGAS' 'RS' 'WELLS=5' WELSPECS /
|
||||
|
||||
RPTRST
|
||||
'BASIC=2' /
|
||||
|
||||
|
||||
-- If no resolution (i.e. case 1), the two following lines must be added:
|
||||
--DRSDT
|
||||
-- 0 /
|
||||
-- if DRSDT is set to 0, GOR cannot rise and free gas does not
|
||||
-- dissolve in undersaturated oil -> constant bubble point pressure
|
||||
|
||||
WELSPECS
|
||||
'PROD' 'G' 1 5 7030 'OIL' 0.0 'STD' 'STOP' /
|
||||
'WINJ' 'G' 10 1 7030 'WAT' 0.0 'STD' 'STOP' /
|
||||
/
|
||||
|
||||
COMPDAT
|
||||
|
||||
'PROD' 1 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 2 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 3 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 4 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 5 5 2 2 3* 0.2 3* 'X' /
|
||||
|
||||
'WINJ' 10 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 9 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 8 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 7 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 6 1 9 9 3* 0.2 3* 'X' /
|
||||
/
|
||||
|
||||
WELSEGS
|
||||
|
||||
-- Name Dep 1 Tlen 1 Vol 1
|
||||
'PROD' 7010 10 0.31 'INC' /
|
||||
|
||||
-- First Last Branch Outlet Length Depth Diam Ruff Area Vol
|
||||
-- Seg Seg Num Seg Chang
|
||||
-- Main Stem
|
||||
2 2 1 1 20 20 0.2 1.E-3 1* 1* /
|
||||
-- Top Branch
|
||||
3 3 2 2 50 0 0.2 1.E-3 1* 1* /
|
||||
4 7 2 3 100 0 0.2 1.E-3 1* 1* /
|
||||
8 8 3 4 0.32800 0 0.500 3.3E-5 /
|
||||
9 9 4 5 0.32800 0 0.500 3.3E-5 /
|
||||
10 10 5 6 0.32800 0 0.500 3.3E-5 /
|
||||
/
|
||||
|
||||
COMPSEGS
|
||||
|
||||
-- Name
|
||||
'PROD' /
|
||||
|
||||
-- I J K Brn Start End Dirn End
|
||||
-- No Length Length Penet Range
|
||||
-- Top Branch
|
||||
1 5 2 2 30 130 'X' 3* /
|
||||
2 5 2 2 130 230 'X' 3* /
|
||||
3 5 2 2 230 330 'X' 3* /
|
||||
4 5 2 2 330 430 'X' 3* /
|
||||
5 5 2 2 430 530 'X' 3* /
|
||||
-- Middle Branch
|
||||
/
|
||||
|
||||
WSEGAICD
|
||||
-- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
|
||||
PROD 8 8 3.260E-05 0.06391 63.678 0.48 1* 1* 1* 1 1* 2.1 1.2 OPEN 1* 1* 1* 1* 1* 1* /
|
||||
PROD 9 9 3.260E-05 0.07448 63.678 0.48 1* 1* 1* 1 1* 2.1 1.2 OPEN 1* 1* 1* 1* 1* 1* /
|
||||
PROD 10 10 3.260E-05 0.0876 63.678 0.48 0.53 0.048 4.89 0 9.876E6 2.1 1.2 OPEN 0.92 0.89 0.91 1.01 1.02 1.03 /
|
||||
/
|
||||
|
||||
WELSEGS
|
||||
|
||||
-- Name Dep 1 Tlen 1 Vol 1
|
||||
'WINJ' 7010 10 0.31 'INC' /
|
||||
|
||||
-- First Last Branch Outlet Length Depth Diam Ruff Area Vol
|
||||
-- Seg Seg Num Seg Chang
|
||||
-- Main Stem
|
||||
2 13 1 1 20 20 0.2 1.E-3 1* 1* /
|
||||
|
||||
-- Bottom Branch
|
||||
14 14 2 13 50 0 0.2 1.E-3 1* 1* /
|
||||
15 18 2 14 100 0 0.2 1.E-3 1* 1* /
|
||||
/
|
||||
|
||||
COMPSEGS
|
||||
|
||||
-- Name
|
||||
'WINJ' /
|
||||
|
||||
-- I J K Brn Start End Dirn End
|
||||
-- No Length Length Penet Range
|
||||
|
||||
-- Bottom Branch
|
||||
10 1 9 2 270 370 'X' 3* /
|
||||
9 1 9 2 370 470 'X' 3* /
|
||||
8 1 9 2 470 570 'X' 3* /
|
||||
7 1 9 2 570 670 'X' 3* /
|
||||
6 1 9 2 670 770 'X' 3* /
|
||||
/
|
||||
|
||||
|
||||
WCONPROD
|
||||
'PROD' 'OPEN' 'GRAT' 2* 100000. 2000 1* 2500 1* /
|
||||
/
|
||||
|
||||
WCONINJE
|
||||
'WINJ' 'WAT' 'OPEN' 'RESV' 1* 2000 8000 1* /
|
||||
/
|
||||
|
||||
|
||||
TSTEP
|
||||
--Advance the simulater once a month for TEN years:
|
||||
30
|
||||
30
|
||||
180.
|
||||
/
|
||||
|
||||
END
|
@ -19,6 +19,7 @@
|
||||
|
||||
#define BOOST_TEST_MODULE Aggregate_MSW_Data
|
||||
#include <opm/output/eclipse/AggregateMSWData.hpp>
|
||||
#include <opm/output/eclipse/WriteRestartHelpers.hpp>
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
@ -27,6 +28,7 @@
|
||||
|
||||
#include <opm/output/eclipse/VectorItems/intehead.hpp>
|
||||
#include <opm/output/eclipse/VectorItems/well.hpp>
|
||||
#include <opm/output/eclipse/VectorItems/msw.hpp>
|
||||
|
||||
#include <opm/output/data/Wells.hpp>
|
||||
|
||||
@ -45,468 +47,12 @@
|
||||
#include <iostream>
|
||||
#include <cstddef>
|
||||
|
||||
struct MockIH
|
||||
{
|
||||
MockIH(const int numWells,
|
||||
|
||||
const int nsegWell = 2, // E100
|
||||
const int isegPerWell = 22, // E100
|
||||
const int rsegPerWell = 146, // E100
|
||||
const int ilbsPerWell = 5, // E100
|
||||
const int ilbrPerWell = 10); // E100
|
||||
|
||||
|
||||
std::vector<int> value;
|
||||
|
||||
using Sz = std::vector<int>::size_type;
|
||||
|
||||
Sz nwells;
|
||||
|
||||
Sz nsegwl;
|
||||
Sz nswlmx;
|
||||
Sz nsegmx;
|
||||
Sz nlbrmx;
|
||||
Sz nisegz;
|
||||
Sz nrsegz;
|
||||
Sz nilbrz;
|
||||
};
|
||||
|
||||
MockIH::MockIH(const int numWells,
|
||||
const int nsegWell,
|
||||
const int isegPerWell,
|
||||
const int rsegPerWell,
|
||||
const int ilbsPerWell,
|
||||
const int ilbrPerWell )
|
||||
: value(411, 0)
|
||||
{
|
||||
using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead;
|
||||
|
||||
this->nwells = this->value[Ix::NWELLS] = numWells;
|
||||
|
||||
this->nsegwl = this->value[Ix::NSEGWL] = nsegWell;
|
||||
this->nswlmx = this->value[Ix::NSWLMX] = 2;
|
||||
this->nsegmx = this->value[Ix::NSEGMX] = 32;
|
||||
this->nisegz = this->value[Ix::NISEGZ] = isegPerWell;
|
||||
this->nrsegz = this->value[Ix::NRSEGZ] = rsegPerWell;
|
||||
this->nlbrmx = this->value[Ix::NLBRMX] = ilbsPerWell;
|
||||
this->nilbrz = this->value[Ix::NILBRZ] = ilbrPerWell;
|
||||
}
|
||||
|
||||
namespace {
|
||||
Opm::Deck first_sim()
|
||||
{
|
||||
// Mostly copy of tests/FIRST_SIM.DATA
|
||||
const std::string input = std::string {
|
||||
R"~(
|
||||
RUNSPEC
|
||||
|
||||
TITLE
|
||||
TWO MULTI-LATERAL WELLS; PRODUCER AND INJECTOR - MULTI-SEGMENT BRANCHES
|
||||
namespace VI = ::Opm::RestartIO::Helpers::VectorItems;
|
||||
|
||||
DIMENS
|
||||
10 5 10 /
|
||||
|
||||
|
||||
OIL
|
||||
|
||||
WATER
|
||||
|
||||
GAS
|
||||
|
||||
DISGAS
|
||||
|
||||
FIELD
|
||||
|
||||
TABDIMS
|
||||
1 1 15 15 2 15 /
|
||||
|
||||
EQLDIMS
|
||||
2 /
|
||||
|
||||
WELLDIMS
|
||||
3 20 1 3 /
|
||||
|
||||
WSEGDIMS
|
||||
2 32 5 /
|
||||
|
||||
UNIFIN
|
||||
UNIFOUT
|
||||
|
||||
--FMTIN
|
||||
--FMTOUT
|
||||
|
||||
START
|
||||
1 'JAN' 2015 /
|
||||
|
||||
-- RPTRUNSP
|
||||
|
||||
GRID =========================================================
|
||||
|
||||
--NOGGF
|
||||
BOX
|
||||
1 10 1 5 1 1 /
|
||||
|
||||
TOPS
|
||||
50*7000 /
|
||||
|
||||
BOX
|
||||
1 10 1 5 1 10 /
|
||||
|
||||
DXV
|
||||
10*100 /
|
||||
DYV
|
||||
5*100 /
|
||||
DZV
|
||||
2*20 100 7*20 /
|
||||
|
||||
EQUALS
|
||||
-- 'DX' 100 /
|
||||
-- 'DY' 100 /
|
||||
'PERMX' 50 /
|
||||
'PERMZ' 5 /
|
||||
-- 'DZ' 20 /
|
||||
'PORO' 0.2 /
|
||||
-- 'TOPS' 7000 1 10 1 5 1 1 /
|
||||
-- 'DZ' 100 1 10 1 5 3 3 /
|
||||
-- 'PORO' 0.0 1 10 1 5 3 3 /
|
||||
/
|
||||
|
||||
COPY
|
||||
PERMX PERMY /
|
||||
/
|
||||
|
||||
RPTGRID
|
||||
-- Report Levels for Grid Section Data
|
||||
--
|
||||
/
|
||||
|
||||
PORO
|
||||
500*0.15 /
|
||||
|
||||
PROPS ==========================================================
|
||||
|
||||
-- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS
|
||||
-- A FUNCTION OF WATER SATURATION.
|
||||
--
|
||||
-- SWAT KRW PCOW
|
||||
SWFN
|
||||
|
||||
0.12 0 0
|
||||
1.0 0.00001 0 /
|
||||
|
||||
-- SIMILARLY FOR GAS
|
||||
--
|
||||
-- SGAS KRG PCOG
|
||||
SGFN
|
||||
|
||||
0 0 0
|
||||
0.02 0 0
|
||||
0.05 0.005 0
|
||||
0.12 0.025 0
|
||||
0.2 0.075 0
|
||||
0.25 0.125 0
|
||||
0.3 0.19 0
|
||||
0.4 0.41 0
|
||||
0.45 0.6 0
|
||||
0.5 0.72 0
|
||||
0.6 0.87 0
|
||||
0.7 0.94 0
|
||||
0.85 0.98 0
|
||||
1.0 1.0 0
|
||||
/
|
||||
|
||||
-- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION
|
||||
-- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES
|
||||
--
|
||||
-- SOIL KROW KROG
|
||||
SOF3
|
||||
|
||||
0 0 0
|
||||
0.18 0 0
|
||||
0.28 0.0001 0.0001
|
||||
0.38 0.001 0.001
|
||||
0.43 0.01 0.01
|
||||
0.48 0.021 0.021
|
||||
0.58 0.09 0.09
|
||||
0.63 0.2 0.2
|
||||
0.68 0.35 0.35
|
||||
0.76 0.7 0.7
|
||||
0.83 0.98 0.98
|
||||
0.86 0.997 0.997
|
||||
0.879 1 1
|
||||
0.88 1 1 /
|
||||
|
||||
|
||||
-- PVT PROPERTIES OF WATER
|
||||
--
|
||||
-- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY
|
||||
PVTW
|
||||
4014.7 1.029 3.13D-6 0.31 0 /
|
||||
|
||||
-- ROCK COMPRESSIBILITY
|
||||
--
|
||||
-- REF. PRES COMPRESSIBILITY
|
||||
ROCK
|
||||
14.7 3.0D-6 /
|
||||
|
||||
-- SURFACE DENSITIES OF RESERVOIR FLUIDS
|
||||
--
|
||||
-- OIL WATER GAS
|
||||
DENSITY
|
||||
49.1 64.79 0.06054 /
|
||||
|
||||
-- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL)
|
||||
-- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS
|
||||
--
|
||||
-- PGAS BGAS VISGAS
|
||||
PVDG
|
||||
14.7 166.666 0.008
|
||||
264.7 12.093 0.0096
|
||||
514.7 6.274 0.0112
|
||||
1014.7 3.197 0.014
|
||||
2014.7 1.614 0.0189
|
||||
2514.7 1.294 0.0208
|
||||
3014.7 1.080 0.0228
|
||||
4014.7 0.811 0.0268
|
||||
5014.7 0.649 0.0309
|
||||
9014.7 0.386 0.047 /
|
||||
|
||||
-- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS)
|
||||
-- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL
|
||||
--
|
||||
-- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY
|
||||
-- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF
|
||||
-- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA
|
||||
-- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE
|
||||
-- SUPPLIED FOR THE HIGHEST RS (1.618).
|
||||
--
|
||||
-- RS POIL FVFO VISO
|
||||
PVTO
|
||||
0.001 14.7 1.062 1.04 /
|
||||
0.0905 264.7 1.15 0.975 /
|
||||
0.18 514.7 1.207 0.91 /
|
||||
0.371 1014.7 1.295 0.83 /
|
||||
0.636 2014.7 1.435 0.695 /
|
||||
0.775 2514.7 1.5 0.641 /
|
||||
0.93 3014.7 1.565 0.594 /
|
||||
1.270 4014.7 1.695 0.51
|
||||
5014.7 1.671 0.549
|
||||
9014.7 1.579 0.74 /
|
||||
1.618 5014.7 1.827 0.449
|
||||
9014.7 1.726 0.605 /
|
||||
/
|
||||
|
||||
|
||||
RPTPROPS
|
||||
-- PROPS Reporting Options
|
||||
--
|
||||
/
|
||||
|
||||
REGIONS ===========================================================
|
||||
|
||||
|
||||
FIPNUM
|
||||
|
||||
100*1
|
||||
400*2
|
||||
/
|
||||
|
||||
EQLNUM
|
||||
|
||||
100*1
|
||||
400*2
|
||||
/
|
||||
|
||||
RPTREGS
|
||||
|
||||
/
|
||||
|
||||
SOLUTION ============================================================
|
||||
|
||||
EQUIL
|
||||
7020.00 2700.00 7990.00 .00000 7200.00 .00000 0 0 5 /
|
||||
7200.00 3700.00 7300.00 .00000 7100.00 .00000 1 0 5 /
|
||||
|
||||
RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83
|
||||
7000.0 1.0000
|
||||
7990.0 1.0000
|
||||
/
|
||||
7000.0 1.0000
|
||||
7400.0 1.0000
|
||||
/
|
||||
|
||||
RPTRST
|
||||
-- Restart File Output Control
|
||||
--
|
||||
'BASIC=2' 'FLOWS' 'POT' 'PRES' /
|
||||
|
||||
--RPTSOL
|
||||
--
|
||||
-- Initialisation Print Output
|
||||
--
|
||||
--'PRES' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=1' 'FIP=2' 'EQUIL' 'RSVD' /
|
||||
|
||||
SUMMARY ===========================================================
|
||||
|
||||
FOPR
|
||||
|
||||
WOPR
|
||||
'PROD'
|
||||
/
|
||||
|
||||
FGPR
|
||||
|
||||
FWPR
|
||||
|
||||
FWIR
|
||||
|
||||
FWCT
|
||||
|
||||
FGOR
|
||||
|
||||
--RUNSUM
|
||||
|
||||
ALL
|
||||
|
||||
MSUMLINS
|
||||
|
||||
MSUMNEWT
|
||||
|
||||
SEPARATE
|
||||
|
||||
SCHEDULE ===========================================================
|
||||
|
||||
DEBUG
|
||||
1 3 /
|
||||
|
||||
DRSDT
|
||||
1.0E20 /
|
||||
|
||||
RPTSCHED
|
||||
'PRES' 'SWAT' 'SGAS' 'RESTART=1' 'RS' 'WELLS=2' 'SUMMARY=2'
|
||||
'CPU=2' 'WELSPECS' 'NEWTON=2' /
|
||||
|
||||
NOECHO
|
||||
|
||||
|
||||
ECHO
|
||||
|
||||
WELSPECS
|
||||
'PROD' 'G' 1 5 7030 'OIL' 0.0 'STD' 'STOP' /
|
||||
'WINJ' 'G' 10 1 7030 'WAT' 0.0 'STD' 'STOP' /
|
||||
/
|
||||
|
||||
COMPDAT
|
||||
|
||||
'PROD' 1 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 2 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 3 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 4 5 2 2 3* 0.2 3* 'X' /
|
||||
'PROD' 5 5 2 2 3* 0.2 3* 'X' /
|
||||
|
||||
'WINJ' 10 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 9 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 8 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 7 1 9 9 3* 0.2 3* 'X' /
|
||||
'WINJ' 6 1 9 9 3* 0.2 3* 'X' /
|
||||
/
|
||||
|
||||
WELSEGS
|
||||
|
||||
-- Name Dep 1 Tlen 1 Vol 1
|
||||
'PROD' 7010 10 0.31 'INC' /
|
||||
|
||||
-- First Last Branch Outlet Length Depth Diam Ruff Area Vol
|
||||
-- Seg Seg Num Seg Chang
|
||||
-- Main Stem
|
||||
2 12 1 1 20 20 0.2 1.E-3 1* 1* /
|
||||
-- Top Branch
|
||||
13 13 2 3 50 0 0.2 1.E-3 1* 1* /
|
||||
14 17 2 13 100 0 0.2 1.E-3 1* 1* /
|
||||
18 18 2 3 0.10000 0 0.15200 1.E-5 /
|
||||
19 19 2 4 0.10000 0 0.15200 1.E-5 /
|
||||
20 20 2 5 0.10000 0 0.15200 1.E-5 /
|
||||
/
|
||||
|
||||
COMPSEGS
|
||||
|
||||
-- Name
|
||||
'PROD' /
|
||||
|
||||
-- I J K Brn Start End Dirn End
|
||||
-- No Length Length Penet Range
|
||||
-- Top Branch
|
||||
1 5 2 2 30 130 'X' 3* /
|
||||
2 5 2 2 130 230 'X' 3* /
|
||||
3 5 2 2 230 330 'X' 3* /
|
||||
4 5 2 2 330 430 'X' 3* /
|
||||
5 5 2 2 430 530 'X' 3* /
|
||||
-- Middle Branch
|
||||
/
|
||||
|
||||
WSEGAICD
|
||||
PROD 18 18 0.000175 0.019479 1020 0.48 1* 1* 1* 1 1* 2.1 1.2 OPEN 1* 1* 1* 1* 1* 1* /
|
||||
PROD 19 19 0.000175 0.04099 1020 0.48 1* 1* 1* 1 1* 2.1 1.2 OPEN 1* 1* 1* 1* 1* 1* /
|
||||
PROD 20 20 0.000175 0.045951 1020 0.48 1* 1* 1* 1 1* 2.1 1.2 OPEN 1* 1* 1* 1* 1* 1* /
|
||||
/
|
||||
|
||||
WELSEGS
|
||||
|
||||
-- Name Dep 1 Tlen 1 Vol 1
|
||||
'WINJ' 7010 10 0.31 'INC' /
|
||||
|
||||
-- First Last Branch Outlet Length Depth Diam Ruff Area Vol
|
||||
-- Seg Seg Num Seg Chang
|
||||
-- Main Stem
|
||||
2 14 1 1 20 20 0.2 1.E-3 1* 1* /
|
||||
|
||||
-- Bottom Branch
|
||||
15 15 2 14 50 0 0.2 1.E-3 1* 1* /
|
||||
16 19 2 15 100 0 0.2 1.E-3 1* 1* /
|
||||
/
|
||||
|
||||
COMPSEGS
|
||||
|
||||
-- Name
|
||||
'WINJ' /
|
||||
|
||||
-- I J K Brn Start End Dirn End
|
||||
-- No Length Length Penet Range
|
||||
|
||||
-- Bottom Branch
|
||||
10 1 9 2 270 370 'X' 3* /
|
||||
9 1 9 2 370 470 'X' 3* /
|
||||
8 1 9 2 470 570 'X' 3* /
|
||||
7 1 9 2 570 670 'X' 3* /
|
||||
6 1 9 2 670 770 'X' 3* /
|
||||
/
|
||||
|
||||
|
||||
WCONPROD
|
||||
'PROD' 'OPEN' 'LRAT' 3* 2000 1* 2500 1* /
|
||||
/
|
||||
|
||||
WCONINJE
|
||||
'WINJ' 'WAT' 'OPEN' 'RESV' 1* 2000 3500 1* /
|
||||
/
|
||||
|
||||
|
||||
TUNING
|
||||
/
|
||||
/
|
||||
/
|
||||
|
||||
TSTEP
|
||||
2 2
|
||||
/
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
)~" };
|
||||
|
||||
return Opm::Parser{}.parseString(input);
|
||||
Opm::Deck first_sim(std::string fname) {
|
||||
return Opm::Parser {} .parseFile(fname);
|
||||
}
|
||||
|
||||
Opm::SummaryState sim_state()
|
||||
@ -622,96 +168,123 @@ BOOST_AUTO_TEST_SUITE(Aggregate_MSW)
|
||||
// test dimensions of multisegment data
|
||||
BOOST_AUTO_TEST_CASE (Constructor)
|
||||
{
|
||||
const auto ih = MockIH{ 5 };
|
||||
const auto simCase = SimulationCase {first_sim("TEST_AGGREGATE_MSW.DATA")};
|
||||
|
||||
const auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ ih.value };
|
||||
Opm::EclipseState es = simCase.es;
|
||||
Opm::Runspec rspec = es.runspec();
|
||||
Opm::SummaryState st = sim_state();
|
||||
Opm::Schedule sched = simCase.sched;
|
||||
Opm::EclipseGrid grid = simCase.grid;
|
||||
|
||||
BOOST_CHECK_EQUAL(amswd.getISeg().size(), ih.nswlmx * ih.nsegmx * ih.nisegz);
|
||||
BOOST_CHECK_EQUAL(amswd.getRSeg().size(), ih.nswlmx * ih.nsegmx * ih.nrsegz);
|
||||
BOOST_CHECK_EQUAL(amswd.getILBs().size(), ih.nswlmx * ih.nlbrmx);
|
||||
BOOST_CHECK_EQUAL(amswd.getILBr().size(), ih.nswlmx * ih.nlbrmx * ih.nilbrz);
|
||||
// Report Step 1: 2008-10-10 --> 2011-01-20
|
||||
const auto rptStep = std::size_t {1};
|
||||
|
||||
double secs_elapsed = 3.1536E07;
|
||||
const auto ih = Opm::RestartIO::Helpers::
|
||||
createInteHead(es, grid, sched, secs_elapsed,
|
||||
rptStep, rptStep+1, rptStep);
|
||||
|
||||
const auto amswd = Opm::RestartIO::Helpers::AggregateMSWData { ih };
|
||||
const auto nswlmx = VI::intehead::NSWLMX;
|
||||
const auto nsegmx = VI::intehead::NSEGMX;
|
||||
const auto nisegz = VI::intehead::NISEGZ;
|
||||
const auto nrsegz = VI::intehead::NRSEGZ;
|
||||
const auto nlbrmx = VI::intehead::NLBRMX;
|
||||
const auto nilbrz = VI::intehead::NILBRZ;
|
||||
BOOST_CHECK_EQUAL(static_cast<int>(amswd.getISeg().size()), ih[nswlmx] * ih[nsegmx] * ih[nisegz]);
|
||||
BOOST_CHECK_EQUAL(static_cast<int>(amswd.getRSeg().size()), ih[nswlmx] * ih[nsegmx] * ih[nrsegz]);
|
||||
BOOST_CHECK_EQUAL(static_cast<int>(amswd.getILBs().size()), ih[nswlmx] * ih[nlbrmx]);
|
||||
BOOST_CHECK_EQUAL(static_cast<int>(amswd.getILBr().size()), ih[nswlmx] * ih[nlbrmx] * ih[nilbrz]);
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
{
|
||||
const auto simCase = SimulationCase{first_sim()};
|
||||
|
||||
// Report Step 1: 2115-01-01 --> 2015-01-03
|
||||
const auto simCase = SimulationCase {first_sim("TEST_AGGREGATE_MSW.DATA")};
|
||||
|
||||
Opm::EclipseState es = simCase.es;
|
||||
Opm::Runspec rspec = es.runspec();
|
||||
Opm::SummaryState smry = sim_state();
|
||||
Opm::Schedule sched = simCase.sched;
|
||||
Opm::EclipseGrid grid = simCase.grid;
|
||||
const auto& units = es.getUnits();
|
||||
|
||||
|
||||
// Report Step 1: 2008-10-10 --> 2011-01-20
|
||||
const auto rptStep = std::size_t {1};
|
||||
|
||||
const auto ih = MockIH {
|
||||
static_cast<int>(simCase.sched.getWells(rptStep).size())
|
||||
};
|
||||
double secs_elapsed = 3.1536E07;
|
||||
const auto ih = Opm::RestartIO::Helpers::
|
||||
createInteHead(es, grid, sched, secs_elapsed,
|
||||
rptStep, rptStep+1, rptStep);
|
||||
|
||||
BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz{2});
|
||||
//BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz{2});
|
||||
|
||||
const auto smry = sim_state();
|
||||
const Opm::data::WellRates wrc = wr();
|
||||
auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ih.value};
|
||||
auto amswd = Opm::RestartIO::Helpers::AggregateMSWData {ih};
|
||||
amswd.captureDeclaredMSWData(simCase.sched,
|
||||
rptStep,
|
||||
simCase.es.getUnits(),
|
||||
ih.value,
|
||||
simCase.grid,
|
||||
units,
|
||||
ih,
|
||||
grid,
|
||||
smry,
|
||||
wrc
|
||||
);
|
||||
|
||||
// ISEG (PROD)
|
||||
{
|
||||
auto start = 2*ih.nisegz;
|
||||
auto start = 2*ih[VI::intehead::NISEGZ];
|
||||
|
||||
const auto& iSeg = amswd.getISeg();
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 15); // PROD-segment 3, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 10); // PROD-segment 3, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 1] , 2); // PROD-segment 3, outlet segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 4); // PROD-segment 3, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 1); // PROD-segment 3, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 1); // PROD-segment 3, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 1); // PROD-segment 3, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 0); // PROD-segment 3, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 0); // PROD-segment 3, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 15); // PROD-segment 3, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // PROD-segment 3, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // PROD-segment 3, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // PROD-segment 3, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // PROD-segment 3, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 1); // PROD-segment 3, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 8); // PROD-segment 3, ordered segment
|
||||
|
||||
start = 13*ih.nisegz;
|
||||
start = 9*ih[VI::intehead::NISEGZ];
|
||||
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 4); // PROD-segment 14, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 1] , 13); // PROD-segment 14, outlet segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 15); // PROD-segment 14, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // PROD-segment 14, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // PROD-segment 14, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // PROD-segment 14, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // PROD-segment 14, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 2); // PROD-segment 14, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 4); // PROD-segment 14, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 1); // PROD-segment 10, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 1] , 6); // PROD-segment 10, outlet segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 0); // PROD-segment 10, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 5); // PROD-segment 10, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // PROD-segment 10, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // PROD-segment 10, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 0); // PROD-segment 10, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 0); // PROD-segment 10, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 3); // PROD-segment 10, ordered segment
|
||||
|
||||
}
|
||||
|
||||
// ISEG (WINJ)
|
||||
{
|
||||
auto start = ih.nisegz*ih.nsegmx + 13*ih.nisegz;
|
||||
|
||||
auto start = ih[VI::intehead::NISEGZ]*ih[VI::intehead::NSEGMX] + 13*ih[VI::intehead::NISEGZ];
|
||||
const auto& iSeg = amswd.getISeg();
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 6); // WINJ-segment 14, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 5); // WINJ-segment 14, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 1] , 13); // WINJ-segment 14, outlet segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 0); // WINJ-segment 14, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 1); // WINJ-segment 14, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 1); // WINJ-segment 14, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 1); // WINJ-segment 14, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 0); // WINJ-segment 14, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 0); // WINJ-segment 14, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 6); // WINJ-segment 14, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 15); // WINJ-segment 14, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // WINJ-segment 14, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // WINJ-segment 14, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // WINJ-segment 14, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // WINJ-segment 14, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 1); // WINJ-segment 14, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 5); // WINJ-segment 14, ordered segment
|
||||
|
||||
start = ih.nisegz*ih.nsegmx + 16*ih.nisegz;
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 3); // WINJ-segment 17, ordered segment
|
||||
start = ih[VI::intehead::NISEGZ]*ih[VI::intehead::NSEGMX] + 16*ih[VI::intehead::NISEGZ];
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 0] , 2); // WINJ-segment 17, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 1] , 16); // WINJ-segment 17, outlet segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 2] , 18); // WINJ-segment 17, inflow segment current branch
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // WINJ-segment 17, branch number
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // WINJ-segment 17, number of inflow branches
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // WINJ-segment 17, Sum number of inflow branches from first segment to current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // WINJ-segment 17, number of connections in segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 3); // WINJ-segment 17, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 3); // WINJ-segment 17, ordered segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 7] , 4); // WINJ-segment 17, sum of connections with lower segmeent number than current segment
|
||||
BOOST_CHECK_EQUAL(iSeg[start + 8] , 2); // WINJ-segment 17, ordered segment
|
||||
|
||||
}
|
||||
|
||||
@ -723,8 +296,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
// 'stringSegNum' is one-based (1 .. #segments inclusive)
|
||||
std::string stringSegNo = std::to_string(segNo);
|
||||
|
||||
const auto i0 = (segNo-1)*ih.nrsegz;
|
||||
const auto& units = simCase.es.getUnits();
|
||||
const auto i0 = (segNo-1)*ih[VI::intehead::NRSEGZ];
|
||||
const auto gfactor = (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD)
|
||||
? 0.1781076 : 0.001;
|
||||
const auto& rseg = amswd.getRSeg();
|
||||
@ -756,8 +328,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
// 'stringSegNum' is one-based (1 .. #segments inclusive)
|
||||
std::string stringSegNo = std::to_string(segNo);
|
||||
|
||||
const auto i0 = ih.nrsegz*ih.nsegmx + (segNo-1)*ih.nrsegz;
|
||||
const auto& units = simCase.es.getUnits();
|
||||
const auto i0 = ih[VI::intehead::NRSEGZ]*ih[VI::intehead::NSEGMX] + (segNo-1)*ih[VI::intehead::NRSEGZ];
|
||||
using M = ::Opm::UnitSystem::measure;
|
||||
const auto gfactor = (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD)
|
||||
? 0.1781076 : 0.001;
|
||||
@ -786,7 +357,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
|
||||
// ILBR
|
||||
{
|
||||
auto start = 0*ih.nilbrz;
|
||||
auto start = 0*ih[VI::intehead::NILBRZ];
|
||||
|
||||
const auto& iLBr = amswd.getILBr();
|
||||
//PROD
|
||||
@ -796,7 +367,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 3] , 12); // PROD-branch 1, last segment
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 4] , 0); // PROD-branch 1, branch no - 1
|
||||
//PROD
|
||||
start = 1*ih.nilbrz;
|
||||
start = 1*ih[VI::intehead::NILBRZ];
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 0] , 3); // PROD-branch 2, outlet segment
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 1] , 5); // PROD-branch 2, No of segments in branch
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 2] , 13); // PROD-branch 2, first segment
|
||||
@ -804,7 +375,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 4] , 1); // PROD-branch 2, branch no - 1
|
||||
|
||||
|
||||
start = ih.nilbrz*ih.nlbrmx + 0*ih.nilbrz;
|
||||
start = ih[VI::intehead::NILBRZ]*ih[VI::intehead::NLBRMX] + 0*ih[VI::intehead::NILBRZ];
|
||||
//WINJ
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 0] , 0); // WINJ-branch 1, outlet segment
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 1] , 14); // WINJ-branch 1, No of segments in branch
|
||||
@ -812,7 +383,7 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 3] , 14); // WINJ-branch 1, last segment
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 4] , 0); // WINJ-branch 1, branch no - 1
|
||||
|
||||
start = ih.nilbrz*ih.nlbrmx + 1*ih.nilbrz;
|
||||
start = ih[VI::intehead::NILBRZ]*ih[VI::intehead::NLBRMX] + 1*ih[VI::intehead::NILBRZ];
|
||||
//WINJ
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 0] , 14); // WINJ-branch 2, outlet segment
|
||||
BOOST_CHECK_EQUAL(iLBr[start + 1] , 5); // WINJ-branch 2, No of segments in branch
|
||||
@ -825,13 +396,13 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
|
||||
// ILBS
|
||||
{
|
||||
auto start = 0*ih.nlbrmx;
|
||||
auto start = 0*ih[VI::intehead::NLBRMX];
|
||||
|
||||
const auto& iLBs = amswd.getILBs();
|
||||
//PROD
|
||||
BOOST_CHECK_EQUAL(iLBs[start + 0] , 13); // PROD-branch 2, first segment in branch
|
||||
|
||||
start = ih.nlbrmx + 0*ih.nlbrmx;
|
||||
start = ih[VI::intehead::NLBRMX] + 0*ih[VI::intehead::NLBRMX];
|
||||
//WINJ
|
||||
BOOST_CHECK_EQUAL(iLBs[start + 0] , 15); // WINJ-branch 2, first segment in branch
|
||||
|
||||
@ -839,27 +410,140 @@ BOOST_AUTO_TEST_CASE (Declared_MSW_Data)
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MSW_RST) {
|
||||
const auto simCase = SimulationCase{first_sim()};
|
||||
BOOST_AUTO_TEST_CASE(MSW_AICD) {
|
||||
const auto simCase = SimulationCase {first_sim("TEST_AGGREGATE_MSW.DATA")};
|
||||
|
||||
// Report Step 1: 2115-01-01 --> 2015-01-03
|
||||
Opm::EclipseState es = simCase.es;
|
||||
Opm::Runspec rspec = es.runspec();
|
||||
Opm::SummaryState smry = sim_state();
|
||||
Opm::Schedule sched = simCase.sched;
|
||||
Opm::EclipseGrid grid = simCase.grid;
|
||||
const auto& units = es.getUnits();
|
||||
|
||||
|
||||
// Report Step 1: 2008-10-10 --> 2011-01-20
|
||||
const auto rptStep = std::size_t {1};
|
||||
|
||||
const auto ih = MockIH {
|
||||
static_cast<int>(simCase.sched.getWells(rptStep).size())
|
||||
};
|
||||
double secs_elapsed = 3.1536E07;
|
||||
const auto ih = Opm::RestartIO::Helpers::
|
||||
createInteHead(es, grid, sched, secs_elapsed,
|
||||
rptStep, rptStep+1, rptStep);
|
||||
|
||||
|
||||
const auto smry = sim_state();
|
||||
const Opm::data::WellRates wrc = wr();
|
||||
auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ih.value};
|
||||
auto amswd = Opm::RestartIO::Helpers::AggregateMSWData {ih};
|
||||
amswd.captureDeclaredMSWData(simCase.sched,
|
||||
rptStep,
|
||||
simCase.es.getUnits(),
|
||||
ih.value,
|
||||
simCase.grid,
|
||||
units,
|
||||
ih,
|
||||
grid,
|
||||
smry,
|
||||
wrc
|
||||
);
|
||||
|
||||
// ISEG (PROD)
|
||||
{
|
||||
const auto& iSeg = amswd.getISeg();
|
||||
auto start = 17*ih[VI::intehead::NISEGZ];
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::SegmentType], -8); // PROD-segment 18,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDScalingMode], 1); // PROD-segment 18,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDOpenShutFlag], 0); // PROD-segment 18,
|
||||
|
||||
start = 18*ih[VI::intehead::NISEGZ];
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::SegmentType], -8); // PROD-segment 19,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDScalingMode], 1); // PROD-segment 19,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDOpenShutFlag], 1); // PROD-segment 19,
|
||||
|
||||
start = 19*ih[VI::intehead::NISEGZ];
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::SegmentType], -8); // PROD-segment 20,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDScalingMode], 0); // PROD-segment 20,
|
||||
BOOST_CHECK_EQUAL(iSeg[start + VI::ISeg::index::ICDOpenShutFlag], 0); // PROD-segment 20,
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// RSEG (PROD)
|
||||
{
|
||||
// well no 1 - PROD
|
||||
const auto& rseg = amswd.getRSeg();
|
||||
|
||||
int segNo = 18;
|
||||
auto i0 = (segNo-1)*ih[VI::intehead::NRSEGZ];
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::DeviceBaseStrength], 3.260E-05 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ScalingFactor], 0.06391 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CalibrFluidDensity], 63.678 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CalibrFluidViscosity], 0.48 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CriticalWaterFraction], 0.5 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::TransitionRegWidth], 0.05 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::MaxEmulsionRatio], 5. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::FlowRateExponent], 2.1 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ViscFuncExponent], 1.2 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::MaxValidFlowRate], -2e+20 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ICDLength], 0.06391 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionOilDensityExponent], 1. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionWaterDensityExponent], 1. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionGasDensityExponent], 1. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionOilViscosityExponent], 1. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionWaterViscosityExponent], 1. , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionGasViscosityExponent], 1. , 1.0e-10);
|
||||
|
||||
segNo = 20;
|
||||
i0 = (segNo-1)*ih[VI::intehead::NRSEGZ];
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::DeviceBaseStrength], 3.260E-05 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ScalingFactor], 0.007538 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CalibrFluidDensity], 63.678 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CalibrFluidViscosity], 0.48 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::CriticalWaterFraction], 0.53 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::TransitionRegWidth], 0.048 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::MaxEmulsionRatio], 4.89 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::FlowRateExponent], 2.1 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ViscFuncExponent], 1.2 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::MaxValidFlowRate], 9.876e+06 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::ICDLength], 0.15076 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionOilDensityExponent], 0.92 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionWaterDensityExponent], 0.89 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionGasDensityExponent], 0.91 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionOilViscosityExponent], 1.01 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionWaterViscosityExponent], 1.02 , 1.0e-10);
|
||||
BOOST_CHECK_CLOSE(rseg[i0 + VI::RSeg::index::flowFractionGasViscosityExponent], 1.03 , 1.0e-10);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MSW_RST) {
|
||||
const auto simCase = SimulationCase {first_sim("TEST_AGGREGATE_MSW.DATA")};
|
||||
|
||||
Opm::EclipseState es = simCase.es;
|
||||
Opm::Runspec rspec = es.runspec();
|
||||
Opm::SummaryState smry = sim_state();
|
||||
Opm::Schedule sched = simCase.sched;
|
||||
Opm::EclipseGrid grid = simCase.grid;
|
||||
const auto& units = es.getUnits();
|
||||
|
||||
|
||||
// Report Step 1: 2008-10-10 --> 2011-01-20
|
||||
const auto rptStep = std::size_t {1};
|
||||
|
||||
double secs_elapsed = 3.1536E07;
|
||||
const auto ih = Opm::RestartIO::Helpers::
|
||||
createInteHead(es, grid, sched, secs_elapsed,
|
||||
rptStep, rptStep+1, rptStep);
|
||||
|
||||
|
||||
const Opm::data::WellRates wrc = wr();
|
||||
auto amswd = Opm::RestartIO::Helpers::AggregateMSWData {ih};
|
||||
amswd.captureDeclaredMSWData(simCase.sched,
|
||||
rptStep,
|
||||
units,
|
||||
ih,
|
||||
grid,
|
||||
smry,
|
||||
wrc
|
||||
);
|
||||
|
||||
const auto& iseg = amswd.getISeg();
|
||||
const auto& rseg = amswd.getRSeg();
|
||||
auto segment = Opm::RestartIO::RstSegment(simCase.es.getUnits(), 1, iseg.data(), rseg.data());
|
||||
|
Loading…
Reference in New Issue
Block a user