示例#1
0
 def test_units(self, btg):
     assert_units_equivalent(btg.fs.unit.control_volume.heat,
                             pyunits.J / pyunits.s)
     # Referecnes don;t have units at the moment, so these tests fail
     # assert_units_equivalent(btg.fs.unit.heat_duty, pyunits.J/pyunits.s)
     # assert_units_equivalent(btg.fs.unit.deltaP, pyunits.Pa)
     assert_units_consistent(btg)
示例#2
0
def test_constant_dh_rxn(model):
    model.rparams.config.rate_reactions.r1.parameter_data = {
        "dh_rxn_ref": 1}
    model.rparams.config.equilibrium_reactions.e1.parameter_data = {
        "dh_rxn_ref": 10}

    constant_dh_rxn.build_parameters(
        model.rparams.reaction_r1, model.rparams.config.rate_reactions["r1"])
    constant_dh_rxn.build_parameters(
        model.rparams.reaction_e1,
        model.rparams.config.equilibrium_reactions["e1"])

    # Check parameter construction
    assert isinstance(model.rparams.reaction_r1.dh_rxn_ref, Var)
    assert model.rparams.reaction_r1.dh_rxn_ref.value == 1

    assert isinstance(model.rparams.reaction_e1.dh_rxn_ref, Var)
    assert model.rparams.reaction_e1.dh_rxn_ref.value == 10

    # Check expressions
    rform = constant_dh_rxn.return_expression(
        model.rxn[1], model.rparams.reaction_r1, "r1", 300)

    assert str(rform) == str(model.rparams.reaction_r1.dh_rxn_ref)

    rform = constant_dh_rxn.return_expression(
        model.rxn[1], model.rparams.reaction_e1, "e1", 300)

    assert str(rform) == str(model.rparams.reaction_e1.dh_rxn_ref)
    
    assert_units_equivalent(rform, pyunits.J/pyunits.mol)
示例#3
0
def test_Txy_dataclass():

    TD = TXYDataClass('benzene', 'toluene',
                      pyunits.kg / pyunits.m / pyunits.s**2, pyunits.K, 101325)
    TD.TBubb = [353.3205, 365.3478, 383.8817]
    TD.TDew = [353.3237, 372.0203, 383.8845]
    TD.x = [0.9999, 0.5, 0.01]

    assert TD.Component_1 == 'benzene'
    assert TD.Component_2 == 'toluene'
    assert_units_equivalent(TD.Punits, pyunits.kg / pyunits.m / pyunits.s**2)
    assert_units_equivalent(TD.Tunits, pyunits.K)
    assert TD.P == 101325
    assert TD.TBubb == [
        pytest.approx(353.3205, abs=1e-4),
        pytest.approx(365.3478, abs=1e-4),
        pytest.approx(383.8817, abs=1e-4)
    ]
    assert TD.TDew == [
        pytest.approx(353.3237, abs=1e-4),
        pytest.approx(372.0203, abs=1e-4),
        pytest.approx(383.8845, abs=1e-4)
    ]
    assert TD.x == [
        pytest.approx(0.9999, abs=1e-4),
        pytest.approx(0.5, abs=1e-4),
        pytest.approx(0.01, abs=1e-4)
    ]
示例#4
0
def test_arrhenius_molarity(model):
    model.rparams.config.rate_reactions.r1.concentration_form = \
        ConcentrationForm.molarity
    model.rparams.config.rate_reactions.r1.parameter_data = {
        "arrhenius_const": 1,
        "energy_activation": 500
    }

    arrhenius.build_parameters(model.rparams.reaction_r1,
                               model.rparams.config.rate_reactions["r1"])

    # Check parameter construction
    assert isinstance(model.rparams.reaction_r1.arrhenius_const, Var)
    assert model.rparams.reaction_r1.arrhenius_const.value == 1

    assert isinstance(model.rparams.reaction_r1.energy_activation, Var)
    assert model.rparams.reaction_r1.energy_activation.value == 500

    # Check expressions
    rform = arrhenius.return_expression(model.rxn[1],
                                        model.rparams.reaction_r1, "r1",
                                        300 * pyunits.K)

    assert value(rform) == pytest.approx(0.81836, rel=1e-3)
    assert_units_equivalent(rform, 1 / pyunits.s)
