{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Please download this notebook *(use the links above to find the source file)* and run the following installation script as a notebook.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Running MAGEMin calculations through Julia\n", "\n", "PetThermoTools provides the ability to run calculations/models that utilize the recent Weller et al. (2024) and Green et al. (2025) thermodynamic models. Once everything is set up you should be able to run these calculations from the same functions used to run models with alphaMELTS, but simply setting the ```Model``` kwarg to ```Green2025``` or ```Weller2024```.\n", "\n", "I've worked hard to try and ensure a set up routine that works on every operating system, regardless of prior installations etc. There is, however, a good chance you'll come across a bug/issue I haven't seen before. If there is an issue in the following script/functions please email me (gleesonm@berkeley.edu) and I will try to find a fix as quickly as possible!\n", "\n", "The following notebook and functions will establish a new julia environment on your machine. From PetThermoTools v0.2.51 and later this environment will be activated whenever a MAGEMin calculation is initialized from Python. This should ensure that any prior julia installations/packages on your machine are not influenced by the following installation routine.\n", "\n", "### Step 1 - install juliacall\n", "Uncomment the line below and install juliacall in your Python environment" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%pip install juliacall" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2 - Install MAGEMin\n", "Import PetThermoTools (install it if you haven't done so yet) and then use the inbuilt functions to install MAGEMin_C and MAGEMinCalc using the function below. You will need top uncomment the function to run it. If you've previously run this section successfully import PetThermoTools and then go to **Step 2b** to update the MAGEMinCalc and MAGEMin_C installations." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# %pip install petthermotools #### If running on Victor uncomment this line to install petthermotools" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'0.2.50'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import petthermotools as ptt\n", "ptt.__version__ # should ve v0.3.2 or later" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**This code installs MAGEMinCalc and underlying dependencies in julia and links them to the PetThermoTools installation. In a couple of cases the code below has caused the Python kernel to crash AFTER it completed. Therefore if a kernel crash message appears don't worry, just restart the kernel and procede to the test_MAGEMinCalc() function below (step 3).**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Detected IPython. Loading juliacall extension. See https://juliapy.github.io/PythonCall.jl/stable/compat/#IPython\n" ] } ], "source": [ "# ptt.install_MAGEMinCalc()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2b - Update MAGEMin\n", "If you've previously run the cell above but need to update the MAGEMinCalc and MAGEMin_C versions following a PetThermoTools update, uncomment and run the cell below." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# ptt.update_MAGEMinCalc()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3 - test the installation\n", "Test the installation by running the following cell. This is calling the MAGEMinCalc functions directly with Julia code using juliacall. This is different to how the code is usually initiated in PetThermoTools but it provides an initial test of the installation. If successful it should print a Pandas DataFrame containing the predicted melt compositions in this crystallization example:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Detected IPython. Loading juliacall extension. See https://juliapy.github.io/PythonCall.jl/stable/compat/#IPython\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " Activating project at `~/.petthermotools_julia_env`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using libMAGEMin.dylib from MAGEMin_jll\n", "ig\n", " SiO2 Al2O3 CaO MgO FeO K2O Na2O \\\n", "0 0.476276 0.164428 0.116295 0.094047 0.091816 0.003300 0.022550 \n", "1 0.476311 0.164655 0.116482 0.093537 0.091797 0.003303 0.022572 \n", "2 0.476372 0.164888 0.116645 0.093026 0.091774 0.003308 0.022591 \n", "3 0.476457 0.165156 0.116821 0.092516 0.091697 0.003310 0.022631 \n", "4 0.476543 0.165356 0.116959 0.092003 0.091674 0.003320 0.022656 \n", "5 0.476600 0.165608 0.117127 0.091486 0.091618 0.003329 0.022694 \n", "6 0.476679 0.165815 0.117307 0.090978 0.091546 0.003333 0.022732 \n", "7 0.476789 0.166014 0.117475 0.090462 0.091522 0.003335 0.022770 \n", "8 0.476880 0.166223 0.117647 0.089953 0.091484 0.003334 0.022805 \n", "9 0.476950 0.166455 0.117817 0.089452 0.091448 0.003335 0.022832 \n", "10 0.477000 0.166718 0.117983 0.088940 0.091416 0.003341 0.022873 \n", "11 0.477076 0.166931 0.118146 0.088434 0.091400 0.003346 0.022902 \n", "12 0.477175 0.167173 0.118310 0.087938 0.091324 0.003351 0.022929 \n", "13 0.477512 0.166383 0.118264 0.087365 0.091864 0.003391 0.023051 \n", "14 0.477879 0.165479 0.118174 0.086766 0.092514 0.003433 0.023204 \n", "15 0.478265 0.164558 0.118119 0.086183 0.093117 0.003471 0.023343 \n", "16 0.478611 0.163675 0.118050 0.085598 0.093742 0.003508 0.023492 \n", "17 0.478997 0.162752 0.118011 0.085013 0.094356 0.003543 0.023624 \n", "18 0.479347 0.161876 0.117955 0.084430 0.094978 0.003584 0.023763 \n", "19 0.479771 0.161012 0.117863 0.083845 0.095535 0.003623 0.023925 \n", "20 0.480103 0.160162 0.117809 0.083265 0.096122 0.003669 0.024066 \n", "21 0.480534 0.159303 0.117741 0.082700 0.096644 0.003703 0.024214 \n", "22 0.480895 0.158471 0.117714 0.082138 0.097164 0.003750 0.024355 \n", "23 0.481259 0.157630 0.117662 0.081582 0.097704 0.003789 0.024484 \n", "24 0.481612 0.156804 0.117614 0.081026 0.098244 0.003825 0.024617 \n", "25 0.481952 0.155991 0.117584 0.080473 0.098763 0.003862 0.024749 \n", "26 0.482334 0.155181 0.117545 0.079926 0.099240 0.003904 0.024882 \n", "27 0.482719 0.154380 0.117509 0.079371 0.099720 0.003947 0.025018 \n", "28 0.483126 0.153597 0.117465 0.078832 0.100174 0.003983 0.025159 \n", "29 0.483514 0.152812 0.117411 0.078288 0.100661 0.004017 0.025291 \n", "30 0.483862 0.152069 0.117362 0.077749 0.101109 0.004057 0.025432 \n", "31 0.484211 0.151313 0.117314 0.077214 0.101582 0.004092 0.025564 \n", "32 0.484575 0.150554 0.117281 0.076686 0.102022 0.004128 0.025697 \n", "33 0.484889 0.149806 0.117269 0.076159 0.102501 0.004163 0.025813 \n", "34 0.485042 0.149335 0.116734 0.075553 0.103250 0.004211 0.026014 \n", "35 0.485015 0.149040 0.115916 0.074903 0.104195 0.004276 0.026244 \n", "36 0.484982 0.148746 0.115101 0.074247 0.105152 0.004341 0.026478 \n", "37 0.485004 0.148464 0.114279 0.073590 0.106026 0.004408 0.026728 \n", "38 0.485038 0.148184 0.113454 0.072940 0.106889 0.004477 0.026976 \n", "39 0.485008 0.147910 0.112657 0.072295 0.107785 0.004542 0.027209 \n", "40 0.484987 0.147646 0.111858 0.071646 0.108649 0.004603 0.027460 \n", "41 0.484978 0.147392 0.111066 0.070993 0.109497 0.004671 0.027712 \n", "42 0.484962 0.147126 0.110273 0.070343 0.110348 0.004733 0.027960 \n", "43 0.484908 0.146875 0.109500 0.069696 0.111193 0.004805 0.028195 \n", "44 0.484893 0.146627 0.108723 0.069059 0.111993 0.004873 0.028432 \n", "45 0.484844 0.146382 0.107957 0.068416 0.112815 0.004937 0.028674 \n", "46 0.484855 0.146123 0.107177 0.067779 0.113597 0.005016 0.028898 \n", "47 0.484798 0.145888 0.106427 0.067160 0.114373 0.005075 0.029125 \n", "\n", " TiO2 O Cr2O3 H2O \n", "0 0.022949 0.001523 0.0 0.006816 \n", "1 0.022999 0.001524 0.0 0.006820 \n", "2 0.023036 0.001527 0.0 0.006833 \n", "3 0.023041 0.001530 0.0 0.006842 \n", "4 0.023102 0.001532 0.0 0.006855 \n", "5 0.023143 0.001535 0.0 0.006859 \n", "6 0.023204 0.001537 0.0 0.006869 \n", "7 0.023219 0.001539 0.0 0.006876 \n", "8 0.023247 0.001540 0.0 0.006887 \n", "9 0.023271 0.001543 0.0 0.006897 \n", "10 0.023279 0.001545 0.0 0.006906 \n", "11 0.023301 0.001547 0.0 0.006916 \n", "12 0.023329 0.001548 0.0 0.006923 \n", "13 0.023601 0.001566 0.0 0.007003 \n", "14 0.023880 0.001584 0.0 0.007088 \n", "15 0.024170 0.001602 0.0 0.007173 \n", "16 0.024446 0.001622 0.0 0.007259 \n", "17 0.024727 0.001639 0.0 0.007337 \n", "18 0.024990 0.001658 0.0 0.007420 \n", "19 0.025249 0.001675 0.0 0.007502 \n", "20 0.025529 0.001692 0.0 0.007581 \n", "21 0.025786 0.001709 0.0 0.007665 \n", "22 0.026039 0.001728 0.0 0.007747 \n", "23 0.026318 0.001747 0.0 0.007826 \n", "24 0.026587 0.001766 0.0 0.007905 \n", "25 0.026857 0.001783 0.0 0.007985 \n", "26 0.027125 0.001800 0.0 0.008064 \n", "27 0.027380 0.001815 0.0 0.008141 \n", "28 0.027608 0.001832 0.0 0.008225 \n", "29 0.027855 0.001848 0.0 0.008303 \n", "30 0.028111 0.001864 0.0 0.008385 \n", "31 0.028366 0.001882 0.0 0.008463 \n", "32 0.028620 0.001901 0.0 0.008535 \n", "33 0.028872 0.001919 0.0 0.008610 \n", "34 0.029197 0.001941 0.0 0.008722 \n", "35 0.029589 0.001966 0.0 0.008856 \n", "36 0.029977 0.001991 0.0 0.008987 \n", "37 0.030368 0.002011 0.0 0.009121 \n", "38 0.030751 0.002035 0.0 0.009256 \n", "39 0.031142 0.002059 0.0 0.009393 \n", "40 0.031538 0.002082 0.0 0.009529 \n", "41 0.031921 0.002104 0.0 0.009667 \n", "42 0.032327 0.002127 0.0 0.009801 \n", "43 0.032743 0.002149 0.0 0.009937 \n", "44 0.033147 0.002172 0.0 0.010079 \n", "45 0.033565 0.002195 0.0 0.010217 \n", "46 0.033984 0.002217 0.0 0.010354 \n", "47 0.034410 0.002242 0.0 0.010502 \n" ] } ], "source": [ "import petthermotools as ptt\n", "ptt.test_MAGEMinCalc()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 4 - Restart the kernel and test running calculations through PetThermoTools\n", "Assuming the crystallization model above ran without any issues we can now progress to testing the integration of MAGEMin with PetThermoTools. First make sure you have the up to date version of PetThermoTools installed (v0.2.51 or later). Restart the kernel and then run the 3 cells below." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'0.2.50'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import petthermotools as ptt\n", "ptt.__version__" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running Green2025 calculation..." ] }, { "name": "stdout", "output_type": "stream", "text": [ " Complete (time taken = 37.55 seconds)" ] }, { "name": "stderr", "output_type": "stream", "text": [ " Activating project at `~/.petthermotools_julia_env`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Detected IPython. Loading juliacall extension. See https://juliapy.github.io/PythonCall.jl/stable/compat/#IPython\n", "Using libMAGEMin.dylib from MAGEMin_jll\n", "ig\n" ] } ], "source": [ "comp = {\"SiO2_Liq\": 47.5, \n", " \"Al2O3_Liq\": 16.4, \n", " \"CaO_Liq\": 11.6, \n", " \"MgO_Liq\": 9.38,\n", " \"FeOt_Liq\": 9.16, \n", " \"K2O_Liq\": 0.329, \n", " \"Na2O_Liq\": 2.25, \n", " \"TiO2_Liq\": 2.29,\n", " \"Fe3Fet_Liq\": 0.15, \n", " \"Cr2O3_Liq\": 0.0, \n", " \"H2O_Liq\": 0.68}\n", "\n", "Results = ptt.isobaric_crystallisation(bulk=comp,\n", " Model = \"Green2025\",\n", " dt_C = 2.0,\n", " T_end_C=1100.0,\n", " P_bar=1000.0,\n", " find_liquidus=True,\n", " Frac_solid=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'FeO$_t$')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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O2lpaUpLS8u8n5SUpMjISCUmJio4OLjI3wMAbPXdd9KDD0pnzkhVqphxSI0b250KcLqkpCSFhIQU6u+32xw5unTpkjIyMhQYGJjt8aCgIG3cuDHP9zZq1Ejh4eFq06aN1qxZk+dr4+LiFBISknmLjIwscnYAcBl33y1t3SrVqycdO2aOIK1ebXcqwKW4TTkqV66coqOj9dprr+n48ePKyMjQZ599pi1btuhELoeGw8PDNW3aNM2fP18LFixQnTp11KZNG63PY+2h0aNHKzExMfN29OjR4vpKAGCPG280a7K1bWsGasfGSvPn250KcBluc1pNkv79739r4MCBWr9+vXx9fXXbbbfppptu0vbt27V79+58fUaXLl3kcDi0ePHifL2+KIflAMClpaVJDz9sipGPj/T++9Kjj9qdCnAKrzitJkk33HCD1q1bp5SUFB09elRbt27VxYsXVbNmzXx/RtOmTbV///5iTAkAbiIgwCxS++ij0uXLZrmR8ePtTgXYzq3K0RVlypRReHi4zpw5oxUrVujee+/N93t37Nih8PDwYkwHAG7E11eaNk0aOdLcHznS3NznpALgdH52ByiIFStWyLIs1alTRwcOHNBzzz2nOnXqaMCAAZLMeKFjx47p008/lSS99dZbqlGjhho0aKD09HR99tlnmj9/vuZzbh0AfudwSG++aeZEGjnSHD06fVqaOtWUJ8DLuFU5SkxM1OjRo/Xrr7+qYsWKeuCBB/TGG2/I399fknTixAkdOXIk8/Xp6el69tlndezYMQUFBalBgwZaunSpOnXqZNdXAADXNWKEKUiDBkkffmgu9581y5x+A7yIWw3ItgMDsgF4nfnzpV69pPR0c0XbwoVS2bJ2pwIKxGsGZAMASsADD0hLl0plypg5kNq0kf77X7tTASWGcgQAuFrbttK335rTbFu3SnfeKTHvG7wE5QgAkLM77pDWrzfLjPz8s9S8ucTC3fAClCMAQO4aNJC+/1666SZz5KhFC3MkCfBglCMAQN6qV5c2bpRuv92MPbr7bmnVKrtTAcWGcgQAuLbrr5e++y77emxz59qdCigWlCMAQP6UKyctWSJ16yZdvCj17ClNmWJ3KsDpKEcAgPwLCJBmz5aGDDFLjDz5pPTSSyw3Ao9COQIAFIyvr/TOO9Irr5j7r75qylJGhr25ACehHAEACs7hkP76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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.plot(Results[\"All\"][\"MgO_Liq\"], Results[\"All\"][\"FeOt_Liq\"], '-r')\n", "plt.xlabel('MgO')\n", "plt.ylabel('FeO$_t$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 5 - use PetThermoTools alongside MAGEMin in your research!" ] } ], "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.0" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }