# Osmotically Assisted Reverse Osmosis (0D)

- This osmotically assisted reverse osmosis (OARO) unit model
is 0-dimensional

supports a single liquid phase only

supports steady-state only

is based on the solution-diffusion model and film theory

assumes isothermal conditions

assumes the feed-side flows in the forward direction

assumes the permeate-side flows in the backwards direction

## Degrees of Freedom

Aside from the inlet feed state variables (i.e. temperature, pressure, component flowrates), the OARO model has at least 5 degrees of freedom that should be fixed for the unit to be fully specified. Unlike RO, which only accounts for concentration polarization on the feed side, the OARO model includes a structural parameter variable, which is used to calculate the membrane-interface concentration on the permeate side.

- Typically, the following variables are fixed for the OARO model, in addition to state variables at the inlet:
membrane water permeability, A

membrane salt permeability, B

permeate pressure

membrane area

structural parameter

On the other hand, configuring the OARO unit to calculate concentration polarization effects, mass transfer coefficient, and pressure drop would result in 6 additional degrees of freedom. In this case, in addition to the previously fixed variables, we typically fix the following variables to fully specify the unit:

feed-spacer porosity

feed-channel height

feed-velocity

permeate-space porosity

permeate-channel height

membrane length

ormembrane widthorinlet Reynolds number

## Model Structure

This OARO model consists of a separate MembraneChannel0DBlock for the feed-side and the permeate-side of the membrane.

The feed-side includes 2 StateBlocks (properties_in and properties_out) which are used for mass, energy, and momentum balances, and 2 additional StateBlocks for the conditions at the membrane interface (properties_interface_in and properties_interface_out).

The permeate-side includes 2 StateBlocks (properties_in and properties_out) which are used for mass, energy, and momentum balances, and 2 additional StateBlocks for the conditions at the membrane interface (properties_interface_in and properties_interface_out).

## Sets

Description |
Symbol |
Indices |
---|---|---|

Time |
\(t\) |
[0] |

Inlet/outlet |
\(x\) |
[‘in’, ‘out’] |

Phases |
\(p\) |
[‘Liq’] |

Components |
\(j\) |
[‘H2O’, ‘NaCl’]* |

*Solute depends on the imported property model; example shown here is for the NaCl property model.

## Variables

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Solvent permeability coefficient |
\(A\) |
A_comp |
[t, j] |
\(\text{m/Pa/s}\) |

Solute permeability coefficient |
\(B\) |
B_comp |
[t, j] |
\(\text{m/s}\) |

Mass density of solvent |
\(\rho_{solvent}\) |
dens_solvent |
[p] |
\(\text{kg/}\text{m}^3\) |

Mass flux across membrane |
\(J\) |
flux_mass_phase_comp |
[t, x, p, j] |
\(\text{kg/s}\text{/m}^2\) |

Membrane area |
\(A_m\) |
area |
None |
\(\text{m}^2\) |

Component recovery rate |
\(R_j\) |
recovery_mass_phase_comp |
[t, p, j] |
\(\text{dimensionless}\) |

Volumetric recovery rate |
\(R_{vol}\) |
recovery_vol_phase |
[t, p] |
\(\text{dimensionless}\) |

Observed solute rejection |
\(r_j\) |
rejection_phase_comp |
[t, p, j] |
\(\text{dimensionless}\) |

Membrane structural parameter |
\(S\) |
structural_parameter |
[None] |
\(\text{m}\) |

Mass transfer to permeate |
\(M_p\) |
mass_transfer_phase_comp |
[t, p, j] |
\(\text{kg/s}\) |

The following variables are only built when specific configuration key-value pairs are selected.

if `has_pressure_change`

is set to `True`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Pressure drop |
\(ΔP\) |
deltaP |
[t] |
\(\text{Pa}\) |

if `concentration_polarization_type`

is set to `ConcentrationPolarizationType.fixed`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Concentration polarization modulus in feed channel |
\(CP_{mod,f}\) |
feed_side.cp_modulus |
[t, j] |
\(\text{dimensionless}\) |

Concentration polarization modulus in permeate channel |
\(CP_{mod,p}\) |
permeate_side.cp_modulus |
[t, j] |
\(\text{dimensionless}\) |

if `concentration_polarization_type`

is set to `ConcentrationPolarizationType.calculated`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Mass transfer coefficient in feed channel |
\(k_f\) |
feed_side.K |
[t, x, j] |
\(\text{m/s}\) |

Mass transfer coefficient in permeate channel |
\(k_p\) |
permeate_side.K |
[t, x, j] |
\(\text{m/s}\) |

if `mass_transfer_coefficient`

is set to `MassTransferCoefficient.calculated`

or `pressure_change_type`

is set to `PressureChangeType.calculated`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Feed-channel height |
\(h_{ch,f}\) |
feed_side.channel_height |
None |
\(\text{m}\) |

Hydraulic diameter |
\(d_{h,f}\) |
feed_side.dh |
None |
\(\text{m}\) |

Spacer porosity |
\(\epsilon_{sp,f}\) |
feed_side.spacer_porosity |
None |
\(\text{dimensionless}\) |

Reynolds number |
\(Re_{f}\) |
feed_side.N_Re |
[t, x] |
\(\text{dimensionless}\) |

Permeate-channel height |
\(h_{ch,p}\) |
permeate_side.channel_height |
None |
\(\text{m}\) |

Hydraulic diameter |
\(d_{h,p}\) |
permeate_side.dh |
None |
\(\text{m}\) |

