PhreeqcUsers Discussion Forum

Registrations currently disabled due to excessive spam. Please email phreeqcusers at gmail.com to request an account.
Welcome Guest
 

  • Forum Home
  • Login
  • Register

  • PhreeqcUsers Discussion Forum »
  • Processes »
  • Reactive transport modelling »
  • Water cleaning by air stripping
« previous next »
  • Print
Pages: [1]   Go Down

Author Topic: Water cleaning by air stripping  (Read 11419 times)

MichaelZ20

  • Top Contributor
  • Posts: 174
Water cleaning by air stripping
« on: 30/11/21 16:56 »
There is a 10-m column filled with water polluted by Benzine. I want to model its cleaning by bubbling air at a pressure of 2 atm. This is neither fixed_volume, nor fixed_gas problem.
I thought that by representing all the bubbles as a giant bubble in equilibrium with the solution and changing the bubble volume, I could get an estimate of the volume of bubbling that provides the required standard benzine concentration. I am confused by setting the problem: should it be the fixed_volume problem?
I attach my input file and will be much grateful for any advice.
Logged

dlparkhurst

  • Global Moderator
  • *****
  • Posts: 4296
Re: Water cleaning by air stripping
« Reply #1 on: 30/11/21 19:19 »
Interesting question. Here is my take, assuming your Benzene(g) definitions are correct. I consider the volume of gas that exits the top of the column at 1 atm and assume the gas is in equilibrium with dissolved benzene for a well-mixed reservoir of 1 liter. The actual system is more complicated and probably depends on bubble size/surface area and liquid-gas transfer rates, possibly as a function of pressure.

I have the gas phase as fixed volume gas and ignore the other constituents in the gas phase. The script equilibrates 1 liter of water with 0.1 liter of benzene-free gas. Some benzene transfers from liquid to gas. The gas is removed and the liquid is retained for equilibration with another volume of gas. Ideally, it looks like a liter (0.8 L in the graph) of gas per liter of water would be sufficient. The result may depend somewhat on the incremental volume of gas you choose (0.1 L here), but the kinetics of the liquid-water exchange is probably a much bigger unknown. The total volume of gas would scale according to the volume of your 10-m column.

Code: [Select]
TITLE Cleaning water from benzene pollution by air stripping
SOLUTION_MASTER_SPECIES
#element species alk gfw_formula element_gfw
Benzene         Benzene  0.0     C6H6            78.115

SOLUTION_SPECIES
Benzene = Benzene
log_k 0
delta_h 0 kcal

PHASES
Benzene(g)
  Benzene = Benzene
log_k -2.727   # log(K_Henry in mol/L/Atm)
delta_h 8.097 kcal
T_c  288.85; -P_c   48.3; -Omega 0.212
END
GAS_PHASE 1
-pressure 1             # external pressure at the top of the colomn?         
-fixed_volume             
-volume         0.1    # L
Benzene(g)     0
END
USER_GRAPH 1
    -headings               vol Dissolved_benzene Standard Gas_benzene
    -axis_titles            "Liter gas per liter of water" "Dissolved Benzene, mg/L" "Gas-phase Benzene, moles"
    -axis_scale y_axis      auto auto auto auto log
    -axis_scale sy_axis     auto auto auto auto log
    -initial_solutions      true
    -connect_simulations    true
    -plot_concentration_vs  x
  -start
10 PUT(GET(1) + (GAS("Benzene(g)") > 0) * 0.1, 1)
20 GRAPH_X GET(1)
30 GRAPH_Y TOT("Benzene")*GFW("Benzene")*1000, 0.005
40 GRAPH_SY GAS("Benzene(g)")
  -end
END
SOLUTION 1 Water polluted with benzene
units mmol/kgw
pH 7 charge
temp 25
Benzene 1     # 78.1 mg/kgw (at the standard for drinking water <0.005 mg/L)
water 1       # kg
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
USE SOLUTION 1
USE GAS_PHASE 1
SAVE solution 1     
END
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #2 on: 30/11/21 21:26 »
Thank you, David!
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #3 on: 03/12/21 22:08 »
Dear David,
Can you please explain line 10 in the USER_GRAPH?
Thank you in advance.
Logged

dlparkhurst

  • Global Moderator
  • *****
  • Posts: 4296
