{ "cells": [ { "attachments": { "b51ca3f4-e8bd-4b0a-a599-5f6724ad8fe5.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "305d1216-9791-43dd-8d7f-ec90aa72a307", "metadata": { "tags": [] }, "source": [ "# `pyEQL` Overview\n", "\n", "![pyeql-logo.png](attachment:b51ca3f4-e8bd-4b0a-a599-5f6724ad8fe5.png)\n", "\n", "`pyEQL` is an open-source `python` library for solution chemistry calculations and ion properties developed by the [Kingsbury Lab](https://www.kingsburylab.org/) at Princeton University.\n", "\n", "[Documentation](https://pyeql.readthedocs.io/en/latest/) | [How to Install](https://pyeql.readthedocs.io/en/latest/installation.html) | [GitHub](https://github.com/rkingsbury/pyEQL) " ] }, { "cell_type": "markdown", "id": "90c14b65-36f0-4bb2-a3bf-f8e725cc897e", "metadata": { "tags": [] }, "source": [ "## Installation\n", "\n", "Uncomment and run the code cell below, if you do not already have `pyEQL`" ] }, { "cell_type": "code", "execution_count": 1, "id": "abb1f51c-38fc-4543-8b59-057b8c591ba9", "metadata": {}, "outputs": [], "source": [ "# pip install pyEQL" ] }, { "cell_type": "markdown", "id": "112bdcee-502c-4cb4-8e48-80f23aee844c", "metadata": {}, "source": [ "## Main feature: The `Solution` class" ] }, { "cell_type": "code", "execution_count": 2, "id": "55f1aea5-a5b8-49b8-a8e8-20856c4be6e7", "metadata": { "scrolled": true }, "outputs": [], "source": [ "from pyEQL import Solution" ] }, { "cell_type": "code", "execution_count": 3, "id": "c7193cc4-0830-461b-979e-49be9fabfe3f", "metadata": { "tags": [] }, "outputs": [], "source": [ "s1 = Solution({\"Mg+2\": \"0.2 mol/L\", \"Cl-1\": \"0.4 mol/L\"}, temperature='20 degC')" ] }, { "cell_type": "markdown", "id": "a74a8257-7312-4c93-a89a-4a521009217d", "metadata": {}, "source": [ "### Bulk Properties" ] }, { "cell_type": "code", "execution_count": 4, "id": "d3155177-a702-403a-9833-210ab2fed820", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1.01387468274498 kg/l" ], "text/latex": [ "$1.01387468274498\\ \\frac{\\mathrm{kg}}{\\mathrm{l}}$" ], "text/plain": [ "1.01387468274498 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.density" ] }, { "cell_type": "code", "execution_count": 5, "id": "9aac5f2e-b7fc-4d72-ab17-0f5b40f683b8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "2.9723368076814505 S/m" ], "text/latex": [ "$2.9723368076814505\\ \\frac{\\mathrm{S}}{\\mathrm{m}}$" ], "text/plain": [ "2.9723368076814505 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.conductivity" ] }, { "cell_type": "code", "execution_count": 6, "id": "a2caf642-26d9-42cc-af85-262736f3107d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1 l" ], "text/latex": [ "$1\\ \\mathrm{l}$" ], "text/plain": [ "1 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.volume" ] }, { "cell_type": "code", "execution_count": 7, "id": "bfb9d952-dd03-495a-9bf7-639a5d5ec683", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1 atm" ], "text/latex": [ "$1\\ \\mathrm{atm}$" ], "text/plain": [ "1 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.pressure" ] }, { "cell_type": "code", "execution_count": 8, "id": "ce4a3e73-3a4c-4674-bc90-9b679f18ca95", "metadata": {}, "outputs": [ { "data": { "text/html": [ "293.15 K" ], "text/latex": [ "$293.15\\ \\mathrm{K}$" ], "text/plain": [ "293.15 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.temperature" ] }, { "cell_type": "code", "execution_count": 9, "id": "7895882f-31a7-4817-ac52-66494723373c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1286751.9671270065 Pa" ], "text/latex": [ "$1286751.9671270065\\ \\mathrm{Pa}$" ], "text/plain": [ "1286751.9671270065 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.osmotic_pressure" ] }, { "cell_type": "markdown", "id": "17992986-53d2-49cb-9200-b93706d066a8", "metadata": {}, "source": [ "### Composition" ] }, { "cell_type": "code", "execution_count": 10, "id": "012154b4-7de9-4484-973f-30a28d96d92a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'H2O(aq)': 55.22159416581102, 'Cl[-1]': 0.4, 'Mg[+2]': 0.2, 'H[+1]': 1e-07, 'OH[-1]': 1e-07}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.components" ] }, { "cell_type": "code", "execution_count": 11, "id": "ccd6cc51-c3d7-4980-bb9a-abacc47f7108", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'H2O(aq)'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.solvent" ] }, { "cell_type": "code", "execution_count": 12, "id": "4251a60d-58f4-4083-8c67-f0bc3813c70a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Mg[+2]': 0.2, 'H[+1]': 1e-07}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.cations" ] }, { "cell_type": "code", "execution_count": 13, "id": "e25db309-a041-4e5e-bbff-9a7bf4c11c94", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Cl[-1]': 0.4, 'OH[-1]': 1e-07}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.anions" ] }, { "cell_type": "code", "execution_count": 14, "id": "2a8c0a98-9bef-4c42-9eb8-84bfffb087d1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'H2O(aq)': 55.22159416581102}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.neutrals" ] }, { "cell_type": "markdown", "id": "a0a74dc8-f48b-41fa-8e62-106d8e2e56d5", "metadata": {}, "source": [ "### Species Concentrations" ] }, { "cell_type": "code", "execution_count": 15, "id": "3e1201bd-d509-49ae-84ec-b1af704a9902", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.20000000000000007 M" ], "text/latex": [ "$0.20000000000000007\\ \\mathrm{M}$" ], "text/plain": [ "0.20000000000000007 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_amount('Mg+2', 'M')" ] }, { "cell_type": "code", "execution_count": 16, "id": "d4fa6515-ccb2-44e4-bb30-fb9f9bff6a99", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1.3987132967563214" ], "text/latex": [ "$1.3987132967563214\\$" ], "text/plain": [ "1.3987132967563214 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_amount('Cl-', '%')" ] }, { "cell_type": "code", "execution_count": 17, "id": "2656ed7a-27c1-4c02-9d8c-b8db62c1ea3e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.4 mol/l" ], "text/latex": [ "$0.4\\ \\frac{\\mathrm{mol}}{\\mathrm{l}}$" ], "text/plain": [ "0.4 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_amount('Mg+2', 'eq/L')" ] }, { "cell_type": "code", "execution_count": 18, "id": "ad9cd84e-ae7c-406e-8360-4518e112e0d7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "4886249.788899191 µg/kg" ], "text/latex": [ "$4886249.788899191\\ \\frac{\\mathrm{µg}}{\\mathrm{kg}}$" ], "text/plain": [ "4886249.788899191 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_amount('Mg+2', 'ug/kg')" ] }, { "cell_type": "markdown", "id": "1bbd0fcb-c145-48d1-a917-c77ae2d9e7b3", "metadata": {}, "source": [ "### Transport" ] }, { "cell_type": "code", "execution_count": 19, "id": "be744f20-22df-4e46-ab48-2fbd8a63cdc2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.0" ], "text/latex": [ "$0.0\\$" ], "text/plain": [ "0.0 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_transport_number('Na+')" ] }, { "cell_type": "code", "execution_count": 20, "id": "8d849212-aad4-4b95-ac3a-572346b0a6fd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.3099794809803665" ], "text/latex": [ "$0.3099794809803665\\$" ], "text/plain": [ "0.3099794809803665 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_transport_number('Mg+2')" ] }, { "cell_type": "code", "execution_count": 21, "id": "d467b3fc-032c-4a90-a102-7ad796723629", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.6900190851732657" ], "text/latex": [ "$0.6900190851732657\\$" ], "text/plain": [ "0.6900190851732657 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.get_transport_number('Cl-')" ] }, { "cell_type": "markdown", "id": "f00b0f7a-ef35-45d4-8e81-26ae48733096", "metadata": {}, "source": [ "### Speciation" ] }, { "cell_type": "code", "execution_count": 22, "id": "40da1bdd-6c43-4d22-a648-03bfdd69e88a", "metadata": {}, "outputs": [], "source": [ "s1.equilibrate()" ] }, { "cell_type": "code", "execution_count": 23, "id": "3e3ce899-3907-4e07-ac53-205c4a3ac31c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'H2O(aq)': 55.22159416581102, 'Cl[-1]': 0.3832398866053062, 'Mg[+2]': 0.18323989223683687, 'MgCl[+1]': 0.0167601067972765, 'H[+1]': 1.2403217124548544e-07, 'OH[-1]': 9.844304910095208e-08, 'HCl(aq)': 5.431779796106619e-09, 'MgOH[+1]': 7.932688947003906e-15, 'O2(aq)': 3.1477611183050287e-26, 'HClO(aq)': 8.450945207723896e-29, 'ClO[-1]': 3.3676720804550185e-29, 'H2(aq)': 5.442721694626408e-35, 'ClO2[-1]': 0.0, 'ClO3[-1]': 0.0, 'ClO4[-1]': 0.0, 'HClO2(aq)': 0.0}" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.components" ] }, { "cell_type": "markdown", "id": "1a271802-e715-4505-8e86-e987f257def3", "metadata": {}, "source": [ "### Saving `Solution` to a file" ] }, { "cell_type": "code", "execution_count": 24, "id": "d76cb8ab-facc-4a6e-9a3d-143730d2d5cf", "metadata": {}, "outputs": [], "source": [ "from monty.serialization import dumpfn\n", "dumpfn(s1, 'test_solution.json')" ] }, { "cell_type": "code", "execution_count": 25, "id": "fd9967de-0881-4c68-942f-b56da4033701", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'@module': 'pyEQL.solution',\n", " '@class': 'Solution',\n", " '@version': '0.14.0.post1.dev19+gbc296a6.d20240313',\n", " 'solutes': {'H2O(aq)': '55.22159416581102 mol',\n", " 'Cl[-1]': '0.3832398866053062 mol',\n", " 'Mg[+2]': '0.18323989223683687 mol',\n", " 'MgCl[+1]': '0.0167601067972765 mol',\n", " 'H[+1]': '1.2403217124548544e-07 mol',\n", " 'OH[-1]': '9.844304910095208e-08 mol',\n", " 'HCl(aq)': '5.431779796106619e-09 mol',\n", " 'MgOH[+1]': '7.932688947003906e-15 mol',\n", " 'O2(aq)': '3.1477611183050287e-26 mol',\n", " 'HClO(aq)': '8.450945207723896e-29 mol',\n", " 'ClO[-1]': '3.3676720804550185e-29 mol',\n", " 'H2(aq)': '5.442721694626408e-35 mol',\n", " 'ClO2[-1]': '0.0 mol',\n", " 'ClO3[-1]': '0.0 mol',\n", " 'ClO4[-1]': '0.0 mol',\n", " 'HClO2(aq)': '0.0 mol'},\n", " 'volume': '1 l',\n", " 'temperature': '293.15 K',\n", " 'pressure': '1 atm',\n", " 'pH': 6.906465653690637,\n", " 'pE': 8.5,\n", " 'balance_charge': None,\n", " 'solvent': 'H2O(aq)',\n", " 'engine': 'native',\n", " 'database': {'@module': 'maggma.stores.mongolike',\n", " '@class': 'JSONStore',\n", " '@version': '0.57.8',\n", " 'paths': ['/home/ryan/miniconda3/envs/skagit2/code/pyEQL/src/pyEQL/database/pyeql_db.json'],\n", " 'read_only': True,\n", " 'serialization_option': None,\n", " 'serialization_default': None,\n", " 'key': 'formula'},\n", " 'default_diffusion_coeff': 1.6106e-09,\n", " 'log_level': 'ERROR'}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.as_dict()" ] }, { "cell_type": "markdown", "id": "7175594b-e6ab-4779-b4ea-a21265337f11", "metadata": {}, "source": [ "## Units-Aware Calculations" ] }, { "cell_type": "code", "execution_count": 26, "id": "0a4503fa-d37f-43b0-b62c-093fe1d3ee56", "metadata": {}, "outputs": [ { "data": { "text/html": [ "1000.0000000000001 ml" ], "text/latex": [ "$1000.0000000000001\\ \\mathrm{ml}$" ], "text/plain": [ "1000.0000000000001 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.volume.to('mL')" ] }, { "cell_type": "code", "execution_count": 27, "id": "4b3c06c0-a73d-4ba3-8ec4-8d196867208c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.26417205235814856 gal" ], "text/latex": [ "$0.26417205235814856\\ \\mathrm{gal}$" ], "text/plain": [ "0.26417205235814856 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.volume.to('gal')" ] }, { "cell_type": "code", "execution_count": 28, "id": "c086ca8f-cdd7-4698-94e0-d7de1f5abd79", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12.634083700417097" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s1.osmotic_pressure.to('bar').magnitude" ] }, { "cell_type": "markdown", "id": "e42ec30f-eb5f-4f0f-89ce-332288e03db4", "metadata": {}, "source": [ "## Contribution Opportunities\n", "\n", "**Benchmarking**\n", "- Compiling additional validation data for activity, conductivity, etc.\n", "- Quantifying error associated with different models\n", "- Refactoring unit tests suite to separate benchmarking\n", "\n", "**Documentation**\n", "- Writing tutorials\n", "- Writing expanded docs\n", "- Cleaning up / updating docstrings\n", "\n", "**New Features**\n", "- Better viscosity model\n", "- Expanded unit testing (increase test coverage to 90%)\n", "- Additional properties\n", "- Additional mixing rules / models for mixed electrolytes\n", "\n", "**Database**\n", "- Expand database doverage to include additional species\n", "- More viscosity coefficients\n", "- Add 'sho' parameter\n", "- More diffusion coefficients\n", "\n", "**Software Engineering**\n", "- Additional refactoring (e.g., `mypy` linting for robustness)\n", "- Bugfixes" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }