コード例 #1
0
                                 rel=1e-5) == value(
                                     model.fs.unit.outlet.flow_mass_comp[t, j])

        assert pytest.approx(93.21,
                             rel=1e-5) == value(model.fs.unit.electricity[0])
        assert pytest.approx(25.27007,
                             rel=1e-5) == value(model.fs.unit.lift_height[0])

    @pytest.mark.component
    def test_report(self, model):

        model.fs.unit.report()


db = Database()
params = db._get_technology("water_pumping_station")


class TestPumpZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["foo"]})

        m.fs.unit = WaterPumpingStationZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #2
0
    def test_conservation(self, model):
        for j in model.fs.params.component_list:
            assert 1e-6 >= abs(
                value(model.fs.unit.inlet.flow_mass_comp[0, j] +
                      sum(model.fs.unit.generation_rxn_comp[0, r, j]
                          for r in model.fs.unit.reaction_set) -
                      model.fs.unit.treated.flow_mass_comp[0, j] -
                      model.fs.unit.byproduct.flow_mass_comp[0, j]))

    @pytest.mark.component
    def test_report(self, model):
        model.fs.unit.report()


db = Database()
params = db._get_technology("anaerobic_mbr_mec")


class Test_AnMBRMEC_ZO_subtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["cod", "nonbiodegradable_cod"]})

        m.fs.unit = AnaerobicMBRMECZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #3
0
        for j in model.fs.params.component_list:
            assert 1e-6 >= abs(
                value(
                    model.fs.unit.inlet.flow_mass_comp[0, j]
                    - model.fs.unit.treated.flow_mass_comp[0, j]
                    - model.fs.unit.byproduct.flow_mass_comp[0, j]
                )
            )

    @pytest.mark.component
    def test_report(self, model):
        model.fs.unit.report()


db = Database()
params = db._get_technology("aeration_basin")


class Test_AerationBasin_ZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["viruses_enteric"]})

        m.fs.unit = AerationBasinZO(
            default={"property_package": m.fs.params, "database": db}
        )

        return m
コード例 #4
0
    @pytest.mark.skipif(solver is None, reason="Solver not available")
    @pytest.mark.component
    def test_conservation(self, model):
        for j in model.fs.params.component_list:
            assert 1e-6 >= abs(
                value(model.fs.unit.inlet.flow_mass_comp[0, j] -
                      model.fs.unit.treated.flow_mass_comp[0, j] -
                      model.fs.unit.byproduct.flow_mass_comp[0, j]))

    @pytest.mark.component
    def test_report(self, model):
        model.fs.unit.report()


db = Database()
params = db._get_technology("brine_concentrator")


class Testbrine_concentratorZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["tds"]})

        m.fs.unit = BrineConcentratorZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #5
0
       Solute Removal [foo] :   0.0000 :  True : (0, None)

------------------------------------------------------------------------------------
    Stream Table
                             Inlet    Treated
    Volumetric Flowrate      10.005    10.004
    Mass Concentration H2O   999.50    999.59
    Mass Concentration bod 0.099950 0.0099959
    Mass Concentration foo  0.39980   0.39984
====================================================================================
"""
        assert output in stream.getvalue()


db = Database()
params = db._get_technology("fixed_bed")


class TestIXZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["bod"]})

        m.fs.unit = FixedBedZO(
            default={"property_package": m.fs.params, "database": db}
        )

        return m
コード例 #6
0
            assert pytest.approx(value(model.fs.unit.inlet.flow_mass_comp[t,
                                                                          j]),
                                 rel=1e-5) == value(
                                     model.fs.unit.outlet.flow_mass_comp[t, j])

        assert pytest.approx(45284.831999,
                             rel=1e-5) == value(model.fs.unit.tank_volume[0])

    @pytest.mark.component
    def test_report(self, model):

        model.fs.unit.report()


db = Database()
params = db._get_technology("storage_tank")


@pytest.mark.parametrize("subtype",
                         [k for k in params.keys() if k != "default"])
def test_costing(subtype):
    m = ConcreteModel()
    m.db = Database()

    m.fs = FlowsheetBlock(default={"dynamic": False})

    m.fs.params = WaterParameterBlock(
        default={"solute_list": ["sulfur", "toc", "tss"]})

    m.fs.costing = ZeroOrderCosting()
コード例 #7
0
------------------------------------------------------------------------------------
    Stream Table
                                         Inlet   Treated  Byproduct
    Volumetric Flowrate                0.013000 0.011159  0.0018414
    Mass Concentration H2O               769.23   896.17 4.3445e-07
    Mass Concentration viruses_enteric   76.923   9.0424     488.27
    Mass Concentration tss               76.923   5.1700     511.73
    Mass Concentration foo               76.923   89.617 4.3445e-07
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("secondary_treatment_wwtp")


class Test_SecondaryTreatmentWWTPZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["viruses_enteric"]})

        m.fs.unit = SecondaryTreatmentWWTPZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #8
0
------------------------------------------------------------------------------------
    Stream Table
                                Inlet  Outlet
    Volumetric Flowrate        1.0060  1.0060
    Mass Concentration H2O     994.04  994.04
    Mass Concentration sulfur 0.99404 0.99404
    Mass Concentration toc     1.9881  1.9881
    Mass Concentration tss     2.9821  2.9821
====================================================================================
"""

        assert output == stream.getvalue()