Re: Water cleaning by air stripping
« Reply #4 on: 04/12/21 05:05 »
Code: [Select]
10 PUT(GET(1) + (GAS("Benzene(g)") > 0) * 0.1, 1)

There may be better ways to set the X value for plotting, but this was quick and dirty. "(GAS("Benzene(g)") > 0)" is a logical expression and will take on the value of 0 if it is false [that is GAS("Benzene(g)") <= 0] and 1 if true.

The first calculation after the USER_GRAPH definition is an initial solution calculation, so the value of GAS("Benzene(g)") will be zero, and GET(1) will equal zero if there has been no PUT(1). At this point, the solution has not reacted with a gas phase, so the cumulative volume of gas is zero, and the first X plotting location is zero.

All of the rest of the calculations have GAS_PHASE and GAS("Benzene(g)") will be greater than zero, so at each subsequent calculation the PUT statement will increment by 0.1--the volume of gas introduced at each step, with the result that the plotting location will be equal to the cumulative volume of gas introduced to the system.



Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #5 on: 04/12/21 07:18 »
Dear David,
Thank you for the explanation.
Actually, your code simulates the cleaning of 1 kgw by bubbling air, but in the case of the water column, "the last bubbles" before opening to the atmosphere will have a much higher benzine(g) concentration (the result of cleaning all the lower water). What do you think about the concept of the giant bubble in equilibrium with all the volume of water in the column? Though it has kinetics constraints, it seems to be closer to reality.
« Last Edit: 04/12/21 07:45 by MichaelZ20 »
Logged

dlparkhurst

  • Global Moderator
  • *****
  • Posts: 4296
Re: Water cleaning by air stripping
« Reply #6 on: 04/12/21 16:34 »
First, I would say that regardless of the history of the bubble, when it leaves the system, it is assumed to be at 1.0 atmosphere pressure and in equilibrium with the solution. Those are the assumptions of the calculation, which seem reasonable. If there were more Benzene in the bubble at depth so that its partial pressure at the surface is greater than equilibrium, ideally, it should lose Benzene to re-equilibrate to the conditions at the surface of the column before it exits the system. If indeed, there were more Benzene in the bubble when it exits than expected from equilibrium at surface conditions, then that should enhance the stripping, but I don't think that is the way it would work.

