Anaerobic Reactor#

QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems

This module is developed by:

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

Joy Zhang <joycheung1994@gmail.com>

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._anaerobic_reactor.AnaerobicBaffledReactor(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', include_construction=True, degraded_components=('OtherSS',), if_capture_biogas=True, if_N2O_emission=False, **kwargs)#

Anaerobic baffled reactor with the production of biogas based on Trimmer et al.

To enable life cycle assessment, the following impact items should be pre-constructed: Concrete, Gravel, Excavation.

Parameters:
  • ins (Iterable(stream)) – Waste for treatment.

  • outs (Iterable(stream)) – Treated waste, biogas, fugitive CH4, and fugitive N2O.

Examples

bwaise systems

References

[1] Trimmer et al., Navigating Multidimensional Social–Ecological System Trade-Offs across Sanitation Alternatives in an Urban Informal Settlement. Environ. Sci. Technol. 2020, 54 (19), 12641–12653. https://doi.org/10.1021/acs.est.0c03296.

property COD_removal#

[float] Fraction of COD removed during treatment.

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_baffle#

[int] Number of reactors, float will be converted to the smallest integer.

property N_reactor#

[int] Number of reactors, float will be converted to the smallest integer.

property N_removal#

[float] Fraction of N removed during treatment.

property add_concrete#

[float] Additional concrete as a fraction of the reactor concrete usage to account for receiving basin and biogas tank.

baseline_purchase_costs: dict[str, float]#

All baseline purchase costs without accounting for design, pressure, and material factors.

property concrete_thickness#

[float] Thickness of the concrete wall.

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 = 'Anaerobic baffled reactor'#

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.

property reactor_H#

[float] Reactor height, [m].

property reactor_L#

[float] Reactor length, [m].

property reactor_W#

[float] Reactor width, [m].

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

property tau#

[float] Residence time, [d].

class qsdsan.sanunits._anaerobic_reactor.AnaerobicCSTR(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', V_liq=3400, V_gas=300, model=None, T=308.15, headspace_P=1.013, external_P=1.013, pipe_resistance=50000.0, fixed_headspace_P=False, retain_cmps=(), fraction_retain=0.95, isdynamic=True, exogenous_vars=(), **kwargs)#

An anaerobic continuous stirred tank reactor with biogas in headspace. [1], [2]

Parameters:
  • ins (WasteStream) – Influent to the reactor.

  • outs (Iterable) – Biogas and treated effluent(s).

  • V_liq (float, optional) – Liquid-phase volume [m^3]. The default is 3400.

  • V_gas (float, optional) – Headspace volume [m^3]. The default is 300.

  • model (Processes, optional) – The kinetic model, typically ADM1-like. The default is None.

  • T (float, optional) – Operation temperature [K]. The default is 308.15.

  • headspace_P (float, optional) – Headspace pressure, if fixed [bar]. The default is 1.013.

  • external_P (float, optional) – External pressure, typically atmospheric pressure [bar]. The default is 1.013.

  • pipe_resistance (float, optional) – Biogas extraction pipe resistance [m3/d/bar]. The default is 5.0e4.

  • fixed_headspace_P (bool, optional) – Whether to assume fixed headspace pressure. The default is False.

  • retain_cmps (Iterable[str], optional) – IDs of the components that are assumed to be retained in the reactor, ideally. The default is ().

  • fraction_retain (float, optional) – The assumed fraction of ideal retention of select components. The default is 0.95.

References

property DO_ID#

Not applicable.

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 V_liq#

[float] The designed maximum liquid volume, not accounting for increased volume due to aeration, in m^3.

property aeration#

Not applicable

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.

property external_P#

External (atmospheric) pressure [bar].

property fixed_headspace_P#

Headspace total pressure [bar].

property headspace_P#

Headspace total pressure [bar].

heat_utilities: tuple[HeatUtility, ...]#

All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).

ideal_gas_law(p=None, S=None)#

Calculates partial pressure [bar] given concentration [M] at operation temperature or vice versa according to the ideal gas law .

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 = 'Anaerobic CSTR'#

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

property model#

[CompiledProcesses or NoneType] Suspended growth model.

p_vapor(convert_to_bar=True)#

Calculates the saturated vapor pressure at operation temperature.

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.

property pipe_resistance#

Gas pipe resistance coefficient [m3/d/bar].

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

property split#

[numpy.1darray or NoneType] The volumetric split of outs.

property state#

The state of the anaerobic CSTR, including component concentrations [kg/m3], biogas concentrations in the headspace [M biogas], and liquid flow rate [m^3/d].

class qsdsan.sanunits._anaerobic_reactor.AnaerobicDigestion(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', include_construction=True, flow_rate=None, degraded_components=('OtherSS',), if_capture_biogas=True, if_N2O_emission=False, **kwargs)#

Anaerobic digestion of wastes with the production of biogas based on Trimmer et al.

To enable life cycle assessment, the following impact items should be pre-constructed: Concrete, Excavation.

Cost is calculated by the unit cost of the impact items and their quantities.

Parameters:
  • ins (Iterable) – Waste for treatment.

  • outs (Iterable) – Treated waste, captured biogas, fugitive CH4, and fugitive N2O.

  • flow_rate (float) – Total flow rate through the reactor (for sizing purpose), [m3/d]. If not provided, will use F_vol_in.

Examples

bwaise systems

References

[1] Trimmer et al., Navigating Multidimensional Social–Ecological System Trade-Offs across Sanitation Alternatives in an Urban Informal Settlement. Environ. Sci. Technol. 2020, 54 (19), 12641–12653. https://doi.org/10.1021/acs.est.0c03296.

property COD_removal#

[float] Fraction of COD removed during treatment.

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_reactor#

[int] Number of reactors, float will be converted to the smallest integer.

property aspect_ratio#

[float] Diameter-to-height ratio of the reactor.

baseline_purchase_costs: dict[str, float]#

All baseline purchase costs without accounting for design, pressure, and material factors.

property concrete_thickness#

[float] Thickness of the concrete wall.

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.

property flow_rate#

[float] Total flow rate through the reactor (for sizing purpose), [m3/d]. If not provided, will calculate based on F_vol_in.

property headspace_frac#

[float] Fraction of the reactor volume for headspace gas.

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 = 'Anaerobic digestion'#

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

property tau#

[float] Residence time, [d].

class qsdsan.sanunits._anaerobic_reactor.SludgeDigester(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', include_construction=False, F_BM_default=1, HRT=20, SRT=20, T=308.15, Y=0.08, b=0.03, organics_conversion=0.7, COD_factor=1.42, methane_yield=0.4, methane_fraction=0.65, depth=10, heat_transfer_coeff={'ceiling': 0.95, 'floor': 1.7, 'wall': 0.7}, wall_concrete_unit_cost=24, slab_concrete_unit_cost=13, excavation_unit_cost=0.3, F_BM={'Pump': 1.1800826, 'Pump building': 1.1800826}, lifetime={'Pump': 15, 'Pump pipe stainless steel': 15, 'Pump stainless steel': 15}, **kwargs)#

A conventional digester for anaerobic digestion of sludge as in Shoener et al..

Note that the CompiledComponents object set in system simulation must have defined active_biomass.

Parameters:
  • ins (Iterable(stream)) – Sludge for digestion.

  • outs (Iterable(stream)) – Digested sludge, generated biogas.

  • HRT (float) – Hydraulic retention time, [d].

  • SRT (float) – Solids retention time, [d].

  • T (float) – Temperature within the digester, [K].

  • Y (float) – Biomass yield, [mg VSS/mg BOD].

  • b (float) – Endogenous decay coefficient, [1/d].

  • organics_conversion (float) – Conversion of the organics (i.e., COD) of the sludge in fraction (i.e., 0.7 for 70%).

  • COD_factor (float) – Biomass-to-COD conversion factor, [g COD/g VSS].

  • methane_yield (float) – Methane yield from the digested organics, [m3/kg].

  • methane_fraction (float) – Fraction of methane in the biogas, the rest is assumed to be CO2.

  • depth (float) – Side depth of the digester, [m].

  • heat_transfer_coeff (dict) – Heat transfer coefficients for heat loss calculation, [W/m2/°C], keys should contain “wall”, “floor”, and “ceiling”.

  • wall_concrete_unit_cost (float) – Unit cost of the wall concrete, [UDS/ft3].

  • slab_concrete_unit_cost (float) – Unit cost of the slab concrete, [UDS/ft3].

  • excavation_unit_cost (float) – Unit cost of the excavation activity, [UDS/ft3].

References

[1] Shoener, B. D.; Zhong, C.; Greiner, A. D.; Khunjar, W. O.; Hong, P.-Y.; Guest, J. S.

Design of Anaerobic Membrane Bioreactors for the Valorization of Dilute Organic Carbon Waste Streams. Energy Environ. Sci. 2016, 9 (3), 1102–1112. https://doi.org/10.1039/C5EE03715H.

property D_PB#

[float] Depth of the pump building, [ft].

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 L_PB#

[float] Length of the pump building, [ft].

property T_air#

[float] Temperature of the air, [K].

property T_earth#

[float] Temperature of the air, [K].

property W_PB#

[float] Width of the pump building, [ft].

auxiliary_unit_names: tuple[str, ...] = ('heat_exchanger',)#

class-attribute Name of attributes that are auxiliary units. These units will be accounted for in the purchase and installed equipment costs without having to add these costs in the baseline_purchase_costs dictionary. Heat and power utilities are also automatically accounted for.

baseline_purchase_costs: dict[str, float]#

All baseline purchase costs without accounting for design, pressure, and material factors.

property constr_access#

[float] Extra room for construction access, [ft].

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.

property excav_slope#

[float] Slope for excavation (horizontal/vertical).

property freeboard#

[float] Freeboard added to the depth of the reactor tank, [ft].

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 = 'Sludge digester'#

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

property t_slab#

[float] Concrete slab thickness, [ft], default to be 2 in thicker than the wall thickness.

property t_wall#

[float] Concrete wall thickness, [ft].