Membrane Bioreactor

QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems

This module is developed by:

Yalin Li <mailto.yalin.li@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._membrane_bioreactor.AnMBR(ID='', ins: Sequence[AbstractStream] | None = None, outs: Sequence[AbstractStream] | None = (), thermo=None, init_with='WasteStream', *, reactor_type='CSTR', N_train=2, membrane_configuration='cross-flow', membrane_type='multi-tube', membrane_material='ceramic', membrane_unit_cost=8, include_aerobic_filter=False, add_GAC=False, include_degassing_membrane=True, Y_biogas=0.86, Y_biomass=0.05, biodegradability=1.0, solids=(), split={}, biomass_ID='WWTsludge', solids_conc=10.5, T=308.15, F_BM={'Membrane': 1.15, 'Pump building': 1.1800826, 'Pumps': 1.1800826}, lifetime={'Membrane': 10, 'Pump chemical storage HDPE': 30, 'Pump pipe stainless steel': 15, 'Pump stainless steel': 15, 'Pumps': 15}, F_BM_default=1, **kwargs)

Anaerobic membrane bioreactor (AnMBR) for wastewater treatment as in Shoener et al. [1] Some assumptions adopted from Humbird et al. [2]

In addition to the anaerobic treatment, an optional second stage can be added, which can be aerobic filter or granular activated carbon (GAC).

Parameters:
  • ins (Inlets(obj)) – Influent, recycle (optional), naocl, citric acid, bisulfite, air (optional).

  • outs (Outlets(obj)) – Biogas, effluent, waste sludge, air (optional).

  • reactor_type (str) – Can either be “CSTR” for continuous stirred tank reactor or “AF” for anaerobic filter.

  • N_train (int) – Number of treatment train, should be at least two in case one failing.

  • membrane_configuration (str) – Can either be “cross-flow” or “submerged”.

  • membrane_type (str) – Can be “hollow fiber” (“submerged” configuration only), “flat sheet” (either “cross-flow” or “submerged” configuration), or “multi-tube” (“cross-flow” configuration only).

  • membrane_material (str) – Can be any of the plastics (“PES”, “PVDF”, “PET”, “PTFE”) for any of the membrane types (“hollow fiber”, “flat sheet”, “multi-tube”), or “sintered steel” for “flat sheet”, or “ceramic” for “multi-tube”.

  • membrane_unit_cost (float) – Cost of membrane, [$/ft2]

  • include_aerobic_filter (bool) – Whether to include an aerobic filtration process in this AnMBR, can only be True in “AF” (not “CSTR”) reactor.

  • add_GAC (bool) – If to add granular activated carbon to enhance biomass retention, can only be True for the “submerged” configuration.

  • include_degassing_membrane (bool) – If to include a degassing membrane to enhance methane (generated through the digestion reaction) recovery.

  • Y_biogas (float) – Biogas yield, [kg biogas/kg consumed COD].

  • Y_biomass (float) – Biomass yield, [kg biomass/kg consumed COD].

  • biodegradability (float or dict) – Biodegradability of components, when shown as a float, all biodegradable components are assumed to have the same degradability.

  • solids (Iterable(str)) – IDs of the solid components. If not provided, will be set to the default solids attribute of the components.

  • split (dict) – Component-wise split to the treated water. E.g., {‘NaCl’:1, ‘WWTsludge’:0} indicates all of the NaCl goes to the treated water and all of the WWTsludge goes to the wasted sludge. Default splits (based on the membrane bioreactor in [2]) will be used if not provided. Note that the split for Water will be ignored as it will be adjusted to satisfy the solids_conc setting.

  • biomass_ID (str) – ID of the Component that represents the biomass.

  • solids_conc (float) – Concentration of the biomass in the waste sludge, [g/L].

  • T (float) – Temperature of the reactor. Will not control temperature if provided as None.

  • kwargs (dict) – Other keyword arguments (e.g., J_max, SGD).

References

Note

TODO
  • Add algorithms for other configurations (AF, submerged, sparging, GAC, flat sheet, hollow fiber)

  • Maybe add AeMBR as well (and make an MBR superclass)

    • AeMBR can use higher flux and allows for lower transmembrane pressure

See also

MATLAB codes used in ref 1, especially the system layout diagrams.

property AF

[FilterTank] Anaerobic filter tank.

property AFF

[float] Air flow fraction, used in air pipe costing. The default value is calculated as STE/6 (STE stands for standard oxygen transfer efficiency, and default STE is 20). If using different STE value, AFF should be 1 if STE/6<1 and 3.33 if STE/6>1.