示例#5
0
def test_unit_consistency(model):
    assert_units_consistent(model)

    for e in model.fs.state[0].flow_vol.values():
        assert_units_equivalent(e, pyunits.m**3 / pyunits.s)
    for e in model.fs.state[0].conc_mass_comp.values():
        assert_units_equivalent(e, pyunits.kg / pyunits.m**3)
示例#6
0
def test_pressure_sat_comp_dT(frame):
    pressure_sat_comp.build_parameters(frame.params)

    expr = pressure_sat_comp.dT_expression(frame.props[1], frame.params,
                                           frame.props[1].temperature)

    delta = 1e-4 * pyunits.K
    val = pressure_sat_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    val_p = pressure_sat_comp.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature + delta)

    dPdT = value((val - val_p) / -delta)

    assert value(expr) == pytest.approx(dPdT, 1e-4)

    frame.props[1].temperature.value = 373.15

    val = pressure_sat_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    val_p = pressure_sat_comp.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature + delta)

    dPdT = value((val - val_p) / -delta)

    assert value(expr) == pytest.approx(dPdT, 1e-4)

    assert_units_equivalent(expr, pyunits.Pa / pyunits.K)
示例#7
0
    def test_get_eos_properties(self):
        omega = CoolPropWrapper._get_eos_property("Acetone", "acentric")
        assert omega == (0.3071, pyunits.dimensionless)

        mw = CoolPropWrapper._get_eos_property("Acetone", "molar_mass")
        assert mw[0] == 0.05807914
        assert_units_equivalent(mw[1], pyunits.kg/pyunits.mol)
示例#8
0
def test_cp_mol_ig_comp(frame):
    cp_mol_ig_comp.build_parameters(frame.params)

    assert isinstance(frame.params.cp_mol_ig_comp_coeff_A, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_A) == 30.09200
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_B, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_B) == 6.832514
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_C, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_C) == 6.793435
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_D, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_D) == -2.534480
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_E, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_E) == 0.082139
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_F, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_F) == -250.8810
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_G, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_G) == 223.3967
    assert isinstance(frame.params.cp_mol_ig_comp_coeff_H, Var)
    assert value(frame.params.cp_mol_ig_comp_coeff_H) == -241.8264

    expr = cp_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                            frame.props[1].temperature)
    assert value(expr) == pytest.approx(35.22, abs=1e-2)

    frame.props[1].temperature.value = 600
    assert value(expr) == pytest.approx(36.32, abs=1e-2)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
示例#9
0
    def test_van_t_hoff_molarity(self, model):
        model.rparams.config.equilibrium_reactions.r1.concentration_form = \
            ConcentrationForm.molarity
        model.rparams.config.equilibrium_reactions.r1.parameter_data = {
            "k_eq_ref": 1,
            "T_eq_ref": 500
        }

        van_t_hoff.build_parameters(
            model.rparams.reaction_r1,
            model.rparams.config.equilibrium_reactions["r1"])

        # Check parameter construction
        assert isinstance(model.rparams.reaction_r1.k_eq_ref, Var)
        assert model.rparams.reaction_r1.k_eq_ref.value == 1

        assert isinstance(model.rparams.reaction_r1.T_eq_ref, Var)
        assert model.rparams.reaction_r1.T_eq_ref.value == 500

        # Check expression
        rform = van_t_hoff.return_expression(model.rxn[1],
                                             model.rparams.reaction_r1, "r1",
                                             300 * pyunits.K)

        assert value(rform) == pytest.approx(0.99984, rel=1e-3)
        assert_units_equivalent(rform, pyunits.mol / pyunits.m**3)
示例#10
0
def test_arrhenius_partial_pressure_convert(model):
    model.rparams.config.rate_reactions.r1.concentration_form = \
        ConcentrationForm.partialPressure
    model.rparams.config.rate_reactions.r1.parameter_data = {
        "arrhenius_const":
        (1e-3, pyunits.kmol / pyunits.m**3 / pyunits.s / pyunits.Pa),
        "energy_activation": (0.5, pyunits.kJ / pyunits.mol)
    }

    arrhenius.build_parameters(model.rparams.reaction_r1,
                               model.rparams.config.rate_reactions["r1"])

    # Check parameter construction
    assert isinstance(model.rparams.reaction_r1.arrhenius_const, Var)
    assert model.rparams.reaction_r1.arrhenius_const.value == 1

    assert isinstance(model.rparams.reaction_r1.energy_activation, Var)
    assert model.rparams.reaction_r1.energy_activation.value == 500

    # Check expressions
    rform = arrhenius.return_expression(model.rxn[1],
                                        model.rparams.reaction_r1, "r1",
                                        300 * pyunits.K)

    assert value(rform) == pytest.approx(0.81836, rel=1e-3)
    assert_units_equivalent(
        rform, pyunits.mol / pyunits.m**3 / pyunits.s / pyunits.Pa)
