Atmospheric aqueous chemistry · S(IV) → S(VI) oxidation

pH of a raindrop as a function of time

Q1 from the class notes, fully solved: 5 ppb SO₂ being oxidised by H₂O₂ and O₃ inside a cloud drop, with HNO₃ and NH₃ around. Below: the method step by step, the real numbers at every minute, a simulator you can play with, and a ready-made Excel workbook that builds the pH profile with live formulas.

The answer: pH falls from 6.08 to about 5.1 in 50 minutes
What happens, in one paragraph SO₂ dissolves into the drop and gets oxidised to sulfate (H₂SO₄, a strong acid), so the drop gets more acidic. At the start (pH ≈ 6) ozone does most of the work, but the ozone route slows down about 90× for every unit the pH drops, so it dies out within minutes. After that H₂O₂ takes over; its rate barely depends on pH, but there is only 1 ppb of it, and 97% is used up by 50 min. Meanwhile, the more acidic the drop gets, the more NH₃ it pulls in from the air (30% → 81%), and that neutralises part of the acid. So the curve drops quickly and then flattens out at pH ≈ 5.1.
Numbers to remember
t (min)pHS(VI) formed (µM)
06.080
55.67150
105.49209
205.28267
305.17294
405.11308
505.07315
1-minute steps, as in Excel. Assumptions are listed in section 1.

⬇ Download the Excel workbook (raindrop-pH-profile.xlsx)

Section 1

Reading the question

Q1. S(IV) in the presence of H₂O₂ (and O₃). Calculate the pH of the raindrop as a function of time.

Given (from the notes)ValueWhat it really means
Total S(IV) (as SO₂)5 ppbgas-phase mixing ratio: 5 molecules of SO₂ per 10⁹ molecules of air, i.e. partial pressure $5\times10^{-9}$ atm
H₂O₂1 ppboxidant 1, the fast one, but there is only a little of it
O₃5 ppboxidant 2, barely soluble, but very fast with sulfite at high pH
HNO₃1 ppbstrong acid, dissolves completely → NO₃⁻
NH₃5 ppb (cut off in the photo)base; dissolves more the more acidic the drop is
Time0 → 40–50 minwe run 0 → 50 min in 1-minute steps

What we have to assume (state these in your answer)

  1. Closed cloud parcel. The air and the drops inside it exchange gases with each other but not with outside air. So the 1 ppb of H₂O₂ is all the H₂O₂ there is, and it can run out.
  2. Liquid water content $L = 0.2\ \text{g/m}^3$ (a typical cloud). This is the one number the question does not give. It is the number that makes the initial pH come out at 6.08, which matches the "assume pH = 6 at t = 0" in the notes. Try other values in the simulator.
  3. T = 298 K, with Henry's law and acid–base equilibria established instantly. Chemistry is slow (minutes) compared with dissolving (seconds).
  4. Rate laws and constants from Seinfeld & Pandis, Ch. 7, which is the standard source for this problem. If your professor used different constants, change the yellow cells in the Excel file.
  5. CO₂ and HCO₃⁻ are ignored, as in the charge balance in the notes. At pH 5–6 they add under 6 µM, compared with ~300 µM for the other ions.
Section 2

Step 1: ppb in air → mol per litre of drop water

Everything in the drop is in mol/L (M), but the question gives gas mixing ratios. The bridge between them is how much water there is per volume of air.

The conversion If a gas at $\xi$ ppb dissolved completely, its concentration in the water would be $$c_{\text{tot}}=\frac{\xi\times10^{-9}\ \text{atm}}{R\,T\,L}\qquad R=0.08205\ \tfrac{\text{L atm}}{\text{mol K}},\quad L=\frac{0.2\ \text{g/m}^3}{10^6\ \text{g/m}^3}=2\times10^{-7}$$ $RTL = 0.08205\times298\times2\times10^{-7}=4.89\times10^{-6}$, so 1 ppb ≡ 204.5 µM. We use $c_{\text{tot}}$ as each species' "total" (gas + drop) and keep track of it over time.

Most gases do not dissolve completely. Henry's law shares each one between gas and drop:

$$\frac{\text{moles in drop}}{\text{moles in gas}} = H^{*}RTL\qquad\Rightarrow\qquad \text{fraction in drop}=\frac{H^{*}RTL}{1+H^{*}RTL}$$