property AeF

[FilterTank] Aerobic filter tank.

property D_tank

[float] Depth of the reactor/membrane tank (same value), [ft].

property D_well

[float] Depth of the wet well, [ft]. Only needed for submerged configuration.

property HRT

[float] Hydraulic retention time, [hr].

property J

[float] Membrane flux, [L/m2/hr].

property J_max

[float] Maximum membrane flux, [L/m2/hr].

property L_BB

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

property L_CSTR

[float] Length of the CSTR tank, [ft].

property L_membrane_tank

[float] Length of the membrane tank, [ft].

property L_well

[float] Length of the wet well, [ft]. Only needed for submerged configuration.

property N_blower

[int] Number of blowers needed for gas sparging (not needed for some designs). Note that this is not used in costing (the cost is estimated based on the total sparging gas need).

property N_degasser

[int] Number of degassing membrane needed for dissolved biogas removal (optional).

property N_mod_tot

[int] Total number of membrane modules.

property N_train

[int] Number of treatment train, should be at least two in case one failing.

property OLR

[float] Organic loading rate, [kg COD/m3/hr].

property Q_cfs

[float] Influent volumetric flow rate in cubic feet per second, [cfs].

property Q_cmd

[float] Influent volumetric flow rate in cubic meter per day, [cmd].

property Q_gpm

[float] Influent volumetric flow rate in gallon per minute, [gpm].

property Q_mgd

[float] Influent volumetric flow rate in million gallon per day, [mgd].

property SGD

[float] Specific gas demand, [m3 gas/m2 membrane area/h].

property TMP_aerobic

[float] Transmembrane pressure in the aerobic filter, [psi]. Defaulted to half of the reactor TMP.

property TMP_anaerobic

[float] Transmembrane pressure in the anaerobic reactor, [psi].

property V_tot

[float] Total volume of the unit, [ft3].

property W_BB

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

property W_PB

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

property W_dist

[float] Width of the distribution channel, [ft].

property W_eff

[float] Width of the effluent channel, [ft].

property W_tank

[float] Width of the reactor/membrane tank (same value), [ft].

property W_well

[float] Width of the wet well, [ft]. Only needed for submerged configuration.

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.

property biodegradability

[float of dict] Biodegradability of components, when shown as a float, all biodegradable component are assumed to have the same degradability.

property biogas_rxns

[tmo.ParallelReaction] Biogas production reactions.

property biomass_ID

[str] ID of the Component that represents the biomass.

property cas_per_tank

[float] Number of membrane cassettes per tank for the current membrane type.

property cas_per_tank_range

[tuple] Range (min, max) of the number of membrane cassette per tank (same for all membrane types).

property cas_per_tank_spare

[int] Number of spare cassettes per train.

property constr_access

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

property excav_slope

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

property freeboard

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

property growth_rxns

[tmo.ParallelReaction] Biomass growth reactions.

property i_rm

[np.array] Removal of each chemical in this reactor.

line: str = 'An MBR'

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

property membrane_configuration

[str] Can either be “cross-flow” or “submerged”.

property membrane_material

[str] Can be any of the plastics (“PES”, “PVDF”, “PET”, “PTFE”) for any of the membrane types (“hollow fiber”, “flat sheet”, “multi-tube”), or “sintered steel” for “flat sheet”, or “ceramic” for “multi-tube”.

property membrane_type

[str] Can be “hollow fiber” (“submerged” configuration only), “flat sheet” (either “cross-flow” or “submerged” configuration), or “multi-tube” (“cross-flow” configuration only).

property mod_per_cas

[float] Number of membrane modules per cassette for the current membrane type.

property mod_per_cas_range

[tuple] Range (min, max) of the number of membrane modules per cassette for the current membrane type.

property mod_surface_area

[float] Surface area of the membrane for the current membrane type, [m2/module]. Note that one module is one sheet for plat sheet and one tube for multi-tube.

property organic_rm

[float] Overall organic (COD) removal rate.

property reactor_type

[str] Can either be “CSTR” for continuous stirred tank reactor or “AF” for anaerobic filter.

property recir_ratio

[float] Internal recirculation ratio, will be updated in simulation if the originally set ratio is not adequate for the desired flow required by GAC (if applicable).

property solids_conc

Concentration of solids in the waste sludge, [g/L].

property split

Component-wise split to the treated water.

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]. default to be minimum of 1 ft with 1 in added for every ft of depth over 12 ft.

property v_GAC

[float] Upflow velocity for GAC bed expansion, [m/hr].

property v_cross_flow

[float] Cross-flow velocity, [m/s].