{ "cells": [ { "cell_type": "markdown", "id": "3bbe8002-bdf3-490c-bde0-80dd3713a3d0", "metadata": {}, "source": [ "## Association/Dissociation reaction `A + B <-> C`\n", "#### with 1st-order kinetics for each species, taken to equilibrium.\n", "#### Exploration of debugging and diagnostics options\n", "(Adaptive variable time steps are used)\n", "\n", "_See also the experiment \"1D/reactions/reaction_4\"_ \n", "\n", "LAST REVISED: June 14, 2024 (using v. 1.0 beta33)" ] }, { "cell_type": "code", "execution_count": 1, "id": "d28567a7-ae12-4df6-bf2f-8ea7b132596c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Added 'D:\\Docs\\- MY CODE\\BioSimulations\\life123-Win7' to sys.path\n" ] } ], "source": [ "import set_path # Importing this module will add the project's home directory to sys.path" ] }, { "cell_type": "code", "execution_count": 2, "id": "4bbaa8f3", "metadata": { "tags": [] }, "outputs": [], "source": [ "from experiments.get_notebook_info import get_notebook_basename\n", "\n", "from src.modules.reactions.uniform_compartment import UniformCompartment\n", "from src.modules.visualization.graphic_log import GraphicLog" ] }, { "cell_type": "code", "execution_count": 3, "id": "83c3cc5f-de21-4f66-9988-2806fbf0666d", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-> Output will be LOGGED into the file 'react_3.log.htm'\n" ] } ], "source": [ "# Initialize the HTML logging (for the graphics)\n", "log_file = get_notebook_basename() + \".log.htm\" # Use the notebook base filename for the log file\n", "\n", "# Set up the use of some specified graphic (Vue) components\n", "GraphicLog.config(filename=log_file,\n", " components=[\"vue_cytoscape_2\"],\n", " extra_js=\"https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.21.2/cytoscape.umd.js\")" ] }, { "cell_type": "code", "execution_count": null, "id": "22559b04-73d8-4bd2-8c8d-c95dbdb0e862", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9329208b-070f-4902-8f37-0f11ddf75ed6", "metadata": {}, "source": [ "# Initialize the System\n", "Specify the chemicals, the reactions, and the initial concentrations" ] }, { "cell_type": "code", "execution_count": 4, "id": "e328c104-126d-400b-89fe-c4bbe1dc2212", "metadata": {}, "outputs": [], "source": [ "# Instantiate the simulator and specify the chemicals\n", "dynamics = UniformCompartment(names=[\"A\", \"B\", \"C\"], preset=\"fast\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "1521d60a-b189-40d1-be43-013a6f5ac510", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1 (at temp. 25 C)\n", "0: A + B <-> C (kF = 5 / kR = 2 / delta_G = -2,271.4 / K = 2.5) | 1st order in all reactants & products\n", "Set of chemicals involved in the above reactions: {'C', 'A', 'B'}\n" ] } ], "source": [ "# Reaction A + B <-> C , with 1st-order kinetics for each species\n", "dynamics.add_reaction(reactants=[\"A\" , \"B\"], products=\"C\",\n", " forward_rate=5., reverse_rate=2.)\n", "\n", "dynamics.describe_reactions()" ] }, { "cell_type": "code", "execution_count": 6, "id": "cb582868-431c-4022-aa0e-a2f554f80d6c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[GRAPHIC ELEMENT SENT TO LOG FILE `react_3.log.htm`]\n" ] } ], "source": [ "# Send a plot of the network of reactions to the HTML log file\n", "dynamics.plot_reaction_network(\"vue_cytoscape_2\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "ae304704-c8d9-4cef-9e0b-2587bb3909ef", "metadata": {}, "outputs": [], "source": [ "# Set the initial concentrations of all the chemicals, in their index order\n", "dynamics.set_conc([10., 50., 20.], snapshot=True)" ] }, { "cell_type": "code", "execution_count": 8, "id": "a605dacf-2c67-403e-9aa9-5be25fc9f481", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM STATE at Time t = 0:\n", "3 species:\n", " Species 0 (A). Conc: 10.0\n", " Species 1 (B). Conc: 50.0\n", " Species 2 (C). Conc: 20.0\n", "Set of chemicals involved in reactions: {'C', 'A', 'B'}\n" ] } ], "source": [ "dynamics.describe_state()" ] }, { "cell_type": "code", "execution_count": 9, "id": "0ff2c242-a15b-456d-ad56-0ba1041c0b4c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABCcaption
00.010.050.020.0Initialized state
\n", "
" ], "text/plain": [ " SYSTEM TIME A B C caption\n", "0 0.0 10.0 50.0 20.0 Initialized state" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_history()" ] }, { "cell_type": "code", "execution_count": null, "id": "42f757ce-98bb-4d3f-871d-78d059cba2a9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1767907f-a74c-484c-a5ef-ef134c96f928", "metadata": {}, "source": [ "### Sneak preview of eventual equilibrum:\n", "we can preview the final equilibrium concentrations without actually running the simulation" ] }, { "cell_type": "code", "execution_count": 10, "id": "8e24fba5-d8af-475d-8701-573fb6eff788", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'A': 0.2948774087575341, 'B': 40.294877408757536, 'C': 29.705122591242464}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.find_equilibrium_conc(rxn_index=0) # This is an EXACT solution" ] }, { "cell_type": "markdown", "id": "e1f57520-6b81-49fc-8b82-b9424a5fe70f", "metadata": {}, "source": [ "The reaction will proceed forward, with `A` and `B` being consumed, and `C` being produced" ] }, { "cell_type": "code", "execution_count": null, "id": "d460fc5b-8e07-4efc-bb27-1d5093612de7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "fc516ca2-e62d-4784-b826-5372ff7f4c75", "metadata": { "tags": [] }, "source": [ "# Run the reaction" ] }, { "cell_type": "code", "execution_count": 11, "id": "2502cd11-0df9-4303-8895-98401a1df7b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Some steps were backtracked and re-done, to prevent negative concentrations or excessively large concentration changes\n", "23 total step(s) taken\n", "Number of step re-do's because of negative concentrations: 0\n", "Number of step re-do's because of elective soft aborts: 3\n", "Norm usage: {'norm_A': 13, 'norm_B': 9, 'norm_C': 9, 'norm_D': 9}\n" ] } ], "source": [ "dynamics.set_diagnostics() # To save diagnostic information about the call to single_compartment_react()\n", "\n", "dynamics.single_compartment_react(initial_step=0.004, duration=0.06,\n", " variable_steps=True,\n", " snapshots={\"initial_caption\": \"1st reaction step\",\n", " \"final_caption\": \"last reaction step\"})" ] }, { "cell_type": "code", "execution_count": 12, "id": "80fbaee3-bd6f-4197-9270-23374d46a4a7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABCcaption
00.00000010.00000050.00000020.000000Initialized state
10.0008647.87456047.87456022.1254401st reaction step
20.0015556.60226546.60226523.397735
30.0022465.57126645.57126624.428734
40.0029384.72759444.72759425.272406
50.0036294.03174644.03174625.968254
60.0046663.16530543.16530526.834695
70.0057022.51265242.51265227.487348
80.0067392.01589842.01589827.984102
90.0077761.63484241.63484228.365158
100.0088131.34080441.34080428.659196
110.0098501.11288341.11288328.887117
120.0108860.93559540.93559529.064405
130.0119230.79732140.79732129.202679
140.0134780.63521140.63521129.364789
150.0150340.52583340.52583329.474167
160.0165890.45180540.45180529.548195
170.0189220.37649040.37649029.623510
180.0212540.33739340.33739329.662607
190.0247540.30687140.30687129.693129
200.0300020.29396540.29396529.706035
210.0378760.29543740.29543729.704563
220.0496850.29408240.29408229.705918
230.0674000.29696940.29696929.703031last reaction step
\n", "
" ], "text/plain": [ " SYSTEM TIME A B C caption\n", "0 0.000000 10.000000 50.000000 20.000000 Initialized state\n", "1 0.000864 7.874560 47.874560 22.125440 1st reaction step\n", "2 0.001555 6.602265 46.602265 23.397735 \n", "3 0.002246 5.571266 45.571266 24.428734 \n", "4 0.002938 4.727594 44.727594 25.272406 \n", "5 0.003629 4.031746 44.031746 25.968254 \n", "6 0.004666 3.165305 43.165305 26.834695 \n", "7 0.005702 2.512652 42.512652 27.487348 \n", "8 0.006739 2.015898 42.015898 27.984102 \n", "9 0.007776 1.634842 41.634842 28.365158 \n", "10 0.008813 1.340804 41.340804 28.659196 \n", "11 0.009850 1.112883 41.112883 28.887117 \n", "12 0.010886 0.935595 40.935595 29.064405 \n", "13 0.011923 0.797321 40.797321 29.202679 \n", "14 0.013478 0.635211 40.635211 29.364789 \n", "15 0.015034 0.525833 40.525833 29.474167 \n", "16 0.016589 0.451805 40.451805 29.548195 \n", "17 0.018922 0.376490 40.376490 29.623510 \n", "18 0.021254 0.337393 40.337393 29.662607 \n", "19 0.024754 0.306871 40.306871 29.693129 \n", "20 0.030002 0.293965 40.293965 29.706035 \n", "21 0.037876 0.295437 40.295437 29.704563 \n", "22 0.049685 0.294082 40.294082 29.705918 \n", "23 0.067400 0.296969 40.296969 29.703031 last reaction step" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_history()" ] }, { "cell_type": "markdown", "id": "b1366038-2dea-4d69-a655-ae464ca22922", "metadata": {}, "source": [ "## Note: \"A\" (now largely depleted) is the limiting reagent" ] }, { "cell_type": "code", "execution_count": 13, "id": "1598a75b-0322-45ac-bf2c-21fd09049966", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "From time 0 to 0.000864, in 1 step of 0.000864\n", "From time 0.000864 to 0.003629, in 4 steps of 0.000691\n", "From time 0.003629 to 0.01192, in 8 steps of 0.00104\n", "From time 0.01192 to 0.01659, in 3 steps of 0.00156\n", "From time 0.01659 to 0.02125, in 2 steps of 0.00233\n", "From time 0.02125 to 0.02475, in 1 step of 0.0035\n", "From time 0.02475 to 0.03, in 1 step of 0.00525\n", "From time 0.03 to 0.03788, in 1 step of 0.00787\n", "From time 0.03788 to 0.04969, in 1 step of 0.0118\n", "From time 0.04969 to 0.0674, in 1 step of 0.0177\n", "(23 steps total)\n" ] } ], "source": [ "dynamics.explain_time_advance()" ] }, { "cell_type": "markdown", "id": "9fb5f6b8-dde3-415d-9e90-b8d102bfd748", "metadata": {}, "source": [ "### Notice how the reaction proceeds in smaller steps in the early times, when the concentrations are changing much more rapidly.\n", "#### The argument argument _variable_steps=True_ dynamically adjusts the initial_step (which is initially found to be too large, leading to some backtracking)" ] }, { "cell_type": "code", "execution_count": 14, "id": "226c1b6e-6838-46f3-aab1-9cb20c409724", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "x=%{x}
y=%{y}", "legendgroup": "", "line": { "color": "#636efa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "", "orientation": "v", "showlegend": false, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0008639999999999999, 0.0036287999999999993, 0.0036287999999999993, 0.011923199999999997, 0.011923199999999997, 0.016588799999999994, 0.016588799999999994, 0.021254399999999993, 0.021254399999999993, 0.024753599999999994, 0.024753599999999994, 0.03000239999999999, 0.03000239999999999, 0.03787559999999999, 0.03787559999999999, 0.04968539999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 0.0008639999999999999, 0.0008639999999999999, 0.0006911999999999999, 0.0006911999999999999, 0.0010367999999999992, 0.0010367999999999992, 0.001555199999999998, 0.001555199999999998, 0.0023327999999999995, 0.0023327999999999995, 0.003499200000000001, 0.003499200000000001, 0.005248799999999998, 0.005248799999999998, 0.007873199999999997, 0.007873199999999997, 0.011809800000000002, 0.011809800000000002, 0.0177147, 0.0177147 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "tracegroupgap": 0 }, "margin": { "t": 60 }, "shapes": [ { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0, "x1": 0, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0008639999999999999, "x1": 0.0008639999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0015551999999999996, "x1": 0.0015551999999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0022463999999999995, "x1": 0.0022463999999999995, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0029375999999999994, "x1": 0.0029375999999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0036287999999999993, "x1": 0.0036287999999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.004665599999999999, "x1": 0.004665599999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.005702399999999999, "x1": 0.005702399999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.006739199999999999, "x1": 0.006739199999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.007775999999999999, "x1": 0.007775999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.008812799999999999, "x1": 0.008812799999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.009849599999999998, "x1": 0.009849599999999998, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.010886399999999997, "x1": 0.010886399999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.011923199999999997, "x1": 0.011923199999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.013478399999999996, "x1": 0.013478399999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.015033599999999996, "x1": 0.015033599999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.016588799999999994, "x1": 0.016588799999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.018921599999999993, "x1": 0.018921599999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.021254399999999993, "x1": 0.021254399999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.024753599999999994, "x1": 0.024753599999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03000239999999999, "x1": 0.03000239999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03787559999999999, "x1": 0.03787559999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.04968539999999999, "x1": 0.04968539999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.06740009999999999, "x1": 0.06740009999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" } ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Simulation step sizes" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ -4.3316259640102824e-05, 0.0674434162596401 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ -0.0002545500000000001, 0.01866045 ], "title": { "text": "Step size" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dynamics.plot_step_sizes(show_intervals=True)" ] }, { "cell_type": "markdown", "id": "6ac3dd4e-9dd0-4d3a-aa83-76102bd79524", "metadata": { "tags": [] }, "source": [ "## Plots changes of concentration with time" ] }, { "cell_type": "code", "execution_count": 15, "id": "5f73e330-2d43-4cef-b2a0-c6eb379eea2e", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "Chemical=A
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "A", "line": { "color": "red", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "A", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 10, 7.874560000000001, 6.6022649832669185, 5.571266196412786, 4.727593830730617, 4.031745738170395, 3.165304930294141, 2.512652422560647, 2.0158977994878757, 1.6348420991345631, 1.3408039110369463, 1.1128829584716142, 0.9355954461437876, 0.7973205671737157, 0.6352106326726121, 0.525833400282096, 0.45180455730262453, 0.37648974220125575, 0.3373928293875607, 0.30687098340433216, 0.29396529878725997, 0.295437049136851, 0.294082474812173, 0.29696851083086506 ], "yaxis": "y" }, { "hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "B", "line": { "color": "violet", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "B", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 50, 47.87456, 46.60226498326692, 45.571266196412786, 44.72759383073062, 44.0317457381704, 43.16530493029415, 42.512652422560656, 42.01589779948788, 41.634842099134566, 41.34080391103695, 41.112882958471616, 40.935595446143786, 40.79732056717371, 40.63521063267261, 40.525833400282096, 40.45180455730262, 40.37648974220125, 40.337392829387554, 40.30687098340432, 40.29396529878725, 40.295437049136844, 40.294082474812164, 40.29696851083086 ], "yaxis": "y" }, { "hovertemplate": "Chemical=C
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "C", "line": { "color": "green", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "C", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 20, 22.12544, 23.397735016733083, 24.428733803587217, 25.272406169269388, 25.96825426182961, 26.834695069705866, 27.48734757743936, 27.98410220051213, 28.36515790086544, 28.659196088963057, 28.887117041528388, 29.064404553856214, 29.202679432826287, 29.36478936732739, 29.474166599717908, 29.54819544269738, 29.62351025779875, 29.662607170612443, 29.69312901659567, 29.70603470121274, 29.70456295086315, 29.70591752518783, 29.70303148916914 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "title": { "text": "Chemical" }, "tracegroupgap": 0 }, "shapes": [ { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0, "x1": 0, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0008639999999999999, "x1": 0.0008639999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0015551999999999996, "x1": 0.0015551999999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0022463999999999995, "x1": 0.0022463999999999995, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0029375999999999994, "x1": 0.0029375999999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0036287999999999993, "x1": 0.0036287999999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.004665599999999999, "x1": 0.004665599999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.005702399999999999, "x1": 0.005702399999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.006739199999999999, "x1": 0.006739199999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.007775999999999999, "x1": 0.007775999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.008812799999999999, "x1": 0.008812799999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.009849599999999998, "x1": 0.009849599999999998, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.010886399999999997, "x1": 0.010886399999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.011923199999999997, "x1": 0.011923199999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.013478399999999996, "x1": 0.013478399999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.015033599999999996, "x1": 0.015033599999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.016588799999999994, "x1": 0.016588799999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.018921599999999993, "x1": 0.018921599999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.021254399999999993, "x1": 0.021254399999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.024753599999999994, "x1": 0.024753599999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03000239999999999, "x1": 0.03000239999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03787559999999999, "x1": 0.03787559999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.04968539999999999, "x1": 0.04968539999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.06740009999999999, "x1": 0.06740009999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" } ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Reaction `A + B <-> C` . Changes in concentrations with time (time steps shown in dashed lines)" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ -4.428390275952693e-05, 0.06744438390275952 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ -2.467481073502337, 52.7614463722896 ], "title": { "text": "Concentration" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dynamics.plot_history(colors=['red', 'violet', 'green'], show_intervals=True)" ] }, { "cell_type": "markdown", "id": "c02a8f55-a671-4771-86c9-fc4d1b126bf8", "metadata": {}, "source": [ "### Check the final equilibrium" ] }, { "cell_type": "code", "execution_count": 16, "id": "765f6f39-4b2e-4a86-b6a9-ace9d1941663", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0: A + B <-> C\n", "Final concentrations: [A] = 0.297 ; [B] = 40.3 ; [C] = 29.7\n", "1. Ratio of reactant/product concentrations, adjusted for reaction orders: 2.48209\n", " Formula used: [C] / ([A][B])\n", "2. Ratio of forward/reverse reaction rates: 2.5\n", "Discrepancy between the two values: 0.7163 %\n", "Reaction IS in equilibrium (within 1% tolerance)\n", "\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Verify that the reaction has reached equilibrium\n", "dynamics.is_in_equilibrium()" ] }, { "cell_type": "markdown", "id": "e2ea05d1-6e9b-4f62-88e6-192e058078f6", "metadata": {}, "source": [ "Compare with the values we saw earlier for the exact solution of the equilibrium values: \n", "{'A': 0.2948774087575341, 'B': 40.294877408757536, 'C': 29.705122591242464} \n", "\n", "It's instructive to compare the exact values with the last few points from the simulation: " ] }, { "cell_type": "code", "execution_count": 17, "id": "fcc82495-c952-4200-b316-157aac1ef22f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABCcaption
210.0378760.29543740.29543729.704563
220.0496850.29408240.29408229.705918
230.0674000.29696940.29696929.703031last reaction step
\n", "
" ], "text/plain": [ " SYSTEM TIME A B C caption\n", "21 0.037876 0.295437 40.295437 29.704563 \n", "22 0.049685 0.294082 40.294082 29.705918 \n", "23 0.067400 0.296969 40.296969 29.703031 last reaction step" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_history(tail=3)" ] }, { "cell_type": "markdown", "id": "36087ae6-1bd5-4db1-881f-bf6e1dbd6439", "metadata": {}, "source": [ "The 2nd-to-last simulation point, rather than the last one, is actually closer to the exact equilibrium values. \n", "That's because by that time the variable steps are getting so large that they introduce some error. \n", "If we were to run the simulation longer (not shown), we'd see the variable steps continuing to grow, and then suddenly being reduced; \n", "then continued cycles of growth and reduction (\"hitting the brakes whenever getting too fast\")" ] }, { "cell_type": "code", "execution_count": null, "id": "e1b89183-ddc6-48f2-8ecf-7c2e8a922e01", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "635c27c1-37c9-4ca0-8684-03de92380fb6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5c747824-a170-439e-96a5-dd35bc81e08b", "metadata": {}, "source": [ "# _Everthing below is just for diagnostic insight_ \n", "## _into the adaptive variable time steps_ \n", "This information is available because we made a call to `dynamics.set_diagnostics()` prior to running the simulation" ] }, { "cell_type": "code", "execution_count": 18, "id": "06c8c7e9-edd9-45e1-b4a0-508f0b379c42", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
START_TIMEDelta ADelta BDelta Cnorm_Anorm_Bnorm_Cnorm_Dactionstep_factortime_stepcaption
00.000000-9.840000-9.8400009.8400003.227520e+01NaNNoneNoneABORT0.60.004000excessive norm value(s)
10.000000-5.904000-5.9040005.9040001.161907e+01NaNNoneNoneABORT0.60.002400excessive norm value(s)
20.000000-3.542400-3.5424003.5424004.182866e+00NaNNoneNoneABORT0.60.001440excessive norm value(s)
30.000000-2.125440-2.1254402.1254401.505832e+000.212544NoneNoneOK (high)0.80.000864
40.000864-1.272295-1.2722951.2722955.395782e-010.161570NoneNoneOK (stay)1.00.000691
50.001555-1.030999-1.0309991.0309993.543195e-010.156158NoneNoneOK (stay)1.00.000691
60.002246-0.843672-0.8436720.8436722.372610e-010.151433NoneNoneOK (stay)1.00.000691
70.002938-0.695848-0.6958480.6958481.614015e-010.147189NoneNoneOK (low)1.50.000691
80.003629-0.866441-0.8664410.8664412.502399e-010.214905NoneNoneOK (stay)1.00.001037
90.004666-0.652653-0.6526530.6526531.419851e-010.206189NoneNoneOK (stay)1.00.001037
100.005702-0.496755-0.4967550.4967558.225505e-020.197701NoneNoneOK (stay)1.00.001037
110.006739-0.381056-0.3810560.3810564.840115e-020.189025NoneNoneOK (stay)1.00.001037
120.007776-0.294038-0.2940380.2940382.881949e-020.179857NoneNoneOK (stay)1.00.001037
130.008813-0.227921-0.2279210.2279211.731599e-020.169988NoneNoneOK (stay)1.00.001037
140.009850-0.177288-0.1772880.1772881.047695e-020.159305NoneNoneOK (stay)1.00.001037
150.010886-0.138275-0.1382750.1382756.373314e-030.147793NoneNoneOK (low)1.50.001037
160.011923-0.162110-0.1621100.1621108.759877e-030.203318NoneNoneOK (stay)1.00.001555
170.013478-0.109377-0.1093770.1093773.987793e-030.172190NoneNoneOK (stay)1.00.001555
180.015034-0.074029-0.0740290.0740291.826757e-030.140784NoneNoneOK (low)1.50.001555
190.016589-0.075315-0.0753150.0753151.890774e-030.166698NoneNoneOK (stay)1.00.002333
200.018922-0.039097-0.0390970.0390975.095229e-040.103846NoneNoneOK (low)1.50.002333
210.021254-0.030522-0.0305220.0305223.105277e-040.090464NoneNoneOK (low)1.50.003499
220.024754-0.012906-0.0129060.0129065.551890e-050.042056NoneNoneOK (low)1.50.005249
230.0300020.0014720.001472-0.0014727.220164e-070.005007NoneNoneOK (low)1.50.007873
240.037876-0.001355-0.0013550.0013556.116239e-070.004585NoneNoneOK (low)1.50.011810
250.0496850.0028860.002886-0.0028862.776401e-060.009814NoneNoneOK (low)1.50.017715
\n", "
" ], "text/plain": [ " START_TIME Delta A Delta B Delta C norm_A norm_B norm_C \\\n", "0 0.000000 -9.840000 -9.840000 9.840000 3.227520e+01 NaN None \n", "1 0.000000 -5.904000 -5.904000 5.904000 1.161907e+01 NaN None \n", "2 0.000000 -3.542400 -3.542400 3.542400 4.182866e+00 NaN None \n", "3 0.000000 -2.125440 -2.125440 2.125440 1.505832e+00 0.212544 None \n", "4 0.000864 -1.272295 -1.272295 1.272295 5.395782e-01 0.161570 None \n", "5 0.001555 -1.030999 -1.030999 1.030999 3.543195e-01 0.156158 None \n", "6 0.002246 -0.843672 -0.843672 0.843672 2.372610e-01 0.151433 None \n", "7 0.002938 -0.695848 -0.695848 0.695848 1.614015e-01 0.147189 None \n", "8 0.003629 -0.866441 -0.866441 0.866441 2.502399e-01 0.214905 None \n", "9 0.004666 -0.652653 -0.652653 0.652653 1.419851e-01 0.206189 None \n", "10 0.005702 -0.496755 -0.496755 0.496755 8.225505e-02 0.197701 None \n", "11 0.006739 -0.381056 -0.381056 0.381056 4.840115e-02 0.189025 None \n", "12 0.007776 -0.294038 -0.294038 0.294038 2.881949e-02 0.179857 None \n", "13 0.008813 -0.227921 -0.227921 0.227921 1.731599e-02 0.169988 None \n", "14 0.009850 -0.177288 -0.177288 0.177288 1.047695e-02 0.159305 None \n", "15 0.010886 -0.138275 -0.138275 0.138275 6.373314e-03 0.147793 None \n", "16 0.011923 -0.162110 -0.162110 0.162110 8.759877e-03 0.203318 None \n", "17 0.013478 -0.109377 -0.109377 0.109377 3.987793e-03 0.172190 None \n", "18 0.015034 -0.074029 -0.074029 0.074029 1.826757e-03 0.140784 None \n", "19 0.016589 -0.075315 -0.075315 0.075315 1.890774e-03 0.166698 None \n", "20 0.018922 -0.039097 -0.039097 0.039097 5.095229e-04 0.103846 None \n", "21 0.021254 -0.030522 -0.030522 0.030522 3.105277e-04 0.090464 None \n", "22 0.024754 -0.012906 -0.012906 0.012906 5.551890e-05 0.042056 None \n", "23 0.030002 0.001472 0.001472 -0.001472 7.220164e-07 0.005007 None \n", "24 0.037876 -0.001355 -0.001355 0.001355 6.116239e-07 0.004585 None \n", "25 0.049685 0.002886 0.002886 -0.002886 2.776401e-06 0.009814 None \n", "\n", " norm_D action step_factor time_step caption \n", "0 None ABORT 0.6 0.004000 excessive norm value(s) \n", "1 None ABORT 0.6 0.002400 excessive norm value(s) \n", "2 None ABORT 0.6 0.001440 excessive norm value(s) \n", "3 None OK (high) 0.8 0.000864 \n", "4 None OK (stay) 1.0 0.000691 \n", "5 None OK (stay) 1.0 0.000691 \n", "6 None OK (stay) 1.0 0.000691 \n", "7 None OK (low) 1.5 0.000691 \n", "8 None OK (stay) 1.0 0.001037 \n", "9 None OK (stay) 1.0 0.001037 \n", "10 None OK (stay) 1.0 0.001037 \n", "11 None OK (stay) 1.0 0.001037 \n", "12 None OK (stay) 1.0 0.001037 \n", "13 None OK (stay) 1.0 0.001037 \n", "14 None OK (stay) 1.0 0.001037 \n", "15 None OK (low) 1.5 0.001037 \n", "16 None OK (stay) 1.0 0.001555 \n", "17 None OK (stay) 1.0 0.001555 \n", "18 None OK (low) 1.5 0.001555 \n", "19 None OK (stay) 1.0 0.002333 \n", "20 None OK (low) 1.5 0.002333 \n", "21 None OK (low) 1.5 0.003499 \n", "22 None OK (low) 1.5 0.005249 \n", "23 None OK (low) 1.5 0.007873 \n", "24 None OK (low) 1.5 0.011810 \n", "25 None OK (low) 1.5 0.017715 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_diagnostic_decisions_data() # diagnostic data about concentration changes at every step - EVEN aborted ones" ] }, { "cell_type": "code", "execution_count": 19, "id": "4e3012c6-c870-411c-bb80-7e1076233ca3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Reaction: A + B <-> C\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
START_TIMEDelta ADelta BDelta Ctime_stepcaption
00.000000-9.840000-9.8400009.8400000.004000aborted: excessive norm value(s)
10.000000-5.904000-5.9040005.9040000.002400aborted: excessive norm value(s)
20.000000-3.542400-3.5424003.5424000.001440aborted: excessive norm value(s)
30.000000-2.125440-2.1254402.1254400.000864
40.000864-1.272295-1.2722951.2722950.000691
50.001555-1.030999-1.0309991.0309990.000691
60.002246-0.843672-0.8436720.8436720.000691
70.002938-0.695848-0.6958480.6958480.000691
80.003629-0.866441-0.8664410.8664410.001037
90.004666-0.652653-0.6526530.6526530.001037
100.005702-0.496755-0.4967550.4967550.001037
110.006739-0.381056-0.3810560.3810560.001037
120.007776-0.294038-0.2940380.2940380.001037
130.008813-0.227921-0.2279210.2279210.001037
140.009850-0.177288-0.1772880.1772880.001037
150.010886-0.138275-0.1382750.1382750.001037
160.011923-0.162110-0.1621100.1621100.001555
170.013478-0.109377-0.1093770.1093770.001555
180.015034-0.074029-0.0740290.0740290.001555
190.016589-0.075315-0.0753150.0753150.002333
200.018922-0.039097-0.0390970.0390970.002333
210.021254-0.030522-0.0305220.0305220.003499
220.024754-0.012906-0.0129060.0129060.005249
230.0300020.0014720.001472-0.0014720.007873
240.037876-0.001355-0.0013550.0013550.011810
250.0496850.0028860.002886-0.0028860.017715
\n", "
" ], "text/plain": [ " START_TIME Delta A Delta B Delta C time_step \\\n", "0 0.000000 -9.840000 -9.840000 9.840000 0.004000 \n", "1 0.000000 -5.904000 -5.904000 5.904000 0.002400 \n", "2 0.000000 -3.542400 -3.542400 3.542400 0.001440 \n", "3 0.000000 -2.125440 -2.125440 2.125440 0.000864 \n", "4 0.000864 -1.272295 -1.272295 1.272295 0.000691 \n", "5 0.001555 -1.030999 -1.030999 1.030999 0.000691 \n", "6 0.002246 -0.843672 -0.843672 0.843672 0.000691 \n", "7 0.002938 -0.695848 -0.695848 0.695848 0.000691 \n", "8 0.003629 -0.866441 -0.866441 0.866441 0.001037 \n", "9 0.004666 -0.652653 -0.652653 0.652653 0.001037 \n", "10 0.005702 -0.496755 -0.496755 0.496755 0.001037 \n", "11 0.006739 -0.381056 -0.381056 0.381056 0.001037 \n", "12 0.007776 -0.294038 -0.294038 0.294038 0.001037 \n", "13 0.008813 -0.227921 -0.227921 0.227921 0.001037 \n", "14 0.009850 -0.177288 -0.177288 0.177288 0.001037 \n", "15 0.010886 -0.138275 -0.138275 0.138275 0.001037 \n", "16 0.011923 -0.162110 -0.162110 0.162110 0.001555 \n", "17 0.013478 -0.109377 -0.109377 0.109377 0.001555 \n", "18 0.015034 -0.074029 -0.074029 0.074029 0.001555 \n", "19 0.016589 -0.075315 -0.075315 0.075315 0.002333 \n", "20 0.018922 -0.039097 -0.039097 0.039097 0.002333 \n", "21 0.021254 -0.030522 -0.030522 0.030522 0.003499 \n", "22 0.024754 -0.012906 -0.012906 0.012906 0.005249 \n", "23 0.030002 0.001472 0.001472 -0.001472 0.007873 \n", "24 0.037876 -0.001355 -0.001355 0.001355 0.011810 \n", "25 0.049685 0.002886 0.002886 -0.002886 0.017715 \n", "\n", " caption \n", "0 aborted: excessive norm value(s) \n", "1 aborted: excessive norm value(s) \n", "2 aborted: excessive norm value(s) \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "17 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 \n", "23 \n", "24 \n", "25 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_diagnostic_rxn_data(rxn_index=0) # diagnostic run data of the requested SINGLE reaction" ] }, { "cell_type": "code", "execution_count": 20, "id": "a5cee533-a63c-4ff8-9427-e9b64cf4885a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TIMEABCcaption
00.00000010.00000050.00000020.000000
10.0008647.87456047.87456022.125440
20.0015556.60226546.60226523.397735
30.0022465.57126645.57126624.428734
40.0029384.72759444.72759425.272406
50.0036294.03174644.03174625.968254
60.0046663.16530543.16530526.834695
70.0057022.51265242.51265227.487348
80.0067392.01589842.01589827.984102
90.0077761.63484241.63484228.365158
100.0088131.34080441.34080428.659196
110.0098501.11288341.11288328.887117
120.0108860.93559540.93559529.064405
130.0119230.79732140.79732129.202679
140.0134780.63521140.63521129.364789
150.0150340.52583340.52583329.474167
160.0165890.45180540.45180529.548195
170.0189220.37649040.37649029.623510
180.0212540.33739340.33739329.662607
190.0247540.30687140.30687129.693129
200.0300020.29396540.29396529.706035
210.0378760.29543740.29543729.704563
220.0496850.29408240.29408229.705918
230.0674000.29696940.29696929.703031
\n", "
" ], "text/plain": [ " TIME A B C caption\n", "0 0.000000 10.000000 50.000000 20.000000 \n", "1 0.000864 7.874560 47.874560 22.125440 \n", "2 0.001555 6.602265 46.602265 23.397735 \n", "3 0.002246 5.571266 45.571266 24.428734 \n", "4 0.002938 4.727594 44.727594 25.272406 \n", "5 0.003629 4.031746 44.031746 25.968254 \n", "6 0.004666 3.165305 43.165305 26.834695 \n", "7 0.005702 2.512652 42.512652 27.487348 \n", "8 0.006739 2.015898 42.015898 27.984102 \n", "9 0.007776 1.634842 41.634842 28.365158 \n", "10 0.008813 1.340804 41.340804 28.659196 \n", "11 0.009850 1.112883 41.112883 28.887117 \n", "12 0.010886 0.935595 40.935595 29.064405 \n", "13 0.011923 0.797321 40.797321 29.202679 \n", "14 0.013478 0.635211 40.635211 29.364789 \n", "15 0.015034 0.525833 40.525833 29.474167 \n", "16 0.016589 0.451805 40.451805 29.548195 \n", "17 0.018922 0.376490 40.376490 29.623510 \n", "18 0.021254 0.337393 40.337393 29.662607 \n", "19 0.024754 0.306871 40.306871 29.693129 \n", "20 0.030002 0.293965 40.293965 29.706035 \n", "21 0.037876 0.295437 40.295437 29.704563 \n", "22 0.049685 0.294082 40.294082 29.705918 \n", "23 0.067400 0.296969 40.296969 29.703031 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_diagnostic_conc_data() # diagnostic concentration data saved during the run, regardless of how much history we requested to save" ] }, { "cell_type": "code", "execution_count": null, "id": "1918451d", "metadata": {}, "outputs": [], "source": [] } ], "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }