{
"cells": [
{
"cell_type": "markdown",
"id": "5cbc8640",
"metadata": {},
"source": [
"### Adaptive time steps (variable time resolution) for reaction `A <-> B`,\n",
"with 1st-order kinetics in both directions, taken to equilibrium\n",
"\n",
"This is a repeat of the experiment _\"react_2_a\"_ , but with adaptive variable time steps\n",
"\n",
"LAST REVISED: June 14, 2024 (using v. 1.0 beta33)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3792d78d-7429-4221-a263-57b07d77b5bc",
"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": "a29db1c7",
"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": "121fdfdd",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-> Output will be LOGGED into the file 'react_2_b.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": "ac9eea69-174c-43e5-9eed-443cbc5e2ba7",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "10c710ac",
"metadata": {},
"source": [
"# PART 1 - RUN THE SIMULATION"
]
},
{
"cell_type": "markdown",
"id": "e0529a0c",
"metadata": {},
"source": [
"### Initialize the System"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "78077d8c",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of reactions: 1 (at temp. 25 C)\n",
"0: A <-> B (kF = 3 / kR = 2 / delta_G = -1,005.1 / K = 1.5) | 1st order in all reactants & products\n",
"Set of chemicals involved in the above reactions: {'B', 'A'}\n"
]
}
],
"source": [
"# Instantiate the simulator and specify the chemicals\n",
"dynamics = UniformCompartment(names=[\"A\", \"B\"], preset=\"mid\")\n",
"\n",
"# Reaction A <-> B , with 1st-order kinetics in both directions\n",
"dynamics.add_reaction(reactants=[\"A\"], products=[\"B\"], \n",
" forward_rate=3., reverse_rate=2.)\n",
"\n",
"dynamics.describe_reactions()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "373afeb1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[GRAPHIC ELEMENT SENT TO LOG FILE `react_2_b.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": 6,
"id": "9fc3948d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 0:\n",
"2 species:\n",
" Species 0 (A). Conc: 10.0\n",
" Species 1 (B). Conc: 50.0\n",
"Set of chemicals involved in reactions: {'B', 'A'}\n"
]
}
],
"source": [
"# Set the initial concentrations of all the chemicals, in their index order\n",
"dynamics.set_conc([10., 50.])\n",
"\n",
"dynamics.describe_state()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0cc938cc",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.0 | \n",
" 10.0 | \n",
" 50.0 | \n",
" Initialized state | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B caption\n",
"0 0.0 10.0 50.0 Initialized state"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dynamics.get_history()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c4595dd6-ddfa-4715-b2fc-07255a004681",
"metadata": {},
"outputs": [],
"source": [
"dynamics.set_diagnostics() # To save diagnostic information about the call to single_compartment_react()\n",
" # Useful for insight into the inner workings of the simulation"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ab5f46e6-347d-49e9-b8b4-9f2a4310a10e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Parameters used for the automated adaptive time step sizes -\n",
" THRESHOLDS: [{'norm': 'norm_A', 'low': 0.5, 'high': 0.8, 'abort': 1.44}, {'norm': 'norm_B', 'low': 0.08, 'high': 0.5, 'abort': 1.5}]\n",
" STEP FACTORS: {'upshift': 1.2, 'downshift': 0.5, 'abort': 0.4, 'error': 0.25}\n"
]
}
],
"source": [
"# For experiment repeatability, we specified, when instantiating the \"UniformCompartment\" class, \n",
"# a particular preset applicable to the adaptive time steps\n",
"dynamics.show_adaptive_parameters() "
]
},