From b4ea4bd68451b8cb85f730e81a305a8e4afd0734 Mon Sep 17 00:00:00 2001 From: Ian Bell <ian.bell@nist.gov> Date: Wed, 3 Aug 2022 14:55:53 -0400 Subject: [PATCH] Add example of isobar tracing --- doc/source/algorithms/VLE.ipynb | 252 +++++++------------------------- 1 file changed, 55 insertions(+), 197 deletions(-) diff --git a/doc/source/algorithms/VLE.ipynb b/doc/source/algorithms/VLE.ipynb index 425c451..85dc68c 100644 --- a/doc/source/algorithms/VLE.ipynb +++ b/doc/source/algorithms/VLE.ipynb @@ -15,21 +15,10 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "id": "c0b4e863", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.9.4.dev0'" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import teqp\n", "import numpy as np\n", @@ -72,39 +61,10 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "id": "2674227c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'guess:'" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "[12735.311173407898, 752.4082303122791]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "array([12735.31117341, 752.40823031])" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Instantiate the model\n", "model = teqp.canonical_PR([300], [4e6], [0.1])\n", @@ -154,23 +114,10 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "b12bd318", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(<VLE_return_code.xtol_satisfied: 1>,\n", - " array([ 128.66049209, 12737.38871682]),\n", - " array([ 12.91868229, 1133.77242677]))" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "zA = np.array([0.01, 0.99])\n", "model = teqp.canonical_PR([300,310], [4e6,4.5e6], [0.1, 0.2])\n", @@ -205,11 +152,11 @@ "id": "f4e3f914", "metadata": {}, "source": [ - "# Tracing\n", + "# Tracing (isobars and isotherms)\n", "\n", - "When it comes to mixture thermodynamics, as soon as you add another component to a pure component to form a binary mixture, the complexity of the thermodynamics entirely changes. For that reason, mixture iterative calculations for mixtures are orders of magnitude more difficult to carry out. Asymmetric mixtures can do all sorts of interesting things that are entirely unlike those of pure fluids, and the algorithms are therefore much, much more complicated. Formulating phase equilibrium problems for pure fluids is not much more complicated, but the most challenging aspect is to obtain good guess values from which to start an iterative routine\n", + "When it comes to mixture thermodynamics, as soon as you add another component to a pure component to form a binary mixture, the complexity of the thermodynamics entirely changes. For that reason, mixture iterative calculations for mixtures are orders of magnitude more difficult to carry out. Asymmetric mixtures can do all sorts of interesting things that are entirely unlike those of pure fluids, and the algorithms are therefore much, much more complicated. Formulating phase equilibrium problems is not much more complicated than for pure fluids, but the most challenging aspect is to obtain good guess values from which to start an iterative routine, and the difficulty of this problem increases with the complexity of the mixture thermodynamics.\n", "\n", - "Ulrich Deiters and Ian Bell have developed a number of algorithms for tracing phase equilibrium solutions as the solution of ordinary differential equations rather than carrying out iterative routines for a given state point. The advantage of the tracing calculations is that they can be often initiated at a state point that is entirely known, perhaps the pure fluid endpoint for a subcritical isotherm." + "Ulrich Deiters and Ian Bell have developed a number of algorithms for tracing phase equilibrium solutions as the solution of ordinary differential equations rather than carrying out iterative routines for a given state point. The advantage of the tracing calculations is that they can often be initiated at a state point that is entirely known, for instance the pure fluid endpoint for a subcritical isotherm or isobar." ] }, { @@ -232,127 +179,10 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "49dcba2b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"[{'T / K': 273.0, 'c': -1.0, 'drho/dt': [-0.618312383229212, 0.7690760182230469, -0.1277526773161415...\"" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>T / K</th>\n", - " <th>c</th>\n", - " <th>drho/dt</th>\n", - " <th>dt</th>\n", - " <th>pL / Pa</th>\n", - " <th>pV / Pa</th>\n", - " <th>rhoL / mol/m^3</th>\n", - " <th>rhoV / mol/m^3</th>\n", - " <th>t</th>\n", - " <th>xL_0 / mole frac.</th>\n", - " <th>xV_0 / mole frac.</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>273.0</td>\n", - " <td>-1.0</td>\n", - " <td>[-0.618312383229212, 0.7690760182230469, -0.12...</td>\n", - " <td>0.000010</td>\n", - " <td>2.203397e+06</td>\n", - " <td>2.203397e+06</td>\n", - " <td>[10697.985891540735, 0.0]</td>\n", - " <td>[1504.6120879290752, 0.0]</td>\n", - " <td>0.000000</td>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>273.0</td>\n", - " <td>-1.0</td>\n", - " <td>[-0.6183123817120353, 0.7690760162922189, -0.1...</td>\n", - " <td>0.000045</td>\n", - " <td>2.203397e+06</td>\n", - " <td>2.203397e+06</td>\n", - " <td>[10697.985885357639, 7.690760309421386e-06]</td>\n", - " <td>[1504.6120866515366, 9.945415375682985e-07]</td>\n", - " <td>0.000010</td>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>273.0</td>\n", - " <td>-1.0</td>\n", - " <td>[-0.6183123827116788, 0.7690760173388914, -0.1...</td>\n", - " <td>0.000203</td>\n", - " <td>2.203397e+06</td>\n", - " <td>2.203397e+06</td>\n", - " <td>[10697.98585753358, 4.229918121248511e-05]</td>\n", - " <td>[1504.6120809026731, 5.469978386095445e-06]</td>\n", - " <td>0.000055</td>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " T / K c drho/dt dt \\\n", - "0 273.0 -1.0 [-0.618312383229212, 0.7690760182230469, -0.12... 0.000010 \n", - "1 273.0 -1.0 [-0.6183123817120353, 0.7690760162922189, -0.1... 0.000045 \n", - "2 273.0 -1.0 [-0.6183123827116788, 0.7690760173388914, -0.1... 0.000203 \n", - "\n", - " pL / Pa pV / Pa rhoL / mol/m^3 \\\n", - "0 2.203397e+06 2.203397e+06 [10697.985891540735, 0.0] \n", - "1 2.203397e+06 2.203397e+06 [10697.985885357639, 7.690760309421386e-06] \n", - "2 2.203397e+06 2.203397e+06 [10697.98585753358, 4.229918121248511e-05] \n", - "\n", - " rhoV / mol/m^3 t xL_0 / mole frac. \\\n", - "0 [1504.6120879290752, 0.0] 0.000000 1.0 \n", - "1 [1504.6120866515366, 9.945415375682985e-07] 0.000010 1.0 \n", - "2 [1504.6120809026731, 5.469978386095445e-06] 0.000055 1.0 \n", - "\n", - " xV_0 / mole frac. \n", - "0 1.0 \n", - "1 1.0 \n", - "2 1.0 " - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model = teqp.canonical_PR([300,310], [4e6,4.5e6], [0.1, 0.2])\n", "model1 = teqp.canonical_PR([300], [4e6], [0.1])\n", @@ -366,23 +196,10 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "9aecca78", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(df['xL_0 / mole frac.'], df['pL / Pa']/1e6)\n", "plt.plot(df['xV_0 / mole frac.'], df['pL / Pa']/1e6)\n", @@ -415,7 +232,7 @@ "id": "d4193110", "metadata": {}, "source": [ - "Supercritical isotherms should work approximately in the same manner" + "Supercritical isotherms work approximately in the same manner" ] }, { @@ -439,6 +256,47 @@ "plt.gca().set(xlabel='$x_1,y_1$ / mole frac.', ylabel='p / MPa')\n", "plt.show()" ] + }, + { + "cell_type": "markdown", + "id": "936c5f55", + "metadata": {}, + "source": [ + "As of version 0.10.0, isobar tracing has been added to ``teqp``. It operates in fundamentally the same fashion as the isotherm tracing and the same recommendations about starting at a pure fluid apply" + ] + }, + { + "cell_type": "raw", + "id": "81eacaf0", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + "The tracer function class is here: :py:meth:`trace_VLE_isobar_binary <teqp.teqp.trace_VLE_isobar_binary>`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "109bc65b", + "metadata": {}, + "outputs": [], + "source": [ + "Tc_K = [190.564, 154.581]\n", + "pc_Pa = [4599200, 5042800]\n", + "acentric = [0.011, 0.022]\n", + "model = teqp.canonical_PR(Tc_K, pc_Pa, acentric)\n", + "model1 = teqp.canonical_PR([Tc_K[0]], [pc_Pa[0]], [acentric[0]])\n", + "T = 170.0 # [K] # Note: above Tc of the second component\n", + "rhoL0, rhoV0 = model1.superanc_rhoLV(T) # start off at pure of the first component\n", + "p0 = rhoL0*model1.get_R(np.array([1.0]))*T*(1+model1.get_Ar01(T, rhoL0, np.array([1.0])))\n", + "j = teqp.trace_VLE_isobar_binary(model, p0, T, np.array([rhoL0, 0]), np.array([rhoV0, 0]))\n", + "df = pandas.DataFrame(j) # Now as a data frame\n", + "plt.plot(df['xL_0 / mole frac.'], df['T / K'])\n", + "plt.plot(df['xV_0 / mole frac.'], df['T / K'])\n", + "plt.gca().set(xlabel='$x_1,y_1$ / mole frac.', ylabel='T / K')\n", + "plt.show()" + ] } ], "metadata": { -- GitLab