2019-09-04 14:42:52 +02:00
|
|
|
import unittest
|
|
|
|
|
import os.path
|
|
|
|
|
import sys
|
|
|
|
|
|
2019-10-24 13:00:06 +02:00
|
|
|
import numpy as np
|
|
|
|
|
|
2019-09-04 14:42:52 +02:00
|
|
|
from opm.io.parser import Parser
|
|
|
|
|
from opm.io.parser import ParseContext
|
2019-09-11 11:46:46 +02:00
|
|
|
from opm.io.deck import DeckKeyword
|
2019-10-28 20:16:13 +01:00
|
|
|
try:
|
|
|
|
|
from tests.utils import test_path
|
|
|
|
|
except ImportError:
|
|
|
|
|
from utils import test_path
|
|
|
|
|
|
2019-09-11 11:46:46 +02:00
|
|
|
|
2019-10-17 14:26:07 +02:00
|
|
|
unit_foot = 0.3048 #meters
|
2019-09-04 14:42:52 +02:00
|
|
|
|
|
|
|
|
class TestParser(unittest.TestCase):
|
|
|
|
|
|
2019-10-17 14:26:07 +02:00
|
|
|
REGIONDATA = """
|
|
|
|
|
START -- 0
|
|
|
|
|
10 MAI 2007 /
|
|
|
|
|
RUNSPEC
|
|
|
|
|
FIELD
|
|
|
|
|
DIMENS
|
|
|
|
|
2 2 1 /
|
|
|
|
|
GRID
|
|
|
|
|
DX
|
|
|
|
|
4*0.25 /
|
|
|
|
|
DY
|
|
|
|
|
4*0.25 /
|
|
|
|
|
DZ
|
|
|
|
|
4*0.25 /
|
|
|
|
|
TOPS
|
|
|
|
|
4*0.25 /
|
|
|
|
|
REGIONS
|
|
|
|
|
OPERNUM
|
|
|
|
|
3 3 1 2 /
|
|
|
|
|
FIPNUM
|
|
|
|
|
1 1 2 3 /
|
|
|
|
|
"""
|
|
|
|
|
|
2019-09-04 14:42:52 +02:00
|
|
|
def setUp(self):
|
2019-10-25 09:48:30 +02:00
|
|
|
self.spe3fn = test_path('spe3/SPE3CASE1.DATA')
|
|
|
|
|
self.norne_fname = test_path('../examples/data/norne/NORNE_ATW2013.DATA')
|
2019-09-04 14:42:52 +02:00
|
|
|
|
|
|
|
|
def test_create(self):
|
|
|
|
|
parser = Parser()
|
|
|
|
|
deck = parser.parse(self.spe3fn)
|
2019-10-11 16:29:09 +02:00
|
|
|
active_unit_system = deck.active_unit_system()
|
|
|
|
|
default_unit_system = deck.default_unit_system()
|
2019-10-13 22:53:56 +02:00
|
|
|
self.assertEqual(active_unit_system.name, "Field")
|
2019-09-04 14:42:52 +02:00
|
|
|
|
|
|
|
|
context = ParseContext()
|
|
|
|
|
deck = parser.parse(self.spe3fn, context)
|
|
|
|
|
|
|
|
|
|
with open(self.spe3fn) as f:
|
|
|
|
|
string = f.read()
|
|
|
|
|
deck = parser.parse_string(string)
|
|
|
|
|
deck = parser.parse_string(string, context)
|
|
|
|
|
|
2019-10-24 13:00:06 +02:00
|
|
|
def test_deck_kw_records(self):
|
2019-09-06 10:45:33 +02:00
|
|
|
parser = Parser()
|
2019-10-17 14:26:07 +02:00
|
|
|
deck = parser.parse_string(self.REGIONDATA)
|
|
|
|
|
active_unit_system = deck.active_unit_system()
|
|
|
|
|
default_unit_system = deck.default_unit_system()
|
|
|
|
|
self.assertEqual(active_unit_system.name, "Field")
|
|
|
|
|
|
2019-09-06 10:45:33 +02:00
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
|
kw = parser["NOT_A_VALID_KEYWORD"]
|
|
|
|
|
|
2019-10-04 11:37:18 +02:00
|
|
|
field = parser["FIELD"]
|
|
|
|
|
assert(field.name == "FIELD")
|
2019-09-06 10:45:33 +02:00
|
|
|
|
2019-10-04 11:37:18 +02:00
|
|
|
dkw_field = DeckKeyword(field)
|
|
|
|
|
assert(dkw_field.name == "FIELD")
|
|
|
|
|
|
2019-10-17 14:26:07 +02:00
|
|
|
DeckKeyword(parser["AQUCWFAC"], [[]], active_unit_system, default_unit_system)
|
2019-10-04 11:37:18 +02:00
|
|
|
|
|
|
|
|
with self.assertRaises(TypeError):
|
2019-10-17 14:26:07 +02:00
|
|
|
dkw_wrong = DeckKeyword(parser["AQUCWFAC"], [22.2, 0.25], active_unit_system, default_unit_system)
|
2019-10-04 11:37:18 +02:00
|
|
|
|
2019-10-17 14:26:07 +02:00
|
|
|
dkw_aqannc = DeckKeyword(parser["AQANNC"], [[12, 1, 2, 3, 0.89], [13, 4, 5, 6, 0.625]], active_unit_system, default_unit_system)
|
2019-10-04 11:37:18 +02:00
|
|
|
assert( len(dkw_aqannc[0]) == 5 )
|
2019-10-17 14:26:07 +02:00
|
|
|
assert( dkw_aqannc[0][2].get_int(0) == 2 )
|
|
|
|
|
assert( dkw_aqannc[1][1].get_int(0) == 4 )
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
|
value = dkw_aqannc[1][1].get_raw(0)
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
|
value = dkw_aqannc[1][1].get_SI(0)
|
|
|
|
|
assert( dkw_aqannc[1][4].get_raw(0) == 0.625 )
|
|
|
|
|
self.assertAlmostEqual( dkw_aqannc[1][4].get_SI(0), 0.625 * unit_foot**2 )
|
|
|
|
|
assert( dkw_aqannc[1][4].get_raw_data_list() == [0.625] )
|
|
|
|
|
self.assertAlmostEqual( dkw_aqannc[1][4].get_SI_data_list()[0], 0.625 * unit_foot**2 )
|
|
|
|
|
with self.assertRaises(ValueError):
|
|
|
|
|
value = dkw_aqannc[1][4].get_int(0)
|
|
|
|
|
|
|
|
|
|
dkw_aqantrc = DeckKeyword(parser["AQANTRC"], [[12, "ABC", 8]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw_aqantrc[0][1].get_str(0) == "ABC" )
|
|
|
|
|
assert( dkw_aqantrc[0][2].get_raw(0) == 8.0 )
|
|
|
|
|
|
|
|
|
|
dkw1 = DeckKeyword(parser["AQUCWFAC"], [["*", 0.25]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw1[0][0].get_raw(0) == 0.0 )
|
|
|
|
|
assert( dkw1[0][1].get_raw(0) == 0.25 )
|
|
|
|
|
|
|
|
|
|
dkw2 = DeckKeyword(parser["AQUCWFAC"], [[0.25, "*"]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw2[0][0].get_raw(0) == 0.25 )
|
|
|
|
|
assert( dkw2[0][1].get_raw(0) == 1.0 )
|
|
|
|
|
|
|
|
|
|
dkw3 = DeckKeyword(parser["AQUCWFAC"], [[0.50]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw3[0][0].get_raw(0) == 0.50 )
|
|
|
|
|
assert( dkw3[0][1].get_raw(0) == 1.0 )
|
|
|
|
|
|
|
|
|
|
dkw4 = DeckKeyword(parser["CBMOPTS"], [["3*", "A", "B", "C", "2*", 0.375]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw4[0][0].get_str(0) == "TIMEDEP" )
|
|
|
|
|
assert( dkw4[0][2].get_str(0) == "NOKRMIX" )
|
|
|
|
|
assert( dkw4[0][3].get_str(0) == "A" )
|
|
|
|
|
assert( dkw4[0][6].get_str(0) == "PMPVK" )
|
|
|
|
|
assert( dkw4[0][8].get_raw(0) == 0.375 )
|
|
|
|
|
with self.assertRaises(TypeError):
|
|
|
|
|
dkw4[0][8].get_data_list()
|
2019-10-04 11:37:18 +02:00
|
|
|
|
|
|
|
|
with self.assertRaises(TypeError):
|
2019-10-17 14:26:07 +02:00
|
|
|
DeckKeyword(parser["CBMOPTS"], [["3*", "A", "B", "C", "R2*", 0.77]], active_unit_system, default_unit_system)
|
2019-10-04 11:37:18 +02:00
|
|
|
|
2019-10-07 09:51:08 +02:00
|
|
|
with self.assertRaises(TypeError):
|
2019-10-17 14:26:07 +02:00
|
|
|
DeckKeyword(parser["CBMOPTS"], [["3*", "A", "B", "C", "2.2*", 0.77]], active_unit_system, default_unit_system)
|
2019-10-07 09:51:08 +02:00
|
|
|
|
2019-10-17 14:26:07 +02:00
|
|
|
dkw5 = DeckKeyword(parser["AQUCWFAC"], [["2*5.5"]], active_unit_system, default_unit_system)
|
|
|
|
|
assert( dkw5[0][0].get_raw(0) == 5.5 )
|
|
|
|
|
assert( dkw5[0][1].get_raw(0) == 5.5 )
|
2019-10-04 11:37:18 +02:00
|
|
|
|
2019-10-07 09:51:08 +02:00
|
|
|
with self.assertRaises(ValueError):
|
2019-10-17 14:26:07 +02:00
|
|
|
raise DeckKeyword(parser["AQANTRC"], [["1*2.2", "ABC", 8]], active_unit_system, default_unit_system)
|
2019-09-11 11:46:46 +02:00
|
|
|
|
2019-09-04 14:42:52 +02:00
|
|
|
|
2019-10-24 13:00:06 +02:00
|
|
|
def test_deck_kw_vector(self):
|
|
|
|
|
parser = Parser()
|
|
|
|
|
deck = parser.parse_string(self.REGIONDATA)
|
|
|
|
|
active_unit_system = deck.active_unit_system()
|
|
|
|
|
default_unit_system = deck.default_unit_system()
|
|
|
|
|
self.assertEqual(active_unit_system.name, "Field")
|
|
|
|
|
|
|
|
|
|
int_array = np.array([0, 1, 2, 3])
|
|
|
|
|
hbnum_kw = DeckKeyword( parser["HBNUM"], int_array)
|
|
|
|
|
assert( np.array_equal(hbnum_kw.get_int_array(), int_array) )
|
|
|
|
|
|
|
|
|
|
raw_array = np.array([1.1, 2.2, 3.3])
|
|
|
|
|
zcorn_kw = DeckKeyword( parser["ZCORN"], raw_array, active_unit_system, default_unit_system)
|
|
|
|
|
assert( np.array_equal(zcorn_kw.get_raw_array(), raw_array) )
|
|
|
|
|
si_array = zcorn_kw.get_SI_array()
|
|
|
|
|
self.assertAlmostEqual( si_array[0], 1.1 * unit_foot )
|
|
|
|
|
self.assertAlmostEqual( si_array[2], 3.3 * unit_foot )
|
2019-10-25 14:11:52 +02:00
|
|
|
|
|
|
|
|
assert( not( "ZCORN" in deck ) )
|
|
|
|
|
deck.add( zcorn_kw )
|
|
|
|
|
assert( "ZCORN" in deck )
|
2019-10-24 13:00:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-09-04 14:42:52 +02:00
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|
|
|
|
|
|