db = Database()
params = db._get_technology("chemical_addition")


class TestPumpZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["sulfur", "toc", "tss"]})

        return m

    @pytest.mark.parametrize("subtype", [k for k in params.keys()])
    @pytest.mark.component
コード例 #9
0
ファイル: test_mbr_zo.py プロジェクト: dangunter/proteuslib
    Mass Concentration tss                         0.99206    0.49889     86.547
    Mass Concentration nonvolatile_toc             0.99206    0.39911     103.86
    Mass Concentration toc                         0.99206    0.29081     122.64
    Mass Concentration eeq                         0.99206    0.11973     152.32
    Mass Concentration viruses_enteric             0.99206  0.0099778     171.36
    Mass Concentration total_coliforms_fecal_ecoli 0.99206  0.0011993     172.89
    Mass Concentration cryptosporidium             0.99206 9.9788e-05     173.08
    Mass Concentration foo                         0.99206    0.99778 1.7309e-06
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("mbr")


class TestMBRZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={
                "solute_list": [
                    "tss", "nonvolatile_toc", "toc", "eeq", "viruses_enteric",
                    "total_coliforms_fecal_ecoli", "cryptosporidium"
                ]
            })
コード例 #10
0
ファイル: test_pump_zo.py プロジェクト: ksbeattie/proteuslib
------------------------------------------------------------------------------------
    Stream Table
                                Inlet  Outlet
    Volumetric Flowrate        1.0060  1.0060
    Mass Concentration H2O     994.04  994.04
    Mass Concentration sulfur 0.99404 0.99404
    Mass Concentration toc     1.9881  1.9881
    Mass Concentration tss     2.9821  2.9821
====================================================================================
"""

        assert output == stream.getvalue()


db = Database()
params = db._get_technology("pump")


class TestPumpZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["sulfur", "toc", "tss"]})

        m.fs.unit = PumpZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #11
0
    def test_solution(self, model):
        for t, j in model.fs.unit.inlet.flow_mass_comp:
            assert pytest.approx(
                value(model.fs.unit.inlet.flow_mass_comp[t, j]), rel=1e-5
            ) == value(model.fs.unit.outlet.flow_mass_comp[t, j])
        assert pytest.approx(216000.036, abs=1e-5) == value(model.fs.unit.total_mass[0])
        assert pytest.approx(0.0, abs=1e-5) == value(model.fs.unit.electricity[0])

    @pytest.mark.component
    def test_report(self, model):

        model.fs.unit.report()


db = Database()
params = db._get_technology("landfill")


class TestLandfillZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["sulfur", "toc", "tss"]}
        )

        m.fs.unit = LandfillZO(
            default={"property_package": m.fs.params, "database": db}
        )
コード例 #12
0
                              Water Recovery :    0.98610 :  True : (1e-08, 1.0000001)

------------------------------------------------------------------------------------
    Stream Table
                                    Inlet    Treated  Byproduct
    Volumetric Flowrate           0.013000 0.0098640 0.0031360 
    Mass Concentration H2O          769.23    999.70    44.324 
    Mass Concentration phosphates   230.77   0.30414    955.68 
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("sedimentation")


class TestSedimentationZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["tds", "tss"]})

        m.fs.unit = SedimentationZO(
            default={"property_package": m.fs.params, "database": db}
        )

        return m
コード例 #13
0
        for j in model.fs.params.component_list:
            assert 1e-6 >= abs(
                value(
                    model.fs.unit.inlet.flow_mass_comp[0, j]
                    - model.fs.unit.outlet.flow_mass_comp[0, j]
                )
            )

    @pytest.mark.component
    def test_report(self, model):

        model.fs.unit.report()


db = Database()
params = db._get_technology("surface_discharge")


@pytest.mark.parametrize("subtype", [k for k in params.keys()])
def test_costing(subtype):
    m = ConcreteModel()
    m.db = Database()

    m.fs = FlowsheetBlock(default={"dynamic": False})
    m.fs.params = WaterParameterBlock(
        default={"solute_list": ["toc", "nitrate", "sulfate", "bar"]}
    )
    m.fs.costing = ZeroOrderCosting()
    m.fs.unit = SurfaceDischargeZO(
        default={
            "property_package": m.fs.params,
コード例 #14
0
------------------------------------------------------------------------------------
    Stream Table
                                         Inlet   Treated  Byproduct
    Volumetric Flowrate                0.013000 0.011509  0.0014910
    Mass Concentration H2O               769.23   868.80    0.67069
    Mass Concentration viruses_enteric   76.923  0.86889     663.98
    Mass Concentration tss               76.923   43.444     335.35
    Mass Concentration foo               76.923   86.889 5.3655e-07
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("conventional_activated_sludge")


class Test_CASZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["viruses_enteric"]})

        m.fs.unit = CASZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #15
0
ファイル: test_gac_zo.py プロジェクト: ksbeattie/proteuslib
------------------------------------------------------------------------------------
    Stream Table
                                         Inlet    Treated  Byproduct
    Volumetric Flowrate                  10.003    9.6018    0.40117
    Mass Concentration H2O               999.70    999.81     997.08
    Mass Concentration tss             0.099970 0.0031244     2.4179
    Mass Concentration nonvolatile_toc 0.099970  0.083317    0.49854
    Mass Concentration foo             0.099970   0.10415 2.4927e-08
====================================================================================
"""
        assert output in stream.getvalue()