where $H^*$ is the effective Henry's constant. It includes the ions the gas forms in water, so it depends on pH:

$$H^*_{\text{SO}_2}=H_{\text{SO}_2}\Big(1+\frac{K_{s1}}{[\text{H}^+]}+\frac{K_{s1}K_{s2}}{[\text{H}^+]^2}\Big)\qquad H^*_{\text{NH}_3}=H_{\text{NH}_3}\Big(1+\frac{K_{b}[\text{H}^+]}{K_w}\Big)$$
GasHenry's constant (M/atm)total $c_{\text{tot}}$ at t=0fraction in drop at pH 6.08
SO₂1.231022 µM9.3 %
H₂O₂7.45×10⁴204.5 µM26.7 %
O₃1.13×10⁻²1022 µM0.000006 %
HNO₃2.1×10⁵ (×15.4/[H⁺])204.5 µM≈100 %
NH₃621022 µM29.9 %
Not 5 µg/LThe notes turn 5 ppb into 5 µg/L. That conversion is for a mass ppb of something already in water. Here the ppb is a gas mixing ratio, so it has to go through Henry's law and $RTL$ as above.
Section 3

Step 2: How the dissolved S(IV) splits up

Inside the drop, S(IV) exists as three forms that convert between each other instantly:

$$\text{SO}_2\cdot\text{H}_2\text{O}\ \underset{K_{s1}=1.3\times10^{-2}}{\rightleftharpoons}\ \text{H}^+ + \text{HSO}_3^-\qquad \text{HSO}_3^-\ \underset{K_{s2}=6.6\times10^{-8}}{\rightleftharpoons}\ \text{H}^+ + \text{SO}_3^{2-}$$

Combining the two equilibria with $[\text{S(IV)}]_{aq}=[\text{SO}_2\cdot\text{H}_2\text{O}]+[\text{HSO}_3^-]+[\text{SO}_3^{2-}]$, and writing $D=[\text{H}^+]^2+K_{s1}[\text{H}^+]+K_{s1}K_{s2}$, gives:

$$[\text{SO}_2\cdot\text{H}_2\text{O}]=\frac{[\text{H}^+]^2}{D}[\text{S(IV)}]_{aq}\quad [\text{HSO}_3^-]=\frac{K_{s1}[\text{H}^+]}{D}[\text{S(IV)}]_{aq}\quad [\text{SO}_3^{2-}]=\frac{K_{s1}K_{s2}}{D}[\text{S(IV)}]_{aq}$$

These are the formulas in your notes, except that every one of them is multiplied by $[\text{S(IV)}]_{aq}$ (the notes forgot it on SO₃²⁻), and $[\text{S(IV)}]_{aq}$ is the dissolved part from step 1, not the 5 ppb total.

Which form dominates at which pH?
SO₂·H₂O HSO₃⁻ SO₃²⁻
How to explain itEach p$K$ is a switch-over point. Below pH 1.9 (p$K_{s1}$) S(IV) is mostly SO₂·H₂O, between 1.9 and 7.2 (p$K_{s2}$) mostly HSO₃⁻, and above 7.2 mostly SO₃²⁻. In our problem the pH stays at 5–6, so almost all of the dissolved S(IV) is bisulfite, HSO₃⁻.
Section 4

Step 3: The two oxidation rates

Your notes write $r = -\dfrac{d\,\text{S(IV)}}{dt} = \dfrac{d\,\text{S(VI)}}{dt} = r_{O_3}+r_{H_2O_2}$. To get numbers you need the rate laws, which are the standard ones (Seinfeld & Pandis, 298 K):

H₂O₂ pathway $$r_{H_2O_2}=\frac{k\,[\text{H}^+]\,[\text{H}_2\text{O}_2(aq)]\,[\text{HSO}_3^-]}{1+K[\text{H}^+]}$$ $k=7.45\times10^{7}\ \text{M}^{-2}\text{s}^{-1}$, $K=13\ \text{M}^{-1}$.
Because $[\text{HSO}_3^-]\propto 1/[\text{H}^+]$, the two cancel: this rate barely depends on pH. It only slows down as H₂O₂ gets used up.
O₃ pathway $$r_{O_3}=\big(k_0[\text{SO}_2\cdot\text{H}_2\text{O}]+k_1[\text{HSO}_3^-]+k_2[\text{SO}_3^{2-}]\big)[\text{O}_3(aq)]$$ $k_0=2.4\times10^{4}$, $k_1=3.7\times10^{5}$, $k_2=1.5\times10^{9}\ \text{M}^{-1}\text{s}^{-1}$.
The huge $k_2$ term (sulfite) dominates, and $[\text{SO}_3^{2-}]$ collapses as the pH drops, so this rate falls ~100× per pH unit.
Rate vs pH at the starting concentrations (log scale)
H₂O₂ path O₃ path our pH range (5.07–6.08)

