Exemple #1
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {"relative_permittivity_liq_comp": 101}

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=298.15, units=pyunits.K)
    m.params.pressure_ref = Var(initialize=1e5, units=pyunits.Pa)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=500, units=pyunits.K)
    m.props[1].pressure = Var(initialize=101325, units=pyunits.Pa)

    return m
def test_get_component():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.add_default_units({
        'time': pyunits.s,
        'length': pyunits.m,
        'mass': pyunits.kg,
        'amount': pyunits.mol,
        'temperature': pyunits.K
    })

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    with pytest.raises(AttributeError):
        m.p.get_component("foo")

    m.p.comp = Component()

    assert m.p.get_component("comp") is m.p.comp

    m.p.a = object()

    with pytest.raises(
            PropertyPackageError,
            match="p get_component found an attribute a, but it does not "
            "appear to be an instance of a Component object."):
        m.p.get_component("a")
Exemple #3
0
def test_get_component():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    with pytest.raises(AttributeError):
        m.p.get_component("foo")

    m.p.comp = Component()

    assert m.p.get_component("comp") is m.p.comp

    m.p.a = object()

    with pytest.raises(
            PropertyPackageError,
            match="p get_component found an attribute a, but it does not "
            "appear to be an instance of a Component object."):
        m.p.get_component("a")
def test_validate_parameter_block_invalid_phase_object():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.add_default_units({
        'time': pyunits.s,
        'length': pyunits.m,
        'mass': pyunits.kg,
        'amount': pyunits.mol,
        'temperature': pyunits.K
    })

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.c1 = Component()
    m.p.c2 = Component()

    m.p.phase_list = Set(initialize=["foo"])
    m.p.foo = object()

    with pytest.raises(TypeError,
                       match="Property package p has an object foo whose "
                       "name appears in phase_list but is not an "
                       "instance of Phase"):
        m.p._validate_parameter_block()
Exemple #5
0
    def test_create_parameters_convert(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()

        def get_metadata(self):
            return m.meta_object

        m.get_metadata = types.MethodType(get_metadata, m)
        m.get_metadata().default_units["amount"] = pyunits.mol
        m.get_metadata().default_units["mass"] = pyunits.kg
        m.get_metadata().default_units["time"] = pyunits.s
        m.get_metadata().default_units["length"] = pyunits.m
        m.get_metadata().default_units["temperature"] = pyunits.K

        m.comp = Component(
            default={
                "parameter_data": {
                    "mw": (10, pyunits.g / pyunits.mol),
                    "pressure_crit": (1, pyunits.bar),
                    "temperature_crit": (900, pyunits.degR)
                }
            })

        assert isinstance(m.comp.mw, Param)
        assert m.comp.mw.value == 1e-2

        assert isinstance(m.comp.pressure_crit, Var)
        assert m.comp.pressure_crit.value == 1e5

        assert isinstance(m.comp.temperature_crit, Var)
        assert m.comp.temperature_crit.value == 500
Exemple #6
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "cp_mol_ig_comp_coeff": {
            'A': 3.224e1,
            'B': 1.924e-3,
            'C': 1.055e-5,
            'D': -3.596e-9
        },
        "enth_mol_form_vap_comp_ref": -241.83e3,
        "entr_mol_form_vap_comp_ref": 188.84,
        "pressure_sat_comp_coeff": {
            'A': -7.76451,
            'B': 1.45838,
            'C': -2.77580,
            'D': -1.23303
        }
    }
    m.params.config.include_enthalpy_of_formation = True

    # Also need to dummy configblock on the model for the test
    m.config = ConfigBlock(implicit=True)
    m.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=273.15, units=pyunits.K)
    m.params.pressure_ref = Var(initialize=1e5, units=pyunits.Pa)

    m.params.temperature_crit = Var(initialize=647.3, units=pyunits.K)
    m.params.pressure_crit = Var(initialize=221.2e5, units=pyunits.Pa)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=298.15, units=pyunits.K)
    m.props[1].pressure = Var(initialize=101325, units=pyunits.Pa)

    return m
