Source code for watertap.costing.unit_models.osmotically_assisted_reverse_osmosis

#################################################################################
# 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/"
#################################################################################

import pyomo.environ as pyo
from idaes.core.util.exceptions import ConfigurationError
from idaes.core.util.misc import StrEnum
from ..util import cost_membrane, register_costing_parameter_block


[docs]class OAROType(StrEnum): standard = "standard" high_pressure = "high_pressure"
[docs]def build_osmotically_assisted_reverse_osmosis_cost_param_block(blk): """ Reference parameter values are provided from: Bartholomew, T. V., Mey, L., Arena, J. T., Siefert, N. S., & Mauter, M. S. (2017). Osmotically assisted reverse osmosis for high salinity brine treatment. Desalination, 421, 3-11. """ blk.factor_membrane_replacement = pyo.Var( initialize=0.15, doc="Membrane replacement factor [fraction of membrane replaced/year]", units=pyo.units.year**-1, ) blk.membrane_cost = pyo.Var( initialize=30, doc="Membrane cost", units=pyo.units.USD_2018 / (pyo.units.meter**2), ) blk.high_pressure_membrane_cost = pyo.Var( initialize=50, doc="Membrane cost", units=pyo.units.USD_2018 / (pyo.units.meter**2), )
[docs]@register_costing_parameter_block( build_rule=build_osmotically_assisted_reverse_osmosis_cost_param_block, parameter_block_name="osmotically_assisted_reverse_osmosis", ) def cost_osmotically_assisted_reverse_osmosis(blk, oaro_type=OAROType.standard): """ Osmotically assisted reverse osmosis costing method TODO: describe equations Args: oaro_type: ROType Enum indicating osmotically assisted reverse osmosis type, default = OAROType.standard """ if oaro_type == OAROType.standard: return cost_membrane( blk, blk.costing_package.osmotically_assisted_reverse_osmosis.membrane_cost, blk.costing_package.osmotically_assisted_reverse_osmosis.factor_membrane_replacement, ) elif oaro_type == OAROType.high_pressure: return cost_high_pressure_osmotically_assisted_reverse_osmosis(blk) else: raise ConfigurationError( f"{blk.unit_model.name} received invalid argument for oaro_type:" f" {oaro_type}. Argument must be a member of the OAROType Enum." )
@register_costing_parameter_block( build_rule=build_osmotically_assisted_reverse_osmosis_cost_param_block, parameter_block_name="osmotically_assisted_reverse_osmosis", ) def cost_high_pressure_osmotically_assisted_reverse_osmosis(blk): cost_membrane( blk, blk.costing_package.osmotically_assisted_reverse_osmosis.high_pressure_membrane_cost, blk.costing_package.osmotically_assisted_reverse_osmosis.factor_membrane_replacement, )