Skip to content

Commit

Permalink
Merge pull request #114 from Zhuoran29/fo
Browse files Browse the repository at this point in the history
Forward osmosis unit model and Trevi's system flowsheet
  • Loading branch information
kurbansitterley authored Nov 21, 2024
2 parents 35d4110 + a0326d5 commit 841bb60
Show file tree
Hide file tree
Showing 15 changed files with 3,087 additions and 3 deletions.
Binary file added docs/_static/unit_models/Trevi_fo_flowsheet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_static/unit_models/fo_unit_model.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
.. _FO_homepage:

Forward Osmosis (FO)
====================

This Forward Osmosis (FO) unit model
* supports steady-state only
* is a assumed-performance zero-order model
* is verified against the Trevi's operational data and modeling results

.. figure:: ../../../_static/unit_models/fo_unit_model.png
:width: 800
:align: center

Figure 1. Diagram of the FO unit model

This FO model is constructed based on the Trevi System's FO pilot plant configuration. The extraction of water from the feed flow
relies on a bi-phasic synthetic polymer draw agent that is either a hydrophilic liquid or a hydrophobic liquid depending on
temperature. In its hydrophilic state, this agent draws water across a semi-permeable membrane by osmotic pressure. Once the draw has
been diluted by the fresh water crossing the FO membrane, the draw mixture is heated, causing it to become hydrophobic and release water.
The water and draw polymer are separated in a traditional “oil/water” coalescer (separator), and a polishing nano-filtration (NF) membrane further
purifies the product stream by removing stray polymer. The associated draw solution package is used to simulate the mass and thermal energy
transfer within the process.

At the technical heart of referenced Trevi' system, two counter-flow heat exchangers recover process heat from both the draw and purified
water streams – transferring heat directly to the dilute draw as it exits the osmosis membrane cartridges. The full configuration is constructed
in an example flowhsheet: :any:`Trevi_FO_homepage`



Degrees of Freedom
------------------
The FO model has 6 degrees of freedom that should be fixed for the unit to be fully specified.

Typically, the following variables are fixed, including the state variables at the inlet and other configurations of the system.

.. csv-table::
:header: "State Variables", "Variable name", "Symbol", "Unit"

"Feed salinity", "feed_props.conc_mass_phase_comp['Liq', 'TDS']", ":math:`s_{feed}`", ":math:`\text{g/}\text{L}`"
"Feed temperature", "feed_props.temperature", ":math:`T_{f}`", ":math:`^o\text{C}`"
"Feed volume flow rate", "feed_props.flow_vol_phase['Liq']", ":math:`v_{feed}`", ":math:`\text{m}^3 / \text{s}`"
"Strong draw solution (A) mass fraction", "strong_draw_props.mass_frac_phase_comp['Liq', 'DrawSolution']", ":math:`x_{A}`", "None"
"Strong draw solution temperature entering FO", "strong_draw_props.temperature", ":math:`T_{A}`", ":math:`^o\text{C}`"
"Draw solution mass fraction in product water (P)", "product_props.mass_frac_phase_comp['Liq', 'DrawSolution']", ":math:`x_{P}`", "None"


Model Structure
---------------

This FO model consists of 6 StateBlocks (as 6 Ports in parenthesis below).

* Feed flow (feed)
* Product water (product)
* Brine flow (brine)
* Strong draw solution (strong_draw)
* Weak draw solution (weak_draw)
* Regenerated draw solution (reg_draw)

Feed and brine stateblocks are associated with seawater property package, while the other 4 stateblocks use the specific
draw solution package.

Variables
---------
The system configuration variables can be fixed with the default values:

.. csv-table::
:header: "System configurations", "Variable name", "Symbol", "Unit"

