def test_actnum_extraction(self): dims = (4, 4, 4) coord = GridGen.create_coord(dims, (1, 1, 1)) zcorn = GridGen.create_zcorn(dims, (1, 1, 1), offset=0) actnum = EclKW("ACTNUM", six.functools.reduce(operator.mul, dims), EclDataType.ECL_INT) random.seed(1337) for i in range(len(actnum)): actnum[i] = random.randint(0, 1) grid = EclGrid.create(dims, zcorn, coord, actnum) ijk_bounds = generate_ijk_bounds(dims) for ijk_bound in ijk_bounds: if not decomposition_preserving(ijk_bound): continue sub = GridGen.extract_subgrid_data(dims, coord, zcorn, ijk_bound, actnum=actnum) sub_coord, sub_zcorn, sub_actnum = sub sub_dims = tuple([u - l + 1 for l, u in ijk_bound]) subgrid = EclGrid.create(sub_dims, sub_zcorn, sub_coord, sub_actnum) self.assertEqual(sub_dims, subgrid.getDims()[:-1:]) self.assertSubgrid(grid, subgrid, ijk_bound)
def test_extract_grid_slice_spec(self): dims = (4,4,4) zcorn = list(GridGen.create_zcorn(dims, (1,1,1), offset=0)) coord = list(GridGen.create_coord(dims, (1,1,1))) ijk_bounds = generate_ijk_bounds(dims) for ijk in ijk_bounds: ijk = list(ijk) for i in range(3): if len(set(ijk[i])) == 1: ijk[i] = ijk[i][0] GridGen.extract_subgrid_data(dims, coord, zcorn, ijk, decomposition_change=True)
def test_actnum_extraction(self): dims = (4,4,4) coord = GridGen.create_coord(dims, (1,1,1)) zcorn = GridGen.create_zcorn(dims, (1,1,1), offset=0) actnum = EclKW("ACTNUM", six.functools.reduce(operator.mul, dims), EclDataType.ECL_INT) random.seed(1337) for i in range(len(actnum)): actnum[i] = random.randint(0, 1) grid = EclGrid.create(dims, zcorn, coord, actnum) ijk_bounds = generate_ijk_bounds(dims) for ijk_bound in ijk_bounds: if not decomposition_preserving(ijk_bound): continue sub = GridGen.extract_subgrid_data( dims, coord, zcorn, ijk_bound, actnum=actnum ) sub_coord, sub_zcorn, sub_actnum = sub sub_dims = tuple([u-l+1 for l, u in ijk_bound]) subgrid = EclGrid.create(sub_dims, sub_zcorn, sub_coord, sub_actnum) self.assertEqual(sub_dims, subgrid.getDims()[:-1:]) self.assertSubgrid(grid, subgrid, ijk_bound)
def test_translation(self): dims = (3,3,3) coord = GridGen.create_coord(dims, (1,1,1)) zcorn = GridGen.create_zcorn(dims, (1,1,1), offset=0) grid = EclGrid.create(dims, zcorn, coord, None) ijk_bound = [(0, d-1) for d in dims] translation = (1, 2, 3) sub_coord, sub_zcorn, _ = GridGen.extract_subgrid_data( dims, coord, zcorn, ijk_bound, translation=translation ) tgrid = EclGrid.create(dims, sub_zcorn, sub_coord, None) self.assertEqual(grid.getGlobalSize(), tgrid.getGlobalSize()) for gi in range(grid.getGlobalSize()): translation = numpy.array(translation) corners = [grid.getCellCorner(i, gi) for i in range(8)] corners = [tuple(numpy.array(c)+translation) for c in corners] tcorners = [tgrid.getCellCorner(i, gi) for i in range(8)] self.assertEqual(corners, tcorners)
def test_validate_cells(self): for coord, zcorn, grid in self.test_base: grid_dims = grid.getDims()[:-1:] ijk_bounds = generate_ijk_bounds(grid_dims) for ijk_bound in ijk_bounds: if not decomposition_preserving(ijk_bound): continue sub_dims = tuple([u - l + 1 for l, u in ijk_bound]) sub_coord, sub_zcorn, _ = GridGen.extract_subgrid_data( grid_dims, coord, zcorn, ijk_bound) subgrid = EclGrid.create(sub_dims, sub_zcorn, sub_coord, None) self.assertEqual(sub_dims, subgrid.getDims()[:-1:]) self.assertSubgrid(grid, subgrid, ijk_bound)
def test_extract_grid_invalid_bounds(self): dims = (3,3,3) zcorn = list(GridGen.create_zcorn(dims, (1,1,1), offset=0)) coord = list(GridGen.create_coord(dims, (1,1,1))) with self.assertRaises(ValueError): GridGen.extract_subgrid_data(dims, coord, zcorn, ((-1,0), (2,2), (2,2))) with self.assertRaises(ValueError): GridGen.extract_subgrid_data(dims, coord, zcorn, ((1,6), (2,2), (2,2))) with self.assertRaises(ValueError): GridGen.extract_subgrid_data(dims, coord, zcorn, ((1,2), (2,0), (2,2)))
def test_validate_cells(self): for coord, zcorn, grid in self.test_base: grid_dims = grid.getDims()[:-1:] ijk_bounds = generate_ijk_bounds(grid_dims) for ijk_bound in ijk_bounds: if not decomposition_preserving(ijk_bound): continue sub_dims = tuple([u-l+1 for l, u in ijk_bound]) sub_coord, sub_zcorn, _ = GridGen.extract_subgrid_data( grid_dims, coord, zcorn, ijk_bound ) subgrid = EclGrid.create(sub_dims, sub_zcorn, sub_coord, None) self.assertEqual(sub_dims, subgrid.getDims()[:-1:]) self.assertSubgrid(grid, subgrid, ijk_bound)
def test_extract_grid_decomposition_change(self): dims = (4,4,4) zcorn = list(GridGen.create_zcorn(dims, (1,1,1), offset=0)) coord = list(GridGen.create_coord(dims, (1,1,1))) ijk_bounds = generate_ijk_bounds(dims) for ijk_bounds in ijk_bounds: if decomposition_preserving(ijk_bounds): GridGen.extract_subgrid_data(dims, coord, zcorn, ijk_bounds) else: with self.assertRaises(ValueError): GridGen.extract_subgrid_data(dims, coord, zcorn, ijk_bounds) GridGen.extract_subgrid_data(dims, coord, zcorn, ijk_bounds, decomposition_change=True)