
{
"cell_type": "markdown",
"id": "987af2c5",
"metadata": {
"tags": []
},
"source": [
"### Run the reaction"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "43735178-313b-48cf-a583-5181238feac3",
"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",
"19 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: 2\n",
"Norm usage: {'norm_A': 17, 'norm_B': 15, 'norm_C': 15, 'norm_D': 15}\n"
]
}
],
"source": [
"dynamics.single_compartment_react(initial_step=0.1, target_end_time=1.2,\n",
" variable_steps=True,\n",
" snapshots={\"initial_caption\": \"1st reaction step\",\n",
" \"final_caption\": \"last reaction step\"}\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "2169c3b3",
"metadata": {},
"source": [
"## The flag _variable_steps_ automatically adjusts up or down the time step"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "2d5df59c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.000000 | \n",
" 10.000000 | \n",
" 50.000000 | \n",
" Initialized state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.016000 | \n",
" 11.120000 | \n",
" 48.880000 | \n",
" 1st reaction step | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.032000 | \n",
" 12.150400 | \n",
" 47.849600 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.048000 | \n",
" 13.098368 | \n",
" 46.901632 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.067200 | \n",
" 14.144925 | \n",
" 45.855075 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.086400 | \n",
" 15.091012 | \n",
" 44.908988 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.109440 | \n",
" 16.117327 | \n",
" 43.882673 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.132480 | \n",
" 17.025411 | \n",
" 42.974589 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.160128 | \n",
" 17.989578 | \n",
" 42.010422 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.193306 | \n",
" 18.986635 | \n",
" 41.013365 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.233119 | \n",
" 19.984624 | \n",
" 40.015376 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.280894 | \n",
" 20.943812 | \n",
" 39.056188 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.338225 | \n",
" 21.819882 | \n",
" 38.180118 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.407022 | \n",
" 22.569810 | \n",
" 37.430190 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.489579 | \n",
" 23.160168 | \n",
" 36.839832 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.588647 | \n",
" 23.576169 | \n",
" 36.423831 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.707528 | \n",
" 23.828097 | \n",
" 36.171903 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.850186 | \n",
" 23.950713 | \n",
" 36.049287 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 1.021375 | \n",
" 23.992900 | \n",
" 36.007100 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 1.226802 | \n",
" 24.000193 | \n",
" 35.999807 | \n",
" last reaction step | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B caption\n",
"0 0.000000 10.000000 50.000000 Initialized state\n",
"1 0.016000 11.120000 48.880000 1st reaction step\n",
"2 0.032000 12.150400 47.849600 \n",
"3 0.048000 13.098368 46.901632 \n",
"4 0.067200 14.144925 45.855075 \n",
"5 0.086400 15.091012 44.908988 \n",
"6 0.109440 16.117327 43.882673 \n",
"7 0.132480 17.025411 42.974589 \n",
"8 0.160128 17.989578 42.010422 \n",
"9 0.193306 18.986635 41.013365 \n",
"10 0.233119 19.984624 40.015376 \n",
"11 0.280894 20.943812 39.056188 \n",
"12 0.338225 21.819882 38.180118 \n",
"13 0.407022 22.569810 37.430190 \n",
"14 0.489579 23.160168 36.839832 \n",
"15 0.588647 23.576169 36.423831 \n",
"16 0.707528 23.828097 36.171903 \n",
"17 0.850186 23.950713 36.049287 \n",
"18 1.021375 23.992900 36.007100 \n",
"19 1.226802 24.000193 35.999807 last reaction step"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"history = dynamics.get_history() # The system's history, saved during the run of single_compartment_react()\n",
"history"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "1092029f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"From time 0 to 0.048, in 3 steps of 0.016\n",
"From time 0.048 to 0.0864, in 2 steps of 0.0192\n",
"From time 0.0864 to 0.1325, in 2 steps of 0.023\n",
"From time 0.1325 to 0.1601, in 1 step of 0.0276\n",
"From time 0.1601 to 0.1933, in 1 step of 0.0332\n",
"From time 0.1933 to 0.2331, in 1 step of 0.0398\n",
"From time 0.2331 to 0.2809, in 1 step of 0.0478\n",
"From time 0.2809 to 0.3382, in 1 step of 0.0573\n",
"From time 0.3382 to 0.407, in 1 step of 0.0688\n",
"From time 0.407 to 0.4896, in 1 step of 0.0826\n",
"From time 0.4896 to 0.5886, in 1 step of 0.0991\n",
"From time 0.5886 to 0.7075, in 1 step of 0.119\n",
"From time 0.7075 to 0.8502, in 1 step of 0.143\n",
"From time 0.8502 to 1.021, in 1 step of 0.171\n",
"From time 1.021 to 1.227, in 1 step of 0.205\n",
"(19 steps total)\n"
]
}
],
"source": [
"dynamics.explain_time_advance()"
]
},
{
"cell_type": "markdown",
"id": "edb7c015",
"metadata": {
"tags": []
},
"source": [
"## Notice how the reaction proceeds in smaller steps in the early times, when [A] and [B] are changing much more rapidly\n",
"### That resulted from passing the flag _variable_steps=True_ to single_compartment_react()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b47c8bd4-d28c-471c-94e8-b1070692b608",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "bc58e5c8-bd08-41d7-9984-18d000869a69",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "766e8bba-3a15-461e-9bf6-9daf509197d5",
"metadata": {
"tags": []
},
"source": [
"# PART 2 - Scrutinizing some instances of step-size changes"
]
},
{
"cell_type": "markdown",
"id": "ec7ea562-26ed-46b6-8af2-25c28bb3cf46",
"metadata": {},
"source": [
"The Delta-concentration values for all the individual reaction time steps, as contribued by a single reaction, may all be inspected at once from the diagnostic data:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "e8cb2d84-b012-424b-90be-54fd2dae1a27",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reaction: A <-> B\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" START_TIME | \n",
" Delta A | \n",
" Delta B | \n",
" time_step | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.000000 | \n",
" 7.000000 | \n",
" -7.000000 | \n",
" 0.100000 | \n",
" aborted: excessive norm value(s) | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.000000 | \n",
" 2.800000 | \n",
" -2.800000 | \n",
" 0.040000 | \n",
" aborted: excessive norm value(s) | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.000000 | \n",
" 1.120000 | \n",
" -1.120000 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.016000 | \n",
" 1.030400 | \n",
" -1.030400 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.032000 | \n",
" 0.947968 | \n",
" -0.947968 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.048000 | \n",
" 1.046557 | \n",
" -1.046557 | \n",
" 0.019200 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.067200 | \n",
" 0.946087 | \n",
" -0.946087 | \n",
" 0.019200 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.086400 | \n",
" 1.026315 | \n",
" -1.026315 | \n",
" 0.023040 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.109440 | \n",
" 0.908084 | \n",
" -0.908084 | \n",
" 0.023040 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.132480 | \n",
" 0.964167 | \n",
" -0.964167 | \n",
" 0.027648 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.160128 | \n",
" 0.997057 | \n",
" -0.997057 | \n",
" 0.033178 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.193306 | \n",
" 0.997988 | \n",
" -0.997988 | \n",
" 0.039813 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.233119 | \n",
" 0.959188 | \n",
" -0.959188 | \n",
" 0.047776 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.280894 | \n",
" 0.876070 | \n",
" -0.876070 | \n",
" 0.057331 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.338225 | \n",
" 0.749929 | \n",
" -0.749929 | \n",
" 0.068797 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.407022 | \n",
" 0.590357 | \n",
" -0.590357 | \n",
" 0.082556 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.489579 | \n",
" 0.416002 | \n",
" -0.416002 | \n",
" 0.099068 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.588647 | \n",
" 0.251928 | \n",
" -0.251928 | \n",
" 0.118881 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.707528 | \n",
" 0.122616 | \n",
" -0.122616 | \n",
" 0.142658 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.850186 | \n",
" 0.042187 | \n",
" -0.042187 | \n",
" 0.171189 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 1.021375 | \n",
" 0.007293 | \n",
" -0.007293 | \n",
" 0.205427 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" START_TIME Delta A Delta B time_step \\\n",
"0 0.000000 7.000000 -7.000000 0.100000 \n",
"1 0.000000 2.800000 -2.800000 0.040000 \n",
"2 0.000000 1.120000 -1.120000 0.016000 \n",
"3 0.016000 1.030400 -1.030400 0.016000 \n",
"4 0.032000 0.947968 -0.947968 0.016000 \n",
"5 0.048000 1.046557 -1.046557 0.019200 \n",
"6 0.067200 0.946087 -0.946087 0.019200 \n",
"7 0.086400 1.026315 -1.026315 0.023040 \n",
"8 0.109440 0.908084 -0.908084 0.023040 \n",
"9 0.132480 0.964167 -0.964167 0.027648 \n",
"10 0.160128 0.997057 -0.997057 0.033178 \n",
"11 0.193306 0.997988 -0.997988 0.039813 \n",
"12 0.233119 0.959188 -0.959188 0.047776 \n",
"13 0.280894 0.876070 -0.876070 0.057331 \n",
"14 0.338225 0.749929 -0.749929 0.068797 \n",
"15 0.407022 0.590357 -0.590357 0.082556 \n",
"16 0.489579 0.416002 -0.416002 0.099068 \n",
"17 0.588647 0.251928 -0.251928 0.118881 \n",
"18 0.707528 0.122616 -0.122616 0.142658 \n",
"19 0.850186 0.042187 -0.042187 0.171189 \n",
"20 1.021375 0.007293 -0.007293 0.205427 \n",
"\n",
" caption \n",
"0 aborted: excessive norm value(s) \n",
"1 aborted: excessive norm value(s) \n",
"2 \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 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dynamics.get_diagnostic_rxn_data(rxn_index=0) # For the 0-th reaction (the only reaction in our case)"
]
},
{
"cell_type": "markdown",
"id": "4b4fbb1d-0b7e-43f9-b4bc-dbaef933d044",
"metadata": {},
"source": [
"### Note that diagnostic data with the DELTA Concentrations - above and below - also record the values that were considered (but not actually used) during ABORTED steps"
]
},
{
"cell_type": "markdown",
"id": "789c4faf-12ba-4d63-9af8-3cef487de113",
"metadata": {},
"source": [
"In the examples below, we'll re-compute Delta values for individual steps, directly from the system history."
]
},
{
"cell_type": "markdown",
"id": "6047485b",
"metadata": {
"tags": []
},
"source": [
"### Example 1: **very early in the run** "
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "b47eaf6a-c343-4c56-9854-7ba08c26b4b8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1 | \n",
" 0.016 | \n",
" 11.120000 | \n",
" 48.880000 | \n",
" 1st reaction step | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.032 | \n",
" 12.150400 | \n",
" 47.849600 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.048 | \n",
" 13.098368 | \n",
" 46.901632 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B caption\n",
"1 0.016 11.120000 48.880000 1st reaction step\n",
"2 0.032 12.150400 47.849600 \n",
"3 0.048 13.098368 46.901632 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"history[1:4]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "d7c7164a-0350-4549-874a-5084a04160a5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.0304, -1.0304], dtype=float32)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"delta_concentrations = dynamics.extract_delta_concentrations(history, 1, 2, ['A', 'B'])\n",
"delta_concentrations"
]
},