Processes > Mixing

Mineral Dissolution with mixing

<< < (2/2)

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