"Heat of mixing in membrane (per m3 of product water)", "heat_mixing", ":math:`\Delta H_{mixing}`", ":math:`\text{MJ/}\text{m}^3`"
"Separation temperature of the draw solution", "regeneration_temp", ":math:`T_{separation}`", ":math:`^o\text{C}`"
"Temperature loss in the separator", "separator_temp_loss", ":math:`\Delta T_{separator}`", ":math:`^o\text{C}`"
"Required pressure over brine osmotic pressure", "dp_brine", ":math:`\Delta P_{brine}`", ":math:`\text{Pa}`"
"FO recovery ratio", "recovery_ratio", ":math:`RR_{FO}`", "None"
"NF recovery ratio", "nanofiltration_recovery_ratio", ":math:`RR_{NF}`", "None"

The following variables are calculated by fixing the default degree of freedoms above.

.. csv-table::
:header: "Description", "Symbol", "Variable Name", "Units"

"Heat of mixing transferred to brine (per m3 of product water)", ":math:`\Delta H_{mixing\_to\_brine}`", "heat_transfer_to_brine", ":math:`\text{MJ/}\text{m}^3`"
"Heat of mixing transferred to the weak draw (per m3 of product water)", ":math:`\Delta H_{mixing\_to\_weak}`", "heat_transfer_to_weak", ":math:`\text{MJ/}\text{m}^3`"
"Temperature difference between membrane and outlet flows due to the released heat of mixing", ":math:`\Delta T_{membrane}`", "delta_temp_membrane", ":math:`^o\text{C}`"
"FO Membrane temperature", ":math:`T_{membrane}`", "membrane_temp", ":math:`^o\text{C}`"

Equations
---------
.. csv-table::
:header: "Description", "Equation"

"Brine volumetric flow rate", ":math:`v_{brine} = v_{feed} \times (1 - \frac{RR_{FO}}{RR_{NF}})`"
"Brine salinity", ":math:`s_{brine} = \frac{s_{feed}}{1 - \frac{RR_{FO}}{RR_{NF}}}`"
"Brine temperature", ":math:`T_{brine} = T_{membrane} + \Delta T_{membrane}`"
"Product water volumetric flow rate", ":math:`v_{product} = v_{feed} \times \frac{RR_{FO}}{RR_{NF}}`"
"Weak draw solution (B) temperature (same as brine temp)", ":math:`T_{B} = T_{membrane} + \Delta T_{membrane}`"
"Heat of mixing transferring to brine and weak draw", ":math:`\Delta H_{mixing} = \Delta H_{mixing\_to\_brine} + \Delta H_{mixing\_to\_weak}`"
"Heat of mixing transferring to brine", ":math:`\Delta H_{mixing\_to\_brine} = \Delta T_{membrane} \times \rho_{brine} \times v_{brine} \times Cp_{brine}`"
"Heat of mixing transferring to weak draw", ":math:`\Delta H_{mixing\_to\_weak} = \Delta T_{membrane} \times \rho_{B} \times v_{B} \times Cp_{B}`"
"Membrane temperature", ":math:`T_{membrane} = \frac{\rho_{A}*v_{A}*Cp_{A}*T_{A} + \rho_{feed}*v_{feed}*Cp_{feed}*T_{feed}}{\rho_{A}*v_{A}*Cp_{A} + \rho_{feed}*v_{feed}*Cp_{feed}}`"
"Required osmotic pressure of weak draw", ":math:`P_{osm\_B} = P_{osm\_brine} + \Delta P_{brine}`"
"Regenerated draw solution temperature", ":math:`T_{reg} = T_{separation} - \Delta T_{separator}`"

References
----------

Documentation, data and Excel model from Trevi System.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
.. _Trevi_FO_homepage:

Trevi's forward osmosis flowsheet
=================================

Implementation
--------------

This flowsheet:
* simulates the configuration of the pilot FO system that Trevi System constructed
* incorporates a list of the following unit models

* one :any:`FO_homepage` model from WaterTAP-REFLO
* one `Mixer <https://idaes-pse.readthedocs.io/en/2.4.0/reference_guides/model_libraries/generic/unit_models/mixer.html>`_ model from IDAES
* two `Separator <https://idaes-pse.readthedocs.io/en/2.4.0/reference_guides/model_libraries/generic/unit_models/separator.html>`_ models from IDAES
* two `Heat exchanger(0D) <https://idaes-pse.readthedocs.io/en/2.4.0/reference_guides/model_libraries/generic/unit_models/heat_exchanger.html>`_ models from IDAES
* three `Heater <https://idaes-pse.readthedocs.io/en/2.4.0/reference_guides/model_libraries/generic/unit_models/heater.html>`_ models from IDAES
* supports steady-state only
* is verified against the Trevi's operational data and modeling results

