Exemplo n.º 1
0
    def model(self):
        m = ConcreteModel()
        m.db = Database()

        m.fs = FlowsheetBlock(default={"dynamic": False})
        m.fs.params = WaterParameterBlock(
            default={
                "solute_list": [
                    "cryptosporidium",
                    "toc",
                    "giardia_lamblia",
                    "eeq",
                    "total_coliforms_fecal_ecoli",
                    "viruses_enteric",
                    "tss",
                ]
            })

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

        m.fs.unit.inlet.flow_mass_comp[0, "H2O"].fix(100)
        m.fs.unit.inlet.flow_mass_comp[0, "cryptosporidium"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "toc"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "giardia_lamblia"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "eeq"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "total_coliforms_fecal_ecoli"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "viruses_enteric"].fix(1)
        m.fs.unit.inlet.flow_mass_comp[0, "tss"].fix(1)

        return m
Exemplo n.º 2
0
    def test_toc_in_solute_list(self):
        model = ConcreteModel()
        model.db = Database()

        model.fs = FlowsheetBlock(default={"dynamic": False})
        model.fs.params = WaterParameterBlock(default={
            "solute_list": ["cryptosporidium", "giardia_lamblia", "eeq"]
        })
        with pytest.raises(ConfigurationError,
                           match="TOC must be in solute list for Ozonation "
                           "or Ozone/AOP"):
            model.fs.unit = OzoneZO(default={
                "property_package": model.fs.params,
                "database": model.db
            })
Exemplo n.º 3
0
def test_costing():
    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()

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

    m.fs.unit1.inlet.flow_mass_comp[0, "H2O"].fix(10000)
    m.fs.unit1.inlet.flow_mass_comp[0, "sulfur"].fix(1)
    m.fs.unit1.inlet.flow_mass_comp[0, "toc"].fix(2)
    m.fs.unit1.inlet.flow_mass_comp[0, "tss"].fix(3)
    m.fs.unit1.load_parameters_from_database(use_default_removal=True)
    assert degrees_of_freedom(m.fs.unit1) == 0

    m.fs.unit1.costing = UnitModelCostingBlock(
        default={"flowsheet_costing_block": m.fs.costing})

    assert isinstance(m.fs.costing.ozonation, Block)
    assert isinstance(m.fs.costing.ozonation.ozone_capital_a_parameter, Var)
    assert isinstance(m.fs.costing.ozonation.ozone_capital_b_parameter, Var)
    assert isinstance(m.fs.costing.ozonation.ozone_capital_c_parameter, Var)
    assert isinstance(m.fs.costing.ozonation.ozone_capital_d_parameter, 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"]
Exemplo n.º 4
0
def build():
    # flowsheet set up
    m = ConcreteModel()
    m.db = Database()

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

    # unit models
    m.fs.feed = FeedZO(default={"property_package": m.fs.prop})
    m.fs.intake_pump = WaterPumpingStationZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "raw",
        })
    m.fs.coag_and_floc = CoagulationFlocculationZO(default={
        "property_package": m.fs.prop,
        "database": m.db
    })
    m.fs.sedimentation = SedimentationZO(default={
        "property_package": m.fs.prop,
        "database": m.db
    })
    m.fs.ozonation = OzoneZO(default={
        "property_package": m.fs.prop,
        "database": m.db
    })
    m.fs.gravity_basin = FixedBedZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "gravity_basin",
        })
    m.fs.gac = GACZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "pressure_vessel",
        })
    m.fs.backwash_pump = WaterPumpingStationZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "treated",
        })
    m.fs.uv = UVZO(default={"property_package": m.fs.prop, "database": m.db})
    m.fs.anion_exchange = IonExchangeZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "anion_exchange",
        })
    m.fs.chlorination = ChlorinationZO(default={
        "property_package": m.fs.prop,
        "database": m.db
    })
    m.fs.storage = StorageTankZO(default={
        "property_package": m.fs.prop,
        "database": m.db
    })
    m.fs.recharge_pump = WaterPumpingStationZO(
        default={
            "property_package": m.fs.prop,
            "database": m.db,
            "process_subtype": "treated",
        })
    m.fs.product = Product(default={"property_package": m.fs.prop})

    # connections
    m.fs.s01 = Arc(source=m.fs.feed.outlet, destination=m.fs.intake_pump.inlet)
    m.fs.s02 = Arc(source=m.fs.intake_pump.outlet,
                   destination=m.fs.coag_and_floc.inlet)
    m.fs.s03 = Arc(source=m.fs.coag_and_floc.outlet,
                   destination=m.fs.sedimentation.inlet)
    m.fs.s04 = Arc(source=m.fs.sedimentation.treated,
                   destination=m.fs.ozonation.inlet)
    m.fs.s05 = Arc(source=m.fs.ozonation.treated,
                   destination=m.fs.gravity_basin.inlet)
    m.fs.s06 = Arc(source=m.fs.gravity_basin.treated,
                   destination=m.fs.gac.inlet)
    m.fs.s07 = Arc(source=m.fs.gac.treated, destination=m.fs.uv.inlet)
    m.fs.s08 = Arc(source=m.fs.gac.byproduct,
                   destination=m.fs.backwash_pump.inlet)
    m.fs.s09 = Arc(source=m.fs.uv.treated,
                   destination=m.fs.anion_exchange.inlet)
    m.fs.s10 = Arc(source=m.fs.anion_exchange.treated,
                   destination=m.fs.chlorination.inlet)
    m.fs.s11 = Arc(source=m.fs.chlorination.treated,
                   destination=m.fs.storage.inlet)
    m.fs.s12 = Arc(source=m.fs.storage.outlet,
                   destination=m.fs.recharge_pump.inlet)
    m.fs.s13 = Arc(source=m.fs.recharge_pump.outlet,
                   destination=m.fs.product.inlet)
    TransformationFactory("network.expand_arcs").apply_to(m)

    # scaling
    iscale.calculate_scaling_factors(m)

    return m