{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LLEPE Tutorial - Getting started\n",
"## Introduction\n",
"In this notebook, you will learn how to use LLEPE to fit thermodynamic parameters to experimental data and explore how well the parameters fit.\n",
"## Installation\n",
"Create a conda environment with the following command. The environment name in this example is \"thermo_env\".
\n",
"```$ conda create --name thermo_env python=3.7```
\n",
"Then run the following line to activate the environment"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```$ conda activate thermo_env```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In your terminal run
\n",
"```$ git clone https://xgitlab.cels.anl.gov/summer-2020/parameter-estimation.git```
\n",
"Navigate into the folder with
\n",
"```$ cd parameter-estimation```
\n",
"And run
\n",
"```pip install -e.```
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Moving neccessary files for example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Copy and paste the xml file named 'elementz.xml' from the 'data/xmls' folder to the Cantera data file located in 'Anaconda3/envs/thermo_env/Lib/site-packages/cantera' "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import and instantiate LLEPE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, you will need to import the package and instantiate LLEPE with a few parameters."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from llepe import LLEPE\n",
"opt_dict = {'Nd(H(A)2)3(org)_h0': {'upper_element_name': 'species',\n",
" 'upper_attrib_name': 'name',\n",
" 'upper_attrib_value': 'Nd(H(A)2)3(org)',\n",
" 'lower_element_name': 'h0',\n",
" 'lower_attrib_name': None,\n",
" 'lower_attrib_value': None,\n",
" 'input_format': '{0}',\n",
" 'input_value': -4.7e6}}\n",
"llepe_parameters = {'exp_data': '../../data/csvs/Nd_exp_data.csv',\n",
" 'phases_xml_filename': '../../data/xmls/twophase.xml',\n",
" 'opt_dict': opt_dict,\n",
" 'phase_names': ['HCl_electrolyte', 'PC88A_liquid'],\n",
" 'aq_solvent_name': 'H2O(L)',\n",
" 'extractant_name': '(HA)2(org)',\n",
" 'diluant_name': 'dodecane',\n",
" 'complex_names': ['Nd(H(A)2)3(org)'],\n",
" 'extracted_species_ion_names': ['Nd+++'],\n",
" 'aq_solvent_rho': 1000.0,\n",
" 'extractant_rho': 960.0,\n",
" 'diluant_rho': 750.0}\n",
"estimator = LLEPE(**llepe_parameters)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Parameters explanation "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### exp_csv_filename"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"exp_csv_filename is the file name for the csv containing experimental data.
\n",
"Let us get the pandas dataframe created by LLEPE."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n", " | h_i | \n", "h_eq | \n", "z_i | \n", "z_eq | \n", "Nd_aq_i | \n", "Nd_aq_eq | \n", "Nd_d_eq | \n", "Nd_org_eq | \n", "
---|---|---|---|---|---|---|---|---|
0 | \n", "0.01 | \n", "0.088304 | \n", "1 | \n", "0.921696 | \n", "0.050001 | \n", "0.0239 | \n", "1.0921 | \n", "0.026101 | \n", "
1 | \n", "0.01 | \n", "0.105094 | \n", "1 | \n", "0.904906 | \n", "0.099998 | \n", "0.0683 | \n", "0.4641 | \n", "0.031698 | \n", "
2 | \n", "0.01 | \n", "0.109017 | \n", "1 | \n", "0.900983 | \n", "0.150006 | \n", "0.1170 | \n", "0.2821 | \n", "0.033006 | \n", "
3 | \n", "0.01 | \n", "0.106012 | \n", "1 | \n", "0.903988 | \n", "0.200004 | \n", "0.1680 | \n", "0.1905 | \n", "0.032004 | \n", "
4 | \n", "0.01 | \n", "0.118934 | \n", "1 | \n", "0.891066 | \n", "0.300011 | \n", "0.2637 | \n", "0.1377 | \n", "0.036311 | \n", "