Processes > Dissolution and precipitation

Mineral Dissolution as a Function of pH

(1/1)

OmranS:
Hi there,

I aim to simulate the dissolution of barite and pyrite. My goal is to see how long it would take for saturation to be reached in solutions with different pHs. The issue I'm running into is saturation is being reached in less than a second no matter what pH or mineral is inputted.

Here is my input for pyrite

--- Code: ---# Title Pyrite Dissolution

PHASES
# from https://github.com/HydrogeoIU/PHREEQC-Kinetic-Library
Pyrite
Fe1S2 + 1.0000 H2O = 0.5000 O2    + 2.0000 HS- + 1.0000 Fe+2
-analytic 7.990927e+003 2.426724e+000 -3.481962e+005 -3.112050e+003 1.492998e+007 -8.237808e-004
-Vm 23.9400

SOLUTION
temp 25
units mol/kgw
ph 3

EQUILIBRIUM_PHASES
Pyrite 0 1

KINETICS 1
Pyrite
-m 1           # moles of solid per kg of water
-parms 50  1       # total surface area per kg of water (m2/kgw) and the scaling factor
-steps 1 second in 100 steps        # define time steps
INCREMENTAL_REACTIONS TRUE

RATES
pyrite
# from Palandri and Kharaka 2004
# experimental condition range T=20-40C, pH=1-4

-start
1 rem unit should be mol,kgw-1 and second-1
2 rem parm(1) is surface area in the unit of m2/kgw
3 rem calculation of surface area can be found in the note
4 rem M is current moles of minerals. M0 is the initial moles of minerals
5 rem parm(2) is a correction factor
10 rem acid solution parameters
11 a1=2.82E+02
12 E1=56900
13 n1=-0.500
14 n3=0.500
30 rem neutral solution parameters
31 a3=2.64E+05
32 E3=56900
33 n2=0.500
36 rem rate=0 if no minerals and undersaturated
40 SR_mineral=SR("pyrite")
41 if (M<0) then goto 200
42 if (M=0 and SR_mineral<1) then goto 200
43 if (M0<=0) then SA=PARM(1) else SA=PARM(1)*(M/M0)^0.67
50 if (SA<=0) then SA=1
60 R=8.31451
75 Rate1=a1*EXP(-E1/R/TK)*ACT("H+")^n1*ACT("Fe+3")^n3  #acid rate expression
80 Rate2=a2*EXP(-E2/R/TK)*ACT("O2")               #neutral rate expression
90 Rate=(Rate1+Rate2)*(1-Sr_mineral)*SA*parm(2)
100 moles= rate*Time
200 save moles
-end

SELECTED_OUTPUT
-file pyrite_dissolution.txt
-reset false
USER_PUNCH
-headings Time(seconds) SI(Pyrite) pH Tot_S Tot_Fe
-start
10 punch TOTAL_TIME SI("Pyrite") LA("H+")*(-1) TOT("S") TOT("Fe")
-end
END

--- End code ---

I would appreciate help to find out why this is happening

dlparkhurst:
By putting Pyrite in EQUILIBRIUM_PHASES (with positive moles), the solution will always be in equilibrium with pyrite, regardless of the KINETICS reaction.

If you want pyrite to react kinetically, you should remove pyrite from EQUILIBRIUM_PHASES. Then you need to fix up your RATES definition. Your pure water solution has no Fe+3 and very little O2(aq), so rate1 and rate2 would be small. You should probably define some O(0) (dissolved O2) in SOLUTION. Further, you need to define A2 and E2 for the rate2 calculation.

OmranS:

As per your suggestion, pyrite was removed from the equilibrium phase datablock. It was replaced with Goethite, a phase also created in the dissolution process. Oxygen was specified in the solution data block, yet this created an odd dissolution curve when concentration of iron over time was plotted (this plot has been attached)

My input is now:

--- Code: ---# Title Pyrite Dissolution

PHASES
# from https://github.com/HydrogeoIU/PHREEQC-Kinetic-Library
Pyrite
Fe1S2 + 1.0000 H2O = 0.5000 O2    + 2.0000 HS- + 1.0000 Fe+2
-analytic 7.990927e+003 2.426724e+000 -3.481962e+005 -3.112050e+003 1.492998e+007 -8.237808e-004
-Vm 23.9400

SOLUTION
temp 25
units mol/kgw
O(0) 1.0 O2(g) -0.7
ph 3

EQUILIBRIUM_PHASES
Goethite

KINETICS 1
Pyrite
-m 1           # moles of solid per kg of water
-parms 50  1       # total surface area per kg of water (m2/kgw) and the scaling factor
-steps 518400 second in 100 steps        # 6 days
INCREMENTAL_REACTIONS TRUE

RATES
pyrite
# from Palandri and Kharaka 2004
# experimental condition range T=20-40C, pH=1-4

