Electrochemical Cell¶

QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems

This module is developed by:

Zixuan Wang <wyatt4428@gmail.com>

Smiti Mittal <smitimittal@gmail.com>

Yalin Li <mailto.yalin.li@gmail.com>

Anna Kogler <akogler@stanford.edu>

This module is under the University of Illinois/NCSA Open Source License. Please refer to https://github.com/QSD-Group/QSDsan/blob/main/LICENSE.txt for license details.

Note: unit_operations/static/_electrochemical_cell.py is a separate module holding ElectrochemicalCell/ElectrochemicalStrippingAdsorptionPrecipitation, the original monolithic (steady-state only) design that ESAP/ESAPRecovery/ ESAPEffluent here later replaced with a modular, dynamic-capable pipeline.

class qsdsan.unit_operations.dynamic._electrochemical_cell.ESAP(ID='', ins: Sequence[AbstractStream] | None = None, outs: Sequence[AbstractStream] | None = (), thermo=None, *, recovery={'NH3': 0.7}, loss={'NH3': 0.06}, order=None, init_with='WasteStream', F_BM_default=None, isdynamic=False, OPEX_over_CAPEX=0.2, component_ID_NH3='NH3', component_ID_P='Phosphate', component_ID_Mg='Mg2+', **kwargs)¶

Splits an electrochemical stripping influent into a recovered-product stream, a loss stream, and an effluent, by independent component-wise recovery/loss mass fractions. This unit is the front-end split step of the modular ESAP process (paired with ESAPRecovery and ESAPEffluent downstream, which carry the equipment design and costing); it is able to perform dynamic simulation.

Parameters:
  • ins – Wastewater stream.

  • outs –

    • [0] recovery product

    • [1] loss stream

    • [2] effluent

  • recovery (dict) – Keys refer to chemical component IDs. Values refer to recovery fractions (with 1 being 100%) for the respective chemicals.

  • loss (dict) – Keys refer to chemical component IDs. Values refer to loss fractions (with 1 being 100%) for the respective chemicals.

line: str = 'ESAP'¶

class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class

run()¶

Run mass and energy balance. This method also runs specifications user defined specifications unless it is being run within a specification (to avoid infinite loops).

See also

_run, specifications, add_specification, add_bounded_numerical_specification

property state¶

Component mass flow rate.

class qsdsan.unit_operations.dynamic._electrochemical_cell.ESAPEffluent(ID='', ins: Sequence[AbstractStream] | None = None, outs: Sequence[AbstractStream] | None = (), thermo=None, *, loss={'Mg2+': 0.3, 'NH3': 0.5, 'Phosphate': 0.8}, order=None, init_with='WasteStream', F_BM_default=None, isdynamic=False)¶

Splitting the ESAP effluent. This unit is able to perform dynamic simulation.

This unit has the following equipment:
Parameters:
  • ins – Inlet fluid to be split

  • outs –

    • [0] loss stream during the process

    • [1] effluent stream

  • loss (dict) – Keys refer to chemical component IDs. Values refer to loss fractions (with 1 being 100%) for the respective chemicals. The fraction is respective to the influent of ESAP_effluent unit.

  • equipment (list(obj)) – List of Equipment objects part of the Electrochemical Cell.

  • OPEX_over_CAPEX (float) – Ratio with which operating costs are calculated as a fraction of capital costs

line: str = 'ESAPEffluent'¶

class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class

run()¶

Run mass and energy balance. This method also runs specifications user defined specifications unless it is being run within a specification (to avoid infinite loops).

See also

_run, specifications, add_specification, add_bounded_numerical_specification

class qsdsan.unit_operations.dynamic._electrochemical_cell.ESAPRecovery(ID='', ins: Sequence[AbstractStream] | None = None, outs: Sequence[AbstractStream] | None = (), thermo=None, *, recovery={'Mg2+': 0.7, 'NH3': 0.8, 'Phosphate': 0.95}, order=None, init_with='WasteStream', F_BM_default=None, isdynamic=False, N_treatment_capacity=0.015, OPEX_over_CAPEX=0.2, component_ID_NH3='NH3', component_ID_P='Phosphate', component_ID_Mg='Mg2+', N_prodcut_concentration=2)¶

Electrochemical stripping, adsorption, and precipitation for nutrient recovery. This unit is able to perform dynamic simulation.

This unit has the following equipment:
Parameters:
  • ins – Wastewater stream

  • outs –

    • [0] recovery product

    • [1] Remainder stream

  • recovery (dict) – Keys refer to chemical component IDs. Values refer to recovery fractions (with 1 being 100%) for the respective chemicals.

  • equipment (list(obj)) – List of Equipment objects part of the Electrochemical Cell.

  • N_treatment_capacity (float) – kg N/h designed treatment capacity for 1 tower.

  • OPEX_over_CAPEX (float) – Ratio with which operating costs are calculated as a fraction of capital costs

  • component_ID_NH3 (string) – The ID for ammonia/ammonium in the influent wastestream

  • component_ID_P (string) – The ID for dissolved phosphate in the influent wastestream

  • component_ID_Mg (string) – The ID for dissolved magnesium in the influent wastestream

  • N_prodcut_concentration (float) – molar concentration (mol/L) of N in the final product

line: str = 'ESAPRecovery'¶

class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class

run()¶

Run mass and energy balance. This method also runs specifications user defined specifications unless it is being run within a specification (to avoid infinite loops).

See also

_run, specifications, add_specification, add_bounded_numerical_specification