diff --git a/README.md b/README.md index a22838d..31483ba 100755 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ The mentioned repositores are embedded (and then partially modified) as [git sub 4. [SciPy - Library of scientific algorithms for Python](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/1-scientific-programming/Lecture-3-Scipy.ipynb) 5. [matplotlib - 2D and 3D plotting in Python](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/1-scientific-programming/Lecture-4-Matplotlib.ipynb) 6. [Sympy - Symbolic algebra in Python](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/1-scientific-programming/Lecture-5-Sympy.ipynb) + * Extra: [SymPy example - mass transfer in a cellular construct](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/extras/SymPy-Mass-Transfer-Cellular-Construct.ipynb) 7. [Tools for high-performance computing (HPC) applications](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/1-scientific-programming/Lecture-6B-HPC.ipynb) 8. [Revision control software](https://nbviewer.jupyter.org/github/TuxRiders/numerical-computing-intro/blob/main/1-scientific-programming/Lecture-7-Revision-Control-Software.ipynb) diff --git a/extras/SymPy-Mass-Transfer-Cellular-Construct.ipynb b/extras/SymPy-Mass-Transfer-Cellular-Construct.ipynb new file mode 100755 index 0000000..7df2d9b --- /dev/null +++ b/extras/SymPy-Mass-Transfer-Cellular-Construct.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SymPy example - mass transfer in a cellular construct\n", + "\n", + "![Schematic](img/construct.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The problem is to solve the following equation\n", + "\n", + "\\begin{equation}\n", + "\\frac{\\partial \\mathrm{c}}{\\partial \\mathrm{t}}=\\mathrm{D} \\frac{\\partial^{2} \\mathrm{c}}{\\partial \\mathrm{x}^{2}}-\\mathrm{V}_{\\mathrm{max}, \\mathrm{cell}} \\rho_{\\mathrm{cell}}\n", + "\\end{equation}\n", + "\n", + "For a steady state solution, we can neglect the left hand side term, so the equation will be\n", + "\n", + "\\begin{equation}\n", + "\\mathrm{D} \\frac{\\partial^{2} \\mathrm{c}}{\\partial \\mathrm{x}^{2}}-\\mathrm{V}_{\\mathrm{max}, \\mathrm{cell}} \\rho_{\\mathrm{cell}} = 0\n", + "\\end{equation}\n", + "\n", + "We want to know the maximum depth of oxygen penetration. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is a 1-D problem, so let's say $c = c(x)$ and rewrite the equation as\n", + "\n", + "\\begin{equation}\n", + "D \\frac{d^{2} c}{d x^{2}} = V_m \\rho \\rightarrow \\frac{d^{2} c}{d x^{2}} = \\frac{V_m \\rho}{D}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Integrating both sides of the equation yields:\n", + "\n", + "\\begin{equation}\n", + "\\int \\frac{d^{2} c}{d x^{2}} d x=\\int \\frac{V_m \\rho}{D} d x\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "\\rightarrow \\frac{d c}{d x} = \\frac{V_m \\rho}{D} x + C_1\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can simply use the second boundary condition to get the value of $C_1$. We know $\\frac{d c}{d x} = 0$ at $x = d$, so:\n", + "\n", + "\\begin{equation}\n", + "0 = \\frac{V_m \\rho}{D} d + C_1 \\rightarrow C_1 = - \\frac{V_m \\rho d}{D}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We still have a derivative term in the equation, so we integrate it again to eliminate that term:\n", + "\n", + "\\begin{equation}\n", + "\\int \\frac{d c}{d x} d x = \\int \\left(\\frac{V_m \\rho}{D} x + C_1 \\right) d x\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "\\rightarrow c(x) = \\frac{V_m \\rho}{D} \\frac{x^2}{2} + C_1 x + C_2\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We already know the value of $C_1$, and by using the first boundary condition, we can obtain the value of $C_2$ as well. According to the first boundary condition, $c(x) = c_0$ at $x = 0$, so:\n", + "\n", + "\\begin{equation}\n", + "C_2 = c_0\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, by knowing the value of $C_1$ and $C_2$ and having no remained derivitive in the equation, we can write the equation of the change of concentration of oxygen throughout the construct:\n", + "\n", + "\\begin{equation}\n", + "c(x) = \\frac{V_m \\rho}{D} \\frac{x^2}{2} - \\frac{V_m \\rho d}{D} x + c_0 \\rightarrow c(x) = \\frac{V_m \\rho}{D} \\left( \\frac{x^2}{2} - x d \\right) + c_0\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's the time to calculate the maximum depth of diffusion. It can be simply calculated by finding the value of $x$ at which the concentration of oxygen is zero. Let's denote it by $d_{max}$ (we can say the value of $d$ equals $d_{max}$ as well), and solve the derived equation:\n", + "\n", + "\\begin{equation}\n", + "x = d_{max}, c(x) = 0 \\rightarrow 0 = \\frac{V_m \\rho}{D} \\left( \\frac{{d_{max}}^2}{2} - {d_{max}}^2 \\right) + c_0\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "\\rightarrow d_{\\max }=\\sqrt{2 c_{0} \\frac{D}{V_m \\rho}}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve with Sympy" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "from sympy import init_session\n", + "init_session(quiet=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle D \\frac{d^{2}}{d x^{2}} c{\\left(x \\right)} - V_{m} \\rho = 0$" + ], + "text/plain": [ + " 2 \n", + " d \n", + "D⋅───(c(x)) - Vₘ⋅ρ = 0\n", + " 2 \n", + " dx " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, D, V, rho = symbols(\"x, D, V_m, rho\", positive=True)\n", + "c = Function(\"c\") \n", + "ode = D * c(x).diff(x, 2) - V * rho\n", + "Eq(ode, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle c{\\left(x \\right)} = C_{1} + C_{2} x + \\frac{V_{m} \\rho x^{2}}{2 D}$" + ], + "text/plain": [ + " 2\n", + " Vₘ⋅ρ⋅x \n", + "c(x) = C₁ + C₂⋅x + ───────\n", + " 2⋅D " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ode_sol = dsolve(ode)\n", + "ode_sol" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[ - C_{1} + c_{0} = 0, \\ - C_{2} - \\frac{V_{m} d \\rho}{D} = 0\\right]$" + ], + "text/plain": [ + "⎡ Vₘ⋅d⋅ρ ⎤\n", + "⎢-C₁ + c₀ = 0, -C₂ - ────── = 0⎥\n", + "⎣ D ⎦" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c0, d = symbols(\"c_0, d\", positive=True)\n", + "ics = {c(0): c0, c(x).diff(x).subs(x, d): 0}\n", + "parameters = ode_sol.free_symbols - set([D, V, rho, x])\n", + "eq1 = (ode_sol.lhs - ode_sol.rhs).subs(x, 0).subs(ics)\n", + "eq2 = (ode_sol.lhs - ode_sol.rhs).diff(x).subs(x, d).subs(ics)\n", + "eqs = [eq1, eq2]\n", + "[Eq(eq1, 0), Eq(eq2, 0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ C_{1} : c_{0}, \\ C_{2} : - \\frac{V_{m} d \\rho}{D}\\right\\}$" + ], + "text/plain": [ + "⎧ -Vₘ⋅d⋅ρ ⎫\n", + "⎨C₁: c₀, C₂: ────────⎬\n", + "⎩ D ⎭" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sol_params = solve(eqs, parameters)\n", + "sol_params" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle c{\\left(x \\right)} = c_{0} - \\frac{V_{m} d \\rho x}{D} + \\frac{V_{m} \\rho x^{2}}{2 D}$" + ], + "text/plain": [ + " 2\n", + " Vₘ⋅d⋅ρ⋅x Vₘ⋅ρ⋅x \n", + "c(x) = c₀ - ──────── + ───────\n", + " D 2⋅D " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cx_sol = ode_sol.subs(sol_params)\n", + "cx_sol" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle 0 = c_{0} - \\frac{V_{m} d_{max}^{2} \\rho}{2 D}$" + ], + "text/plain": [ + " 2 \n", + " Vₘ⋅dₘₐₓ ⋅ρ\n", + "0 = c₀ - ──────────\n", + " 2⋅D " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d_max = symbols(\"d_max\", positive=True)\n", + "d_eq = cx_sol.subs(c(x), 0).subs(x, d_max).subs(d, d_max)\n", + "d_eq" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAK4AAAA3CAYAAACVZXFlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAMQElEQVR4Ae2c25UUNxCGhz0bAIYM7AwwGwGQAZgIgAzg+AneOHYGmAi4ZIAdgcEZ2Bl42Qzw/2lVWkmt7lFfdz0rndOjW6lKKv1dKmk0c+Pbt2+7FrbRwKtXr+5I0pdaaaK/UUtbohsrr8TDyub2xfgsFR8vxajxqdLAL6L6USD4q4p6PtHW8ub3uJLDUSVdI5upAW/9dluBdmt5M9UzunkD7miVTW7ws1piAbcKW8vbalxOTnMVNlC3rN/3EvO94t9NnC974fN3FZ/qeaHy2W5ESV4k97nSD/Tc92X06cynbyq+pecfPfSFeJEgXqP8+31CG3D3aWiZegBqIN15YP2i+JGxVxpr/EXxAz0B4FY/Mk7kxW3F+1flf1XMrvwv5MX1pFX2VNHfih/p+ZjXT8wv6m83V2HiLNQ208Rjxe4qjsHIJD6JeagesGH5PsTlY9M98hI2osH6Ed6dR+mn6n9TCc/btGZazuQpnr2aWA8acE0T68WA9HXGnmX6qyYSUMcBcN9UOa7F1FCSl/OK3YS8zvK8QPQF6zs3LO5vN+DOnZKB9h6Y9xXnyy0A/UflWNhSyAFdoumUDcjLaZ17IPohC2j+7Q954zF5yeAlTPz7Me37aJuP26eZZcqLlkaTGXzbTIxbwvcAKmuSZIvyEorzDBY3dl0KJDuz+haXaGrKhvxtVod/PZPbit/Vjr0Bt0b1BRop+KGKzxQPAeCh6qsslugALSAJm7hY7FLyvBxYf4r5F9LmB5vlLZAMF0kWKwf+/bOYUnnGiXxOLtxqpPiN8gC5s1lUWSc04HZUsr9ASuZICevGpP5YauFpmIzagE/5m9qx60/CwvKwtoShF476Ez4U9gH8nKr82edvw/OjxhW7UD+pLOwFVEdbAhb5tvLJC33kqtpHtQakQKyF7brvKG+WKefxTHUdEOZE5EUHwH9XnFgmX7e0vBr/FtE1Kwp0xaCxYG07/r0fK2MKIIWByr/T4/Sl2LkQirHIlH1SnLxARzRqoV4DUqBtqkzxWN4kiIadeJW19bQ7xR3QwlTli8oTy73+rWTaSUJi5ejPiIBezGrGzbCsvKR9G1NokR9WBNGS5iUA8C404JomRsZe8Vhe/NigUM+GCaduMKgdVu0HxQG08Crw26mMiZ4rz1aHxHrFnZQcLCWAA1zFMaicMZvLETeP09Ak7ZWHN0/vaYZo0CU0Z3riQN76v2vAjVUzPm0WJVgmKR4w4r/lik+4q55JOFEc2noC2p8mxBeZyfI8CwNbsGYXrJ11BzB/6MHKFzdJKse/f6vH+qJkGjxNZ8VRuenk77TFeU719I8+EHIdkL/lavTRgGuamBBL0WzOAMFTpU3hLJHmRhS5iharYgf8b5S3hzJ8Y5vgpL3KJ8mLmDwmLT4di6cyQMNd4c9K92046TdWlGeqf0/bDn/J5EXIwaqiEACt6Xh3HIpbYqoGUDiTDngBFhNfBF4kAIACAvMlo6r+ZdQTjZan/pg8t9T6vMk0MNB37kkQF4PVKebFtJOV5ExadYP+vep5MbmnwTjsDBd5r1XG8SJ6IQDUWI/0M/TtRvsFBDqaF6RsLBUKR7FcTAkKnse53HpreaVeqA+4AoAUHz2MV2ncAC7Lx6ArsegtU9uvqrynOKwMSnMpKMgatLgi5g3Fn2FS3isfNhHKt3ChASwQVg3fMEziRfXiqa3llQaAxQS4+OgOFxp7lX9fYpaV4U6wijngiq9Lx7o9yhokWRFy7Q1/BDPduxNNGl3DjHTEQTqAzTdaq2hja3mlQagPjHe0f1/ilZeJN3rkSwdcClwS3JF7Md1eV0ENQTug5YB4svmPhbb0YWggwgZAA8j4yJusyoMW16uXYxE7BPdFLWoacKcTWFyWc05SeHAfNgk1wMXiFs/9NulhE3LVNYC/7Xb8srZb+PdOH8exViSYTRhmH5eAowoAywaNzrXQNNDRgDDDly2b+ffWgQBcCceysjPmKMO9OYptQ/a/sbjqM8c0jGVMYBOanEeOaXzdaaW7qqubS+rJAVeCMfWANv9lJwBmUv83mzL1dZPNwZKT0HiN14BZXJxqwPs+Y4Hliu9MZtXXK6uXov1f1RWZcgNu56qZt8L4vOYuXJEuX143pJNZ/+V1eT0/PMnHHqBY2/D1mh8mYN6pPvFvlefbEr6UcBcyFGOVCdx04utODoxxLThG4/vnhK/yyMLC0570bT1cMgk7Us9DxTt8J2hZ/l27mE5lnaD65uN2tHJ4BWZxGdmf2fDYrNhXbnyVh69r4MIfNp/Ybq3zc+sPetwmRzFA42wvbHp8GYAF4PDjxIJ8OLVQGcB3O1WlkQGoOdiGDnrrg5LdILrm43bVcnAlWFxu5ABQ3AIXlMeqkjdrizUFTJThB1N/qjzfKVsAqFg7C1jLHGRYTy4ox1YY+WfWSDF5awdPc1WeZO2iJoeb1Jjt5d5skJJ55V0is7h8D/xWHcbasXS/08NSb98Vk9+p3gFK8YmyAaTKo1wAZ0CHHBci/+4ewMcXlKGJ2+zEI34ZAg+Vx2BXs2sTeNk5oryu4y9OtAOulILFC0t6RFkqoxpAheXd5z9TQRA/LDM/QcFKc+EYtwDrSTBrShoQ4164OsX0wwWleRl2it2EKYZf3Pac8IA/Nd5EBwc81NFDc8Ad0woAif6m4tgCYIFtSYcdwDZL+lhpgJu4BH5SoMOi/KQ8P82GN3/89p1i106xBXzX3IJb3aHG7BHQz046YTVEJw7MitEv/n9yXKk8OmU1RJe86MVfD6t8taA+0Ef2JFVB9KNdk9HAVU9QSKIsXxaDCqWyoULZsWXGgvMlB4M6Ja0Hq2u/QaIMReNSuBfB88B9ifkoe9hB40bP4a+LlOcfFnGjuGSNIYhdrqAMlaM/9PpYcd+KGehXSqzv3vALiPZcPR28fPnyjZ77+dyo7CtPXh7nVf8hzm+Zluw7ej6tLfNopTeusZ2hAVlKfH7+usjcrZgby7/tF+Jyl1abfJXr0KxcENybNeU04K6p3em8WWr7XCO3QRVAcSWS4Mv45UC8/0ho1sx4+cG9WVPWFB93zf5ce96afKzpfcVsRkvBTlYArqWNjuPLy/Jr6QO+dbzXsX65WH1j40j/2NOc6MkvdamoLjTg1ulpS6p9S61tZBOLK1CwoeU04VKC5Jt7U3zhVM8qwmmUq1cMiNmkc4I0OhyNbtEaTNaAJmvSXxdlAs3Khjuw4guI+el2ySfOmq+W7XVvGLekMvYY1IwDIAPg0aFZ3NEqm9ZAE8SmCWvKhHFJqRM8zT6raV/02HkufC7VRVC/97k3b9XH3IWwFaN3o9lRUFTQLG6kjLWSmlgmiTNYnql/XeS6J15nLnF+nr5T/lJdBN+XXvdG/cOiAs78rre9eJM2ks3ies2vGWny3PKu+LXkmOVNNlEjAQg/du8AAhchvt/hhuL5YdnxI7HStiRXXT91TPQhPizzfOs55IbgBgTXxdr6mHG6b06z8sfKT/4DlWZxM22umdXkYi0BGRNtS6WJZCntANAqs9i9CCrjnke+BMekXAvF97wrOr554woqJxa0s2/i/lQZFrMTRMNLxjIPj2LwNEPuDS+MuTeOh9pgbXmSl9dVVn404FYqakEyA0EAnCZy7F8XGXCNV9I98eOlYGkGHKfKxy8EVjoGWun66c7zoB3PJPdGPJBFX3hc8GW8UPz53SQ3AUYNuE6d231osgAdy+5TP4kIx+LhRtQGln8uJRWXb2TowbpzVhpAqjKAnC/7WESsbhIiHtYv+pgE0ezzr809AaTPecSAl40fEsQvU8K3JnNcQ9RoFtcAk8ekAl6A/FkxQKsKIyYdGQY8eJMPy7b4OGuoOFw/hSgO9MvLo6/51VJWjeIJiefBRSD8W8aIm7JYaBZ3MVXWM9JEYilZJrFiPMUlX+WTAyBTY85J4+UYCzx0/bRPnvVvrHvDi1JcFfoE1ZY34NZqank6LCE+4OSd9Z4uAdyPGU1eBqiwqCzhsWVOmql+tHujNubfxi9KwndOZu+/Nc5h3toOa0CTy9e33FsGGFc6qI9YT0CI1aW/9PuZ4mIwesWjL4kXGWaFx1m+ZTfUgCa17+xzw17UiVJf7UeuuDYAd99RFr508bJ7ncRhqmZxh/XTaiMNCLwc23GUxWZuH3Cjlssnm4+7vE4PlqPAis+MtQ2btMsa7H8iorko7RebPAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle d_{max} = \\frac{\\sqrt{2} \\sqrt{D} \\sqrt{c_{0}}}{\\sqrt{V_{m}} \\sqrt{\\rho}}$" + ], + "text/plain": [ + " ____\n", + " √2⋅√D⋅╲╱ c₀ \n", + "dₘₐₓ = ────────────\n", + " ____ \n", + " ╲╱ Vₘ ⋅√ρ " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ans = solve(d_eq, d_max)[0]\n", + "Eq(d_max, ans)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/extras/img/construct.jpg b/extras/img/construct.jpg new file mode 100755 index 0000000..2aee737 Binary files /dev/null and b/extras/img/construct.jpg differ diff --git a/extras/img/krogh.png b/extras/img/krogh.png new file mode 100755 index 0000000..85e453e Binary files /dev/null and b/extras/img/krogh.png differ