
{
"cell_type": "markdown",
"id": "044a0b46-a7b2-43d3-9649-4a4ed3782a35",
"metadata": {},
"source": [
"As expected by the 1:1 stoichiometry, delta_A = - delta_B"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "199858ec-ee69-4581-a4b8-58a6948de536",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11.12, 48.88], dtype=float32)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get all the concentrations at the start of the above steps\n",
"baseline_conc = dynamics.get_historical_concentrations(row=1)\n",
"#dynamics.get_historical_concentrations(t=0.016) # Alternate way\n",
"baseline_conc"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "aeb179e2-27a0-41b6-a6f0-3dfff52abeae",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'action': 'stay',\n",
" 'step_factor': 1,\n",
" 'norms': {'norm_A': 0.5308620929718018, 'norm_B': 0.09266187},\n",
" 'applicable_norms': 'ALL'}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Computes some measures of how large delta_concentrations is, and propose a course of action\n",
"dynamics.adjust_timestep(delta_conc=delta_concentrations, baseline_conc=baseline_conc) "
]
},
{
"cell_type": "markdown",
"id": "a980506c-5c06-46f2-b975-dbc9d66bed5c",
"metadata": {},
"source": [
"#### The above analysis indicates that the time step is just about right, and the simulations should STAY on that course : that's based on the shown computed norms (indicating the extent of the change taking place.) \n",
"Indeed, the simulator maintains the same time step :"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "e5f56eb8-36d8-441b-8598-dd94c1d1be58",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.016000000000000004"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"original_step = history[\"SYSTEM TIME\"][2] - history[\"SYSTEM TIME\"][1]\n",
"original_step"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "72d25589",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.016000000000000007"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"next_step = history[\"SYSTEM TIME\"][3] - history[\"SYSTEM TIME\"][2]\n",
"next_step"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "aa7fee98",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0000000000000002"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"next_step / original_step"
]
},
{
"cell_type": "markdown",
"id": "c96e6b0c-b343-445c-8d76-a01f2bed7d30",
"metadata": {
"tags": []
},
"source": [
"### Example 2: **very late in the run** "
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "c3e65edc-7ce0-42c4-8573-fe5934962d16",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 17 | \n",
" 0.850186 | \n",
" 23.950713 | \n",
" 36.049287 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 1.021375 | \n",
" 23.992900 | \n",
" 36.007100 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 1.226802 | \n",
" 24.000193 | \n",
" 35.999807 | \n",
" last reaction step | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B caption\n",
"17 0.850186 23.950713 36.049287 \n",
"18 1.021375 23.992900 36.007100 \n",
"19 1.226802 24.000193 35.999807 last reaction step"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"history[17:20]"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "28f3a54f-f5a4-420f-be44-912b58a31cea",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.04218667, -0.04218667], dtype=float32)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"delta_concentrations = dynamics.extract_delta_concentrations(history, 17, 18, ['A', 'B'])\n",
"delta_concentrations"
]
},
{
"cell_type": "markdown",
"id": "382261e6-50e2-4189-a268-b367bfa64284",
"metadata": {},
"source": [
"#### Notice the far less change now that the system is approaching equilibrium"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "95c676b7-ce6e-4228-99c2-bdd0f75a4ce2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([23.950714, 36.049286], dtype=float32)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get all the concentrations at the start of the above steps\n",
"baseline_conc = dynamics.get_historical_concentrations(row=17)\n",
"#dynamics.get_historical_concentrations(t=0.850186) # Alternate way\n",
"baseline_conc"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "281220ff-55c6-4b0a-ae62-037133174efd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'action': 'low',\n",
" 'step_factor': 1.2,\n",
" 'norms': {'norm_A': 0.0008898575906641781, 'norm_B': 0.0017613951},\n",
" 'applicable_norms': 'ALL'}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Computes a measure of how large delta_concentrations is, and propose a course of action\n",
"dynamics.adjust_timestep(delta_conc=delta_concentrations, baseline_conc=baseline_conc) "
]
},
{
"cell_type": "markdown",
"id": "3370c89b-bece-44af-864b-ee2221ebaaff",
"metadata": {},
"source": [
"#### The above analysis indicates that the time step is on the \"LOW\" side, and the simulations should increase it by a factor 1.2 : again, that's based on the shown computed norms (indicating the extent of the change taking place.) \n",
"Indeed, the simulator increases the time step x1.2:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "0522109c-64e3-46f1-8f43-36360dc6a381",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.17118912860651525"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"original_step = history[\"SYSTEM TIME\"][18] - history[\"SYSTEM TIME\"][17]\n",
"original_step"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "a177ec82-5600-4b21-ba15-79324f72d44c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.2054269543278182"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"next_step = history[\"SYSTEM TIME\"][19] - history[\"SYSTEM TIME\"][18]\n",
"next_step"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "09104a03-3335-403b-96f4-fa2cddad6f92",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.1999999999999995"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"next_step / original_step"
]
},