def create_water_oil_gas(params=None): """Create a WaterOilGas object from a dictionary of parameters Parameterization (Corey/LET) is inferred from presence of certain parameters in the dictionary. """ if not params: params = dict() if not isinstance(params, dict): raise TypeError( "Parameter to create_water_oil_gas must be a dictionary") # For case insensitiveness, all keys are converted to lower case: params = {key.lower(): value for (key, value) in params.items()} wateroil = PyscalFactory.create_water_oil(params) gasoil = PyscalFactory.create_gas_oil(params) wog_init_params = slicedict(params, WOG_INIT) wateroilgas = WaterOilGas(**wog_init_params) # The wateroilgas __init__ has already created WaterOil and GasOil objects # but we overwrite the references with newly created ones, this factory function # must then guarantee that they are compatible. wateroilgas.wateroil = wateroil wateroilgas.gasoil = gasoil if not wateroilgas.selfcheck(): raise ValueError(("Incomplete WaterOilGas object, " "some parameters missing to factory")) return wateroilgas
def test_threephasecheck(): """Test three phase consistency checks""" wog = WaterOilGas() assert not wog.selfcheck() wog.wateroil.add_corey_water(nw=2) wog.wateroil.add_corey_oil(now=2, kroend=0.9) wog.gasoil.add_corey_gas(ng=2) wog.gasoil.add_corey_oil(nog=2, kroend=1) assert not wog.threephaseconsistency()
def create_water_oil_gas(params=None): """Create a WaterOilGas object from a dictionary of parameters Parameterization (Corey/LET) is inferred from presence of certain parameters in the dictionary. Check create_water_oil() and create_gas_oil() for lists of supported parameters (case insensitive) """ if not params: params = dict() if not isinstance(params, dict): raise TypeError( "Parameter to create_water_oil_gas must be a dictionary") check_deprecated(params) # For case insensitiveness, all keys are converted to lower case: params = {key.lower(): value for (key, value) in params.items()} if sufficient_water_oil_params(params): wateroil = PyscalFactory.create_water_oil(params) else: logger.info( "No wateroil parameters. Assuming only gas-oil in wateroilgas") wateroil = None if sufficient_gas_oil_params(params): gasoil = PyscalFactory.create_gas_oil(params) else: logger.info("No gasoil parameters, assuming two-phase oilwatergas") gasoil = None wog_init_params = slicedict(params, WOG_INIT) wateroilgas = WaterOilGas(**wog_init_params) # The wateroilgas __init__ has already created WaterOil and GasOil objects # but we overwrite the references with newly created ones, this factory function # must then guarantee that they are compatible. wateroilgas.wateroil = wateroil # This might be None wateroilgas.gasoil = gasoil # This might be None if not wateroilgas.selfcheck(): raise ValueError(( "Incomplete WaterOilGas object, some parameters missing to factory" )) return wateroilgas
def test_slgof(swl, sorg, sgcr): wog = WaterOilGas(swl=swl, sorg=sorg, sgcr=sgcr, h=0.05) wog.wateroil.add_corey_water() wog.wateroil.add_corey_oil() wog.gasoil.add_corey_gas(krgmax=1) wog.gasoil.add_corey_oil() assert wog.selfcheck() slgof = wog.gasoil.slgof_df() assert "sl" in slgof assert "krg" in slgof assert "krog" in slgof assert len(slgof) check_table(slgof) # Requirements from E100 manual: assert np.isclose(slgof["sl"].values[0], wog.gasoil.swl + wog.gasoil.sorg) assert np.isclose(slgof["krg"].values[-1], 0) assert np.isclose(slgof["krog"].values[0], 0)
def test_slgof(swl, sorg, sgcr): """Test dumping SLGOF records""" wog = WaterOilGas(swl=swl, sorg=sorg, sgcr=sgcr, h=0.05) wog.wateroil.add_corey_water() wog.wateroil.add_corey_oil() wog.gasoil.add_corey_gas(krgmax=1) wog.gasoil.add_corey_oil() assert wog.selfcheck() slgof = wog.gasoil.slgof_df() assert "SL" in slgof assert "KRG" in slgof assert "KROG" in slgof assert not slgof.empty check_table(slgof) sat_table_str_ok(wog.SLGOF()) # Requirements from E100 manual: assert np.isclose(slgof["SL"].values[0], wog.gasoil.swl + wog.gasoil.sorg) assert np.isclose(slgof["KRG"].values[-1], 0) assert np.isclose(slgof["KROG"].values[0], 0)