Files
ResInsight/GrpcInterface/Python/rips/tests/test_surfaces.py
T

159 lines
5.1 KiB
Python

import sys
import os
import tempfile
import pytest
from pathlib import Path
sys.path.insert(1, os.path.join(sys.path[0], "../../"))
import rips
import dataroot
def test_create_and_export_surface(rips_instance, initialize_test):
case_path = dataroot.PATH + "/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"
case = rips_instance.project.load_case(path=case_path)
assert len(case.grids()) == 1
surface_collection = rips_instance.project.descendants(rips.SurfaceCollection)[0]
surface = surface_collection.new_surface(case, 5)
assert surface
with tempfile.TemporaryDirectory(prefix="rips") as tmpdirname:
path = Path(tmpdirname, "mysurface.ts")
print("Temporary folder: ", path.as_posix())
surface.export_to_file(path.as_posix())
assert path.exists()
def test_create_regular_surface(rips_instance, initialize_test):
case_path = dataroot.PATH + "/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"
c = rips_instance.project.load_case(path=case_path)
assert len(c.grids()) == 1
surface_collection = rips_instance.project.descendants(rips.SurfaceCollection)[0]
bbox = c.reservoir_boundingbox()
depth = bbox.max_z - ((bbox.max_z - bbox.min_z) / 2.0)
origin_x = bbox.min_x
origin_y = bbox.min_y
name = "test surface name"
nx = 20
ny = 10
increment_x = (bbox.max_x - bbox.min_x) / float(nx)
increment_y = (bbox.max_y - bbox.min_y) / float(ny)
rotation = 23.4
s = surface_collection.new_regular_surface(
name=name,
origin_x=origin_x,
origin_y=origin_y,
depth=-depth,
nx=nx,
ny=ny,
increment_x=increment_x,
increment_y=increment_y,
rotation=rotation,
)
assert s.origin_x == origin_x
assert s.origin_y == origin_y
assert s.increment_x == increment_x
assert s.increment_y == increment_y
assert s.rotation == rotation
assert s.nx == nx
assert s.ny == ny
with pytest.raises(
rips.RipsError, match="Failed to set property: incorrect dimensions."
):
s.set_property("property_too_big", [i for i in range(nx * ny * 2)])
# Successfully set the depth property
s.set_property("depth", [i for i in range(nx * ny)])
s.set_property_as_depth("depth")
# Change the dimensions of the surface: should invalidate the properties
s.nx = 30
s.update()
def test_get_property(rips_instance, initialize_test):
case_path = dataroot.PATH + "/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"
c = rips_instance.project.load_case(path=case_path)
assert len(c.grids()) == 1
surface_collection = rips_instance.project.descendants(rips.SurfaceCollection)[0]
nx = 5
ny = 4
s = surface_collection.new_regular_surface(nx=nx, ny=ny)
input_values = [float(i) for i in range(nx * ny)]
s.set_property("test_prop", input_values)
output_values = s.get_property("test_prop")
assert len(output_values) == nx * ny
for i in range(len(input_values)):
assert abs(output_values[i] - input_values[i]) < 1e-6
# Getting a non-existent property should raise an error
with pytest.raises(rips.RipsError, match="not found"):
s.get_property("non_existent_property")
def test_available_properties(rips_instance, initialize_test):
case_path = dataroot.PATH + "/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"
c = rips_instance.project.load_case(path=case_path)
assert len(c.grids()) == 1
surface_collection = rips_instance.project.descendants(rips.SurfaceCollection)[0]
nx = 5
ny = 4
s = surface_collection.new_regular_surface(nx=nx, ny=ny)
# Empty property list initially
props = s.available_properties()
assert props == []
# Property names after setting one property
s.set_property("prop_a", [float(i) for i in range(nx * ny)])
props = s.available_properties()
assert "prop_a" in props
assert len(props) == 1
# Property names persist after setting multiple properties
s.set_property("prop_b", [float(i) for i in range(nx * ny)])
props = s.available_properties()
assert len(props) == 2
assert "prop_a" in props
assert "prop_b" in props
def test_create_regular_surface_invalid_values(rips_instance, initialize_test):
case_path = dataroot.PATH + "/Case_with_10_timesteps/Real0/BRUGGE_0000.EGRID"
c = rips_instance.project.load_case(path=case_path)
assert len(c.grids()) == 1
surface_collection = rips_instance.project.descendants(rips.SurfaceCollection)[0]
with pytest.raises(rips.RipsError, match="Invalid nx"):
surface_collection.new_regular_surface(nx=-1)
with pytest.raises(rips.RipsError, match="Invalid ny"):
surface_collection.new_regular_surface(ny=-1)
with pytest.raises(rips.RipsError, match="Invalid increment X. Must be positive."):
surface_collection.new_regular_surface(increment_x=-1.0)
with pytest.raises(rips.RipsError, match="Invalid increment Y. Must be positive."):
surface_collection.new_regular_surface(increment_y=-1.0)
with pytest.raises(rips.RipsError, match="Invalid rotation."):
surface_collection.new_regular_surface(rotation=-1.0)