-start
1 rem unit should be mol,kgw-1 and second-1
2 rem parm(1) is surface area in the unit of m2/kgw
3 rem calculation of surface area can be found in the note
4 rem M is current moles of minerals. M0 is the initial moles of minerals
5 rem parm(2) is a correction factor
10 rem acid solution parameters
11 a1=2.82E+02
12 E1=56900
13 n1=-0.500
14 n3=0.500
30 rem neutral solution parameters
31 a3=2.64E+05
32 E3=56900
33 n2=0.500
36 rem rate=0 if no minerals and undersaturated
40 SR_mineral=SR("pyrite")
41 if (M<0) then goto 200
42 if (M=0 and SR_mineral<1) then goto 200
43 if (M0<=0) then SA=PARM(1) else SA=PARM(1)*(M/M0)^0.67
50 if (SA<=0) then SA=1
60 R=8.31451
75 Rate1=a1*EXP(-E1/R/TK)*ACT("H+")^n1*ACT("Fe+3")^n3  #acid rate expression
80 Rate2=a2*EXP(-E2/R/TK)*ACT("O2")               #neutral rate expression
90 Rate=(Rate1+Rate2)*(1-Sr_mineral)*SA*parm(2)
100 moles= rate*Time
200 save moles
-end

SELECTED_OUTPUT
-file pyrite_dissolution.txt
-reset false
USER_PUNCH
-headings Time(seconds) SI(Pyrite) pH Tot_S Tot_Fe
-start
10 punch TOTAL_TIME/86400 SI("Pyrite") LA("H+")*(-1) TOT("S") TOT("Fe")
-end
END

--- End code ---

My confusion comes from the reason for the concentration to remain stagnant until the approximate 1.4 days mark, where it suddenly jumps on the attached plot

edit: the figure will not attach and is showing an error. Looks like viewing and adding attachments hasn't worked for a while as said by

--- Quote from: dlparkhurst on November 23, 2022, 03:50:05 PM ---Yes, the attachments haven't been functional for a while, both to view old ones or to add new ones.

If you have a particular one you are interested in, I can check whether it can be recreated and added within a post.

--- End quote ---

So if I were to describe it, the plot follows the x-axis (y=0) until ~1.44 days is reached, where it suddenly jumps to a logarithmic or square root-like trend

Thank you for your time and help

dlparkhurst:
The jump in saturation index corresponds to the point where O2(aq) is depleted, at which point the activities of Fe+2 and HS- increase dramatically. SI(Pyrite) is directly related to the sum of the three log activities that are plotted in USER_GRAPH. Note that the SI increases, but in fact, the rates (Rate1) is decreasing.

I again note you have an error in Rate2. A3, E3, and n2 defined in lines 12-14 of the RATES definition are not used in the calculation, and A2 and E2, which are used in line 80 are undefined and default to zero. Therefore Rate2 is always zero.

--- Code: ---# Title Pyrite Dissolution

PHASES
# from https://github.com/HydrogeoIU/PHREEQC-Kinetic-Library
Pyrite
Fe1S2 + 1.0000 H2O = 0.5000 O2    + 2.0000 HS- + 1.0000 Fe+2
-analytic 7.990927e+003 2.426724e+000 -3.481962e+005 -3.112050e+003 1.492998e+007 -8.237808e-004
-Vm 23.9400
RATES
pyrite
# from Palandri and Kharaka 2004
# experimental condition range T=20-40C, pH=1-4

-start
1 rem unit should be mol,kgw-1 and second-1
2 rem parm(1) is surface area in the unit of m2/kgw
3 rem calculation of surface area can be found in the note
4 rem M is current moles of minerals. M0 is the initial moles of minerals
5 rem parm(2) is a correction factor
10 rem acid solution parameters
11 a1=2.82E+02
12 E1=56900
13 n1=-0.500
14 n3=0.500
30 rem neutral solution parameters
31 a3=2.64E+05
32 E3=56900
33 n2=0.500
36 rem rate=0 if no minerals and undersaturated
40 SR_mineral=SR("pyrite")
41 if (M<0) then goto 200
42 if (M=0 and SR_mineral<1) then goto 200
43 if (M0<=0) then SA=PARM(1) else SA=PARM(1)*(M/M0)^0.67
50 if (SA<=0) then SA=1
60 R=8.31451
75 Rate1=a1*EXP(-E1/R/TK)*ACT("H+")^n1*ACT("Fe+3")^n3  #acid rate expression
80 Rate2=a2*EXP(-E2/R/TK)*ACT("O2")               #neutral rate expression
90 Rate=(Rate1+Rate2)*(1-Sr_mineral)*SA*parm(2)
100 moles= rate*Time
200 save moles

-end
END
SOLUTION
temp 25
units mol/kgw
O(0) 1.0 O2(g) -0.7
ph 3

EQUILIBRIUM_PHASES
Goethite

KINETICS 1
Pyrite
-m 1               # moles of solid per kg of water
-parms 50  1       # total surface area per kg of water (m2/kgw) and the scaling factor
-steps 518400 second in 100 steps        # 6 days
INCREMENTAL_REACTIONS TRUE

USER_GRAPH 1
-headings               time SI(Pyrite) O2 HS- Fe+2
-axis_scale sy_axis     auto auto auto auto auto
-initial_solutions      false
-connect_simulations    true
-plot_concentration_vs  x
-start
10 GRAPH_X TOTAL_TIME/86400
20 GRAPH_Y SI("Pyrite")
30 GRAPH_Y 0.5*LA("O2"), 2*LA("HS-"), LA("Fe+2")
-end
-active                 true

END

--- End code ---