示例#11
0
    def test_van_t_hoff_partial_pressure_convert(self, model):
        model.rparams.config.equilibrium_reactions.r1.concentration_form = \
            ConcentrationForm.partialPressure
        model.rparams.config.equilibrium_reactions.r1.parameter_data = {
            "k_eq_ref": (1e-3, pyunits.kPa),
            "T_eq_ref": (900, pyunits.degR)
        }

        van_t_hoff.build_parameters(
            model.rparams.reaction_r1,
            model.rparams.config.equilibrium_reactions["r1"])

        # Check parameter construction
        assert isinstance(model.rparams.reaction_r1.k_eq_ref, Var)
        assert model.rparams.reaction_r1.k_eq_ref.value == 1

        assert isinstance(model.rparams.reaction_r1.T_eq_ref, Var)
        assert model.rparams.reaction_r1.T_eq_ref.value == 500

        # Check expression
        rform = van_t_hoff.return_expression(model.rxn[1],
                                             model.rparams.reaction_r1, "r1",
                                             300 * pyunits.K)

        assert value(rform) == pytest.approx(0.99984, rel=1e-3)
        assert_units_equivalent(rform, pyunits.Pa)
示例#12
0
 def test_units(self, sapon):
     assert_units_consistent(sapon)
     assert_units_equivalent(sapon.fs.unit.volume, units.m**3)
     assert_units_equivalent(sapon.fs.unit.length, units.m)
     assert_units_equivalent(sapon.fs.unit.area, units.m**2)
     assert_units_equivalent(sapon.fs.unit.heat_duty[0, 0],
                             units.W / units.m)
     assert_units_equivalent(sapon.fs.unit.deltaP[0, 0], units.Pa / units.m)
示例#13
0
def test_units_metadata():
    m = ConcreteModel()
    m.fs = FlowsheetBlock(default={"dynamic": False})

    m.fs.params = PropertyInterrogatorBlock()

    units_meta = m.fs.params.get_metadata().get_derived_units

    assert_units_equivalent(units_meta('length'), pyunits.m)
    assert_units_equivalent(units_meta('pressure'), pyunits.Pa)
示例#14
0
def test_enth_mol_ig_comp(frame):
    enth_mol_ig_comp.build_parameters(frame.params)

    expr = enth_mol_ig_comp.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature)
    assert value(expr) == pytest.approx(6.92e3 - 241826.4, rel=1e-3)  # value from NIST

    frame.props[1].temperature.value = 600
    assert value(expr) == pytest.approx(10.5e3 - 241826.4, rel=1e-3)  # value from NIST

    assert_units_equivalent(expr, pyunits.J/pyunits.mol)
