Skip to content

Latest commit

 

History

History
323 lines (273 loc) · 19.7 KB

ion_exchange_0D.rst

File metadata and controls

323 lines (273 loc) · 19.7 KB

Ion Exchange (0D)

.. index::
   pair: watertap.unit_models.ion_exchange_0D;ion_exchange_0D

The main assumptions of the implemented model are as follows:

  1. Model dimensionality is limited to a 0D control volume
  2. Single liquid phase only
  3. Steady state only
  4. Single solute and single solvent (water) only
  5. Plug flow conditions
  6. Isothermal conditions
  7. Constant separation-factor treatment with favorable Langmuir 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: (1) service, i.e., treatment, (2) backwashing, (3) regeneration, (4) 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.

Ports

The model provides three ports (Pyomo notation in parenthesis):

  • Inlet port (inlet)
  • Outlet port (outlet)
  • Regen port (regen)

Sets

Description Symbol Indices
Time t [0]
Phases p ['Liq']
Components j ['H2O', 'Na_+', 'Ca_2+', 'Cl_-', 'Mg2+', 'SO4_2-', 'PFAS_-', 'Hardness_2+']
Ions j ['Na_+', 'Ca_2+', 'Cl_-', 'Mg2+', 'SO4_2-', 'PFAS_-', 'Hardness_2+']*

*"Ion" is a subset of "Component" and uses the same symbol j. NOTE:The "Components" and "Ions" lists can include any ion as long as the ion is configured into the property package.

Degrees of Freedom

Aside from the inlet feed state variables (i.e., temperature, pressure, component molar flowrate),

the Ion Exchange (0D) model has at least an additional 27 degrees of freedom that the user must specify. The table below gives an outline of these.

Description Symbol Variable Name Index Units
Inlet temperature T temperature [t] \text{K}
Inlet pressure P pressure [t] \text{Pa}
Component molar flow rate N_j flow_mol_phase_comp [t, 'Liq', 'H2O'] \text{mol/s}
Langmuir equilibrium parameter for resin/ion system La langmuir target_ion_set \text{dimensionless}
Maximum resin capacity q_{max} resin_max_capacity None \text{mol/kg}
Service flow rate through resin bed in bed volumes per hour SFR service_flow_rate None \text{hr}^{-1}
Number of operational columns n_{op} number_columns None \text{dimensionless}
Number of redundant columns n_{red} number_columns_redund None \text{dimensionless}
Bed depth Z bed_depth None \text{m}
Resin bead diameter d resin_diam None \text{m}
Resin bulk density \rho_{b} resin_bulk_dens None \text{kg/L}
Bed porosity \epsilon bed_porosity None \text{dimensionless}
Dimensionless time \tau dimensionless_time None \text{dimensionless}
Regenerant dose per volume of resin C_{regen} regen_dose None \text{kg/}\text{m}^3
Number of cycles before regenerant disposal N_{regen} regen_recycle None \text{dimensionless}
Regeneration time t_{regen} t_regen None \text{s}
Backwash time t_{bw} t_bw None \text{s}
Backwash loading rate u_{bw} bw_rate None \text{m/hr}
Number of bed volumes for rinse step N_{rinse} rinse_bv None \text{dimensionless}
Pump efficiency \eta pump_efficiency None \text{dimensionless}
Pressure drop equation intercept P_{drop,A} p_drop_A None \text{dimensionless}
Pressure drop equation B P_{drop,B} p_drop_B None \text{dimensionless}
Pressure drop equation C P_{drop,C} p_drop_C None \text{dimensionless}
Bed expansion fraction eq intercept H_{expan,A} bed_expansion_frac_A None \text{dimensionless}
Bed expansion fraction equation B parameter H_{expan,B} bed_expansion_frac_B None \text{dimensionless}
Bed expansion fraction equation C parameter H_{expan,C} bed_expansion_frac_C None \text{dimensionless}
Service-to-regeneration flow ratio R service_to_regen_flow_ratio None \text{dimensionless}

Users must provide values for and 'fix' the following variables to solve the model with DOF=0: 'pressure', 'temperature', 'flow_mol_phase_comp', 'langmuir', 'resin_max_capacity', 'service_flow_rate', 'number_columns', and 'bed_depth'. The other variables can simply be fixed to their default values ('.fix()').

NOTE: Variables for 'temperature', 'pressure', and 'flow_mol_phase_comp' come from the associated property package as state variables and are accessed via {port_name}.{state_var_name}

