Membrane Distillation#

QSDsan: Quantitative Sustainable Design for sanitation and resource recovery systems

This module is developed by:

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

class qsdsan.sanunits._membrane_distillation.MembraneDistillation(ID='', ins: Sequence[Stream] | None = None, outs: Sequence[Stream] | None = (), thermo=None, init_with='WasteStream', include_construction=True, lifetime={'Membrane': 7920}, influent_pH=8.16, target_pH=10, N_S_ratio=2, m2_2_m3=0.0008333333333333334, Dm=2.28e-05, porosity=0.9, thickness=7.000000000000001e-05, tortuosity=1.2, Henry=1.6100000000000002e-05, Ka=1.7500000000000002e-05, capacity=6.01, membrane_price=93.29)#

Membrane distillation recovers nitrogen as ammonia sulfate based on vapor pressure difference across the hydrophobic membrane. Water flux across membrane is ignored.

  • ins (Iterable(stream)) – influent, acid, base, mem_in.

  • outs (Iterable(stream)) – ammonium sulfate, ww, mem_out.

  • influent_pH (float) – Influent pH.

  • target_pH (float) – Target pH for membrane distillation.

  • N_S_ratio (float) – mol(N) to mol(S) ratio.

  • m2_2_m3 (float) – m2 to m3 factor, 1/specific surface area, [m3/m2].

  • Dm (float) – NH3 molecular diffusivity in air, [m2/s].

  • porosity (float) – Membrane porosity.

  • thickness (float) – Membrane thickness, [m].

  • tortuosity (float) – Membrane tortuosity.

  • Henry (float) – NH3 Henry constant, [atm*m3/mol].

  • Ka (float) – Overall mass transfer coefficient, [m/s].

  • capacity (float) – Membrane treatment capacity (permeate flux), [kg/m2/h].

  • membrane_price (float) – Membrane price, [$/kg] ([$/m2]).


[1] Li, Y.; Tarpeh, W. A.; Nelson, K. L.; Strathmann, T. J.

Quantitative Evaluation of an Integrated System for Valorization of Wastewater Algae as Bio-Oil, Fuel Gas, and Fertilizer Products. Environ. Sci. Technol. 2018, 52 (21), 12717–12727.

[2] Doran, P. M. Chapter 11 - Unit Operations. In Bioprocess Engineering

Principles (Second Edition); Doran, P. M., Ed.; Academic Press: London, 2013; pp 445–595.

[3] Spiller, L. L. Determination of Ammonia/Air Diffusion Coefficient Using

Nafion Lined Tube. Analytical Letters 1989, 22 (11–12), 2561–2573.

[4] Scheepers, D. M.; Tahir, A. J.; Brunner, C.; Guillen-Burrieza, E.

Vacuum Membrane Distillation Multi-Component Numerical Model for Ammonia Recovery from Liquid Streams. Journal of Membrane Science 2020, 614, 118399.

[5] Ding, Z.; Liu, L.; Li, Z.; Ma, R.; Yang, Z. Experimental Study of Ammonia

Removal from Water by Membrane Distillation (MD): The Comparison of Three Configurations. Journal of Membrane Science 2006, 286 (1), 93–103.

[6] Al-Obaidani, S.; Curcio, E.; Macedonio, F.; Di Profio, G.; Al-Hinai, H.;

Drioli, E. Potential of Membrane Distillation in Seawater Desalination: Thermal Efficiency, Sensitivity Study and Cost Estimation. Journal of Membrane Science 2008, 323 (1), 85–98.

[7] Kogler, A.; Farmer, M.; Simon, J. A.; Tilmans, S.; Wells, G. F.;

Tarpeh, W. A. Systematic Evaluation of Emerging Wastewater Nutrient Removal and Recovery Technologies to Inform Practice and Advance Resource Efficiency. ACS EST Eng. 2021, 1 (4), 662–684.

[8] Pikaar, I.; Guest, J.; Ganigue, R.; Jensen, P.; Rabaey, K.; Seviour, T.;

Trimmer, J.; van der Kolk, O.; Vaneeckhaute, C.; Verstraete, W.; Resource Recovery from Water: Principles and Applicaiton. IWA 2022.

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 = 'Membrane distillation'#

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