The two lines cross at about pH 5.95. Our drop starts at 6.08, just above the crossing, so ozone is ahead for the first ~2 minutes. Once the pH falls below 5.95, H₂O₂ is ahead for the rest of the run. This crossover is the whole story of the curve's shape. Between pH 6 and 5 the ozone rate falls 90×, while the H₂O₂ rate changes by under 10%.

UnitsThese rates are in M/s per litre of drop water. Our Excel rows are 1 minute apart, so multiply by 60 s when you step.
Section 5

Step 4: Stepping through time (Euler method)

You can't integrate $dS/dt$ on paper because the rate depends on pH, which depends on S. So we march forward in small steps of $\Delta t$ (1 min = 60 s), assuming the rate stays constant within each step:

$$\begin{aligned} \text{S(IV)}_{i+1}&=\text{S(IV)}_i-(r_{H_2O_2}+r_{O_3})_i\,\Delta t\\ \text{S(VI)}_{i+1}&=\text{S(VI)}_i+(r_{H_2O_2}+r_{O_3})_i\,\Delta t\\ \text{H}_2\text{O}_2{}_{,i+1}&=\text{H}_2\text{O}_2{}_{,i}-r_{H_2O_2,i}\,\Delta t\qquad(\text{1 H}_2\text{O}_2\text{ per S oxidised})\\ \text{O}_3{}_{,i+1}&=\text{O}_3{}_{,i}-r_{O_3,i}\,\Delta t \end{aligned}$$

These are the totals (gas + drop, in µM of water). HNO₃ and NH₃ totals don't change; only how much of the NH₃ sits in the drop changes, and that depends on pH.

The loop
  1. Know the totals at time $t_i$.
  2. Find the pH that satisfies the charge balance (section 6).
  3. With that pH, compute all species and the two rates.
  4. Use the rates to get the totals at $t_{i+1}$. Go back to 2.
Is 1 minute small enough?Yes. With 1-second steps the pH at 50 min is 5.097; with 1-minute steps it is 5.069. That 0.03 pH difference is far smaller than the uncertainty in the constants.
Section 6

Step 5: Charge balance → the new pH

A drop is electrically neutral, so positive charge equals negative charge. This is the equation in your notes:

$$[\text{H}^+]+[\text{NH}_4^+]=[\text{HSO}_3^-]+2[\text{SO}_3^{2-}]+[\text{NO}_3^-]+[\text{OH}^-]+2[\text{SO}_4^{2-}]+[\text{HSO}_4^-]$$

Every term is a function of $[\text{H}^+]$, given the totals at that moment:

IonFormula
HSO₃⁻, SO₃²⁻section 3, with $[\text{S(IV)}]_{aq}$ = S(IV)tot × fraction in drop (section 2)
HSO₄⁻, SO₄²⁻$[\text{HSO}_4^-]=\dfrac{[\text{H}^+]\,\text{S(VI)}}{[\text{H}^+]+K_{hs}}$, $[\text{SO}_4^{2-}]=\dfrac{K_{hs}\,\text{S(VI)}}{[\text{H}^+]+K_{hs}}$, $K_{hs}=1.02\times10^{-2}$; sulfate stays in the drop
NO₃⁻= HNO₃ total (204.5 µM), fully dissolved and dissociated
NH₄⁺$\text{NH}_3{}_{\,tot}\cdot\dfrac{H^*RTL}{1+H^*RTL}\cdot\dfrac{K_b[\text{H}^+]/K_w}{1+K_b[\text{H}^+]/K_w}$, $K_b=1.7\times10^{-5}$
OH⁻$K_w/[\text{H}^+]$

Move everything to one side: $F(\text{pH}) = \text{cations} - \text{anions}$. The pH we want is where $F=0$. You can't rearrange this for pH by hand, so we search for it:

Find the pH where the charge balance is zero (t = 0)
cations (H⁺ + NH₄⁺) anions your guess
Bisection, which is what the Excel file doesSearch pH 0–14, starting from 7. If $F>0$ there are too many cations, meaning too much H⁺, so the pH must go up; if $F<0$ it must go down. Move by 3.5, then 1.75, then 0.875, and so on, halving each time. After 36 halvings the pH is exact to $10^{-10}$. Goal Seek does the same job.
Section 7

t = 0 and t = 1 min, by hand

t = 0 min

Totals: S(IV) = 1022.5 µM, S(VI) = 0, H₂O₂ = 204.5, O₃ = 1022, NO₃⁻ = 204.5, NH₃ = 1022 µM.

Charge balance solves to pH = 6.083, so $[\text{H}^+]$ = 0.827 µM. Check at that pH:

quantityvaluehow
$H^*_{SO_2}$2.09×10⁴ M/atm1.23(1 + 1.3e-2/8.27e-7 + …)
fraction of S(IV) in drop0.0927$H^*RTL/(1+H^*RTL)$ = 0.1022/1.1022
[S(IV)]aq94.8 µM1022.5 × 0.0927
[HSO₃⁻] / [SO₃²⁻] / [SO₂·H₂O]87.75 / 7.00 / 0.006 µMsection 3
fraction of NH₃ in drop → [NH₄⁺]0.299 → 305.4 µM$H^*_{NH_3}$ = 8.72×10⁴
[OH⁻]0.012 µM$K_w$/[H⁺]
cations0.83 + 305.4 = 306.2 µM
anions87.75 + 2(7.00) + 204.5 + 0.01 = 306.3 µM ✓
[H₂O₂(aq)] / [O₃(aq)]54.6 µM / 5.65×10⁻¹¹ Mfraction-in-drop × total
$r_{H_2O_2}$2.95×10⁻⁷ M/s7.45e7 × 8.27e-7 × 5.46e-5 × 8.775e-5 / (1+13×8.27e-7)
$r_{O_3}$5.96×10⁻⁷ M/s(… + 3.7e5×8.775e-5 + 1.5e9×7.0e-6) × 5.65e-11
S oxidised in the 1st minute(2.95+5.96)e-7 × 60 = 53.4 µMtwo thirds of it by O₃
t = 1 min

New totals: S(IV) = 1022.5 − 53.4 = 969.0 µM, S(VI) = 53.4 µM, H₂O₂ = 204.5 − 17.7 = 186.8 µM.

Charge balance now solves to pH = 5.942. Check: cations = 1.14 (H⁺) + 379.1 (NH₄⁺) = 380.2 µM; anions = 61.8 (HSO₃⁻) + 2×3.57 (SO₃²⁻) + 204.5 (NO₃⁻) + 2×53.43 (SO₄²⁻) + 0.006 (HSO₄⁻) = 380.3 µM ✓

Notice NH₄⁺ went up from 305 to 379 µM: the slightly more acidic drop pulled in more ammonia. That is the buffering that makes the curve flatten.

New rates: $r_{H_2O_2}$ = 2.63×10⁻⁷, $r_{O_3}$ = 2.93×10⁻⁷ M/s. The ozone rate has halved after one minute.

Section 8

The full pH profile (0 → 50 min)

What's in the drop over time
S(IV) total S(VI) = sulfate formed H₂O₂ left NH₄⁺ in drop
Who is doing the oxidising
H₂O₂ path O₃ path (nM/s)
Reading the curve
  • 0–3 min: steepest drop. Both paths are running and O₃ leads.
  • 3–20 min: O₃ has faded; H₂O₂ carries on and is used up (205 → 42 µM).
  • 20–50 min: H₂O₂ is nearly gone (5 µM left), and the extra NH₃ dissolving cancels most of the new acid. The pH settles near 5.1.
  • Over 50 min, 315 µM of S(VI) formed: 200 from H₂O₂ and 116 from O₃. S(IV) is not used up; 70% is still there. The oxidants are what limit the reaction.
Why it doesn't go much lower than 5.1A fall from 6.08 to 5.07 means [H⁺] went from 0.83 to 8.5 µM. But 315 µM of sulfate formed, which is 630 µeq of acid. Where did the rest go? About 527 µM was neutralised by NH₃ dissolving into the drop (NH₄⁺ 305 → 833 µM), and some came from bisulfite running down. Ammonia is the buffer.
Show the full minute-by-minute table
Section 9