Variables

Description Symbol Variable Name Index Units
Resin Variables        
Maximum resin capacity q_{max} resin_max_capacity None \text{mol/kg}
Usable resin capacity at equilibrium q_{eq} resin_eq_capacity None \text{mol/kg}
Available resin capacity at equilibrium q_{avail} resin_unused_capacity None \text{dimensionless}
Resin bead diameter d resin_diam None \text{m}
Resin bulk density \rho_{b} resin_bulk_dens None \text{kg/L}
Resin particle density \rho_{p} resin_particle_dens None \text{dimensionless}
Separation factor \alpha separation_factor target_ion_set \text{dimensionless}
Resin surface area per volume a_{s} resin_surf_per_vol None \text{m}^{-1}
Langmuir equilibrium parameter for resin/ion system La langmuir target_ion_set \text{dimensionless}
         
Bed/Column Variables        
Ratio of bed depth to column diameter X bed_depth_to_diam_ratio None \text{dimensionless}
Bed volume of one unit V_{bed} bed_vol None \text{m}^{3}
Total bed volume V_{tot} bed_vol_tot None \text{m}^{3}
Bed depth Z bed_depth None \text{m}
Bed porosity \epsilon bed_porosity None \text{dimensionless}
Column height H col_height None \text{m}
Column diameter D_{col} col_diam None \text{m}
Column volume of one unit V_{col} col_vol_per None \text{m}^{3}
Total column volume V_{col, tot} col_vol_tot None \text{m}^{3}
Number of operational columns n_{op} number_columns None \text{dimensionless}
Number of redundant columns n_{red} number_columns_redund None \text{dimensionless}
Underdrain height H_{underdrain} underdrain_h None \text{m}
Distributor height H_{distributor} distributor_h None \text{m}
         
Kinetic Variables        
Partition ratio \Lambda partition_ratio None \text{dimensionless}
Fluid mass transfer coefficient k_{f} fluid_mass_transfer_coeff target_ion_set \text{m/s}
Rate coefficient based on fluid-phase concentration driving force k rate_coeff target_ion_set \text{m}^{3}\text{kg*s}
Number of transfer units N num_transfer_units None \text{dimensionless}
Height of a transfer unit HTU HTU target_ion_set \text{m}
Position of breakthrough on constant-pattern wave lh lh None \text{dimensionless}
Influent mass of ion M_{in} mass_in target_ion_set \text{mol}
Sorbed mass of ion M_{out} mass_removed target_ion_set \text{mol}
Effluent mass of ion M_{rem} mass_out target_ion_set \text{mol}
         
Hydrodynamic Variables        
Service flow rate through resin bed in bed volumes per hour SFR service_flow_rate None \text{hr}^{-1}
Velocity through resin bed u_{bed} vel_bed None \text{m/s}
Interstitial velocity u_{inter} vel_inter None \text{m/s}
Holdup percent holdup holdup None \text{dimensionless}
Pressure drop through resin bed P_{drop} pressure_drop None \text{psi}
Pressure drop equation intercept P_{drop,A} p_drop_A None \text{dimensionless}
Pressure drop equation B P_{drop,B} p_drop_B None \text{dimensionless}
Pressure drop equation C P_{drop,C} p_drop_C None \text{dimensionless}
         
Time Variables        
Rinse time t_{rinse} t_rinse None \text{s}
Dimensionless time \tau dimensionless_time None \text{dimensionless}
Breakthrough time t_{breakthru} t_breakthru None \text{s}
Cycle time t_{cycle} t_cycle None \text{s}
Contact time t_{contact} t_contact None \text{s}
Regen + Rinse + Backwash time t_{waste} t_waste None \text{s}
Regeneration time t_{regen} t_regen None \text{s}
Backwash time t_{bw} t_bw None \text{s}
         
Dimensionless Variables        
Reynolds number Re Re None \text{dimensionless}
Schmidt number Sc Sc target_ion_set \text{dimensionless}
Sherwood number Sh Sh target_ion_set \text{dimensionless}
Peclet particle number Pe_{p} Pe_p None \text{dimensionless}
Peclet bed number Pe_{bed} Pe_bed None \text{dimensionless}
Ratio of breakthrough concentration to influent concentration C_{b}/C_{0} c_norm target_ion_set \text{dimensionless}
         
Regeneration Variables        
Service-to-regeneration flow ratio R service_to_regen_flow_ratio None \text{dimensionless}
Number of cycles before regenerant disposal N_{regen} regen_recycle None \text{dimensionless}
Regenerant dose per volume of resin C_{regen} regen_dose None \text{kg/}\text{m}^3
         
