#4477 Add python methods to get NNC values (dynamic, static and generated).

Equivalent to GetDynamicNNCValues and GetStaticNNCValues in Octave. Also adds
support for generated values which is currently not in Octave.
This commit is contained in:
Kristian Bendiksen
2020-02-21 20:40:26 +01:00
committed by Gaute Lindkvist
parent 1a05430123
commit 34d3785709
5 changed files with 250 additions and 2 deletions

View File

@@ -1013,3 +1013,81 @@ class Case(PdmObject):
for value in chunk.connections:
connections.append(value)
return connections
def __nnc_connections_values_async(self, property_name, property_type, time_step):
request = NNCProperties_pb2.NNCValuesRequest(case_id=self.case_id,
property_name=property_name,
property_type=property_type,
time_step=time_step)
return self.__nnc_properties_stub.GetNNCValues(request)
def __nnc_values_generator_to_list(self, generator):
"""Converts a NNC values generator to a list."""
vals = []
for chunk in generator:
for value in chunk.values:
vals.append(value)
return vals
def nnc_connections_static_values_async(self, property_name):
"""Get the static NNC values. Async, so returns an iterator.
Returns:
An iterator to a chunk object containing an list of doubles.
Loop through the chunks and then the values within the chunk to get values
for all the connections. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
return self.__nnc_connections_values_async(property_name, NNCProperties_pb2.NNC_STATIC, 0)
def nnc_connections_static_values(self, property_name):
"""Get the static NNC values.
Returns:
A list of doubles. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
generator = self.nnc_connections_static_values_async(property_name)
return self.__nnc_values_generator_to_list(generator)
def nnc_connections_dynamic_values_async(self, property_name, time_step):
"""Get the dynamic NNC values. Async, so returns an iterator.
Returns:
An iterator to a chunk object containing an list of doubles.
Loop through the chunks and then the values within the chunk to get values
for all the connections. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
return self.__nnc_connections_values_async(property_name, NNCProperties_pb2.NNC_DYNAMIC, time_step)
def nnc_connections_dynamic_values(self, property_name, time_step):
"""Get the dynamic NNC values.
Returns:
A list of doubles. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
generator = self.nnc_connections_dynamic_values_async(property_name, time_step)
return self.__nnc_values_generator_to_list(generator)
def nnc_connections_generated_values_async(self, property_name, time_step):
"""Get the generated NNC values. Async, so returns an iterator.
Returns:
An iterator to a chunk object containing an list of doubles.
Loop through the chunks and then the values within the chunk to get values
for all the connections. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
return self.__nnc_connections_values_async(property_name, NNCProperties_pb2.NNC_GENERATED, time_step)
def nnc_connections_generated_values(self, property_name, time_step):
"""Get the generated NNC values.
Returns:
A list of doubles. The order of the list matches the list from
nnc_connections, i.e. the nth object of nnc_connections() refers to nth
value in this list.
"""
generator = self.nnc_connections_generated_values_async(property_name, time_step)
return self.__nnc_values_generator_to_list(generator)

View File

@@ -23,7 +23,7 @@ def test_10kSync(rips_instance, initialize_test):
assert("Binary Formation Allen" == properties[1].name)
assert(NNCProperties_pb2.NNCPropertyType.NNC_GENERATED == properties[1].property_type)
assert("Formation Allen" == properties[2].name)
assert(NNCProperties_pb2.NNCPropertyType.NNC_GENERATED == properties[2].property_type)
assert(NNCProperties_pb2.NNCPropertyType.NNC_GENERATED == properties[2].property_type)
nnc_connections = case.nnc_connections()
assert(len(nnc_connections) == 84759)
@@ -33,3 +33,28 @@ def test_10kSync(rips_instance, initialize_test):
assert(connection.cell1.j == 40)
assert(connection.cell1.k == 14)
assert(connection.cell_grid_index1 == 0)
tran_vals = case.nnc_connections_static_values("TRAN")
assert(len(tran_vals) == len(nnc_connections))
for t in tran_vals:
assert(isinstance(t, float))
allen_vals = case.nnc_connections_generated_values("Formation Allen", 0)
assert(len(allen_vals) == len(nnc_connections))
for a in allen_vals:
assert(isinstance(a, float))
def test_non_existing_dynamic_values(rips_instance, initialize_test):
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
case = rips_instance.project.load_case(path=casePath)
with pytest.raises(grpc.RpcError):
case.nnc_connections_dynamic_values("x", 0)
def test_invalid_time_steps(rips_instance, initialize_test):
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
case = rips_instance.project.load_case(path=casePath)
with pytest.raises(grpc.RpcError):
case.nnc_connections_generated_values("Formation Allen", 9999)