{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Integration of pygcc with EQ3/6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Import pygcc, EQ3/6 environment and other modules" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All files used in this tutorial can be downloaded from https://bitbucket.org/Tutolo-RTG/pygcc/src/master/docs/\n", "\n", "Download [output_reader](https://bitbucket.org/Tutolo-RTG/pygcc/src/master/docs/output_reader.py) into your working directory" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.5.2\n" ] } ], "source": [ "import os, subprocess, re, numpy as np, pandas as pd, sys\n", "import shutil\n", "from importlib.metadata import version\n", "print(version(\"pygcc\"))\n", "\n", "from pygcc.pygcc_utils import *\n", "from output_reader import read_eq36output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set current working directory and EQ3/6 working directory. This is because EQ3/6 can only run from its working directory" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "eq_dir = \"C:\\Eq3_6v8.0a\\work_db\"\n", "if os.path.exists(eq_dir) == False:\n", " os.makedirs(os.path.join(eq_dir))\n", " \n", "current_dir = os.getcwd()\n", "output_folder = 'Vent_spec'\n", "if os.path.exists(os.path.join(os.getcwd(), output_folder)) == False:\n", " os.makedirs(os.path.join(os.getcwd(), output_folder))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# function to copy file between source and destination directory\n", "def copyfile(source_dir, destination_dir):\n", " # Source path\n", " source = source_dir\n", "\n", " # Destination path\n", " destination = destination_dir\n", " \n", " try:\n", " shutil.copy(source, destination)\n", " print(\"File copied successfully.\")\n", "\n", " # If source and destination are same\n", " except shutil.SameFileError:\n", " print(\"Same files are in the Source and destination path.\")\n", "\n", " # If there is any permission issue\n", " except PermissionError:\n", " print(\"Permission denied.\")\n", "\n", " # For other errors\n", " except:\n", " print(\"Error occurred while copying file.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Load filtered vent fluid data" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sample-ID EPR 21°N-OBS-1985\n", "Geol_setting Mid-oceanic spreading center\n", "Rock_type_primary Basalt\n", "Depth 2500\n", "Temp 340\n", "pH 3.4\n", "XH2S 7.6\n", "Cl 500\n", "Na 439\n", "Fe 1530\n", "Mn 1024\n", "H2 0.01\n", "K 23.5\n", "Ca 15.6\n", "Si 17.6\n", "Cu 1e-07\n", "Press 251.945\n", "Name: 2, dtype: object" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filename = './MARHYS_DB_2_0_filter.csv'\n", "df = pd.read_csv(filename)\n", "i = 2\n", "df.loc[i, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will work with EPR 21 N sample to run speciation and warm up the fluid from 25 °C to 340 °C\n", "#### Generate the database for the vent fluid with pygcc and run the database through EQ3/6 preprocessing\n", "We initialize the inputs and generate the database" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pygcc\\pygcc_utils.py:3327: UserWarning: Some temperature and pressure points are out of aqueous species HKF eqns regions of applicability, hence, density extrapolation has been applied\n", " warnings.warn('Some temperature and pressure points are out of aqueous species HKF eqns regions of applicability, hence, density extrapolation has been applied')\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Success, your new EQ3/6 database is ready for download\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P = np.round(df.loc[i,:].Press)\n", "Temp = df.loc[i,:].Temp; npH = df.loc[i,:].pH\n", "# multiplication was done to convert the concentrations from mmol/kg and umol/kg to mol/kg\n", "nCl = df.loc[i,:].Cl*1e-3; nNa = df.loc[i,:].Na*1e-3\n", "nH2S = df.loc[i,:].XH2S*1e-3; nFe = df.loc[i,:].Fe*1e-6\n", "nMn = df.loc[i,:].Mn*1e-6; nH2 = df.loc[i,:].H2*1e-6\n", "nK = df.loc[i,:].K*1e-3; nCu = df.loc[i,:].Cu*1e-6; \n", "nCa = df.loc[i,:].Ca*1e-3; nSi = df.loc[i,:].Si*1e-3\n", "\n", "write_database(T = [20, Temp], P = P, solid_solution = True, objdb = './data0', \n", " clay_thermo = 'Yes', dataset = 'eq36', sourcedb = './database/data0.geo') #" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copy the generated database to the EQ3/6 work environment specified above and run through eqpt for preprocessing" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "File copied successfully.\n" ] } ], "source": [ "copyfile(current_dir + '/output/EQ36/data0.geo', eq_dir + '/data0.pym')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# change the working directory to EQ3/6 work environment\n", "os.chdir(eq_dir)\n", "# load EQ3/6 environment\n", "os.environ[\"EQ36CO\"] = \"C:\\Eq3_6v8.0a\\Bin\"\n", "os.environ[\"EQ36DA\"] = eq_dir" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# check the \"eqptout.txt\" for the output of the database preprocessing\n", "f = open(current_dir + \"/%s/eqptout.txt\" % output_folder, \"w\")\n", "subprocess.run([r'C:/Eq3_6v8.0a/bin/runeqpt', 'pym'], stdout = f)\n", "f.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Replace species and concentration in an existing eq3 file" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# change the working directory back to current work environment to do some calculations and build input files\n", "os.chdir(current_dir)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['|Special Basis Switches (for model definition only) | (nsbswt) |\\n',\n", " '|------------------------------------------------------------------------------|\\n',\n", " '|Replace |SO4-- | (usbsw(1,n)) |\\n',\n", " '| with |HS- | (usbsw(2,n)) |\\n',\n", " '|------------------------------------------------------------------------------|\\n']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Switch basis between HS- and SO4--\n", "lst = ['|Special Basis Switches (for model definition only) | (nsbswt) |\\n', \n", " '|------------------------------------------------------------------------------|\\n',\n", " '|Replace |SO4-- | (usbsw(1,n)) |\\n',\n", " '| with |HS- | (usbsw(2,n)) |\\n',\n", " '|------------------------------------------------------------------------------|\\n']\n", "lst" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['|Default redox constraint (irdxc3): |\\n',\n", " '| [ ] (-3) Use O2(g) line in the aqueous basis species block |\\n',\n", " '| [ ] (-2) pe (pe units) | 0.00000E+00| (pei) |\\n',\n", " '| [ ] (-1) Eh (volts) | 5.00000E-01| (ehi) |\\n',\n", " '| [ ] ( 0) Log fO2 (log bars) |-7.00000E-01| (fo2lgi) |\\n',\n", " '| [x] ( 1) Couple (aux. sp.) |H2(aq) | (uredox) |\\n',\n", " '|------------------------------------------------------------------------------|\\n']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set H2(aq) as the redox constraint\n", "lst2 = ['|Default redox constraint (irdxc3): |\\n',\n", " '| [ ] (-3) Use O2(g) line in the aqueous basis species block |\\n',\n", " '| [ ] (-2) pe (pe units) | 0.00000E+00| (pei) |\\n',\n", " '| [ ] (-1) Eh (volts) | 5.00000E-01| (ehi) |\\n',\n", " '| [ ] ( 0) Log fO2 (log bars) |-7.00000E-01| (fo2lgi) |\\n',\n", " '| [x] ( 1) Couple (aux. sp.) |H2(aq) | (uredox) |\\n',\n", " '|------------------------------------------------------------------------------|\\n']\n", "lst2" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['|Aqueous Basis Species/Constraint Species |Conc., etc. |Units/Constraint|\\n',\n", " '| (uspeci(n)/ucospi(n)) | (covali(n))|(ujf3(jflgi(n)))|\\n',\n", " '|------------------------------------------------------------------------------|\\n',\n", " '|Fe++ | 1.53000e-03|Molality |\\n',\n", " '|Na+ | 4.39000e-01|Molality |\\n',\n", " '|H+ | 3.40000e+00|pH |\\n',\n", " '|Cl- | 5.00000e-01|Molality |\\n',\n", " '|HS- | 7.60000e-03|Molality |\\n',\n", " '|Mn++ | 1.02400e-03|Molality |\\n',\n", " '|K+ | 2.35000e-02|Molality |\\n',\n", " '|Ca++ | 1.56000e-02|Molality |\\n',\n", " '|SiO2(aq) | 1.76000e-02|Molality |\\n',\n", " '|Cu++ | 1.00000e-13|Molality |\\n',\n", " '|H2(aq) | 1.00000e-08|Molality |\\n',\n", " '|------------------------------------------------------------------------------|\\n']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ion_lst = ['Fe++', 'Na+', 'H+', 'Cl-', 'HS-', 'Mn++', 'K+', 'Ca++', 'SiO2(aq)', 'Cu++', 'H2(aq)'] # , 'H2S(aq)'\n", "conc_lst = [nFe, nNa, npH, nCl, nH2S, nMn, nK, nCa, nSi, nCu, nH2]\n", "\n", "lst3 = ['|Aqueous Basis Species/Constraint Species |Conc., etc. |Units/Constraint|\\n',\n", " '| (uspeci(n)/ucospi(n)) | (covali(n))|(ujf3(jflgi(n)))|\\n',\n", " '|------------------------------------------------------------------------------|\\n']\n", "for i, j in zip(ion_lst, conc_lst):\n", " units = 'Molality ' if i != 'H+' else 'pH '\n", " lst3.append('|%-10s | %.5e|%s|\\n' % (i, j, units))\n", "lst3.append('|------------------------------------------------------------------------------|\\n')\n", "lst3" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# open an existing sample file and a new in put file\n", "fin = open(\"swmaj_ex.3i\", \"r\")\n", "fout = open(\"./%s/swmaj.3i\" % output_folder, \"w\")\n", "\n", "# read and paste line by line until the beginning of the \"Special Basis Switches\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('|').startswith(\"Special Basis Switches\"):\n", " break\n", " fout.writelines(s)\n", "# paste the new \"Special Basis Switches\" block\n", "fout.writelines(lst)\n", "# read and skip pasting until the end of the \"Special Basis Switches\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('|').startswith(\"Temperature (C)\"):\n", " break\n", "fout.writelines(s)\n", "\n", "# read and paste line by line until the beginning of the \"Default redox constraint\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('|').startswith(\"Default redox constraint\"):\n", " break\n", " fout.writelines(s)\n", "# paste the new \"Special Basis Switches\" block\n", "fout.writelines(lst2)\n", "# read and skip pasting until the end of the \"Default redox constraint\" block and \n", "# the beginning of the \"Aqueous Basis Species\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('|').startswith(\"Aqueous Basis Species/Constraint Species\"):\n", " break\n", "\n", "# paste the new \"Aqueous Basis Species\" block\n", "fout.writelines(lst3)\n", "# read and skip pasting until the end of the \"Aqueous Basis Species\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('* ').startswith(\"Valid jflag strings\"):\n", " break\n", "fout.writelines(s)\n", "\n", "# read and paste the rest of the files\n", "for i in range(1000):#\n", " s = fin.readline()\n", " fout.writelines(s)\n", "\n", "fout.close()\n", "fin.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copy the new eq3 input file to the EQ3/6 work environment and run eq3" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "File copied successfully.\n" ] } ], "source": [ "copyfile(current_dir + '/%s/swmaj.3i' % output_folder, eq_dir + '/swmaj.3i')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# change the working directory to EQ3/6 work environment\n", "os.chdir(eq_dir)\n", "\n", "# check the \"eq3out.txt\" for the eq3 run details\n", "f = open(current_dir + \"/%s/eq3out.txt\" % output_folder, \"w\")\n", "subprocess.run([r'C:\\Eq3_6v8.0a/bin/runeq3', 'pym', 'swmaj.3i'], stdout = f)\n", "f.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a new eq6 file to run speciation and warm up temperature" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# change the working directory back to current work environment to build input files\n", "os.chdir(current_dir)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "Descript = 'Heat ventfluid from 25C to %sC' % Temp\n", "# open an existing sample file, a new input file and the copied eq3 output file\n", "fin = open(\"swmaj_ex.6i\", \"r\")\n", "fout = open(\"./%s/swmaj.6i\" % output_folder, \"w\")\n", "f3p = open(eq_dir + \"/swmaj.3p\", \"r\")\n", "# read and paste line by line until the beginning of the first \"Linear tracking in Xi\" in the \"Temperature option\" block\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('| ').startswith(\"[x] ( 1) Linear tracking in Xi\"):\n", " break\n", " if s.strip('|').startswith('EQ6 input file name'):\n", " line = '%s= %-11s |\\n' % (s.split('=')[0], \n", " 'swmaj.6i')\n", " fout.writelines(line)\n", " elif s.strip('|').startswith('Description'):\n", " line = '%s= %-45s |\\n' % (s.split('=')[0], Descript)\n", " fout.writelines(line)\n", " else:\n", " fout.writelines(s)\n", "\n", "#create the new \"Linear tracking in Xi\" subblock and paste the new subblock\n", "derivative = (Temp - 25)/1\n", "lst = ['| [x] ( 1) Linear tracking in Xi: |\\n',\n", " '| Base Value (C) | 2.50000E+01| (tempcb) |\\n',\n", " '| Derivative | %.5e| (ttk(1)) |\\n' % derivative]\n", "fout.writelines(lst)\n", "\n", "# read and skip pasting until the end of the \"Linear tracking in Xi\" subblock\n", "for i in range(1000):#\n", " s = fin.readline()\n", " if s.strip('|').lstrip().startswith(\"Derivative\"):\n", " break\n", "\n", "# read and paste line by line until the beginning of the \"eq3 output\" input\n", "for i in range(10000):#\n", " s = fin.readline()\n", " if s.strip('* ').startswith(\"Start of the bottom half of the INPUT file\"):\n", " break\n", " fout.writelines(s)\n", "\n", "# paste the new eq3 output\n", "for i in range(1000):#\n", " s = f3p.readline()\n", " fout.writelines(s)\n", "fout.close()\n", "fin.close()\n", "f3p.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copy the new eq6 input file to the EQ3/6 work environment and run eq6" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "File copied successfully.\n" ] } ], "source": [ "copyfile(current_dir + '/%s/swmaj.6i' % output_folder, eq_dir + '/swmaj.6i')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# change the working directory to EQ3/6 work environment\n", "os.chdir(eq_dir)\n", "\n", "# check the \"eq6out.txt\" for the eq6 run details\n", "f = open(current_dir + \"/%s/eq6out.txt\" % output_folder, \"w\")\n", "subprocess.run([r'C:\\Eq3_6v8.0a/bin/runeq6', 'pym', 'swmaj.6i'], stdout = f)\n", "f.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Results processing" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n" ] } ], "source": [ "data = {}\n", "rerun = []\n", "path = eq_dir + '/'\n", "files = os.listdir(path)\n", "for i, f in enumerate(files):\n", " if f.endswith('.6o'): \n", " size = os.path.getsize(path + f)/(1024) #size in KB\n", " if size > 2:\n", " data[f[:-3]] = read_eq36output(path + f)\n", " else:\n", " rerun.append(f)\n", "print(rerun)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "data_df = data['swmaj']\n", "# data_df" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Xi', 'pH', 'Temperature_C', 'Pressure_bars', 'Water_mass_g',\n", " 'Rock_mass_g', 'M_Ca++', 'M_CaCl+', 'M_CaCl2(aq)', 'M_CaHSiO3+',\n", " 'M_CaOH+', 'M_CaSO4(aq)', 'M_Cl-', 'M_Cu+', 'M_CuCl(aq)', 'M_CuCl2-',\n", " 'M_CuCl3--', 'M_Fe++', 'M_Fe+++', 'M_FeCl+', 'M_FeCl++', 'M_FeCl2(aq)',\n", " 'M_FeO(aq)', 'M_FeO+', 'M_FeO2-', 'M_FeOH+', 'M_FeOH++', 'M_H+',\n", " 'M_H2(aq)', 'M_H2S(aq)', 'M_H2S2O3(aq)', 'M_HFeO2(aq)', 'M_HFeO2-',\n", " 'M_HS-', 'M_HS2O3-', 'M_HSO3-', 'M_HSO4-', 'M_HSiO3-', 'M_K+',\n", " 'M_KCl(aq)', 'M_KHSO4(aq)', 'M_KOH(aq)', 'M_KSO4-', 'M_Mn++', 'M_MnCl+',\n", " 'M_MnO(aq)', 'M_MnOH+', 'M_MnSO4(aq)', 'M_Na+', 'M_NaCl(aq)',\n", " 'M_NaHSiO3(aq)', 'M_NaOH(aq)', 'M_NaSO4-', 'M_OH-', 'M_S2--',\n", " 'M_S2O3--', 'M_S3--', 'M_S4--', 'M_S5--', 'M_SO2(aq)', 'M_SO4--',\n", " 'M_SiO2(aq)', 'TotM_Ca++', 'TotM_Cl-', 'TotM_Cu++', 'TotM_Fe++',\n", " 'TotM_H+', 'TotM_H2O', 'TotM_HS-', 'TotM_K+', 'TotM_Mn++', 'TotM_Na+',\n", " 'TotM_O2(g)', 'TotM_SiO2(aq)', 'SI_Alabandite', 'SI_Anhydrite',\n", " 'SI_Bornite', 'SI_Chalcedony', 'SI_Chalcocite', 'SI_Chalcopyrite',\n", " 'SI_Coesite', 'SI_Covellite', 'SI_Cristobalite(beta)', 'SI_Fayalite',\n", " 'SI_FeO', 'SI_Ferrosilite', 'SI_Halite', 'SI_Hematite', 'SI_Magnetite',\n", " 'SI_Minnesotaite', 'SI_Pyrite', 'SI_Pyrrhotite', 'SI_Quartz',\n", " 'SI_SiO2(am)', 'SI_Sylvite'],\n", " dtype='object')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot pyrite saturation with Temperature" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '$Log_{10}$(Q/K)$_{Pyrite}$')" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "y = data_df.SI_Pyrite\n", "x = data_df.Temperature_C\n", "plt.figure()\n", "plt.scatter(x, y)\n", "plt.plot([0, 350], [0, 0], 'k--')\n", "plt.xlim([0, 350])\n", "plt.xlabel('Temperature [C]')\n", "plt.ylabel('$Log_{10}$(Q/K)$_{Pyrite}$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "plot pH with Temperature" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'pH')" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y = data_df.pH\n", "x = data_df.Temperature_C\n", "plt.figure()\n", "sc = plt.scatter(x, y)\n", "plt.xlim([0, 350])\n", "plt.xlabel('Temperature [C]')\n", "plt.ylabel('pH')" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.13" } }, "nbformat": 4, "nbformat_minor": 4 }