Exemple #7
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "cp_mol_ig_comp_coeff": {
            'a0': 4.395,
            'a1': -4.186e-3,
            'a2': 1.405e-5,
            'a3': -1.564e-8,
            'a4': 0.632e-11
        },
        "enth_mol_form_vap_comp_ref": -241.81e3,
        "entr_mol_form_vap_comp_ref": 188.84,
        "pressure_sat_comp_coeff": {
            'A': 5.11564,
            'B': 1687.537,
            'C': 230.14
        }
    }
    m.params.config.include_enthalpy_of_formation = True

    # Also need to dummy configblock on the model for the test
    m.config = ConfigBlock(implicit=True)
    m.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=273.15, units=pyunits.K)
    m.params.pressure_ref = Var(initialize=1e5, units=pyunits.Pa)

    m.params.temperature_crit = Var(initialize=647.15, units=pyunits.K)
    m.params.pressure_crit = Var(initialize=220.64e5, units=pyunits.Pa)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=298.15, units=pyunits.K)
    m.props[1].pressure = Var(initialize=101325, units=pyunits.Pa)

    return m
Exemple #8
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "cp_mol_ig_comp_coeff": {
            'A': 7.701,
            'B': 4.595e-4,
            'C': 2.521e-6,
            'D': -0.859e-9
        },
        "enth_mol_form_vap_comp_ref": (-57.797e3, pyunits.cal / pyunits.mol),
        "entr_mol_form_vap_comp_ref":
        (45.13, pyunits.cal / pyunits.mol / pyunits.K),
        "pressure_sat_comp_coeff": {
            'A': 18.3036,
            'B': 3816.44,
            'C': -46.13
        }
    }
    m.params.config.include_enthalpy_of_formation = True

    # Also need to dummy configblock on the model for the test
    m.config = ConfigBlock(implicit=True)
    m.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=273.15, units=pyunits.K)
    m.params.pressure_ref = Var(initialize=1e5, units=pyunits.Pa)

    m.params.temperature_crit = Var(initialize=647.3, units=pyunits.K)
    m.params.pressure_crit = Var(initialize=217.6e5, units=pyunits.Pa)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=298.15, units=pyunits.K)
    m.props[1].pressure = Var(initialize=101325, units=pyunits.Pa)

    return m
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "dens_mol_liq_comp_coeff":
        (55.2046332734557, pyunits.kmol / pyunits.m**3),
        "cp_mol_liq_comp_coeff":
        (75704.2953333398, pyunits.J / pyunits.kmol / pyunits.K),
        "enth_mol_form_liq_comp_ref": (-285.83, pyunits.kJ / pyunits.mol),
        "entr_mol_form_liq_comp_ref":
        (69.95, pyunits.J / pyunits.K / pyunits.mol),
        "cp_mol_ig_comp_coeff":
        (29114.850, pyunits.J / pyunits.kmol / pyunits.K),
        "enth_mol_form_ig_comp_ref": (0.0, pyunits.kJ / pyunits.mol),
        "entr_mol_form_ig_comp_ref": (0.0,
                                      pyunits.J / pyunits.K / pyunits.mol),
        "dens_mol_sol_comp_coeff": (100, pyunits.kmol / pyunits.m**3),
        "cp_mol_sol_comp_coeff": (100000,
                                  pyunits.J / pyunits.kmol / pyunits.K),
        "enth_mol_form_sol_comp_ref": (-300, pyunits.kJ / pyunits.mol),
        "entr_mol_form_sol_comp_ref": (50, pyunits.J / pyunits.K / pyunits.mol)
    }
    m.params.config.include_enthalpy_of_formation = True

    # Also need to dummy configblock on the model for the test
    m.config = ConfigBlock(implicit=True)
    m.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=300, units=pyunits.K)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=300, units=pyunits.K)

    return m
Exemple #10
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "dens_mol_liq_comp_coeff": {
            'eqn_type': 1,
            '1': 5.459,
            '2': 0.30542,
            '3': 647.13,
            '4': 0.081
        },
        "cp_mol_liq_comp_coeff": {
            '1': 2.7637e+05,
            '2': -2.0901e+03,
            '3': 8.1250e+00,
            '4': -1.4116e-2,
            '5': 9.3701e-06
        },
        "enth_mol_form_liq_comp_ref": -285.83e3,
        "entr_mol_form_liq_comp_ref": 69.95
    }
    m.params.config.include_enthalpy_of_formation = True

    # Also need to dummy configblock on the model for the test
    m.config = ConfigBlock(implicit=True)
    m.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=273.16, units=pyunits.K)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=273.16, units=pyunits.K)

    return m
