Septic Tank#

QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems This module is developed by:

Yalin Li <>

Hannah Lohman <>

Tori Morgan <>

This module is under the University of Illinois/NCSA Open Source License. Please refer to for license details.

class qsdsan.sanunits._septic_tank.SepticTank(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', include_construction=True, degraded_components=('OtherSS',), if_capture_biogas=False, if_N2O_emission=True, if_include_front_end=True, if_generate_struvite=True, if_struvite_in_sludge=True, ppl=1, sludge_moisture_content=0.95, **kwargs)#

Septic tank that anaerobically treat the influent waste stream, often used as a primary treatment unit.

Designed based on the Reclaimer system as described in and Trotochaud et al.

The following impact items should be pre-constructed for life cycle assessment: FRP, Pump.

  • ins (Iterable(stream)) – waste: liquid waste stream to be treated by septic tank unit. MgOH2: input Mg(OH)2 for struvite precipitation.

  • outs (Iterable(stream)) – treated: treated liquid leaving septic tank. CH4: fugitive CH4 emissions. N2O: fugitive N2O emissions. sludge: solid waste to be sent to sludge pasteurization, could include the precipitated struvite. struvite: a separate struvite stream when if_generate_struvite is True.

  • if_include_front_end (bool) – If the front end is included in the analysis.

  • if_generate_struvite (bool) – If generating struvite.

  • if_struvite_in_sludge (bool) – If the generated struvite is in sludge.

  • ppl (int) – Total number of users for scaling of costs.

  • sludge_moisture_content (float) – Moisture content of the sludge, assumed to be 0.95 based on Tchobanoglous et al. (sludge leaving anaerobic treatment 2-5% solids).


[1] 2019.06 Technical report for BMGF V3 _ CC 2019.06.13.pdf [2] Tchobanoglous et al., Wastewater Engineering: Treatment and Resource Recovery, McGraw-Hill Education, New York, 5th edn., 2013.

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 = 'Septic tank'#

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

[float] Scaling factor based on the user number.