watertap.costing package

Submodules

watertap.costing.watertap_costing_package module

class watertap.costing.watertap_costing_package.CrystallizerCostType(value)[source]

Bases: StrEnum

An enumeration.

class watertap.costing.watertap_costing_package.EnergyRecoveryDeviceType(value)[source]

Bases: StrEnum

An enumeration.

class watertap.costing.watertap_costing_package.MixerType(value)[source]

Bases: StrEnum

An enumeration.

class watertap.costing.watertap_costing_package.PumpType(value)[source]

Bases: StrEnum

An enumeration.

class watertap.costing.watertap_costing_package.ROType(value)[source]

Bases: StrEnum

An enumeration.

class watertap.costing.watertap_costing_package.WaterTAPCosting(*args, **kwds)

Bases: ProcessBlock

Parameters
  • 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

  • default (dict) –

    Default ProcessBlockData config

    Keys

  • initialize (dict) – ProcessBlockData config for individual elements. Keys are BlockData indexes and values are dictionaries described under the “default” argument above.

  • 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 overide the default behavior of matching the BlockData index exactly to the index in initialize.

Returns

(WaterTAPCosting) New instance

class watertap.costing.watertap_costing_package.WaterTAPCostingData(component)[source]

Bases: FlowsheetCostingBlockData

add_LCOW(flow_rate, name='LCOW')[source]

Add Levelized Cost of Water (LCOW) to costing block. :param flow_rate - flow rate of water: calculating LCOW :type flow_rate - flow rate of water: volumetric :param name: LCOW) :type name: optional

add_annual_water_production(flow_rate, name='annual_water_production')[source]

Add annual water production to costing block. :param flow_rate - flow rate of water: calculating annual water production :type flow_rate - flow rate of water: volumetric :param name: Expression (default: annual_water_production) :type name: optional

add_specific_electrical_carbon_intensity(flow_rate, name='specific_electrical_carbon_intensity')[source]

Add specific electrical carbon intensity (kg_CO2eq/m**3) to costing block. :param flow_rate - flow rate of water: calculating specific electrical carbon intensity :type flow_rate - flow rate of water: volumetric :param name: energy consumption (default: specific_electrical_carbon_intensity) :type name: optional

add_specific_energy_consumption(flow_rate, name='specific_energy_consumption')[source]

Add specific energy consumption (kWh/m**3) to costing block. :param flow_rate - flow rate of water: calculating specific energy consumption :type flow_rate - flow rate of water: volumetric :param name: energy consumption (default: specific_energy_consumption) :type name: optional

build()[source]

Base build method for FlowsheetCostingBlocks.

This method sets up the basic attributes expected for registering costing of unit operations and flows and calls the build_global_params method from the associated costing package.

build_global_params()[source]

This is where any global parameters, such as Lang factors or coefficients for costing methods that should be shared across the process, should be declared. Sub-Blocks may be used ot help organize parameters if requried.

Dervied class must overload this method.

build_process_costs()[source]

This is where process wide costing correlations should be declared. The following aggregate costs are available for use in calculating these process-wide costs:

  1. self.aggregate_capital_cost

  2. self.aggregate_fixed_operating_cost

  3. self.aggregate_variable_operating_cost

  4. self.aggregate_flow_costs (indexed by flow type)

Dervied class must overload this method.

static cost_caoh2_mixer(blk, dosing_rate)[source]

CaOH2 mixer costing method

TODO: describe equations

Parameters

dosing_rate – An expression in [mass/time] for CaOH2 dosage

static cost_crystallizer(blk, cost_type=CrystallizerCostType.default)[source]

Function for costing the FC crystallizer by the mass flow of produced crystals. The operating cost model assumes that heat is supplied via condensation of saturated steam (see Dutta et al.)

Parameters

basis (cost_type - Option for crystallizer cost function type - volume or mass) –

static cost_crystallizer_by_crystal_mass(blk)[source]

Mass-based capital cost for FC crystallizer

static cost_crystallizer_by_volume(blk)[source]

Volume-based capital cost for FC crystallizer

static cost_default_mixer(blk)[source]

Default mixer costing method

TODO: describe equations

static cost_electrodialysis(blk, cost_electricity_flow=True)[source]

Function for costing the Electrodialysis unit

Parameters

electricity (cost_electricity_flow - Option for including the costing of) –

static cost_energy_recovery_device(blk, energy_recovery_device_type=EnergyRecoveryDeviceType.pressure_exchanger, cost_electricity_flow=True)[source]

Energy recovery device costing method

TODO: describe equations

Parameters
  • energy_recovery_device_type – EnergyRecoveryDeviceType Enum indicating ERD type, default = EnergyRecoveryDeviceType.pressure_exchanger.

  • cost_electricity_flow – bool, if True, the ERD’s work_mechanical will be converted to kW and costed as an electricity default = True

cost_flow(flow_expr, flow_type)[source]

This method registers a given flow component (Var or expression) for costing. All flows are required to be bounded to be non-negative (i.e. a lower bound equal to or greater than 0).

Parameters
  • flow_expr – Pyomo Var or expression that represents a material flow that should be included in the process costing. Units are expected to be on a per time basis.

  • flow_type – string identifying the material this flow represents. This string must be available to the FlowsheetCostingBlock as a known flow type.