Play with it

This is the same model, running live in your browser. Change one thing at a time and predict what happens before you look.

Raindrop simulator
your settings Q1 as given
Things to try
  • NH₃ → 0: no buffer at all. HNO₃ alone puts the drop at pH 3.7 from the start, and it ends near 3.2.
  • H₂O₂ → 3 ppb: the pH falls off a cliff to ≈ 3.4. Once more acid has formed than the NH₃ can neutralise, the buffer breaks. How much H₂O₂ there is decides how far the pH goes.
  • O₃ → 50 ppb (a polluted afternoon): pH 6.08 → 4.7 in the first minute. Then ozone shuts itself off (by 10 min it is 300× slower than H₂O₂), and H₂O₂ finishes the job.
  • LWC 0.2 → 1.0: more water, so more of the H₂O₂ dissolves and reacts. The starting pH barely moves (6.18), but the 50-min pH drops to 4.6.
The second half of the question

Doing it in MS Excel (the pH profile)

⬇ raindrop-pH-profile.xlsx already contains everything below with live formulas. Open it, see the chart, and change any yellow input. Read on to understand it, or to build it yourself from scratch.

SheetWhat it is
InputsThe given ppb values, LWC, T and every constant, each as a named cell (e.g. Ka_S1, RTL). Yellow cells are the ones you may edit.
ProfileOne row per minute (0–50) with all 24 columns below, plus the pH-vs-time chart. Fully automatic.
pH_SolverThe automatic charge-balance solver: 36 bisection columns per row. You never touch it.
GoalSeek_MethodThe same model, but you find each pH with Goal Seek, the way a lab class does it.
Optional_MacroA 10-line VBA macro that runs Goal Seek on all 51 rows for you.

Step 1: The Inputs sheet and named cells

Put each constant in a cell, then name it: click the cell, type the name in the Name Box (left of the formula bar) and press Enter. Named cells make formulas readable, e.g. =Ka_S1*G2/J2 instead of =Inputs!$B$27*G2/J2.

Two naming traps (the first draft of this file hit both)
  • Don't name a cell Ks1, k1 or K2. Excel reads those as cell addresses (column KS, row 1) and silently uses the wrong number. Use Ka_S1, k_O3_b, etc.
  • Names ignore upper/lower case. kP (rate constant) and KP (equilibrium constant) are the same name to Excel. Give them different names.
NameValue / formulaNameValue
SO2_ppb, H2O2_ppb, O3_ppb, HNO3_ppb, NH3_ppb5, 1, 5, 1, 5H_SO21.23
LWC0.2 (g/m³)Ka_S1, Ka_S21.3E-2, 6.6E-8
Temp, Rgas298, 0.08205H_H2O2, H_O3, H_NH37.45E4, 1.13E-2, 62
L_vol=LWC/1000000K_NH3, K_w, K_HSO41.7E-5, 1E-14, 1.02E-2
RTL=Rgas*Temp*L_volk_H2O2, Keq_H2O27.45E7, 13
ppb_to_M=1/(1000000000*RTL)k_O3_a, k_O3_b, k_O3_c2.4E4, 3.7E5, 1.5E9
S4_0, P_0, O_0, Ntot, Atot=SO2_ppb*ppb_to_M etc.dt_min1

Step 2: The Profile columns

Row 2 is t = 0. Every cell below is in mol/L.

