Reclaimer#
QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems
This module is developed by:
Tori Morgan <vlmorgan@illinois.edu>
Yalin Li <mailto.yalin.li@gmail.com>
Hannah Lohman <hlohman94@gmail.com>
Lewis Rowles <stetsonsc@gmail.com>
This module contains unit operations used in the Reclaimer system developed by Duke University as described in https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge and Trotochaud et al.
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.
- class qsdsan.sanunits._reclaimer.ReclaimerECR(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', if_gridtied=True, ppl=1, **kwargs)#
Electrochemical reactor (ECR) in the Reclaimer system with chlorine dosing.
This is a non-reactive unit (i.e., the effluent is copied from the influent).
The following impact items should be pre-constructed for life cycle assessment: Titanium.
- Parameters:
ppl (int) – Total number of users for scaling of costs.
if_gridtied (bool) – If using grid electricity instead of photovoltaic electricity.
References
[1] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[2] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- property N_reclaimers#
[int] Number of the reclaimer units needed, calculated by ppl/baseline_ppl.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer ECR'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions
- class qsdsan.sanunits._reclaimer.ReclaimerHousing(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', ppl=1, **kwargs)#
Structural housing for the Reclaimer system.
This is a non-reactive unit (i.e., the effluent is copied from the influent).
The following impact items should be pre-constructed for life cycle assessment: Steel.
- Parameters:
ppl (int) – Total number of users for scaling of costs.
References
[1] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[2] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
[3] Eco-san water recycling toilet Reinvented Toilet design team bill of materials https://sanitation.ansi.org/EcoSanToilet
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- property N_reclaimers#
[int] Number of the reclaimer units needed, calculated by ppl/baseline_ppl.
- property N_toilets#
[int] Number of the MURT units, calculated by ppl/ppl_per_MURT.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer housing'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions
- class qsdsan.sanunits._reclaimer.ReclaimerIonExchange(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', ppl=1, **kwargs)#
Ion exchange in the Reclaimer system is used for N recovery from liquid stream. Concentrated NH3 is recovered.
The following impact items should be pre-constructed for life cycle assessment: Plastic, PVC, Steel.
- Parameters:
ins (Iterable(stream)) – waste: liquid waste stream to be treated by ion exchange unit. zeolite_in: zeolite input. gac_in: GAC input. KCl: KCl input.
outs (Iterable(stream)) – treated: treated liquid leaving ion exchange unit. zeolite_out: spent zeolite. gac_out: spent GAC. conc_NH3: concentrated NH3.
ppl (int) – Total number of users for scaling of costs.
References
[1] Lohman et al., Advancing Sustainable Sanitation and Agriculture through Investments in Human-Derived Nutrient Systems. Environ. Sci. Technol. 2020, 54, (15), 9217-9227. https://dx.doi.org/10.1021/acs.est.0c03764
[2] Tarpeh et al., Evaluating ion exchange for nitrogen recovery from source-separated urine in Nairobi, Kenya. Development Engineering. 2018, 3, 188–195. https://doi.org/10.1016/j.deveng.2018.07.002
[3] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[4] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- property N_reclaimers#
[int] Number of the reclaimer units needed, calculated by ppl/baseline_ppl.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer ion exchange'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions
- class qsdsan.sanunits._reclaimer.ReclaimerSolar(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', **kwargs)#
Photovoltaic system for solar power generation in the Reclaimer system.
This is a non-reactive unit (i.e., the effluent is copied from the influent).
The following impact items should be pre-constructed for life cycle assessment: Battery, Solar.
- Parameters:
ppl (int) – Total number of users for scaling of costs.
References
[1] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[2] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
[3] Eco-san water recycling toilet Reinvented Toilet design team bill of materials https://sanitation.ansi.org/EcoSanToilet
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer solar'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions
- class qsdsan.sanunits._reclaimer.ReclaimerSystem(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', if_gridtied=True, ppl=1, **kwargs)#
System connection components for the Reclaimer system.
This is a non-reactive unit (i.e., the effluent is copied from the influent).
The following impact items should be pre-constructed for life cycle assessment: Steel.
- Parameters:
ppl (int) – Total number of users for scaling of costs.
if_gridtied (bool) – If using grid electricity instead of photovoltaic electricity.
References
[1] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[2] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- property N_reclaimers#
[int] Number of the reclaimer units needed, calculated by ppl/baseline_ppl.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer system'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions
- class qsdsan.sanunits._reclaimer.ReclaimerUltrafiltration(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', if_gridtied=True, ppl=1, **kwargs)#
Ultrafiltration in the Reclaimer system is used for removing suspended solids with automated backwash.
The following impact items should be pre-constructed for life cycle assessment: Plastic, Steel.
- Parameters:
ins (Iterable(stream)) – waste: liquid waste stream to be treated by ultrafiltration unit.
outs (Iterable(stream)) – treated: treated liquid leaving ultrafiltration unit. retentate: concentrated retentate leaving ultrafiltration unit.
ppl (int) – Total number of users for scaling of costs.
if_gridtied (bool) – If using grid electricity instead of photovoltaic electricity.
References
[1] Trotochaud et al., Laboratory Demonstration and Preliminary Techno-Economic Analysis of an Onsite Wastewater Treatment System Environ. Sci. Technol. 2020, 54, (24), 16147–16155. https://dx.doi.org/10.1021/acs.est.0c02755
[2] Duke Center for WaSH-AID Reclaimer design team data and guidance https://washaid.pratt.duke.edu/work/water-sanitation/reinvent-toilet-challenge
- F_BM: dict[str, float]#
All bare-module factors for each purchase cost. Defaults to values in the class attribute
_F_BM_default
.
- F_D: dict[str, float]#
All design factors for each purchase cost item in
baseline_purchase_costs
.
- F_M: dict[str, float]#
All material factors for each purchase cost item in
baseline_purchase_costs
.
- F_P: dict[str, float]#
All pressure factors for each purchase cost item in
baseline_purchase_costs
.
- property N_reclaimers#
[int] Number of the reclaimer units needed, calculated by ppl/baseline_ppl.
- baseline_purchase_costs: dict[str, float]#
All baseline purchase costs without accounting for design, pressure, and material factors.
- design_results: dict[str, object]#
All design requirements excluding utility requirements and detailed auxiliary unit requirements.
- equipment_lifetime: int | dict[str, int]#
Lifetime of equipment. Defaults to values in the class attribute
_default_equipment_lifetime
. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.
- heat_utilities: tuple[HeatUtility, ...]#
All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).
- installed_costs: dict[str, float]#
All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.
- line: str = 'Reclaimer ultrafiltration'#
class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class
- parallel: dict[str, int]#
Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.
- power_utility: PowerUtility#
Electric utility associated to unit (including auxiliary requirements).
- prioritize: bool#
Whether to prioritize unit operation specification within recycle loop (if any).
- purchase_costs: dict[str, float]#
Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e.,
F_D
,F_P
,F_M
). Items here are automatically updated at the end of unit simulation.
- responses: set[bst.GenericResponse]#
Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.
- run_after_specifications: bool#
Whether to run mass and energy balance after calling specification functions