
{
"cell_type": "markdown",
"id": "58b2fdca-bff2-4b88-b6b8-68db4844ef86",
"metadata": {},
"source": [
"Where does that x1.2 factor come from? It's one of the parameters that we passed to the simulator; they can be seen as follows:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "89246ea8-47f7-4ffb-80e3-ed2ad321a447",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Parameters used for the automated adaptive time step sizes -\n",
" THRESHOLDS: [{'norm': 'norm_A', 'low': 0.5, 'high': 0.8, 'abort': 1.44}, {'norm': 'norm_B', 'low': 0.08, 'high': 0.5, 'abort': 1.5}]\n",
" STEP FACTORS: {'upshift': 1.2, 'downshift': 0.5, 'abort': 0.4, 'error': 0.25}\n"
]
}
],
"source": [
"dynamics.show_adaptive_parameters()"
]
},
{
"cell_type": "markdown",
"id": "53e2d39f-cff2-4035-a40e-752a8418a3ec",
"metadata": {},
"source": [
"**1.2** is stored as the \"step factor\" (for the time steps to take) in case an _'upshift'_ (in step size) is the decided course of action"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "49fc2e1e-12f9-427c-8233-c998026caac4",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "66f7a05f-122e-496b-a101-9ac82a4599cf",
"metadata": {},
"source": [
"## Diagnostics of the run may be investigated as follows: \n",
"_(note - this is possible because we make a call to set_diagnostics() prior to running the simulation)_"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "807a8624-64c5-4b34-9433-54279f6c05ab",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.000000 | \n",
" 10.000000 | \n",
" 50.000000 | \n",
" | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.016000 | \n",
" 11.120000 | \n",
" 48.880000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.032000 | \n",
" 12.150400 | \n",
" 47.849600 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.048000 | \n",
" 13.098368 | \n",
" 46.901632 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.067200 | \n",
" 14.144925 | \n",
" 45.855075 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.086400 | \n",
" 15.091012 | \n",
" 44.908988 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.109440 | \n",
" 16.117327 | \n",
" 43.882673 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.132480 | \n",
" 17.025411 | \n",
" 42.974589 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.160128 | \n",
" 17.989578 | \n",
" 42.010422 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.193306 | \n",
" 18.986635 | \n",
" 41.013365 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.233119 | \n",
" 19.984624 | \n",
" 40.015376 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.280894 | \n",
" 20.943812 | \n",
" 39.056188 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.338225 | \n",
" 21.819882 | \n",
" 38.180118 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.407022 | \n",
" 22.569810 | \n",
" 37.430190 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.489579 | \n",
" 23.160168 | \n",
" 36.839832 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.588647 | \n",
" 23.576169 | \n",
" 36.423831 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.707528 | \n",
" 23.828097 | \n",
" 36.171903 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.850186 | \n",
" 23.950713 | \n",
" 36.049287 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 1.021375 | \n",
" 23.992900 | \n",
" 36.007100 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 1.226802 | \n",
" 24.000193 | \n",
" 35.999807 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" TIME A B caption\n",
"0 0.000000 10.000000 50.000000 \n",
"1 0.016000 11.120000 48.880000 \n",
"2 0.032000 12.150400 47.849600 \n",
"3 0.048000 13.098368 46.901632 \n",
"4 0.067200 14.144925 45.855075 \n",
"5 0.086400 15.091012 44.908988 \n",
"6 0.109440 16.117327 43.882673 \n",
"7 0.132480 17.025411 42.974589 \n",
"8 0.160128 17.989578 42.010422 \n",
"9 0.193306 18.986635 41.013365 \n",
"10 0.233119 19.984624 40.015376 \n",
"11 0.280894 20.943812 39.056188 \n",
"12 0.338225 21.819882 38.180118 \n",
"13 0.407022 22.569810 37.430190 \n",
"14 0.489579 23.160168 36.839832 \n",
"15 0.588647 23.576169 36.423831 \n",
"16 0.707528 23.828097 36.171903 \n",
"17 0.850186 23.950713 36.049287 \n",
"18 1.021375 23.992900 36.007100 \n",
"19 1.226802 24.000193 35.999807 "
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dynamics.get_diagnostic_conc_data() # This will be complete, even if we only saved part of the history during the run"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "f9ebf09e-caba-44e8-a675-3538cbee1cc0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" START_TIME | \n",
" Delta A | \n",
" Delta B | \n",
" norm_A | \n",
" norm_B | \n",
" norm_C | \n",
" norm_D | \n",
" action | \n",
" step_factor | \n",
" time_step | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.000000 | \n",
" 7.000000 | \n",
" -7.000000 | \n",
" 24.500000 | \n",
" NaN | \n",
" None | \n",
" None | \n",
" ABORT | \n",
" 0.4 | \n",
" 0.100000 | \n",
" excessive norm value(s) | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.000000 | \n",
" 2.800000 | \n",
" -2.800000 | \n",
" 3.920000 | \n",
" NaN | \n",
" None | \n",
" None | \n",
" ABORT | \n",
" 0.4 | \n",
" 0.040000 | \n",
" excessive norm value(s) | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.000000 | \n",
" 1.120000 | \n",
" -1.120000 | \n",
" 0.627200 | \n",
" 0.112000 | \n",
" None | \n",
" None | \n",
" OK (stay) | \n",
" 1.0 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.016000 | \n",
" 1.030400 | \n",
" -1.030400 | \n",
" 0.530862 | \n",
" 0.092662 | \n",
" None | \n",
" None | \n",
" OK (stay) | \n",
" 1.0 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.032000 | \n",
" 0.947968 | \n",
" -0.947968 | \n",
" 0.449322 | \n",
" 0.078019 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.016000 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.048000 | \n",
" 1.046557 | \n",
" -1.046557 | \n",
" 0.547640 | \n",
" 0.079900 | \n",
" None | \n",
" None | \n",
" OK (stay) | \n",
" 1.0 | \n",
" 0.019200 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.067200 | \n",
" 0.946087 | \n",
" -0.946087 | \n",
" 0.447541 | \n",
" 0.066885 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.019200 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.086400 | \n",
" 1.026315 | \n",
" -1.026315 | \n",
" 0.526662 | \n",
" 0.068008 | \n",
" None | \n",
" None | \n",
" OK (stay) | \n",
" 1.0 | \n",
" 0.023040 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.109440 | \n",
" 0.908084 | \n",
" -0.908084 | \n",
" 0.412308 | \n",
" 0.056342 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.023040 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.132480 | \n",
" 0.964167 | \n",
" -0.964167 | \n",
" 0.464809 | \n",
" 0.056631 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.027648 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.160128 | \n",
" 0.997057 | \n",
" -0.997057 | \n",
" 0.497061 | \n",
" 0.055424 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.033178 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.193306 | \n",
" 0.997988 | \n",
" -0.997988 | \n",
" 0.497990 | \n",
" 0.052563 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.039813 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.233119 | \n",
" 0.959188 | \n",
" -0.959188 | \n",
" 0.460021 | \n",
" 0.047996 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.047776 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.280894 | \n",
" 0.876070 | \n",
" -0.876070 | \n",
" 0.383749 | \n",
" 0.041830 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.057331 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.338225 | \n",
" 0.749929 | \n",
" -0.749929 | \n",
" 0.281197 | \n",
" 0.034369 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.068797 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.407022 | \n",
" 0.590357 | \n",
" -0.590357 | \n",
" 0.174261 | \n",
" 0.026157 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.082556 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.489579 | \n",
" 0.416002 | \n",
" -0.416002 | \n",
" 0.086529 | \n",
" 0.017962 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.099068 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.588647 | \n",
" 0.251928 | \n",
" -0.251928 | \n",
" 0.031734 | \n",
" 0.010686 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.118881 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.707528 | \n",
" 0.122616 | \n",
" -0.122616 | \n",
" 0.007517 | \n",
" 0.005146 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.142658 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.850186 | \n",
" 0.042187 | \n",
" -0.042187 | \n",
" 0.000890 | \n",
" 0.001761 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.171189 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 1.021375 | \n",
" 0.007293 | \n",
" -0.007293 | \n",
" 0.000027 | \n",
" 0.000304 | \n",
" None | \n",
" None | \n",
" OK (low) | \n",
" 1.2 | \n",
" 0.205427 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" START_TIME Delta A Delta B norm_A norm_B norm_C norm_D \\\n",
"0 0.000000 7.000000 -7.000000 24.500000 NaN None None \n",
"1 0.000000 2.800000 -2.800000 3.920000 NaN None None \n",
"2 0.000000 1.120000 -1.120000 0.627200 0.112000 None None \n",
"3 0.016000 1.030400 -1.030400 0.530862 0.092662 None None \n",
"4 0.032000 0.947968 -0.947968 0.449322 0.078019 None None \n",
"5 0.048000 1.046557 -1.046557 0.547640 0.079900 None None \n",
"6 0.067200 0.946087 -0.946087 0.447541 0.066885 None None \n",
"7 0.086400 1.026315 -1.026315 0.526662 0.068008 None None \n",
"8 0.109440 0.908084 -0.908084 0.412308 0.056342 None None \n",
"9 0.132480 0.964167 -0.964167 0.464809 0.056631 None None \n",
"10 0.160128 0.997057 -0.997057 0.497061 0.055424 None None \n",
"11 0.193306 0.997988 -0.997988 0.497990 0.052563 None None \n",
"12 0.233119 0.959188 -0.959188 0.460021 0.047996 None None \n",
"13 0.280894 0.876070 -0.876070 0.383749 0.041830 None None \n",
"14 0.338225 0.749929 -0.749929 0.281197 0.034369 None None \n",
"15 0.407022 0.590357 -0.590357 0.174261 0.026157 None None \n",
"16 0.489579 0.416002 -0.416002 0.086529 0.017962 None None \n",
"17 0.588647 0.251928 -0.251928 0.031734 0.010686 None None \n",
"18 0.707528 0.122616 -0.122616 0.007517 0.005146 None None \n",
"19 0.850186 0.042187 -0.042187 0.000890 0.001761 None None \n",
"20 1.021375 0.007293 -0.007293 0.000027 0.000304 None None \n",
"\n",
" action step_factor time_step caption \n",
"0 ABORT 0.4 0.100000 excessive norm value(s) \n",
"1 ABORT 0.4 0.040000 excessive norm value(s) \n",
"2 OK (stay) 1.0 0.016000 \n",
"3 OK (stay) 1.0 0.016000 \n",
"4 OK (low) 1.2 0.016000 \n",
"5 OK (stay) 1.0 0.019200 \n",
"6 OK (low) 1.2 0.019200 \n",
"7 OK (stay) 1.0 0.023040 \n",
"8 OK (low) 1.2 0.023040 \n",
"9 OK (low) 1.2 0.027648 \n",
"10 OK (low) 1.2 0.033178 \n",
"11 OK (low) 1.2 0.039813 \n",
"12 OK (low) 1.2 0.047776 \n",
"13 OK (low) 1.2 0.057331 \n",
"14 OK (low) 1.2 0.068797 \n",
"15 OK (low) 1.2 0.082556 \n",
"16 OK (low) 1.2 0.099068 \n",
"17 OK (low) 1.2 0.118881 \n",
"18 OK (low) 1.2 0.142658 \n",
"19 OK (low) 1.2 0.171189 \n",
"20 OK (low) 1.2 0.205427 "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dynamics.get_diagnostic_decisions_data()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "94939e71-9ab1-437c-82c1-85285c904170",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "6deca814",
"metadata": {},
"source": [
"# PART 3 - Analyze the reaction Dynamics"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "23c4b3ba",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: A <-> B\n",
"Final concentrations: [A] = 24 ; [B] = 36\n",
"1. Ratio of reactant/product concentrations, adjusted for reaction orders: 1.49998\n",
" Formula used: [B] / [A]\n",
"2. Ratio of forward/reverse reaction rates: 1.5\n",
"Discrepancy between the two values: 0.001338 %\n",
"Reaction IS in equilibrium (within 1% tolerance)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Verify that the reaction has reached equilibrium\n",
"dynamics.is_in_equilibrium()"
]
},