Source code for watertap.unit_models.cstr

#################################################################################
# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California,
# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory,
# National Renewable Energy Laboratory, and National Energy Technology
# Laboratory (subject to receipt of any required approvals from the U.S. Dept.
# of Energy). All rights reserved.
#
# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license
# information, respectively. These files are also available online at the URL
# "https://github.com/watertap-org/watertap/"
#################################################################################
"""
CSTR unit model for BSM2 and plant-wide wastewater treatment modeling.
This unit inherits from the IDAES CSTR unit.
"""

# Import IDAES cores
from idaes.core import (
    declare_process_block_class,
)
from idaes.models.unit_models.cstr import CSTRData as CSTRIDAESData

import idaes.logger as idaeslog

from pyomo.environ import (
    Constraint,
    NonNegativeReals,
    Var,
    units as pyunits,
)

from watertap.costing.unit_models.cstr import cost_cstr

__author__ = "Marcus Holly"


# Set up logger
_log = idaeslog.getLogger(__name__)


[docs]@declare_process_block_class("CSTR") class CSTRData(CSTRIDAESData): """ CSTR unit block for BSM2 """ CONFIG = CSTRIDAESData.CONFIG()
[docs] def build(self): """ Begin building model. Args: None Returns: None """ # Call UnitModel.build to set up dynamics super(CSTRData, self).build() self.hydraulic_retention_time = Var( self.flowsheet().time, initialize=4, domain=NonNegativeReals, units=pyunits.s, doc="Hydraulic retention time", ) def CSTR_retention_time_rule(self, t): return ( self.hydraulic_retention_time[t] == self.volume[t] / self.control_volume.properties_in[t].flow_vol ) self.CSTR_retention_time = Constraint( self.flowsheet().time, rule=CSTR_retention_time_rule, doc="Total CSTR retention time", )
@property def default_costing_method(self): return cost_cstr