Пример #1
0
def filter_region_fipnum(grid,
                         fipnum,
                         fipnum_kw,
                         combine_operator="intersect"):

    # Filter out the selected grid cells
    region = EclRegion(grid, False)
    region1 = EclRegion(grid, False)
    region_fip = EclRegion(grid, False)

    # Create selected regions for each filter type
    if fipnum:
        for fip in unpack_filter(fipnum):
            region_fip.select_equal(fipnum_kw, fip)
    else:
        region_fip.select_all()

    # Combine regions by
    if (combine_operator == "intersect" or combine_operator == ""
            or combine_operator is None):
        # Intersection
        region.select_all()
        region = region & region_fip
        return region
    elif combine_operator == "union":
        # Union
        region1.select_active()
        region2 = region_fip
        region = region1 & region2
        return region
    else:
        raise Exception(
            "ERROR: '%s' is not a valid operator to combine regions." %
            combine_operator)
Пример #2
0
def test_grid_cell_bounding_boxes() -> None:
    layers = ()
    flowdata = FlowData(_locate_test_case(), layers)

    # Test one layer for the whole field and no layers equal
    flowdata._layers = ((1, flowdata.grid.nz),)
    field_one_layer = flowdata.grid_cell_bounding_boxes(0)

    flowdata._layers = ()
    field_no_layer = flowdata.grid_cell_bounding_boxes(0)
    assert_almost_equal(field_one_layer, field_no_layer)

    # Test zero'th layer id
    flowdata._layers = ((1, 2), (3, 4))
    result = flowdata.grid_cell_bounding_boxes(0)
    active_cells = EclRegion(flowdata.grid, True)
    active_cells.select_kslice(
        *tuple(map(operator.sub, flowdata._layers[0], (1, 1))), intersect=True
    )
    active_cells.select_active(intersect=True)
    assert result.shape[0] == active_cells.active_size()
    assert result.shape[1] == 6

    # Test last layer id
    flowdata._layers = ((1, 2), (3, 4))
    result = flowdata.grid_cell_bounding_boxes(1)
    active_cells = EclRegion(flowdata.grid, True)
    active_cells.select_kslice(
        *tuple(map(operator.sub, flowdata._layers[-1], (1, 1))), intersect=True
    )
    active_cells.select_active(intersect=True)
    assert result.shape[0] == active_cells.active_size()
    assert result.shape[1] == 6
Пример #3
0
def test_grid_cell_bounding_boxes() -> None:
    layers = ()
    flowdata = FlowData(
        _locate_test_case(),
        layers,
        "multiple_based_on_workovers",
    )

    # Test no argument and entire field being equal
    flowdata._layers = ((1, flowdata.grid.nz), )
    assert_almost_equal(flowdata._grid_cell_bounding_boxes(),
                        flowdata._grid_cell_bounding_boxes(0))

    # Test zero'th layer id
    flowdata._layers = ((1, 2), (3, 4))
    result = flowdata._grid_cell_bounding_boxes(0)
    active_cells = EclRegion(flowdata.grid, True)
    active_cells.select_kslice(*tuple(
        map(operator.sub, flowdata._layers[0], (1, 1))),
                               intersect=True)
    active_cells.select_active(intersect=True)
    assert result.shape[0] == active_cells.active_size()
    assert result.shape[1] == 6

    # Test last layer id
    flowdata._layers = ((1, 2), (3, 4))
    result = flowdata._grid_cell_bounding_boxes(1)
    active_cells = EclRegion(flowdata.grid, True)
    active_cells.select_kslice(*tuple(
        map(operator.sub, flowdata._layers[-1], (1, 1))),
                               intersect=True)
    active_cells.select_active(intersect=True)
    assert result.shape[0] == active_cells.active_size()
    assert result.shape[1] == 6
Пример #4
0
def filter_region_ijk(grid, i, j, k, combine_operator="intersect"):

    # Filter out the selected grid cells
    region = EclRegion(grid, False)
    region1 = EclRegion(grid, False)
    region_i = EclRegion(grid, False)
    region_j = EclRegion(grid, False)
    region_k = EclRegion(grid, False)

    # Create selected regions for each filter type
    if i:
        for i_slice in unpack_filter(i):
            region_i.select_islice(i_slice - 1, i_slice -
                                   1)  # -1 because ert defines i=1 as i=0
    else:
        region_i.select_all()
    if j:
        for j_slice in unpack_filter(j):
            region_j.select_jslice(j_slice - 1, j_slice -
                                   1)  # -1 because ert defines j=1 as j=0
    else:
        region_j.select_all()
    if k:
        for k_slice in unpack_filter(k):
            region_k.select_kslice(k_slice - 1, k_slice -
                                   1)  # -1 because ert defines j=1 as j=0
    else:
        region_k.select_all()

    # Combine regions by
    if (combine_operator == "intersect" or combine_operator == ""
            or combine_operator is None):
        # Intersection
        region.select_all()
        region = region & region_i & region_j & region_k
        return region
    elif combine_operator == "union":
        # Union
        region1.select_active()
        region2 = region_i | region_j | region_k
        region = region1 & region2
        return region
    else:
        raise Exception(
            "ERROR: '%s' is not a valid operator to combine regions." %
            combine_operator)
Пример #5
0
def filter_region(grid,
                  idx_i,
                  idx_j,
                  idx_k,
                  fipnum,
                  fipnum_kw,
                  combine_operator="intersect"):

    # Filter out the selected grid cells
    region = EclRegion(grid, False)
    region1 = EclRegion(grid, False)
    region_i = EclRegion(grid, False)
    region_j = EclRegion(grid, False)
    region_k = EclRegion(grid, False)
    region_fip = EclRegion(grid, False)

    # Create selected regions for each filter type
    if idx_i:
        for i_slice in unpack_filter(idx_i):
            region_i.select_islice(i_slice - 1, i_slice -
                                   1)  # -1 because ert defines i=1 as i=0
    else:
        region_i.select_all()

    if idx_j:
        for j_slice in unpack_filter(idx_j):
            region_j.select_jslice(j_slice - 1, j_slice -
                                   1)  # -1 because ert defines j=1 as j=0
    else:
        region_j.select_all()

    if idx_k:
        for k_slice in unpack_filter(idx_k):
            region_k.select_kslice(k_slice - 1, k_slice -
                                   1)  # -1 because ert defines j=1 as j=0
    else:
        region_k.select_all()

    if fipnum:
        for fip in unpack_filter(fipnum):
            region_fip.select_equal(fipnum_kw, fip)
    else:
        region_fip.select_all()

    # Combine regions by
    if (combine_operator == "intersect" or combine_operator == ""
            or combine_operator is None):
        # Intersection
        region.select_all()  # region.select_active()
        region = region & region_i & region_j & region_k & region_fip
        return region

    if combine_operator == "union":
        # Union
        region1.select_active()
        region2 = region_i | region_j | region_k | region_fip
        region = region1 & region2
        return region

    raise Exception(
        f"ERROR: '{combine_operator}' is not a valid operator to combine regions."
    )