Example #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
        })
Example #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
        })
        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
Example #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
        })
       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
            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()
Example #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
        })
------------------------------------------------------------------------------------
    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
Example #9
0
    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"
                ]
            })
Example #10
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("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
        })
Example #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}
        )
                              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
        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,
------------------------------------------------------------------------------------
    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
        })
Example #15
0
------------------------------------------------------------------------------------
    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
        })
------------------------------------------------------------------------------------
    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
        })
Example #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
        })
                                  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,
Example #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})
Example #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={