Nanofiltration (ZO)

Model Type

This unit model is formulated as a single-input, double-output model form. See documentation for single-input, double-output Helper Methods.

Electricity Consumption

The constraint used to calculate energy consumption is described in the Additional Constraints section below. More details can be found in the unit model class.

Costing Method

Costing is calculated using the cost_nanofiltration() method. For full details on costing, see documentation for the zero-order costing package.

Additional Variables


Variable Name


Electricity consumption of unit



Electricity intensity with respect to inlet flowrate of unit



Additional Constraints


Constraint Name

Constraint for electricity consumption based on feed flowrate.


Class Documentation

This module contains a zero-order representation of a nanofiltration unit operation.

class watertap.unit_models.zero_order.nanofiltration_zo.NanofiltrationZO(*args, **kwds)
  • rule (function) – A rule function or None. Default rule calls build().

  • concrete (bool) – If True, make this a toplevel model. Default - False.

  • ctype (class) –

    Pyomo ctype of the block. Default - pyomo.environ.Block

    Config args


    All zero-order models are steady-state only


    Zero order models do not include holdup


    Property parameter object used to define property calculations, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}


    A ConfigBlock with arguments to be passed to a property block(s) and used when constructing these, default - None. Valid values: {see property package for documentation.}


    An instance of a WaterTAP Database to use for parameters.


    Process subtype to use when looking up parameters from database.

  • initialize (dict) – ProcessBlockData config for individual elements. Keys are BlockData indexes and values are dictionaries with config arguments as keys.

  • idx_map (function) – Function to take the index of a BlockData element and return the index in the initialize dict from which to read arguments. This can be provided to override the default behavior of matching the BlockData index exactly to the index in initialize.


(NanofiltrationZO) New instance

class watertap.unit_models.zero_order.nanofiltration_zo.NanofiltrationZOData(component)[source]

Zero-Order model for a Nanofiltration unit operation.


General build method for UnitModelBlockData. This method calls a number of sub-methods which automate the construction of expected attributes of unit models.

Inheriting models should call super().build.





static cost_membrane(blk)[source]

Get membrane cost based on membrane area and unit membrane costs as well as fixed operating cost for membrane replacement.

static cost_nanofiltration(blk, number_of_parallel_units=1)[source]

General method for costing nanofiltration. Costing is carried out using either the general_power_law form or the standard form which computes membrane cost and replacement rate. :param number_of_parallel_units: number_of_parallel_units parallel units (default: 1) :type number_of_parallel_units: int, optional