Exemple #11
0
def model():
    m = ConcreteModel()

    # # Add a test thermo package for validation
    m.pparams = PhysicalParameterTestBlock()
    m.thermo = m.pparams.build_state_block([1])

    # Create a dummy reaction parameter block
    m.rparams = Block()

    m.rparams.config = ConfigBlock(implicit=True)

    m.rparams.config.property_package = m.pparams
    m.rparams.config.reaction_basis = MaterialFlowBasis.molar
    m.rparams.config.rate_reactions = ConfigBlock(implicit=True)
    m.rparams.config.rate_reactions.r1 = ConfigBlock(implicit=True)
    m.rparams.config.rate_reactions.r1 = {
        "stoichiometry": {
            ("p1", "c1"): -1,
            ("p1", "c2"): 2
        },
        "parameter_data": {}
    }
    m.rparams.config.equilibrium_reactions = ConfigBlock(implicit=True)
    m.rparams.config.equilibrium_reactions.e1 = ConfigBlock(implicit=True)
    m.rparams.config.equilibrium_reactions.e1 = {
        "stoichiometry": {
            ("p1", "c1"): -1,
            ("p1", "c2"): 2
        },
        "parameter_data": {}
    }

    m.rparams.reaction_r1 = Block()
    m.rparams.reaction_e1 = Block()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.rparams.get_metadata = types.MethodType(get_metadata, m.rparams)

    # Create a dummy state block
    m.rxn = Block([1])
    add_object_reference(m.rxn[1], "params", m.rparams)
    add_object_reference(m.rxn[1], "state_ref", m.thermo[1])

    return m
