{ "cells": [ { "cell_type": "markdown", "id": "f102f8dc", "metadata": {}, "source": [ "## Carry out a few single indivual steps of diffusion, \n", "### and directly verify that the values satisfy the diffusion equation\n", "\n", "In this \"PART 1\", we'll be looking at a tiny system with just 10 bins, to easily inspect the numbers directly.\n", "We'll use concentrations initialized to an upward-shifted sine wave with 1 cycle over the length system\n", "\n", "LAST REVISED: June 4, 2023" ] }, { "cell_type": "code", "execution_count": 1, "id": "b4a4936a", "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": "a945cbfa", "metadata": {}, "outputs": [], "source": [ "from experiments.get_notebook_info import get_notebook_basename\n", "\n", "from src.life_1D.bio_sim_1d import BioSim1D\n", "from src.modules.reactions.reaction_data import ChemData as chem\n", "from src.modules.movies.movies import MovieArray\n", "from src.modules.numerical.numerical import Numerical as num\n", "\n", "import numpy as np\n", "\n", "import plotly.express as px\n", "import plotly.graph_objects as go" ] }, { "cell_type": "code", "execution_count": 3, "id": "6207338f", "metadata": {}, "outputs": [], "source": [ "# We'll be considering just 1 chemical species, \"A\"\n", "diffusion_rate = 10.\n", "\n", "chem_data = chem(diffusion_rates=[diffusion_rate], names=[\"A\"])" ] }, { "cell_type": "code", "execution_count": 4, "id": "087caa8d", "metadata": {}, "outputs": [], "source": [ "# Initialize the system with just a few bins\n", "bio = BioSim1D(n_bins=10, chem_data=chem_data)" ] }, { "cell_type": "code", "execution_count": 5, "id": "3f40acb3", "metadata": {}, "outputs": [], "source": [ "# Initialize the concentrations to a sine wave with 1 cycle over the system\n", "# (with a bias to always keep it > 0)\n", "bio.inject_sine_conc(species_name=\"A\", frequency=1, amplitude=10, bias=50)" ] }, { "cell_type": "code", "execution_count": 6, "id": "919ddc99", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM SNAPSHOT at time 0:\n", " A\n", "0 50.000000\n", "1 55.877853\n", "2 59.510565\n", "3 59.510565\n", "4 55.877853\n", "5 50.000000\n", "6 44.122147\n", "7 40.489435\n", "8 40.489435\n", "9 44.122147\n" ] } ], "source": [ "bio.show_system_snapshot()" ] }, { "cell_type": "code", "execution_count": 7, "id": "43e30fba", "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
Bin number=%{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, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], "xaxis": "x", "y": [ 50, 55.877852522924734, 59.510565162951536, 59.510565162951536, 55.877852522924734, 50, 44.12214747707527, 40.489434837048464, 40.489434837048464, 44.122147477075266 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "title": { "text": "Chemical" }, "tracegroupgap": 0 }, "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": "Initial System State (for the tiny system)" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ 0, 9 ], "title": { "text": "Bin number" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ 39.43270537449829, 60.56729462550171 ], "title": { "text": "concentration" }, "type": "linear" } } }, "image/png": "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a2TUDjSEgE8hDoFml5ELxB/Qvv+jx8O/+rMPVMdu387w7rtu79zSeOSLckAC6wh448slUleB7/3gx+Gaqy8Pe3fvqpboZ6m6dqrZ6+r9Xu81tdnXQ53P3s9Tde6OtUWB9rTMbR94b/jgLe/pfHjAXV1cH3UWcAvDOnfnzGsTdg3Zu+5bxdx6803uMT+ko93yCbT/0fvI9x/rHMS1ms9b5eEEeh9S367ysQ/d4tMzw5HaK4NAv9dTz+zKAK1kUgFvzCblVCyhQLw2P/yJe/z7NKGpUnkEuq/VSy++KDxw76c7IW2eI6pKYHABEzKDm9lj9AK9P/f7eX/0PXDE9QW6r1O3L1zfq65bCLvq2hnrIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFdA2LUukQ0IECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiDsqmtnrIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBdAWHXukQ2IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAsKuunbEuAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBdQWEXesS2YAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCuAsKuunbGuggQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYVEHatS2QDAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBugoIu+raGesiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYV0DYtS6RDQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIOyqa2esiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAYF0BYde6RDYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4Cwq66dsS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF1BYRd6xLZgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4Cwq66dsa6CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1hUQdq1LZAMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6Cgi76toZ6yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhXQNi1LpENCBAgQIAAAQIECBAgkEbgldd+Gz5+51+GT99xW3j3jdenKaoKAQIECBAgQIAAAQIEGi4g7Gr4BeD0CRAgQIAAAQIECNRB4CeHToQPf+KeVUv52IduCZ+647bq99tB0W0feG/44C3vqcOyB16DsGtgMjsQIECAAAECBAgQIEBgXQFh17pENiBAgAABAgQIECBAILdADLvuuvvB8MC9nw57d++qDvfsz54Pd3z2vvAXf/4vig23et2EXbmvJPUJECBAgAABAgQIEGiigLCriV13zgQIECBAgAABAgRqJtAv7Oqd5OoNitr/P4Zh//Vv/0945PuPVWfVPQ3W7zTjse574OHqVoIxYHvhxZerzb7x1Ts7txb89qM/DI89fix88TMfDTu2b6v+vL3f/fd8Mlx4wc7Q3ubg/r3h7r/6T9U2M/v2hPjnX//Wd8LXvvlo9Xu33nxTp057zR/5k/eFr//1d8OR489V2/zbz350RaDX3q795/1qdJ9395/XrLWWQ4AAAQIECBAgQIAAgewCwq7sxA5AgAABAgQIECBAgMB6Av3Crt7fWyvs+vVvXutMhLWnwe6+6/Y1n4nVvmVid0AUg6uH/+YHVVDVHWStF3Z9/t6HOkHV66fmwhe+/FAVurXDq/bv3fSu/VWY1T6H6NE+Vu+a+01/feWBh8PJl35ThWan3nijeu5X93mv5+vPCRAgQIAAAQIECBAgsJUFhF1bubvOjQABAgQIECBAgEAhAms9s6s9KRUDqLXCrjih9e4br6/OtDdc6nf6vRNacZsYOH3u7gfDl+66vbqN4iCTXd2BWL/9un+vHVR1rzkeP4ZZ8Ss+nyxu/9Ofn+w8q6x3fW97684q7OqtUUirLZMAAQIECBAgQIAAAQLJBYRdyUkVJECAAAECBAgQIEBgUIF+k12xRvfEVfz/3SFPvwmoUsOu7kDs/v/wXzq3QOx2vPTii6oJNmHXoFeX7QkQIECAAAECBAgQ2OoCwq6t3mHnR4AAAQIECBAgQKAAgbXCru5A65qrL2tM2BVbFqe8+n31C/kKaLElEiBAgAABAgQIECBAIJuAsCsbrcIECBAgQIAAAQIECGxUYK2wq/t5Vls57Oq9jeFjjx+rns+1Y/u2VYTCro1eVbYjQIAAAQIECBAgQKApAsKupnTaeRIgQIAAAQIECBCoscBaYVcMgX586ES4/55PVqsf1W0Me9fTDpjiGuJa4jPE1ns+VzuoWu+ZXb3Hagd8t/zTP+hMd8XbM8bbG37kT9+/yqHGbbU0AgQIECBAgAABAgQIjERA2DUSZgchQIAAAQIECBAgQOBMAjHw+fAn7lm1ya0339SZcOqdaMr5zK64kBhSff7eh6o1zezbEz7yJ+8LX//r7yYJu44cf65zru1nce3dvavze+1z697uYx+6pQq/THb5u0SAAAECBAgQIECAAIGVAsIuVwQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAsKuYltn4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsIu1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECxAv8fFsigPYoq6kkAAAAASUVORK5CYII=", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.line(data_frame=bio.system_snapshot(), y=[\"A\"], \n", " title= \"Initial System State (for the tiny system)\",\n", " color_discrete_sequence = ['red'],\n", " labels={\"value\":\"concentration\", \"variable\":\"Chemical\", \"index\":\"Bin number\"})\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": 8, "id": "cc542145", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "coloraxis": "coloraxis", "hovertemplate": "Bin number: %{x}
Chem. species: %{y}
Concentration: %{z}", "name": "0", "type": "heatmap", "x": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], "xaxis": "x", "xgap": 1, "y": [ "A" ], "yaxis": "y", "ygap": 1, "z": [ [ 50, 55.877852522924734, 59.510565162951536, 59.510565162951536, 55.877852522924734, 50, 44.12214747707527, 40.489434837048464, 40.489434837048464, 44.122147477075266 ] ] } ], "layout": { "autosize": true, "coloraxis": { "colorbar": { "title": { "text": "Concentration" } }, "colorscale": [ [ 0, "rgb(254, 254, 253)" ], [ 0.09090909090909091, "rgb(224, 224, 223)" ], [ 0.18181818181818182, "rgb(197, 197, 195)" ], [ 0.2727272727272727, "rgb(171, 171, 170)" ], [ 0.36363636363636365, "rgb(146, 146, 145)" ], [ 0.45454545454545453, "rgb(124, 123, 122)" ], [ 0.5454545454545454, "rgb(102, 101, 101)" ], [ 0.6363636363636364, "rgb(81, 80, 80)" ], [ 0.7272727272727273, "rgb(59, 59, 59)" ], [ 0.8181818181818182, "rgb(38, 38, 38)" ], [ 0.9090909090909091, "rgb(16, 16, 16)" ], [ 1, "rgb(0, 0, 0)" ] ] }, "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": "Initial System State (for the tiny system)" }, "xaxis": { "anchor": "y", "autorange": true, "constrain": "domain", "domain": [ 0, 1 ], "range": [ -0.5, 9.5 ], "scaleanchor": "y", "title": { "text": "Bin number" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "constrain": "domain", "domain": [ 0, 1 ], "range": [ 0.5, -0.5 ], "title": { "text": "Chem. species" }, "type": "category" } } }, "image/png": "iVBORw0KGgoAAAANSUhEUgAABrsAAAFoCAYAAADn+EAcAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Q+4ZWV9H/p3EotMkwkCXsAxFgW9F4xYKkVJokgkaZLxElOMI4a2krFkCsk1/OlQBmsJMTITJoA3NtAJcTR/JWNDkhLQ1JIg+TdKyEPFIOYGIqEFJBFCsILYOPdZW/dmz569z9nn7PXu/b7r9znPk2dyzlnrt97f5/eeAc7XtdaavXv37k0+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQosEbYVeHULJkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAnIOyyEQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoVEHZVOzoLJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQEHbZAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtUKCLuqHZ2FEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQICLvsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWoFhF3Vjs7CCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEhF32AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLUCwq5qR2fhBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECwi57gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFoBYVe1o7NwAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABYZc9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK2AsKva0Vk4AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAsMseIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqFZA2FXt6CycAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA2GUPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVCsg7Kp2dBZOgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg7LIHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqhUQdlU7OgsnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQdtkDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC1QoIu6odnYUTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIu+wBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBagWEXdWOzsIJECBAgAABAgQIECBAgAABAgQIECBAgAABAgSEXfYAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAtQLCrmpHZ+EECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLCLnuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgWgFhV7Wjs3ACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAFhlz1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQrYCwq9rRWTgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgICwyx4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoVkDYVe3oLJwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDYZQ8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUKyDsqnZ0Fk6AAAECBAgQIECAAAECBAgQIECAAAECBAgQICDssgcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqFRB2VTs6CydAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBB22QMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLVCgi7qh1d+wu/9/4H0+aLrkznvvUN6fQNJ7d/ARWrFHjyqafTpTt2pZtu2ZM+8J6L04nHHzPo44abb0vvvGJX7/Pjjj0qXbv9/HTwQesW0udVO3enT9x5z0LXsJDGA190qb0ZmEXrBAgQIECAAAECBAgQIECAAAECBMIJCLsyjnw4COhfZjQsmOby/TrD5076xf5jjz+Rzrn46vSP1h+WLtuyKa098IBpLtE7ZqVh1/AvmocvkjP0WOkap26+xQNvv/OedNZ52/er+K6LNu0TIrbRS7M3rvmF30o7r7gwHX3k+ha7eKbUpGvM49qjDS1lNs+wK8fPX5bhZSza/7vmlccfky7YvDHjlZYv3czj5t/9eNafg+VX4QgCBAgQIECAAAECBAgQIECAAAECBBYlIOzKLD9L+NRfWolhVz90eMXLXrJPqNbv928efTzLL57bCIhyjrz5pfv7PnjzxDug3vaWDYNgoI1ecgdOk9bYDzqPOOyQuQYdwq6cu3dltUsKu0pay8oU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CBAgQIAAgWoFhF3Vjs7CCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEhF32AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLUCwq5qR2fhBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECwi57gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFoBYVe1o7NwAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABYZc9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK2AsKva0Vk4AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAsMseIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqFZA2FXt6CycAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA2GUPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVCsg7Kp2dBZOgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg7LIHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqhUQdlU7OgsnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQdtkDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC1QoIu6odnYUTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIu+wBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBagWEXdWOzsIJECBAgAABAgQIECBAgAABAgQIECBAgAABAgSEXfYAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAtQLCrmpHZ+EECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLCLnuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgWgFhV7Wjs3ACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAFhlz1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQrYCwq9rRWTgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgICwyx4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoVkDYVe3oLJwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDYZQ8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUKyDsqnZ0Fk6AAAECBAgQIECAAAECBAgQIECAAAECBAgQICDs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aP4Xf+/74M37rOl5hx/qcYZFTcliCBBoBIRd9gEBAqUJ9AOuuz59X29p77pok/d1lTYk6yEQWGD4v/X8N17gjaB1AgTCCQi7wo1cwwQIECBAgAABAgQIECBAgAABAgQIECBAgACB7ggIu7ozS50QIECAAAECBAgQIECAAAECBAgQIECAAAECBMIJCLvCjVzDBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHuCAi7ujNLnRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEwgkIu8KNXMMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAge4ICLu6M0udECBAgAABAgQIECBAgAABAgQIECBAgAABAgTCCQi7wo1cwwQIECBAgAABAgQIECBAgAABAgQIECBAgACB7ggIu7ozS50QIECAAAECBAgQIECAAAECBAgQIECAAAECBMIJCLvCjVzDBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHuCAi7ujNLnRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEwgkIu8KNXMMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAge4ICLu6M0udECBAgAABAgQIECBAgAABAgQIECBAgAABAgTCCQi7wo1cwwQIECBAgAABAgQIECBAgAABAgQIECBAgACB7ggIu7ozS50QIECAAAECBAgQIECAAAECBAgQIECAAAECBMIJCLvCjVzDBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHuCAi7ujNLnRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEwgkIu8KNXMMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAge4ICLu6M0udECBAgAABAgQIECAwo8Bjjz+Rzrn46nTh5o3pxOOPmbGa0wkQIECAAAECBAgQIEBgHgLCrnkouwYBAgQIECBAgACBygVuv/OedNZ52/fr4m1v2ZAu2Lyx9/V+ULTxtFPS6RtOrrJjYVeVY7NoAgQIECBAgAABAgSCCwi7gm8A7RMgQIAAAQIECBCYRqAJu7Zuuy7tvOLCdPSR63un3Hv/g2nzRVemc9/6hmrDrdHehV3T7AbHECBAgAABAgQIECBAoCwBYVdZ87AaAgQIECBAgAABAkUKjAu7Ru/kGg2K+p83Ydhvf/SP00237On1Nnw32Lhmm2tduXN371GCTcD20Oc+3zvsA++5ePBowRtuvi3tuePudNmWTWntgQf0vt8/79rt56eDD1qX+se8/KVHp23v/ZXeMccde1Rqvv/+6z+c3vfBm3tfe/2pJw3q9Nf8Q2/+nvT+X/tIuuvT9/WOeddFm/YJ9PrH9b8/rsZw38PfL3LAFkWAAAECBAgQIECAAIGKBYRdFQ/P0gkQIECAAAECBAjMS2Bc2DX6tUlh1988+vjgjrD+3WDbtp498Z1Y/UcmDgdETXC1+8Zbe0HVcJC1XNj1zit2DYKqJ596Ol26Y1cvdOuHV/2vnXTCS3thVr+HxrV/rdE1j7v766qdu9PDjzzaC82e+tKXeu/9Gu57XnNyHQIECBAgQIAAAQIECEQUEHZFnLqeCRAgQIAAAQIECKxQYNI7u/p3SjUB1KSwq7lD68Tjj+ldcTRcGreM0Tu0mmOawOkd265L7956du8xiiu5s2s4EBt33vDX+kHV8Jqb6zdhVvPRvJ+sOf6zDzw8eFfZ6PoOec66Xtg1WmOF5A4nQIAAAQIECBAgQIAAgSkFhF1TQjmMAAECBAgQIECAQGSBcXd2NR7Dd1w1nw+HPOPugKo17BoOxK79hd8cPAJxeE887/BDe3ewCbsi/6TonQABAgQIECBAgACBRQgIuxah7poECBAgQIAAAQIEKhOYFHYNB1ovftHzw4Rdzfiau7zGfYwL+Sobt+USIECAAAECBAgQIECgKgFhV1XjslgCBAgQIECAAAECixGYFHYNv8+qy2HX6GMM99xxd+/9XGsPPGC/gQi7FrNHXZUAAQIECBAgQIAAgbgCwq64s9c5AQIECBAgQIAAgakFJoVdTQj0iTvvSdduP79Xa16PMRxdTz9gatbQrKV5h9hy7+fqB1XLvbNr9Fr9gG/D6141uLureTxj83jDHzrje/dzmBrZgQQIECBAgAABAgQIECCwKgFh16rYnESAAAECBAgQIEAglkAT+Jx13vb9mn79qScN7nAavaMp5zu7moU0IdU7r9jVW9Nxxx6VfujN35Pe/2sfaSXsuuvT9w167b+L6+gj1w++1u9t+Li3vWVDL/xyZ1esnw3dEiBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKrFBB2rRLOaQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAosXEHYtfgZWQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsEoBYdcq4ZxGgAABAgQIECBAgAABAgQIECBAgAABAgQIECCweAFh1+JnYAUECPz/7dkxDQAAAMIw/67xsIenAkhIOSFAgAABAgQIECBAgAABAgQIECBAgAABAgSigLMrwokRIECAAAECBAgQIECAAAECBAgQIECAAAECBAj8BZxd/w00IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQiALOrggnRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8Bdwdv030IAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAKOLsinBgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBfwNn130ADAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBKODsinBiBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfwFn138DDQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKKAsyvCiREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPwFnF3/DTQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCIAs6uCCdGgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwF3B2/TfQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIAo4uyKcGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwF/A2fXfQAMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEoMCuYIqelCWG0AAAAAElFTkSuQmCC", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Show as heatmap\n", "fig = px.imshow(bio.system_snapshot().T, \n", " title= \"Initial System State (for the tiny system)\", \n", " labels=dict(x=\"Bin number\", y=\"Chem. species\", color=\"Concentration\"),\n", " text_auto=False, color_continuous_scale=\"gray_r\") \n", "\n", "fig.data[0].xgap=1\n", "fig.data[0].ygap=1\n", "\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "259c41dd", "metadata": {}, "source": [ "### Now do 4 rounds of single-step diffusion, to collect the system state at a total of 5 time points: \n", "#### t0 (the initial state), plus t1, t2, t3 and t4" ] }, { "cell_type": "code", "execution_count": 9, "id": "5051007a", "metadata": {}, "outputs": [], "source": [ "# All the system states will get collected in this object\n", "history = MovieArray()" ] }, { "cell_type": "code", "execution_count": 10, "id": "8ec78ba5", "metadata": {}, "outputs": [], "source": [ "# Store the initial state\n", "arr = bio.lookup_species(species_index=0, copy=True)\n", "history.store(par=bio.system_time, data_snapshot=arr, caption=f\"State at time {bio.system_time}\")" ] }, { "cell_type": "code", "execution_count": 11, "id": "7ed98602", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[50. , 55.87785252, 59.51056516, 59.51056516, 55.87785252,\n", " 50. , 44.12214748, 40.48943484, 40.48943484, 44.12214748]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Take a look at what got stored so far (a matrix whose only row is the initial state)\n", "history.get_array()" ] }, { "cell_type": "code", "execution_count": 12, "id": "5b702362", "metadata": {}, "outputs": [], "source": [ "# Additional parameters of the simulation run (the diffusion rate got set earlier)\n", "delta_t = 0.01\n", "delta_x = 2 # Note that the number of bins also define the fraction of the sine wave cycle in each bin\n", "algorithm = None # \"Explicit, with 3+1 stencil\"" ] }, { "cell_type": "code", "execution_count": 13, "id": "b02af31b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM STATE at Time t = 0.01:\n", "[[50.14694631 55.82172403 59.41974735 59.41974735 55.82172403 50.\n", " 44.17827597 40.58025265 40.58025265 44.03132966]]\n", "SYSTEM STATE at Time t = 0.02:\n", "[[50.28881576 55.76980517 59.32979676 59.32979676 55.76613151 50.\n", " 44.23386849 40.67020324 40.66652958 43.94505274]]\n", "SYSTEM STATE at Time t = 0.03:\n", "[[50.42584049 55.72178022 59.24079697 59.24070513 55.71106985 50.\n", " 44.28893015 40.75920303 40.7485845 43.86308966]]\n", "SYSTEM STATE at Time t = 0.04:\n", "[[50.55823898 55.67735715 59.15281926 59.15246655 55.65653399 50.\n", " 44.34346372 40.84718074 40.82671259 43.78522703]]\n" ] } ], "source": [ "# Do the 4 rounds of single-step diffusion; show the system state after each step, and accumulate all data\n", "# in the history object\n", "for _ in range(4):\n", " bio.diffuse(time_step=delta_t, n_steps=1, delta_x=delta_x , algorithm=algorithm)\n", " bio.describe_state(concise=True)\n", "\n", " arr = bio.lookup_species(species_index=0, copy=True)\n", " history.store(par=bio.system_time, data_snapshot=arr, caption=f\"State at time {bio.system_time}\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "8a14efb3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[50. , 55.87785252, 59.51056516, 59.51056516, 55.87785252,\n", " 50. , 44.12214748, 40.48943484, 40.48943484, 44.12214748],\n", " [50.14694631, 55.82172403, 59.41974735, 59.41974735, 55.82172403,\n", " 50. , 44.17827597, 40.58025265, 40.58025265, 44.03132966],\n", " [50.28881576, 55.76980517, 59.32979676, 59.32979676, 55.76613151,\n", " 50. , 44.23386849, 40.67020324, 40.66652958, 43.94505274],\n", " [50.42584049, 55.72178022, 59.24079697, 59.24070513, 55.71106985,\n", " 50. , 44.28893015, 40.75920303, 40.7485845 , 43.86308966],\n", " [50.55823898, 55.67735715, 59.15281926, 59.15246655, 55.65653399,\n", " 50. , 44.34346372, 40.84718074, 40.82671259, 43.78522703]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now, let's examine the data collected at the 5 time points\n", "all_history = history.get_array()\n", "all_history" ] }, { "cell_type": "markdown", "id": "cc72bb99", "metadata": {}, "source": [ "#### Each row in the above matrix is a state snapshot at a different time:\n", "first row is the initial state at time 0; the successive rows are at t1, t2, t3, t4" ] }, { "cell_type": "code", "execution_count": 15, "id": "8e767eb3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([50.28881576, 55.76980517, 59.32979676, 59.32979676, 55.76613151,\n", " 50. , 44.23386849, 40.67020324, 40.66652958, 43.94505274])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's consider the state, i.e. the concentration across the bins, at the midpoint in time (t2)\n", "f_at_t2 = all_history[2]\n", "f_at_t2" ] }, { "cell_type": "markdown", "id": "06ceebe4", "metadata": {}, "source": [ "If one compares the above state (at t2) with the initial state (the top row in the matrix), \n", "one can see, for example, that the leftmost bin's concentration is increasing (\"pulled up\" by its neighbor to the right):\n", "50. has now become 50.28881576\n", "\n", "The rightmost bin's concentration is decreasing (\"pulled down\" by its neighbor to the left):\n", "44.12214748 has now become 43.94505274" ] }, { "cell_type": "markdown", "id": "3a88a1ca", "metadata": {}, "source": [ "## The diffusion equation states that the partial derivative of the concentration values with respect to time must equal the (diffusion rate) times (the 2nd partial derivative with respect to space).\n", "Let's see if that is the case for the values at time t2! We are picking t2 because we need at least a value at the earlier time, and a value at the later time" ] }, { "cell_type": "markdown", "id": "09a0d7f8", "metadata": {}, "source": [ "## A. The 2nd partial derivative with respect to space" ] }, { "cell_type": "code", "execution_count": 16, "id": "1d06fc6a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2.74049471, 2.26024525, 0.8899979 , -0.89091631, -2.33244919,\n", " -2.88306575, -2.33244919, -0.89183473, 0.81871237, 1.63926158])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A simple-minded way of computing the 2nd spacial derivative is to use the Numpy gradient function TWICE across the x value\n", "# (that function approximates the derivative using differences)\n", "gradient_x_at_t2 = np.gradient(f_at_t2, delta_x) # Start with taking the first derivative\n", "gradient_x_at_t2 # This will be the partial derivative of the concentration with respect to x, at time t2" ] }, { "cell_type": "markdown", "id": "b7ebf78e", "metadata": {}, "source": [ "For example, the 2nd entry in the above array of estimated derivatives, can be manually checked from the 1st and 3rd value in the function f_at_t2(x), as follows:" ] }, { "cell_type": "code", "execution_count": 17, "id": "cde2fff9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.2602452500000005" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(59.32979676 - 50.28881576) / (2*delta_x) # This way of numerically estimating derivatives is called \"Central Differences\"" ] }, { "cell_type": "markdown", "id": "5b79c68f", "metadata": {}, "source": [ "#### Now take the derivative again, with the Numpy gradient function, to arrive at a coarse estimate of the 2nd derivative with respect to x:" ] }, { "cell_type": "code", "execution_count": 18, "id": "980650d1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.24012473, -0.4626242 , -0.78779039, -0.80561177, -0.49803736,\n", " 0. , 0.49780776, 0.78779039, 0.63277408, 0.4102746 ])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "second_gradient_x_at_t2 = np.gradient(gradient_x_at_t2, delta_x)\n", "second_gradient_x_at_t2" ] }, { "cell_type": "markdown", "id": "be13f82c", "metadata": {}, "source": [ "Note how the 2nd derivative is 0 at bin 5 (bins are numbered 0 thru 9): if you look at the earlier sine plot, x5 is the inflection point." ] }, { "cell_type": "markdown", "id": "58d3cd8e", "metadata": {}, "source": [ "### B. The partial derivative with respect to time\n", "Now, let's look at how concentrations change with time. Let's first revisit the full history:" ] }, { "cell_type": "code", "execution_count": 19, "id": "86a5c102", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[50. , 55.87785252, 59.51056516, 59.51056516, 55.87785252,\n", " 50. , 44.12214748, 40.48943484, 40.48943484, 44.12214748],\n", " [50.14694631, 55.82172403, 59.41974735, 59.41974735, 55.82172403,\n", " 50. , 44.17827597, 40.58025265, 40.58025265, 44.03132966],\n", " [50.28881576, 55.76980517, 59.32979676, 59.32979676, 55.76613151,\n", " 50. , 44.23386849, 40.67020324, 40.66652958, 43.94505274],\n", " [50.42584049, 55.72178022, 59.24079697, 59.24070513, 55.71106985,\n", " 50. , 44.28893015, 40.75920303, 40.7485845 , 43.86308966],\n", " [50.55823898, 55.67735715, 59.15281926, 59.15246655, 55.65653399,\n", " 50. , 44.34346372, 40.84718074, 40.82671259, 43.78522703]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_history" ] }, { "cell_type": "markdown", "id": "cace8215", "metadata": {}, "source": [ "#### For simplicity, let's start by just inspecting how the values change over time at the *3rd bin* from the left, \n", "i.e. the 3rd *column* (index 2 because counting starts at 0) of the above matrix:" ] }, { "cell_type": "code", "execution_count": 20, "id": "f1dc7ce4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([59.51056516, 59.41974735, 59.32979676, 59.24079697, 59.15281926])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f_of_t_at_x2 = all_history[ : , 2] # The column with index 2\n", "f_of_t_at_x2" ] }, { "cell_type": "markdown", "id": "2f372d89", "metadata": {}, "source": [ "### The above a function of time \n", "(we took an entry from each row - the rows being the system states at t0, t1, t2, t3, t4); let's look at its time derivative:" ] }, { "cell_type": "code", "execution_count": 21, "id": "21654172", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-9.0817816 , -9.03841995, -8.94751865, -8.84887524, -8.79777149])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gradient_t_at_x2 = np.gradient(f_of_t_at_x2, delta_t)\n", "gradient_t_at_x2" ] }, { "cell_type": "markdown", "id": "8fe73fb8", "metadata": {}, "source": [ "### The above is the rate of change of the concentration, as the diffusion proceeds, at the position x2\n", "At time t2, the midpoint in the simulation, the value is:" ] }, { "cell_type": "code", "execution_count": 22, "id": "270aaafa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-8.947518648702157" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gradient_t_at_x2[2]" ] }, { "cell_type": "markdown", "id": "3cf59301", "metadata": {}, "source": [ "### C. All said and done, we have collected the time derivative and the 2nd spacial derivative, at the point (x2, t2).\n", "Do those values satisfy the diffusion equation?? Does the time derivative indeed equal the (diffusion rate) x (the \n", "2nd spacial derivative)? Let's see:" ] }, { "cell_type": "code", "execution_count": 23, "id": "9b64a095", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-8.947518648702157" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gradient_t_at_x2[2]" ] }, { "cell_type": "code", "execution_count": 24, "id": "e19fc288", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-7.877903914825475" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diffusion_rate * second_gradient_x_at_t2[2]" ] }, { "cell_type": "markdown", "id": "24121c37", "metadata": {}, "source": [ "## D. The 2 value indeed roughly match - considering the coarseness of the large spacial grid, and the coarseness of estimating the derivatives numerically. \n", "We have evidence that the diffusion equation may indeed be satisfied by the values we obtained from our diffusion algorithm, in the proximity of the point (x2, t2)" ] }, { "cell_type": "markdown", "id": "86a00a96", "metadata": {}, "source": [ "### E. Finally, instead of just scrutining the match at the point x2, let's do that for all the points in space at time t2,\n", "WITH THE EXCEPTION of the outmost points (because the numeric estimation of the derivatives gets very crummy at the boundary).\n", " \n", "Let's first re-visit all the data once again:" ] }, { "cell_type": "code", "execution_count": 25, "id": "28225e05", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[50. , 55.87785252, 59.51056516, 59.51056516, 55.87785252,\n", " 50. , 44.12214748, 40.48943484, 40.48943484, 44.12214748],\n", " [50.14694631, 55.82172403, 59.41974735, 59.41974735, 55.82172403,\n", " 50. , 44.17827597, 40.58025265, 40.58025265, 44.03132966],\n", " [50.28881576, 55.76980517, 59.32979676, 59.32979676, 55.76613151,\n", " 50. , 44.23386849, 40.67020324, 40.66652958, 43.94505274],\n", " [50.42584049, 55.72178022, 59.24079697, 59.24070513, 55.71106985,\n", " 50. , 44.28893015, 40.75920303, 40.7485845 , 43.86308966],\n", " [50.55823898, 55.67735715, 59.15281926, 59.15246655, 55.65653399,\n", " 50. , 44.34346372, 40.84718074, 40.82671259, 43.78522703]])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_history" ] }, { "cell_type": "code", "execution_count": 26, "id": "380f8bf6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[14.69463131, -5.61284971, -9.0817816 , -9.0817816 , -5.61284971,\n", " 0. , 5.61284971, 9.0817816 , 9.0817816 , -9.0817816 ],\n", " [14.44078779, -5.40236784, -9.03841995, -9.03841995, -5.58605073,\n", " 0. , 5.58605073, 9.03841995, 8.85473706, -8.85473706],\n", " [13.9447089 , -4.99719025, -8.94751865, -8.95211072, -5.5327087 ,\n", " 0. , 5.5327087 , 8.94751865, 8.41659228, -8.41200021],\n", " [13.47116142, -4.62240099, -8.84887524, -8.86651087, -5.47987603,\n", " 0. , 5.47976123, 8.84887524, 8.00915063, -7.99128539],\n", " [13.23984932, -4.44230744, -8.79777149, -8.8238586 , -5.45358643,\n", " 0. , 5.45335682, 8.79777149, 7.81280921, -7.7862629 ]])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The following is just an expanded version of what we did before for the time derivative; \n", "# instead of just considering 1 column,\n", "# like we did before, we're now repeating the computations along all columns\n", "# (the computations are applied vertically, \"along axis 0\" in Numpy-speak)\n", "gradient_t = np.apply_along_axis(np.gradient, 0, all_history, delta_t)\n", "gradient_t" ] }, { "cell_type": "code", "execution_count": 27, "id": "3278805e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([13.9447089 , -4.99719025, -8.94751865, -8.95211072, -5.5327087 ,\n", " 0. , 5.5327087 , 8.94751865, 8.41659228, -8.41200021])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Again, we focus on time t2 (the 3rd row), to stay away from the edges\n", "gradient_t_at_t2 = gradient_t[2]\n", "gradient_t_at_t2" ] }, { "cell_type": "markdown", "id": "d03cb73c", "metadata": {}, "source": [ "Note the value -8.94751865, 3rd from left : that's the single value we looked at before (at point x2)" ] }, { "cell_type": "markdown", "id": "9bba1933", "metadata": {}, "source": [ "#### Time to again check the match of the two sides of the diffusion equation" ] }, { "cell_type": "code", "execution_count": 28, "id": "d1bde2cd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([13.9447089 , -4.99719025, -8.94751865, -8.95211072, -5.5327087 ,\n", " 0. , 5.5327087 , 8.94751865, 8.41659228, -8.41200021])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lhs = gradient_t_at_t2 # The LEFT-hand side of the diffusion equation, as a vector for all the spacial points at time t2\n", "lhs" ] }, { "cell_type": "code", "execution_count": 29, "id": "1daa4abd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-2.40124727, -4.62624201, -7.87790391, -8.05611773, -4.9803736 ,\n", " 0. , 4.97807756, 7.87790391, 6.32774077, 4.10274602])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rhs = diffusion_rate * second_gradient_x_at_t2 # The RIGHT-hand side of the diffusion equation, again as a vector\n", "rhs" ] }, { "cell_type": "markdown", "id": "b0df453b", "metadata": {}, "source": [ "## The left-hand side and the right-hand side of the diffusion equation appear to generally agree, except at the boundary points, where our approximations are just too crummy" ] }, { "cell_type": "code", "execution_count": 30, "id": "aa858793", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 16.34595617, -0.37094824, -1.06961473, -0.89599299,\n", " -0.5523351 , 0. , 0.55463113, 1.06961473,\n", " 2.08885151, -12.51474623])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lhs - rhs" ] }, { "cell_type": "code", "execution_count": 31, "id": "0649f714", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.8643581811669576" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Here we use a handy function to compare two equal-sized vectors,\n", "# while opting to disregarding a specified number of entries at each edge.\n", "# It returns the Euclidean distance (\"L2 norm\") of the shortened vectors\n", "num.compare_vectors(lhs, rhs, trim_edges=1)" ] }, { "cell_type": "markdown", "id": "3878d34e", "metadata": {}, "source": [ "#### IMPORTANT: all values in this experiment are VERY coarse, because of the large effective delta_x (the tiny number of bins.)\n", "In part2 (notebook \"validate_diffusion_2\"), much-better approximations will get looked at!" ] }, { "cell_type": "code", "execution_count": null, "id": "3926f0e9", "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 }