SOLUTION 0 temp 25 pH 5.8 pe 4 redox pe units mmol/l density 1 -water 1 # kg EQUILIBRIUM_PHASES 0 CO2(g) -3.398 # CO2 partial pressure at 70 bar (pre-equilibrated) SOLUTION 1-60 temp 25 pH 3.0 pressure 70 units mol/kgw C(4) 0 charge # CO2-saturated water water 1 # 1 kg of deionized water SAVE solution 1-60 RATES Forsterite -start 10 REM acid solution parameters 20 a1 = 0.54 # Rosso and Rimstidt (2000) rates data 30 e1 = 42600 40 n1 = 0.5 50 REM neutral solution parameters 60 a2 = 1614 70 e2 = 79000 80 REM basic solution parameters 90 a3 = 0 100 e3 = 0 110 n2 = 0 120 REM rate=0 if no mineral mass or undersaturated 130 IF(M <= 0) THEN GOTO 240 140 IF(SI("Forsterite") >= 0) THEN GOTO 240 150 IF(M0 <= 0) THEN sa = PARM(1) # Surface area in m? 160 IF(sa <= 0) THEN sa = 1 170 r = 8.31451 180 rate1 = a1*ACT("H+")^n1*EXP(-e1/r/TK) 190 rate2 = a2*EXP(-e2/r/TK) 200 rate3 = a3*ACT("OH-")^n2*EXP(-e3/r/TK) 210 rate = (rate1 + rate2 + rate3) * (1 - SI("Forsterite")) * sa * PARM(2) 220 moles = rate * TIME 230 IF(moles > M) THEN moles = M 240 SAVE moles -end KINETICS 1 Forsterite -formula Mg2SiO4 1 -m 0.0284 # Moles of forsterite (we state 4g as an approx. quantity then do 4g / 140.69g/mol) -m0 0.0284 # Initial moles -parms 1.62 1 # Parm 1 is surface area (we take BET measurement m2/g then multiply by approx. mass in g) -tol 1e-08 # a default value -steps 1 -step_divide 1 -runge_kutta 3 -bad_step_max 500 REACTION_TEMPERATURE 1 25 TRANSPORT -cells 60 # 6 cm or 0.06 m(i.e. mesoscale dimension) divided into 60 cells -length 1e-03 # Each cell is 1 mm in length -time_step 86400 # 1 day per shift in seconds -shifts 5 # 5 days of simulation -flow_direction forward -punch_cells 1-60 # Record data for all cells -punch_frequency 5 -boundary_conditions flux constant # Pressure-maintained system -porosity 0.3 # Porosity of 30% -dispersivity 0.01 # Longitudinal dispersivity default value used -correct_disp true -diffusion coefficient 0.78e-09 -thermal diffusion coefficient 0.78e-09 -warnings false #EXCHANGE 1 #X 0.001 # lower total exchange capacity for Mg2+ #EXCHANGE_SPECIES #MgX2 = Mg+2 + 2X- #log_k 0.5 # Selectivity for Mg2+ #USE exchange 1 KNOBS -iterations 500 # Allow more iterations per time step -tolerance 1e-8 # Loosen the tolerance for convergence USER_GRAPH 1 -headings Time Mg Si -axis_titles "Time (days)" "Concentration (mmol/L)" "" -chart_title "Concentrations with reaction time" -initial_solutions false -connect_simulations true -plot_concentration_vs t -start 10 IF (STEP_NO = 1) THEN CUM_MG = 0 #maintaining the cumulative values across shifts, to correctly track concentration changes over time without resetting them each day. 20 IF (STEP_NO = 1) THEN CUM_SI = 0 30 CUM_MG = CUM_MG + TOT("Mg") # Accumulate Mg over time 40 CUM_SI = CUM_SI + TOT("Si") # Accumulate Si over time 50 graph_x TOTAL_TIME / 86400 # Convert seconds to days 60 graph_y CUM_MG 70 graph_y CUM_SI #10 graph_x TOTAL_TIME/86400 #20 graph_y TOT("Mg") #30 graph_y TOT("Si") -end USER_GRAPH 2 -headings Distance Mg Si -axis_titles "Distance (m)" "Concentration, mmol/L" "" -chart_title "Concentrations with distance across beadpack" -initial_solutions false -connect_simulations true -plot_concentration_vs x -start 10 IF (STEP_NO = 1) THEN CUM_MG = 0 #maintaining the cumulative values across shifts, to correctly track concentration changes over time without resetting them each day. 20 IF (STEP_NO = 1) THEN CUM_SI = 0 30 CUM_MG = CUM_MG + TOT("Mg") # Accumulate Mg over time 40 CUM_SI = CUM_SI + TOT("Si") # Accumulate Si over time 50 graph_x dist 60 graph_y CUM_MG 70 graph_y CUM_SI #10 graph_x dist #20 graph_y TOT("Mg") #30 graph_y TOT("Si") -end SELECTED_OUTPUT -file forsterite_beadpack_output.txt -ph -totals Mg Si END
SOLUTION 0 temp 25 pH 5.8 pe 4 redox pe units mmol/l density 1 -water 1 # kg EQUILIBRIUM_PHASES 0 CO2(g) -3.398 # CO2 partial pressure at 70 bar (pre-equilibrated) SOLUTION 1-60 temp 25 pH 3.0 pressure 70 units mol/kgw C(4) 0 charge # CO2-saturated water water 1 # 1 kg of deionized water SAVE solution 1-60 RATES Forsterite -start 10 REM acid solution parameters 20 a1 = 0.54 # Rosso and Rimstidt (2000) rates data 30 e1 = 42600 40 n1 = 0.5 50 REM neutral solution parameters 60 a2 = 1614 70 e2 = 79000 80 REM basic solution parameters 90 a3 = 0 100 e3 = 0 110 n2 = 0 120 REM rate=0 if no mineral mass or undersaturated 130 IF(M <= 0) THEN GOTO 240 140 IF(SI("Forsterite") >= 0) THEN GOTO 240 150 IF(M0 <= 0) THEN sa = PARM(1) # Surface area in m? 160 IF(sa <= 0) THEN sa = 1 170 r = 8.31451 180 rate1 = a1*ACT("H+")^n1*EXP(-e1/r/TK) 190 rate2 = a2*EXP(-e2/r/TK) 200 rate3 = a3*ACT("OH-")^n2*EXP(-e3/r/TK) 210 rate = (rate1 + rate2 + rate3) * (1 - SI("Forsterite")) * sa * PARM(2) 220 moles = rate * TIME 230 IF(moles > M) THEN moles = M 240 SAVE moles -end KINETICS 1 Forsterite -formula Mg2SiO4 1 -m 0.0284 # Moles of forsterite (we state 4g as an approx. quantity then do 4g / 140.69g/mol) -m0 0.0284 # Initial moles -parms 1.62 1 # Parm 1 is surface area in m?(we take BET measurement m2/g then multiply by approx. mass in g) -tol 1e-08 # a default value -steps 1 -step_divide 1 -runge_kutta 3 -bad_step_max 500 REACTION_TEMPERATURE 1 25 TRANSPORT -cells 60 -shifts 12743 -time_step 33.9 -boundary_conditions flux constant -lengths 0.001 -dispersivities 0.01 -correct_disp true -diffusion_coefficient 7.8e-10 -thermal_diffusion 2 7.8e-10 -punch_frequency 60 -warnings false USER_GRAPH 1 -headings Time Mg Si -axis_titles "Time (days)" "Concentration (mmol/L)" "" -chart_title "Concentrations with reaction time" -initial_solutions false -connect_simulations true -plot_concentration_vs t -start 10 IF (STEP_NO = 1) THEN CUM_MG = 0 #maintaining the cumulative values across shifts, to correctly track concentration changes over time without resetting them each day. 20 IF (STEP_NO = 1) THEN CUM_SI = 0 30 CUM_MG = CUM_MG + TOT("Mg") # Accumulate Mg over time 40 CUM_SI = CUM_SI + TOT("Si") # Accumulate Si over time 50 graph_x TOTAL_TIME / 86400 # Convert seconds to days 60 graph_y CUM_MG 70 graph_y CUM_SI #10 graph_x TOTAL_TIME/86400 #20 graph_y TOT("Mg") #30 graph_y TOT("Si") -end USER_GRAPH 2 -headings Distance Mg Si -axis_titles "Distance (m)" "Concentration, mmol/L" "" -chart_title "Concentrations with distance across beadpack" -initial_solutions false -connect_simulations true -plot_concentration_vs x -start 10 IF (STEP_NO = 1) THEN CUM_MG = 0 #maintaining the cumulative values across shifts, to correctly track concentration changes over time without resetting them each day. 20 IF (STEP_NO = 1) THEN CUM_SI = 0 30 CUM_MG = CUM_MG + TOT("Mg") # Accumulate Mg over time 40 CUM_SI = CUM_SI + TOT("Si") # Accumulate Si over time 50 graph_x dist 60 graph_y CUM_MG 70 graph_y CUM_SI #10 graph_x dist #20 graph_y TOT("Mg") #30 graph_y TOT("Si") -end USER_GRAPH 3 -headings PV Mg Si -axis_titles "Pore volumes injected" "Concentration, mmol/L" "" -chart_title "Concentrations against injected poe volumes" -initial_solutions false -connect_simulations true -plot_concentration_vs x -start 10 IF (STEP_NO = 1) THEN CUM_MG = 0 #maintaining the cumulative values across shifts, to correctly track concentration changes over time without resetting them each day. 20 IF (STEP_NO = 1) THEN CUM_SI = 0 30 CUM_MG = CUM_MG + TOT("Mg") # Accumulate Mg over time 40 CUM_SI = CUM_SI + TOT("Si") # Accumulate Si over time 50 graph_x (step_no + 0.5)/cell_no #calculation for pore volume to be plotted 60 graph_y CUM_MG 70 graph_y CUM_SI #10 graph_x (step_no + 0.5)/cell_no #20 graph_y TOT("Mg") #30 graph_y TOT("Si") -end SELECTED_OUTPUT 1 -file forsterite_beadpack_output_v2.txt -simulation true -solution true -pH true -temperature true -totals Mg Si -saturation_indices SiO2(am) Magnesite -kinetic_reactants Forsterite END
RATES Forsterite-start 10 REM acid solution parameters 20 a1 = 0.54 # Rosso and Rimstidt (2000) rates data 30 e1 = 42600 40 n1 = 0.5 50 REM neutral solution parameters 60 a2 = 1614 70 e2 = 79000 80 REM basic solution parameters 90 a3 = 0100 e3 = 0110 n2 = 0120 REM rate=0 if no mineral mass or undersaturated130 IF(M <= 0) THEN GOTO 240140 IF(SI("Forsterite") >= 0) THEN GOTO 240150 IF(M0 <= 0) THEN sa = PARM(1) # Surface area in m?160 IF(sa <= 0) THEN sa = 1170 r = 8.31451180 rate1 = a1*ACT("H+")^n1*EXP(-e1/r/TK)190 rate2 = a2*EXP(-e2/r/TK)200 rate3 = a3*ACT("OH-")^n2*EXP(-e3/r/TK)210 rate = (rate1 + rate2 + rate3) * (1 - SI("Forsterite")) * sa * PARM(2)220 moles = rate * TIME230 IF(moles > M) THEN moles = M240 SAVE moles-endENDSOLUTION 0 temp 25 pH 5.8 charge pe 4 redox pe units mmol/l density 1 calc C(4) 1 CO2(g) -3.398 -water 1 # kgENDSOLUTION 1-60 temp 25 pH 3.0 pressure 70 units mol/kgw C(4) 1 CO2(g) -3.398 # CO2-saturated water Cl 1 charge water 1 # 1 kg of deionized waterEND KINETICS 1-60Forsterite -formula Mg2SiO4 1 -m 0.0284 # Moles of forsterite (we state 4g as an approx. quantity then do 4g / 140.69g/mol) -m0 0.0284 # Initial moles -parms 1.62 1 # Parm 1 is surface area (we take BET measurement m2/g then multiply by approx. mass in g) -tol 1e-08 # a default value-steps 1-step_divide 1-runge_kutta 3-bad_step_max 500ENDREACTION_TEMPERATURE 1-60 25REACTION_PRESSURE 1-60 70 # atmENDTRANSPORT -cells 6 # 60 # 6 cm or 0.06 m(i.e. mesoscale dimension) divided into 60 cells -length 0.01 # 1e-03 # Each cell is 1 mm in length -time_step 2550 # 255 # s/cell advective velocity 0.01/2550 = 4e-6 m/s -shifts 170 # 60 # days of simulation -flow_direction forward -punch_cells 1-6 # 1-60 # Record data for all cells -punch_frequency 1 -boundary_conditions flux flux # Pressure-maintained system -porosity 0.3 # Porosity of 30% -dispersivity 0.01 # Longitudinal dispersivity default value used -correct_disp true -diffusion coefficient 0.78e-09 -thermal diffusion coefficient 0.78e-09 -warnings false USER_GRAPH 1 -headings Time Mg Si Fosterite_dis -axis_titles "Distance, m" "Concentration (mol/kgw)" "Fosterite dissolved, moles" -chart_title "Concentrations with distance" -initial_solutions false -connect_simulations true -plot_concentration_vs x -start#5 if (step_no <> 60) then goto 1005 if (step_no <> 170) then goto 100 10 graph_x dist20 graph_y TOT("Mg")30 graph_y TOT("Si")40 graph_sy M0 - M100 END -endUSER_GRAPH 2 -headings Time Cummulative_dissolved Mg Si -axis_titles "Time, days" "Fosterite dissolved, moles" "mol/kgw, end of column" -chart_title "Concentrations with reaction time" -initial_solutions false -connect_simulations true -plot_concentration_vs x -start30 PUT(M0 - M, cell_no)40 if (cell_no <> 60) then goto 20040 if (cell_no <> 6) then goto 20045 sum = 050 FOR i = 1 TO 6060 sum = sum + GET(i)70 NEXT i80 graph_x TOTAL_TIME / 8640090 graph_y sum100 graph_sy TOT("Mg")110 graph_sy TOT("Si")200 end -end END
PHASESForsteriteMg2SiO4 + 4 H+ = 2 Mg+2 + H4SiO4 log_k 28.609 delta_h -217.115 #kJ/mol #Internal calculation -analytic -1.0983766E3 -1.5385695E-1 7.321503E4 3.91599E2 -3.7061609E6 -Vm ?? #cm3/mol = MW / rho
SAVE solution 4 # Save the final solution from transport model after the first step# modify the pressure and CO2 after depressurization:SOLUTION 5 temp 25 pH 3.0 pressure 1 # Set the pressure to 1 atm (atmospheric) units mol/kgw C(4) 0 # Remove CO2(g) from the system water 1 # 1 kg of deionized waterENDEQUILIBRIUM_PHASES 1 CO2(g) 0 # Set CO2 partial pressure to zero after depressurizationENDREACTION_PRESSURE 1 1 # Set the pressure to 1 atm after depressurizationUSE solution 5 # Use the saved solution for the next calculationUSE equilibrium_phases 1 # Apply the new equilibrium phases
SAVE solution 4 # Save the final solution from transport model after the first stepENDUSE solution 4EQUILIBRIUM_PHASES 1 CO2(g) -3.4 # Set CO2 partial pressure to zero after depressurizationREACTION_PRESSURE 1 1 # Set the pressure to 1 atm after depressurizationEND