def test_df2ecl_pvtg(): """Test generation of PVTG include statements""" pvtg_df = pd.DataFrame( columns=["OGR", "VOLUMEFACTOR", "VISCOSITY", "PRESSURE", "PVTNUM"], data=[ [0.00014, 0.0523, 0.0234, 30.0, 1], [0.00000, 0.0036, 0.0359, 30.0, 1], [0.00014, 0.0523, 0.0234, 60.0, 2], ], ) assert "PVTG" in pvt.df2ecl_pvtg(pvtg_df) assert "PVTG" in pvt.df2ecl_pvtg(pvtg_df.assign(KEYWORD="PVTG")) pd.testing.assert_frame_equal( pvt.df(pvt.df2ecl_pvtg(pvtg_df)).drop("KEYWORD", axis="columns"), pvtg_df ) # If PVTNUM is missing, the code gives up: assert "PVTG" not in pvt.df2ecl_pvtg( pd.concat([pvtg_df, pvtg_df]).drop("PVTNUM", axis="columns") ) # Unless there is only one row: assert "PVTG" in pvt.df2ecl_pvtg(pvtg_df.head(1).drop("PVTNUM", axis="columns")) # Missing column: with pytest.raises(KeyError, match="VOLUMEFACTOR"): pvt.df2ecl_pvtg(pvtg_df.drop("VOLUMEFACTOR", axis="columns"))
def test_pvtg_string(): """Test parsing of PVTG""" # Example data from E100 manual string = """ PVTG 30 0.00014 0.0523 0.0234 0 0.0521 0.0238 / 90 0.00012 0.0132 0.0252 0 0.0131 0.0253 / 150 0.00015 0.00877 0.0281 0 0.00861 0.0275 / 210 0.00019 0.00554 0.0318 0 0.00555 0.0302 / 270 0.00029 0.00417 0.0355 0 0.00421 0.0330 / 330 0.00049 0.00357 0.0392 0 0.00361 0.0358 / 530 0.00060 0.00356 0.0393 0 0.00360 0.0359 / / null record to terminate table 1 60 0.00014 0.0523 0.0234 / 120 0.00012 0.0132 0.0252 / 180 0.00015 0.00877 0.0281 / 240 0.00019 0.00554 0.0318 / 300 0.00029 0.00417 0.0355 / 360 0.00049 0.00357 0.0392 / 560 0.00060 0.00356 0.0393 0 0.00360 0.0359 / undersaturated data for Pg=560 / null record to terminate table 2 """ pvtg_df = pvt.pvtg_fromdeck(string) assert "PRESSURE" in pvtg_df assert "OGR" in pvtg_df assert "PVTNUM" in pvtg_df assert "VOLUMEFACTOR" in pvtg_df assert "VISCOSITY" in pvtg_df assert len(pvtg_df["PVTNUM"].unique()) == 2 assert len(pvtg_df["PRESSURE"].unique()) == 14 assert max(pvtg_df["VOLUMEFACTOR"]) == 0.0523 assert max(pvtg_df["VISCOSITY"]) == 0.0393 # Test emtpy data: inc = pvt.df2ecl_pvtg(pvt.df("")) assert "No data" in inc assert pvt.df(inc).empty
def test_pvtg_string(): """Test parsing of PVTG""" # Example data from E100 manual string = """ PVTG 30 0.00014 0.0523 0.0234 0 0.0521 0.0238 / 90 0.00012 0.0132 0.0252 0 0.0131 0.0253 / 150 0.00015 0.00877 0.0281 0 0.00861 0.0275 / 210 0.00019 0.00554 0.0318 0 0.00555 0.0302 / 270 0.00029 0.00417 0.0355 0 0.00421 0.0330 / 330 0.00049 0.00357 0.0392 0 0.00361 0.0358 / 530 0.00060 0.00356 0.0393 0 0.00360 0.0359 / / null record to terminate table 1 60 0.00014 0.0523 0.0234 / 120 0.00012 0.0132 0.0252 / 180 0.00015 0.00877 0.0281 / 240 0.00019 0.00554 0.0318 / 300 0.00029 0.00417 0.0355 / 360 0.00049 0.00357 0.0392 / 560 0.00060 0.00356 0.0393 0 0.00360 0.0359 / undersaturated data for Pg=560 / null record to terminate table 2 """ pvtg_df = pvt.pvtg_fromdeck(string) assert "PRESSURE" in pvtg_df assert "OGR" in pvtg_df assert "PVTNUM" in pvtg_df assert "VOLUMEFACTOR" in pvtg_df assert "VISCOSITY" in pvtg_df assert len(pvtg_df["PVTNUM"].unique()) == 2 assert len(pvtg_df["PRESSURE"].unique()) == 14 assert max(pvtg_df["VOLUMEFACTOR"]) == 0.0523 assert max(pvtg_df["VISCOSITY"]) == 0.0393 # Test empty data: inc = pvt.df2ecl_pvtg(pvt.df("")) assert "No data" in inc assert pvt.df(inc).empty # Simpler string and dataframe string = """ PVTG 30 0.00014 0.0523 0.0234 0 0.00360 0.0359 / / 60 0.00014 0.0523 0.0234 / / """ df = pvt.pvtg_fromdeck(string) pd.testing.assert_frame_equal( df, pd.DataFrame( columns=["OGR", "VOLUMEFACTOR", "VISCOSITY", "PRESSURE", "PVTNUM"], data=[ [0.00014, 0.0523, 0.0234, 30.0, 1], [0.00000, 0.0036, 0.0359, 30.0, 1], [0.00014, 0.0523, 0.0234, 60.0, 2], ], ), )