Ion Exchange (0D)
The main assumptions of the implemented model are as follows:
Model dimensionality is limited to a 0D control volume
Single liquid phase only
Steady state only
Single solute and single solvent (water) only
Plug flow conditions
Isothermal conditions
Favorable Langmuir or Freundlich isotherm
Introduction
Ion exchange is the reversible transfer of one or more solutes between a fluid phase and a sorbent. This process is becoming increasingly popular in drinking water treatment applications where it is used for water softening and demineralization. This implementation of the fixed-bed ion exchange model accounts for process equilibrium, kinetics, and hydrodynamics to predict performance, bed and column geometry, and capital/operating costs. The ion exchange process operates as a cycle with four steps:
Service
Backwashing
Regeneration
Rinsing
Critical to predicting performance of an ion exchange process is having an estimate for the breakthrough time, or the duration of treatment before the solute begins exiting the column at a concentration unacceptable to the operator. At this time, the mass transfer zone is approaching the end of the ion exchange bed, the resin is nearing exhaustion, and the regeneration cycle can begin. Fundamental to this model is the assumption that the isotherm between the solute and the resin is favorable, and thus the mass transfer zone is shallow.
Note
If using single-use
configuration for regenerant
, the backwashing, regeneration, and rinsing steps are not modeled and all associated costs for these steps are zero.
Isotherm Configurations
The model requires the user has either Langmuir or Freundlich isotherm equilibrium parameters for their specific system. Variables in the following equations and their corollary in the WaterTAP model are defined in a following section.
Langmuir
For the Langmuir isotherm, the Langmuir parameter \(La\) (langmuir
in the WaterTAP model) is:
Where \(K\) is an equilibrium constant derived from experimental data, and \(C_0\) is the influent concentration of the target ion. (Note: This equation is not included in the model). \(La\) is used in the dimensionless form of the Langmuir isotherm:
\(Y\) is the ratio of equilibrium to total resin capacity (resin_eq_capacity
and resin_max_capacity
, respectively in the WaterTAP model).
For a favorable isotherm (a core assumption of the model), \(La\) is less than one.
Freundlich
For the Freundlich isotherm, the model assumes the user has fit breakthrough data to the Clark model. The general solution evaluated at 50% breakthrough is:
The form often fit to breakthrough data is:
The full derivation for both equations is provided in Croll et al. (2023).
Ports
The model provides three ports (Pyomo notation in parenthesis):
Inlet port (inlet)
Outlet port (outlet)
Regeneration port (regen)
Sets
The table below outlines example Sets that could be used with the ion exchange model.
“Components” is a subset of “Ions” and uses the same symbol j
.
They can include any ion as long as the ion is configured into the property package.
target_ion_set
includes the component to be removed via the ion exchange process.
The current model implementation is only for a single component, but target_ion_set
is included for future development of a multi-component model.
Description |
Symbol |
Example Indices |
---|---|---|
Time |
\(t\) |
|
Phases |
\(p\) |
|
Components |
\(j\) |
|
Ions |
\(j\) |
|
Target Ion |
\(j\) |
|
In this example, the influent stream contains H2O
(always included), Cation_+
, Anion_-
, and an uncharged component Inert
.
The user would specify the concentration of each as part of the property package in the model build.
The charged components are included in “Ions”, a subset of “Components”. The model is configured as a cation exchange process since target_ion_set
contains a positively
charged component, Cation_+
.
Model Components
The ion exchange model includes many variables, parameters, and expressions that are common to both the
langmuir
and freundlich
isotherm configurations. These are provided in the table below.
Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|
Variables |
||||
Inlet temperature |
\(T\) |
|
|
\(\text{K}\) |
Inlet pressure |
\(p\) |
|
|
\(\text{Pa}\) |
Component molar flow rate |
\(N_j\) |
|
|
\(\text{mol/s}\) |
Control volume mass transfer term |
\(\dot{m}_j\) |
|
|
\(\text{mol/s}\) |
Service flow rate through resin bed in bed volumes per hour |
\(SFR\) |
|
None |
\(\text{hr}^{-1}\) |
Linear velocity through bed |
\(u_{bed}\) |
|
None |
\(\text{m/s}\) |
Interstitial velocity through bed |
\(u_{inter}\) |
|
None |
\(\text{m/s}\) |
Number of operational columns |
\(n_{op}\) |
|
None |
\(\text{dimensionless}\) |
Number of redundant columns |
\(n_{red}\) |
|
None |
\(\text{dimensionless}\) |
Bed depth |
\(Z\) |
|
None |
\(\text{m}\) |
Column height |
\(H_{col}\) |
|
None |
\(\text{m}\) |
Column diameter |
\(D_{col}\) |
|
None |
\(\text{m}\) |
Column height to diameter ratio |
\(R_{HD}\) |
|
None |
\(\text{dimensionless}\) |
Total bed volume |
\(V_{res, tot}\) |
|
None |
\(\text{m}^3\) |
Resin bead diameter |
\(d\) |
|
None |
\(\text{m}\) |
Resin bulk density |
\(\rho_{b}\) |
|
None |
\(\text{kg/L}\) |
Resin surface area per volume |
\(a_{s}\) |
|
None |
\(\text{m}^{-1}\) |
Bed porosity |
\(\varepsilon\) |
|
None |
\(\text{dimensionless}\) |
Number of cycles before regenerant disposal |
\(N_{regen}\) |
|
None |
\(\text{dimensionless}\) |
Relative breakthrough concentration at breakthrough time |
\(X\) |
|
|
\(\text{dimensionless}\) |
Breakthrough time |
\(t_{break}\) |
|
None |
\(\text{s}\) |
Empty Bed Contact Time (EBCT) |
\(EBCT\) |
|
None |
\(\text{s}\) |
Reynolds number |
\(Re\) |
|
None |
\(\text{dimensionless}\) |
Schmidt number |
\(Sc\) |
|
|
\(\text{dimensionless}\) |
Sherwood number |
\(Sh\) |
|
|
\(\text{dimensionless}\) |
Peclet particle number |
\(Pe_{p}\) |
|
None |
\(\text{dimensionless}\) |
Peclet bed number |
\(Pe_{bed}\) |
|
None |
\(\text{dimensionless}\) |
Parameters |
||||
Regeneration time |
\(t_{regen}\) |
|
None |
\(\text{s}\) |
Backwash time |
\(t_{bw}\) |
|
None |
\(\text{s}\) |
Backwash loading rate |
\(u_{bw}\) |
|
None |
\(\text{m/hr}\) |
Number of bed volumes for rinse step |
\(N_{rinse}\) |
|
None |
\(\text{dimensionless}\) |
Pump efficiency |
\(\eta\) |
|
None |
\(\text{dimensionless}\) |
Service-to-regeneration flow ratio |
\(R\) |
|
None |
\(\text{dimensionless}\) |
Pressure drop equation intercept |
\(p_{drop,A}\) |
|
None |
\(\text{dimensionless}\) |
Pressure drop equation B |
\(p_{drop,B}\) |
|
None |
\(\text{dimensionless}\) |
Pressure drop equation C |
\(p_{drop,C}\) |
|
None |
\(\text{dimensionless}\) |
Bed expansion fraction equation intercept |
\(H_{expan,A}\) |
|
None |
\(\text{dimensionless}\) |
Bed expansion fraction equation B parameter |
\(H_{expan,B}\) |
|
None |
\(\text{dimensionless}\) |
Bed expansion fraction equation C parameter |
\(H_{expan,C}\) |
|
None |
\(\text{dimensionless}\) |
Expressions |
||||
Fraction of bed depth increase during backwashing |
\(X_{expan}\) |
|
None |
\(\text{dimensionless}\) |
Additional column sidewall height required for bed expansion |
\(H_{expan}\) |
|
None |
\(\text{dimensionless}\) |
Backwashing volumetric flow rate |
\(Q_{bw}\) |
|
None |
\(\text{m}^{3}\text{/s}\) |
Rinse time |
\(t_{rinse}\) |
|
None |
\(\text{s}\) |
Rinse volumetric flow rate |
\(Q_{rinse}\) |
|
None |
\(\text{m}^{3}\text{/s}\) |
Regen + Rinse + Backwash time |
\(t_{waste}\) |
|
None |
\(\text{s}\) |
Cycle time |
\(t_{cycle}\) |
|
None |
\(\text{s}\) |
Bed volume of one unit |
\(V_{res}\) |
|
None |
\(\text{m}^{3}\) |
Column volume of one unit |
\(V_{col}\) |
|
None |
\(\text{m}^{3}\) |
Total column volume |
\(V_{col, tot}\) |
|
None |
\(\text{m}^{3}\) |
Bed volumes of throughput at breakthrough |
\(BV\) |
|
None |
\(\text{dimensionless}\) |
Regeneration solution tank volume |
\(V_{regen}\) |
|
None |
\(\text{m}^{3}\) |
Pressure drop through resin bed |
\(p_{drop}\) |
|
None |
\(\text{psi}\) |
Power of main booster pump |
\(P_{main}\) |
|
None |
\(\text{kW}\) |
Regen pump power |
\(P_{regen}\) |
|
None |
\(\text{kW}\) |
Backwash pump power |
\(P_{bw}\) |
|
None |
\(\text{kW}\) |
Rinse pump power |
\(P_{rinse}\) |
|
None |
\(\text{kW}\) |
If isotherm
is set to langmuir
, the model includes the following components:
Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|
Variables |
||||
Langmuir equilibrium parameter for resin/ion system |
\(La\) |
|
|
\(\text{dimensionless}\) |
Maximum resin capacity |
\(q_{max}\) |
|
None |
\(\text{mol/kg}\) |
Equilibrium resin capacity |
\(q_{eq}\) |
|
None |
\(\text{mol/kg}\) |
Unused resin capacity |
\(q_{un}\) |
|
None |
\(\text{mol/kg}\) |
Sorbed mass of ion |
\(M_{out}\) |
|
|
\(\text{mol}\) |
Number of transfer units |
\(N\) |
|
None |
\(\text{dimensionless}\) |
Dimensionless time |
\(\tau\) |
|
None |
\(\text{dimensionless}\) |
Partition ratio |
\(\Lambda\) |
|
None |
\(\text{dimensionless}\) |
Fluid mass transfer coefficient |
\(k_{f}\) |
|
|
\(\text{m/s}\) |
Mass removed during service |
\(M_{rem,j}\) |
|
|
\(\text{mol}\) |
If isotherm
is set to freundlich
, the model includes the following components:
Description |
Symbol |
Variable Name |
Index |
Units |
---|---|---|---|---|
Variables |
||||
Freundlich isotherm exponent for resin/ion system |
\(n\) |
|
None |
\(\text{dimensionless}\) |
Bed volumes at breakthrough |
\(BV\) |
|
None |
\(\text{dimensionless}\) |
Bed volumes at 50% influent conc. |
\(BV_{50}\) |
|
None |
\(\text{dimensionless}\) |
Mass transfer coefficient |
\(k_T\) |
|
None |
\(\text{s}^{-1}\) |
Average relative breakthrough concentration at breakthrough time |
\(X_{avg}\) |
|
None |
\(\text{dimensionless}\) |
Relative breakthrough conc. for trapezoids |
\(X_{trap,k}\) |
|
|
\(\text{dimensionless}\) |
Breakthrough times for trapezoids |
\(t_{trap,k}\) |
|
|
\(\text{s}\) |
Area of trapezoids |
\(A_{trap,k}\) |
|
|
\(\text{dimensionless}\) |
Degrees of Freedom
Aside from the inlet feed state variables (temperature, pressure, component molar flowrate), the user must specify an additional 9 degrees of freedom
for both the langmuir
and freundlich
isotherm model configurations to achieve a fully specified model (i.e., zero degrees of freedom).
Depending on the data available to the user and the objectives of the modeling exercise, different combinations of variables can be fixed to achieve
zero degrees of freedom.
For either model configuration, the user can fix the following variables:
resin_diam
resin_bulk_dens
bed_porosity
service_flow_rate
(alternatively,vel_bed
)bed_depth
number_columns
Langmuir DOF
If isotherm
is set to langmuir
, the additional variables to fix are:
langmuir
resin_max_capacity
dimensionless_time
(can be fixed to default value of 1)
Freundlich DOF
If isotherm
is set to freundlich
, the additional variables to fix are:
freundlich_n
bv
c_norm
one of
bv_50
ormass_transfer_coeff
as determined from Clark model equations
Solution Component Information
The IonExchange0D model is designed to work with WaterTAP’s Multi-component aqueous solution (MCAS) property package. In addition to providing a list of solute ions, users must provide parameter information for each ion including molecular weight, diffusivity data, and charge data. An example of how this data is used to build a model is provided below.
target_ion = "Ca_2+"
ion_props = {
"solute_list": [target_ion],
"diffusivity_data": {("Liq", target_ion): 9.2e-10},
"mw_data": {"H2O": 0.018, target_ion: 0.04},
"charge": {target_ion: 2},
}
m = ConcreteModel()
m.fs = FlowsheetBlock(dynamic=False)
m.fs.properties = MCASParameterBlock(**ion_props)
ix_config = {
"property_package": m.fs.properties,
"target_ion": target_ion,
}
m.fs.ix = IonExchange0D(**ix_config)
Equations and Relationships
Description |
Equation |
---|---|
Common |
|
Service flow rate |
\(SFR = \frac{Q_{p, in}}{V_{res, tot}}\) |
Total bed volume |
\(V_{res, tot} = V_{bed}n_{op}\) |
Flow through bed constraint |
\(\frac{Z}{u_{bed}} = \frac{V_{res, tot}}{Q_{p, in}}\) |
Total resin volume required |
\(V_{res, tot} = Z \pi \frac{D_{col}^2}{4} n_{op}\) |
Volume of single column |
\(V_{col} = H_{col} \frac{V_{bed}}{Z}\) |
Total column volume required |
\(V_{col, tot} = n_{op}V_{col}\) |
Column height to diameter ratio |
\(R_{HD} = \frac{H_{col}}{D_{col}}\) |
Column height |
\(H_{col} = Z + H_{distributor} + H_{underdrain} + H_{expan}\) |
Interstitial velocity |
\(u_{inter} = \frac{u_{bed}}{\varepsilon}\) |
Contact time |
\(t_{contact} = EBCT \varepsilon\) |
Empty bed contact time |
\(EBCT = \frac{Z}{u_{bed}}\) |
Regeneration tank volume |
\(V_{regen} = t_{regen} (Q_{p, in} / R)\) |
Bed expansion fraction from backwashing (T = 20C) |
\(X_{expan} = H_{expan,A} + H_{expan,B}u_{bw} + H_{expan,C}u_{bw}^{2}\) |
Bed expansion from backwashing |
\(H_{expan} = X_{expan}Z\) |
Regen volumetric flow rate |
\(Q_{regen} = \frac{Q_{p, in}N_{regen}}{R}\) |
Backwashing flow rate |
\(Q_{bw} = u_{bw} \frac{V_{bed}}{Z}n_{op}\) |
Rinse flow rate |
\(Q_{rinse} = u_{bed} \frac{V_{bed}}{Z}n_{op}\) |
Main pump power |
\(P_{main} = \frac{g \rho_{in} p_{drop}Q_{p, in}}{\eta} \Big( \frac{t_{break}}{t_{cycle}} \Big)\) |
Regen pump power |
\(P_{regen} = \frac{g \rho_{in} p_{drop}Q_{regen}}{\eta} \Big( \frac{t_{regen}}{t_{cycle}} \Big)\) |
Rinse pump power |
\(P_{rinse} = \frac{g \rho_{in} p_{drop}Q_{rinse}}{\eta} \Big( \frac{t_{rinse}}{t_{cycle}} \Big)\) |
Backwash pump power |
\(P_{bw} = \frac{g \rho_{in} p_{drop}Q_{bw}}{\eta} \Big( \frac{t_{bw}}{t_{cycle}} \Big)\) |
Pressure drop (T = 20C) |
\(p_{drop} = Z(p_{drop,A} + p_{drop,B}u_{bed} + p_{drop,C}u_{bed}^{2})\) |
Rinse time |
\(t_{rinse} = EBCT N_{rinse}\) |
Waste time |
\(t_{waste} = t_{regen} + t_{bw} + t_{rinse}\) |
Cycle time |
\(t_{cycle} = t_{break} + t_{waste}\) |
Reynolds number |
\(Re = \frac{u_{bed}d}{\mu}\) |
Schmidt number |
\(Sc = \frac{\mu}{D}\) |
Sherwood number |
\(Sh = 2.4 \varepsilon^{0.66} Re^{0.34} Sc^{0.33}\) |
Bed Peclet number |
\(Pe_{bed} = Pe_{p} \frac{Z}{d}\) |
Particle Peclet number |
\(Pe_{p} = 0.05 Re^{0.48}\) |
Resin surface area per vol |
\(a_{s} = 6 \frac{1-\varepsilon}{d}\) |
Langmuir |
|
Langmuir isotherm |
\(\frac{C_{b}}{C_{0}} (1-\frac{q_{eq}}{q_{max}}) = La (1-\frac{C_{b}}{C_{0}})\frac{q_{eq}}{q_{max}}\) |
Constant pattern solution for Langmuir isotherm |
\(N(\tau - 1) = 1 + \frac{\log{(C_{b}/C_{0})} - La \log{(1 - C_{b}/C_{0})}}{1 - La}\) |
Resin capacity mass balance |
\(q_{max} = q_{avail} + q_{eq}\) |
Partition ratio |
\(\Lambda = \frac{q_{eq} \rho_{b}}{C_{0}}\) |
Fluid mass transfer coeff |
\(k_{f} = \frac{D Sh}{d}\) |
Number of mass-transfer units |
\(N = \frac{k_{f}a_{s}Z}{u_{bed}}\) |
Dimensionless time |
\(\tau = (\frac{u_{inter}t_{break} \varepsilon}{Z} - \varepsilon) / \Lambda\) |
Height of transfer unit |
\(HTU = \frac{u_{bed}}{\rho_{b}k}\) |
Rate coefficient |
\(k = 6 \frac{(1-\varepsilon)k_{f}}{\rho_{b}d}\) |
Mass removed |
\(M_{rem,j} = V_{res,tot}q_{eq} \rho_{b}\) |
Mass transfer term |
\(\dot{m}_j = -M_{rem,j} / t_{break}\) |
Freundlich |
|
Breakthrough concentration |
\(X = \frac{C_b}{C_0}\) |
Bed volumes at breakthrough concentration |
\(BV = \frac{t_{break} u_{bed}}{Z}\) |
Clark equation with fundamental constants |
\(X = \frac{1}{\bigg(1 + (2^{n - 1} - 1)\text{exp}\bigg[\frac{k_T Z (n - 1)}{BV_{50} u_{bed}} (BV_{50} - BV)\bigg]\bigg)^{\frac{1}{n-1}}}\) |
Evenly spaced c_norm for trapezoids |
\(X_{trap,k} = X_{trap,min} + (k - 1) \frac{X - X_{trap,min}}{n_{trap} - 1}\) |
Breakthru time calculation for trapezoids |
\(t_{trap,k} = - \log{\frac{X_{trap,k}^{n-1}-1}{A}} / k_T\) |
Area of trapezoids |
\(A_{trap,k} = \frac{t_{trap,k} - t_{trap,k - 1}}{t_{trap,n_{trap}}} \frac{X_{trap,k} + X_{trap,k - 1}}{2}\) |
Average relative effluent concentration |
\(X_{avg} = \sum{A_{trap,k}}\) |
Mass transfer term |
\(\dot{m}_j = -(1 - X_{avg}) N_j\) |