Processes > Mixing
Mineral Dissolution with mixing
dlparkhurst:
You are still dissolving olivine to the tune of 6 millimoles in this calculation. There are still 9.84 moles of olivine available to react. You won't return to initial conditions until the olivine is depleted.
achichat:
Hi dlparkhurst,
Thank you for pointing this out, there is in fact an issue with the specified conditions, I have reduced the quantity of solid and the particle size to verify the behaviour of the code. We did eventually manage to get the result we expected (peak in pH followed by return to pH = 8.237), however, this required us to also change how we specified the time_steps of RUN_CELLS. Initially I presumed that it was meant to show the increment in time for each calculation but it only worked when I specified the point in time the calculation would be made for (and the latter made it work properly).
Any chance you'd be able to clarify this? I'm still doubting whether my calculations are integrating from 0 to the specified time_step or if it is doing it in an incremental fashion (meaning over the time increment of the next RUN_CELLS). Note that I have removed any specification for INCREMENTAL_REACTIONS in my input file.
--- Code: ---
TITLE Example 1. Olivine dissolution with kinetic rate law
SOLUTION 1-2
-water 1
units ppm
pH 8.1
pe 8.451
density 1.023
temp 15
Ca 400
Mg 1350
Na 10500
K 380
Si 4.28
Cl 19000
Alkalinity 142 as HCO3
S(6) 2700
Fe 0.02
Mn 0.002
EQUILIBRIUM_PHASES 1
CO2(g) -3.5 1 # mass percent, and quantity in mol
O2(g) -0.7 1
PHASES
Olivine
Mg1.86Fe0.14SiO4 + 4 H+ = 2 H2O + 1 SiO2 + 1.86 Mg++ + 0.14 Fe++
-log_k 26.448
-delta_h 10.71 kJ
RATES #Data from Hermanska
Olivine
-start
10 FM_Oli = 149.53/1000 # Formula mass (149.53 g.mol, or XXXX g/mol)
20 mass = m0*FM_Oli # Initial mass of olivine,
30 d0 = 20/1000000 # Diameter, m (cannot be below 10um!)
40 p_Oli = 3300 # Particle density, kg/m3
50 SA_i = (3*mass)/(p_Oli*(d0/2)) # Initial total geometric surface area olivine, m2/g
60 d_min = 10/1000000 # Particle diameter minimum
70 SA_max = 3*mass/(p_Oli*(d_min/2)) # Maximum possible surface area due to attrition, m2
80 SA = (SA_max-(SA_max-SA_i))*((m/m0)^(2/3)) # Total current olivine surface area, m2
90 Aa = 1.48*10^5 # Acidic pre-exponential factor, mol/(m2.s)
100 Ab = 2.20*10^2 # Basic pre-exponential factor, mol/(m2.s)
110 Ea = -70400 # Acidic activation energy, J/mol
120 Eb = -60900 # Basic activation energy, J/mol
130 na = 0.4 # Acidic eaction order, -,
140 nb = 0.2 # Basic eaction order, -,
150 R = 8.314 # Universal gas constant, J/(mol*K)
160 rate = SA*(Aa*((ACT("H+"))^na)*EXP(Ea/(R*TK))+Ab*((ACT("H+"))^nb)*EXP(Eb/(R*TK))) # Rate expression, mol/s
170 moles = rate*TIME # Current number of moles of olivine, mol
180 SAVE moles # Save moles for PHREEQC to track reaction
-end
USE solution 1
USE equilibrium_phases 1
SAVE solution 1-2
END
KINETICS 1
Olivine
-m0 0.1
-tol 1e-4
-runge_kutta 6
INCREMENTAL_REACTIONS False
SELECTED_OUTPUT
-reset false
-selected_out true
-high_precision true
-time true
-pH true
-alkalinity true
-totals C(4) Ca Mg Si Fe
-molalities C_di HCO3- CO3-2
-saturation_indices Calcite Aragonite
-kinetic_reactants Olivine
-equilibrium_phases Olivine CO2(g)
USER_GRAPH 1
-headings conversion pH
-axis_scale x_axis auto
-axis_scale y_axis auto
-axis_scale sy_axis auto
-axis_titles "Time" "Olivine conversion, %" "pH"
-start
10 PLOT_XY time, ((m0-m)/m0)*100, y-axis = 1
20 PLOT_XY time, -la("H+"), y-axis = 2
-end
END
USE solution 1
USE equilibrium_phases 1
USE kinetics 1
SOLUTION_MIX 1
1 1.0 # Current solution
2 0.0 # Seawater addition
END
RUN_CELLS
-cells 1
-time_step 0.25919999999999993
END
SOLUTION_MIX 1
1 0.9974147010947624 # Current solution
2 0.0025852989052376233 # Seawater addition
END
RUN_CELLS
-cells 1
-time_step 0.2702898574294808
END
SOLUTION_MIX 1
1 0.9998891137228353 # Current solution
2 0.00011088627716476233 # Seawater addition
END
RUN_CELLS
-cells 1
-time_step 0.28185419378568366
END
SOLUTION_MIX 1
1 0.9998843700082791 # Current solution
2 0.00011562999172085728 # Seawater addition
END
RUN_CELLS
-cells 1
-time_step 0.2939133096228151
END
--- End code ---
Final output (After multiple iterations) yields the desired pH. In the previous examples I provided, the time_steps were the increments, notice how the first time_step is larger than the second time_step.
dlparkhurst:
You need to use the Basic function TOTAL_TIME, not TIME. Maybe not my best moment, but TIME is an internally derived sub time step, whereas TOTAL_TIME is the elapsed time from the beginning of the simulations.
Navigation
[0] Message Index
[*] Previous page
Go to full version