Applications and Case Studies > Acid mine/rock drainage
Calculation of Acidity from PHREEQC Output
bschroth:
Hello:
I have fresh water mixing with acidic, metal-rich waters and would like to calibrate the mixture to measured acidity in the observed mixture. I have several waters with complete chemical analysis, including acidity, and none of the various formulas for acidity are consistently matching the measured data. Is this an artifact of laboratory vs theoretical acidity, or is there a more accurate method of calculating acidity from PHREEQC output (including iron, aluminum, and other metals) that should match the laboratory data?
Thanks
Brian
dlparkhurst:
The following script estimates acidity. It makes an acidity titration to pH 4.5 using 1 N NaOH. There are a couple of caveats. (1) The titration assumes redox equilibrium, so redox reactions may affect the result. (2) There are some assumptions in the conversion from /L to /kgw and back again that cause some relatively small errors.
I'm sure there are other uncertainties, but I think the calculation should be in the ball park of a lab titration. If there are large discrepancies, post an example. Then again, maybe that is not the method used for the acidity measurement.
--- Code: ---
SOLUTION 1 Calculate acidity for this solution in USER_PRINT
-units mmol/L
pH 3
Fe(3) 1
Al 1
S(6) 6 charge
END
PHASES
Fix_H+
H+ = H+
END
USE solution 1
EQUILIBRIUM_PHASES
Fix_H+ -4.5 H112O56.5Na1.0 1
USER_PRINT
10 PRINT "Acidity:", -EQUI_DELTA("Fix_H+"), " eq per liter"
20 PRINT "Acidity: ", \
STR_F$(-EQUI_DELTA("Fix_H+") * GFW("CaCO3")/2*1000, 6, 1), \
" mg CaCO3/L"
END
--- End code ---
bschroth:
Thanks David
That makes sense, although I believe your approach would calculate H+ acidity, while in my case the acidity procedure has been described by Hedin (2006) as (a) titration with acid to drive off the alkalinity (to pH<4), (b) boiling with peroxide to convert all redox-sensitive metals to oxidized states, and (c) titration with NaOH to pH 8.3, with metal hydroxides forming during the titration. I am simulating this using the principles you provided, and setting saturation with atmospheric oxygen to cover (b) above. I am currently using the following:
EQUILIBRIUM_PHASES 2
pH_fix -3.5 HCl 10.0 dissolve_only
O2(g) -0.7 10.0
SAVE SOLUTION 11
END
USE Solution 11
EQUILIBRIUM_PHASES 3
pH_fix -8.3 NaOH 10.0
O2(g) -0.7 10.0
Fe(OH)3_Maj 0.0 0.0
Gibbsite 0.0 0.0
Manganite 0.0 0.0
END
However, I note that for acid waters with pH<3.5, the EQUILIBRIUM_PHASES 2 block causes SUBTRACTION of HCl from the solution to attain pH 3.5. Using the dissolve_only modifier results in non-convergence. Using force_quality does not help this situation. How do I make PHREEQC refrain from sending the pH up in these situations?
Thanks for your help on this
bschroth:
Forgot to provide the reference for Hedin (2006): Mine Water and the Environment (2006) 25: 146–152
dlparkhurst:
I don't think removing Cl is a problem as long as it is considered acidity or negative alkalinity. I would be a problem if there were no Cl in solution.
Here is a script that calculates the addition of HCl to pH 3.5 as alkalinity, but if pH is less than 3.5, it adds NaOH to to increase the pH to 3.5 and counts it as acidity (or negative alkalinity). pH 3.5 seems a little low to me, perhaps pH 4.0 would be a compromise.
The final acidity is the amount of base added to reach pH 8.3 minus the alkalinity (which may be negative).
--- Code: ---SOLUTION 1 Calculate acidity for this solution in last USER_PRINT
-units mmol/L
pH 3
Fe(3) 1
Al 1
Mn 1
S(6) 6 charge
C(4) 1
END
PHASES
Fix_H+
H+ = H+
log_k 0
END
TITLE equilibrate with atmospheric CO2
USE solution 1
EQUILIBRIUM_PHASES 1
CO2(g) -3.4 1
SAVE solution 1
SELECTED_OUTPUT 2
-file pH_3.5.pqi
USER_PUNCH 2
10 IF -LA("H+") <= 3.5 THEN r$ = " NaOH 10" ELSE r$ = " HCl 10 "
20 IF -LA("H+") <= 3.5 THEN d = 1 ELSE d = 2
30 s$ = "USE solution 1" + EOL$
40 s$ = s$ + "EQUILIBRIUM_PHASES 1" + EOL$
50 s$ = s$ + "CO2(g) -3.4 0" + EOL$
60 s$ = s$ + "Fix_H+ -3.5 " + r$ + EOL$
70 s$ = s$ + "SAVE solution 1" + EOL$
80 s$ = s$ + "USER_PRINT" + EOL$
90 s$ = s$ + '10 PUT(EQUI_DELTA("Fix_H+"),' + STR_F$(d, 2, 0) + ")" + EOL$
100 s$ = s$ + '20 PRINT r$, d, EQUI_DELTA("Fix_H+")' + EOL$
200 PUNCH s$
END
SELECTED_OUTPUT 2
-active false
END
TITLE titrate to pH_3.5 with HCl or NaOH
INCLUDE$ pH_3.5.pqi
END
TITLE titrate to pH 8.3 with NaOH
USE solution 1
EQUILIBRIUM_PHASES 1
Fix_H+ -8.3 NaOH 10
Gibbsite 0 0
Goethite 0 0
O2(g) -0.7 10
Pyrolusite 0 0
USER_PRINT
10 PRINT "NaOH added to pH 3.5:", -GET(1)
20 PRINT "HCl added to pH 3.5:", -GET(2)
30 PRINT "NaOH added to pH 8.3:", -EQUI_DELTA("Fix_H+")
40 alka = -GET(2) + GET(1)
50 acid = -EQUI_DELTA("Fix_H+") - alka
110 PRINT "Acidity, eq per liter: ", STR_E$(acid, 10, 4)
120 PRINT "Acidity, mg CaCO3/L: ", STR_F$(acid * GFW("CaCO3")/2*1000, 6, 1)
END
--- End code ---
Navigation
[0] Message Index
[#] Next page
Go to full version