def test_create(self): with self.assertRaises(ValueError): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = [0,1,1,2]) with self.assertRaises(ValueError): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = IntVector(initial_size = 10)) grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) # actnum=None -> all active self.assertEqual( grid.getNumActive( ) , 30*20*10) actnum = IntVector(default_value = 1 , initial_size = 6000) actnum[0] = 0 actnum[1] = 0 grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = actnum) self.assertEqual( grid.getNumActive( ) , 30*20*10 - 2)
def test_create(self): with self.assertRaises(ValueError): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = [0,1,1,2]) with self.assertRaises(ValueError): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = IntVector(initial_size = 10)) grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) # actnum=None -> all active self.assertEqual( grid.getNumActive( ) , 30*20*10) actnum = IntVector(default_value = 1 , initial_size = 6000) actnum[0] = 0 actnum[1] = 0 grid = GridGen.createRectangular( (10,20,30) , (1,1,1) , actnum = actnum) self.assertEqual( grid.getNumActive( ) , 30*20*10 - 2)
def test_oom_grid(self): nx = 2000 ny = 2000 nz = 2000 with self.assertRaises(MemoryError): grid = GridGen.createRectangular( (nx,ny,nz), (1,1,1))
def test_numpy3D(self): nx = 10 ny = 7 nz = 5 grid = GridGen.createRectangular((nx,ny,nz) , (1,1,1)) kw = EclKW( "SWAT" , nx*ny*nz , EclDataType.ECL_FLOAT ) numpy_3d = grid.create3D( kw )
def test_output_units(self): n = 10 a = 1 grid = GridGen.createRectangular( (n,n,n), (a,a,a)) with TestAreaContext("python/ecl_grid/units"): grid.save_EGRID( "CASE.EGRID" , output_unit = EclUnitTypeEnum.ECL_FIELD_UNITS ) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip( ) , "FEET" ) g2 = EclGrid("CASE.EGRID") self.assertFloatEqual( g2.cell_volume( global_index = 0 ) , 3.28084*3.28084*3.28084) grid.save_EGRID( "CASE.EGRID" ) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip( ) , "METRES" ) grid.save_EGRID( "CASE.EGRID" , output_unit = EclUnitTypeEnum.ECL_LAB_UNITS) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip() , "CM" ) g2 = EclGrid("CASE.EGRID") self.assertFloatEqual( g2.cell_volume( global_index = 0 ) , 100*100*100 )
def test_cell_corner_containment_compatability(self): grid = GridGen.createRectangular((3, 3, 3), (1, 1, 1)) for x, y, z in itertools.product(range(4), repeat=3): for i in range(27): if grid.cell_contains(x, y, z, i): self.assertEqual(CORNER_HOME[(x, y, z)], i)
def test_oom_grid(self): nx = 2000 ny = 2000 nz = 2000 with self.assertRaises(MemoryError): grid = GridGen.createRectangular( (nx,ny,nz), (1,1,1))
def test_output_units(self): n = 10 a = 1 grid = GridGen.createRectangular( (n,n,n), (a,a,a)) with TestAreaContext("python/ecl_grid/units"): grid.save_EGRID( "CASE.EGRID" , output_unit = EclUnitTypeEnum.ECL_FIELD_UNITS ) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip( ) , "FEET" ) g2 = EclGrid("CASE.EGRID") self.assertFloatEqual( g2.cell_volume( global_index = 0 ) , 3.28084*3.28084*3.28084) grid.save_EGRID( "CASE.EGRID" ) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip( ) , "METRES" ) grid.save_EGRID( "CASE.EGRID" , output_unit = EclUnitTypeEnum.ECL_LAB_UNITS) f = EclFile("CASE.EGRID") g = f["GRIDUNIT"][0] self.assertEqual( g[0].strip() , "CM" ) g2 = EclGrid("CASE.EGRID") self.assertFloatEqual( g2.cell_volume( global_index = 0 ) , 100*100*100 )
def test_numpy3D(self): nx = 10 ny = 7 nz = 5 grid = GridGen.createRectangular((nx,ny,nz) , (1,1,1)) kw = EclKW( "SWAT" , nx*ny*nz , EclDataType.ECL_FLOAT ) numpy_3d = grid.create3D( kw )
def test_geertsma_TS(setUp): spec, actnum, parms = setUp grid = EclGridGenerator.createRectangular( dims=(2, 2, 2), dV=(100, 100, 100), actnum=actnum ) create_restart(grid, "TEST") create_init(grid, "TEST") grid.save_EGRID("TEST.EGRID") parms.velocity_model = "TEST.segy" int_val = [50, 150] create_segy_file( parms.velocity_model, spec, xl=int_val, il=int_val, cdp_x=int_val, cdp_y=int_val ) ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) vintage_pairs = [ (datetime.date(2000, 1, 1), datetime.date(2010, 1, 1)), (datetime.date(2010, 1, 1), datetime.date(2011, 1, 1)), ] tshift = ots.geertsma_ts(vintage_pairs) assert tshift[0][0] == pytest.approx(-0.00104, abs=0.0001) parms.convention = -1 ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) vintage_pairs = [ (datetime.date(2000, 1, 1), datetime.date(2010, 1, 1)), (datetime.date(2010, 1, 1), datetime.date(2011, 1, 1)), ] tshift = ots.geertsma_ts(vintage_pairs) assert tshift[0][0] == pytest.approx(0.00104, abs=0.0001)
def test_compressed_copy(self): nx = 10 ny = 10 nz = 10 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) kw1 = EclKW("KW" , 1001 , EclDataType.ECL_INT ) with self.assertRaises(ValueError): cp = grid.compressedKWCopy( kw1 )
def test_create(setup_spec): spec = setup_spec vel = "TEST.segy" create_segy_file(vel, spec) grid = EclGridGenerator.createRectangular(dims=(2, 2, 2), dV=(100, 100, 100)) res_surface = OTSResSurface(grid=grid, above=0) OTSVelSurface(res_surface, vel)
def test_dims(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) self.assertEqual( grid.getNX() , 10 ) self.assertEqual( grid.getNY() , 20 ) self.assertEqual( grid.getNZ() , 30 ) self.assertEqual( grid.getGlobalSize() , 30*10*20 ) self.assertEqual( grid.getDims() , (10,20,30,6000) )
def test_dims(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) self.assertEqual( grid.getNX() , 10 ) self.assertEqual( grid.getNY() , 20 ) self.assertEqual( grid.getNZ() , 30 ) self.assertEqual( grid.getGlobalSize() , 30*10*20 ) self.assertEqual( grid.getDims() , (10,20,30,6000) )
def test_compressed_copy(self): nx = 10 ny = 10 nz = 10 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) kw1 = EclKW("KW" , 1001 , EclDataType.ECL_INT ) with self.assertRaises(ValueError): cp = grid.compressedKWCopy( kw1 )
def test_surface_above(tmpdir): grid = EclGridGenerator.createRectangular(dims=(2, 2, 2), dV=(100, 100, 100), actnum=[0, 0, 0, 0, 1, 1, 1, 1]) surface = OTSResSurface(grid=grid, above=10) z = np.ones(4) * (100 - 10) assert np.all(z == surface.z)
def test_cell_corner_containment(self): n = 4 d = 10 grid = GridGen.createRectangular((n, n, n), (d, d, d)) for x, y, z in itertools.product(range(0, n * d + 1, d), repeat=3): self.assertEqual(1, [ grid.cell_contains(x, y, z, i) for i in range(n**3) ].count(True))
def test_cell_corner_containment(self): n = 4 d = 10 grid = GridGen.createRectangular( (n, n, n), (d, d, d)) for x, y, z in itertools.product(range(0, n*d+1, d), repeat=3): self.assertEqual( 1, [grid.cell_contains(x, y, z, i) for i in range(n**3)].count(True) )
def test_z3d(setup_spec): spec = setup_spec vel = "TEST.segy" int_val = [50, 150] create_segy_file(vel, spec, xl=int_val, il=int_val, cdp_x=int_val, cdp_y=int_val) grid = EclGridGenerator.createRectangular(dims=(2, 2, 2), dV=(100, 100, 100)) res_surface = OTSResSurface(grid=grid, above=0) ots_s = OTSVelSurface(res_surface, vel) assert (4, 2) == ots_s.z3d.shape
def test_dxdydz(self): nx = 10 ny = 10 nz = 10 grid = GridGen.createRectangular( (nx,ny,nz) , (2,3,4) ) (dx,dy,dz) = grid.getCellDims( active_index = 0 ) self.assertEqual( dx , 2 ) self.assertEqual( dy , 3 ) self.assertEqual( dz , 4 )
def test_dxdydz(self): nx = 10 ny = 10 nz = 10 grid = GridGen.createRectangular( (nx,ny,nz) , (2,3,4) ) (dx,dy,dz) = grid.getCellDims( active_index = 0 ) self.assertEqual( dx , 2 ) self.assertEqual( dy , 3 ) self.assertEqual( dz , 4 )
def test_cell_corner_containment_compatability(self): grid = GridGen.createRectangular( (3,3,3), (1,1,1) ) for x, y, z in itertools.product(range(4), repeat=3): for i in range(27): if grid.cell_contains(x, y, z, i): self.assertEqual( CORNER_HOME[(x,y,z)], i )
def test_truncated_file(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) with TestAreaContext("python/ecl_grid/truncated"): grid.save_EGRID( "TEST.EGRID") size = os.path.getsize( "TEST.EGRID") with open("TEST.EGRID" , "r+") as f: f.truncate( size / 2 ) with self.assertRaises(IOError): EclGrid("TEST.EGRID")
def test_truncated_file(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) with TestAreaContext("python/ecl_grid/truncated"): grid.save_EGRID( "TEST.EGRID") size = os.path.getsize( "TEST.EGRID") with open("TEST.EGRID" , "r+") as f: f.truncate( size / 2 ) with self.assertRaises(IOError): EclGrid("TEST.EGRID")
def test_create_3d_agrees_with_get_value(self): nx = 5 ny = 3 nz = 2 grid = GridGen.createRectangular((nx, ny, nz), (1, 1, 1)) kw = EclKW("SWAT", nx * ny * nz, EclDataType.ECL_FLOAT) for k, j, i in itertools.product(range(nz), range(ny), range(nx)): kw[i + j * nx + nx * ny * k] = i * j * k numpy_3d = grid.create3D(kw) for k, j, i in itertools.product(range(nz), range(ny), range(nx)): self.assertAlmostEqual(numpy_3d[i, j, k], grid.grid_value(kw, i, j, k))
def test_posXY1(self): nx = 4 ny = 1 nz = 1 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) (i,j) = grid.findCellXY( 0.5 , 0.5, 0 ) self.assertEqual(i , 0) self.assertEqual(j , 0) (i,j) = grid.findCellXY( 3.5 , 0.5, 0 ) self.assertEqual(i , 3) self.assertEqual(j , 0)
def test_posXY1(self): nx = 4 ny = 1 nz = 1 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) (i,j) = grid.findCellXY( 0.5 , 0.5, 0 ) self.assertEqual(i , 0) self.assertEqual(j , 0) (i,j) = grid.findCellXY( 3.5 , 0.5, 0 ) self.assertEqual(i , 3) self.assertEqual(j , 0)
def test_len(self): nx = 10 ny = 11 nz = 12 actnum = EclKW( "ACTNUM" , nx*ny*nz , EclDataType.ECL_INT ) actnum[0] = 1 actnum[1] = 1 actnum[2] = 1 actnum[3] = 1 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1), actnum = actnum) self.assertEqual( len(grid) , nx*ny*nz ) self.assertEqual( grid.getNumActive( ) , 4 )
def test_len(self): nx = 10 ny = 11 nz = 12 actnum = EclKW( "ACTNUM" , nx*ny*nz , EclDataType.ECL_INT ) actnum[0] = 1 actnum[1] = 1 actnum[2] = 1 actnum[3] = 1 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1), actnum = actnum) self.assertEqual( len(grid) , nx*ny*nz ) self.assertEqual( grid.getNumActive( ) , 4 )
def test_cell_face_containment(self): n = 4 d = 10 grid = GridGen.createRectangular( (n, n, n), (d, d, d)) for x, y, z in itertools.product(range(d/2, n*d, d), repeat=3): for axis, direction in itertools.product(range(3), [-1, 1]): p = [x, y, z] p[axis] = p[axis] + direction*d/2 self.assertEqual( 1, [grid.cell_contains(p[0], p[1], p[2], i) for i in range(n**3)].count(True) )
def test_cell_face_containment(self): n = 4 d = 10 grid = GridGen.createRectangular( (n, n, n), (d, d, d)) for x, y, z in itertools.product(range(d//2, n*d, d), repeat=3): for axis, direction in itertools.product(range(3), [-1, 1]): p = [x, y, z] p[axis] = p[axis] + direction*d/2 self.assertEqual( 1, [grid.cell_contains(p[0], p[1], p[2], i) for i in range(n**3)].count(True) )
def test_node_pos(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) with self.assertRaises(IndexError): grid.getNodePos(-1,0,0) with self.assertRaises(IndexError): grid.getNodePos(11,0,0) p0 = grid.getNodePos(0,0,0) self.assertEqual( p0 , (0,0,0)) p7 = grid.getNodePos(10,20,30) self.assertEqual( p7 , (10,20,30))
def test_node_pos(self): grid = GridGen.createRectangular( (10,20,30) , (1,1,1) ) with self.assertRaises(IndexError): grid.getNodePos(-1,0,0) with self.assertRaises(IndexError): grid.getNodePos(11,0,0) p0 = grid.getNodePos(0,0,0) self.assertEqual( p0 , (0,0,0)) p7 = grid.getNodePos(10,20,30) self.assertEqual( p7 , (10,20,30))
def test_repr_and_name(self): grid = GridGen.createRectangular((2,2,2), (10,10,10), actnum=[0,0,0,0,1,1,1,1]) pfx = 'EclGrid(' rep = repr(grid) self.assertEqual(pfx, rep[:len(pfx)]) self.assertEqual(type(rep), type('')) self.assertEqual(type(grid.getName()), type('')) with TestAreaContext("python/ecl_grid/repr"): grid.save_EGRID("CASE.EGRID") g2 = EclGrid("CASE.EGRID") r2 = repr(g2) self.assertEqual(pfx, r2[:len(pfx)]) self.assertEqual(type(r2), type('')) self.assertEqual(type(g2.getName()), type(''))
def test_repr_and_name(self): grid = GridGen.createRectangular((2,2,2), (10,10,10), actnum=[0,0,0,0,1,1,1,1]) pfx = 'EclGrid(' rep = repr(grid) self.assertEqual(pfx, rep[:len(pfx)]) self.assertEqual(type(rep), type('')) self.assertEqual(type(grid.getName()), type('')) with TestAreaContext("python/ecl_grid/repr"): grid.save_EGRID("CASE.EGRID") g2 = EclGrid("CASE.EGRID") r2 = repr(g2) self.assertEqual(pfx, r2[:len(pfx)]) self.assertEqual(type(r2), type('')) self.assertEqual(type(g2.getName()), type(''))
def test_dPV(setUp): spec, actnum, parms = setUp grid = EclGridGenerator.createRectangular( dims=(2, 2, 2), dV=(100, 100, 100), actnum=actnum ) grid.save_EGRID("TEST.EGRID") create_restart(grid, "TEST") create_init(grid, "TEST") ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) vintage_pairs = [ (datetime.date(2000, 1, 1), datetime.date(2010, 1, 1)), (datetime.date(2010, 1, 1), datetime.date(2011, 1, 1)), ] tshift = ots.dpv(vintage_pairs) assert tshift[0][0] == pytest.approx(((20 - 10) * 1e6 + (0 - 0) * 1e6) / 1e9) assert tshift[0][2] == pytest.approx(((20 - 10) * 1e6 + (0 - 0) * 1e6) / 1e9) assert tshift[1][0] == pytest.approx(((25 - 20) * 1e6 + (0 - 0) * 1e6) / 1e9) assert tshift[1][2] == pytest.approx(((25 - 20) * 1e6 + (0 - 0) * 1e6) / 1e9) parms.convention = -1 ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) tshift_b_m = ots.dpv(vintage_pairs) assert tshift[0][0] == pytest.approx(-tshift_b_m[0][0])
def test_init_ACTNUM(self): nx = 10 ny = 23 nz = 7 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) actnum = grid.exportACTNUM() self.assertEqual( len(actnum) , nx*ny*nz ) self.assertEqual( actnum[0] , 1 ) self.assertEqual( actnum[nx*ny*nz - 1] , 1 ) actnum_kw = grid.exportACTNUMKw( ) self.assertEqual(len(actnum_kw) , len(actnum)) for a1,a2 in zip(actnum, actnum_kw): self.assertEqual(a1, a2)
def test_init_ACTNUM(self): nx = 10 ny = 23 nz = 7 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) actnum = grid.exportACTNUM() self.assertEqual( len(actnum) , nx*ny*nz ) self.assertEqual( actnum[0] , 1 ) self.assertEqual( actnum[nx*ny*nz - 1] , 1 ) actnum_kw = grid.exportACTNUMKw( ) self.assertEqual(len(actnum_kw) , len(actnum)) for a1,a2 in zip(actnum, actnum_kw): self.assertEqual(a1, a2)
def test_import_field_param(input_parameter, expected_result, grid_prop): """test function reads field parameter files and creates a dataframe from it""" def flatten(regular_list): return [item for sublist in regular_list for item in sublist] grid = EclGridGenerator.createRectangular((2, 2, 2), (1, 1, 1)) grid.save_EGRID("MY_GRID.EGRID") for iens in range(5): grid_prop("PERMX", iens, grid.getGlobalSize(), f"{iens}_PERMX_field.grdecl") grid_prop("PORO", iens + 5, grid.getGlobalSize(), f"{iens}_PORO_field.grdecl") files = [f"{ens_nr}_{input_parameter}_field.grdecl" for ens_nr in range(5)] result = ahmanalysis._import_field_param("MY_GRID", input_parameter, files) assert flatten(result) == flatten(expected_result)
def test_posXYEdge(self): nx = 10 ny = 11 grid = GridGen.createRectangular( (nx,ny,1) , (1,1,1) ) self.assertEqual( grid.findCellCornerXY(0,0,0) , 0 ) self.assertEqual( grid.findCellCornerXY(nx,0,0) , nx) self.assertEqual( grid.findCellCornerXY(0 , ny , 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(nx,ny,0) , (nx + 1 ) * (ny + 1) - 1) self.assertEqual( grid.findCellCornerXY(0.25,0,0) , 0 ) self.assertEqual( grid.findCellCornerXY(0,0.25,0) , 0 ) self.assertEqual( grid.findCellCornerXY(nx - 0.25,0,0) , nx ) self.assertEqual( grid.findCellCornerXY(nx , 0.25,0) , nx ) self.assertEqual( grid.findCellCornerXY(0 , ny - 0.25, 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(0.25 , ny , 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(nx -0.25 ,ny,0) , (nx + 1 ) * (ny + 1) - 1) self.assertEqual( grid.findCellCornerXY(nx , ny - 0.25,0) , (nx + 1 ) * (ny + 1) - 1)
def test_posXYEdge(self): nx = 10 ny = 11 grid = GridGen.createRectangular( (nx,ny,1) , (1,1,1) ) self.assertEqual( grid.findCellCornerXY(0,0,0) , 0 ) self.assertEqual( grid.findCellCornerXY(nx,0,0) , nx) self.assertEqual( grid.findCellCornerXY(0 , ny , 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(nx,ny,0) , (nx + 1 ) * (ny + 1) - 1) self.assertEqual( grid.findCellCornerXY(0.25,0,0) , 0 ) self.assertEqual( grid.findCellCornerXY(0,0.25,0) , 0 ) self.assertEqual( grid.findCellCornerXY(nx - 0.25,0,0) , nx ) self.assertEqual( grid.findCellCornerXY(nx , 0.25,0) , nx ) self.assertEqual( grid.findCellCornerXY(0 , ny - 0.25, 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(0.25 , ny , 0) , (nx + 1 ) * ny ) self.assertEqual( grid.findCellCornerXY(nx -0.25 ,ny,0) , (nx + 1 ) * (ny + 1) - 1) self.assertEqual( grid.findCellCornerXY(nx , ny - 0.25,0) , (nx + 1 ) * (ny + 1) - 1)
def test_create_missing_ecl_file(set_up, missing_file, expected_error): spec, actnum, params = set_up grid = EclGridGenerator.createRectangular(dims=(10, 10, 10), dV=(1, 1, 1)) grid.save_EGRID("TEST.EGRID") create_init(grid, "TEST") create_restart(grid, "TEST") os.remove(missing_file) with pytest.raises(IOError, match=expected_error): OverburdenTimeshift( params.eclbase, params.mapaxes, params.seabed, params.youngs, params.poisson, params.rfactor, params.convention, params.above, params.velocity_model, )
def test_ahmanalysis_run_field(test_data_root, grid_prop): """test data_set with scalar and Field parameters""" test_data_dir = os.path.join(test_data_root, "snake_oil") shutil.copytree(test_data_dir, "test_data") os.chdir(os.path.join("test_data")) os.makedirs("fields") grid = EclGridGenerator.createRectangular((10, 12, 5), (1, 1, 1)) for iens in range(10): grid_prop("PERMX", 10, grid.getGlobalSize(), "fields/permx%d.grdecl" % iens) grid_prop("PORO", 0.2, grid.getGlobalSize(), "fields/poro%d.grdecl" % iens) res_config = ResConfig("snake_oil_field.ert") res_config.convertToCReference(None) ert = EnKFMain(res_config) ahmanalysis.AhmAnalysisJob(ert).run(prior_name="default") # assert that this returns/generates the delta field parameter gen_obs_list = GenDataObservationCollector.getAllObservationKeys(ert) summary_obs_list = SummaryObservationCollector.getAllObservationKeys(ert) obs_keys = gen_obs_list + summary_obs_list output_deltafield = os.path.join( "storage", "snake_oil_field", "reports", "default", "AhmAnalysisJob", "delta_fieldPERMX.csv", ) assert os.path.isfile(output_deltafield) delta_df = pd.read_csv(output_deltafield, index_col=0) assert len(delta_df.columns) == 8 + (len(obs_keys) * 2) + 1 # check field parameter is present and not empty in the final KS matrix output_ks = output_deltafield.replace("delta_fieldPERMX.csv", "ks.csv") ks_df = pd.read_csv(output_ks, index_col=0) assert not ks_df.empty assert "FIELD_PERMX" in ks_df.index.tolist() check_empty = ks_df.loc[["FIELD_PERMX"], :].isnull().all(axis=1) assert not check_empty["FIELD_PERMX"]
def test_posXY(self): nx = 10 ny = 23 nz = 7 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) with self.assertRaises(IndexError): grid.findCellXY( 1 , 1, -1 ) with self.assertRaises(IndexError): grid.findCellXY( 1 , 1, nz + 1 ) with self.assertRaises(ValueError): grid.findCellXY(15 , 78 , 2) i,j = grid.findCellXY( 1.5 , 1.5 , 2 ) self.assertEqual(i , 1) self.assertEqual(j , 1) for i in range(nx): for j in range(ny): p = grid.findCellXY(i + 0.5 , j+ 0.5 , 0) self.assertEqual( p[0] , i ) self.assertEqual( p[1] , j ) c = grid.findCellCornerXY( 0.10 , 0.10 , 0 ) self.assertEqual(c , 0) c = grid.findCellCornerXY( 0.90 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) + 1 ) c = grid.findCellCornerXY( 0.10 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) ) c = grid.findCellCornerXY( 0.90 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) + 1 ) c = grid.findCellCornerXY( 0.90 , 0.10 , 0 ) self.assertEqual( c , 1 )
def test_posXY(self): nx = 10 ny = 23 nz = 7 grid = GridGen.createRectangular( (nx,ny,nz) , (1,1,1) ) with self.assertRaises(IndexError): grid.findCellXY( 1 , 1, -1 ) with self.assertRaises(IndexError): grid.findCellXY( 1 , 1, nz + 1 ) with self.assertRaises(ValueError): grid.findCellXY(15 , 78 , 2) i,j = grid.findCellXY( 1.5 , 1.5 , 2 ) self.assertEqual(i , 1) self.assertEqual(j , 1) for i in range(nx): for j in range(ny): p = grid.findCellXY(i + 0.5 , j+ 0.5 , 0) self.assertEqual( p[0] , i ) self.assertEqual( p[1] , j ) c = grid.findCellCornerXY( 0.10 , 0.10 , 0 ) self.assertEqual(c , 0) c = grid.findCellCornerXY( 0.90 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) + 1 ) c = grid.findCellCornerXY( 0.10 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) ) c = grid.findCellCornerXY( 0.90 , 0.90 , 0 ) self.assertEqual( c , (nx + 1) + 1 ) c = grid.findCellCornerXY( 0.90 , 0.10 , 0 ) self.assertEqual( c , 1 )
def test_eval(setUp): spec, actnum, parms = setUp grid = EclGridGenerator.createRectangular( dims=(2, 2, 2), dV=(100, 100, 100), actnum=actnum ) grid.save_EGRID("TEST.EGRID") create_init(grid, "TEST") create_restart(grid, "TEST") parms.velocity_model = "TEST.segy" create_segy_file(parms.velocity_model, spec) ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) with pytest.raises(ValueError): ots.add_survey("S1", datetime.date(2000, 1, 15)) vintage_pairs = [(datetime.date(1900, 1, 1), datetime.date(2010, 1, 1))] with pytest.raises(ValueError): ots.geertsma_ts_simple(vintage_pairs) vintage_pairs = [(datetime.date(2010, 1, 1), datetime.date(1900, 1, 1))] with pytest.raises(ValueError): ots.geertsma_ts_simple(vintage_pairs) vintage_pairs = [(datetime.date(2000, 1, 1), datetime.date(2010, 1, 1))] ots.geertsma_ts_simple(vintage_pairs)
def test_create_invalid_input_missing_segy(set_up): spec, actnum, parms = set_up grid = EclGridGenerator.createRectangular(dims=(10, 10, 10), dV=(1, 1, 1)) grid.save_EGRID("TEST.EGRID") create_init(grid, "TEST") create_restart(grid, "TEST") parms.velocity_model = "missing.segy" with pytest.raises(IOError, match="No such file or directory"): OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, )
def test_irap_surface(setUp): spec, actnum, parms = setUp grid = EclGridGenerator.createRectangular( dims=(2, 2, 2), dV=(100, 100, 100), actnum=actnum ) # with TestAreaContext("test_irap_surface"): create_restart(grid, "TEST") create_init(grid, "TEST") grid.save_EGRID("TEST.EGRID") parms.velocity_model = "TEST.segy" create_segy_file(parms.velocity_model, spec) ots = OverburdenTimeshift( parms.eclbase, parms.mapaxes, parms.seabed, parms.youngs, parms.poisson, parms.rfactor, parms.convention, parms.above, parms.velocity_model, ) f_name = "irap.txt" s = ots._create_surface() s.write(f_name) s = Surface(f_name) assert s.getNX() == 2 assert s.getNY() == 2 for val in s: assert val == 90
def test_EclRegion_properties(self): grid = EclGridGenerator.createRectangular( (10,10,10) , (1,1,1)) region = EclRegion( grid , False )