Backwashing Variables        
Backwashing volumetric flow rate Q_{bw} bw_flow None \text{m}^{3}\text{/s}
Backwash loading rate u_{bw} bw_rate None \text{m/hr}
Fraction of bed depth increase during backwashing X_{expan} bed_expansion_frac None \text{dimensionless}
Additional column sidewall height required for bed expansion H_{expan} bed_expansion_h None \text{dimensionless}
Bed expansion fraction eq intercept H_{expan,A} bed_expansion_frac_A None \text{dimensionless}
Bed expansion fraction equation B parameter H_{expan,B} bed_expansion_frac_B None \text{dimensionless}
Bed expansion fraction equation C parameter H_{expan,C} bed_expansion_frac_C None \text{dimensionless}
         
Rinsing Variables        
Rinse volumetric flow rate Q_{rinse} rinse_flow None \text{m}^{3}\text{/s}
Number of bed volumes for rinse step N_{rinse} rinse_bv None \text{dimensionless}
Power of main booster pump P_{main} main_pump_power None \text{kW}
Regen pump power P_{regen} regen_pump_power None \text{kW}
Backwash pump power P_{bw} bw_pump_power None \text{kW}
Rinse pump power P_{rinse} rinse_pump_power None \text{kW}
Assumed efficiency for all pumps \eta pump_efficiency None \text{dimensionless}

Solution Component Information

In addition to providing a list of solute ions, the users will need to provide parameter information for each ion including molecular weight, diffusivity data, and charge data.

To provide this information to the unit model, users must add dictionaries to the initialization of the unit model. These dictionaries must have the following format.

def get_ix_in(ions):
 diff_data = {
     "Na_+": 1.33e-9,
     "Ca_2+": 9.2e-10,
     "Cl_-": 2.03e-9,
     "Mg_2+": 0.706e-9,
     "SO4_2-": 1.06e-9,
     "PFAS_-": 0.49e-9,
     "Hardness_2+": 0.706e-9,
 }
 mw_data = {
     "Na_+": 23e-3,
     "Ca_2+": 40e-3,
     "Cl_-": 35e-3,
     "Mg_2+": 24e-3,
     "SO4_2-": 96e-3,
     "PFAS_-": 414.1e-3,
     "Hardness_2+": 100.0869e-3,
 }
 charge_data = {
     "Na_+": 1,
     "Ca_2+": 2,
     "Cl_-": -1,
     "Mg_2+": 2,
     "SO4_2-": -2,
     "PFAS_-": -1,
     "Hardness_2+": 2,
 }
 ix_in = {
     "solute_list": [],
     "diffusivity_data": {},
     "mw_data": {"H2O": 18e-3},
     "charge": {},
 }
 for ion in ions:
     ix_in["solute_list"].append(ion)
     ix_in["diffusivity_data"][("Liq", ion)] = diff_data[ion]
     ix_in["mw_data"][ion] = mw_data[ion]
     ix_in["charge"][ion] = charge_data[ion]
 return ix_in

NOTE: 'ions' is an ion_set, which is a configuration argument of the property package as shown below

ions = m.fs.unit.config.property_package.ion_set

NOTE: The above example assumes you have already constructed a pyomo model named 'm' and attached an IDAES flowsheet named 'fs' to it.

Equations and Relationships