Spacer porosity |
\(\epsilon_{sp,p}\) |
permeate_side.spacer_porosity |
None |
\(\text{dimensionless}\) |

Reynolds number |
\(Re_{p}\) |
permeate_side.N_Re |
[t, x] |
\(\text{dimensionless}\) |

if `mass_transfer_coefficient`

is set to `MassTransferCoefficient.calculated`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Schmidt number |
\(Sc_f\) |
feed_side.N_Sc |
[t, x] |
\(\text{dimensionless}\) |

Sherwood number |
\(Sh_f\) |
feed_side.N_Sh |
[t, x] |
\(\text{dimensionless}\) |

Schmidt number |
\(Sc_p\) |
permeate_side.N_Sc |
[t, x] |
\(\text{dimensionless}\) |

Sherwood number |
\(Sh_p\) |
permeate_side.N_Sh |
[t, x] |
\(\text{dimensionless}\) |

if `mass_transfer_coefficient`

is set to `MassTransferCoefficient.calculated`

or `pressure_change_type`

is **NOT** set to `PressureChangeType.fixed_per_stage`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Membrane length |
\(L\) |
length |
None |
\(\text{m}\) |

Membrane width |
\(W\) |
width |
None |
\(\text{m}\) |

if `pressure_change_type`

is set to `PressureChangeType.fixed_per_unit_length`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Average pressure drop per unit length of feed channel |
\((\frac{ΔP}{Δx})_{avg,f}\) |
feed_side.dP_dx |
[t] |
\(\text{Pa/m}\) |

Average pressure drop per unit length of permate channel |
\((\frac{ΔP}{Δx})_{avg,p}\) |
permeate_side.dP_dx |
[t] |
\(\text{Pa/m}\) |

if `pressure_change_type`

is set to `PressureChangeType.calculated`

:

Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|

Feed-channel velocity |
\(v_f\) |
feed_side.velocity |
[t, x] |
\(\text{m/s}\) |

Friction factor |
\(f\) |
feed_side.friction_factor_darcy |
[t, x] |
\(\text{dimensionless}\) |

Pressure drop per unit length of feed channel at inlet/outlet |
\((ΔP/Δx)_f\) |
feed_side.dP_dx |
[t, x] |
\(\text{Pa/m}\) |

Permeate-channel velocity |
\(v_p\) |
permeate_side.velocity |
[t, x] |
\(\text{m/s}\) |

Pressure drop per unit length of permeate channel at inlet/outlet |
\((ΔP/Δx)_p\) |
permeate_side.dP_dx |
[t, x] |
\(\text{Pa/m}\) |

## Equations

Description |
Equation |
---|---|

Solvent flux across membrane |
\(J_{solvent} = \rho_{solvent} A(P_{f} - P_p - (\pi_{f}-\pi_{p}))\) |

Solute flux across membrane |
\(J_{solute} = B(C_{f} - C_{p})\) |

Average flux across membrane |
\(J_{avg, j} = \frac{1}{2}\sum_{x} J_{x, j}\) |

Permeate mass flow by component j |
\(M_{p, j} = A_m J_{avg,j}\) |

Permeate-side solute mass fraction |
\(X_{x, j} = \frac{J_{x, j}}{\sum_{x} J_{x, j}}\) |

Feed-side membrane-interface solute concentration |
\(C_{interface,f} = CP_{mod,f}C_{bulk,f}=C_{bulk,f}\exp(\frac{J_{solvent}}{k_f})-\frac{J_{solute}}{J_{solvent}}(\exp(\frac{J_{solvent}}{k_f})-1)\) |

Permeate-side membrane-interface solute concentration |
\(C_{interface,p} = CP_{mod,p}C_{bulk,p}=C_{bulk,p}\exp(-J_{solvent}(\frac{S}{D} + \frac{1}{k_p})) + \frac{J_{solute}}{J{solvent}}(1-\exp(-J_{solvent}(\frac{S}{D} + \frac{1}{k_p})))\) |

Concentration polarization modulus |
\(CP_{mod} = C_{interface}/C_{bulk}\) |

Mass transfer coefficient |
\(k_f = \frac{D Sh}{d_h}\) |

Sherwood number |
\(Sh = 0.46 (Re Sc)^{0.36}\) |

Schmidt number |
\(Sc = \frac{\mu}{\rho D}\) |

Reynolds number |
\(Re = \frac{\rho v_f d_h}{\mu}\) |

Hydraulic diameter |
\(d_h = \frac{4\epsilon_{sp}}{2/h_{ch} + (1-\epsilon_{sp})8/h_{ch}}\) |

Cross-sectional area |
\(A_c = h_{ch}W\epsilon_{sp}\) |

Membrane area |
\(A_m = LW\) |

Pressure drop |
\(ΔP = (\frac{ΔP}{Δx})_{avg}L\) |

Feed-channel velocity |
\(v_f = Q_f/A_c\) |

Friction factor |
\(f = 0.42+\frac{189.3}{Re}\) |

Pressure drop per unit length |
\(\frac{ΔP}{Δx} = \frac{1}{2d_h}f\rho v_f^{2}\) |

Component recovery rate |
\(R_j = \frac{M_{p,j}}{M_{f,in,j}}\) |

Volumetric recovery rate |
\(R_{vol} = \frac{Q_{p}}{Q_{f,in}}\) |

Observed solute rejection |
\(r_j = 1 - \frac{C_{p,mix}}{C_{f,in}}\) |