Ejemplo simple de disolución cinética de calcita con Phreeqc y Aquifer Lab - Tutorial

Este es un ejemplo de disolución de calcita con cinética donde se define una tasa simplificada y una molalidad inicial. El tutorial cubre la creación de un archivo de entrada para Phreeqc, la selección de la base de datos, la simulación de Phreeqc en Aquifer App y el análisis de los datos de salida procesados en un Jupyter notebook. Finalmente, se grafica la molalidad de Calcio y el pH en función del tiempo.

Tutorial

Archivo de Phreeqc

TITLE Kinetic dissolution of calcite calculated with Phreeqc

SOLUTION 1
 temp 10
 pH   6
 C    1

EQUILIBRIUM_PHASES 1
 CO2(g) -1.5

KINETICS 1
 Calcit2 
  formula CaCO3 
  -m0 1 
  -steps 30000 in 20 steps

RATES
Calcit2
 -start
 10 rate=10^-6.91 - 10^-1.52*(tot("Ca"))^2
 20 save 1 * rate * time 
 -end

END

Código

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#solution composition 
compDf = pd.read_csv('solutionComposition.csv', index_col=[0,1,2])
compDf.head()

Element Molality Moles
Simulation Type Number
1 initial 1 C 0.001000 0.001000
batch 1 C 0.002326 0.002326
1 Ca 0.000184 0.000184
2 C 0.002688 0.002688
2 Ca 0.000365 0.000365
#caDf = compDf.loc[(compDf.index.get_level_values('Type') == 'batch') & (compDf.Element == 'Ca')]
caDf = compDf.loc[compDf.Element == 'Ca']
caDf.head()

Element Molality Moles
Simulation Type Number
1 batch 1 Ca 0.000184 0.000184
2 Ca 0.000365 0.000365
3 Ca 0.000540 0.000540
4 Ca 0.000707 0.000707
5 Ca 0.000863 0.000863
#solution description for ph values
descDf = pd.read_csv('solutionDescription.csv', index_col=[0,1,2])
descDf.head()

Parameter Value
Simulation Type Number
1 initial 1 pH 6.00000
1 pe 4.00000
1 Specific Conductance (µS/cm, 10°C) 8.00000
1 Density (g/cm³) 0.99972
1 Volume (L) 1.00033
#phDf = descDf.loc[(descDf.index.get_level_values('Type') == 'batch') & (descDf.Parameter == 'pH')]
phDf = descDf.loc[descDf.Parameter == 'pH']
phDf.head()

Parameter Value
Simulation Type Number
1 initial 1 pH 6.000
batch 1 pH 6.017
2 pH 6.210
3 pH 6.338
4 pH 6.432
#define time list
timeList = np.linspace(0,30000,21)
timeList
array([    0.,  1500.,  3000.,  4500.,  6000.,  7500.,  9000., 10500.,
       12000., 13500., 15000., 16500., 18000., 19500., 21000., 22500.,
       24000., 25500., 27000., 28500., 30000.])
#plot Ca molality
plt.plot(timeList[1:],caDf.Molality*1000)
plt.ylabel('Ca (mMoles)')
plt.xlabel('Time Seconds')
Text(0.5, 0, 'Time Seconds')
#plot pH
plt.plot(timeList,phDf.Value)
plt.xlabel('pH')
plt.xlabel('Time (Seconds)')
Text(0.5, 0, 'Time (Seconds)')

Datos de entrada

Puede descargar los datos de entrada aquí.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Posted on March 18, 2024 and filed under TutorialHidrologia, TutorialPython, Modelamiento.