
{
"cell_type": "markdown",
"id": "03866901",
"metadata": {
"tags": []
},
"source": [
"### Plots of changes of concentration with time"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "6b033cc7-078f-4b94-a466-1aa91e2fca4d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" \n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"hovertemplate": "Chemical=A
SYSTEM TIME=%{x}
Concentration=%{y}",
"legendgroup": "A",
"line": {
"color": "darkturquoise",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "A",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.016000000000000004,
0.03200000000000001,
0.048000000000000015,
0.06720000000000002,
0.08640000000000003,
0.10944000000000004,
0.13248000000000004,
0.16012800000000005,
0.19330560000000005,
0.23311872000000006,
0.28089446400000007,
0.3382253568000001,
0.4070224281600001,
0.48957891379200014,
0.5886466965504001,
0.7075280358604801,
0.850185643032576,
1.0213747716390913,
1.2268017259669095
],
"xaxis": "x",
"y": [
10,
11.120000000000001,
12.150400000000001,
13.098368,
14.144924672,
15.091011903488,
16.117327332206184,
17.025411223536032,
17.989578375994412,
18.98663519835745,
19.984623670615306,
20.94381162849702,
21.819881668013238,
22.569810450307923,
23.160167565358876,
23.576169251301298,
23.828097086531773,
23.950713378038216,
23.992900047366195,
24.000192655593363
],
"yaxis": "y"
},
{
"hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
Concentration=%{y}",
"legendgroup": "B",
"line": {
"color": "orange",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "B",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.016000000000000004,
0.03200000000000001,
0.048000000000000015,
0.06720000000000002,
0.08640000000000003,
0.10944000000000004,
0.13248000000000004,
0.16012800000000005,
0.19330560000000005,
0.23311872000000006,
0.28089446400000007,
0.3382253568000001,
0.4070224281600001,
0.48957891379200014,
0.5886466965504001,
0.7075280358604801,
0.850185643032576,
1.0213747716390913,
1.2268017259669095
],
"xaxis": "x",
"y": [
50,
48.88,
47.8496,
46.901632,
45.855075328,
44.908988096512,
43.88267266779381,
42.97458877646397,
42.01042162400559,
41.013364801642545,
40.015376329384694,
39.05618837150298,
38.180118331986755,
37.43018954969207,
36.83983243464112,
36.42383074869869,
36.171902913468216,
36.04928662196178,
36.007099952633794,
35.999807344406626
],
"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.016000000000000004,
"x1": 0.016000000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.03200000000000001,
"x1": 0.03200000000000001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.048000000000000015,
"x1": 0.048000000000000015,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.06720000000000002,
"x1": 0.06720000000000002,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.08640000000000003,
"x1": 0.08640000000000003,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.10944000000000004,
"x1": 0.10944000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.13248000000000004,
"x1": 0.13248000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.16012800000000005,
"x1": 0.16012800000000005,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.19330560000000005,
"x1": 0.19330560000000005,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.23311872000000006,
"x1": 0.23311872000000006,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.28089446400000007,
"x1": 0.28089446400000007,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.3382253568000001,
"x1": 0.3382253568000001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.4070224281600001,
"x1": 0.4070224281600001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.48957891379200014,
"x1": 0.48957891379200014,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.5886466965504001,
"x1": 0.5886466965504001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.7075280358604801,
"x1": 0.7075280358604801,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.850185643032576,
"x1": 0.850185643032576,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 1.0213747716390913,
"x1": 1.0213747716390913,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 1.2268017259669095,
"x1": 1.2268017259669095,
"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` . Changes in concentrations with time (time steps shown in dashed lines)"
},
"xaxis": {
"anchor": "y",
"autorange": true,
"domain": [
0,
1
],
"range": [
-0.0008060458120676147,
1.227607771778977
],
"title": {
"text": "SYSTEM TIME"
},
"type": "linear"
},
"yaxis": {
"anchor": "x",
"autorange": true,
"domain": [
0,
1
],
"range": [
7.777777777777778,
52.22222222222222
],
"title": {
"text": "Concentration"
},
"type": "linear"
}
}
},
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dynamics.plot_history(colors=['darkturquoise', 'orange'], show_intervals=True)"
]
},