Esempio n. 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)
Esempio n. 2
0
    def test_sum(self):
        grid = EclGrid.createRectangular((10, 10, 1), (1, 1, 1))
        kw_mask = EclKW("INT", grid.getGlobalSize(), EclDataType.ECL_INT)
        int_value = EclKW("INT", grid.getGlobalSize(), EclDataType.ECL_INT)
        float_value = EclKW("FLOAT", grid.getGlobalSize(),
                            EclDataType.ECL_FLOAT)
        double_value = EclKW("DOUBLE", grid.getGlobalSize(),
                             EclDataType.ECL_DOUBLE)
        bool_value = EclKW("BOOL", grid.getGlobalSize(), EclDataType.ECL_BOOL)

        kw_mask[0:50] = 1

        for i in range(len(int_value)):
            float_value[i] = i
            double_value[i] = i
            int_value[i] = i
            bool_value[i] = True

        region = EclRegion(grid, False)
        region.select_equal(kw_mask, 1)

        self.assertEqual(int_value.sum(), 99 * 100 / 2)
        self.assertEqual(int_value.sum(mask=region), 49 * 50 / 2)
        self.assertEqual(double_value.sum(mask=region), 1.0 * 49 * 50 / 2)
        self.assertEqual(float_value.sum(mask=region), 1.0 * 49 * 50 / 2)
        self.assertEqual(bool_value.sum(mask=region), 50)
Esempio n. 3
0
    def test_equal(self):
        grid = EclGrid.createRectangular((10, 10, 1), (1, 1, 1))
        kw_int = EclKW("INT", grid.getGlobalSize(), EclDataType.ECL_INT)
        kw_float = EclKW("FLOAT", grid.getGlobalSize(), EclDataType.ECL_FLOAT)

        kw_int[0:49] = 1
        region = EclRegion(grid, False)
        region.select_equal(kw_int, 1)
        glist = region.getGlobalList()
        for g in glist:
            self.assertEqual(kw_int[g], 1)

        with self.assertRaises(ValueError):
            region.select_equal(kw_float, 1)
Esempio n. 4
0
    def test_equal(self):
        grid = EclGrid.createRectangular( (10,10,1) , (1,1,1))
        kw_int = EclKW( "INT" , grid.getGlobalSize( ) , EclDataType.ECL_INT )
        kw_float = EclKW( "FLOAT" , grid.getGlobalSize( ) , EclDataType.ECL_FLOAT )

        kw_int[0:49] = 1
        region = EclRegion(grid, False)
        region.select_equal( kw_int , 1 )
        glist = region.getGlobalList()
        for g in glist:
            self.assertEqual( kw_int[g] , 1 )

        with self.assertRaises(ValueError):
            region.select_equal( kw_float , 1 )
Esempio n. 5
0
    def test_sum(self):
        grid = EclGrid.createRectangular( (10,10,1) , (1,1,1))
        kw_mask = EclKW( "INT" , grid.getGlobalSize( ) , EclDataType.ECL_INT )
        int_value =  EclKW( "INT" , grid.getGlobalSize( ) , EclDataType.ECL_INT )
        float_value =  EclKW( "FLOAT" , grid.getGlobalSize( ) , EclDataType.ECL_FLOAT)
        double_value =  EclKW( "DOUBLE" , grid.getGlobalSize( ) , EclDataType.ECL_DOUBLE )
        bool_value =  EclKW( "BOOL" , grid.getGlobalSize( ) , EclDataType.ECL_BOOL )

        kw_mask[0:50] = 1

        for i in range(len(int_value)):
            float_value[i] = i
            double_value[i] = i
            int_value[i] = i
            bool_value[i] = True

        region = EclRegion(grid, False)
        region.select_equal( kw_mask , 1 )

        self.assertEqual( int_value.sum( ) , 99*100/2 )
        self.assertEqual( int_value.sum( mask = region ) , 49*50/2 )
        self.assertEqual( double_value.sum( mask = region ) , 1.0*49*50/2 )
        self.assertEqual( float_value.sum( mask = region ) , 1.0*49*50/2 )
        self.assertEqual( bool_value.sum( mask = region ) , 50 )
Esempio n. 6
0
def filter_region(grid,
                  i,
                  j,
                  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 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()

    if fipnum:
        for fip in unpack_filter(fipnum):
            print(fip)
            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

    elif combine_operator == "union":
        # Union
        region1.select_active()
        region2 = region_i | region_j | region_k | region_fip
        region = region1 & region2
        return region
    else:
        raise Exception(
            "ERROR: '%s' is not a valid operator to combine regions." %
            combine_operator)
Esempio n. 7
0
    init_file = EclFile("%s.INIT" % case)

    # Create PORV keyword where all the inactive cells have been removed.
    pv = grid.compressed_kw_copy(init_file["PORV"][0])

    # Extract an integer region keyword from the init file
    region_kw = init_file["EQLNUM"][0]

    sim_days = []
    result = {}
    for header in rst_file.headers():
        line = {}
        rst_block = rst_file.restart_view(report_step=header.get_report_step())
        p = rst_block["PRESSURE"][0]
        sw = rst_block["SWAT"][0]

        for region_id in range(region_kw.get_max() + 1):
            region = EclRegion(grid, False)
            region.select_equal(region_kw, region_id)
            avg_pressure(p, sw, pv, region, region_id, result)

        avg_pressure(p, sw, pv, EclRegion(grid, True), "field", result)
        sim_days.append(header.get_sim_days())

    for key in result.keys():
        plt.figure(1)
        for index, p in enumerate(result[key]):
            plt.plot(sim_days, p, label="Region:%s  P%d" % (key, index + 1))
        plt.legend()
        plt.show()