示例#15
0
def test_entr_mol_ig_comp(frame):
    entr_mol_ig_comp.build_parameters(frame.params)

    expr = entr_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(206.5, rel=1e-3)

    frame.props[1].temperature.value = 600
    assert value(expr) == pytest.approx(213.1, rel=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
示例#16
0
def test_entr_mol_ig_comp_no_formation(frame):
    entr_mol_ig_comp.build_parameters(frame.params)
    frame.params.config.include_entropy_of_formation = False

    expr = entr_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(206.5, rel=1e-3)

    frame.props[1].temperature.value = 600
    assert value(expr) == pytest.approx(213.1, rel=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
示例#17
0
    def test_pressure_osm_phase(self, model):
        model.state[1].vol_mol_phase = Var(model.params.phase_list,
                                           initialize=18e-6,
                                           units=pyunits.m**3/pyunits.mol)

        assert_units_equivalent(model.state[1].pressure_osm_phase["Liq"],
                                pyunits.Pa)
        assert len(model.state[1].pressure_osm_phase) == 1
        assert pytest.approx(value(
            -Constants.gas_constant*300*log(0.1670306)/18e-6),
            rel=1e-6) == value(
                model.state[1].pressure_osm_phase["Liq"])
示例#18
0
def test_enth_mol_ig_comp_no_formation(frame):
    enth_mol_ig_comp.build_parameters(frame.params)
    frame.params.config.include_enthalpy_of_formation = False

    expr = enth_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(6.92e3, rel=1e-3)  # value from NIST

    frame.props[1].temperature.value = 600
    assert value(expr) == pytest.approx(10.5e3, rel=1e-3)  # value from NIST

    assert_units_equivalent(expr, pyunits.J / pyunits.mol)
示例#19
0
def test_entr_mol_ig_comp(frame):
    entr_mol_ig_comp.build_parameters(frame.params)

    assert isinstance(frame.params.entr_mol_form_vap_comp_ref, Var)
    assert value(frame.params.entr_mol_form_vap_comp_ref) == 45.13

    expr = entr_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(191.761, abs=1e-3)

    frame.props[1].temperature.value = 400
    assert value(expr) == pytest.approx(201.756, abs=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
def test_entr_mol_sol_comp(frame):
    Constant.entr_mol_sol_comp.build_parameters(frame.params)

    assert isinstance(frame.params.entr_mol_form_sol_comp_ref, Var)
    assert value(frame.params.entr_mol_form_sol_comp_ref) == 50

    expr = Constant.entr_mol_sol_comp.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature)
    assert value(expr) == value(frame.params.entr_mol_form_sol_comp_ref)

    frame.props[1].temperature.value = 400
    assert value(expr) == pytest.approx(78.77, rel=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
示例#21
0
def test_entr_mol_liq_comp(frame):
    entr_mol_liq_comp.build_parameters(frame.params)

    assert isinstance(frame.params.entr_mol_form_liq_comp_ref, Var)
    assert value(frame.params.entr_mol_form_liq_comp_ref) == 69.95

    expr = entr_mol_liq_comp.return_expression(frame.props[1], frame.params,
                                               frame.props[1].temperature)
    assert value(expr) == value(frame.params.entr_mol_form_liq_comp_ref)

    frame.props[1].temperature.value = 533.15
    assert value(expr) == pytest.approx(122.05, rel=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol / pyunits.K)
示例#22
0
 def test_units_roundoff_error(self):
     # Issue 2393: this example resulted in roundoff error where the
     # computed units for var_1 were
     #(0.9999999999999986,
     # <Unit('kilogram ** 1 / kelvin / meter ** 1.66533e-16 / second ** 3')>
     #)
     m = ConcreteModel()
     m.var_1 = Var(initialize=400,
                   units=((units.J**0.4) * (units.kg**0.2) *
                          (units.W**0.6) / units.K / (units.m**2.2) /
                          (units.Pa**0.2) / (units.s**0.8)))
     m.var_1.fix()
     m.var_2 = Var(initialize=400, units=units.kg / units.s**3 / units.K)
     assert_units_equivalent(m.var_1, m.var_2)
示例#23
0
def test_enth_mol_ig_comp(frame):
    enth_mol_ig_comp.build_parameters(frame.params)

    assert isinstance(frame.params.enth_mol_form_vap_comp_ref, Var)
    assert value(frame.params.enth_mol_form_vap_comp_ref) == -57797.0

    expr = enth_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(-240983.962, abs=1e-3)

    frame.props[1].temperature.value = 400
    assert value(expr) == pytest.approx(-237517.968, abs=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol)
示例#24
0
def test_relative_permitivity_constant(frame):
    relative_permittivity_constant.build_parameters(frame.params)

    assert isinstance(frame.params.relative_permittivity_liq_comp, Var)
    assert value(frame.params.relative_permittivity_liq_comp) == 101

    expr = relative_permittivity_constant.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature)
    assert value(expr) == 101

    frame.props[1].temperature.value = 600
    assert value(expr) == 101

    assert_units_equivalent(expr, pyunits.dimensionless)
示例#25
0
    def test_get_parameter_value(self):
        Tc = CoolPropWrapper.get_parameter_value(
            "Acetone", "temperature_crit")
        assert Tc == (508.1, pyunits.K)

        Pc = CoolPropWrapper.get_parameter_value(
            "Acetone", "pressure_crit")
        assert Pc == (4700000.0, pyunits.Pa)

        rhoc = CoolPropWrapper.get_parameter_value(
            "Acetone", "dens_mol_crit")
        assert rhoc[0] == 4699.999999999999
        assert_units_equivalent(rhoc[1], pyunits.mol/pyunits.m**3)

        hc = CoolPropWrapper.get_parameter_value(
            "Acetone", "enth_mol_crit")
        assert hc[0] == 31614.73051047263
        assert_units_equivalent(hc[1], pyunits.J/pyunits.mol)

        sc = CoolPropWrapper.get_parameter_value(
            "Acetone", "entr_mol_crit")
        assert sc[0] == 72.97112978635582
        assert_units_equivalent(sc[1], pyunits.J/pyunits.mol/pyunits.K)

        omega = CoolPropWrapper.get_parameter_value("Acetone", "omega")
        assert omega == (0.3071, pyunits.dimensionless)

        mw = CoolPropWrapper.get_parameter_value("Acetone", "mw")
        assert mw[0] == 0.05807914
        assert_units_equivalent(mw[1], pyunits.kg/pyunits.mol)
示例#26
0
def test_dens_mol_liq_comp(frame):
    dens_mol_liq_comp.build_parameters(frame.params)

    assert isinstance(frame.params.dens_mol_liq_comp_coeff_eqn_type, Param)
    assert value(frame.params.dens_mol_liq_comp_coeff_eqn_type) == 1

    expr = dens_mol_liq_comp.return_expression(frame.props[1], frame.params,
                                               frame.props[1].temperature)
    assert value(expr) == pytest.approx(55.583e3, rel=1e-4)

    frame.props[1].temperature.value = 333.15
    assert value(expr) == pytest.approx(54.703e3, rel=1e-4)

    assert_units_equivalent(expr, pyunits.mol / pyunits.m**3)
def test_dens_mol_sol_comp(frame):
    Constant.dens_mol_sol_comp.build_parameters(frame.params)

    assert isinstance(frame.params.dens_mol_sol_comp_coeff, Var)
    assert value(frame.params.dens_mol_sol_comp_coeff) == pytest.approx(
        100e3, rel=1e-4)

    expr = Constant.dens_mol_sol_comp.return_expression(
        frame.props[1], frame.params, frame.props[1].temperature)
    assert value(expr) == pytest.approx(100e3, rel=1e-4)

    frame.props[1].temperature.value = 400
    assert value(expr) == pytest.approx(100e3, rel=1e-4)

    assert_units_equivalent(expr, pyunits.mol / pyunits.m**3)
示例#28
0
    def test_units(self, btx):
        assert_units_equivalent(btx.fs.unit.overall_heat_transfer_coefficient,
                                pyunits.W/pyunits.m**2/pyunits.K)
        assert_units_equivalent(btx.fs.unit.area, pyunits.m**2)
        assert_units_equivalent(btx.fs.unit.delta_temperature_in, pyunits.K)
        assert_units_equivalent(btx.fs.unit.delta_temperature_out, pyunits.K)

        assert_units_consistent(btx)
 def test_unit_consistency(self, model):
     assert_units_consistent(model.fs.unit)
     assert_units_equivalent(model.fs.unit.rapid_mix_retention_time,
                             pyunits.s)
     assert_units_equivalent(model.fs.unit.floc_retention_time, pyunits.min)
     assert_units_equivalent(model.fs.unit.rapid_mix_basin_vol,
                             pyunits.m**3)
     assert_units_equivalent(model.fs.unit.floc_basin_vol, pyunits.m**3)
示例#30
0
def test_enth_mol_ig_comp_no_form(frame):
    frame.config.include_enthalpy_of_formation = False
    frame.params.config.include_enthalpy_of_formation = False
    enth_mol_ig_comp.build_parameters(frame.params)

    assert not hasattr(frame.params, "enth_mol_form_vap_comp_ref")

    expr = enth_mol_ig_comp.return_expression(frame.props[1], frame.params,
                                              frame.props[1].temperature)
    assert value(expr) == pytest.approx(838.686, abs=1e-3)

    frame.props[1].temperature.value = 400
    assert value(expr) == pytest.approx(4304.680, abs=1e-3)

    assert_units_equivalent(expr, pyunits.J / pyunits.mol)