#4549 Add python method to get cell centers for active cells

Equivalent to GetActiveCellCenters in Octave.
This commit is contained in:
Kristian Bendiksen
2020-02-17 17:46:15 +01:00
parent 2bf10a7837
commit a5be62c5b6
7 changed files with 177 additions and 14 deletions

View File

@@ -820,3 +820,41 @@ class Case(PdmObject):
for pdm_object in pdm_objects:
wells.append(SimulationWell(pdm_object.get_value("WellName"), self.case_id, pdm_object))
return wells
def active_cell_centers_async(
self,
porosity_model="MATRIX_MODEL",
):
"""Get a cell centers for all active cells. Async, so returns an iterator
Arguments:
porosity_model(str): string enum. See available()
Returns:
An iterator to a chunk object containing an array of Vec3d values.
Loop through the chunks and then the values within the chunk to get all values.
"""
porosity_model_enum = Case_pb2.PorosityModelType.Value(porosity_model)
request = Case_pb2.CellInfoRequest(case_request=self.__request,
porosity_model=porosity_model_enum)
return self.__case_stub.GetCellCenterForActiveCells(request)
def active_cell_centers(
self,
porosity_model="MATRIX_MODEL",
):
"""Get a cell centers for all active cells. Synchronous, so returns a list.
Arguments:
porosity_model(str): string enum. See available()
Returns:
A list of Vec3d
"""
cell_centers = []
generator = self.active_cell_centers_async(porosity_model)
for chunk in generator:
for value in chunk.centers:
cell_centers.append(value)
return cell_centers

View File

@@ -56,6 +56,12 @@ def test_MultipleCases(rips_instance, initialize_test):
for i, case_name in enumerate(case_names):
assert(case_name == cases[i].name)
def get_cell_index_with_ijk(cell_info, i, j, k):
for (idx, cell) in enumerate(cell_info):
if cell.local_ijk.i == i and cell.local_ijk.j == j and cell.local_ijk.k == k:
return idx
return -1
def test_10k(rips_instance, initialize_test):
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
case = rips_instance.project.load_case(path=case_path)
@@ -67,6 +73,20 @@ def test_10k(rips_instance, initialize_test):
assert(len(time_steps) == 9)
days_since_start = case.days_since_start()
assert(len(days_since_start) == 9)
cell_info = case.cell_info_for_active_cells()
assert(len(cell_info) == cell_count_info.active_cell_count)
# Check an active cell (found in resinsight ui)
cell_index = get_cell_index_with_ijk(cell_info, 23, 44, 19)
assert(cell_index != -1)
cell_centers = case.active_cell_centers()
assert(len(cell_centers) == cell_count_info.active_cell_count)
# Check the cell center for the specific cell
assert(math.isclose(3627.17, cell_centers[cell_index].x, abs_tol=0.1))
assert(math.isclose(5209.75, cell_centers[cell_index].y, abs_tol=0.1))
assert(math.isclose(4179.6, cell_centers[cell_index].z, abs_tol=0.1))
def test_PdmObject(rips_instance, initialize_test):
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"