Processes > Dissolution and precipitation
Co2 mineralization
Amr khan:
Hello, I am new to PHREEQC and still developing my understanding of its concepts. I am working on the effect of storage efficiency due to changes in porosity and permeability caused by carbon mineralization in a basalt reservoir. However, when I run my input file, I encounter an error related to porosity calculation (not giving any change in output also).
--- Code: ---PHASES
Magnesite
MgCO3 = Mg+2 + CO3-2
log_k -8.029
delta_h -6.169 kcal
# Simulation at 25?C
SOLUTION 1 # Initial formation water at 25?C
temp 25
pH 7.5
pe 4
units mol/kgw
Ca 0.0132
Mg 0.0165
Fe 0.0003
Al 1e-6
Si 0.0006
Na 0.0054
Cl 0.0148
-water 1 # kg
EQUILIBRIUM_PHASES 1
CO2(g) 1.398 10.0 # 25 bar PCO2
Calcite 0.0 0.0
Magnesite 0.0 0.0
Dolomite 0.0 0.0
KINETICS 1
-steps 0 1 2 4 8 24 48 72 days # Time steps in days
Plagioclase
-formula CaAl2Si2O8
-m0 0.45 # Initial moles
-m 0.45
-parms 65.0 1e-12 # Ea (kJ/mol), k25 (mol/m2/s)
-tol 1e-8
Pyroxene
-formula MgSiO3
-m0 0.35
-m 0.35
-parms 40.0 3e-11
-tol 1e-8
Olivine
-formula Mg2SiO4
-m0 0.18
-m 0.18
-parms 67.2 6.9e-10
-tol 1e-8
RATES
Plagioclase
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 1e-12 * exp(-65000/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.5
30 moles = R * TIME
40 save moles
-end
Pyroxene
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 3e-11 * exp(-40000/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.7
30 moles = R * TIME
40 save moles
-end
Olivine
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 6.9e-10 * exp(-67200/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.5
30 moles = R * TIME
40 save moles
-end
USER_PUNCH
-headings Time pH SI_Cal SI_Mag SI_Dol Por Perm Storage CO2_min
-start
10 REM Initial parameters
20 phi_0 = 0.15 # Initial porosity
30 k_0 = 1e-13 # Initial permeability (m^2)
40 rho_CO2 = 65.7 # CO2 density at 25?C, 25 bar (kg/m^3)
50 REM Calculate mineral volumes
60 vol_min = TOT("Calcite")*36.9 + TOT("Magnesite")*28.0 + TOT("Dolomite")*64.3
70 REM Update porosity
80 new_phi = phi_0 - vol_min/1000
90 REM Kozeny-Carman permeability
100 new_k = k_0 * (new_phi/phi_0)^3 * ((1-phi_0)/(1-new_phi))^2
110 REM CO2 storage capacity
120 storage = new_phi * rho_CO2 + (1-new_phi) * 0.3 * rho_CO2
130 REM CO2 mineralized
140 co2_min = (TOT("Calcite") + TOT("Magnesite") + 2*TOT("Dolomite")) * 44.01
150 REM Output results
160 punch TOTAL_TIME
170 punch -LA("H+")
180 punch SI("Calcite")
190 punch SI("Magnesite")
200 punch SI("Dolomite")
210 punch new_phi
220 punch new_k
230 punch storage
240 punch co2_min
-end
SELECTED_OUTPUT
-file results_25C.xls
-reset false
-time true
-pH true
-alkalinity true
-ionic_strength true
-totals Ca Mg Fe Al Si C(4)
-saturation_indices Calcite Magnesite Dolomite
-kinetic_reactants Plagioclase Pyroxene Olivine
--- End code ---
dlparkhurst:
There are several posts in the forum related to porosity changes.
The Basic function TOT applies to the total molality of an element in solution. EQUI applies to equilibrium phases and KIN applies to kinetic reactants. Look at the section The Basic Interpreter in the manual for more details and more Basic functions.
Amr khan:
Okay... Thank you.
Amr khan:
I amended a few steps but am still not getting the right result. If you can help me with this i will be grateful
Thank you
--- Code: ---PHASES
Magnesite
MgCO3 = Mg+2 + CO3-2
log_k -8.029
delta_h -6.169 kcal
# Simulation at 25?C
SOLUTION 1 # Initial formation water at 25?C
temp 25
pH 7.5
pe 4
units mol/kgw
Ca 0.0132
Mg 0.0165
Fe 0.0003
Al 1e-6
Si 0.0006
Na 0.0054
Cl 0.0148
-water 1 # kg
EQUILIBRIUM_PHASES 1
CO2(g) 1.398 10.0 # 25 bar PCO2
Calcite 0.0 0.0
Magnesite 0.0 0.0
Dolomite 0.0 0.0
KINETICS 1
-steps 0 1 2 4 8 24 48 72 days # Time steps in days
Plagioclase
-formula CaAl2Si2O8
-m0 0.45 # Initial moles
-m 0.45
-parms 65.0 1e-12 # Ea (kJ/mol), k25 (mol/m2/s)
-tol 1e-8
Pyroxene
-formula MgSiO3
-m0 0.35
-m 0.35
-parms 40.0 3e-11
-tol 1e-8
Olivine
-formula Mg2SiO4
-m0 0.18
-m 0.18
-parms 67.2 6.9e-10
-tol 1e-8
RATES
Plagioclase
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 1e-12 * exp(-65000/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.5
30 moles = R * TIME
40 save moles
-end
Pyroxene
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 3e-11 * exp(-40000/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.7
30 moles = R * TIME
40 save moles
-end
Olivine
-start
10 if TK <= 0 then TK = 273.15 + 25 # Ensure TK is initialized
20 R = 6.9e-10 * exp(-67200/8.314*(1/TK - 1/298.15)) * (1 + 10^(-pH))^0.5
30 moles = R * TIME
40 save moles
-end
USER_PUNCH
-headings Time pH SI_Cal SI_Mag SI_Dol Por Perm Storage CO2_min
-start
10 REM Initial parameters
20 phi_0 = 0.15 # Initial porosity
30 k_0 = 1e-13 # Initial permeability (m^2)
40 rho_CO2 = 65.7 # CO2 density at 25?C, 25 bar (kg/m^3)
50 REM Calculate mineral volumes
60 vol_min = EQUI("Calcite")*36.9 + EQUI("Magnesite")*28.0 + EQUI("Dolomite")*64.3
70 REM Update porosity
80 new_phi = phi_0 - vol_min/1000
90 REM Kozeny-Carman permeability
100 new_k = k_0 * (new_phi/phi_0)^3 * ((1-phi_0)/(1-new_phi))^2
110 REM CO2 storage capacity
120 storage = new_phi * rho_CO2 + (1-new_phi) * 0.3 * rho_CO2
130 REM CO2 mineralized
140 co2_min = (EQUI("Calcite") + EQUI("Magnesite") + 2*EQUI("Dolomite")) * 44.01
150 REM Output results
160 punch TOTAL_TIME
170 punch -LA("H+")
180 punch SI("Calcite")
190 punch SI("Magnesite")
200 punch SI("Dolomite")
210 punch new_phi
220 punch new_k
230 punch storage
240 punch co2_min
-end
SELECTED_OUTPUT
-file results_123.xls
-reset false
-time true
-pH true
-alkalinity true
-ionic_strength true
-totals Ca Mg Fe Al Si C(4)
-saturation_indices Calcite Magnesite Dolomite
-kinetic_reactants Plagioclase Pyroxene Olivine
--- End code ---
dlparkhurst:
First, you need to decide on the volume of your cell. Two possibilities are (1) you have 1 L of solution, or (2) 1 L of porous media. If you have porosity of 0.15, then in case (1) you have 1/0.15 = 6.67 L of porous media; 5.57 L of rock, and 1 L of water. In case (2) you have 1 L of porous media, 0.85 L of rock, and 0.15 L of water.
Your input file as 1 kg of water, so about 1 L of water, which would translate to a representative volume (RV) of 6.67 L.
However you define RV, you can use the following definitions to calculate the change in porosity from before reaction (p) to after reaction (p').
Let dn(i) represent the change in moles of mineral i due to reaction,
vm(i) the molar volume of mineral i, cm^3/mol,
then the change in porosity is
--- Code: ---p' = p - [sum(dn(i)*vm(i))/1000)]/RV
--- End code ---
If you consider only reactions with equilibrium phases, each dn(i) is given by the function EQUI_DELTA. If you are also considering kinetic reactions, then dn for kinetic reactions is given by KIN_DELTA, and you need to account for all of the minerals, both equilibrium and kinetic, that are reacting.
Navigation
[0] Message Index
[#] Next page
Go to full version