In concept, if the column is well mixed, the concentration of Benzene is the same at the top and the bottom of the column. The calculated partial pressure of Benzene(g) would also be the same (the pressure dependence of the Henry's constant is minimal). Now a bubble introduced at the bottom of the column at 2 atm will double in size as it reaches the top of the column; however, equilibrium would stipulate that the partial pressure of Benzene(g) in the bubble remain the same at the bottom and the top of the column to be in equilibrium with the solution. Thus, as the bubble grows, you would need to continue to add Benzene to the bubble to maintain the same partial pressure of Benzene(g). So, it seems more likely that the bubble will be undersaturated relative to the solution when it exits the column.

If you use one large bubble, I think it requires greater than 500 L gas per L of water, which is a lot more gas, and more expensive. I don't know anything about gas exchange, but if the transfer between water and gas is slow, it may take much more than 1 L of gas per liter of water.
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #7 on: 05/12/21 05:00 »
Dear David,
Thank you for your comments!
Sincerely,
Michael
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #8 on: 23/06/24 09:06 »
Hi David!
I tried to modify the input replacing all
USE SOLUTION 0; USE GAS_PHASE 0; SAVE SOLUTION 0; END
by
RUN_CELLS; cell 0; END ,
but it does not work.
What may be a reason?
Logged

dlparkhurst

  • Global Moderator
  • *****
  • Posts: 4296
Re: Water cleaning by air stripping
« Reply #9 on: 23/06/24 18:13 »
The two calculations are different.

RUN_CELLS is equivalent to

Code: [Select]
USE solution 1
USE gas_phase 1
SAVE solution 1
SAVE gas_phase 1

So, in one case, a new gas phase (always of composition gas phase 1) is brought into the reaction at each step, whereas with RUN_CELLS, the gas phase evolves with each reaction step and no new gas enters the system.
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #10 on: 23/06/24 18:44 »
Thank you, David!
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #11 on: 09/11/25 18:23 »
Hi David!
I tried to reproduce the experimental data of ammonia removal (https://doi.org/10.1016/j.cej.2024.153715) by using the proposed approach.
For achieving the final experimental percent of ammonia removal the simulation gives about 3 L of the passing air, whereas in the experiment -120 L.
Could you please look through the attached input file? Do I omit something? Thank you in advance.
Code: [Select]
DATABASE c:\phreeqc\database\minteq.v4.dat
TITLE
SOLUTION_MASTER_SPECIES
Oxg         Oxg       0         Oxg             32     
N           NO3-      0         14.0067         14.0067
N(-3)       NH4+      0         14.0067
N(0)        N2        0         14.0067
Phenol      Phenol    0         Phenol         94.11

SOLUTION_SPECIES
Oxg = Oxg
log_k  0
Phenol = Phenol
Log_k  0
NH4+ = NH3 + H+
        log_k -9.252
        delta_h 12.48 kcal
        -analytic 0.6322 -0.001225 -2835.76
        -gamma 2.5 0
2 NO3- + 12 H+ + 10 e- = N2 + 6 H2O
        log_k 207.08
        delta_h -312.13 kcal
NO3- + 10 H+ + 8 e- = NH4+ + 3 H2O
        log_k 119.077
        delta_h -187.055 kcal

PHASES
Oxg(g)
        O2 + 4 H+ + 4 e- = 2 H2O
        log_k 83.0894
        delta_h -571.66 kJ
N2(g)
        N2 = N2
        log_k -3.26
        delta_h -1.358 kcal
NH3(g)
        NH3 = NH3
        log_k 1.77
        delta_h -8.17 kcal
Phenol(g)
Phenol = Phenol
-log_k -3.45
-delta_h 96.4 KJ
Fix_pH
H+ = H+
log_k  0

GAS_PHASE 0
-fixed_volume
-pressure        1                   
-volume          0.2     # L in headspace
-temperature    25
N2(g)            0.78    # a portion of N2 in atmospheric air
Oxg(g)           0.242   # a portion of O2 in atmospheric air
CO2(g)           0.00044 # a portion of CO2 in atmospheric air 
NH3(g)           1e-6    # a portion of NH3 in atmospheric air
Phenol(g) 1e-6    # a portion of Phenol in atmospheric air
END           

SOLUTION 0 Initial water
units mg/l
Density 1 calculate
pH     7.7 
temp   25
N(-3)    5470  #  Total ammonia nitrogen: 4500 mg/l
Acetate  4620   
Phenol   1640
Cl 10 charge
water 1   
END

MIX 1
0  0.1    # 100 mL
SAVE SOLUTION 0

SELECTED_OUTPUT; -reset false; -file NH3_gas.txt

USER_PUNCH 
-start               
10 for i = 0 to 120 step 1     
20   punch "USE SOLUTION 0" + eol$
25   punch "EQUILIBRIUM_PHASES" + eol$
27   punch "  Fix_pH  -9.3  NaOH  10" + eol$
30   punch "USE GAS_PHASE 0" + eol$
40   punch "REACTION_TEMPERATURE 85" + eol$
45   punch "SAVE SOLUTION 0" + eol$
50   punch "END" + eol$
60 next i
-end
END

PRINT; -reset false; -selected_out false

USER_GRAPH 1
-axis_titles  "The total volume of air passed, L"  "Ammonium mass removal, %"
  -start
10 GRAPH_X GAS_VM * (GAS("NH3(g)") + GAS("N2(g)") + GAS("Oxg(g)") + GAS("CO2(g)") + GAS("H2O(g)") + GAS("Phenol(g)")) * (SIM_NO - 3)
20 GRAPH_Y ((0.3917 - TOT("N(-3)")) / 0.3917) * 100
  -end
INCLUDE$ NH3_gas.txt
END
Logged

dlparkhurst

  • Global Moderator
  • *****
  • Posts: 4296
Re: Water cleaning by air stripping
« Reply #12 on: 09/11/25 20:18 »
Mainly, I think you need to consider disequilibrium in the nitrogen system. I would use Amm.dat with the extra gases added, although you really don't need the other gases; if pH is fixed, the main reaction is simply between ammonia and the head space.

Here is a revision of your script. It takes about 120 L of introduced air to remove virtually all of the ammonia, assuming it reacts independently of all other aqueous species and gases. I redefined the gases to avoid Peng-Robinson calculations, which is reasonable at low pressures.

Code: [Select]
#DATABASE c:\phreeqc\database\minteq.v4.dat
TITLE
SOLUTION_MASTER_SPECIES
    Phenol        Phenol           0     Phenol          94.11
    Acetate       Acetate-         1     59.045          59.045

SOLUTION_SPECIES
Phenol = Phenol
    log_k     0
Acetate- = Acetate-
    log_k     0
Acetate- + H+ = H(Acetate)
    log_k     4.757
    delta_h   0.41 kJ
    -gamma    0 0

PHASES
Amm(g)
    Amm = Amm
    log_k     1.7966
    -analytical_expression -18.758 0.0003367 2511.3 4.8619 39.192 0
Oxg(g)
    Oxg = Oxg
    -analytical_expression -7.5001 0.0078981 0 0 200270 0
N2(g)
    N2 = N2
    log_k     -3.1864
    -analytical_expression -58.453 0.001818 3199 17.909 -27460 0
CO2(g)
    CO2 = CO2
    log_k     -1.468
    delta_h   -4.776 kcal
    -analytical_expression 10.5624 -0.023547 -3972.8 0 587460 1.9194e-05
H2O(g)
    H2O = H2O
    log_k     1.506
    delta_h   -44.03 kJ
    -analytical_expression -16.5066 -0.0020013 2710.7 3.7646 0 2.24e-06
Phenol(g)
    Phenol = Phenol
    log_k     -3.45
    delta_h   96.4 kJ
Fix_pH
    H+ = H+
    log_k     0

GAS_PHASE 0
    -fixed_volume
    -pressure 1
    -volume 0.2
    -temperature 25
    Amm(g)    1e-06
    CO2(g)    0.00044
    N2(g)     0.78
    Oxg(g)    0.242
    Phenol(g) 1e-06
END           

SOLUTION 0 Initial water
    temp      25
    pH        7.7
    pe        4
    redox     pe
    units     mg/l
    density   1
    Acetate   4620
    Amm       5470 as N
    Cl        10 charge
    Phenol    1640
    -water    1 # kg
END

MIX 1
0  0.1    # 100 mL
SAVE SOLUTION 0

SELECTED_OUTPUT; -reset false; -file NH3_gas.txt

USER_PUNCH 1
    -headings
    -start
 10 FOR i = 0 TO 5*120 STEP 1
 20 PUNCH "USE SOLUTION 0"+EOL$
 30 PUNCH "EQUILIBRIUM_PHASES"+EOL$
 40 PUNCH "  Fix_pH  -9.3  NaOH  10"+EOL$
 50 PUNCH "USE GAS_PHASE 0"+EOL$
 60 PUNCH "REACTION_TEMPERATURE 1"+EOL$
 70 PUNCH "85"+EOL$
 80 PUNCH "SAVE SOLUTION 0"+EOL$
 90 PUNCH "END"+EOL$
100 NEXT i
    -end
END
SELECTED_OUTPUT 1
-active false
END

USER_GRAPH 1
    -headings               vol %_removal Amm
    -axis_titles            "The total volume of air introduced, L" "Ammonium mass removal, %" "Amm, mol/kgw"
    -initial_solutions      false
    -connect_simulations    true
    -plot_concentration_vs  x
  -start
10 stp = GET(0)+1
20 PUT(stp, 0)
30 GRAPH_X stp * 0.2
40 GRAPH_Y((0.3917-TOT("Amm"))/0.3917)*100
50 GRAPH_SY TOT("Amm")
  -end
    -active                 true
INCLUDE$ NH3_gas.txt
END
Logged

MichaelZ20

  • Top Contributor
  • Posts: 174
Re: Water cleaning by air stripping
« Reply #13 on: 10/11/25 11:59 »
Thank you, David!
Logged

  • Print
Pages: [1]   Go Up
« previous next »
  • PhreeqcUsers Discussion Forum »
  • Processes »
  • Reactive transport modelling »
  • Water cleaning by air stripping
 

  • SMF 2.0.19 | SMF © 2021, Simple Machines | Terms and Policies
  • XHTML
  • RSS
  • WAP2