db = Database()
params = db._get_technology("gac")


class TestGACZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["tss", "nonvolatile_toc"]})

        m.fs.unit = GACZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #16
0
------------------------------------------------------------------------------------
    Stream Table
                                 Inlet    Treated  Byproduct
    Volumetric Flowrate          10.004    9.5011    0.50285
    Mass Concentration H2O       999.60    999.88     994.33
    Mass Concentration nitrate 0.099960 0.0052625     1.8892
    Mass Concentration tss     0.099960 0.0052625     1.8892
    Mass Concentration toc     0.099960 0.0052625     1.8892
    Mass Concentration foo     0.099960   0.10525 1.9887e-08
====================================================================================
"""
        assert output in stream.getvalue()


db = Database()
params = db._get_technology("backwash_solids_handling")


class TestIXZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(default={"solute_list": ["nitrate"]})

        m.fs.unit = BackwashSolidsHandlingZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #17
0
------------------------------------------------------------------------------------
    Stream Table
                                              Inlet   Treated  Byproduct
    Volumetric Flowrate                     0.012000 0.011500 0.00050000
    Mass Concentration H2O                    833.33   869.57 1.6000e-06
    Mass Concentration nonbiodegradable_cod   83.333   43.478     1000.0
    Mass Concentration foo                    83.333   86.957 1.6000e-06
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("vfa_recovery")


class Test_VFARecovery_ZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["nonbiodegradable_cod"]})

        m.fs.unit = VFARecoveryZO(default={
            "property_package": m.fs.params,
            "database": db
        })
コード例 #18
0
                                  Inlet    Outlet 
    Volumetric Flowrate          0.16330   0.16330
    Mass Concentration H2O        734.84    734.84
    Mass Concentration toc        6.1237    6.1237
    Mass Concentration nitrate    12.247    12.247
    Mass Concentration sulfate    1.8371    1.8371
    Mass Concentration bar        244.95    244.95
    Mass Concentration crux    0.0030618 0.0030618
====================================================================================
"""

        assert output in stream.getvalue()


db = Database()
params = db._get_technology("well_field")


@pytest.mark.parametrize("subtype", [k for k in params.keys()])
def test_costing(subtype):
    m = ConcreteModel()
    m.db = Database()

    m.fs = FlowsheetBlock(default={"dynamic": False})
    m.fs.params = WaterParameterBlock(
        default={"solute_list": ["toc", "nitrate", "sulfate", "bar", "crux"]})
    m.fs.costing = ZeroOrderCosting()
    m.fs.unit = WellFieldZO(
        default={
            "property_package": m.fs.params,
            "database": m.db,
コード例 #19
0
    Solute Removal [tds] :  0.90000 :  True : (0, None)

------------------------------------------------------------------------------------
    Stream Table
                             Inlet    Treated
    Volumetric Flowrate      10.005    10.004
    Mass Concentration H2O   999.50    999.59
    Mass Concentration tds 0.099950 0.0099959
    Mass Concentration foo  0.39980   0.39984
====================================================================================
"""
        assert output in stream.getvalue()


db = Database()
params = db._get_technology("ion_exchange")


class TestIXZOsubtype:
    @pytest.fixture(scope="class")
    def model(self):
        m = ConcreteModel()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={"solute_list": ["tds"]})

        m.fs.unit = IonExchangeZO(default={
            "property_package": m.fs.params,
            "database": db})
コード例 #20
0
        m.fs.costing.electrodialysis_reversal.capital_b_parameter, Var)
    assert isinstance(m.fs.costing.electrodialysis_reversal.reference_state,
                      Var)

    assert isinstance(m.fs.unit1.costing.capital_cost, Var)
    assert isinstance(m.fs.unit1.costing.capital_cost_constraint, Constraint)

    assert_units_consistent(m.fs)
    assert degrees_of_freedom(m.fs.unit1) == 0

    assert m.fs.unit1.electricity[0] in m.fs.costing._registered_flows[
        "electricity"]


db = Database()
params = db._get_technology("electrodialysis_reversal")


@pytest.mark.unit
def test_no_tds_in_solute_list_error():
    m = ConcreteModel()
    m.fs = FlowsheetBlock(default={"dynamic": False})
    m.fs.params = WaterParameterBlock(default={"solute_list": ["foo"]})

    with pytest.raises(
            KeyError,
            match="TDS must be included in the solute list for determining"
            " electricity intensity and power consumption of the electrodialysis "
            "reversal unit.",
    ):
        m.fs.unit = ElectrodialysisReversalZO(default={