Files
opm-common/python/tests/test_ecloutput.py
2020-03-23 10:57:49 +01:00

279 lines
7.9 KiB
Python
Executable File

import unittest
import sys
import numpy as np
import io
import os
from opm.io.ecl import EclOutput, EclFile, ERst, eclArrType
try:
from tests.utils import test_path
except ImportError:
from utils import test_path
class TestEclOutput(unittest.TestCase):
def test_write_formatted_float32(self):
npArr1=np.array([1.1, 2.2e+28, 3.3, 4.4], dtype='float32')
testFile = test_path("data/RESULT.FINIT")
# default is binary format (unformatted), new file
out1 = EclOutput(testFile, formatted=True, append=False)
out1.write("ARR1", npArr1)
file1 = EclFile(testFile)
testArray = file1[0]
self.assertEqual(len(testArray), len(npArr1))
for v1,v2 in zip (testArray, npArr1):
self.assertEqual(v1, v2)
if os.path.isfile(testFile):
os.remove(testFile)
def test_write_binary_float32(self):
npArr1=np.array([1.1, 2.2e+28, 3.3, 4.4], dtype='float32')
testFile = test_path("data/RESULT.INIT")
# default is binary format (unformatted) and append = false
out1 = EclOutput(testFile)
out1.write("ARR1", npArr1)
file1 = EclFile(testFile)
testArray = file1[0]
self.assertEqual(len(testArray), len(npArr1))
for v1,v2 in zip (testArray, npArr1):
self.assertEqual(v1, v2)
if os.path.isfile(testFile):
os.remove(testFile)
def test_write_binary_append(self):
npArr1 = np.array([1.1, 2.2e+28, 3.3, 4.4], dtype='float32')
npArr2 = np.array([11.11, 12.12, 13.13, 14.14], dtype='float64')
npArr3 = np.array([1,2,3,4], dtype='int32')
npArr4 = np.array(["PROD1","","INJ1"], dtype='str')
npArr5 = np.array([True, True, False, True, False, False], dtype='bool')
#npArr6=np.array([11,12,13,14], dtype='int64')
testFile = test_path("data/RESULT.INIT")
# default is binary format (unformatted) and append = false
# will create a new file1
out1 = EclOutput(testFile)
out1.write("ARR0", npArr1)
# append = False (default value), will create a new file,
# hence, array ARR0 from out1 will be errased
out2 = EclOutput(testFile)
out2.write("ARR1", npArr1)
# append =True, will add ARR2 to existing file
out3 = EclOutput(testFile, append=True)
out3.write("ARR2", npArr2)
out3.write("ARR3", npArr3)
out3.write("ARR4", npArr4)
out3.write("ARR5", npArr5)
file1 = EclFile(testFile)
self.assertEqual(len(file1), 5)
# check array ARR1
testArray = file1[0]
self.assertEqual(len(testArray), len(npArr1))
for v1,v2 in zip (testArray, npArr1):
self.assertEqual(v1, v2)
# check array ARR2
testArray = file1[1]
self.assertEqual(len(testArray), len(npArr2))
for v1,v2 in zip (testArray, npArr2):
self.assertEqual(v1, v2)
# check array ARR3
testArray = file1[2]
self.assertEqual(len(testArray), len(npArr3))
for v1,v2 in zip (testArray, npArr3):
self.assertEqual(v1, v2)
# check array ARR4
testArray = file1[3]
self.assertEqual(len(testArray), len(npArr4))
for v1,v2 in zip (testArray, npArr4):
self.assertEqual(v1, v2)
# check array ARR5
testArray = file1[4]
self.assertEqual(len(testArray), len(npArr5))
for v1,v2 in zip (testArray, npArr5):
self.assertEqual(v1, v2)
if os.path.isfile(testFile):
os.remove(testFile)
def test_write_formatted_append(self):
npArr1 = np.array([1.1, 2.2e+28, 3.3, 4.4], dtype='float32')
npArr2 = np.array([11.11, 12.12, 13.13, 14.14], dtype='float64')
npArr3 = np.array([1,2,3,4], dtype='int32')
npArr4 = np.array(["PROD1","","INJ1"], dtype='str')
npArr5 = np.array([True, True, False, True, False, False], dtype='bool')
#npArr6=np.array([11,12,13,14], dtype='int64')
testFile = test_path("data/RESULT.FINIT")
# default is binary format (unformatted) and append = false
# will create a new file1
out1 = EclOutput(testFile, formatted = True)
out1.write("ARR0", npArr1)
# append = False (default value), will create a new file,
# hence, array ARR0 from out1 will be errased
out2 = EclOutput(testFile, formatted = True)
out2.write("ARR1", npArr1)
# append =True, will add ARR2 to existing file
out3 = EclOutput(testFile, append=True, formatted = True)
out3.write("ARR2", npArr2)
out3.write("ARR3", npArr3)
out3.write("ARR4", npArr4)
out3.write("ARR5", npArr5)
file1 = EclFile(testFile)
self.assertEqual(len(file1), 5)
# check array ARR1
testArray = file1[0]
self.assertEqual(len(testArray), len(npArr1))
for v1,v2 in zip (testArray, npArr1):
self.assertEqual(v1, v2)
# check array ARR2
testArray = file1[1]
self.assertEqual(len(testArray), len(npArr2))
for v1,v2 in zip (testArray, npArr2):
self.assertEqual(v1, v2)
# check array ARR3
testArray = file1[2]
self.assertEqual(len(testArray), len(npArr3))
for v1,v2 in zip (testArray, npArr3):
self.assertEqual(v1, v2)
# check array ARR4
testArray = file1[3]
self.assertEqual(len(testArray), len(npArr4))
for v1,v2 in zip (testArray, npArr4):
self.assertEqual(v1, v2)
# check array ARR5
testArray = file1[4]
self.assertEqual(len(testArray), len(npArr5))
for v1,v2 in zip (testArray, npArr5):
self.assertEqual(v1, v2)
if os.path.isfile(testFile):
os.remove(testFile)
def test_rewrite_rstfile_(self):
rstep = 74
rst1 = ERst(test_path("data/SPE9.UNRST"))
arrayList74=rst1.arrays(rstep)
outFile = test_path("data/TMP.UNRST")
out1 = EclOutput(outFile)
for n, (name, arrType, arrSize) in enumerate(arrayList74):
if arrType == eclArrType.MESS:
out1.write_message(name)
else:
array = rst1[name, rstep]
out1.write(name, array)
rst2 = ERst(outFile)
tmpArrayList74=rst2.arrays(rstep)
self.assertEqual(len(tmpArrayList74), len(arrayList74))
for n in range(0, len(tmpArrayList74)):
name1, arrType1, arrSize1 = tmpArrayList74[n]
name2, arrType2, arrSize2 = arrayList74[n]
self.assertEqual(name1, name2)
self.assertEqual(arrType1, arrType2)
if arrType1 != eclArrType.MESS:
arr1 = rst1[name1, rstep]
arr2 = rst2[name2, rstep]
self.assertEqual(len(arr1), len(arr2))
for v1,v2 in zip(arr1, arr2):
self.assertEqual(v1, v2)
if os.path.isfile(outFile):
os.remove(outFile)
def test_write_lists(self):
intList = [1,2,3,4,5,6]
boolList = [True, True, False, True]
strList = ["A-1H", "A-2H", "A-3H"]
testFile = "data/TMP.DAT"
outFile = test_path(testFile)
out1 = EclOutput(outFile)
out1.write("ARR1", intList)
out1.write("ARR2", boolList)
out1.write("ARR3", strList)
file1 = EclFile(outFile)
arr1 = file1["ARR1"]
arr2 = file1["ARR2"]
arr3 = file1["ARR3"]
self.assertEqual(len(arr1), len(intList))
self.assertEqual(len(arr2), len(boolList))
self.assertEqual(len(arr3), len(strList))
for v1, v2 in zip(arr1, intList):
self.assertEqual(v1, v2)
for v1, v2 in zip(arr2, boolList):
self.assertEqual(v1, v2)
for v1, v2 in zip(arr3, strList):
self.assertEqual(v1, v2)
if os.path.isfile(testFile):
os.remove(testFile)
if __name__ == "__main__":
unittest.main()