Added some tests for the endpoint scaled relperm.
- satfuncStandard: Unscaled curves, using standard version of the Gwseg model. - satfuncEPSBase: Unscaled curves, but using the EPS version of the Gwseg model. There are some differences between this and the standard version of Gwseg for derivatives at critical saturations. The scheme for calculating the derivatives should be discussed. (Will file a separate issue on this.) - satfuncEPS_A: Scaled curves. Scaling parameters specified via SWL family. - satfuncEPS_B: Scaled curves. Scaling parameters identical to _A but this time specified via the ENPTVD table. Test currently suspended due problems with eclipse-state. - satfuncEPS_C: Scaled curves. Scaling parameters identical to _A but this time specified via Norne-like syntax (EQUALS, COPY etc.).
This commit is contained in:
parent
92ee3cd86b
commit
18c8927334
@ -172,6 +172,7 @@ list (APPEND TEST_SOURCE_FILES
|
|||||||
tests/test_parallel_linearsolver.cpp
|
tests/test_parallel_linearsolver.cpp
|
||||||
tests/test_param.cpp
|
tests/test_param.cpp
|
||||||
tests/test_blackoilfluid.cpp
|
tests/test_blackoilfluid.cpp
|
||||||
|
tests/test_satfunc.cpp
|
||||||
tests/test_shadow.cpp
|
tests/test_shadow.cpp
|
||||||
tests/test_equil.cpp
|
tests/test_equil.cpp
|
||||||
tests/test_regionmapping.cpp
|
tests/test_regionmapping.cpp
|
||||||
@ -200,6 +201,7 @@ list (APPEND TEST_DATA_FILES
|
|||||||
tests/equil_liveoil.DATA
|
tests/equil_liveoil.DATA
|
||||||
tests/equil_rsvd_and_rvvd.DATA
|
tests/equil_rsvd_and_rvvd.DATA
|
||||||
tests/wetgas.DATA
|
tests/wetgas.DATA
|
||||||
|
tests/satfunc.DATA
|
||||||
tests/testBlackoilState1.DATA
|
tests/testBlackoilState1.DATA
|
||||||
tests/testBlackoilState2.DATA
|
tests/testBlackoilState2.DATA
|
||||||
tests/wells_manager_data.data
|
tests/wells_manager_data.data
|
||||||
|
168
tests/satfuncEPSBase.DATA
Normal file
168
tests/satfuncEPSBase.DATA
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
NOECHO
|
||||||
|
|
||||||
|
RUNSPEC ======
|
||||||
|
|
||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
DISGAS
|
||||||
|
VAPOIL
|
||||||
|
|
||||||
|
TABDIMS
|
||||||
|
1 1 40 20 1 20 /
|
||||||
|
|
||||||
|
DIMENS
|
||||||
|
1 1 20
|
||||||
|
/
|
||||||
|
|
||||||
|
WELLDIMS
|
||||||
|
30 10 2 30 /
|
||||||
|
|
||||||
|
ENDSCALE
|
||||||
|
--DIR REV NTENDP NSENDP
|
||||||
|
'NODIR' 'REVERS' 1 20 /
|
||||||
|
/
|
||||||
|
|
||||||
|
START
|
||||||
|
1 'JAN' 1990 /
|
||||||
|
|
||||||
|
NSTACK
|
||||||
|
25 /
|
||||||
|
|
||||||
|
EQLDIMS
|
||||||
|
-- NTEQUL
|
||||||
|
1 /
|
||||||
|
|
||||||
|
|
||||||
|
FMTOUT
|
||||||
|
FMTIN
|
||||||
|
|
||||||
|
GRID ======
|
||||||
|
|
||||||
|
DXV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DYV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DZV
|
||||||
|
20*5.0
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PORO
|
||||||
|
20*0.2
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
20*1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
20*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMX
|
||||||
|
20*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
BOX
|
||||||
|
1 1 1 1 1 1 /
|
||||||
|
|
||||||
|
TOPS
|
||||||
|
0.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PROPS ======
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
0 1. 1.0000 1.20 /
|
||||||
|
20 40. 1.0120 1.17 /
|
||||||
|
40 80. 1.0255 1.14 /
|
||||||
|
60 120. 1.0380 1.11 /
|
||||||
|
80 160. 1.0510 1.08 /
|
||||||
|
100 200. 1.0630 1.06 /
|
||||||
|
120 240. 1.0750 1.03 /
|
||||||
|
140 280. 1.0870 1.00 /
|
||||||
|
160 320. 1.0985 .98 /
|
||||||
|
180 360. 1.1100 .95 /
|
||||||
|
200 400. 1.1200 .94
|
||||||
|
500. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTG
|
||||||
|
-- Pg Rv Bg Vg
|
||||||
|
100 0.0001 0.010 0.1
|
||||||
|
0.0 0.0104 0.1 /
|
||||||
|
200 0.0004 0.005 0.2
|
||||||
|
0.0 0.0054 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SCALECRS
|
||||||
|
-- YES /
|
||||||
|
NO/
|
||||||
|
|
||||||
|
SWOF
|
||||||
|
0.1 0.0 1.0 0.9
|
||||||
|
0.2 0.0 0.8 0.8
|
||||||
|
0.3 0.1 0.6 0.7
|
||||||
|
0.4 0.2 0.4 0.6
|
||||||
|
0.7 0.5 0.1 0.3
|
||||||
|
0.8 0.6 0.0 0.2
|
||||||
|
0.9 0.7 0.0 0.1
|
||||||
|
/
|
||||||
|
|
||||||
|
SGOF
|
||||||
|
0.0 0.0 1.0 0.2
|
||||||
|
0.1 0.0 0.7 0.4
|
||||||
|
0.2 0.1 0.6 0.6
|
||||||
|
0.8 0.7 0.0 2.0
|
||||||
|
0.9 1.0 0.0 2.1
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTW
|
||||||
|
--RefPres Bw Comp Vw Cv
|
||||||
|
1. 1.0 4.0E-5 0.96 0.0 /
|
||||||
|
|
||||||
|
|
||||||
|
ROCK
|
||||||
|
--RefPres Comp
|
||||||
|
1. 5.0E-5 /
|
||||||
|
|
||||||
|
DENSITY
|
||||||
|
700 1000 1
|
||||||
|
/
|
||||||
|
|
||||||
|
SOLUTION ======
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
45 150 50 0.25 45 0.35 1 1 0
|
||||||
|
/
|
||||||
|
|
||||||
|
RSVD
|
||||||
|
0 0.0
|
||||||
|
100 100. /
|
||||||
|
|
||||||
|
RVVD
|
||||||
|
0. 0.
|
||||||
|
100. 0.0001 /
|
||||||
|
|
||||||
|
RPTSOL
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=2' /
|
||||||
|
|
||||||
|
SUMMARY ======
|
||||||
|
RUNSUM
|
||||||
|
|
||||||
|
SEPARATE
|
||||||
|
|
||||||
|
SCHEDULE ======
|
||||||
|
|
||||||
|
RPTSCHED
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=3' 'NEWTON=2' /
|
||||||
|
|
||||||
|
|
||||||
|
END
|
177
tests/satfuncEPS_A.DATA
Normal file
177
tests/satfuncEPS_A.DATA
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
NOECHO
|
||||||
|
|
||||||
|
RUNSPEC ======
|
||||||
|
|
||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
DISGAS
|
||||||
|
VAPOIL
|
||||||
|
|
||||||
|
TABDIMS
|
||||||
|
1 1 40 20 1 20 /
|
||||||
|
|
||||||
|
DIMENS
|
||||||
|
1 1 10
|
||||||
|
/
|
||||||
|
|
||||||
|
WELLDIMS
|
||||||
|
30 10 2 30 /
|
||||||
|
|
||||||
|
ENDSCALE
|
||||||
|
--DIR REV NTENDP NSENDP
|
||||||
|
'NODIR' 'REVERS' 1 20 /
|
||||||
|
/
|
||||||
|
|
||||||
|
START
|
||||||
|
1 'JAN' 1990 /
|
||||||
|
|
||||||
|
NSTACK
|
||||||
|
25 /
|
||||||
|
|
||||||
|
EQLDIMS
|
||||||
|
-- NTEQUL
|
||||||
|
1 /
|
||||||
|
|
||||||
|
|
||||||
|
FMTOUT
|
||||||
|
FMTIN
|
||||||
|
|
||||||
|
GRID ======
|
||||||
|
|
||||||
|
DXV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DYV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DZV
|
||||||
|
10*5.0
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PORO
|
||||||
|
10*0.2
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
10*1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMX
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
BOX
|
||||||
|
1 1 1 1 1 1 /
|
||||||
|
|
||||||
|
TOPS
|
||||||
|
0.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PROPS ======
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
0 1. 1.0000 1.20 /
|
||||||
|
20 40. 1.0120 1.17 /
|
||||||
|
40 80. 1.0255 1.14 /
|
||||||
|
60 120. 1.0380 1.11 /
|
||||||
|
80 160. 1.0510 1.08 /
|
||||||
|
100 200. 1.0630 1.06 /
|
||||||
|
120 240. 1.0750 1.03 /
|
||||||
|
140 280. 1.0870 1.00 /
|
||||||
|
160 320. 1.0985 .98 /
|
||||||
|
180 360. 1.1100 .95 /
|
||||||
|
200 400. 1.1200 .94
|
||||||
|
500. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTG
|
||||||
|
-- Pg Rv Bg Vg
|
||||||
|
100 0.0001 0.010 0.1
|
||||||
|
0.0 0.0104 0.1 /
|
||||||
|
200 0.0004 0.005 0.2
|
||||||
|
0.0 0.0054 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SCALECRS
|
||||||
|
-- YES /
|
||||||
|
NO/
|
||||||
|
|
||||||
|
SWL
|
||||||
|
4*0.1 4*0.2 2*0.1/
|
||||||
|
|
||||||
|
SWCR
|
||||||
|
0.2 0.2 0.4 0.4 0.2 0.2 0.4 0.4 2*0.2 /
|
||||||
|
|
||||||
|
SWU
|
||||||
|
0.9 0.7 0.9 0.7 0.9 0.7 0.9 0.7 2*0.9 /
|
||||||
|
|
||||||
|
SWOF
|
||||||
|
0.1 0.0 1.0 0.9
|
||||||
|
0.2 0.0 0.8 0.8
|
||||||
|
0.3 0.1 0.6 0.7
|
||||||
|
0.4 0.2 0.4 0.6
|
||||||
|
0.7 0.5 0.1 0.3
|
||||||
|
0.8 0.6 0.0 0.2
|
||||||
|
0.9 0.7 0.0 0.1
|
||||||
|
/
|
||||||
|
|
||||||
|
SGOF
|
||||||
|
0.0 0.0 1.0 0.2
|
||||||
|
0.1 0.0 0.7 0.4
|
||||||
|
0.2 0.1 0.6 0.6
|
||||||
|
0.8 0.7 0.0 2.0
|
||||||
|
0.9 1.0 0.0 2.1
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTW
|
||||||
|
--RefPres Bw Comp Vw Cv
|
||||||
|
1. 1.0 4.0E-5 0.96 0.0 /
|
||||||
|
|
||||||
|
|
||||||
|
ROCK
|
||||||
|
--RefPres Comp
|
||||||
|
1. 5.0E-5 /
|
||||||
|
|
||||||
|
DENSITY
|
||||||
|
700 1000 1
|
||||||
|
/
|
||||||
|
|
||||||
|
SOLUTION ======
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
45 150 50 0.25 45 0.35 1 1 0
|
||||||
|
/
|
||||||
|
|
||||||
|
RSVD
|
||||||
|
0 0.0
|
||||||
|
100 100. /
|
||||||
|
|
||||||
|
RVVD
|
||||||
|
0. 0.
|
||||||
|
100. 0.0001 /
|
||||||
|
|
||||||
|
RPTSOL
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=2' /
|
||||||
|
|
||||||
|
SUMMARY ======
|
||||||
|
RUNSUM
|
||||||
|
|
||||||
|
SEPARATE
|
||||||
|
|
||||||
|
SCHEDULE ======
|
||||||
|
|
||||||
|
RPTSCHED
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=3' 'NEWTON=2' /
|
||||||
|
|
||||||
|
|
||||||
|
END
|
190
tests/satfuncEPS_B.DATA
Normal file
190
tests/satfuncEPS_B.DATA
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
NOECHO
|
||||||
|
|
||||||
|
RUNSPEC ======
|
||||||
|
|
||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
DISGAS
|
||||||
|
VAPOIL
|
||||||
|
|
||||||
|
TABDIMS
|
||||||
|
1 1 40 20 1 20 /
|
||||||
|
|
||||||
|
DIMENS
|
||||||
|
1 1 10
|
||||||
|
/
|
||||||
|
|
||||||
|
WELLDIMS
|
||||||
|
30 10 2 30 /
|
||||||
|
|
||||||
|
ENDSCALE
|
||||||
|
--DIR REV NTENDP NSENDP
|
||||||
|
'NODIR' 'REVERS' 1 20 /
|
||||||
|
/
|
||||||
|
|
||||||
|
START
|
||||||
|
1 'JAN' 1990 /
|
||||||
|
|
||||||
|
NSTACK
|
||||||
|
25 /
|
||||||
|
|
||||||
|
EQLDIMS
|
||||||
|
-- NTEQUL
|
||||||
|
1 /
|
||||||
|
|
||||||
|
|
||||||
|
FMTOUT
|
||||||
|
FMTIN
|
||||||
|
|
||||||
|
GRID ======
|
||||||
|
|
||||||
|
DXV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DYV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DZV
|
||||||
|
10*5.0
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PORO
|
||||||
|
10*0.2
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
10*1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMX
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
BOX
|
||||||
|
1 1 1 1 1 1 /
|
||||||
|
|
||||||
|
TOPS
|
||||||
|
0.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PROPS ======
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
0 1. 1.0000 1.20 /
|
||||||
|
20 40. 1.0120 1.17 /
|
||||||
|
40 80. 1.0255 1.14 /
|
||||||
|
60 120. 1.0380 1.11 /
|
||||||
|
80 160. 1.0510 1.08 /
|
||||||
|
100 200. 1.0630 1.06 /
|
||||||
|
120 240. 1.0750 1.03 /
|
||||||
|
140 280. 1.0870 1.00 /
|
||||||
|
160 320. 1.0985 .98 /
|
||||||
|
180 360. 1.1100 .95 /
|
||||||
|
200 400. 1.1200 .94
|
||||||
|
500. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTG
|
||||||
|
-- Pg Rv Bg Vg
|
||||||
|
100 0.0001 0.010 0.1
|
||||||
|
0.0 0.0104 0.1 /
|
||||||
|
200 0.0004 0.005 0.2
|
||||||
|
0.0 0.0054 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SCALECRS
|
||||||
|
-- YES /
|
||||||
|
NO/
|
||||||
|
|
||||||
|
ENPTVD
|
||||||
|
-- Depth swl swcr swu sgl sgcr sgu sowcr sogcr
|
||||||
|
-- Sandstone
|
||||||
|
2.5 .1 0.2 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
7.5 .1 0.2 0.7 .0 0.1 0.9 0.2 0.2
|
||||||
|
12.5 .1 0.4 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
17.5 .1 0.4 0.7 .0 0.1 0.9 0.2 0.2
|
||||||
|
22.5 .2 0.2 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
27.5 .2 0.2 0.7 .0 0.1 0.9 0.2 0.2
|
||||||
|
32.5 .2 0.4 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
37.5 .2 0.4 0.7 .0 0.1 0.9 0.2 0.2
|
||||||
|
42.5 .1 0.2 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
47.5 .1 0.2 0.9 .0 0.1 0.9 0.2 0.2
|
||||||
|
50.0 .1 0.2 0.9 .0 0.1 0.9 0.2 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SWOF
|
||||||
|
0.1 0.0 1.0 0.9
|
||||||
|
0.2 0.0 0.8 0.8
|
||||||
|
0.3 0.1 0.6 0.7
|
||||||
|
0.4 0.2 0.4 0.6
|
||||||
|
0.7 0.5 0.1 0.3
|
||||||
|
0.8 0.6 0.0 0.2
|
||||||
|
0.9 0.7 0.0 0.1
|
||||||
|
/
|
||||||
|
|
||||||
|
SGOF
|
||||||
|
0.0 0.0 1.0 0.2
|
||||||
|
0.1 0.0 0.7 0.4
|
||||||
|
0.2 0.1 0.6 0.6
|
||||||
|
0.8 0.7 0.0 2.0
|
||||||
|
0.9 1.0 0.0 2.1
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTW
|
||||||
|
--RefPres Bw Comp Vw Cv
|
||||||
|
1. 1.0 4.0E-5 0.96 0.0 /
|
||||||
|
|
||||||
|
|
||||||
|
ROCK
|
||||||
|
--RefPres Comp
|
||||||
|
1. 5.0E-5 /
|
||||||
|
|
||||||
|
DENSITY
|
||||||
|
700 1000 1
|
||||||
|
/
|
||||||
|
|
||||||
|
REGIONS ======
|
||||||
|
|
||||||
|
ENDNUM
|
||||||
|
10*1
|
||||||
|
/
|
||||||
|
|
||||||
|
SOLUTION ======
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
45 150 50 0.25 45 0.35 1 1 0
|
||||||
|
/
|
||||||
|
|
||||||
|
RSVD
|
||||||
|
0 0.0
|
||||||
|
100 100. /
|
||||||
|
|
||||||
|
RVVD
|
||||||
|
0. 0.
|
||||||
|
100. 0.0001 /
|
||||||
|
|
||||||
|
RPTSOL
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=2' /
|
||||||
|
|
||||||
|
SUMMARY ======
|
||||||
|
RUNSUM
|
||||||
|
|
||||||
|
SEPARATE
|
||||||
|
|
||||||
|
SCHEDULE ======
|
||||||
|
|
||||||
|
RPTSCHED
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=3' 'NEWTON=2' /
|
||||||
|
|
||||||
|
|
||||||
|
END
|
225
tests/satfuncEPS_C.DATA
Normal file
225
tests/satfuncEPS_C.DATA
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
NOECHO
|
||||||
|
|
||||||
|
RUNSPEC ======
|
||||||
|
|
||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
DISGAS
|
||||||
|
VAPOIL
|
||||||
|
|
||||||
|
TABDIMS
|
||||||
|
1 1 40 20 1 20 /
|
||||||
|
|
||||||
|
DIMENS
|
||||||
|
1 1 10
|
||||||
|
/
|
||||||
|
|
||||||
|
WELLDIMS
|
||||||
|
30 10 2 30 /
|
||||||
|
|
||||||
|
ENDSCALE
|
||||||
|
--DIR REV NTENDP NSENDP
|
||||||
|
'NODIR' 'REVERS' 1 20 /
|
||||||
|
/
|
||||||
|
|
||||||
|
START
|
||||||
|
1 'JAN' 1990 /
|
||||||
|
|
||||||
|
NSTACK
|
||||||
|
25 /
|
||||||
|
|
||||||
|
EQLDIMS
|
||||||
|
-- NTEQUL
|
||||||
|
1 /
|
||||||
|
|
||||||
|
|
||||||
|
FMTOUT
|
||||||
|
FMTIN
|
||||||
|
|
||||||
|
GRID ======
|
||||||
|
|
||||||
|
DXV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DYV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DZV
|
||||||
|
10*5.0
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PORO
|
||||||
|
10*0.2
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
10*1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMX
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
BOX
|
||||||
|
1 1 1 1 1 1 /
|
||||||
|
|
||||||
|
TOPS
|
||||||
|
0.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PROPS ======
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
0 1. 1.0000 1.20 /
|
||||||
|
20 40. 1.0120 1.17 /
|
||||||
|
40 80. 1.0255 1.14 /
|
||||||
|
60 120. 1.0380 1.11 /
|
||||||
|
80 160. 1.0510 1.08 /
|
||||||
|
100 200. 1.0630 1.06 /
|
||||||
|
120 240. 1.0750 1.03 /
|
||||||
|
140 280. 1.0870 1.00 /
|
||||||
|
160 320. 1.0985 .98 /
|
||||||
|
180 360. 1.1100 .95 /
|
||||||
|
200 400. 1.1200 .94
|
||||||
|
500. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTG
|
||||||
|
-- Pg Rv Bg Vg
|
||||||
|
100 0.0001 0.010 0.1
|
||||||
|
0.0 0.0104 0.1 /
|
||||||
|
200 0.0004 0.005 0.2
|
||||||
|
0.0 0.0054 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SCALECRS
|
||||||
|
-- YES /
|
||||||
|
NO/
|
||||||
|
|
||||||
|
--SWL
|
||||||
|
--4*0.1 4*0.2 2*0.1/
|
||||||
|
|
||||||
|
EQUALS
|
||||||
|
SWL 0.1 1 1 1 1 1 1 /
|
||||||
|
SWL 0.1 1 1 1 1 2 2 /
|
||||||
|
SWL 0.1 1 1 1 1 3 3 /
|
||||||
|
SWL 0.1 1 1 1 1 4 4 /
|
||||||
|
SWL 0.2 1 1 1 1 5 5 /
|
||||||
|
SWL 0.2 1 1 1 1 6 6 /
|
||||||
|
SWL 0.2 1 1 1 1 7 7 /
|
||||||
|
SWL 0.2 1 1 1 1 8 8 /
|
||||||
|
SWL 0.1 1 1 1 1 9 9 /
|
||||||
|
SWL 0.1 1 1 1 1 10 10 /
|
||||||
|
/
|
||||||
|
|
||||||
|
--SWCR
|
||||||
|
--0.2 0.2 0.4 0.4 0.2 0.2 0.4 0.4 2*0.2 /
|
||||||
|
|
||||||
|
COPY
|
||||||
|
SWL SWCR /
|
||||||
|
SWL SWU /
|
||||||
|
/
|
||||||
|
|
||||||
|
ADD
|
||||||
|
SWCR 0.1 1 1 1 1 1 2 /
|
||||||
|
SWCR 0.3 1 1 1 1 3 4 /
|
||||||
|
SWCR 0.2 1 1 1 1 7 8 /
|
||||||
|
SWCR 0.1 1 1 1 1 9 10 /
|
||||||
|
/
|
||||||
|
|
||||||
|
--SWU
|
||||||
|
--0.9 0.7 0.9 0.7 0.9 0.7 0.9 0.7 2*0.9 /
|
||||||
|
|
||||||
|
MULTIPLY
|
||||||
|
SWU -1.0 1 1 1 1 1 10 /
|
||||||
|
/
|
||||||
|
|
||||||
|
ADD
|
||||||
|
SWU 1.0 1 1 1 1 1 10 /
|
||||||
|
/
|
||||||
|
|
||||||
|
ADD
|
||||||
|
SWU -0.2 1 1 1 1 2 2 /
|
||||||
|
SWU -0.2 1 1 1 1 4 4 /
|
||||||
|
SWU 0.1 1 1 1 1 5 5 /
|
||||||
|
SWU -0.1 1 1 1 1 6 6 /
|
||||||
|
SWU 0.1 1 1 1 1 7 7 /
|
||||||
|
SWU -0.1 1 1 1 1 8 8 /
|
||||||
|
/
|
||||||
|
|
||||||
|
SWOF
|
||||||
|
0.1 0.0 1.0 0.9
|
||||||
|
0.2 0.0 0.8 0.8
|
||||||
|
0.3 0.1 0.6 0.7
|
||||||
|
0.4 0.2 0.4 0.6
|
||||||
|
0.7 0.5 0.1 0.3
|
||||||
|
0.8 0.6 0.0 0.2
|
||||||
|
0.9 0.7 0.0 0.1
|
||||||
|
/
|
||||||
|
|
||||||
|
SGOF
|
||||||
|
0.0 0.0 1.0 0.2
|
||||||
|
0.1 0.0 0.7 0.4
|
||||||
|
0.2 0.1 0.6 0.6
|
||||||
|
0.8 0.7 0.0 2.0
|
||||||
|
0.9 1.0 0.0 2.1
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTW
|
||||||
|
--RefPres Bw Comp Vw Cv
|
||||||
|
1. 1.0 4.0E-5 0.96 0.0 /
|
||||||
|
|
||||||
|
|
||||||
|
ROCK
|
||||||
|
--RefPres Comp
|
||||||
|
1. 5.0E-5 /
|
||||||
|
|
||||||
|
DENSITY
|
||||||
|
700 1000 1
|
||||||
|
/
|
||||||
|
|
||||||
|
REGIONS ======
|
||||||
|
|
||||||
|
ENDNUM
|
||||||
|
10*1
|
||||||
|
/
|
||||||
|
|
||||||
|
SOLUTION ======
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
45 150 50 0.25 45 0.35 1 1 0
|
||||||
|
/
|
||||||
|
|
||||||
|
RSVD
|
||||||
|
0 0.0
|
||||||
|
100 100. /
|
||||||
|
|
||||||
|
RVVD
|
||||||
|
0. 0.
|
||||||
|
100. 0.0001 /
|
||||||
|
|
||||||
|
RPTSOL
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=2' /
|
||||||
|
|
||||||
|
SUMMARY ======
|
||||||
|
RUNSUM
|
||||||
|
|
||||||
|
SEPARATE
|
||||||
|
|
||||||
|
SCHEDULE ======
|
||||||
|
|
||||||
|
RPTSCHED
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=3' 'NEWTON=2' /
|
||||||
|
|
||||||
|
|
||||||
|
END
|
168
tests/satfuncStandard.DATA
Normal file
168
tests/satfuncStandard.DATA
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
NOECHO
|
||||||
|
|
||||||
|
RUNSPEC ======
|
||||||
|
|
||||||
|
WATER
|
||||||
|
OIL
|
||||||
|
GAS
|
||||||
|
DISGAS
|
||||||
|
VAPOIL
|
||||||
|
|
||||||
|
TABDIMS
|
||||||
|
1 1 40 20 1 20 /
|
||||||
|
|
||||||
|
DIMENS
|
||||||
|
1 1 10
|
||||||
|
/
|
||||||
|
|
||||||
|
WELLDIMS
|
||||||
|
30 10 2 30 /
|
||||||
|
|
||||||
|
--ENDSCALE
|
||||||
|
--DIR REV NTENDP NSENDP
|
||||||
|
--'NODIR' 'REVERS' 1 20 /
|
||||||
|
--/
|
||||||
|
|
||||||
|
START
|
||||||
|
1 'JAN' 1990 /
|
||||||
|
|
||||||
|
NSTACK
|
||||||
|
25 /
|
||||||
|
|
||||||
|
EQLDIMS
|
||||||
|
-- NTEQUL
|
||||||
|
1 /
|
||||||
|
|
||||||
|
|
||||||
|
FMTOUT
|
||||||
|
FMTIN
|
||||||
|
|
||||||
|
GRID ======
|
||||||
|
|
||||||
|
DXV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DYV
|
||||||
|
1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
DZV
|
||||||
|
10*5.0
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PORO
|
||||||
|
10*0.2
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
10*1.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PERMX
|
||||||
|
10*100.0
|
||||||
|
/
|
||||||
|
|
||||||
|
BOX
|
||||||
|
1 1 1 1 1 1 /
|
||||||
|
|
||||||
|
TOPS
|
||||||
|
0.0
|
||||||
|
/
|
||||||
|
|
||||||
|
PROPS ======
|
||||||
|
|
||||||
|
PVTO
|
||||||
|
-- Rs Pbub Bo Vo
|
||||||
|
0 1. 1.0000 1.20 /
|
||||||
|
20 40. 1.0120 1.17 /
|
||||||
|
40 80. 1.0255 1.14 /
|
||||||
|
60 120. 1.0380 1.11 /
|
||||||
|
80 160. 1.0510 1.08 /
|
||||||
|
100 200. 1.0630 1.06 /
|
||||||
|
120 240. 1.0750 1.03 /
|
||||||
|
140 280. 1.0870 1.00 /
|
||||||
|
160 320. 1.0985 .98 /
|
||||||
|
180 360. 1.1100 .95 /
|
||||||
|
200 400. 1.1200 .94
|
||||||
|
500. 1.1189 .94 /
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTG
|
||||||
|
-- Pg Rv Bg Vg
|
||||||
|
100 0.0001 0.010 0.1
|
||||||
|
0.0 0.0104 0.1 /
|
||||||
|
200 0.0004 0.005 0.2
|
||||||
|
0.0 0.0054 0.2 /
|
||||||
|
/
|
||||||
|
|
||||||
|
--SCALECRS
|
||||||
|
-- YES /
|
||||||
|
-- NO/
|
||||||
|
|
||||||
|
SWOF
|
||||||
|
0.1 0.0 1.0 0.9
|
||||||
|
0.2 0.0 0.8 0.8
|
||||||
|
0.3 0.1 0.6 0.7
|
||||||
|
0.4 0.2 0.4 0.6
|
||||||
|
0.7 0.5 0.1 0.3
|
||||||
|
0.8 0.6 0.0 0.2
|
||||||
|
0.9 0.7 0.0 0.1
|
||||||
|
/
|
||||||
|
|
||||||
|
SGOF
|
||||||
|
0.0 0.0 1.0 0.2
|
||||||
|
0.1 0.0 0.7 0.4
|
||||||
|
0.2 0.1 0.6 0.6
|
||||||
|
0.8 0.7 0.0 2.0
|
||||||
|
0.9 1.0 0.0 2.1
|
||||||
|
/
|
||||||
|
|
||||||
|
PVTW
|
||||||
|
--RefPres Bw Comp Vw Cv
|
||||||
|
1. 1.0 4.0E-5 0.96 0.0 /
|
||||||
|
|
||||||
|
|
||||||
|
ROCK
|
||||||
|
--RefPres Comp
|
||||||
|
1. 5.0E-5 /
|
||||||
|
|
||||||
|
DENSITY
|
||||||
|
700 1000 1
|
||||||
|
/
|
||||||
|
|
||||||
|
SOLUTION ======
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
45 150 50 0.25 45 0.35 1 1 0
|
||||||
|
/
|
||||||
|
|
||||||
|
RSVD
|
||||||
|
0 0.0
|
||||||
|
100 100. /
|
||||||
|
|
||||||
|
RVVD
|
||||||
|
0. 0.
|
||||||
|
100. 0.0001 /
|
||||||
|
|
||||||
|
RPTSOL
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=2' /
|
||||||
|
|
||||||
|
SUMMARY ======
|
||||||
|
RUNSUM
|
||||||
|
|
||||||
|
SEPARATE
|
||||||
|
|
||||||
|
SCHEDULE ======
|
||||||
|
|
||||||
|
RPTSCHED
|
||||||
|
'PRES' 'PGAS' 'PWAT' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=3' 'NEWTON=2' /
|
||||||
|
|
||||||
|
|
||||||
|
END
|
570
tests/test_satfunc.cpp
Normal file
570
tests/test_satfunc.cpp
Normal file
@ -0,0 +1,570 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 SINTEF ICT, Applied Mathematics.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/* --- Boost.Test boilerplate --- */
|
||||||
|
#if HAVE_DYNAMIC_BOOST_TEST
|
||||||
|
#define BOOST_TEST_DYN_LINK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NVERBOSE // Suppress own messages when throw()ing
|
||||||
|
|
||||||
|
#define BOOST_TEST_MODULE UnitsTest
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include <boost/test/floating_point_comparison.hpp>
|
||||||
|
|
||||||
|
/* --- our own headers --- */
|
||||||
|
|
||||||
|
#include <opm/core/simulator/initStateEquil.hpp>
|
||||||
|
|
||||||
|
#include <opm/core/grid.h>
|
||||||
|
#include <opm/core/grid/cart_grid.h>
|
||||||
|
#include <opm/core/grid/GridManager.hpp>
|
||||||
|
|
||||||
|
#include <opm/core/props/BlackoilPropertiesBasic.hpp>
|
||||||
|
#include <opm/core/props/BlackoilPropertiesFromDeck.hpp>
|
||||||
|
#include <opm/core/props/BlackoilPhases.hpp>
|
||||||
|
|
||||||
|
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
||||||
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
||||||
|
|
||||||
|
#include <opm/core/pressure/msmfem/partition.h>
|
||||||
|
|
||||||
|
#include <opm/core/utility/parameters/ParameterGroup.hpp>
|
||||||
|
#include <opm/core/utility/Units.hpp>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <iostream>
|
||||||
|
#include <limits>
|
||||||
|
#include <memory>
|
||||||
|
#include <numeric>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE ()
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (GwsegStandard)
|
||||||
|
{
|
||||||
|
// This is the basic (no eps and hysteris) version of
|
||||||
|
// the Gwseg model.
|
||||||
|
|
||||||
|
//std::cout << "==================================== GwsegStandard ====================================" << std::endl;
|
||||||
|
|
||||||
|
Opm::parameter::ParameterGroup param;
|
||||||
|
|
||||||
|
Opm::GridManager gm(1, 1, 10, 1.0, 1.0, 5.0);
|
||||||
|
const UnstructuredGrid& grid = *(gm.c_grid());
|
||||||
|
Opm::ParserPtr parser(new Opm::Parser() );
|
||||||
|
Opm::DeckConstPtr deck = parser->parseFile("satfuncStandard.DATA");
|
||||||
|
Opm::EclipseStateConstPtr eclipseState(new Opm::EclipseState(deck));
|
||||||
|
Opm::BlackoilPropertiesFromDeck props(deck, eclipseState, grid, param, false);
|
||||||
|
|
||||||
|
const int np = props.numPhases();
|
||||||
|
const int wpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Aqua];
|
||||||
|
const int opos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Liquid];
|
||||||
|
const int gpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Vapour];
|
||||||
|
|
||||||
|
BOOST_REQUIRE(np == 3);
|
||||||
|
BOOST_REQUIRE(wpos == 0);
|
||||||
|
BOOST_REQUIRE(opos == 1);
|
||||||
|
BOOST_REQUIRE(gpos == 2);
|
||||||
|
|
||||||
|
const int n=11;
|
||||||
|
double s[n*np];
|
||||||
|
int cells[n];
|
||||||
|
double kr[n*np];
|
||||||
|
double dkrds[n*np*np];
|
||||||
|
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
cells[i] = 0;
|
||||||
|
s[i*np+wpos] = i*0.1;
|
||||||
|
s[i*np+opos] = 1.0-s[i*np+wpos];
|
||||||
|
s[i*np+gpos] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
props.relperm(n, s, cells, kr, dkrds);
|
||||||
|
|
||||||
|
double krw[11] = {0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7};
|
||||||
|
double kro[11] = {1.0, 1.0, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0};
|
||||||
|
double DkrwDsw[11] = {0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0};
|
||||||
|
double DkroDsw[11] = {-2.0, -2.0, -2.0, -2.0, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0};
|
||||||
|
double DkroDsg[11] = {-5.0, -5.0, -3.0, -2.0, -0.66666666666666741, -0.75, -0.8,
|
||||||
|
-0.83333333333333237, 0.14285714285714296, 0.0, 0.0};
|
||||||
|
|
||||||
|
const double reltol = 1.0e-6;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+wpos], krw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+opos], kro[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+wpos], DkrwDsw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+opos], DkroDsw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+np*gpos+opos], DkroDsg[i], reltol);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
std::cout << std::setw(12) << "sw";
|
||||||
|
std::cout << std::setw(12) << "so";
|
||||||
|
std::cout << std::setw(12) << "sg";
|
||||||
|
std::cout << std::setw(12) << "krw";
|
||||||
|
std::cout << std::setw(12) << "kro";
|
||||||
|
std::cout << std::setw(12) << "krg";
|
||||||
|
std::cout << std::setw(12) << "DkrwDsw";
|
||||||
|
std::cout << std::setw(12) << "DkroDsw";
|
||||||
|
std::cout << std::setw(12) << "DkrgDsw";
|
||||||
|
std::cout << std::setw(12) << "DkrwDso";
|
||||||
|
std::cout << std::setw(12) << "DkroDso";
|
||||||
|
std::cout << std::setw(12) << "DkrgDso";
|
||||||
|
std::cout << std::setw(12) << "DkrwDsg";
|
||||||
|
std::cout << std::setw(12) << "DkroDsg";
|
||||||
|
std::cout << std::setw(12) << "DkrgDsg";
|
||||||
|
std::cout << std::endl;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
std::cout << std::setw(12) << s[i*np+wpos] << std::setw(12) << s[i*np+opos] << std::setw(12) << s[i*np+gpos]
|
||||||
|
<< std::setw(12) << kr[i*np+wpos] << std::setw(12) << kr[i*np+opos] << std::setw(12) << kr[i*np+gpos];
|
||||||
|
for (int j=0; j<np*np; ++j) {
|
||||||
|
std::cout << std::setw(12) << dkrds[i*np*np+j];
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (GwsegEPSBase)
|
||||||
|
{
|
||||||
|
// This is the eps (but no hysteris) version of the Gwseg model.
|
||||||
|
// However, only default scaling parameters, i.e no scaling.
|
||||||
|
|
||||||
|
//std::cout << "==================================== GwsegEPSBase ====================================" << std::endl;
|
||||||
|
|
||||||
|
Opm::parameter::ParameterGroup param;
|
||||||
|
|
||||||
|
Opm::GridManager gm(1, 1, 10, 1.0, 1.0, 5.0);
|
||||||
|
const UnstructuredGrid& grid = *(gm.c_grid());
|
||||||
|
Opm::ParserPtr parser(new Opm::Parser() );
|
||||||
|
Opm::DeckConstPtr deck = parser->parseFile("satfuncEPSBase.DATA");
|
||||||
|
Opm::EclipseStateConstPtr eclipseState(new Opm::EclipseState(deck));
|
||||||
|
Opm::BlackoilPropertiesFromDeck props(deck, eclipseState, grid, param, false);
|
||||||
|
|
||||||
|
const int np = props.numPhases();
|
||||||
|
const int wpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Aqua];
|
||||||
|
const int opos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Liquid];
|
||||||
|
const int gpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Vapour];
|
||||||
|
|
||||||
|
BOOST_REQUIRE(np == 3);
|
||||||
|
BOOST_REQUIRE(wpos == 0);
|
||||||
|
BOOST_REQUIRE(opos == 1);
|
||||||
|
BOOST_REQUIRE(gpos == 2);
|
||||||
|
|
||||||
|
const int n=11;
|
||||||
|
double s[n*np];
|
||||||
|
int cells[n];
|
||||||
|
double kr[n*np];
|
||||||
|
double dkrds[n*np*np];
|
||||||
|
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
cells[i] = 0;
|
||||||
|
s[i*np+wpos] = i*0.1;
|
||||||
|
s[i*np+opos] = 1.0-s[i*np+wpos];
|
||||||
|
s[i*np+gpos] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
props.relperm(n, s, cells, kr, dkrds);
|
||||||
|
|
||||||
|
double krw[11] = {0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7};
|
||||||
|
double kro[11] = {1.0, 1.0, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0};
|
||||||
|
double DkrwDsw[11] = {0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0};
|
||||||
|
double DkroDsw[11] = {0.0, 0.0, -2.0, -2.0, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0};
|
||||||
|
double DkroDsg[11] = {-2.3283064365386963e-10, -2.3283064365386963e-10, -3.0, -2.0,
|
||||||
|
-0.66666666666666741, -0.75, -0.8, -0.83333333333333237, 0.14285714285714296, 0.0, 0.0};
|
||||||
|
|
||||||
|
// Note that DkrwDsw[2], DkroDsw[0], DkroDsw[1], DkroDsg[0] and DkroDsg[0]
|
||||||
|
// differs from corresponding values for the previous test although the
|
||||||
|
// tables are identical. This issue should eventually be resolved, but first
|
||||||
|
// one should consider the principles for calculating these derivatives.
|
||||||
|
|
||||||
|
|
||||||
|
const double reltol = 1.0e-6;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+wpos], krw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+opos], kro[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+wpos], DkrwDsw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+opos], DkroDsw[i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+np*gpos+opos], DkroDsg[i], reltol);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
std::cout << std::setw(12) << "sw";
|
||||||
|
std::cout << std::setw(12) << "so";
|
||||||
|
std::cout << std::setw(12) << "sg";
|
||||||
|
std::cout << std::setw(12) << "krw";
|
||||||
|
std::cout << std::setw(12) << "kro";
|
||||||
|
std::cout << std::setw(12) << "krg";
|
||||||
|
std::cout << std::setw(12) << "DkrwDsw";
|
||||||
|
std::cout << std::setw(12) << "DkroDsw";
|
||||||
|
std::cout << std::setw(12) << "DkrgDsw";
|
||||||
|
std::cout << std::setw(12) << "DkrwDso";
|
||||||
|
std::cout << std::setw(12) << "DkroDso";
|
||||||
|
std::cout << std::setw(12) << "DkrgDso";
|
||||||
|
std::cout << std::setw(12) << "DkrwDsg";
|
||||||
|
std::cout << std::setw(12) << "DkroDsg";
|
||||||
|
std::cout << std::setw(12) << "DkrgDsg";
|
||||||
|
std::cout << std::endl;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
std::cout << std::setw(12) << s[i*np+wpos] << std::setw(12) << s[i*np+opos] << std::setw(12) << s[i*np+gpos]
|
||||||
|
<< std::setw(12) << kr[i*np+wpos] << std::setw(12) << kr[i*np+opos] << std::setw(12) << kr[i*np+gpos];
|
||||||
|
for (int j=0; j<np*np; ++j) {
|
||||||
|
std::cout << std::setw(12) << dkrds[i*np*np+j];
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (GwsegEPS_A)
|
||||||
|
{
|
||||||
|
// This is the eps (but no hysteris) version of the Gwseg model.
|
||||||
|
// However, only default scaling parameters, i.e no scaling.
|
||||||
|
|
||||||
|
//std::cout << "==================================== GwsegEPS_A ====================================" << std::endl;
|
||||||
|
|
||||||
|
Opm::parameter::ParameterGroup param;
|
||||||
|
|
||||||
|
Opm::GridManager gm(1, 1, 10, 1.0, 1.0, 5.0);
|
||||||
|
const UnstructuredGrid& grid = *(gm.c_grid());
|
||||||
|
Opm::ParserPtr parser(new Opm::Parser() );
|
||||||
|
Opm::DeckConstPtr deck = parser->parseFile("satfuncEPS_A.DATA");
|
||||||
|
Opm::EclipseStateConstPtr eclipseState(new Opm::EclipseState(deck));
|
||||||
|
Opm::BlackoilPropertiesFromDeck props(deck, eclipseState, grid, param, false);
|
||||||
|
|
||||||
|
const int np = props.numPhases();
|
||||||
|
const int wpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Aqua];
|
||||||
|
const int opos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Liquid];
|
||||||
|
const int gpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Vapour];
|
||||||
|
|
||||||
|
BOOST_REQUIRE(np == 3);
|
||||||
|
BOOST_REQUIRE(wpos == 0);
|
||||||
|
BOOST_REQUIRE(opos == 1);
|
||||||
|
BOOST_REQUIRE(gpos == 2);
|
||||||
|
|
||||||
|
const int n=11;
|
||||||
|
double s[n*np];
|
||||||
|
int cells[n];
|
||||||
|
double kr[n*np];
|
||||||
|
double dkrds[n*np*np];
|
||||||
|
|
||||||
|
const int ncell = 8;
|
||||||
|
|
||||||
|
double krw[ncell][n] = {{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7}};
|
||||||
|
double kro[ncell][n] = {{1.0, 1.0, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0}};
|
||||||
|
double DkrwDsw[ncell][n] = {{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0},
|
||||||
|
{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0}};
|
||||||
|
double DkroDsw[ncell][n] = {{0.0, 0.0, -2.0, -2.0, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0}};
|
||||||
|
double DkroDsg[ncell][n] = {{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0}};
|
||||||
|
|
||||||
|
for (int icell=0; icell<ncell; ++icell) {
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
cells[i] = icell;
|
||||||
|
s[i*np+wpos] = i*0.1;
|
||||||
|
s[i*np+opos] = 1.0-s[i*np+wpos];
|
||||||
|
s[i*np+gpos] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
props.relperm(n, s, cells, kr, dkrds);
|
||||||
|
|
||||||
|
const double reltol = 1.0e-3;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+wpos], krw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+opos], kro[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+wpos], DkrwDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+opos], DkroDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+np*gpos+opos], DkroDsg[icell][i], reltol);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
std::cout << std::setw(12) << "sw: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << s[i*np+wpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "so: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << s[i*np+opos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "sg: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << s[i*np+gpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "krw: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << kr[i*np+wpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "kro: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << kr[i*np+opos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "krg: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << kr[i*np+gpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrwDsw: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+wpos*np+wpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkroDsw: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+wpos*np+opos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrgDsw: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+wpos*np+gpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrwDso: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+opos*np+wpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkroDso: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+opos*np+opos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrgDso: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+opos*np+gpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrwDsg: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+gpos*np+wpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkroDsg: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+gpos*np+opos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::setw(12) << "DkrgDsg: ";
|
||||||
|
for (int i=0; i<n; ++i) std::cout << dkrds[i*np*np+gpos*np+gpos] << ", ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << std::endl;
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (GwsegEPS_B)
|
||||||
|
{
|
||||||
|
// This is the eps (but no hysteris) version of the Gwseg model.
|
||||||
|
// However, only default scaling parameters, i.e no scaling.
|
||||||
|
|
||||||
|
//std::cout << "==================================== GwsegEPS_B ====================================" << std::endl;
|
||||||
|
/*
|
||||||
|
Opm::parameter::ParameterGroup param;
|
||||||
|
|
||||||
|
Opm::GridManager gm(1, 1, 10, 1.0, 1.0, 5.0);
|
||||||
|
const UnstructuredGrid& grid = *(gm.c_grid());
|
||||||
|
Opm::ParserPtr parser(new Opm::Parser() );
|
||||||
|
Opm::DeckConstPtr deck = parser->parseFile("satfuncEPS_B.DATA");
|
||||||
|
Opm::EclipseStateConstPtr eclipseState(new Opm::EclipseState(deck));
|
||||||
|
Opm::BlackoilPropertiesFromDeck props(deck, eclipseState, grid, param, false);
|
||||||
|
|
||||||
|
const int np = props.numPhases();
|
||||||
|
const int wpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Aqua];
|
||||||
|
const int opos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Liquid];
|
||||||
|
const int gpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Vapour];
|
||||||
|
|
||||||
|
BOOST_REQUIRE(np == 3);
|
||||||
|
BOOST_REQUIRE(wpos == 0);
|
||||||
|
BOOST_REQUIRE(opos == 1);
|
||||||
|
BOOST_REQUIRE(gpos == 2);
|
||||||
|
|
||||||
|
const int n=11;
|
||||||
|
double s[n*np];
|
||||||
|
int cells[n];
|
||||||
|
double kr[n*np];
|
||||||
|
double dkrds[n*np*np];
|
||||||
|
|
||||||
|
const int ncell = 8;
|
||||||
|
|
||||||
|
double krw[ncell][n] = {{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7}};
|
||||||
|
double kro[ncell][n] = {{1.0, 1.0, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0}};
|
||||||
|
double DkrwDsw[ncell][n] = {{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0},
|
||||||
|
{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0}};
|
||||||
|
double DkroDsw[ncell][n] = {{0.0, 0.0, -2.0, -2.0, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0}};
|
||||||
|
double DkroDsg[ncell][n] = {{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0}};
|
||||||
|
|
||||||
|
for (int icell=0; icell<ncell; ++icell) {
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
cells[i] = icell;
|
||||||
|
s[i*np+wpos] = i*0.1;
|
||||||
|
s[i*np+opos] = 1.0-s[i*np+wpos];
|
||||||
|
s[i*np+gpos] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
props.relperm(n, s, cells, kr, dkrds);
|
||||||
|
|
||||||
|
const double reltol = 1.0e-3;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+wpos], krw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+opos], kro[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+wpos], DkrwDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+opos], DkroDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+np*gpos+opos], DkroDsg[icell][i], reltol);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (GwsegEPS_C)
|
||||||
|
{
|
||||||
|
// This is the eps (but no hysteris) version of the Gwseg model.
|
||||||
|
// However, only default scaling parameters, i.e no scaling.
|
||||||
|
|
||||||
|
//std::cout << "==================================== GwsegEPS_C ====================================" << std::endl;
|
||||||
|
|
||||||
|
Opm::parameter::ParameterGroup param;
|
||||||
|
|
||||||
|
Opm::GridManager gm(1, 1, 10, 1.0, 1.0, 5.0);
|
||||||
|
const UnstructuredGrid& grid = *(gm.c_grid());
|
||||||
|
Opm::ParserPtr parser(new Opm::Parser() );
|
||||||
|
Opm::DeckConstPtr deck = parser->parseFile("satfuncEPS_C.DATA");
|
||||||
|
Opm::EclipseStateConstPtr eclipseState(new Opm::EclipseState(deck));
|
||||||
|
Opm::BlackoilPropertiesFromDeck props(deck, eclipseState, grid, param, false);
|
||||||
|
|
||||||
|
const int np = props.numPhases();
|
||||||
|
const int wpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Aqua];
|
||||||
|
const int opos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Liquid];
|
||||||
|
const int gpos = props.phaseUsage().phase_pos[Opm::BlackoilPhases::Vapour];
|
||||||
|
|
||||||
|
BOOST_REQUIRE(np == 3);
|
||||||
|
BOOST_REQUIRE(wpos == 0);
|
||||||
|
BOOST_REQUIRE(opos == 1);
|
||||||
|
BOOST_REQUIRE(gpos == 2);
|
||||||
|
|
||||||
|
const int n=11;
|
||||||
|
double s[n*np];
|
||||||
|
int cells[n];
|
||||||
|
double kr[n*np];
|
||||||
|
double dkrds[n*np*np];
|
||||||
|
|
||||||
|
const int ncell = 8;
|
||||||
|
|
||||||
|
double krw[ncell][n] = {{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.56, 0.7, 0.7},
|
||||||
|
{0, 0, 0, 0, 0, 0.233333, 0.466667, 0.7, 0.7, 0.7, 0.7}};
|
||||||
|
double kro[ncell][n] = {{1.0, 1.0, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 0.8, 0.6, 0.4, 0.3, 0.2, 0.1, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0},
|
||||||
|
{1, 1, 1, 0.766667, 0.533333, 0.35, 0.233333, 0.116667, 0, 0, 0}};
|
||||||
|
double DkrwDsw[ncell][n] = {{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0},
|
||||||
|
{0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0},
|
||||||
|
{0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 1.4, 1.4, 1.4, 1.4, 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 2.33333, 2.33333, 0, 0, 0, 0}};
|
||||||
|
double DkroDsw[ncell][n] = {{0.0, 0.0, -2.0, -2.0, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, -2, -2, -1, -1, -1, -1, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0},
|
||||||
|
{0, 0, 0, -2.33333, -2.33333, -1.16667, -1.16667, -1.16667, 0, 0, 0}};
|
||||||
|
double DkroDsg[ncell][n] = {{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -3, -2, -0.666667, -0.75, -0.8, -0.833333, 0.142857, 0, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0},
|
||||||
|
{-2.32831e-10, -2.32831e-10, -2.32831e-10, -3.14286, -2.14286, -0.809524, -0.892857, -0.942857, 0.190476, 3.17207e-16, 0}};
|
||||||
|
|
||||||
|
for (int icell=0; icell<ncell; ++icell) {
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
cells[i] = icell;
|
||||||
|
s[i*np+wpos] = i*0.1;
|
||||||
|
s[i*np+opos] = 1.0-s[i*np+wpos];
|
||||||
|
s[i*np+gpos] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
props.relperm(n, s, cells, kr, dkrds);
|
||||||
|
|
||||||
|
const double reltol = 1.0e-3;
|
||||||
|
for (int i=0; i<n; ++i) {
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+wpos], krw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(kr[i*np+opos], kro[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+wpos], DkrwDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+opos], DkroDsw[icell][i], reltol);
|
||||||
|
BOOST_CHECK_CLOSE(dkrds[i*np*np+np*gpos+opos], DkroDsg[icell][i], reltol);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
Loading…
Reference in New Issue
Block a user