ColMeaningRow 2 (t = 0)Row 3 onwards
At (min)0=A2+dt_min
BS(IV) total=S4_0=MAX(B2-X2*dt_min*60,0)
CS(VI)0=C2+(B2-B3)
DH₂O₂ total=P_0=MAX(D2-V2*dt_min*60,0)
EO₃ total=O_0=MAX(E2-W2*dt_min*60,0)
FpHfrom the solver (=pH_Solver!AL2), or typed in and adjusted by Goal Seek
G[H⁺]=10^(-F2)
Hfraction of S(IV) in drop=H_SO2*(1+Ka_S1/G2+Ka_S1*Ka_S2/G2^2)*RTL/(1+H_SO2*(1+Ka_S1/G2+Ka_S1*Ka_S2/G2^2)*RTL)
I[S(IV)]aq=B2*H2
JD=G2^2+Ka_S1*G2+Ka_S1*Ka_S2
K[SO₂·H₂O]=I2*G2^2/J2
L[HSO₃⁻]=I2*Ka_S1*G2/J2
M[SO₃²⁻]=I2*Ka_S1*Ka_S2/J2
N[HSO₄⁻]=C2*G2/(G2+K_HSO4)
O[SO₄²⁻]=C2*K_HSO4/(G2+K_HSO4)
P[NO₃⁻]=Ntot
Q[NH₄⁺]=Atot*H_NH3*(1+K_NH3*G2/K_w)*RTL/(1+H_NH3*(1+K_NH3*G2/K_w)*RTL)*(K_NH3*G2/K_w)/(1+K_NH3*G2/K_w)
R[OH⁻]=K_w/G2
Scharge residual (want 0)=G2+Q2-L2-2*M2-P2-R2-2*O2-N2
T[H₂O₂(aq)]=D2*H_H2O2*RTL/(1+H_H2O2*RTL)
U[O₃(aq)]=E2*H_O3*RTL/(1+H_O3*RTL)
VrH₂O₂ (M/s)=k_H2O2*G2*T2*L2/(1+Keq_H2O2*G2)
WrO₃ (M/s)=(k_O3_a*K2+k_O3_b*L2+k_O3_c*M2)*U2
Xr total=V2+W2

Fill row 3 across, then select row 3 and drag the fill handle down to row 52 (t = 50).

No circular referenceRow $i$'s pH needs row $i$'s totals (B–E), which come from row $i-1$'s rates (V–X). Nothing in a row depends on itself, so Excel calculates it top to bottom with no iteration settings.

Step 3: Getting the pH in each row. Pick one method.

Method A: Goal Seek (what the class expects)
  1. Type 6 in F2 as a starting guess.
  2. Data → What-If Analysis → Goal Seek.
  3. Set cell: S2; To value: 0; By changing cell: F2. OK.
  4. Repeat for row 3, 4, … in order, because each row needs the row above it solved first.
Trap: Goal Seek stops once the target is within 0.001. Our residual is about 0.0001 to begin with, so it "succeeds" without changing anything. Fix: make column S µM by multiplying it by 1,000,000. The GoalSeek_Method sheet already does this.
Method B: Automatic (no clicking) In a helper sheet, column B = 7 and each next column is

=prev + IF(F(prev)>0, 1, -1) * 7/2^k

where F(prev) is the charge-balance formula written out with 10^(-prev) in place of [H⁺], and k = 1, 2, … 36. The last column is the pH. This is the pH_Solver sheet. It is bisection done with formulas, so all 51 rows update instantly whenever you change an input.
Optional: a macro that runs Goal Seek on every row
Sub SolveAllRows()
    Dim r As Long
    With Worksheets("GoalSeek_Method")
        For r = 5 To 55
            .Cells(r, "F").Value = 6
            .Cells(r, "S").GoalSeek Goal:=0, ChangingCell:=.Cells(r, "F")
        Next r
    End With
End Sub

Alt+F11 → Insert → Module → paste → press F5. Save as .xlsm if you want to keep it.

Step 4: The chart

  1. Select A1:A52, then hold Ctrl and select F1:F52.
  2. Insert → Scatter → Scatter with Smooth Lines and Markers. Don't use a "Line" chart, because it treats time as text labels.
  3. Axis titles: Time (min) and pH. Set the y-axis to 4.8–6.2 so the shape is visible.
  4. Title: pH of raindrop vs time: S(IV) oxidation by H₂O₂ and O₃.
Check your sheet against thesepH at t = 0, 1, 10, 50 min should read 6.083, 5.942, 5.489, 5.069, and column S should be ≈ 0 (about 1e-14) in every row.
Answer-sheet version

