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)
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)
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)
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 )
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 )
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)
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()