How to run a zero-order model

The example script shown below is for the dual media filtration zero-order model. This example uses the default parameters defined in the watertap YAML database.

from pyomo.environ import ConcreteModel

from idaes.core import FlowsheetBlock
from watertap.core.solvers import get_solver

from watertap.core.wt_database import Database
from watertap.core.zero_order_properties import WaterParameterBlock
from watertap.unit_models.zero_order import DualMediaFiltrationZO


def main():

    # Create a Pyomo model and initialize the YAML database
    model = ConcreteModel()
    model.db = Database()

    # Create an IDAES flowsheet and define the solutes
    model.fs = FlowsheetBlock(dynamic=False)
    model.fs.params = WaterParameterBlock(solute_list=["nonvolatile_toc", "toc", "tss"])

    # Setup the zero-order model and define inlet flows
    model.fs.unit = DualMediaFiltrationZO(property_package=model.fs.params, database=model.db)
    model.fs.unit.inlet.flow_mass_comp[0, "H2O"].fix(10)
    model.fs.unit.inlet.flow_mass_comp[0, "nonvolatile_toc"].fix(1)
    model.fs.unit.inlet.flow_mass_comp[0, "toc"].fix(1)
    model.fs.unit.inlet.flow_mass_comp[0, "tss"].fix(1)

    # Load default parameters from the YAML database
    model.fs.unit.load_parameters_from_database()

    # Access the solver and solve the model
    solver = get_solver()
    solver.solve(model)

    # Display a report of the results
    model.fs.unit.report()


if __name__ == "__main__":
    main()

The output from running the example is shown below.

====================================================================================
Unit : fs.unit                                                             Time: 0.0
------------------------------------------------------------------------------------
    Unit Performance

    Variables:

    Key                              : Value      : Units         : Fixed : Bounds
                  Electricity Demand :     2373.6 :          watt : False : (0, None)
               Electricity Intensity : 1.8259e+05 :        pascal :  True : (None, None)
    Solute Removal [nonvolatile_toc] :    0.20000 : dimensionless :  True : (0, None)
                Solute Removal [toc] :    0.20000 : dimensionless :  True : (0, None)
                Solute Removal [tss] :    0.97000 : dimensionless :  True : (0, None)
                      Water Recovery :    0.99000 : dimensionless :  True : (0.0, 1.0000001)

------------------------------------------------------------------------------------
    Stream Table
                                               Units            Inlet   Treated  Byproduct
    Volumetric Flowrate                   meter ** 3 / second 0.013000 0.011530 0.0014700
    Mass Concentration H2O              kilogram / meter ** 3   769.23   858.63    68.027
    Mass Concentration nonvolatile_toc  kilogram / meter ** 3   76.923   69.384    136.05
    Mass Concentration toc              kilogram / meter ** 3   76.923   69.384    136.05
    Mass Concentration tss              kilogram / meter ** 3   76.923   2.6019    659.86
====================================================================================

The zero-order models rely on default model parameter values specified in YAML files. Users should supply their own values, if possible, instead of relying on the default parameter values. To use a local YAML database file, define the folder path to the file using the dbpath parameter for the Database() class. The line below defines the current working directory as the path for the YAML file.

model.db = Database(dbpath=".")

When using a local YAML file, the file name must be the same as the model name without the ZO letters. It must also use snake case style; for example, a YAML file for the DualMediaFiltrationZO() model must be named dual_media_filtration.yaml. See below for the contents of this YAML file.

# Contents of YAML file named dual_media_filtration.yaml
# This defines parameter values for the DualMediaFiltrationZO() zero-order model

default:
  energy_electric_flow_vol_inlet:
    value: 0.050718512
    units: kWh/m^3
  capital_cost:
    basis: flow_vol
    cost_factor: None
    reference_state:
      value: 4732.0
      units: m^3/hr
    capital_a_parameter:
      value: 12.17829669e6
      units: USD_2014
    capital_b_parameter:
      value: 0.5862
      units: dimensionless
  recovery_frac_mass_H2O:
    value: 0.99
    units: dimensionless
    reference:
  default_removal_frac_mass_comp:
    value: 0
    units: dimensionless
  removal_frac_mass_comp:
    nonvolatile_toc:
      value: 0.2
      units: dimensionless
      constituent_longform: Nonvolatile TOC
    toc:
      value: 0.2
      units: dimensionless
      constituent_longform: Total Organic Carbon (TOC)
    tss:
      value: 0.97
      units: dimensionless
      constituent_longform: Total Suspended Solids (TSS)