How to write it in the exam

  1. Assumptions: closed cloud parcel, LWC = 0.2 g/m³, T = 298 K, Henry's law and acid–base equilibria reached instantly, CO₂ neglected.
  2. Conversion: $c_{tot}=\xi\times10^{-9}/(RTL)$; 1 ppb = 204.5 µM. Share between gas and drop with $H^*RTL/(1+H^*RTL)$.
  3. Speciation: $[\text{HSO}_3^-]=\dfrac{K_{s1}[\text{H}^+]}{[\text{H}^+]^2+K_{s1}[\text{H}^+]+K_{s1}K_{s2}}[\text{S(IV)}]_{aq}$ (and the other two forms).
  4. Rates: $r_{H_2O_2}=k[\text{H}^+][\text{H}_2\text{O}_2][\text{HSO}_3^-]/(1+K[\text{H}^+])$; $r_{O_3}=(k_0[\text{SO}_2\cdot\text{H}_2\text{O}]+k_1[\text{HSO}_3^-]+k_2[\text{SO}_3^{2-}])[\text{O}_3]$.
  5. Mass balance (Euler, Δt = 1 min): $\text{S(IV)}_{i+1}=\text{S(IV)}_i-r\Delta t$, $\text{S(VI)}_{i+1}=\text{S(VI)}_i+r\Delta t$, H₂O₂ and O₃ consumed likewise.
  6. Charge balance solved for [H⁺] at each step (Goal Seek or bisection).
  7. Result: pH 6.08 (0) → 5.67 (5) → 5.49 (10) → 5.28 (20) → 5.17 (30) → 5.11 (40) → 5.07 (50 min). O₃ dominates for the first ~2 min, then H₂O₂ dominates until it is used up. NH₃ uptake buffers the drop. Draw the curve: a steep fall, then a flattening near 5.1.
Self-check

Quick quiz

1. Why can't we just integrate dS(IV)/dt analytically?
Because the rate depends on [HSO₃⁻] and [SO₃²⁻], which depend on pH, and the pH itself depends on how much S(VI) has formed so far. Everything is coupled, so we step numerically and re-solve the charge balance at each step.
2. Why does the ozone pathway die out so fast?
Its rate is dominated by $k_2[\text{SO}_3^{2-}]$, and $[\text{SO}_3^{2-}]\propto 1/[\text{H}^+]^2$. On top of that, less SO₂ dissolves at lower pH. Together these make the rate fall ~100× per pH unit, so it is self-limiting.
3. Why is the H₂O₂ rate almost independent of pH?
It is proportional to $[\text{H}^+][\text{HSO}_3^-]$, and $[\text{HSO}_3^-]\propto 1/[\text{H}^+]$ in the pH 2–7 range, so the [H⁺] cancels out. Only the amount of H₂O₂ left controls it.
4. What limits the final pH: S(IV) or the oxidants?
The oxidants. 70% of the S(IV) is still there at 50 min, but 97% of the H₂O₂ is gone and ozone is too slow at pH 5.
5. If NH₃ were zero, would the final pH be higher or lower? Why?
Much lower: ≈ 3.2 at 50 min, and it already starts at 3.7 from the HNO₃ alone (try it in the simulator). NH₃ dissolves as NH₄⁺ and neutralises the acid. Without it, every bit of acid shows up as H⁺.
6. Your Goal Seek "finds" pH = 6.000 for every row. What's wrong?
The residual is in mol/L (~1e-4), which is already within Goal Seek's 0.001 tolerance, so it never moves. Put the residual in µM (×1,000,000), or lower the tolerance under File → Options → Formulas → Maximum Change.
Read before you copy the notes

Fixes to the handwritten notes

  1. "5 ppb → 5 µg/L": wrong for this problem. These are gas-phase mixing ratios. Convert with Henry's law and $RTL$ (section 2).
  2. Page 2: "dS(IV)/dt = rO₃ + rH₂O₂" is missing a minus sign: $\dfrac{d\,\text{S(IV)}}{dt}=-(r_{O_3}+r_{H_2O_2})$. Page 1 has it right.
  3. [SO₃²⁻] formula: the numerator should be $K_{a1}K_{a2}\,[\text{S(IV)}]_{aq}$. The S(IV) term is missing.
  4. [S(IV)] in the speciation formulas is the dissolved amount, not the 5 ppb total. You have to do the gas/drop split first.
  5. "Assuming pH = 6 at t = 0": you don't have to assume it. The charge balance at t = 0 gives 6.08 (with LWC 0.2 g/m³), so state that as a check.
  6. [NH₄⁺] is not constant. It has to be recalculated at every step, because more NH₃ dissolves as the drop acidifies. This is what makes the curve flatten.
  7. "H₂SO₃(aq)" is really SO₂·H₂O. A H₂SO₃ molecule has never been found in solution. Writing it as a label is fine.

Constants: Seinfeld & Pandis, Atmospheric Chemistry and Physics, Ch. 7 (Tables 7.2–7.4 and the S(IV) oxidation rate expressions). Every number on this page was produced by the same model as the Excel file, and the two were checked against each other.