.. figure:: ../../../_static/unit_models/Trevi_fo_flowsheet.png
:width: 800
:align: center

Figure 1. Diagram of the Trevi System's FO configuration

A discussion of each process component is given as following:
* The FO membrane separates the feed seawater by the concentrated draw solution. Along the membranes, driven by the osmosis gradient, water from the feed side permeates the FO membrane and dilutes the draw solution on the draw solution side of the membrane.
* FO brine exits the FO membrane module and is discharged after heat recovery in the heat exchanger and after chemical neutralization.
* The diluted draw solution (approximately 40-50%) exits the membrane module and is circulated through the heat exchangers to the coalescer, where the draw solution polymer will be separated.
* The draw solution is circulated in a loop between the coalescer and the FO membrane. In the coalescer the draw solution is separated, by means of the heat provided by the waste heat exchanger. Hot concentrated draw solution at 80 wt% draw solution polymer exits the coalescer and, after giving heat to the diluted draw solution from the FO module, enters the FO membrane module.
* From the membrane module to the coalescer, the circulation loop of the diluted raw solution is as described above. During this circulation, the stream receives the brine generated by the final nanofiltration (NF) process.
* In the coalescer the draw solution stream is separated into two components, (1) concentrated draw solution at 80 wt % draw solution polymer, and two (2) NF feed at < 1 wt% draw solution polymer.
* Concentrated draw solution at 80 wt % draw solution polymer goes through the heat exchanger and enters permeate side of FO membrane module.
* From the coalescer, the product stream is hot NF feed at ~ 1 wt % draw solution polymer, that after pre-heating the diluted draw solution as described above, is pumped to the low pressure NF unit by the NF feed pump.
* An additional RO filtration step is installed for the NF permeate in case product water quality does not fullfil requirements, with special reference to rejection of Boron.
* The NF brine stream, which is a warm stream containing the NF-rejected draw solution polymer, is recirculated and combined with cold dilute draw solution downstream of the FO membrane.
* According to the efficiency of the heat exchangers, both the NF permeate and brine will be slightly warmer than the original feed seawater finally resulting in loss of heat.

Flowsheet inputs
----------------
In addition to the input variables as described in the :any:`FO_homepage` model, the following operational parameters should be further specified:

.. csv-table::
:header: "Input Variables", "Variable name", "Symbol", "Unit"

"RO recovery ratio (if applied)", "fs.ro_recovery_ratio", ":math:`RR_{RO}`", "None"
"Outlet temperature of weak draw from heat exchanger HX1", "fs.HX1.weak_draw_outlet.temperature",":math:`T_{HX1\_cold\_out}`", ":math:`^o\text{C}`"
"Outlet temperature of product water from heat exchanger HX1", "fs.HX1.product_water_outlet.temperature", ":math:`T_{HX1\_hot\_out}`", ":math:`^o\text{C}`"



Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ Treatment Models
lt_med_surrogate
med_md_semibatch
med_tvc_surrogate
vagmd_surrogate_base
vagmd_surrogate_base
forward_osmosis
forward_osmosis_trevi_flowsheet
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Low Temperature Multi-effect Distillation - Semibatch, Vacuum Air-gap Membrane Distillation (LTMED - VAGMD) Flowsheet
===================================================================================================================
=====================================================================================================================

Implementation
--------------
Expand Down Expand Up @@ -110,7 +110,7 @@ Equations


Variables connected between periods
----------------------------------
-----------------------------------
This table lists pairs of variables that need to be connected across two time periods during processing phase

.. csv-table::
Expand Down
Loading

0 comments on commit 841bb60

Please sign in to comment.