def test_EGRID(self): grid = EclGrid(self.egrid_file()) self.assertTrue(grid) dims = grid.getDims() self.assertEqual(dims[0], grid.getNX()) self.assertEqual(dims[1], grid.getNY()) self.assertEqual(dims[2], grid.getNZ())
def test_EGRID( self ): grid = EclGrid(self.egrid_file()) self.assertTrue(grid) dims = grid.getDims() self.assertEqual(dims[0] , grid.getNX()) self.assertEqual(dims[1] , grid.getNY()) self.assertEqual(dims[2] , grid.getNZ())
def test_corner(self): grid = EclGrid(self.egrid_file()) nx = grid.getNX() ny = grid.getNY() nz = grid.getNZ() (x1,y1,z1) = grid.getCellCorner( 0 , ijk = (0,0,0)) (x2,y2,z2) = grid.getLayerXYZ( 0 , 0 ) self.assertEqual(x1,x2) self.assertEqual(y1,y2) self.assertEqual(z1,z2) (x1,y1,z1) = grid.getCellCorner( 0 , ijk = (0,1,0)) (x2,y2,z2) = grid.getLayerXYZ( (nx + 1) , 0 ) self.assertEqual(x1,x2) self.assertEqual(y1,y2) self.assertEqual(z1,z2) (x1,y1,z1) = grid.getCellCorner( 1 , ijk = (nx - 1,0,0)) (x2,y2,z2) = grid.getLayerXYZ( nx , 0 ) self.assertEqual(x1,x2) self.assertEqual(y1,y2) self.assertEqual(z1,z2) (x1,y1,z1) = grid.getCellCorner( 4 , ijk = (0,0,nz-1)) (x2,y2,z2) = grid.getLayerXYZ( 0 , nz ) self.assertEqual(x1,x2) self.assertEqual(y1,y2) self.assertEqual(z1,z2) (x1,y1,z1) = grid.getCellCorner( 7 , ijk = (nx-1,ny-1,nz-1)) (x2,y2,z2) = grid.getLayerXYZ( (nx + 1)*(ny + 1) - 1 , nz ) self.assertEqual(x1,x2) self.assertEqual(y1,y2) self.assertEqual(z1,z2) with self.assertRaises(IndexError): grid.getLayerXYZ( -1 , 0 ) with self.assertRaises(IndexError): grid.getLayerXYZ( (nx + 1)*(ny + 1) , 0 ) with self.assertRaises(IndexError): grid.getLayerXYZ( 0 , -1 ) with self.assertRaises(IndexError): grid.getLayerXYZ( 0 , nz + 1 )
def test_ots_config_run_parameters(ots_tmpdir_enter, res_scale, size_scale, pos_shift, results, surf_res): eclcase_dir = ots_tmpdir_enter grid_file = os.path.join(eclcase_dir, "NORNE_ATW2013.EGRID") grid = EclGrid(grid_file, apply_mapaxes=True) mock_segy(grid, res_scale, size_scale, pos_shift, "norne_vol.segy") conf = { "eclbase": os.path.join(eclcase_dir, "NORNE_ATW2013"), "above": 100, "seabed": 300, "youngs": 0.5, "poisson": 0.3, "rfactor": 20, "mapaxes": False, "convention": 1, "output_dir": "ts", "horizon": "horizon.irap", "ascii": "ts.txt", "velocity_model": "norne_vol.segy", "vintages": { "ts_simple": [["1997-11-06", "1998-02-01"], ["1997-12-17", "1998-01-01"]], "dpv": [["1997-11-06", "1997-12-17"]], }, } with open("ots_config.yml", "w") as f: yaml.dump(conf, f, default_flow_style=False) ots_run("ots_config.yml") # test results # 1. we compare the surface resolution # 2. we test sum of output surface heightfields for # 2a. top left and bottom right corners (which is due to shift segy volume) # 2b. we expect the surface to drop with each timeshift def to_numpy(surf): arr = np.array([surf[i] for i in range(len(surf))]).reshape(-1, surf.getNX()) return arr # horizon s_horizon = Surface("horizon.irap") assert surf_res[0] == s_horizon.getNX() assert surf_res[1] == s_horizon.getNY() assert (s_horizon.getNX() > grid.getNY()) == results[-1] assert (s_horizon.getNY() > grid.getNX()) == results[-1] _err = 0.01 nx = s_horizon.getNX() ny = s_horizon.getNY() arr = to_numpy(s_horizon) sh_top_left = arr[:ny // 2 - 1, :nx // 2 - 1].sum() sh_bottom_right = arr[ny // 2:, nx // 2:].sum() assert ((sh_top_left - _err) > 0) == results[0] assert ((sh_bottom_right - _err) > 0) == results[1] # ts_simple1 ts_simple1 = Surface("ts_ts_simple/ots_1997_11_06_1998_02_01.irap") assert nx == ts_simple1.getNX() assert ny == ts_simple1.getNY() assert (ts_simple1.getNX() > grid.getNY()) == results[-1] assert (ts_simple1.getNY() > grid.getNX()) == results[-1] arr = to_numpy(ts_simple1) ts1_top_left = arr[:ny // 2 - 1, :nx // 2 - 1].sum() ts1_bottom_right = arr[ny // 2:, nx // 2:].sum() assert ((ts1_top_left - _err) > 0) == results[0] assert ((ts1_bottom_right - _err) > 0) == results[1] assert ts1_top_left + ts1_bottom_right < sh_top_left + sh_bottom_right # ts_simple2 ts_simple2 = Surface("ts_ts_simple/ots_1997_12_17_1998_01_01.irap") assert nx == ts_simple2.getNX() assert ny == ts_simple2.getNY() assert (ts_simple2.getNX() > grid.getNY()) == results[-1] assert (ts_simple2.getNY() > grid.getNX()) == results[-1] arr = to_numpy(ts_simple2) ts2_top_left = arr[:ny // 2 - 1, :nx // 2 - 1].sum() ts2_bottom_right = arr[ny // 2:, nx // 2:].sum() assert ((ts2_top_left - _err) > 0) == results[0] assert ((ts2_bottom_right - _err) > 0) == results[1] assert ts2_top_left + ts2_bottom_right < sh_top_left + sh_bottom_right assert ts2_top_left + ts2_bottom_right < ts1_top_left + ts1_bottom_right # ts_dpv ts_dpv = Surface("ts_dpv/ots_1997_11_06_1997_12_17.irap") assert nx == ts_dpv.getNX() assert ny == ts_dpv.getNY() assert (ts_dpv.getNX() > grid.getNY()) == results[-1] assert (ts_dpv.getNY() > grid.getNX()) == results[-1] arr = to_numpy(ts_simple2) dpv_top_left = arr[:ny // 2 - 1, :nx // 2 - 1].sum() dpv_bottom_right = arr[ny // 2:, nx // 2:].sum() assert ((dpv_top_left - _err) > 0) == results[0] assert ((dpv_bottom_right - _err) > 0) == results[1] assert dpv_top_left + dpv_bottom_right < sh_top_left + sh_bottom_right
class RegionTest(EclTest): def setUp(self): case = self.createTestPath("Statoil/ECLIPSE/Gurbat/ECLIPSE") self.grid = EclGrid(case) self.rst_file = EclFile("%s.UNRST" % case) self.init_file = EclFile("%s.INIT" % case) def test_kw_imul(self): P = self.rst_file["PRESSURE"][5] fipnum = self.init_file["FIPNUM"][0] fipnum_copy = fipnum.deep_copy() reg = EclRegion(self.grid, False) reg.select_more(P, 260) fipnum.mul(-1, mask=reg) self.assertFalse(fipnum.equal(fipnum_copy)) fipnum.mul(-1, mask=reg) self.assertTrue(fipnum.equal(fipnum_copy)) def test_equal(self): reg1 = EclRegion(self.grid , False) reg2 = EclRegion(self.grid , False) self.assertTrue( reg1 == reg2 ) reg1.select_islice(4 , 6) self.assertFalse( reg1 == reg2 ) reg2.select_islice(4,7) self.assertFalse( reg1 == reg2 ) reg1.select_islice(7,7) self.assertTrue( reg1 == reg2 ) def test_kw_idiv(self): P = self.rst_file["PRESSURE"][5] fipnum = self.init_file["FIPNUM"][0] fipnum_copy = fipnum.deep_copy() reg = EclRegion(self.grid, False) reg.select_more(P, 260) fipnum.div(-1, mask=reg) self.assertFalse(fipnum.equal(fipnum_copy)) fipnum.div(-1, mask=reg) self.assertTrue(fipnum.equal(fipnum_copy)) def test_kw_iadd(self): P = self.rst_file["PRESSURE"][5] fipnum = self.init_file["FIPNUM"][0] fipnum_copy = fipnum.deep_copy() reg = EclRegion(self.grid, False) reg.select_more(P, 260) fipnum.add(1, mask=reg) self.assertFalse(fipnum.equal(fipnum_copy)) reg.invert() fipnum.add(1, mask=reg) fipnum.sub(1) self.assertTrue(fipnum.equal(fipnum_copy)) def test_kw_isub(self): P = self.rst_file["PRESSURE"][5] fipnum = self.init_file["FIPNUM"][0] fipnum_copy = fipnum.deep_copy() reg = EclRegion(self.grid, False) reg.select_more(P, 260) fipnum.sub(1, mask=reg) self.assertFalse(fipnum.equal(fipnum_copy)) fipnum.add(1, mask=reg) self.assertTrue(fipnum.equal(fipnum_copy)) def test_slice(self): reg = EclRegion(self.grid, False) reg.select_islice(0, 5) OK = True global_list = reg.getGlobalList() self.assertEqual(global_list.parent(), reg) for gi in global_list: (i, j, k) = self.grid.get_ijk(global_index=gi) if i > 5: OK = False self.assertTrue(OK) self.assertTrue(self.grid.getNY() * self.grid.getNZ() * 6 == len(reg.getGlobalList())) reg.select_jslice(7, 8, intersect=True) OK = True for gi in reg.getGlobalList(): (i, j, k) = self.grid.get_ijk(global_index=gi) if i > 5: OK = False if j < 7 or j > 8: OK = False self.assertTrue(OK) self.assertTrue(2 * self.grid.getNZ() * 6 == len(reg.getGlobalList())) reg2 = EclRegion(self.grid, False) reg2.select_kslice(3, 5) reg &= reg2 OK = True for gi in reg.getGlobalList(): (i, j, k) = self.grid.get_ijk(global_index=gi) if i > 5: OK = False if j < 7 or j > 8: OK = False if k < 3 or k > 5: OK = False self.assertTrue(OK) self.assertTrue(2 * 3 * 6 == len(reg.getGlobalList())) def test_index_list(self): reg = EclRegion(self.grid, False) reg.select_islice(0, 5) active_list = reg.getActiveList() global_list = reg.getGlobalList() def test_polygon(self): reg = EclRegion(self.grid, False) (x,y,z) = self.grid.get_xyz( ijk=(10,10,0) ) dx = 0.1 dy = 0.1 reg.select_inside_polygon( [(x-dx,y-dy) , (x-dx,y+dy) , (x+dx,y+dy) , (x+dx,y-dy)] ) self.assertTrue( self.grid.getNZ() == len(reg.getGlobalList())) def test_heidrun(self): root = self.createTestPath("Statoil/ECLIPSE/Heidrun") grid = EclGrid( "%s/FF12_2013B2_AMAP_AOP-J15_NO62_MOVEX.EGRID" % root) polygon = [] with open("%s/polygon.ply" % root) as fileH: for line in fileH.readlines(): tmp = line.split() polygon.append( (float(tmp[0]) , float(tmp[1]))) self.assertEqual( len(polygon) , 11 ) reg = EclRegion( grid , False ) reg.select_inside_polygon( polygon ) self.assertEqual( 0 , len(reg.getGlobalList()) % grid.getNZ()) def test_layer(self): region = EclRegion(self.grid, False) layer = Layer( self.grid.getNX() , self.grid.getNY() + 1) with self.assertRaises(ValueError): region.selectFromLayer( layer , 0 , 1 ) layer = Layer( self.grid.getNX() , self.grid.getNY() ) layer[0,0] = 1 layer[1,1] = 1 layer[2,2] = 1 with self.assertRaises(ValueError): region.selectFromLayer( layer , -1 , 1 ) with self.assertRaises(ValueError): region.selectFromLayer( layer , self.grid.getNZ() , 1 ) region.selectFromLayer( layer , 0 , 2 ) glist = region.getGlobalList() self.assertEqual(0 , len(glist)) region.selectFromLayer( layer , 0 , 1 ) glist = region.getGlobalList() self.assertEqual(3 , len(glist))