Raises
  • ValueError if flow_type is not recognized.

  • TypeError if flow_expr is an indexed Var.

cost_gac()[source]

3 equation capital cost estimation for GAC systems with: (i), contactor/pressure vessel cost by polynomial as a function of individual contactor volume; (ii), initial charge of GAC adsorbent cost by exponential as a function of required mass of GAC adsorbent; and (iii), other process costs (vessels, pipes, instrumentation, and controls) calculated by power law as a function of total contactor(s) volume. Operating costs calculated as the required makeup and regeneration of GAC adsorbent. Energy for backwash and booster pumps considered negligible compared to regeneration costs

static cost_high_pressure_pump(blk, cost_electricity_flow=True)[source]

High pressure pump costing method

TODO: describe equations

Parameters
  • bool (cost_electricity_flow -) – be converted to kW and costed as an electricity default = True

  • True (if) – be converted to kW and costed as an electricity default = True

  • will (the Pump's work_mechanical) – be converted to kW and costed as an electricity default = True

static cost_ion_exchange(blk)[source]

Volume-based capital cost for Ion Exchange

static cost_low_pressure_pump(blk, cost_electricity_flow=True)[source]

Low pressure pump costing method

TODO: describe equations

Parameters
  • bool (cost_electricity_flow -) – be converted to kW and costed as an electricity default = True

  • True (if) – be converted to kW and costed as an electricity default = True

  • will (the Pump's work_mechanical) – be converted to kW and costed as an electricity default = True

static cost_mixer(blk, mixer_type=MixerType.default, **kwargs)[source]

Mixer costing method

TODO: describe equations

Parameters
  • mixer_type – MixerType Enum indicating mixer type, default = MixerType.default

  • **kwargs – Additional keywords for the MixerType, e.g., NaOCl and CaOH2 mixers expect the dosing_rate keyword argument.

static cost_nanofiltration(blk)[source]

Nanofiltration costing method

TODO: describe equations

static cost_naocl_mixer(blk, dosing_rate)[source]

NaOCl mixer costing method

TODO: describe equations

Parameters

dosing_rate – An expression in [mass/time] for NaOCl dosage

static cost_pressure_exchanger(blk)[source]

Pressure exchanger costing method

TODO: describe equations

static cost_pressure_exchanger_erd(blk, cost_electricity_flow=True)[source]

ERD pressure exchanger costing method

TODO: describe equations

Parameters
  • bool (cost_electricity_flow -) – be converted to kW and costed as an electricity default = True

  • True (if) – be converted to kW and costed as an electricity default = True

  • will (the ERD's work_mechanical) – be converted to kW and costed as an electricity default = True

static cost_pump(blk, pump_type=PumpType.high_pressure, cost_electricity_flow=True)[source]

Pump costing method

TODO: describe equations

Parameters
  • pump_type – PumpType Enum indicating pump type, default = PumpType.high_pressure

  • cost_electricity_flow – bool, if True, the Pump’s work_mechanical will be converted to kW and costed as an electricity, default = True

static cost_reverse_osmosis(blk, ro_type=ROType.standard)[source]

Reverse osmosis costing method

TODO: describe equations

Parameters

ro_type – ROType Enum indicating reverse osmosis type, default = ROType.standard

static cost_uv_aop(blk, cost_electricity_flow=True)[source]

UV-AOP costing method

initialize_build()[source]

This is where custom initialization procedures can be implemented for flowsheet level costing components.

Dervied class must overload this method.

watertap.costing.watertap_costing_package.cost_by_flow_volume(blk, flow_cost, flow_to_cost)[source]

Generic function for costing by flow volume.

Parameters
  • [currency]/ (flow_cost - The cost of the device in) –

  • [volume]/[time] (flow_to_cost - The flow costed in) –

watertap.costing.watertap_costing_package.cost_electrodialysis_stack(blk, membrane_cost, spacer_cost, membrane_replacement_factor, electrode_cost, electrode_replacement_factor)[source]

Generic function for costing the stack in an electrodialysis unit. Assumes the unit_model has a cell_pair_num, cell_width, and cell_length set of variables used to size the total membrane area.

Parameters
  • area (electrode_cost - The total cost of electrodes in a given stack in currency per) –

  • area

  • spacers (membrane_replacement_factor - Replacement factor for membranes and) – [fraction of membranes/spacers replaced/year]

  • area

  • electrodes (electrode_replacement_factor - Replacement factor for) – [fraction of electrodes replaced/year]

watertap.costing.watertap_costing_package.cost_membrane(blk, membrane_cost, factor_membrane_replacement)[source]

Generic function for costing a membrane. Assumes the unit_model has an area variable or parameter.

Parameters
  • area (membrane_cost - The cost of the membrane in currency per) –

  • factor (factor_membrane_replacement - Membrane replacement) – [fraction of membrane replaced/year]

watertap.costing.watertap_costing_package.cost_uv_aop_bundle(blk, reactor_cost, lamp_cost, factor_lamp_replacement)[source]

Generic function for costing a UV system.

Parameters
  • [currency]/[volume] (reactor_cost - The cost of UV reactor in) –

  • lamps (lamp_cost - The costs of the) –

  • sleeves

  • [currency]/[kW] (ballasts and sensors in) –

Module contents