
{
"cell_type": "markdown",
"id": "306e3db7",
"metadata": {},
"source": [
"## Note how the left-hand side of this plot is much smoother than it was in experiment `react_2_a`, where no adaptive time steps were used!"
]
},
{
"cell_type": "markdown",
"id": "6b96283e-20d8-4256-b857-2e328923e942",
"metadata": {},
"source": [
"#### Compare the above with the fixed step sizes of experiment `react_2_a` \n",
"To see the sizes of the steps taken:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "039e5eab-53bf-4bfb-b68b-e83f399490c5",
"metadata": {},
"outputs": [
{
"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.048000000000000015,
0.048000000000000015,
0.08640000000000003,
0.08640000000000003,
0.13248000000000004,
0.13248000000000004,
0.16012800000000005,
0.16012800000000005,
0.19330560000000005,
0.19330560000000005,
0.23311872000000006,
0.23311872000000006,
0.28089446400000007,
0.28089446400000007,
0.3382253568000001,
0.3382253568000001,
0.4070224281600001,
0.4070224281600001,
0.48957891379200014,
0.48957891379200014,
0.5886466965504001,
0.5886466965504001,
0.7075280358604801,
0.7075280358604801,
0.850185643032576,
0.850185643032576,
1.0213747716390913,
1.0213747716390913,
1.2268017259669095
],
"xaxis": "x",
"y": [
0.016000000000000007,
0.016000000000000007,
0.01920000000000001,
0.01920000000000001,
0.023040000000000005,
0.023040000000000005,
0.027648000000000006,
0.027648000000000006,
0.0331776,
0.0331776,
0.03981312000000001,
0.03981312000000001,
0.04777574400000001,
0.04777574400000001,
0.05733089280000003,
0.05733089280000003,
0.06879707136000002,
0.06879707136000002,
0.08255648563200002,
0.08255648563200002,
0.0990677827584,
0.0990677827584,
0.11888133931007994,
0.11888133931007994,
0.14265760717209597,
0.14265760717209597,
0.17118912860651525,
0.17118912860651525,
0.2054269543278182,
0.2054269543278182
],
"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.016000000000000004,
"x1": 0.016000000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.03200000000000001,
"x1": 0.03200000000000001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.048000000000000015,
"x1": 0.048000000000000015,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.06720000000000002,
"x1": 0.06720000000000002,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.08640000000000003,
"x1": 0.08640000000000003,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.10944000000000004,
"x1": 0.10944000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.13248000000000004,
"x1": 0.13248000000000004,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.16012800000000005,
"x1": 0.16012800000000005,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.19330560000000005,
"x1": 0.19330560000000005,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.23311872000000006,
"x1": 0.23311872000000006,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.28089446400000007,
"x1": 0.28089446400000007,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.3382253568000001,
"x1": 0.3382253568000001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.4070224281600001,
"x1": 0.4070224281600001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.48957891379200014,
"x1": 0.48957891379200014,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.5886466965504001,
"x1": 0.5886466965504001,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.7075280358604801,
"x1": 0.7075280358604801,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 0.850185643032576,
"x1": 0.850185643032576,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 1.0213747716390913,
"x1": 1.0213747716390913,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot",
"width": 1
},
"type": "line",
"x0": 1.2268017259669095,
"x1": 1.2268017259669095,
"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": [
-0.0007884329858399161,
1.2275901589527494
],
"title": {
"text": "SYSTEM TIME"
},
"type": "linear"
},
"yaxis": {
"anchor": "x",
"autorange": true,
"domain": [
0,
1
],
"range": [
0.005476280315121219,
0.215950674012697
],
"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": "code",
"execution_count": null,
"id": "7f59733f",
"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
}