Exemple #12
0
    def m(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()

        def get_metadata(self):
            return m.meta_object

        m.get_metadata = types.MethodType(get_metadata, m)

        m.comp = Apparent()

        return m
Exemple #13
0
    def m(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()

        def get_metadata(self):
            return m.meta_object

        m.get_metadata = types.MethodType(get_metadata, m)

        m.comp = Cation(default={"charge": +1})

        return m
Exemple #14
0
def frame():
    m = ConcreteModel()

    # Create a dummy parameter block
    m.params = Block()

    m.params.config = ConfigBlock(implicit=True)
    m.params.config.parameter_data = {
        "cp_mol_ig_comp_coeff": {
            'A': 30.09200,  # parameters for water
            'B': 6.832514,
            'C': 6.793435,
            'D': -2.534480,
            'E': 0.082139,
            'F': -250.8810,
            'G': 223.3967,
            'H': -241.8264
        },
        "pressure_sat_comp_coeff": {
            'A': 3.55959,  # units bar, K
            'B': 643.748,
            'C': -198.043
        }
    }
    m.params.config.include_enthalpy_of_formation = True

    m.meta_object = PropertyClassMetadata()
    m.meta_object.default_units["temperature"] = pyunits.K
    m.meta_object.default_units["mass"] = pyunits.kg
    m.meta_object.default_units["length"] = pyunits.m
    m.meta_object.default_units["time"] = pyunits.s
    m.meta_object.default_units["amount"] = pyunits.mol

    def get_metadata(self):
        return m.meta_object

    m.get_metadata = types.MethodType(get_metadata, m)
    m.params.get_metadata = types.MethodType(get_metadata, m.params)

    # Add necessary parameters to parameter block
    m.params.temperature_ref = Var(initialize=298.15, units=pyunits.K)
    m.params.pressure_ref = Var(initialize=1e5, units=pyunits.Pa)

    # Create a dummy state block
    m.props = Block([1])
    add_object_reference(m.props[1], "params", m.params)

    m.props[1].temperature = Var(initialize=500, units=pyunits.K)
    m.props[1].pressure = Var(initialize=101325, units=pyunits.Pa)

    return m
Exemple #15
0
    def test_not_electrolye(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        with pytest.raises(
                PropertyPackageError,
                match="comp Ion Component types should only be used with "
                "Aqueous Phases"):
            m.comp = Cation(default={"_electrolyte": False})
Exemple #16
0
    def test_electrolye(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        with pytest.raises(
                NotImplementedError,
                match="comp The IonData component class is intended as a base "
                "class for the AnionData and CationData classes, and should "
                "not be used directly"):
            m.comp = Ion(default={"_electrolyte": True})
Exemple #17
0
def test_make_component_objects():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.component_list = Set(initialize=["comp1", "comp2"])

    m.p._make_component_objects()

    assert isinstance(m.p.comp1, Component)
    assert isinstance(m.p.comp2, Component)
Exemple #18
0
def test_validate_parameter_block_no_phase_list():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.component_list = Set(initialize=["c1", "c2"])

    with pytest.raises(
            PropertyPackageError,
            match="Property package p has not defined a phase list."):
        m.p._validate_parameter_block()
Exemple #19
0
    def m(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        m.comp = Solvent()

        return m
Exemple #20
0
def test_validate_parameter_block_invalid_phase_object():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.component_list = Set(initialize=["c1", "c2"])

    m.p.phase_list = Set(initialize=["foo"])
    m.p.foo = object()

    with pytest.raises(TypeError):
        m.p._validate_parameter_block()
Exemple #21
0
    def test_not_electrolye(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        with pytest.raises(
                PropertyPackageError,
                match="comp Ion Component types should only be used with "
                "Aqueous Phases"):
            m.comp = Anion(default={"_electrolyte": False})
Exemple #22
0
    def m(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        m.cation_set = Set()

        m.comp = Cation(default={"charge": +1, "_electrolyte": True})

        return m
Exemple #23
0
    def m(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        m._apparent_set = Set()

        m.comp = Apparent(default={"dissociation_species": {"comp": 1},
                                   "_electrolyte": True})

        return m
Exemple #24
0
    def test_no_dissociation_species(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        with pytest.raises(
                ConfigurationError,
                match="dissoication_species argument was not set. "
                "Apparent components require the dissociation species to be "
                "defined."):
            m.comp = Apparent(default={"_electrolyte": False})
def test_get_phase_component_set():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.add_default_units({
        'time': pyunits.s,
        'length': pyunits.m,
        'mass': pyunits.kg,
        'amount': pyunits.mol,
        'temperature': pyunits.K
    })

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.p1 = Phase()
    m.p.p2 = Phase()
    m.p.p3 = Phase()
    m.p.a = Component()
    m.p.b = Component()
    m.p.c = Component()

    pc_set = m.p.get_phase_component_set()

    assert isinstance(m.p._phase_component_set, Set)
    assert len(m.p._phase_component_set) == 9
    for v in m.p._phase_component_set:
        assert v[0] in m.p.phase_list
        assert v[1] in m.p.component_list

    assert pc_set is m.p._phase_component_set

    # Check that method returns existing component
    # Delete phase list so that build will fail to make sure it isn't rebuilding
    m.p.del_component(m.p.phase_list)

    assert m.p.get_phase_component_set() is m.p._phase_component_set
def test_validate_parameter_block_no_phase_list():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.add_default_units({
        'time': pyunits.s,
        'length': pyunits.m,
        'mass': pyunits.kg,
        'amount': pyunits.mol,
        'temperature': pyunits.K
    })

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.c1 = Component()
    m.p.c2 = Component()

    with pytest.raises(PropertyPackageError,
                       match="Property package p has not defined any Phases."):
        m.p._validate_parameter_block()
def test_get_phase_component_set_subset():
    m = ConcreteModel()
    m.p = ParameterBlock()

    m.meta_object = PropertyClassMetadata()
    m.meta_object.add_default_units({
        'time': pyunits.s,
        'length': pyunits.m,
        'mass': pyunits.kg,
        'amount': pyunits.mol,
        'temperature': pyunits.K
    })

    def get_metadata(self):
        return m.meta_object

    m.p.get_metadata = types.MethodType(get_metadata, m.p)

    m.p.p1 = Phase()
    m.p.p2 = Phase(default={"component_list": ["a", "b"]})
    m.p.p3 = Phase(default={"component_list": ["c"]})
    m.p.a = Component()
    m.p.b = Component()
    m.p.c = Component()

    phase_comp = {"p1": ["a", "b", "c"], "p2": ["a", "b"], "p3": ["c"]}

    pc_set = m.p.get_phase_component_set()

    assert isinstance(m.p._phase_component_set, Set)
    assert len(m.p._phase_component_set) == 6
    for v in m.p._phase_component_set:
        assert v[0] in phase_comp.keys()
        assert v[1] in phase_comp[v[0]]

    assert pc_set is m.p._phase_component_set
Exemple #28
0
    def test_not_electrolye(self):
        m = ConcreteModel()

        m.meta_object = PropertyClassMetadata()
        m.meta_object.add_default_units({
            'time': pyunits.s,
            'length': pyunits.m,
            'mass': pyunits.kg,
            'amount': pyunits.mol,
            'temperature': pyunits.K})

        def get_metadata(self):
            return m.meta_object
        m.get_metadata = types.MethodType(get_metadata, m)

        m.comp = Apparent(default={"dissociation_species": {"comp": 1},
                                   "_electrolyte": False})

        for j in m.component_list:
            assert j in ["comp"]
        for j in m.solute_set:
            assert j in ["comp"]

        assert m.comp.config.dissociation_species == {"comp": 1}