Description Equation
Separation factor \alpha = \frac{1}{La}
Langmuir isotherm \alpha \frac{C_{b}}{C_{0}} (1-\frac{q_{eq}}{q_{max}}) = (1-\frac{C_{b}}{C_{0}})\frac{q_{eq}}{q_{max}}
Reynolds number Re = \frac{u_{bed}d}{\mu}
Schmidt number Sc = \frac{\mu}{D}
Sherwood number Sh = \frac{1.09}{\epsilon}Re^{0.33}Sc^{0.33}
Bed Peclet number Pe_{bed} = Pe_{p} \frac{Z}{d}
Particle Peclet number Pe_{p} = 0.05 Re^{0.48}
Resin capacity mass balance q_{max} = q_{avail} + q_{eq}
Interstitial velocity u_{inter} = \frac{u_{bed}}{\epsilon}
Resin surface area per vol a_{s} = 6 \frac{1-\epsilon}{d}
Contact time t_{contact} = \frac{Z}{u_{inter}}
Service flow rate SFR = \frac{Q_{p, in}}{V_{tot}}
Flow through bed constraint \frac{Z \epsilon}{u_{bed}} = \frac{V_{bed} \epsilon}{Q_{p, in} / n_{op}}
Total bed volume V_{tot} = V_{bed}n_{op}
Column height H = Z + H_{distributor} + H_{underdrain} + H_{expan}
Column volume calculated from bed volume V_{col} = H \frac{V_{bed}}{Z}
Column volume calculated from column diameter V_{col} = \pi (\frac{D_{col}}{2})^{2} H
Column diameter calculation (\frac{D_{col}}{2})^{2} = (\frac{H}{2X})^{2}
Fluid mass transfer coeff k_{f} = \frac{D Sh}{d}
Rate coefficient k = 6 \frac{(1-\epsilon)k_{f}}{\rho_{b}d}
Height of transfer unit HTU = \frac{u_{bed}}{\rho_{b}k}
Partition ratio \Lambda = \frac{q_{eq} \rho_{b}}{ñ_{in}}
Left hand side of constant pattern solution lh = N(\tau - 1)
Right hand side of constant pattern solution lh = 1 + \frac{\log{(C_{b}/C_{0})} - La \log{(1 - C_{b}/C_{0})}}{1 - La}
Dimensionless time \tau = (\frac{u_{inter}t_{breakthru} \epsilon}{Z} - \epsilon) / \Lambda
Number of mass-transfer units N = \frac{k_{f}a_{s}Z}{u_{bed}}
Flow conservation Q_{p, in} - \frac{Q_{bw}t_{bw} + Q_{rinse}t_{rinse}}{t_{cycle}} = Q_{p, out} - \frac{Q_{regen}t_{regen}}{t_{cycle}}
Influent total mass of ion M_{in} = Q_{p, in}t_{breakthru}ñ_{in}
Removed total mass of ion M_{rem} = V_{bed}q_{eq}n_{op} \rho_{b}
Mass of ion in effluent M_{out} = M_{in} - M_{rem}
Steady-state effluent concentration (for target ion) ñ_{out} = \frac{M_{out}}{Q_{p, in}t_{breakthru}}
Steady-state effluent concentration ñ_{out} = ñ_{in}
Steady-state regen concentration (for target ion) ñ_{regen} = \frac{M_{rem}N_{regen}}{Q_{p, regen}t_{regen}}
Steady-state regen concentration ñ_{regen} = 0
Cycle time t_{cycle} = t_{breakthru} + t_{waste}
Waste time t_{waste} = t_{regen} + t_{bw} + t_{rinse}
Regen volumetric flow rate Q_{p, regen} = \frac{Q_{p, in}N_{regen}}{R}
Regen pump power P_{regen} = \frac{9.81 \rho_{in} 0.70325P_{drop}Q_{p, regen}}{\eta}
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
Backwashing flow rate Q_{bw} = u_{bw} \frac{V_{bed}}{Z}n_{op}
Backwash pump power P_{bw} = \frac{9.81 \rho_{in} 0.70325P_{drop}Q_{bw}}{\eta}
Rinse time t_{rinse} t_{contact} + N_{rinse}
Rinse flow rate Q_{rinse} = u_{bed} \frac{V_{bed}}{Z}n_{op}
Rinse pump power P_{rinse} = \frac{9.81 \rho_{in} 0.70325P_{drop}Q_{rinse}}{\eta}
Main pump power P_{main} = \frac{9.81 \rho_{in} 0.70325P_{drop}Q_{p, in}}{\eta}
Pressure drop (T = 20C) P_{drop} = Z(P_{drop,A} + P_{drop,B}u_{bed} + P_{drop,C}u_{bed}^{2})
Total column volume required V_{col, tot} = n_{op}V_{col}

References

Hand, D. W., Crittenden, J. C., & Thacker, W. E. (1984). Simplified models for design of fixed-bed adsorption systems. Journal of Environmental Engineering, 110(2), 440-456.

Crittenden, J., Rhodes, R., Hand, D., Howe, K., & Tchobanoglous, G. (2012). MWHs Water Treatment. Principles and Design. EditorialJohn Wiley & Sons.

LeVan, M. D., Carta, G., & Yon, C. M. (2019). Section 16: Adsorption and Ion Exchange. Perry's Chemical Engineers' Handbook, 9th Edition.

Inamuddin, & Luqman, M. (2012). Ion Exchange Technology I: Theory and Materials.