diff --git a/pull_out/2_1_PO_LF_LM_RG.ipynb b/pull_out/2_1_PO_ELF_RLM.ipynb similarity index 99% rename from pull_out/2_1_PO_LF_LM_RG.ipynb rename to pull_out/2_1_PO_ELF_RLM.ipynb index b1d2c1b7ec7b939799b6162107933ea16201069b..bce26b0c079de2883575b6b60ed115e6c47edde2 100644 --- a/pull_out/2_1_PO_LF_LM_RG.ipynb +++ b/pull_out/2_1_PO_ELF_RLM.ipynb @@ -33,61 +33,6 @@ "" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib widget\n", - "from PO_ELF_RLM import PO_ELF_RLM\n", - "po = PO_ELF_RLM()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "141985.9147943908" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "po.hist.po.symb.get_Pw_pull(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ae3b55b590c04c709ee1415a03d28c8d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "po.interact()" - ] - }, { "attachments": { "image.png": { diff --git a/pull_out/2_2_PO_ELF_ELM.ipynb b/pull_out/2_2_PO_ELF_ELM.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..275aab278c8f3f1729c33545a08f168444bb0926 --- /dev/null +++ b/pull_out/2_2_PO_ELF_ELM.ipynb @@ -0,0 +1,5228 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Example 2.2: Pull-out from elastic matrix - PO-LF-LM-EL\n", + "\n", + "@author: rosoba" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "## Idealization of the pull-out problem\n", + "The one-dimensional idealization of the pull-out looks as follows\n", + "\n", + "\n", + "\n", + "**Remark**: The origin of the coordinate system is placed at the transition between the bond zone and free zone of the fiber. The domain in the bond zone is defined as $x \\in (-L_\\mathrm{b},0)$. As a result, in the bond domain $x < 0$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The meaning of the variables defining the idealization is summarized in the table" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAADaCAYAAACl44R8AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7s3QeYbUWVPvwNJtJIGJAgSYIEyUmQOAQlCBJEcpKMEgQBEYFLUMk5m8gSBdEBJUsUJAiIaXAGBXVmdFAUFdP451ffV2fq7rv3PrG7T3fXep773D471K56a1XVu1atqpruH69LkSUjkBHICGQEMgIZgYxARiAjMMkRmH6Slz8XPyOQEcgIZAQyAhmBjEBGICMQEHhjxGG66abLkGQEMgIZgYxARiAjkBHICGQEJiUCgiiyx3hSVn0udEYgI5ARyAhkBDICGYGMQBmBlsf4d7/7Xfle/p0RyAhkBDICGYGMQEYgI5ARmDQIZI/xpKnqXNCMQEYgI5ARyAhkBDICGYEmBDIxbkIn38sIZAQyAhmBjEBGICOQEZg0CGRiPGmqOhc0I5ARyAhkBDICGYGMQEagCYFWjHHTQ3X3Xn311aKT2OS3ve1txRvf2Nen6rIwIa//5Cc/Kf7yl7+Esv3zP/9zAb86+eMf/1j89Kc/bd1edNFFC9d++ctfVr4iLWlOZqG3//mf/1m85S1vCTDAesYZZyzmm2++FiyuwdUzVqm++c1vLuadd96hg00+H3zwwWKdddYZV23slVdeKX7wgx8UL7/8crHqqqsWc801V8fY/s///E/x4x//OLy79tprF29961s7fnc0HvzXf/3XQh6XXXbZYsUVVxyNT+ZvZAQyAhmBjMCAEOjLY/y9732vuPTSS4sll1yy2G677Yobb7yxuOWWW4qbb765uOqqq4pPfvKTxdJLL11885vfHFB2J0cyTz/9dPG5z32uWH/99Yv11luv+N///d/agl988cXFu9/97uKwww4r7rvvvuJPf/pT8etf/zpgvuOOO4Z7X//614vvfOc7xQMPPFCcdNJJgUxcdtlltWlO9Bu//e1vAyYf+tCHine9613FwQcfHEhaKq+99lrx6U9/ulhuueWKz3zmMwVdH0a54YYbii233LL4/Oc/P4zZq80TUvvVr3612H777Ysf/ehHtc9V3fjv//7v4stf/nKxww47BANnmORjH/tY8bOf/SwYn+9///uLP//5z8OUvZyXjEBGICOQEWiDwHTx5Lvf//73bR6tvv3973+/WH311YsvfelLxTbbbDPNQx//+MfD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JwSi8ba3va0WuPe///219ybyjT//+c9BB+okH9teh8zgr//jH/8opptuusEnPKQpvvDCC8XNN988pLnL2coIZAQmOgLTusl6KLEpaSTK4q2f/exnIYUcStEDkEPwyi9+8YvikksuKa6//voQSmARmtCCiSb33ntv8ac//alYZZVVGou2xRZbFH/4wx/CM3bp4CndY489ire+9a3Fd77znWKuueYqDjvssHBfKJFp7wUXXDB4Wi3cE4vriEliwdiPf/zjYrbZZgux3PJw6KGHFiussELjvfByhTSl5/FvfvObxcMPP1wssMACIU56++23L1ZbbbVWSs8++2yo63e+852FHUlmnHHGYv/99y9cP/7444vvfve7xVVXXVU88sgjBSJ85JFHhmum85XNDiapbtAZ+gMbhrFvRa+yvIrlhtFtt91WfO1rXwv5kJ7Y2XXXXbeVr/vuu6/43ve+F/RPuMb6669fbLrpphUIdHZJrDiiL1zoySefDGEYSy65ZOvldvX6/PPPB5yWWWaZQnw1j+1uu+3Wer9d+k255BmFxfzzzx/0cfrppy/222+/QIRhJabYN6+77rpQL3CwKLZOhB+cdNJJQQeV95VXXgmzeFEHm3RUnR144IGhDqdMmRIw+/Wvf1385Cc/CSFW8pVKnf7A64gjjggx6Oedd17xxBNPBNy32mqrYuONNw5J1Omm2H7x43bGYbjSyZVXXrnYdtttw3uMhPPPP78w5pjlkTffmmeeeabKW/6REcgIZAR6RWAgxPjKK68sdt5555AH0++kymOsU/v5z39ezDfffGEAyDJcCDBmLJ781Kc+FQZFswCvvvrqhCTGCC5BbJskjbmm5wb3e+65p/j4xz8edgcQU48YIyTCTpDDhRdeOCT59NNPFxtttFGB6NF9O14gBFEQEItUEaK6e3V5a/cOQxWpQr4RCPlbY401wm9lQlaQDcQZqXj55ZcDaUGolOPGG28M5FG7/sAHPtDKBhKPmJgdShfYIjNIF/JLEBfkEYHeaaedApnz3RVXXDEY0dIVtnP33XcXe++9dyDu8slgOOiggwpY2xlFOX1T7Peaa65ZB0ftdeW97LLLggdSGsi6nVfUDQOFNNUr76UQI3XOwCB+S0t8eifp12XugQceCPUOjxjCJLzHgk/eerp58sknF0JazFzss88+dUmF67BjYKh3ZSSM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bb311mHBWpQmnMvfjL9PPfXUcIiRUBqhYQ8++GBoy5/73OfC4s+mNI855phw3LgY+Rju0Qnmvn3SSSeFenUqKXzoiqntdri2y28/uliV905nyZSpThfFy2oz9M7MGkeK9sgY00/ut99+oTp61cX77ruvEDM788wzh7pbf/31i0033TRWce3/QrL0DQsuuGBoZ07hMwMqvIVU4VFuPzFx7ZajabbZZgvlW2CBBcL/d911VzhxtkoGpffItzhdfQSdhSvnzTzzzFP12Wmu0UN9h7UbMDFDN+ecc071nPamP3WmAUeFNq/etEV9s7rzrvUhniP6q3IbdV1ayi4t6cw999zT5KnqglhxfY7wKmXzrplb/WGMlW7Xfqr625inI488slhooYVan67T56q85WuDR6AnYqwhvvjiiyE3+++/fytXBlnTluutt17bnEqjjsw6015D0cjEAHmW0iEkQglSWWONNYLntC6tthkZ4gfiQB+zaIBHPlJBcP74xz9OU4p+3p0msUl8QSeNsNA/gx/StfzyywfSQnSYjBWkIUqMP95ss83CdDUCdeONNwZCQgwE4potyNloo41a75X/MDgifNtvv324xYONxOlEoyCidCISPwR83333DbH7iIoFVgaqLbbYIrzy6U9/OhyDe8YZZ4TBBRE899xzA8kSD0kQCMTfd/fcc89wTRq+YcEi4W2SthkLAzHxG1ndcsstw6DPiDBArbnmmmHWgwgNYkj4lnIYWDx78sknh/vtxECMtEo7GtZWlcNavCSSByeEQ6hBu3SFT9ixYoUVViiOPfbY2hks9QcDhF555f/73/9+IAPtcK4rk/S8j8Tr26yMpxMG+bnmmqux7tQFEpEu1uwEc3kxkDOu5D/i0wmuTflVj/3oYlPefZcuRqNLn4+gqGfSThevu+668Pydd94ZCCcCgmDFtskw6UUX9QHaCX3WJ0iTHmkDdL5OGGz09frrry8WXnjh8BhjVF+AaNOxJjxi+/GeMjGSzCaqU+1b/yO+ftVVV63LQggb6lfvJW58RlBPO+208C1EVfu3mLndjA3yZ8Yj9jEWgdqlAqGPhFUbVqZbbrkl4EK0EfWoL1pnnXWCgcPJ4BkGpufuvvvuqdqo9xBiuHI26MuJvrAT+dGPfhQMnl122SU8bsMAOhOJeCftp6m/VYd4D2mnz53kNz/THwJdh1Jo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AhNFpRBtQtB22bZEn7j88ssLC2pQIDDXEZCY4Nhjj02JD7bbbruUVEAElLlKYhVLuCFtsWQUM0m+4xNPPLEQg9z7qtnlurx3pnmVIliSDqHURslQ14X3UZ4hEEsaIamIOL5BgUAgEAgEAvMfgYmjUkh7u8kmmxSf//zni5122mn+IxItWDQI5IQIBx100ERxtmcCMBnBqul68ztkL5QOuS3j5KT8yMQmk9tGG22UslQSkPldDaKlwatMhOutt15BSB6WZGgQ39N1XXZImwlZ+oICgUAgEAgE5i8C1rqJXCk0PWuvcpri+QvH3OFcOlcbDulRX/GKV6RUqzI3ycJ1xBFHpLTBtPXSnPonq3c2J09Sdu4gMDuc5JS5bWmXZ4eTqW/Rz7LVNdFsRGi5++67U5Y8GdRojNtoafE6Gzi0tbt6b2m5cnTlL54LBAKBQCAQ6I7ARK4UXkMwXmONNQpak6DpQYC2jp/2j3/84+Lhhx8udt9990L2v9tuu62g3STQ7brrrin5APP6F7/4xf6LJyk7PdxHLeMgIG5uJvG+lzblTcMwPuYCr8N4jPuBQCAQCAQCgUBXBCbSGPd6veL73/9+se2223Z9XzzXEQFb6UDBAAAgAElEQVTxm7/xjW8UTOeZpK6lPT755JP71xzEol2u0iRlO7K36B6jsT/mmGPSoTeHrh544IHikEMOSQdPm7T0nqFNlT2tmpxGX11wwQXFKquskrTC3AH4yV5yySXFueeeWxx99NHFFVdcUay22mrFhz70oYTzwQcfXCy//PJTMP/yl7+crAi0u/p777337tQnzgB87WtfS/HEbbpohZUlCN96663FV77ylVTPJz7xieSi8J73vKcx9riY5Iceeui08HrNNdcUN998czrod9dddyWfXW4cXYhvrw2kdvz2t78ttt9++4RplRwStmF8xjOeUTzyyCOFw3v7779/3z1klP67//77i9NPP71YccUVi+WWW26kw5pcY2C+5pprFssuu2yK6/6jH/0oWYFcQ5dddlkaN0984hPT+IADqxG68cYb0xjUnquuuir1I9J+7a5a7drGayoUFAgEAoFAINCIwESCsUXMAZSq8Nb4lrg4FgKrr776lHJMtgSmKhHMmg4gTVJ2LGYXcCHa3Ne85jVJW++QKSLAysp4/PHHJ6Frzz33TALKZpttljT8iEBDCOYT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jZb/D3/4Q/GFL3yhePazn13ceOONxTHHHFMwI1511VXpW0KsBCwu6rz00kuTFoR1YOeddy423njjPh+sB8qri+DuHYccckji13VuG3x6uYUg2u/nP//56e+2svyq77nnnvR9S6/8ox/9KJkoh7k9aIcN2TOe8YyUMERb+VRznUBHHXVUcf311xd//etfE09rrrlm6xzBx5EpUF34+POf/1xwfVEO/fvf/y5OOumklJAERvfee29yz1h99dXT/dNPP7244oorihVWWKGwSEhLj2jsDj744HS48qtf/Wp6B+z49doIwQhWyDynH81pfMOXWWaZ5Ivu4GCmNj6H9UO/kgF/wItvOh9M+FI6rLTSSv2nbTSMOQf1zL02QjbN0ngPapu55Mgjj0yHTpXnPmT80S75zULFusFC8ve//z29ix++zfmg8eaZtjHVZMEyZmm14C799TBiFTOGjC/4K4/HPL70q2/IQTG8GhN777132ohpm37zPpa1f/7zn8Wf/vSnhJd50nNVMr+eccYZhXkVTsbFPvvs0/qNr7baagm/Ufsjj7W2sm3YWGv5pXP7MnewSrHiZuryHeRnjbPTTjsttcM3r93+7kLD5o1B8+ZDDz2UlGu//e1vk+IHHl37y/yc/Z+5U5gLnFswBobNR8P4HTbeBrVnEO/m1Kc85SlprFFiGaOs7GussUZScGVqGweD1gzKM2uUw8zm10MPPTTNfcZknv/NeZNuPrqMgwX1TNkZicoFYqR/pdtEr1xY+mXKwdgrJ6Te5z73uZHqGfW9i+X5973vfb1y0zEFy3Ih673xjW+ccq0UGHp77LHHlGuTlF0s+GpnKfCY+XvlItsrXYN6pVmud9NNN/VKgbZXaux75STWx7V0H+qtv/76vVJIS9dKwalXCiG90oUo/b7uuut6pW9er9y09MoJKpUv3TDSvXLRSu8pNf79+srFPF074YQTeqXVJV0vBbFeKcz1SqGvVy7e6dpFF13Ue9azntUrhYH02/vXW2+93oUXXtivq5z4envttVf/d7lA98pNa/937tMuZbfccste6VqQcCiF3d6GG264RD25voxDKbD2ygN1/eeULd0l+u3y3Ic//OFUb7XsoL+32WabXilY9581z5S+yek3HEoBoI+ta+XC0yutWL3y8GS/jH4oF55e6b/Yv1ZaWHrbbrtt/3e5qKQ+0Jd1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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "The pull-out test is controlled by the displacement at the end of the fiber $w$. \n", + "The force $P$ is measured to obtain the pull-out curve $P(w)$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Simplifications" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Simplification 1:** We assume that the interface between steel and concrete transfers a constant shear stress independently on the amount of slip, i.e.\n", + "\\begin{align}\n", + " \\tau(s) = \\bar{\\tau}\n", + "\\end{align}\n", + "were $\\tau$ is a constant material parameter." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Simplification 2:** We consider $L_\\mathrm{b} = \\infty$. Thus, the pull-out process can continue infinitely." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Model parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "The parameters and variables involved in the are grouped according geometry, material behavior, measured response, internal state and subsidiary integration parameters that will be resolved during the model derivation. In this classification we also associate the mathematical symbols with the Python variable name introduced in the next cell." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Geometrical variables:**\n", + "\n", + "| Python | Parameter | Description | \n", + "| :- | :-: | :- |\n", + "| `A_f` | $A_\\mathrm{f}$ | Cross section area modulus of the reinforcement |\n", + "| `A_m` | $A_\\mathrm{m}$ | Cross section area modulus of the matrix |\n", + "| `p` | $p$ | Perimeter of the reinforcement |\n", + "| `L_b` | $L_\\mathrm{b}$ | Length of the bond zone of the pulled-out bar |\n", + "| `x` | $x$ | Longitudinal coordinate |\n", + "\n", + "**Material parameters:**\n", + "\n", + "| Python | Parameter | Description | \n", + "| :- | :-: | :- |\n", + "| `E_f` | $E_\\mathrm{f}$ | Young's modulus of the reinforcement |\n", + "| `E_m` | $E_\\mathrm{m}$ | Young's modulus of the matrix |\n", + "| `tau_bar` | $\\bar{\\tau}$ | Frictional bond stress |\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Control parameter:**\n", + "\n", + "| Python | Parameter | Description | \n", + "| :- | :-: | :- |\n", + "| `P` | $P$ | Pullout force |\n", + "| `w` | $w$ | pullout control displacement\n", + "\n", + "**State parameter:**\n", + "\n", + "| Python | Parameter | Description | \n", + "| :- | :-: | :- |\n", + "| `a` | $a$ | Length of the debonded zone |\n", + "\n", + "**Integration constants:**\n", + "\n", + "| Python | Parameter | Description | \n", + "| :- | :-: | :- |\n", + "| `C`, `D` | $C,D$ | Integration constants to be resolved through boundary and continuity conditions |" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Let's import the packages:**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "%matplotlib widget\n", + "import sympy as sp # symbolic algebra package\n", + "import numpy as np # numerical package\n", + "import matplotlib.pyplot as plt # plotting package\n", + "sp.init_printing() # enable nice formating of the derived expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Here we tell `sympy` to remember these variables for further use. The parameter of the `symbols( str )` is a string that contains comma-separated printable symbol definition. One can use latex commands in this string to introduce e.g. Greek symbols like `\\gamma, \\beta`, etc. The number of symbols in `str` must be equal to the number of variables assigned on the left hand side of the `=` sign" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "E_m, A_m = sp.symbols(r'E_\\mathrm{m}, A_\\mathrm{m}', nonnegative = True )\n", + "E_f, A_f = sp.symbols(r'E_\\mathrm{f}, A_\\mathrm{f}', nonnegative = True )\n", + "tau, p = sp.symbols(r'\\bar{\\tau}, p', nonnegative = True)\n", + "C, D, E, F = sp.symbols('C, D, E, F')\n", + "P, w = sp.symbols('P, w')\n", + "x, a, L_b = sp.symbols('x, a, L_b')" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAADZCAYAAACZ8SmbAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnQW4FVX3xhfdLY10l4QCSkhISAkoipIiKohioqh8lAWIiYSigAXygaCCICUdFxQp6e68dNd/3s1/7nfuuTPnzOmZc971POe53Ik9e//m3GHevdZeK9ktzYRGAiRAAiRAAiRAAiRAAiRAAiQQVQSSR9VoOBgSIAESIAESIAESIAESIAESIAFFgGKPXwQSIAESIAESIAESIAESIAESiEICFHtReFM5JBIgARIgARIgARIgARIgARKg2ON3gARIgARIgARIgARIgARIgASikADFXhTeVA6JBEiABEiABEiABEiABEiABCj2+B0gARsR2LFjh/z5559h79HSpUtl06ZNYb8uL0gCJEACJEACJEACJBA6AhR7oWPLlknAZwKrVq2Sb775xufzAj1hwoQJsmjRokCb4fkkQAIkQAIkQAIkQAI2IkCxZ6Obwa6QAAmQAAmQAAmQAAmQAAmQQLAIUOwFiyTbIQESIAESIAESIAESIAESIAEbEaDYs9HNYFdIgARIgARIgARIgARIgARIIFgEKPaCRZLtkAAJkAAJkAAJkAAJkAAJkICNCFDs2ehmsCskQAIkQAIkQAIkQAIkQAIkECwCFHvBIsl2SIAESIAESIAESIAESIAESMBGBCj2bHQz2BUSIAESIAESIAESIAESIAESCBYBir1gkWQ7JEACJEACJEACJEACJEACJGAjAhR7NroZ7AoJkAAJkAAJkAAJkAAJkAAJBIsAxV6wSLIdEiABEiABEiABEiABEiABErARAYo9G90MdoUESIAESIAESIAESIAESIAEgkWAYi9YJNkOCZAACZAACZAACZAACZAACdiIAMWejW4Gu0ICJEACJEACJEACJEACJEACwSJAsRcskmyHBEiABEiABEiABEiABEiABGxEgGLPRjeDXSEBEiABEiABEiABEiABEiCBYBGg2AsWSbZDAiRAAiRAAiRAAiRAAiRAAjYiQLFno5vBrpAACZAACZAACZAACZAACZBAsAhQ7AWLJNshARIgARIgARIgARIgARIgARsRoNiz0c1gV0iABEiABEiABEiABEiABEggWAQo9oJFku2QAAmQAAmQAAmQAAmQAAmQgI0IUOzZ6GawKyRAAiRAAiRAAiRAAiRAAiQQLAIUe8EiyXZIgARIgARIgARIgARIgARIwEYEUgbSl+vXr8uNGzcCaYLnkgAJuBC4du2a3Lx5U65cuRJWLvg7xt9zuK8b1kF6uFiyZMkkderUHo7gLhIgARIgARIgARJwHoGAxN7+/fslPj7eeaNmj0nApgQOHDggp0+flo0bN4a1h/g7PnToUNivG9ZBergYhF6FChU8HMFdJEACJEACJEACJOA8AgzjdN49Y49JgARIgARIgARIgARIgARIwCsBij2viHgACZAACZAACZAACZAACZAACTiPAMWe8+4Ze0wCJEACJEACJEACJEACJEACXglQ7HlFxANIgARIgARIgARIgARIgARIwHkEKPacd8/YYxIgARIgARIgARIgARIgARLwSoBizysiHkACJEACJEACJEACJEACJEACziNAsee8e8YekwAJkAAJkAAJkAAJkAAJkIBXAhR7XhHxABIgARIgARIgARIgARIgARJwHgGKPefdM/aYBEiABEiABEiABEiABEiABLwSoNjziogHkAAJkAAJkAAJkAAJkAAJkIDzCFDsOe+escckQAIkQAIkQAIkQAIkQAIhIHD27NkQtBq5Jin2IseeVyYBEiABEiABEiABEiABEogggWHDhkm5cuUkd+7ckjJlSqlVq1YEexP8S1PsBZ8pWyQBEiABEiABEiABEiABEnAAgdatW8tHH30kNWrUkBs3bjigx751MaVvh/NoEiABEiABEiABEiABEiABEogOAsWKFRN80qZNK7/99lt0DMplFPTsRd0t5YBIgARIgARIgARIgARIwHkErl69Kt26dZMrV66EvfMI4YxGi85RReOd4phIgARIgARIIMoJXLp0SXbt2iWXL182HClexooWLSqZMmUy3M+NJEACziZw9OhR+eabb6Rfv35SsGBBZw/GJr2n2LPJjWA3SIAESIAESCAWCdy6dUsmTpwon3/+ucTFxXlFgPU1U6dO9XocDyABEnAeATwPaMElQLEXXJ5sjQRIgARIgARIwCKB06dPy+OPPy5//PGH5MiRQyDkUqdOLUuWLJFDhw5JihQppEuXLuonDPtwPI0ESIAESMAaAYo9a5x4FAmQAAmQAAmQQBAJoJZVo0aNZM2aNfLOO+/IG2+8IalSpVJXQDjnQw89JHPnzlVp0CH4aCRAAtYInDp1yvTAbNmyme6LlR3IuPn333/Ljh07JEOGDHLPPfdIvnz5Aho+nmdmmTwRdh7J9YBM0BLQreXJJEACJEACJEAC/hDo0aOHrF69Wj777DPp27dvgtBDW+nSpZO3335bNTtlyhR/muc5JBAzBOLj4+WDDz6QSpUqqb+d7Nmzm34yZswox48fjxk2rgO9efOmjBgxQgoVKiSffPKJmlQ6f/68DBgwQHr16iUXL160zAUJZL7++mupWbOmZM2aVbJkyWLKHPcE0QqRMnr2IkWe1yUBEiABEiCBGCUAj92ECROkQYMG0rNnT0MKJUqUUNv37t1ruJ8bSYAERGbPni1PPvmkHD58WPLmzauKg+/fv1+OHTum8JQvX17y5MmTgKp48eJKlMSaIcvnY489pkLGUV6hYcOGCQjat28vS5cuVVlArdjGjRtVODl+QuThWQUBrT+rICb15xfaA+/SpUtbaTokx1DshQQrGyUBEiABEiABEjAj8P7776tdr776qtkhgvV8MKzTo5EACSQl8PPPPyvRgayVc+bMkQceeECSJUumwgnhrXr33XeVF2vGjBlJT46xLS+88IL88ssvygPqKvR0DAgXh9jr3bu3RzLr1q1Tk1TwEo4bN04gFPXw88mTJ6v7gXvw+++/2+bZxTBOj7eUO0mABEiABEiABIJJAIlXFi9erGbE8XJqZnipgjkh/fqZM2fU+h8aCYSLwKZNm6Rjx45y5513yooVK5SAgciAIaHRwIEDpUCBAjJr1qyYDdvU7wXWBY8ZM0ZxefbZZ01vUZkyZUz3YQcmoLCWGOGfCxcuVGuJdaGH/W3btpUmTZrInj171DPOLkbPnl3uBPtBAiRAAiRAAjFAYNWqVWpWvFq1aolelNyHPm/ePLUJL092N4SAjRo1ih4Uu9+oKOpf165dlej44YcfJGfOnElGljx5cqlQoYIcOHBAdu/ebXhMkpNCvOHatWty5MgRwU8zw2QQbN++fXL9+nWzw9SzA2GrVhKfjB8/XlDSATwCSVDTp08fFao5cuRIqVixomHfqlatqrx6mPzxNJlleHKINlLshQgsmyUBEiABEiABEkhKQF9L5Lqmxf0ovMSill7mzJnlkUcecd+tfr///vsFWQfxgWfj33//VesA8YKIwux169ZV3g2EtA0ZMkTNtsMDd+7cOcFLm11exAwHx42OIjB48GD13UKIYDgM3jrUpMTfwL333mt6SfwdwTC5YgeDVw2hj1asdu3aXg976aWXVKIVb7Z8+XJ1yB133OHtUNP9EJ/oe+7cudUaSTPD8wXmSaianRuq7RR7oSLLdkmABEiABEiABJIQwMsSTP+Z5ABtw+jRo1XI1Icffqjq7xnZ2LFj5b333lMvYPBuIITtm2++UTP9O3fulFKlSqmX3KNHj6p1OEhcAXv99delRYsWsmXLFrWeiUYCTiOA7zsMCUc8GSZAYPnz5/d0WNj2wSOGzLueDJ49CD1kr/RWDsHquPTsowgd99ewHg9JXvDsSJs2rWkzSNoCQ3itXYxizy53gv0gARIgARIggRggUKdOHUmfPr0SZEa2bds25ZFr2bKlxwQuxYoVU/WxIPb++ecfmTRpUkJz2FeyZEklFjGrrws9HNCsWTO1fcGCBazfZ3QDuM32BPT1YPXq1TPtK9b0QeQg+6ZdhAdEUtGiRU37jB16WCbW6gZrva4u8nRPp8cOmOzEGj2YJ+YQg/C4YgxI+GIXo9izy51gP0iABEiABEggBghgzQxq6MErN2jQoETetbVr10qbNm3U7DlqWOkJJ7xhady4cZJD8MKFtUw1atRItA9JGmBYO0QjAScSQJkFfL8xqWFmP/30k9rVoUMHw0MmTpyokrcgDBoTK0j28tVXXwmSmZw8eVJ5xuERhwd+8+bNak0qvO2oL9eqVStp166d5b9Pww6EcWOVKlVkw4YNaqz+mr6WEFzMDGUdUFwdPI0iEiDSMTmFfmACCtlSMUmF81DvDyUaEJpatmxZ9Xz64osv5ODBgyr0HOG6yCjqT3Ziij2zO8btJEACJEACJEACISHw5ptvqoQJWHOE9S+5cuVSda62bt0qw4YNU4LPFzMLqzLb7kvbPJYE7EYgU6ZMkiFDBtMERxcuXFDCDQlMXn75ZcPuV65cWYU4Yz/Wzz7zzDPy9NNPq+Lily9fVn+bECGffvqpzJw5U3nbMVEDwYJ9EH49evQwbNtuG5944gn59ttv1bperOHVJ3x86afuHfTkJUXEANrWS8u4tw+vZqNGjVRGUKzpe+211+Tuu+8WhKRjYgvPwvvuu0+V0UDIK5gj1BzrBXG/EHqOrKK+Gksv+EqMx5MACZAACZAACQREAC828O6tX79evdzgBQovNn/99ZfPQi+gjvBkEnAgAYgtJDoyy2qJdXHx8fHy448/qiRHRoYi3/AiweBteuWVV9RaORgmSbAeEOIIouOjjz5KyGKJMGyIQyRDcopBYMH7D68bahOa2dy5c812qYRPMN3D537gd999pyasPv7440Rh467HoRQG6vAVLlxYli1bpjJ64ndkTsUzEd5VJPpBplV49fQ1xQhnRW0/eGP9MYo9f6jxHBIgARIgARIggYAJ4EUU9cGaN2+u1hbRSIAEvBPARAk84+6CC9uQGRTeH4QHelpf5nqVIkWKSKVKlRJdOF26dOr3Rx99NEm4JsQgSjo4yb7//ntBHT14MlE+wd3Actq0aWozQifhuXS17t27q7Bwo2yiKNYOzyiyscIzasUQtgmPo6vp2UKxrjhjxoxJ9sFjCzHoqzGM01diPJ4ESIAESIAESIAESIAEIkQAiYngtYNwgacJ3jaE+iF0EyINHnJ47qwaQkLNDCGjRmaXcg5GfTPaBqEGbxpCJ6tXr67WI2IdHNYnItMmJp4QsooQcnhFkQkUEQcQzRDCCDVH/TyIX3jisC4Pgg0iEeGVs2fPVuGtVs0oDBftwgKpBWh0fYo9IyrcRgIkQAIkQAIkYGsC06dPF73wOl60kNwABdjhcUA4FX4iOx7S1CMzHkKnsN7o119/VePCv5EIoWnTppYKM9saBjsXcwQgOuAVx9/BokWLlBhB6RFv2S5jDpTLgCGiwAgCGSGbOrd33nlHhUxu375dhazCw4YEK/ggq69uENlIVoPENitXrhSs44N4RCF1OxvFnp3vDvtGAiRAAiRAAiRgSACCDln2qlWrpkQdCqtD7O3fv19l3nvjjTfUeZh1Rz0uiL2///5bvaAh1A2JGlCWAS/Merp3wwtxIwnYlADES6dOnWzaO/+6ZTUDr3+t3z4LXrvOnTsnaQJrEbF20ZMhhLV169aeDrHdPoo9290SdogESIAESIAESMAbgSFDhhgegtAsfIzMLDOh0bHcRgIkEH4CKPUAAYuftOAQYIKW4HBkKyRAAiRAAiRAAiRAAiTgCAKo9QbPNgyZPRGeqBcd37Nnj6AoOwxeciQsgSFBCDJ0Yp0bMlsimy5qwAXTUEcOZRLSpEkTzGZt0ZYrv4sXL6qahnrCFdRORGg5DCVodu3apZLwoEQDfsf9gSGCAfx9MYo9X2jxWBIgARIgARIgARIgARJwOAFkp0RNS4Qzotbb66+/roQEDJknUYOvW7duSpDoIdF//vmnvPXWW1K/fn1p0aKF9OvXTyUtoVkj4MoPRemxVnDKlCnq5P79+6s1hE899ZRACPbs2VP9RFj6q6++Knny5JEuXbqoTKtIxOOLMYzTF1o8lgRIgARIgARIgARIgAQcTgAlAszKBKCYupFB4OFD84+AJ35mAg5lMWbMmOHfBf//LHr2AsLHk0mABEiABEiABEiABEiABEjAngQo9ux5X9grEiABEiABEiABEiABEiABEgiIAMVeQPh4MgmQAAmQAAmQAAmQAAmQAAnYkwDFnj3vC3tFAiRAAiRAAiRAAiRAAiRAAgERoNgLCB9PJgESIAESIAESIAESIAESIAF7EmA2TnveF/aKBEiABEiABBxLAPWhkMZ98uTJkipVKhk6dKhjx2K141myZJErV65YPZzHRRGBdOnSqXpo+N4nS5YsKkZ24MAB6dixo7Rt21batGmjUv/TnEmAYs+Z9429JgESIAESIAFbEXAVeKgdhZdF2BNPPGGrfoaqM6iPtXHjxlA1z3ZtTKBWrVqqd9euXRMUBY8Gu3nzpixcuFB9UKKhdu3aFH4OvbEUew69cew2CZAACZAACUSagJnAi3S/eH0SIIHgEbhx4waFX/Bwhr0lir2wI+cFSYAESIAESMC5BCjwnHvv2HMSCJQAhV+gBMN/PsVe+JnziiRAAiRAAiTgKAIUeI66XewsCYSFAIVfWDAHfBGKvYAR+t9AfHy8bN++XapXr+5/IzyTBEiABEiABEJAIFgCb+fOnTJkyJAQ9DA4TebMmVO6du0anMbYCgn4QADrWn/88UcfzgjfoadPn/bpYhR+PuEK68GOEHtHjhwJeNFz/vz5pUyZMmGF6+1i/fv3l82bN8u8efO8Hcr9JEACJEACJBByAsESeK4d3bp1q/Tp0yfkfff3AhUqVKDY8xcezwuIwJ49e2z9t+Hv4Cj8/CUXmvMcIfYw87F8+XI5f/68SuV86dIlReOee+6RO++8MwmZM2fOyNmzZ2XXrl1y8uRJtb9OnTry8ccfJzk2UhuQ3QhjgV29ejVqsjdFiievSwIkQAIkEBgBeOCefPJJWbJkSWAN8WwSIAES+H8CrsLvlVdeETg6evfuLSlTOkKCRMV9dATpu+++W/CB9ezZU+Li4iRbtmwycuRIj/VMkDYW6Z9R3+eOO+6wzQ27fPmyDBs2LKE/J06ckHz58tmmf+wICZAACZBA7BEoVqyYLF68WP766y9VHw+f3bt3xx4IjpgESCBoBCDq6tevr8o2tG7dWnLkyBG0ttmQNQLJrR1mj6Mg3v7991/VmapVq3oUejgmefLk8uijj0rJkiVtVQxy/PjxiYDq3kd7UGYvSIAESIAEYpkAJlexxg7RMatXr5bXX39dihQpEstIOHYSIAEfCEDgNWrUSMaMGSNYijV79mzp1q0bhZ4PDIN5qCM8e/qAsb4NoZww3dNnBUahQoVsI/b27dun1ug9++yzMnDgQNX948ePWxmGI4+BQIfoppEACZAACTiPgB5ZA/Hnr8evVKlSakbfroYELTQSiASBwoULy+DBgyNxaa/XRIIWX/pGD55XpBE7wFFi7++//04ABc+eVUuXLp1txB7WDb744ouSPn36hO4jjDPaDKGqv/76q8oyhSxnrVq1irYhcjwkQAIkEFME/BV+CA994403YooVB0sCVggUKFDAtn8bcE54E3sUeFbucuSPcZTYw6wiDOvvjEJKsAh0y5YtUq5cuURkL168aAuxh7UQsNq1awv+iHSLpjBOJMb573//K5MmTVJhto8//rg0bdo00f3gLyRAAiRAAs4m4K/wc/ao2XsSIAEKPOd9Bxwj9iDk1q5dqwibhXCuXLlS1qxZk0TsQWzkzZs3oncHGTeHDx8un332meqHa8KYaAjjPHbsmPLiTZs2TbJmzSpPP/20PPTQQ5ImTZqgcUdI6LVr1/xuE6Lf1aMatI6xIRIgARKIYQIUfjF88zn0mCBAgefs2+wYsbdp0ybByzrMLIRz+vTp0rx58yR3BGUXIm1IytKwYcOErJsQHRBCV65cESeHce7du1e+/fZbmTVrliqDgVpKjRs3lhQpUgQN+cyZM+Wnn34S1GqC6EcmJ9zTdu3aCcKDPBnKWyCjnO4VRr/w/enRo4fXcz21y30kQAIkQAJJCRgJv2D+f5D0itxCAiQQCgLIt4AkK8yiGQq64W3TMWJPf1kHHtTXczXU3Zs4caL8+eef8vbbb4eXoIWrHTp0SObOnas8X66WK1cu2b9/f0ItQAtN2eYQiG8IWNQLRNgs4rohwBC6GSyDJ2/QoEGybNkyefDBB5WQR1anP/74Q3kQsSawffv2SrilTp060WWxZhAJcP755x+1ZrBfv37K44g2sfbznXfekS5dukjdunWD1V22QwIkQAIk4EJAF36EQgIk4DwCWE+ILJo05xNwpNhDrT3d8FKPjEHw+CDjV6ZMmWx3V1BTr1evXkkECTxUEHtOCuNctWqVEnn4ed9998no0aOlSpUqIWEOjyHY/Pzzz5I5c+aEa0DcffLJJ2pt4Pfff688fh999JEgEQ8M34mXX35ZhXzCIwiRpxtmqjBZgH7jnmDtJ7K10kiABEiABEiABEiABEgg2gg4QuzhpX3dunWKPbxHr776asJ9wIs9kp0gLXTlypVtd3+WLl2qvElIyuJuemFJXazaNdQF/V+wYIEK10QCnAYNGigvJcR1qAxMMKM0duzYJOvsUqVKpeo+YdYJ2U0hPN988031b3gWEUp67tw5JegyZsxo2MW0adNK3759ZdSoUfLBBx8YHsONJEACJEACJEACJEACJOBkAo4QeyikDlEHq1GjhuTPnz8Rc6zbQghnqDxM/t5gJGX54osvlAgxMoRxwiCm4uPjxW61fiCyf//9d/nuu+/k8OHD0qxZM3n33XelYMGCRsMJ6rY5c+ZIhw4dkgg914s88cQTsm3bNpkxY4ZAVI8cOVJy584tCDFFNlAzoae3gXGA/ZkzZyRLlixB7T8bIwESIAESIAESIAESIIFIE3CE2HOtr2eWiRPZICtVqpSE5/r165UHKphZIZNcxGQDRNL169dVGKKRQZTohnBFO4k9eMYgprBGDolQOnbsKLo4NRpLsLch86qVukzw4m3fvl2FcsLzCK/fgAEDJFu2bJa6hGQt+I4YeV4tNcCDSIAESIAESIAESIAESMCmBJLbtF+JuqUnZ8mePbthfT0cfP/99wv2uxo8U1jLBQEQboMnDBkqW7RoodabGX0Qhqib3TJyZsiQQerVq6dE8qJFi1QiFt27Gg6WyFJqxduGcMwPP/xQHXvr1i3VtTJlyljuIrzEdmNvufM8kAQsEEAdT6yzDYdhkgih1zQSIAESIAESIAF7ELC9Zw+hkPC8wOCFMcv2CC+UuyFlP9b4ISlHuA0i8/nnn1eCyczgvUKYJMxuhdXB7JVXXlEZK5HkBOvfvv76a+XlQxpeOyXCyZcvnyBpz/vvvy/4vvTu3VvGjRuXkLDFjD+2Q1Tada2kp35zHwlYIXDgwAFV7xIhzuEwPBfgaUfyI9QUNXteh6MvvAYJkAAJkAAJkICI7cXexo0b1Qs5zJcELFiLhXIMri85SOF/9uxZlbwD68+QvXH16tWyc+dOtb7r3nvvTQilxBo6FGnH8YULF5Zq1apZFo2o7Qavoiehh/HoCVrwb6OMnMjUiTVp6AM8UOgDyjjA04mag0WLFlUF5iHMMF5s37Vrl/JyQRgHI+wS3tLnnntOiT6Eo06YMEGFSz788MOq7IHrGIL5B4XrwuPmWnzerH2Eyk6ZMkXy5s2r1hbu2LFDlV1A4hVvL5s41r2Uh9l1uJ0Egkmgf//+KkzaiiEsGc8hPFOsJkbCcwPPOZQZqV69upXLBOUYTLpg8g3lTnBtGgnECgHUna1Vq1asDJfjdCGwZ88etWwnEs4F3ggS8EbA9mIPYkw3s/V6RoNEWv6SJUsmCu1EKCIEH9b3oTYcMkqifEDFihVVgpehQ4fK8OHD5ejRo8qbiBcrCCaUTkAYJrxb3v6Q4VnCjDbO8WauQsYolBBCBLXkli9fLo888ogSMTgO/5mgtiDWpoHJSy+9pMJVIVYrVKigwi4hdFCewKwAvbe+ue9HEXis23vssccEHlOsR4THD2GqnTp1SpI0x/18X3+HAFu8eLG0adPG66kQ9AgxhbhHhk0ka5k3b56ULl1aiVQzQ7kOHOvpGLNzuZ0EAiWA7ycmS5BpWA99hCjD99H1OXPq1ClVogXCCWVHUG8SWWRdw8Dd+4KQZvxdYi1qy5Yt3XeH9HdMsHz11VdqDTWeR48++mhIr8fGScAuBDAh+uSTT9qlO+xHGAng3iPZG2oC00jAbgRsL/b05Cye1uu5Q92wYYPKgokXIldDwXUIFAgxCDe8POk12MqWLauyOr733nvSuHFjldpft2eeeUb9Do9dzZo13S+X6He0i9BRTy9i+gnwLEJEwUtnFMYJsYmi3xBxEL3FixdX4VG6QQBC6OABg+Lj+ho3CFmEh37zzTdBE3v6NVG8vFWrVuoFEuUYsBYIgqxhw4bSuXNnKVGihEc+Vndi7C+88IJ6sXUvmO7aBgT71KlT1cslvLPIFtqtWzcljMEmT5480qRJE8PLgg9Epaf2DU/kRhIIAoHHH39ctYLJHF3sYQLH7Pv66aefytNPP63+5lACBc8E1xqSrl3CxAciE/B3EAlDOCcmm/C3iFItoYoAiMTYeE0SCDUBTERyeUGoKbN9EogdAuFfzOYD2/PnzwvCOGHwYHkLyYNo+uGHH6R79+4q5Amzyu6WMuVtfYuXfPdi2xCUCAOEaHE1PfEL3PSeDKIDRb5RHsKqQezBjMI4sR1jRhISjA2hk66GMgMwXM89mQlEDtbrhMrgecBLHMb7+eefq9IRCN1CMXO9JmIg10ZSHbwMQ8QiNMLdECYLQQ/BBlEHLy4Mgu/LL78UiHfuh0PKAAAgAElEQVSEtv7nP/9R/QM/3eB9xUTAH3/8IU899ZR70/ydBMJKAN5lGL7znrLC4tmFZEQwiDjUFjUyfNdRdxJrV72VHzE6P1jbMCFUpEgR1RcaCZCAZwJ438GyDUQg7d692/PB3EsCJEACPhCwnWcPM9YIqcQLeVxcnPoJO3jwoAqxNDKswUNhdZQy0F/qEW7oyczWs2FtjJmnBwLD3bBGbu7cuaqveiIZeJeaNm2qRKNRJlC83KF2IESRHr6J0gGYCUdoJ7xa7p5BrEdzF7v6zJ973UH0EcdC7ITDEHqGD/jD6wDvA0K4MH6Eybr322qfkGEVxdXRHoQuBLyesOeXX35RYh1iDy+Urgbhi2Qy8LLCw4GQUwhxCEBkFwV3iGEIPl1sW+0TjyOBYBPAyx0ME1DIguvJ8HzA8wl/B7Nnz1bh2u6G5yQiBRCREGlD4iSEpaKMCuqh0kiABP5HAAIP6/DxwXsMjQRIgARCQcB2Yg+z13jhwQfhTGYhTa4wsJ4OggfhjjC8wENshcMQQgkxU79+fRVyiLVjSCgDYWgmcuDFwz4IJAgaCEKch3OQVMFIVHpaK+hpXzgY6NeAmMK6R3hAIbBee+01JcTgnUMIqj+GTIJIzAOxNn36dCVg0SZeHuHRNGOMF2KEvOprDJH5FMIR3yt4H/G9MhLi/vSR55CAvwTgtdY9ewjZ9mZYu6dPgBlN5mCt3pgxY1SotR0y5iLUHJEWmARishZvd5f7Y4EABV4s3GWOkQTsRcB2Yg+iwF9hEAm0ECK+ZAlFH1u3bh2JrobtmvDAIRMfXvKQKAciKxArWLCgSkLjjyHUlQvm/SHHc8JBABl09Rl9TPx4MyRf0g1ec3eDlxDZhbH22A6GiTdMhCGDLyZ9zCZn7NBX9oEEQkWAAi9UZNkuCZCAFQK2E3tWOs1jnEEAobKoNUgjARIwJqCHcMLL7C35E1rAmmQYkju9+OKLSRpFplwYBJYVQ6ZPpItHYiVvIaTu7SEKAWucvZWCQFg6EkYhzBvJo2gkEAsEKPBi4S5zjCTgDAIxJ/b0mn1GST8QHmW0XQ+r1MOnwnlrkZULIZ74uBvKL8CM9unnIKyLs+nu5Pg7CdiDgC/r9ZD9ds6cOervGUmJjETWkiVLBJ7wnDlzeh0gErwgoyfCohFmiTIvRt5CTNhAqGFtsr5OGAmZULIGa41wHkqwmFmVKlXULvSNYs+MErdHAwGs+UeSlUDX4CFHAZaI0JxD4M4771S5AJBBHs9fPIdpJGAXAsk0MXDL384gYxT+03eKod4TQgoh6DCTni9fPhk3bpzMnz9fZWzUw6mQwQ5JQfACg5ILKOUAkYgXHTzM8WIUjsQekyZNUtku9aQzWJuI/uCFDEkPMKsOIYr1aUh+MGLECJXGHaUl9NBJ17E45T7Fcj+RIRRruJDkJ5w2ePBgFT6NNVaxaPgbMsreG0oW+NvF8+TChQvy1ltveQy9xDOqffv26liUGdHLNrj2D+3huYQyKLqHz6z/eO5t375dUAAdhufEXXfdpeqQuhoy+uIlBhmJkUxKnzhCQikIN0xGIREMMuCaGQrHI8FU165dVUIlGglEEwHdg4e/CRoJgACWsoT7/xOSJwFPBGLKs4cae67JTPQEBwgzQhkBV9P34SXY/Zxwecratm2rEowY9Qt1udz7heOQtATJTIzOSbSRv5AACUSUALxqEG8wCG1k9tUNnnnM7KP0zJQpUwRr9fA8wCRAoUKFDPuN5C2YyDLLNKyfhAgFZKuFpxAGQYd+wBvhbrrnEcmvXJ978Cp+9tlnKkzbW4IorJuFmHYdn/t1+DsJOJEAst7Ck2dUJ9eJ47HaZ3jprf49w7NP4WOVLI8jgdAQiCmx5/5Sov/uvh2ozfYZHRuaW/O/Pri2761fRv0z2haqPrNdEiABawRQYgYGEQVP3KxZsxKdiMzEEEodO3ZUHn5vIk6vzWVWaF1vHOLxwQcfTCgx8/PPP6tdqGXqbrrYM6r/16NHD1X3z1tJBYwPfYcYpZFANBHIkSOHygKOyB+EOWPiBGWTAgiYcgQelDCyWsPTrJSVIwbKTpJAlBCIKbEXJfeMwyABEogCArpnrXTp0jJ58uSAR6SHe6POpCeDxxACUjdkzIUhzN3ddEFqlCkUk0hlypQRfU2e+7muv6MMBMLOaSQQjQQgfjCpMWPGDMHkCUKX4SmHxy8ahV+1atUEHxoJkIAzCFDsOeM+sZckQAJRRACegBUrVqgR1apVKygj09cce6uvB4+cbvv27VP9QCbOZs2aJeoH6mXCW4gZfCOvHw5GNk8rL33wUuoJpYIyWDZCAjYlAOGHUGt88Hfuj/BDcg/kFKA5hwCWCSEc/qmnnlLZkmkkYCcCFHt2uhvsCwmQQEwQiIuLSxA/RiGS/kDQXzD0jMNW2oBHEZ4HCD33pFN6CCdKQkCsuRtebCAErYRzYQ1i2rRp3Zvg7yQQ1QT8FX6YfLGSUTeq4TlscHgeImqC981hNy5Gupv0f/AYGTiHSQIkQAKRIqALKVy/Tp06QemGLtZQ/86qIeMvzCiEU++jUQgnzpk3b5488MADli6F7MCc7baEigdFKQF/hZ8dcfz111+CJHHI0OvNMO4PPvhArWWkkQAJRIYAxV5kuPOqJEACMUxAX6+HcC2z7Jq+4tFfpqzW50LK+DVr1qiSMkjY4m6orQdDAgojQ4F31OqzYhB7qMtHIwESEHGy8EONz169eqmyK1YMJaP69u1r5VAeQwIkECICFHshAstmSYAESMCIAEIaV65cqXYFK4QTbaG2E+z48ePqpzfDej28sEFsuodw4ty9e/eqJoyKt6O+Kj5Fixb1dhmBpxE1AFG8nUYCJJCYgJHwwzY7GurAQrgNHTpUmjZtqrIFw1A/EwmYjEQdEkYxI7gd7yb7FEsEKPZi6W5zrCRAAhEnAKEHwQcLVggn2sI6H5RBQN0vK6YLPKPU6Ej2ooeDGr14Ynb/lVdesXIZVbwdRs+eJVw8KIYJ6MLPjgiOHTum6moioZP7BBBCvjt37izZsmWzY9fZJxKIeQLJY54AAZAACZBAGAn8+uuvCVcLViZOvUGIR4g9XUx6GhY8geXKlVPFkd3X3mCNje4p3Lx5c6JmNmzYIAjxdM/eaXat9evXq13BFLZm1+J2EiCB0BCYM2eOfPnll0mEHhKToESLlRIsoekZWyUBEvBGgGLPGyHuJwESIIEACbz44osqCQqSnQwfPjyhtU6dOqntAwYMCPAKt0+vW7euXL16NSFM1Fuj48ePl+zZs6u6exs3bpSDBw/Ku+++q7x68+fPV3X0MJu/evVqFaaF4u4DBw6UUaNGeWs6Yf+iRYtUxs7q1atbPocHkgAJ2ItAhw4dpEGDBkk6hWLyyLRrJaQ7ycncQAIkEBYCDOMMC2ZehARIIJYJtGzZ0mNxZW+F0K2ya9OmjfTs2VNmz54tEH7eDPXz4LlDCYYxY8Yokde8efOEtTdr164VZOwcN26cKhUBTyR+R1IXK3bz5k2VtROClqUXrBDjMSTgLAIoJA+vHorK00iABOxJgGLPnveFvSIBEogiAkYz4qEYHjxo7dq1U4Ls/ffft/QCliNHDunevbthd7CeD14/fPwxrOWBt7Br167+nM5zSIAEbEwAkznTp08XRCjQSIAE7EuAYZz2vTfsGQmQAAn4TOCll16S/fv3K+9epA3hnvXq1RMUZqeRAAlEFwGEdyNxCyIEaCRAAvYlQLFn33vDnpEACZCAzwSQdAWhnEiyEklDEhcko/nkk08i2Q1emwRIIEQE9GRTTM4SIsBslgSCRIBiL0gg2QwJkAAJ2IXAoEGDZMeOHTJx4sSIdOnWrVuq8DLCQ++6666I9IEXJQESCC0BrNdD0fTixYuH9kJsnQRIICACFHsB4ePJJEACJGA/AngBmzp1qrz11lty4MCBsHdw9OjRqvzDsGHDwn5tXpAESCD0BFCyBWVYmJwl9Kx5BRIIlADFXqAEeT4JkAAJ2JAASh0MHTpUHnroITl//nzYeoiaW1999ZVMmzZNjAq2h60jvBAJkEDICMCrB6tWrVrIrhHKhpF5eO/evaG8BNsmAdsQoNizza1gR0iABEgguATatm2rsnJ+9NFHwW3YpDWIyrFjx6oafTlz5jQ5iptJgAScTiBbtmxSsWJFvzP1Rnr8EHpFihSRGjVqqOcjhV+k7wivH0oCFHuhpMu2SYAESCDCBBo3biz9+/cPSy9Q+uGHH35QhdppJEAC0UsA5VjWrVsn5cuXd+wgsbY4Li5OXnvtNQo/x95FdtwKAYo9K5R4DAmQAAmQAAmQAAmQQFQSoPCLytvKQf0/AYo9fhVIgARIgARIgARIgARIQCNA4cevQbQRoNiLtjvK8ZAACZAACZAACZAACQRMgMIvYIRswAYEUtqgD+wCCZAACZAACZAACTiKwIIFC6Rbt26qzxcvXhRkeCxWrJijxhCrnb169arPQ9eFH9b59e7dW2UiRRKsRx55xOe2eAIJhJMAxV44afNaJEACJEACJEACUUEAAg/15lzN/feoGCgHkYSAu/ArUKCAlChRQmX1LFSoUJLjuYEEIkmAYZyRpM9rkwAJkAAJkAAJkAAJOJYAhN+xY8fk6NGjsn79erl586Zjx8KORycBevai875yVCRAAiRAAiRAAiRAAiEikDlzZmnZsqUK5YTIu3DhgrRo0SJEV2OzJOA/AYo9/9nxTBIgARIgARIgARIggRgh4CrwUMM0TZo0auSbNm2KEQIcphMJBCT2un8wVeIlj9y8etGJY2efScB2BOJ37ZGzB+PlmeFrwtq3/RuOS9yBNDLncHivG9ZBerhY8lRpJUvGrTLvEy6094ApaLt+/fVXmTRpkpoRb9KkiaRLly5obbMhEggXgUaNGkl8fLy63Jw5c2Ts2LHy008/hevyvE4ABCDOatWqZakFM4Fn6WQeRAI2IBCQ2Lt2/Zbsi/tWTu5cboOhsAsk4HwCt25el1s3bsiZgy+HdTA3r1+VZMmSyaF/fgnrde1ysULFy0v2Jr3t0p2o7wfCnSZOnKg+mTJlkubNm1P4Rf1dj74BpkqVSrJly6YGljFjRnH9PfpGG10jgoDzZBR4nuhwn9MIBCT2tNKTcv3qBblx5YLTxs3+koCtCdy4cj3s/buFK2qiLxbt1rVLkjplilgcesTHfO7cOQq/iN8FdoAESIACj9+BaCUQoNiLViwcFwmQAAmQQLgJUPiFmzivRwKxTYACL7bvf6yMnmIvVu40x0kCJEACDiLgLvyQ5U5f45c2bVoHjYRdJQESsBuBXLlyCdYOuyZZsVsf2R8SCBYBir1gkWQ7JEACUUdg+vTpzLIWgru6du1an1qF8JswYYL6YI0fhZ9P+HgwCZCAG4HcuXOrsgk0EogFAhR7sXCXOUYSIAG/CCCzHgQGzT4EKPzscy/YExIgARIgAfsToNiz/z1iD0mABEiABAwIuAo/zNSPGjVKWrdubXAkN5FAaAksXLhQdu7cKUOGDAnthdi6LQksWrRILl++LP/8849UrlzZln1kp2KXAMVe7N57jpwESIAEHE0gffr00rRpU7WWr1mzZpIhQwZHj4eddy6BmTNnypYtW6RPnz7OHQR7HjCBlStXUuwFTJENBJsAxV6wibI9EiABEiCBkBGgwAsZ2pA0vG/fPtm1a5fUrVs3JO2zURIggdAQOHv2rCxevFgaNmwoadKkCc1F2GpYCFDshQUzL0ICJOBEAu3atZOKFSs6seu27jMStGA9pFWjwLNKyh7HQeBNmTJFJk+eLHFxcfL4449T7Nnj1rAXJGCZwOnTp1UyrKxZs6pkNoigoPCzjM9WB1Ls2ep2sDMkQAJ2IoD/6PChBZcAkt54E3vp0qVTIZqPPvooQzSDiz8krbkLvFu3boXkOmyUBEggvAQg+r777jv1ofALL/tgXY1iL1gk2Q4JkAAJkEBABHSBhxnk5s2bcw1eQDRDfzIFXugZ8wokYCcCFH52uhvW+0KxZ50VjyQBEiABEggyAQq8IAMNcXMUeCEGzOZJwCEEKPwccqO0bgYk9lKmTCWZs+aUZLnzO2fE7CkJ2JjAlcsX5dqVK5IxS7aw9vLC2dOSIlUqSZsuNrMZZsqWU65evxFW5rF8MQi8hx9+WK0BoQfP/t+EQAXetWvX5NSpU7YdaIoUKSRz5sy27R87Fr0Erl+/LighY0c7c+aM5W5R+FlGFZEDk2lx9X4H1vcbu1xmrdwtmdOnjkjneVESiDYCR7culRO710i5Jr3COrStC76WjDkKSv6KjcJ6Xbtc7Pzla5I6ZQpZ8sVjdukS+0ECESUQqMBz7TzW+eBl0K5WoUIFWb9+fUDdK1eunGzatCmgNniy8wmMHDlSevToYXkgS5culdq1a1s+3mkHco2fPe5YQJ69QV3vE3xoJEACwSEwYcI1+f33E/Ljp22D06DFVp57boHghadHj/Be12L3eBgJkEAYCBw8eFAmTZqUkEUzgLngMPSWlyABErA7ATOPX5MmTSRlyoAkiN2Hbqv+JbdVb9gZEiABEiABEiCBiBDInj27FC5cWH1YoD4it4AXJYGoJZA3b96E5wuFXnhvM2V1eHnzaiRAAiRAAiRgSwJYS9mmTRv1uXTpksyaNUt5+WbMmCHnz5+3ZZ/ZKRIgAfsSKFOmjFqbjU/58uXt29Eo7xnFXpTfYA6PBEiABEiABHwlEEzhl0pL/pQtW3iTTvkyXiZn8YUWjw0mAXi47Pq3cfPmTfElSYvOhQIvmN+Q4LRFsRccjmyFBEiABEiABKKSQKDCr2HDhvLjjz9GJRsOigQCIVCjRg2Jj48PpImQnYskTYUKFbLUPgWeJUwRO4hiL2LoeWESIAESIAEScBaBQIWfs0bL3pIACZgRoMAzI2O/7RR79rsn7BEJkAAJkAAJ2J4AhZ/tbxE7SAJBJUCBF1ScYWuMYi9sqHkhEiABEiABEohOAp6EX3SOmKMigdggQIHn/PtMsef8e8gRkAAJkAAJkIBtCLgLv127dtmmb+wICZCANQI5cuSQDRs2MIumNVy2Pop19mx9e9g5EiABEiABEnAuAQi/cuXKOXcA7DkJxCgB1NpkuYTouPkUe9FxHzkKEiABEiABEiABEiABEiABAwIoJXHr1i2DPdG/iWGc0X+POUISIAESIAESIIEQEujQoYNMmTJF+vTpE8KrsGm7Evjll1/k4sWL0qhRI7t2Meb6tWDBAunXr5+cPHlSTpw4oT6nTp2SLFmyxBwLir2Yu+UcMAmQAAmQAAmQQDAJVKxYUZYtWyZt27YNZrNsyyEEdu7cqQqQFytWzCE9jv5uIrHMK6+8InPmzJHRo0dH/4A9jJBhnB7gcBcJkAAJkAAJkAAJkAAJkICzCOTJk0dat24tn3/+ubM6HoLe0rMXAqhskgT8JVCrVq2IzAx269YtJkMb/L1PPI8ESIAESIAESMA6gWHDhinxFW7vZ6pUqax3MkqPpNiL0hvLYTmTQMGCBQWfcFuVKlXCfUlejwRIgASSELhx44YcPnxYrl69mmQfNqRIkULy5s0rqVOnNtzPjSRAAvYkMGLECMmXL1/YxZ49aYS3VxR74eXNq5GAzwQmTJggP//8s1pcjIXGxYsXFywGp5EACZBAtBCYOnWqDB8+XJYvX24q9PSxPvnkkzJ27NhoGTrHQQIxQQDZMGmRIUCxFxnuvCoJWCYAT1/VqlXl+++/ly1btki2bNksnxuuAz/9dIP2knZUXnyxvNSsmSdcl+V1SIAEHE4ASS06deokv/32m2TKlEnuv/9+SZ48uaxYsULOnj2rPHgPPfRQwijTpk0rXbt2dfio2X0SIAESCB8Bir3wseaVSMAvAljHh0/JkiVtment5s1b8tlnG2XPnnMyefIuueeenPLSSxW0vhaVVKmYA8qvm86TSCAGCEDoIVX933//Lf/5z3/kzTffFBRhhyGKoXHjxmpf586dpVmzZh6JnD9/XhYuXKgiIOrVqyeFChXyeDx3kgAJRB+BgwcPyqZNm+TatWty1113Sf78+aNvkH6MiG9ifkDjKSQQCQL6S1Akru3pmtOn71VCT7fVq49L+/Z/SuHCE+S99/7RXr4uezqd+0iABGKUwHPPPSerVq2STz/9VAYNGpQg9IAjR44c8tZbbykykyZN8kgIqdXxYof09+vWrZOyZcvKtm3bPJ7DnSQQTQQw2TFy5EipXbu25M6dW5IlS2b6wZpXTKZEky1evFhFBbRo0UL++usvgegbMmSImig6evSoT0NdsmSJoG5miRIlJE2aNKYc8U6GZ5cTjJ49J9wl9pEEbEzg0083Gvbu0KGL0rfvann33TXag7OE9OpVXipUyG54LDeSAAnEFoFZs2YJ1iPDs/f8888bDr5cuXJqO0ScmZ0+fVoee+wxVU/rxRdflLffflsuXbokhw4dUtEQNBKIdgJLly5VodC7d+9WWbUh9i5fvqzCoGFFixZNtPyjVKlSUZV9+4svvtCiiV6S3r17y/vvv6/EmW54drRr187SV+DcuXPSs2dPtWQGiaCKFCmiWO7fv1+dnzFjRgE73dKnT6+W2DjB6Nlzwl1iH0nApgSOH78s+/ad99i7y5dvyNdfb5GKFafIAw/8LvAEIvSTRgIkELsE3n33XTX4119/3RQChBwML15mtmDBAsFxDzzwgDrknXfekSNHjkjdunXNTuF2EogaArNnz1bffWSvRSK348ePy9atW+XYsWNKAMEqV66svF3658cff5SUKZP6evbt26f9/zxd1qxZ4xg+U6ZM0SaSe6m/9w8++CCR0MMgUOZhwIABXscDodekSRP54Ycf5IUXXlACb/v27dr7zT5ZtmyZijRAaOjkyZMTOMKbCE+qu128eFHgHfz9998FHlc7GMWeHe4C+0ACDiWQM2da7YH4mEyb1kh72ObzOor58w9Ky5aztdmxSfLJJxu0mUfj9OpeG+IBJEACjiWAFyhk3cyePbtHUbZx4+2oAU/laPQQLaR0hyG5S65cucLOBrP8KOJMI4FwEdixY4c88sgjkjNnTlm5cqW0adNGWyd/u6Ycwg8//PBDVaYE2bvj4+NNuwWh+Oyzz8rjjz+uvIH169dPCKE2PckGO+DBf/nll+XWrVvKs29mlSpVMtuVsB1Jn/BMQgF2fMBNt/vuu09FDVy5ckUglD0ZxDfENQTi+PHjVUi5Pmnl6bxQ70sq7UN9RbZPAiTglQBm5fbs2SMZMmRQoUi+FgXFzNLmzZuThB3gwpj5Q7gH4tGDkdkzefJk0qpVYfVZu/aklqxlg0ycuFN7MN4wHeeOHWe1h/MK6dfvLxXi2b17GW3NTQ7T47mDBEggeghg1huGxFPevHY4rkGDBqaDx4sezDV0y/TgEO5AUhh8aCQQLgJPPfWU8hzNmDFDChQokOSy8N5B6CBkGuGMmFwxsvfee095BSEeIaDQZlxcnNGhptvwzgEx5MlQeuHChQty6tQpT4dJ1qxZLf09Y1wHDhxQbdWsWdNjm552wlsHD2GrVq1MQ8pr1KihmvC0FhjeQBSNRygpvKoQz+gfPhhTJI1iL5L0eW0ScCOAGbjBgwer2Wm8OOBh/c8//6isdFayy+HFZ+jQoTJ//nzBbBTCNhCegAQHmP3DLBgeyGgLM1Vo10qIg9UbValSDhk3rq42huoyevQm7bNZC6m6aHr6+fPX/v+4TapkQ48eZbWZyiLaomjzsC3TxriDBEjAJwKnTl2RM2euajPPV9VP/XP69O3trvv0Y6tWzalN6NynlUTwPzAIYZYw1/Uv7h3HyyPKMeAlCS9Q7oYXU3gukHkPhkyeWFPjpKQJ7mPi784lgJd7feIhHKPA//EII4QIQWISM9MF2PXr180OUe8HEEv4W8MH4YsIW7Rq8GCh9qUVe+aZZwQfT1a9enXlqfRm+qQRvJhYq+iP4Z4hORSsb9++pk3o4ZieBC2eVxDLEI2wr7/+WstZ8K4tishT7JneWu4ggfARuHHjhloYjIfDV199laSO1IgRIyyJMsSaw2OH7HQwtFuhQgVNRPVQ2yEg8eKEWPKBAweqByrCN1xDFoIx6ty500n//lWlT59K2n8kO1VphjVrTnhsetmyI1rowxFNkKKOVmmtX2W0BdKZPJ7DnSQQqwSwFtaTKLMi4Hxl161baS3E6b6AS6rccccd6tKenjt45mGi6qOPPjKcFUfIJF4aMSOPBBUIPYMXw5On0Nfx8ngSsEoA9R/DaUgiAoP3yJPpkyF6mLPRsZh8wd+PbkhM4ouhD1WqVFFr2jxZ8+bNlecMa+M8mdVyCYiAggXiNcP6RISLY22fp2QriJSCGXlQ9bHgeQXTI6YQmYV27WAUe3a4C+xDzBNAjakvv/xS1ZoyKhgMIYjwAdScMrO5c+cqTyA8drrhxQcx4wjRwMMcXj/YxIkT1YJuPJSCEcpp1id46Dp1Kqk+ixcf1l4UN2rrB/ZoItQ8QQuSvgwZslabtV+n/adwp/L2NW16p+bt/F+GLbPrcTsJxAIBRC5WqfKzFqp9O4FJqMeMv73Bg6tp2e7uCsqlkEwBz6q9e/catgevHUKh8HLo+jxzPRhePLycoXQDDF5CTy9rhhfiRhJwKAEkJoK5ijT3ocBDByFXuHBh8bTu1f08X3+HZ61ixYpeT0udOrXKcBmsv9NMmW5PBsOb5q/BQwrTEzyZtaN7EevUqWN2iK23U+zZ+vawc7FAADNvEGEQZsgqZWZ4QcLCYTNDKAI8du6GtX8w1xlA1K9CKCdSlodrRrJOnbyCD2ryjRy5SVu8vFVbP2hegw8ZO2fO3Kc+hQtnkqefLq0J4VJaEoT07kPk7yQQUwSQWfyZZ8poXvAVIR93hgwptVTk9bWIgMJBuxaePfDKofRC//79E004bdmyRRVQx8vXd999R09d0Kizoa14aUwAABVRSURBVGgigNIieGfwVF7kv//9rxoy/u83WtOKGnEQgyjTgCifPn36qOMRhqivUbMzM9TWhCGpDKKY/PHqgyPME8cTJ06opTFYCoNSMe62du1a+emnnxJCT7E0BgIY0Qd6RlT3c8L9u/9B9+HuKa9HAlFKAB49PKjKly8veniT0VAxK2ZmWPT84IMPSubMmRMdgnb1MA7XuH54+7Ao28psnNk1/d0O4TZ0aHUttXF7Lc1xfbVWz5tBIL799mot7OsHefjhuUoAevIOemuP+0nA6QTgLU+XLrTztfnypZdFi1oGVejp3D/55BOVSRBJWkaPHq3CMRHBgIyC/fr1E7yoYv0djQRIICkB/G1ATJi9F8DbNWrUKLX2DvXnjAyCDpMq8LIjwgf/xsdTqKJRO5HahiUp+jNCz9zra18QIQCD99PMUMcPIaqYmDJ6JuE+gFvx4sVVE/fcc4/63U6CmWLP7O5yOwmEicCiRYvUlTytX/HWFcSGw1vnbphxwkMf8fpYs2cnQ4hn+/bFtfU2LbUsng9rGTnLagkWbqeN9tTPqVN3azP/f2hhKT+qou07d94uHOvpHO4jgWgjkD17Gm3iw7e1Nb4wQLKluLjWWsjV7fV1vpxr5Vi8pI4cOVJFIyAcCwlZOnfuLP/++6/6aeSJsNIujyGBWCCA+m5Ys2aWeAWJQeC1w9o+s6UarmJPFyxOEnuunjPUxzMzlEEwM0w2wfSkUe7HIaT8448/lhYtWqjcB0bmLvbQJsWeESluI4EYJnD48GE1en+zSXlCp8f1IwTUzoayC6NG1ZKDB9vLiBG1pFy5bF67e+jQRc07+Y8mYn/SspFN1+rfIG20ecYxrw3yABJwGAEkMQqFtWhRSCsK3FKb4c8QiuYTtYkZ9fbt22vrejtJtWrVKPJCTjz4F0AYINaA08JHANlnUcpg2rRpSS6K5EYQKAiDRsRPNBsSzSGrOJa4oE6euyHXgR6ein0oQeFqCMu8++67VRimezZVlKgCP4g31NdDlnSnmnN77lTi7DcJuBHQQy9D8Z/lwoUL1dXsLvZ0JJkzp5bnniurZcdqq4WPtZB27Yp5TfGOZBVI/tKhw58qzLNHj6VaIhvPmT/5JSSBaCBQq1YeSxMjvoz15ZcraC+QjSx52X1pl8dGFwGkx4dQ18tdIAyXFj4CECBYAoJ1/vCQr1+/XnnJ4YGCMFmxYoU88cQT4etQhK6EGsQoeYBEThBmyF2AklP4IMkTsn/qmUvRRZSkQuZQfRsEHEpeYd0feCERCxLhoR3U93zuuedk+vTpKvrAyRbagH8nk2HfSSBMBLBWD6ECeNgE07Bez1MGqQ0bNqi0wOnT2zPhiZ7Q5ejRS/LNN1tk7NitXkM2URfsdn2/TVrJieyqYHuXLiUlVy6u/Qnmd4tt2YcAvHu9eiWd0fa1hylTJpfhw+9T4dROMHg1MGuPhC4wvNwhXB2fcCWdcgKnUPURa75RLBrlfmiRIYCi6ihjALGCZEe5c+eWd955R5UgiSVDSDiS3L322mtK8P7666/qvebee+9V9TdRG+/tt99W6xeRFwE/XfMVoNQDnh8zZ84UZDVHoheUrEJIudEaPSeypdhz4l1jn6OKQNu2bdXDWk+kYjY4s9h8HI/wg4MHDyZaWI2HFwQkHmRGxYsxE2aUvdPs+pHajpp9b71VWXtoV9a8fYe0WoRbZOrUPV5DNjdsiJc33ohTiV0aNSqgzdoVV4km0qfnYy9S95LXDS6Ba9duahni0mkvJ8kCSliUJUtqLSHKA+rvxCmGtchvvPGGSkqFzJ6Yjcf6Z7zsYgKNFloCWJMEmzp1qvJ80CJDAP+/I7ERTbRJ3VyGxd0x+YM1jJ4MSWpatmypPtFofOuJxrvKMTmKwKOPPqrVsBos8LQh7NIs5HL16tWm44JgRC09CDikU4ZNnjxZ/TR68cF1EIbjpFkrpJuvWzef+sCDN2HCDuXx8xayef36zYQSDkgAA8EHj1+DBvnVSzKNBJxEAGHLy5cfUd//SZN2ycmT5uVLrIyrWLHMMmNGEyldOquVw21zDJJSYQafFlkCTg9viyy92Lo6smeWK1cutgZtk9FS7NnkRrAbsUsAM0oQZojBR00WZI7Ci4yrocbL+PHj1aZ9+/apNMCIVYedOnVKCT2YLt4QXoOZ7jvvvFNluXM1ZPCCuHTyGgt4IlBsHR948MaM2aKtU9gu8fFXEo3V/Zfz569psfrb1Sdv3vRqTSCEX5Uqock46H59/k4C/hJA1tlx47Yqkbd79zl/m0l0Htb8YX3eHXekDUp7bIQESMA5BPBugDpzSLCDpSRHjx5VIY54JwmF6RPRoWg7km0ipPz48eOydetW1Q2EloOj+3tcJPuYTAv/0uYJaSRAApEmgCxRXbp0UaGXWFiMDFF4gCAWH2tTUH8KWetgKEqMUgpjxoxRi+Rr1qypsqEhHBTtQMwhO9XmzZtVLatvv/1WkKoZohGLt1F/p2jRopEeclCvf+XKDW2mf6/GZLP8+echLVOZ9UdbmTJZtQLzxaRjxxIal8S1CoPaSTZGAj4QwHd6ypTdyoO9cOEhLVzbh5O9HIpJjq+/rqMV/03h5UjuJgFzAvg/Cf9H4f+VWEgIYk7CeXvwnjBv3jwVCg3Bgnq98LxFqygL1R2CUH7yySdVEhckLDp9+rRiiUl4lGWwg1Hs2eEusA8k8P8EMPeydOlSmTNnjqAkAxZc66l/161bp8SdvsAYM0fNmjVTJRvwYIHnDxm5EMOPejA5c+ZUrWKWCf8RQzii2Cf+c472BAb79p3XCrZvV5/Nm0/79P2Cl++RR4pK27ZFtSKpFH4+wePBQSHgi7fa1wsiHHrgwLu1GpVVtDIHvp7N40kgMQGKPX4jSMD+BCj27H+P2EMSIIEACKxZc0KJvp9+2qkJ6MQhrd6aRWFpXfiVLJnF2+HcTwJ+E0CI8cSJO5UXLy7umOV2smZNrb6jrVoV1rzT87SJH/Nak2nTptBCQeuq8GUaCfhCAEWnV65cKSdOnJCCBQtKvXr11FICq2IPCcawVnzv3r1qHTnWjOuGiUgk18HyBLRrF2+IL3x4LAnYmQDr7Nn57rBvJEACAROAp+7jj++V/fvby+zZTVWoJhK1WLG1a09qHpDVWjbTSXLXXVO0jF5rNE+pb55CK9fhMbFLYNWqY1o2ycWqRiR+WhF6CL1s06aIFibUUI4c6ah5/OtoXv6CKhTZzFB+5M8/m1PomQHidkMC27dvl4ceekjVJ8OyAESW7Nq1S0t01VrVN7NiWD+OxGNr165VIYOoDdehQwcVOohU9927d1f/xvpzpMSfMWOGlWZ5DAmQgEUC9OxZBMXDSIAEoofAxYvXtcQUe1SyizlzDggydvpiRYpk0ma0S2hpmgtpaytzMhzOF3g8VlvTcVV5m7G+dP36eMtEqla9Q5usKCmdO5cUePTcDcKxevVf3DerwuvTpzcRfG9pJGCVALxtrVq1UnXbkPkUQk03eOpQ8gJiDQnBzNbsoaTQs88+qwQclhzAsCQBbQ4YMEAV/0bpBiQFqVGjhqxatUrVjps1a5bVbvI4EiABLwQo9rwA4m4SIIHoJnDs2CUthf1OlQhj6dIjPiV2ARlk9WzevKC0aFFIlXNgHb/o/r74OzokV1m8+LAK08R37dIl83BL12sg8yySqTz1VCmpXNl71thKlX7WXqZPJjSB2nmooYd2aCRglQCyPleuXFkl/kLoZfbs2ZOcCsGHRGF79uwxFHtYg96iRQu11jxv3rwJ5yMUVF9T/scff0jjxo3VunN4DZEZErUS+/btm+R63EACJOAfgdDkV/WvLzyLBEiABMJOAOFtL7xQXn2OHLmohcbtVi/jS5YctlSoGusAUfoBHwg9CD4IPwhACEFabBNAsqBvv92mPiifYNXq1MmrBB4SBaVLZ/2/6u7dy2gJmpaqy3TvXlaGD79P85pwxYZV7jzuNgGIrfj4eO07+JSh0MNR8MaVLVtWiT0jQ6bHChUqJBJ6OA5Jw2DwFOrF2ZGmHmv6IASbNm1q1By3kQAJ+EnA+v8gfl6Ap5EACZCAUwjkyZNeevYspz5Hj16SqVMh/HZpyQOsCT+Eh06fvld9kOkQIZ4PPHBb/FWrlotF3J3yRQiwn0i2ggkD1MXDpIHVkgmYeOjUqYQK0yxfPqknxUq3EF7cp88q6d+/qrz8cgUrp/AYEkhE4Pz58wl1WBFa6cmSeUjpinV4COF0t3///VdtQm3ZFCn+V/rDNWmL+zn8nQRIwH8CFHv+s+OZJEACUUwgd+50CYXbEeqJNX4QfgsWHLLk8cML/urVx9Xngw/WqjVW9evnl4YN8SkgxYqxrEM0fX1Q1xH1HceP36rVu9zjMSum67iTJ0+mvMFPP11aS4RRWFKnDswLlylTKlmzpg3rRUbTlyvMY0EJn0uXLqmrIrTSX0N4ppGhvBDs/vvvN9rNbSRAAkEmQLEXZKBsjgRIIPoIwOPy7LNl1Ofkycsyc+Z+5b2bPfuAnD171dKAkZQDnkJ8YBB7EH0Qf3jZ55oqSxhtddCNG7eU13fatN2ayNsm8OhZtXz50kvXrqW1T6mgJ04pWpQTCVbvA49LSuDkyf+t+XRNypL0SP+2IFwThgydNBIggdAToNgLPWNegQRIIIoI5MiRVpVvwOfq1Zvay/4hTfjtU+Jvz55zlkeK9Vs7d26S0aM3qfBOiD9k96xdO68W3pRHWyeTxnJbPDB8BHDP588/qEQ7PHgnTly2fPFUqZJr65EKKoGHUgm47zQSsBsBV4Gne/iC1ccdO3ao7J24RtWqVYPVLNshARLwQIBizwMc7iIBEiABTwQQcnfbO1dAPv/8PpVGH6Lvt9/2yl9/Hbec2RMeom3bzsiwYevVB6F9Zctm08Kcbgs/JOuAJ4gWGQLInAkvLpL3zJixV5VO8MVQMqFLl1Kqxt0dd6T15VQeSwJhJ4CyCCiYjiLnSNISTFuwYIFqrnbt2onW62EbsndOmTJFS0rUNpiXZFskEPMEKPZi/itAACRAAsEiULFidq0ocHZ5++3KKrPnH38c0OpQHZB58w4K1v1ZNaz/2rgxXn1GjLidzACePyR8qVs3r9xzTy51HXiKaKEhsGXLaSXwUIdx5sx9Pl8E4hw18Tp0KO53shWfL8oTSCAIBFAPDyUTpk6dqmridezY0bRVlF8ws23btmnPvWMqEYtu8+fPV/80Wq+H8M7Vq1dT7JkB5XYS8JMA6+z5CY6nkQAJkIBVAkjWsnbtCSX6IB5Qz+/y5RtWTzc8Lm3aFFph4hxKAN5zT071s3TprMorSPOdwIEDF9T6u99/36cVej7qU0iufrUMGVJqRagLCzJior4dwzR9vw88wx4ENm/erD1T7laF0Hfv3i1p0iQNK0eZhFKlSinv3/jx47Ussp0TOr9y5UqpU6eO8g4iIUvNmjXl3LlzkidPHrl48aK2znWaKtiuG7x6bdq0kVGjRqljaCRAAsEjQM9e8FiyJRIgARIwJIDs5CiIjU/v3ndpLzvXleCD1w/ib8OGeMvp+fULQCyuXHlMfXRDJsaSJbOoNX9I3Q/vH8JBM2ZMZdivWN2IsFl47pYtO6KE3eLFR2TXLus18Fy5ZcuWRq21hMhr3LiATzXxYpU/x21/AmXKlFECrkOHDlopmp7y1VdfaRNJ/4skOHv2rNqXMWNGJfbi4uLU73opBQg8CD2szStSpIgacP/+/aVXr14yePBgrbTN0UQQBg0apK1jbUahZ/+vBnvoQAL07DnwprHLJEAC0UXg+PHLSvwtXnxY1WVbu/akpfIOVihAaBYpklkTf9mkXLlsmgDMIcWLZ5YyZbIJPFHRbtev35Tt28/KqlXH1JpKrKVcs+aET5kz3RkhOyvE3cMPF5F69fIxnNYdEH+PGgIrVqyQ559/Xok21MzLmTOn9ne0XluX/JsMGDBAPvzwQ80b/rsaLwqjw5s3c+ZMQSIW/Ltbt27qJ9biFS1aVF5//XUZOHCgjB07Vj7++GO1Tg+iEkKvR48eUcONAyEBOxGg2LPT3WBfSIAESEAjcO7cNeV1WrIEn8OaUDkuV64EFvZpBBZF5CH8sB7Q9VOoUEZtht1ZCWFQAmP37nOyadMp9RPeUvwbHjxk0AzUChfOpK1jKqQEHjynDNEMlCjPdxKBv//+W5skWaNCMOH1a9CggfLiIRzz9OnTkiNHDlWTL2/evAmevDNnzmgJq6bL8ePHtUmRelrYeaWEIaOw+uLFizVPeDp58MEHJXfu3E7Cwb6SgKMIUOw56naxsyRAArFIACGbKM4eF3dMeabgpYKgCaWlSZNCe3FLL/nzZ1A/kXDk9ieDqgmI7SgUjw9CGUO1VhDrHZHc5vjxS3L48EUt/OuS+n3TptOaKL4t8HbtOqfqHwbT0qdPqSXDyafW3iE8E+shaSRAAiRAAiTgNAIUe067Y+wvCZAACWgEUN8NAhDiT/8JMRQpy5wZoi+1ujzKC0AQQgAikUy6dLfDRfV/o/j4tWuJvW3x8VdUSNeZM1e1QvXXVJglPvByhsPQxxo1cmkhZ3lVyYt7782t+k4jARIgARIgAScToNhz8t1j30mABEjAhcD+/edV+KL++fffUyqUMRhhjNEGukCBDCqDabVqubSaX3lURlN4M2kkQAIkQAIkEE0EKPai6W5yLCRAAiTgRkBPUIKafRCBEIDbt5+RnTvPqqyg0W56ghokp7nrrhxK1OGD0FQaCZAACZAACUQ7AYq9aL/DHB8JkAAJmBBA2OeOHWeV8HP97Nt3Xlsbd9HnchAmlwnLZpSdKFoUad4zqaQzKDmB8hP4GQtZR8MCmRchARIgARJwHAGKPcfdMnaYBEiABEJPAGvqkAzl4MELcuTIRdm///ZPFB9HMpTTp6/KqVNX1M/Tp6/IhQuh8RJCqGH9H7KDwhuXM2daLVFMBkH5A/wOcYcP1gnSSIAESIAESIAEEhOg2OM3ggRIgARIIGACWBcI0YekKhCAyKJ5+fJ1uXTphkq8gm3ulipV8kQF3zNnTqV+xweeuqxZ0wjCMGkkQAIkQAIkQAL+EaDY848bzyIBEiABEiABEiABEiABEiABWxNIbuvesXMkQAIkQAIkQAIkQAIkQAIkQAJ+EaDY8wsbTyIBEiABEiABEiABEiABEiABexOg2LP3/WHvSIAESIAESIAESIAESIAESMAvAhR7fmHjSSRAAiRAAiRAAiRAAiRAAiRgbwIUe/a+P+wdCZAACZAACZAACZAACZAACfhF4P8ABcXT6fISq5cAAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Infinitesimal bond segment\n", + "Let us now consider an infinitely small segment of the bond zone and employ the usual model ingredients, i.e. equilibrium, constitutive laws of the components and then the kinematics\n", + "\n", + "\\begin{align}\n", + "\\mathrm{d} \\sigma_\\mathrm{f} A_\\mathrm{f} &= p \\bar{\\tau} \\, \\mathrm{d}x \\\\\n", + "\\mathrm{d} \\sigma_\\mathrm{m} A_\\mathrm{m} &= -p \\bar{\\tau} \\, \\mathrm{d}x\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Equilibrium \n", + "In the halfspace $x \\in (-\\infty, 0)$ the governing equations take the folowing form:<br>\n", + "\n", + "In constrast to the case of rigid matrix we have to account for equilibrium in both components (m,f). Thus, an additional equilibrium with inverse sign of the shear stress flow must be added\n", + "\\begin{align}\n", + "\\frac{\\mathrm{d} \\sigma_\\mathrm{f}}{\\mathrm{d} x} &= \\frac{p \\bar{\\tau}}{A_\\mathrm{f}} \\\\\n", + "\\frac{\\mathrm{d} \\sigma_\\mathrm{m}}{\\mathrm{d} x} &= - \\frac{p \\bar{\\tau}}{A_\\mathrm{m}} \n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\frac{\\bar{\\tau} p}{A_\\mathrm{f}}, \\ - \\frac{\\bar{\\tau} p}{A_\\mathrm{m}}\\right)$" + ], + "text/plain": [ + "⎛\\bar{\\tau}â‹…p -\\bar{\\tau}â‹…p ⎞\n", + "⎜────────────, ──────────────⎟\n", + "âŽA_\\mathrm{f} A_\\mathrm{m} ⎠" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d_sig_f = p * tau / A_f\n", + "d_sig_m = -p * tau / A_m\n", + "d_sig_f, d_sig_m" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Following the same procedure as in the worksheet [2.1 Pullout from rigid matrix](2_1_pullout_from_rigid_matrix.ipynb) let us integrate the equilibrium equations to obtain the stresses in the components" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\\begin{align}\n", + "\\sigma_\\mathrm{f}(x) &= \\int \\frac{p\\bar{\\tau}}{A_\\mathrm{f}} \\, \\mathrm{d}x = \\frac{p \\bar{\\tau}}{A_\\mathrm{f}} x + C \\\\\n", + "\\sigma_\\mathrm{m}(x) &= \\int \\frac{p\\bar{\\tau}}{A_\\mathrm{m}} \\, \\mathrm{d}x = \\frac{p \\bar{\\tau}}{A_\\mathrm{m}} x + D\n", + "\\end{align}\n", + "with $C$ as an unknown integration constant. In `sympy` we can issue the `sp.integrate` method to perform the automatic integration" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( C + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f}}, \\ D - \\frac{\\bar{\\tau} p x}{A_\\mathrm{m}}\\right)$" + ], + "text/plain": [ + "⎛ \\bar{\\tau}â‹…pâ‹…x \\bar{\\tau}â‹…pâ‹…x⎞\n", + "⎜C + ──────────────, D - ──────────────⎟\n", + "⎠A_\\mathrm{f} A_\\mathrm{m} ⎠" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sig_f = sp.integrate(d_sig_f, x) + C\n", + "sig_m = sp.integrate(d_sig_m, x) + D\n", + "sig_f, sig_m" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Constitutive laws: \n", + "Both matrix and fiber are assumed linear elasticwith the Young's modulus $E_\\mathrm{f}$ and $E_\\mathrm{m}$, respectively\n", + "\\begin{align}\n", + "\\varepsilon_\\mathrm{f}(x) &= \\frac{1}{E_\\mathrm{f}} \\sigma_{\\mathrm{f}} = \\frac{1}{E_\\mathrm{f}} \\left(\\frac{p \\tau}{A_\\mathrm{f}} x + C \\right), \\\\\n", + "\\varepsilon_\\mathrm{m}(x) &= \\frac{1}{E_\\mathrm{m}} \\sigma_{\\mathrm{m}} = \\frac{1}{E_\\mathrm{m}} \\left(\\frac{p \\tau}{A_\\mathrm{m}} x + D \\right).\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\frac{C + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f}}}{E_\\mathrm{f}}, \\ \\frac{D - \\frac{\\bar{\\tau} p x}{A_\\mathrm{m}}}{E_\\mathrm{m}}\\right)$" + ], + "text/plain": [ + "⎛ \\bar{\\tau}â‹…pâ‹…x \\bar{\\tau}â‹…pâ‹…x⎞\n", + "⎜C + ────────────── D - ──────────────⎟\n", + "⎜ A_\\mathrm{f} A_\\mathrm{m} ⎟\n", + "⎜──────────────────, ──────────────────⎟\n", + "⎠E_\\mathrm{f} E_\\mathrm{m} ⎠" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eps_f = sig_f / E_f\n", + "eps_m = sig_m / E_m\n", + "eps_f, eps_m" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Kinematics: \n", + "Realizing that\n", + "\\begin{align}\n", + "\\varepsilon &= \\frac{\\mathrm{d} u}{\\mathrm{d} x}\n", + "\\implies \n", + "u = \\int\n", + "\\varepsilon \\mathrm{d} x\n", + "\\end{align}\n", + "we obtain the displacement fields of the fiber and of the matrix as an integral\n", + "\\begin{align}\n", + "u_\\mathrm{f}(x) &= \n", + "\\int \n", + "\\frac{1}{E_\\mathrm{f}} \\left(\\frac{p \\tau}{A_\\mathrm{f}} x + C \\right) \\; \\mathrm{d}x =\n", + "\\frac{p \\tau x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}} + \\frac{C x}{E_{\\mathrm{f}}} + E \n", + "\\\\\n", + "u_\\mathrm{m}(x) &= \n", + "\\int \n", + "\\frac{1}{E_\\mathrm{m}} \\left(\\frac{p \\tau}{A_\\mathrm{m}} x + C \\right) \\; \\mathrm{d}x =\n", + "\\frac{p \\tau x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}} + \\frac{C x}{E_{\\mathrm{m}}} + F \n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\frac{C x}{E_\\mathrm{f}} + E + \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}}, \\ \\frac{D x}{E_\\mathrm{m}} + F - \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}}\\right)$" + ], + "text/plain": [ + "⎛ 2 \n", + "⎜ Câ‹…x \\bar{\\tau}â‹…pâ‹…x Dâ‹…x \\bar\n", + "⎜──────────── + E + ───────────────────────────, ──────────── + F - ──────────\n", + "âŽE_\\mathrm{f} 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f} E_\\mathrm{m} 2â‹…A_\\mathr\n", + "\n", + " 2 ⎞\n", + "{\\tau}â‹…pâ‹…x ⎟\n", + "─────────────────⎟\n", + "m{m}â‹…E_\\mathrm{m}⎠" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "u_f = sp.integrate(eps_f, x) + E\n", + "u_m = sp.integrate(eps_m, x) + F\n", + "u_f, u_m" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**What's next?**\n", + "\n", + "To resolve the constants let us apply boundary conditions and compatibility conditions " + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAC6CAYAAAD729nkAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnQm4FMX1t4tNVgWUzZ3NLbKoKIKyKy4sKqAooCgSiRrcURaJRgkKJBoVwgOouMQVCIgKRMSAiIKgggsoCipEUAFFVgGB+5+3vjTf3JnuuT0zPXNn+Z3nuQ9Md3VV9VszfeqcOqe6REFIjEQEREAEREAEMoxAyQzrj7ojAiIgAiIgApaAFJS+CCIgAiIgAhlJQAoqI4dFnRIBERABEZCC0ndABERABEQgIwlIQWXksKhTIiACIiACUlD6DoiACIiACGQkASmojBwWdUoEREAEREAKSt8BERABERCBjCQgBZWRw6JOiYAIiIAISEHpOyACIhAXgQ0bNphevXrFdY0Ki0AiBKSgEqGma0Qgjwns2rXLLFiwII8J6NbTRUAKKl2k1Y4IiIAIiEBcBKSg4sKlwiIgAiIgAukiIAWVLtJqRwREQAREIC4CUlBx4VJhERABERCBdBGQgkoXabUjAiIgAiIQFwEpqLhwqbAIiIAIiEC6CEhBpYu02hEBERABEYiLgBRUXLhUWAREQAREIF0EpKDSRVrtiIAIiIAIxEVACiouXCosAiIgAiKQLgJSUOkirXZEQAREQATiIiAFFRcuFRYBERABEUgXASmodJFWOyIgAiIgAnERkIKKC5cKi4AIiIAIpIuAFFS6SKsdERABERCBuAhIQcWFS4VFQAREQATSRUAKKl2k1Y4IiIAIiEBcBKSg4sKlwiIgAvlC4Pvvvze8PThR+fHHH83evXsTvVzXhQhIQelrIAIiIAIRBBYvXmxuu+02U6ZMmYTZ/Pzzz6Znz55m+/btCdeR7xdKQeX7N0D3LwIiUIjAqlWrrHIaP368KVWqlCudPXv2mLVr15qNGze6nufgSSedZK6//nrTo0cPs2/fPs9ymXhiy5Yt5uuvv07KggzivqSggqCoOkRABHKCAC69Ll26mMcee8xUrlw56p52795t7rzzTtOpUyczefJkM2LECHPOOeeY+fPnR5XlQLt27UzDhg3N0KFDXc9n2sHPPvvMXHjhhfYeX331VdO7d29z7bXXml9++aV4ulogEQEREIE4CKxZs6bgmGOOieOK7Cl6//33F/Tt29e1w/v37y9o3759weWXX14QsogOlPnkk08KDj300IJJkya5Xhdy8RUcddRRBaGHv+v5TDn48ccfF4SUcsH06dMLdenee+8tOP744wtCLsu0d9WkvUU1KAIikNUEclVBhYIiCipWrFjw1VdfuY5PyOVXULJkyYKQay/qfMjiKKhWrVrB1q1bo85xYNiwYQXnnXee67lMOIjybdq0aUHIMozqTshqLKhevXpB//79o86l+oBcfMVjuKpVERCBDCPw1FNPmVNPPdXUr1/ftWePPvqoadCggTn66KOjzl9yySVm06ZN5oUXXog6x4FrrrnGzJkzx3zzzTeu54v74LvvvmsIDDn//POjunLQQQeZjh07mqeffjrtAR9SUFHDoQMiIAL5SAAFFXLhud46imXFihWmZs2aruePPPJIezzkHnM9H3LxmZNPPtk8++yzrueL++CMGTNsFw4//HDXrnB/RCO++eabrudTdVAKKlVkVa8IiIBvAsuXLzd33323DU5wyz369ddfzZIlS3zXF29BFFDItWeaN2/uemlofcYer1Kliut5R3EtW7bM9TwHW7VqZd566y3P88V5wum31/2F3Je2e6H1trR2s3QQrZGQFivcMog2VIcIiEBmECC/J0h55513zJQpU0woQMGEAhAMkWQTJkwo1ATniJjbvHmzp5JIpk/0oUSJEuaMM85wreann36yx73yosqVK2fP4+bzkkaNGpknn3zS/Pbbb571eF2b6uNwRcqWLevalHN8w4YNrudTdTAQBUW2NOGXEhEQgdwnwAM2KAktsptx48aZZ555xpQuXdrs3LnTLFiwIKr6N954w9StWzclyonGVq5cabASvCyIbdu2RfXJ7QBssPbKly8fdbpGjRrWOgwFmXiuc0VeNGjQIPPhhx9GHvb9uVmzZiYUoFFk+VBwR5FlKOC3nK/KfBQKREH5aEdFREAERCCKAC4vXF8oJ2bnCxcuNF27di1Ujtk9Lrarr7466vqgDnz33Xeeyok23NyOXm0zWXdTUKFQdHvJt99+61tBde/e3TRp0sSrqSKPh8LDiyxDgR07dgRazldlPgpJQfmApCIiIAKpIVChQgXDQxjBzYc35oorrijUGEmwoTBo06JFi9R0IlQriahuiblOg24Kx6szKFs3cdZx/Fpj1HHaaafZv1RLpUqVfDURDwdfFRZRyJ1kERfptAiIgAgEQeCss846UA07M1StWtV0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vn37mu3bt9vGCW+/55577P/pvyQYAiVCYBNLHAimfdUiAiKQZQTYDLVly5Z2O6JEBOvovffes4qKnb8rVKhgvv32WzNx4kSzc+dO06FDB9OuXbtEqk7rNeyGMWvWLMP+e2wiizWFdagIvuCGQQoqOJaqSQTygkCyCiovIOkmAyEgF18gGFWJCIiACIhA0ASkoIImqvpEQAREQAQCISAFFQhGVSICIiACIhA0ASmooImqPhEQAREQgUAISEEFglGViIAIiIAIBE1ACipooqpPBERABEQgEAJSUIFgVCUiIAIiIAJBE1AeVNBEVZ8IiIAIiEAgBGRBBYJRlYiACIiACARNQAoqaKKqTwREQAREIBACUlCBYFQlIiACIiACQROQggqaqOoTAREQAREIhIAUVCAYVYkIiIAIiEDQBKSggiaq+kRABERABAIhIAUVCEZVIgIiIAIiEDQBKaigiao+ERABERCBQAhIQQWCUZWIgAiIgAgETUAKKmiiqk8EREAERCAQAlJQgWBUJSIgAiIgAkETkIIKmqjqEwEREAERCISAFFQgGFWJCIiACIhA0ASkoIImqvpEQAREQAQCISAFFQhGVSICIiACIhA0ASmooImqPhEQAREQgUAI/B++hbM39IJ3LAAAAABJRU5ErkJggg==" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Resolving integration constants \n", + "### Equilibrium at the loaded end\n", + "\n", + "\n", + "__Conditions 1 and 2__: Stress in the free length and at the support must be equal to load over area: \n", + "\n", + "$\\sigma_\\mathrm{f}(0) = P/A_\\mathrm{f} \\; \\implies \\; P - \\sigma_\\mathrm{f}(0) A_\\mathrm{f} = 0 \\implies C = P / A_\\mathrm{f}$\n", + "\n", + "$\\sigma_\\mathrm{m}(0) = -P/A_\\mathrm{m} \\; \\implies \\; P + \\sigma_\\mathrm{f}(0) A_\\mathrm{f} = 0 \\implies D = - P / A_\\mathrm{D}$" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\left\\{ C : \\frac{P}{A_\\mathrm{f}}\\right\\}, \\ \\left\\{ D : - \\frac{P}{A_\\mathrm{m}}\\right\\}\\right)$" + ], + "text/plain": [ + "⎛⎧ P ⎫ ⎧ -P ⎫⎞\n", + "⎜⎨C: ────────────⎬, ⎨D: ────────────⎬⎟\n", + "âŽâŽ© A_\\mathrm{f}⎠⎩ A_\\mathrm{m}âŽâŽ " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eq_C = {P - sig_f.subs({x:0}) * A_f}\n", + "C_subs = sp.solve(eq_C,C) \n", + "eq_D = {P + sig_m.subs({x:0}) * A_m}\n", + "D_subs = sp.solve(eq_D,D) \n", + "C_subs, D_subs # display the result" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**`sympy` explanation**: Let us explain the two lines\n", + "\n", + "__Line 1__: Defines the equation to solve $P - \\sigma_\\mathrm{f}(x=0) A_\\mathrm{f} = 0$ in curly braces `{}`. The resulting data type is a set. Set is an unordered container. The set was assigned to a variable `eq_C`. \n", + "\n", + "__Line 2__: Then we used the `sp.solve` method available in `sympy` package with two parameters. The first parameter is the equation to solve `eq_C` and the second is the variable `C` that we want to resolve. The result is obtained in form of a dictionary defining a key-value pair of the variable and the resolved expression. " + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Compatibility conditions\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Condition 3__: The displacement of the matrix at the support must be zero, i.e.\n", + "\n", + "$u_\\mathrm{m}(0) = 0$" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAAVCAYAAAAeql2xAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADHUlEQVRYCdWY/VFUMRDAgaEA0A7ODvyoQOhAtAKlAxn/4z8GOlAqYKADtAKBDqQDGTo4f79HknnJe5eLd6cztzO5/cwmm93sC2xOp9ONEo6Pj3eQvVYO/b3UrwPPvifs8yXjDvq+3PNWKcDoM7IfQX5T6teFD8Ea8Cn0NcNkJtjsZxzlOzSXjF3ox2RVEOg8nH1GVxVgD6hvnyoG+RH238ArBXyeBoe/wS8YBjjIrDbIr0GP4AN5YfsJpd83UPcY9INIykigP4M+A3tPLCUPYQDIbwfCFQiC3xPwle7AHvQteJ8xFvwdepOaYFDqSTOHYAHvj1DrAV/Rj22km7jID+t+Yt4OuAtaH9AmSt71mmDhwPG+F1awjGbBA4qVBo4/y9UMlvATwR6HYPbnwjKBd+XNQlnG4WMldIvDrzpwD9wDLSGuExNS6jN+mcBdIDv5EHRseBvwqRyzVQsGu1+MuWWKTUs2nxXuR9kycB17X6rABmJWU7aRTZh0zkiyqpOgDME4Nx1YZV4MqrbHscOx88e5nfsUeNj4e6RzTx6bD91sHgjMu3TAe9cn0LHkgkkdYW8Qfj5f1S2btc9HLK08G2Lq7NswnrbfRPEBfEvG4j3SPp0+dMuhsUwOfR+5ZsCN3e1oFDNqdjPAv5/oXYTn4C/gky2FEowbho+NsVJBlYGl7ve7H7Tzah0+c7AI01tvbI9RNqviDNjkGuPVthuAsEkdgt249zS9cKAzwCZmO6sM5B5CUzPLHP4947oGUELMeLYvjdibJe5rM71It1T0wAMwmzWIr7SLmtE/1NlPxhqhPSKrwt4efJH6ZDU5HZSBR3kNdxnHSfYpq02o6fBj05kymp632PnufwCnRgVtmduYP1bWyvpDV+oV404VHHsFXKCrCGSevOCdmXWvniwqv8w1E863x7SC2fWPEjNpMxO/hW9ORmvglsjMe49uKWDD/nXVDNi7n8PmCSOGi5T6iJv1E5WBD1446xfS6I69olZJgjLwwQsnWa4pwbUw6MGLNPsPjLFhOAEdMfwuXsD/j28zS60WQhz2AeMZxPEHdh8QcOCEURUAAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle \\left\\{ F : 0\\right\\}$" + ], + "text/plain": [ + "{F: 0}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "F_subs = sp.solve({u_m.subs(x,0) - 0}, F)\n", + "F_subs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "__Condition 4__: Let us now require that at the end of unknown debonded length $a < 0$, the slip between the reinforcement and the matrix will be zero, i.e. $u_\\mathrm{f}(a) = u_\\mathrm{m}(a)$." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ E : \\frac{- 2 A_\\mathrm{f} E_\\mathrm{f} P a - A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} a^{2} p - 2 A_\\mathrm{m} E_\\mathrm{m} P a - A_\\mathrm{m} E_\\mathrm{m} \\bar{\\tau} a^{2} p}{2 A_\\mathrm{f} A_\\mathrm{m} E_\\mathrm{f} E_\\mathrm{m}}\\right\\}$" + ], + "text/plain": [ + "⎧ 2\n", + "⎪ -2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…Pâ‹…a - A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…\\bar{\\tau}â‹…a \n", + "⎨E: ──────────────────────────────────────────────────────────────────────────\n", + "⎪ 2â‹…A_\\mathrm{f}â‹…A_\\mathrm\n", + "⎩ \n", + "\n", + " 2\n", + "â‹…p - 2â‹…A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…Pâ‹…a - A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…\\bar{\\tau}â‹…a \n", + "──────────────────────────────────────────────────────────────────────────────\n", + "{m}â‹…E_\\mathrm{f}â‹…E_\\mathrm{m} \n", + " \n", + "\n", + " ⎫\n", + "â‹…p⎪\n", + "──⎬\n", + " ⎪\n", + " âŽ" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eqns_u_equal = {u_f.subs(C_subs).subs(x,a) - u_m.subs(D_subs).subs(F_subs).subs(x,a)}\n", + "E_subs = sp.solve(eqns_u_equal,E)\n", + "E_subs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "__Condition 5__: To resolve for $a$ we postulate, that the strains $\\varepsilon_\\mathrm{f}$ and $\\varepsilon_\\mathrm{m}$ are equal if there is no slip between the two components. This means that at the end of the debonded length $\\varepsilon_\\mathrm{f}(a) = \\varepsilon_\\mathrm{m}(a)$:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{- \\frac{- \\frac{P}{A_\\mathrm{m}} - \\frac{\\bar{\\tau} a p}{A_\\mathrm{m}}}{E_\\mathrm{m}} + \\frac{\\frac{P}{A_\\mathrm{f}} + \\frac{\\bar{\\tau} a p}{A_\\mathrm{f}}}{E_\\mathrm{f}}\\right\\}$" + ], + "text/plain": [ + "⎧ P \\bar{\\tau}â‹…aâ‹…p P \\bar{\\tau}â‹…aâ‹…p⎫\n", + "⎪ - ──────────── - ────────────── ──────────── + ──────────────⎪\n", + "⎨ A_\\mathrm{m} A_\\mathrm{m} A_\\mathrm{f} A_\\mathrm{f} ⎬\n", + "⎪- ─────────────────────────────── + ─────────────────────────────⎪\n", + "⎩ E_\\mathrm{m} E_\\mathrm{f} âŽ" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eqns_eps_equal = {eps_f.subs(C_subs).subs(x,a) - eps_m.subs(D_subs).subs(x,a)}\n", + "eqns_eps_equal" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" + ], + "text/plain": [ + "⎧ -P ⎫\n", + "⎨a: ────────────⎬\n", + "⎩ \\bar{\\tau}â‹…pâŽ" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_subs = sp.solve(eqns_eps_equal,a)\n", + "a_subs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**sympy explanation:** The same methods of substitution and algebraic resolution were applied in the last step to resolve $a$\n", + "\n", + "Now all the unknown parameters are resolved. Lets put them all into a single dictionary called var_subs for convenience to avoid long substitution expressions to derive $u_\\mathrm{f}$, $\\varepsilon_\\mathrm{f}$ and $\\sigma_\\mathrm{f}$." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ C : \\frac{P}{A_\\mathrm{f}}, \\ D : - \\frac{P}{A_\\mathrm{m}}, \\ E : \\frac{- 2 A_\\mathrm{f} E_\\mathrm{f} P a - A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} a^{2} p - 2 A_\\mathrm{m} E_\\mathrm{m} P a - A_\\mathrm{m} E_\\mathrm{m} \\bar{\\tau} a^{2} p}{2 A_\\mathrm{f} A_\\mathrm{m} E_\\mathrm{f} E_\\mathrm{m}}, \\ F : 0, \\ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" + ], + "text/plain": [ + "⎧ \n", + "⎪ P -P -2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…Pâ‹…a - A_\\ma\n", + "⎨C: ────────────, D: ────────────, E: ────────────────────────────────────────\n", + "⎪ A_\\mathrm{f} A_\\mathrm{m} \n", + "⎩ \n", + "\n", + " 2 \n", + "thrm{f}â‹…E_\\mathrm{f}â‹…\\bar{\\tau}â‹…a â‹…p - 2â‹…A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…Pâ‹…a - A_\\ma\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " 2â‹…A_\\mathrm{f}â‹…A_\\mathrm{m}â‹…E_\\mathrm{f}â‹…E_\\mathrm{m} \n", + " \n", + "\n", + " 2 ⎫\n", + "thrm{m}â‹…E_\\mathrm{m}â‹…\\bar{\\tau}â‹…a â‹…p -P ⎪\n", + "────────────────────────────────────, F: 0, a: ────────────⎬\n", + " \\bar{\\tau}â‹…p⎪\n", + " âŽ" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "var_subs = {**C_subs,**D_subs,**F_subs,**E_subs,**a_subs}\n", + "var_subs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "With the known values of integration parameters we can resolve the sought displacement fields and plot them" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\frac{P x}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\frac{A_\\mathrm{f} E_\\mathrm{f} P^{2}}{\\bar{\\tau} p} + \\frac{A_\\mathrm{m} E_\\mathrm{m} P^{2}}{\\bar{\\tau} p}}{2 A_\\mathrm{f} A_\\mathrm{m} E_\\mathrm{f} E_\\mathrm{m}}, \\ - \\frac{P x}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}}\\right)$" + ], + "text/plain": [ + "⎛ \n", + "⎜ A_\\mathrm{f}â‹…E_\\mat\n", + "⎜ 2 ───────────────────\n", + "⎜ Pâ‹…x \\bar{\\tau}â‹…pâ‹…x \\bar{\\tau}â‹…\n", + "⎜───────────────────────── + ─────────────────────────── + ───────────────────\n", + "âŽA_\\mathrm{f}â‹…E_\\mathrm{f} 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f} 2â‹…A_\\mathrm{f}â‹…A\n", + "\n", + " 2 2 \n", + "hrm{f}â‹…P A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…P \n", + "───────── + ──────────────────────────── \n", + "p \\bar{\\tau}â‹…p Pâ‹…x \n", + "────────────────────────────────────────, - ───────────────────────── - ──────\n", + "_\\mathrm{m}â‹…E_\\mathrm{f}â‹…E_\\mathrm{m} A_\\mathrm{m}â‹…E_\\mathrm{m} 2â‹…A_\\m\n", + "\n", + " ⎞\n", + " ⎟\n", + " 2 ⎟\n", + "\\bar{\\tau}â‹…pâ‹…x ⎟\n", + "─────────────────────⎟\n", + "athrm{m}â‹…E_\\mathrm{m}⎠" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "u_f_x = u_f.subs(var_subs)\n", + "u_m_x = u_m.subs(var_subs)\n", + "u_f_x, u_m_x" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Visualization of results\n", + "We have derived a symbolic expression. But how to efficiently quantify it?\n", + "### Substitute for material parameters\n", + "Substitute for all the material and geometry parameters and the load P the value 1 and plot the curve" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( P^{2} + P x + \\frac{x^{2}}{2}, \\ - P x - \\frac{x^{2}}{2}\\right)$" + ], + "text/plain": [ + "⎛ 2 2⎞\n", + "⎜ 2 x x ⎟\n", + "⎜P + Pâ‹…x + ──, -Pâ‹…x - ──⎟\n", + "⎠2 2 ⎠" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_f = {L_b:1, p:1, E_f:1, A_f:1, tau:1, E_m:1, A_m:1}\n", + "u_f_x.subs(data_f), u_m_x.subs(data_f)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Let us now prepare this function for interactive visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.5 , 0.505, 0.52 , 0.545, 0.58 , 0.625, 0.68 , 0.745, 0.82 ,\n", + " 0.905, 1. ]),\n", + " array([ 0.5 , 0.495, 0.48 , 0.455, 0.42 , 0.375, 0.32 , 0.255,\n", + " 0.18 , 0.095, -0. ]))" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_u_f_x = sp.lambdify((x, P), u_f_x.subs(data_f))\n", + "get_u_m_x = sp.lambdify((x, P), u_m_x.subs(data_f))\n", + "x_range = np.linspace(-1, 0, 11)\n", + "get_u_f_x(x_range, 1), get_u_m_x(x_range, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**`sympy` explanation:** The obtained expression `u_f_x` contains symbols. To plot a function, the symbolic expression must be transformed to a quantifiable procedure. This is what `sp.lambdify` is doing. Its first argument specifies the input variables for the generated \"lambdified\" function. In our case, it is `x` and `P`. The second argument is the expression to be evaluated, i.e. our solution with substituted data parameters `u_f_x.subs(data_f)`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "x_range = np.linspace(-2,0,100)\n", + "u_f_x_range = get_u_f_x(x_range, 1)\n", + "u_m_x_range = get_u_m_x(x_range, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**`numpy` explanation:** To prepare an array of data we first generated an array `x_range` with 100 values in the range from (-2,0). Then the newly generated function `get_u_f_x` was called with these 100 values to get the corresponding value of displacement." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**`matplotlib` explanation:** Let us plot the result using the matplotlib package. It is possible to invoke simply the method\n", + "\n", + "`plt.plot(x_range, u_f_range)`\n", + "\n", + "with the first argument specifying the data points along the horizontal and second argument along the vertical axis, respectively.\n", + "\n", + "But to prepare the later interaction with the model we directly use a more flexible plotting area with two subplots called `axes`. Such area is prepared using the function `plt.subplots(rows, cols)` which returns a figure and the `axes` for specified number of `rows` and `cols`. The returned `axes` objects can then be used to insert the data arrays as in the above `plt.plot` method. Below we construct a figure with two axes and plot into our displacement profile into the left diagram. We insert also a legend and fill the area between zero level and the data points with a value of opacity $0.2$. The second subplot axes is empty. It is prepared for the next diagram explained below." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4b412cac4b20455f8c8d04c32293b3a5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax_u1 = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", + "ax_u1.plot(x_range, u_f_x_range, color='black', label=r'$u_\\mathrm{f}$');\n", + "ax_u1.set_xlabel('x [mm]'); ax_u1.set_ylabel('$u$ [mm]')\n", + "ax_u1.fill_between(x_range, u_f_x_range, color='black', alpha=0.1);\n", + "ax_u1.plot(x_range, u_m_x_range, color='green', label=r'$u_\\mathrm{m}$');\n", + "ax_u1.fill_between(x_range, u_m_x_range, color='green', alpha=0.1)\n", + "ax_u1.legend(loc=9);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Range of validity\n", + "Let us now augment the solution with the outside intervals.\n", + "Let us recall that the debonded length was" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" + ], + "text/plain": [ + "⎧ -P ⎫\n", + "⎨a: ────────────⎬\n", + "⎩ \\bar{\\tau}â‹…pâŽ" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_subs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "so that $a = -1$. The range $x < a$ is beyond our applied model assumptions. We explicitly treated only the range $x \\in (a, 0)$. Thus for nicer postprocessing we have to set $u_f(x) = u_f(a), \\; \\forall x < a$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "This can be readily done using the piecewise covering the domain of $x$ piece by piece.\n", + "\\begin{align}\n", + " u_\\mathrm{fa} & = \\left\\{\n", + " \\begin{array}{ll}\n", + " u_\\mathrm{f}(a) & x < a, \\\\\n", + " u_\\mathrm{f}(x) & x < 0 \\land x > a, \\; \\mathrm{where} \\; a = -\\frac{P}{p\\tau}\n", + " \\end{array}\n", + " \\right.\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "u_fa_x = sp.Piecewise((u_f_x.subs(x, var_subs[a]), x <= var_subs[a]),\n", + " (u_f_x, x > var_subs[a]))\n", + "u_ma_x = sp.Piecewise((u_m_x.subs(x, var_subs[a]), x <= var_subs[a]),\n", + " (u_m_x, x > var_subs[a]))\n", + "get_u_fa_x = sp.lambdify((x, P), u_fa_x.subs(data_f))\n", + "get_u_ma_x = sp.lambdify((x, P), u_ma_x.subs(data_f))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "Plot the two fields into a single diagram" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"600\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "810fcc171837490cb945ca003d270e20", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='P', max=1.0, step=0.05), Output()), _dom_classes=('w…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "u_fa_x_range = get_u_fa_x(x_range, 1)\n", + "u_ma_x_range = get_u_ma_x(x_range, 1)\n", + "fig, (ax_u2) = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", + "line_u_f, = ax_u2.plot(x_range, u_fa_x_range, color='black');\n", + "line_u_m, = ax_u2.plot(x_range, u_ma_x_range, color='green');\n", + "ax_u2.set_xlabel('x [mm]'); ax_u2.set_ylabel('$u$ [mm]')\n", + "def update(P):\n", + " line_u_f.set_ydata(get_u_fa_x(x_range, P))\n", + " line_u_m.set_ydata(get_u_ma_x(x_range, P))\n", + "ipw.interact(update, P=ipw.FloatSlider(min=0, max=1, step=0.05));" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Evaluate strains and stresses\n", + "With the known displacements at hand, we can directly calculate the strains as\n", + "\\begin{align}\n", + "\\varepsilon_\\mathrm{f} &= \\frac{\\mathrm{d} u_\\mathrm{f}}{ \\mathrm{d} x} \\\\\n", + "\\varepsilon_\\mathrm{m} &= \\frac{\\mathrm{d} u_\\mathrm{m}}{ \\mathrm{d} x} \\\\\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\frac{P + \\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}, \\ \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\- \\frac{P + \\bar{\\tau} p x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)$" + ], + "text/plain": [ + "⎛⎧ -P ⎧ \n", + "⎜⎪ 0 for x ≤ ──────────── ⎪ 0 \n", + "⎜⎪ \\bar{\\tau}â‹…p ⎪ \n", + "⎜⎨ , ⎨ \n", + "⎜⎪ P + \\bar{\\tau}â‹…pâ‹…x ⎪ -(P + \\bar{\\tau}â‹…pâ‹…x) \n", + "⎜⎪───────────────────────── otherwise ⎪───────────────────────── \n", + "âŽâŽ©A_\\mathrm{f}â‹…E_\\mathrm{f} ⎩A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "\n", + " -P ⎞\n", + " for x ≤ ────────────⎟\n", + " \\bar{\\tau}â‹…p⎟\n", + " ⎟\n", + " ⎟\n", + " otherwise ⎟\n", + " ⎠" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eps_f_x = sp.diff(u_fa_x,x)\n", + "eps_m_x = sp.diff(u_ma_x,x)\n", + "sp.simplify(eps_f_x), sp.simplify(eps_m_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The stresses along the fiber are given as\n", + "\\begin{align}\n", + "\\sigma_\\mathrm{f} &= \\frac{\\varepsilon_\\mathrm{f}}{ E_\\mathrm{f} }, \\;\n", + "\\sigma_\\mathrm{m} = \\frac{\\varepsilon_\\mathrm{m}}{ E_\\mathrm{f} }\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( E_\\mathrm{f} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}\\right), \\ E_\\mathrm{m} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\- \\frac{P}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{\\bar{\\tau} p x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)\\right)$" + ], + "text/plain": [ + "⎛ ⎛⎧ \n", + "⎜ ⎜⎪ 0 for x ≤\n", + "⎜ ⎜⎪ \n", + "⎜E_\\mathrm{f}⋅⎜⎨ \n", + "⎜ ⎜⎪ P \\bar{\\tau}â‹…pâ‹…x \n", + "⎜ ⎜⎪───────────────────────── + ───────────────────────── ot\n", + "⎠âŽâŽ©A_\\mathrm{f}â‹…E_\\mathrm{f} A_\\mathrm{f}â‹…E_\\mathrm{f} \n", + "\n", + " -P ⎞ ⎛⎧ \n", + " ────────────⎟ ⎜⎪ 0 \n", + " \\bar{\\tau}â‹…p⎟ ⎜⎪ \n", + " ⎟, E_\\mathrm{m}⋅⎜⎨ \n", + " ⎟ ⎜⎪ P \\bar{\\tau}â‹…\n", + "herwise ⎟ ⎜⎪- ───────────────────────── - ─────────────────\n", + " ⎠âŽâŽ© A_\\mathrm{m}â‹…E_\\mathrm{m} A_\\mathrm{m}â‹…E_\\m\n", + "\n", + " -P ⎞⎞\n", + " for x ≤ ────────────⎟⎟\n", + " \\bar{\\tau}â‹…p⎟⎟\n", + " ⎟⎟\n", + "pâ‹…x ⎟⎟\n", + "──────── otherwise ⎟⎟\n", + "athrm{m} ⎠⎠" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sig_f_x = E_f * eps_f_x\n", + "sig_m_x = E_m * eps_m_x\n", + "sig_f_x, sig_m_x" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The profile of shear stress along the bond zone is obtained as\n", + "\\begin{align}\n", + " \\tau = \\frac{\\mathrm{d} \\sigma}{\\mathrm{d} x}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\bar{\\tau} & \\text{otherwise} \\end{cases}$" + ], + "text/plain": [ + "⎧ -P \n", + "⎪ 0 for x ≤ ────────────\n", + "⎨ \\bar{\\tau}â‹…p\n", + "⎪ \n", + "⎩\\bar{\\tau} otherwise " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tau_x = sig_f_x.diff(x) * A_f / p\n", + "sp.simplify(tau_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Plot the strains and stresses\n", + "Similarly to the callable function `get_u_fa_x` let us define the functions for the strains and stresses using the `sp.lambdify` generator " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "get_eps_f_x = sp.lambdify((x, P), eps_f_x.subs(data_f))\n", + "get_eps_m_x = sp.lambdify((x, P), eps_m_x.subs(data_f))\n", + "get_sig_f_x = sp.lambdify((x, P), sig_f_x.subs(data_f))\n", + "get_sig_m_x = sp.lambdify((x, P), sig_m_x.subs(data_f))\n", + "get_tau_x = sp.lambdify((x, P), tau_x.subs(data_f))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "To make the code for plotting shorter let us define a general procedure plotting and filling the curves and attaching the labels to a specified subplot in one call " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"999.7333333333333\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax_eps, ax_sig, ax_tau) = plt.subplots(1,3, figsize=(10,3), tight_layout=True)\n", + "poui.plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range,1 ), \n", + " color='green',xlabel='x [mm]', ylabel=r'$\\varepsilon$ [-]')\n", + "poui.plot_filled_var(ax_eps, x_range, get_eps_m_x(x_range,1 ), \n", + " color='green',alpha=0.8)\n", + "poui.plot_filled_var(ax_sig, x_range, get_sig_f_x(x_range,1),\n", + " color='blue', xlabel='x [mm]', ylabel=r'$\\sigma$ [MPa]')\n", + "poui.plot_filled_var(ax_sig, x_range, get_sig_m_x(x_range,1),\n", + " color='blue', alpha=0.8)\n", + "poui.plot_filled_var(ax_tau, x_range, get_tau_x(x_range,1),\n", + " color='red', xlabel='x [mm]', ylabel=r'$\\tau$ [MPa]');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Pull-out curve" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Quick summary - direct derivation\n", + "\\begin{align}\n", + " \\varepsilon_\\mathrm{f}(0) &= \\frac{P}{E_\\mathrm{f} A_\\mathrm{f}}, \\;\\;\n", + " \\varepsilon_\\mathrm{m}(0) = \\frac{-P}{E_\\mathrm{m} A_\\mathrm{m}} \\\\\n", + " a &= - \\frac{P}{p\\tau}.\n", + "\\end{align}\n", + "Thus, the crack opening can be expressed as the area of the triangle\n", + "\\begin{align}\n", + " w &= \\frac{1}{2}\\left[\\varepsilon_\\mathrm{f}(0) - \\varepsilon_\\mathrm{m}(0)\\right]a \\nonumber \\\\\n", + " &= \\frac{1}{2}\\frac{P^2}{p\\tau} \\left[\\frac{1}{E_\\mathrm{f} A_\\mathrm{f}} + \\frac{1}{E_\\mathrm{m} A_\\mathrm{m}}\\right].\n", + "\\end{align}\n", + "By solving this equation for $P$ we obtain the pullout curve in the form\n", + "\\begin{align}\n", + " P(w) = \\sqrt{2wp\\tau \\frac{E_\\mathrm{f}A_\\mathrm{f}E_\\mathrm{m}A_\\mathrm{m}}{E_\\mathrm{f}A_\\mathrm{f}+E_\\mathrm{m}A_\\mathrm{m}}}.\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}$" + ], + "text/plain": [ + " \n", + " ______________ ______________ ______________ ______________ _____\n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar\n", + " \n", + "\n", + " _______________________________________________________\n", + "_______ ╱ w \n", + "{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── \n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eps_f_0 = P / E_f / A_f\n", + "eps_m_0 = -P / E_m / A_m\n", + "a_subs = sp.solve({P - p * tau * a}, a)\n", + "w_el = sp.Rational(1,2) * ( eps_f_0 - eps_m_0) * a\n", + "Pw_pull_elastic = sp.solve(w_el.subs(a_subs) - w, P)[1]\n", + "Pw_pull_elastic " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pull-out curve derived from the displacement field solution " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**`sympy` explanation:** In parallel let us use again the `subs` and `solve` provided in `sympy` to define the `P_push` and `P_pull` variables in the running `jupyter` kernel. As `solve` searches for zero point of the supplied equation we must transform the above equation into" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - w + \\frac{P^{2}}{2 A_\\mathrm{m} E_\\mathrm{m} \\bar{\\tau} p} + \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} p}$" + ], + "text/plain": [ + " 2 2 \n", + " P P \n", + "-w + ──────────────────────────────────────── + ──────────────────────────────\n", + " 2â‹…A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…\\bar{\\tau}â‹…p 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…\\b\n", + "\n", + " \n", + " \n", + "──────────\n", + "ar{\\tau}â‹…p" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "u_f_x.subs(x,0) - w" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "and then send it to `sp.solve`" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( - \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}, \\ \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}\\right)$" + ], + "text/plain": [ + "⎛ \n", + "⎜ ______________ ______________ ______________ ______________ ___\n", + "⎜-√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\b\n", + "⎠\n", + "\n", + " _______________________________________________________ \n", + "_________ ╱ w \n", + "ar{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── , √2⋅╲\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "\n", + " \n", + " ______________ ______________ ______________ ______________ _________\n", + "╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar{\\ta\n", + " \n", + "\n", + " _______________________________________________________⎞\n", + "___ ╱ w ⎟\n", + "u} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── ⎟\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} ⎠" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pw_push_elastic, Pw_pull_elastic = sp.solve(u_f_x.subs({x:0})-w, P)\n", + "Pw_push_elastic, Pw_pull_elastic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Note that the obtained $P(w)$ covers both the pull-out and push-in case. If we supply the parameters defined above with unit stiffness, area and perimeter we obtain" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG8AAAAaCAYAAAC5KgISAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEJElEQVRoBe2a/1HbMBTHSa4DUDpBwwbQTkDYANigsAE9/iL/9WADYIIWNgAmaMsGZIOmbJB+P0JPlR2fS2PLMnd5d/KTnyy/30+Sk7X5fL4Wt9PT0y21cUxb9Ys26toe8sdxFc8BRIPJZLKl/onwvtFyYskxEv/HJjLoHYMm85vObUMHybCrdlT2y5uScFe63ynRct6eifmuhL7LKURD3q3oIBtgh0O1S5MnZJ6IFyI+Cp/bYE4sOci6a+HtnHI04d22DnofVWhb+Am5hlw8k0N1g1ehZ4bP4v8lswxN2betAwlGJjtwzlPvSO3SPPo8lO8qOdbFfSx8k0+KZpwT6YA9SDIH5jwIt57WB3QiIYja1wyt66CAmMogU+E9DDNUZyRMpPdiU+Ajdk/4tWddKh3wE5XSrXlj4ScZyy2CEDMDERvqemZZlmWfUgc2LR8QjKMCuznSMTtEWbcZC+PplHbohR2xxighnE3drtTfc+R5r37nASmeVDGyLpUOD3r/OnxY8yibM7U+AA6qyjqcwxGGdZmojoESEgcfDsOALjrjBzvqp9bBfDXCeRtqySNUxmf3SImuA74iFI4ruie4vvtJfGmIHQWZd4bNlp5nTaCVnxOpGSA/7R9vSa2D+WqDskmUmjcX5JKwjN8vDNQTPmke6e1A/WN1yBgMWnno9s9cuAnFy0xjtnk50FA4+4nO5zygvNliR9aq87x8fdAh+ArnmSedFcoXCc14pcHLz1bdaz6ZY9l0pnuit2xsphKxhXUComhOPmEinkAyRzIMjc1W2VG1OjHxf0Dv75MOVEoHQ13xZCA8k9u7Ylg1jGkOXDi/aZx1oirrYkH4WP7A+yIiZbQQCBrH0KGMRs8u3YWnWl90IICBKc5DKCNATAKR8mQeBo4Bh5pzY3rcZ07sOMaqaOz0Cg6NX9Kk3xMdLNFmOI/NQFc7M9tJhuyTQci6G2+YOtuSTcHpep6SiSJbNkk0+mGthS4a2+q52k97riHuXIeSvNjAncsH/PCqGwzzVgqShUlBPK7FgLOZ46f7wpfyOuZ61korcwCy9UqNAHynxhlwIYM9Dw3//SLPzbKg93Wug8nqbTAS3nU/CanzW4P7wknKjTEGiwfZQRZwbsPo/E7lPveonwzEg4C5E24coLl0wDjije2+Cp9TNoFvaiz+yUFMKWs0yiVb71BC1U8JH8W7seMQMJcO4svehOB31cWcRznCmF0BZzUE+dGWQesE90r/qntmibFOdfDycc4N+wPnPB9JlBRKS3IQH85qlGhb/FPzPBDPVv8hkEEHbESVCh8p4r9BkAn3EmrpAzlvX0EaC8gvVMZN4bDMBOfBUgNkXicbCPit4GUWkF84HlwIF/Yltua5t2iQcnYrzPFhBf2xANm28HfMQub1R9aVJC+xwB9QGj9Qo8RIMwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\left( - \\sqrt{w}, \\ \\sqrt{w}\\right)$" + ], + "text/plain": [ + "(-√w, √w)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pw_push_elastic.subs(data_f), Pw_pull_elastic.subs({A_f:1, E_f:1, L_b:1, p:1, tau:1, A_m:1, E_m:1})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Plot the pull-out curve\n", + "The symbolic expression must be transformed into a quantifiable form using `sp.lambdify`" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}$" + ], + "text/plain": [ + " \n", + " ______________ ______________ ______________ ______________ _____\n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar\n", + " \n", + "\n", + " _______________________________________________________\n", + "_______ ╱ w \n", + "{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── \n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "py_vars = ('w', 'tau', 'p', 'L_b', 'A_f', 'A_m', 'E_f', 'E_m')\n", + "map_py2sp = {py_var : globals()[py_var] for py_var in py_vars}\n", + "sp_vars = tuple(map_py2sp[py_var] for py_var in py_vars)\n", + "sp_vars\n", + "Pw_pull_elastic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "For plotting, let us also evaluate the for the displacement at the unloaded end\n", + "\\begin{align}\n", + "w = u_\\mathrm{f}(x = -L_\\mathrm{b})\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\begin{cases} \\frac{A_\\mathrm{f} E_\\mathrm{f} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} & \\text{for}\\: L_{b} \\geq \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}} \\\\\\frac{A_\\mathrm{f} E_\\mathrm{f} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} + \\frac{A_\\mathrm{m} E_\\mathrm{m} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} + \\frac{L_{b}^{2} \\bar{\\tau} p}{2 A_\\mathrm{f} E_\\mathrm{f}} - \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{m}} L_{b} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}}} & \\text{otherwise} \\end{cases}$" + ], + "text/plain": [ + "⎧ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎨ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…w A_\\mathr\n", + "⎪───────────────────────────────────────────────────── + ─────────────────────\n", + "⎪A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} A_\\mathrm{f}â‹…E_\\mathr\n", + "⎩ \n", + "\n", + " \n", + " \n", + " \n", + " A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…w \n", + " ────────────────────────────────────────────────────\n", + " A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m\n", + " \n", + " \n", + " \n", + " ________\n", + " 2 √2⋅╲╱ A_\\math\n", + "m{m}â‹…E_\\mathrm{m}â‹…w L_b â‹…\\bar{\\tau}â‹…p \n", + "──────────────────────────────── + ─────────────────────────── - ─────────────\n", + "m{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f} \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "─ \n", + "} \n", + " \n", + " \n", + " ____________________________\n", + "______ ______________ ____________ ╱ w\n", + "rm{m} ⋅╲╱ E_\\mathrm{m} â‹…L_b⋅╲╱ \\bar{\\tau} ⋅√pâ‹… ╱ ───────────────────────────\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} +\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ______________ ______________ \n", + " ╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} \n", + "\n", + " \n", + " ______________ ______________ \n", + " √2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱\n", + " \n", + " for L_b ≥ ───────────────────────────────────────\n", + " \n", + " \n", + " \n", + "___________________________ \n", + " \n", + "────────────────────────── \n", + " A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "─────────────────────────── \n", + " \n", + " \n", + "\n", + " __________________________________________\n", + "______________ ______________ ╱ w \n", + " E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} â‹… ╱ ─────────────────────────────────────────\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ____________ \n", + " ╲╱ \\bar{\\tau} ⋅√p \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " otherwise \n", + " \n", + " \n", + "\n", + "_____________\n", + " \n", + "──────────── \n", + "E_\\mathrm{m} \n", + "─────────────\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_L_b_elastic = u_fa_x.subs(x, -L_b).subs(P, Pw_pull_elastic)\n", + "w_L_b_elastic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "and also the expression for the debonded length as a function of the control displacement $w$" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}}$" + ], + "text/plain": [ + " ___\n", + " ______________ ______________ ______________ ______________ ╱ \n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} â‹… ╱ ──\n", + " ╲╱ A_\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ____________ \n", + " ╲╱ \\bar{\\tau} ⋅√p \n", + "\n", + "____________________________________________________\n", + " w \n", + "─────────────────────────────────────────────────── \n", + "\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "────────────────────────────────────────────────────\n", + " \n", + " " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aw_pull_elastic = a_subs[a].subs(P, Pw_pull_elastic)\n", + "aw_pull_elastic" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import traits.api as tr\n", + "\n", + "class PO_LF_LM_EL(tr.HasTraits):\n", + "\n", + " get_Pw_pull = sp.lambdify(sp_vars, Pw_pull_elastic)\n", + " get_aw_pull = sp.lambdify(sp_vars, aw_pull_elastic)\n", + " get_w_L_b = sp.lambdify(sp_vars, w_L_b_elastic)\n", + " get_u_fa_x = sp.lambdify((x,) + sp_vars, u_fa_x.subs(P, Pw_pull_elastic))\n", + " get_u_ma_x = sp.lambdify((x,) + sp_vars, u_ma_x.subs(P, Pw_pull_elastic))\n", + " get_eps_f_x = sp.lambdify((x,) + sp_vars, eps_f_x.subs(P, Pw_pull_elastic))\n", + " get_eps_m_x = sp.lambdify((x,) + sp_vars, eps_m_x.subs(P, Pw_pull_elastic))\n", + " get_sig_f_x = sp.lambdify((x,) + sp_vars, sig_f_x.subs(P, Pw_pull_elastic))\n", + " get_sig_m_x = sp.lambdify((x,) + sp_vars, sig_m_x.subs(P, Pw_pull_elastic))\n", + " get_tau_x = sp.lambdify((x,) + sp_vars, tau_x.subs(P, Pw_pull_elastic))\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Interactive exploration\n", + "Now that we have finished the construction of the model we can track the process and explore the correspondence between the internal state and externally observed response" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "po = poui.ModelInteract(\n", + " models=[PO_LF_LM_EL],\n", + " py_vars=list(py_vars),\n", + " map_py2sp=map_py2sp,\n", + " E_f=1, A_f=1, p=1, tau=1,L_b=10, E_m=1, A_m=1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "hide_input": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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bD0585VLK2/yB6VPrpOKjzd4TCorytO414rUrJn/6iSXy6c//t6r9K/DIECwyBtRiTHbFslRafz48TrrrLNC/nqeBQkAQHQgKjlETVcqTZw48bRXKu3evVtNmzbViy++GPDxiLlS6ZsR/qA0/xwpb0+DB6Vv006qe7eygKuTLvhJmebMOsnVSaz+RlRizLY5OSq1b99e/fv31/Dhw7Vw4UIdPnw44PODBw9WixYtQv7+PAsSAIDoQFRyCLPPVOrfv7/atWunHTt2KCMjo3Lt27fXT37yE2VkZOjIkSMhvTbbT84OL694ftJMo+J5SoeXN2hMKinI08jhxWrc2H91UmysT3++r1i7vg2D6MAie0Qlxmybk6NSnz591KZNm4B3fGvXrp369Omjbt26ye12q2/fviF/f54FCQBAdCAqOcSUKVNq/C9+cXFxNf4Xv8suu6za29Z+2I033hjSa7P15KzggPRea/9VStteadCglPb5SV12aeDVSRf/vEwfzj9pf2xg0TGiEmO2zclR6QdZWVmaP3++nnvuOd18880677zzlJCQoL59+yozMzPk78uzIAEAiA5EJYfIzs5Ws2bNqn02wd133135sUOHDik9PV0FBQWVH1u5cqXmz58ftDZt2qh9+/aaP3++1q9fH9Jrsy0qlZdJn1zrD0prbpeKcxskJpUX5+nVl4sCrk5q0sSnvz1SpL07wiA0sOgZUYkx2xYJUam+8CxIAACiA1HJQcaNG1f5LirJyckaOXKkEhMT1bZtWx04cKDyzw0aNEiGYSg1NfW039PRl5Fve9kflD64sOKqpQYISpm783VNr8B3dutyeak+WZJvf2Bg0TeiEmO2jahUPZ4FCQBAdCAqOcyMGTPUpUsXeTweJSQk6M4779TevXsD/kxURKWczVJKrP85SkdS6z0m+bx5mjGtUC1b+q9OahTr0yMPF2vfrjCICyw6R1RizLYRlarHsyABAIgORCWY1uAnZyX50oed/Fcppb1Q70Hp2JE83XlHScDVST/pWKYF83h2ErN5RCXGbBtRqXo8CxIAgOhAVIJpDX5ytuFuf1Ba3ksqPl6vQWn5xwVq3748ICj94X+82rE1DIICY0QlxmwbUal6PAsSAIDoQFSCaQ16cpY51x+U5iZIx7+tt5hUlJenv/7FGxCTzmxTrv99q0AH94VBTGAsM4+oxJiN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1A8DPzCcAQCcotmEZjIZRpdPudzWodK1116rhx56yPrvV155pW6++WZJUnFxsW666Sa1atUqZI8fTswtAADH8XhKQqW2bQmVNmzYoMTERL377ruhfihUE8MZAMApzn3uXJkMo59O+6mtQ6WnnnpKzZo109mzZyVJ06ZNk8vl0qWXXqrLLrtMbrdbzz33XMgeP5yYWwAAjhMVVRIqXXMNoZIkLV++XPXr11fnzp3Vv39//e53vytTgwYNqo1l4P8wnAEAnKJBZgOZDKOrX7za1qHSN998o48//lhFRUXWtvHjx6tt27a6+uqr9dxzz6m4uDjgx1m8eLFSUlLk8XiUmJioPn366MCBA9W+/5kzZzRjxgylpqYqPj5ecXFxSk5O1ujRo2u8JuYWAICjFBeXBErGSB06ECpt2bJFjRo1ksvlqrDcbneol4HvYTgDADjBmbNnZDKMTIbRdS9dZ+tQqTZkZWXJGKOOHTtqxowZyszMVGJiopo1a6bDhw9Xef/Tp0+rR48eqlevnvr27asZM2boxRdf1BNPPKF77723xuuqK/0FAKBaTp3yhkqdOhEqXXvttTr//PP1+uuv63eSn9MAACAASURBVKuvvgr1w6EaGM4AAE7wzalvrFCp2/xutg2Vjh49qq1bt2rv3r0hOb4kHTt2TPHx8UpJSSnzbajc3Fy5XC4NHjy4ymM888wzcrvdWr16dVDXxtwCAHCUb7/1hkrXX0+oFBMTo+effz7UDwM/MJwBAJzg6LdHrVCpx+IetguVzp49qyFDhigqKkput1tut1vt27fX559/HtTHkaQ5c+bIGKN58+b57OvSpYsSEhJ06tSpCu//7bffqmHDhurZs6ekkpOHf/3110FZG3MLAMBRvvrKGyp160aodMkll2jixImhfhj4geEMAOAEB746YIVKv/7rr20XKk2ePFkul0vNmzdXr169dNVVV8nlcqlHjx5BfRxJGjJkiIwx2rNnj8++J598UsYY7dixo8L7r169WsYYjR49WsOHD1ejRo1kjNG5556roUOH6kQAwzBzCwDAUY4e9YZKN99MqJSZmal27dqV+So1wovhDADgBB8d/cgKlfr/vb/tQqV27drpiiuuKPONn7vvvltRUVH68ssvg/pYPXr0kDFGJ0+e9Nk3bdo0GWO0YsWKCu8/adIkGWPUpEkTNW3aVFOmTNGy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\" width=\"899.3\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5c51964df7934170b3808eb6ab042c7a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(FloatSlider(value=1e-05, description='\\\\(t\\\\)', max=1.0, min=1e-05, step=0.05), …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "po.interact_fields()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Let's learn from the model\n", + "\n", + "Exercise the relation between $P$ and $\\tau(x)$ and between $w$ and $\\varepsilon(x)$.\n", + "\n", + " 1. Is the originally postulated assumption of rigid matrix relevant for the RILEM test?\n", + " 4. What is the role of debonded length $a$ in view of general non-linear simulation?\n", + " 5. When does the pull-out fail?\n", + " 6. What happens with $a$ upon unloading?" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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9GqEE3u1zdUIxASMBWMpJpSUlCg+Pl5paWmqq6trejw7O1s+n0+jR49uemznzp3Kzc1VZWVl02N79+49bGxYu3at4uLidOGFF7ZqfcQERER7EhPACcQEYFDtUlchvXz2IfdJ+J3nG/ZIdemSKvXsGXo1wvBftt3VCMQEjAVjKSZI0rRp02SM0YABA5SRkaFJkyYpJSVFvXr1UnFxcdPPjRo1SsYYZWVlNT22dOlSnXDCCRo3bpymTZump556SmPGjFHnzp2VlJSk7OzsVq2NmICIaE9iAjiBmAAMql023GKFhBUXSQdKPd+0R5r7Sso06sbQqxF69WrQ//2jba9GICZgLBhrMUGS5s2bp379+ikQCCg5OVkjRoxQfn5+yM8cLiZ8/vnnGj58uE477TQlJCSoS5cuOuWUU3TLLbdo69atrV4XMQER0Z7EBHACMQEYVDsULrJCwuLu0t5PPd+4R5qrXq/Ud74TejXCL4bWtuqkBmICxrKxGBMiFWICIqI9iQngBGICMKhHo7xAWtzNiglbn/V84x5JVu4r0x3jakIiQnJyg2bNaL+rEYgJGAsSE9yDmICIaE9iAjiBmAAManM01EorLrZCwrujpZr9nm/gI8X31lXoe2eEXo1wxaBafbChvN0jAjEBo11ignsQExAR7UlMACcQE4BBbY5P7rdCwsvnSFW7Pd/AR4J1VWX6y5+rFRcXbIoISYlBPTKlStvz3YkIxASMdokJ7kFMQES0JzEBnEBMAAb1SHy1pvH4x/mm8TjIPes938RHgnm55br4ovqQqxEuuahO76xx72oEYgLGgsQE9yAmICLak5gATiAmAIN6OGq+kZaebF2V8NnfPN/Ee22wpkxznqlSYqJ1NcIxxwR13z0HtC3P/YhATMBol5jgHsQERER7EhPACcQEYFC/TTAovTPSCgmrrpSq93m+mffSkp3luvYXoUc+nnVmvV57pcKziEBMwGiXmOAexARERHsSE8AJxARgUL9N/vNWSHjheGn/Fs8381664pVKnXiidZNFny+oMTdXKy/X24hATMBol5jgHsQERER7EhPACcQEYFAPpbxAWpRkxYTCxZ5v5r2yurxMv78z9MjHE3s16Pm57hz5SEzAWJeY4B7EBEREexITwAnEBGBQDxJskN5It0LCht94vqH3ytyNFbrg/NCbLP7s6lrlfOh9PCAm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J59Ee4hhE8nfBaH7QEyIQY4cOaKkpCT5fL6gv4aUlpbK4/Fo2rRp7T7HiBEjlJiYqIMHD/pvq66u1oABAzRo0CA1NjZ2ytg7k3DnpaysTHv37g25ffPmzTLGaMKECREfsxNE4vulmePHj+sf//EfNWPGDGVkZLg6JkRiXn71q18pLi5OmzZt6syhOkq481JbWyuv1yufz6eGhoag+6699loZY7Rnz55OGXtns3//fv//Hzx4cIdiQiy+97qZsrIy//fpuHHj2owJhYWFMsZo/vz5QbfPmDFDxhj96U9/6tSxOkFFRYWMMfrhD38YdHtDQ4MyMzMVFxenmpqaKI3OGW6++WYlJCTovffei/ZQokZlZaVSUlI0b968bhMTdu3a1eIB9fLly2WM0cyZM6MwqsgRyd8FoXtBTIhBVqxYIWOMVq1aFXJfdna2kpOTVVtb2+rj9+/f3+pfUnJycmSM0ZtvvhnRMTtBuPPSFqmpqa49cI7kvNx999369re/raNHj7o+JoQ7L19++aVSUlJ07bXXSmra2n/s2LFOG69ThDsvx48flzFGV199dch9//7v/y5jTNCBtFvpSEyI1ffeWKG9mDBy5EjFx8frxIkTQbeXlZXJGKPp06d39hA7nQ8++EDGGN1xxx0h91111VXq3bt3TH/Uoby8XHFxcbr77rslNUUUN380q6Nce+21Gjp0qOrr67tNTGiNo0ePxsQcdObvyBDbEBNikOnTp8sY0+Jf0WfNmiVjjHbu3Nnq49etWydjjJYtWxZyX0lJiYwxWrhwYUTH7AThzktrVFdXq1evXho5cmQkhuk4kZqXHTt2KC4uTk888YQkuT4mhDsvmzZtkjFGDzzwgO6991717dtXxhidfvrpmjFjhmv/eheJ75fvfe97iouL029/+1t99NFHKisr07Jly+T1enXLLbd01tAdpSMxIVbfe2OFtmJCQ0ODEhISdOmll7Z4/7e//W1lZmZ25vAcoa6uThkZGYqPj9fy5ctVVlamjz76SA8++KDi4uKUm5sb7SF2Ks27T1asWKFp06YpPj5exhidccYZysnJialzY7TG008/LY/HozfeeEOSYuJAOhz++te/xsRHfDrrd2SIfYgJMcj48eNljAn564gkLVmyRMYYFRcXt/r45m1rL774Ysh9u3fvljFG9957b0TH7AThzktrzJw5U8YY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\" width=\"799.6333333333333\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "44198f7f12eb47189edc39f04e7241d7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(FloatSlider(value=1e-05, description='\\\\(t\\\\)', max=1.0, min=1e-05, step=0.05), …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "po.interact_geometry()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.9.1" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": true, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "calc(100% - 180px)", + "left": "10px", + "top": "150px", + "width": "203.5px" + }, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pull_out/PO_ELF_RLM.py b/pull_out/PO_ELF_RLM.py deleted file mode 100644 index 4eab81930f6d93522fcd7619024ddbb61cc00f08..0000000000000000000000000000000000000000 --- a/pull_out/PO_ELF_RLM.py +++ /dev/null @@ -1,138 +0,0 @@ - -import bmcs_utils.api as bu -import numpy as np -import sympy as sp -import traits.api as tr - -class POHistory(bu.Model): - po = tr.WeakRef - - t = bu.Float(0.0) - t_max = bu.Float(1.0) - ipw_view = bu.View( - time_editor = bu.HistoryEditor( - var = 't', - var_max = 't_max' - ) - ) - - def subplots(self, fig): - return fig.subplots(2,2) - - def update_plot(self, axes): - (ax11, ax12), (ax21, ax22) = axes - L_b = self.po.L_b - x_range = np.linspace(-L_b, 0, 100) - w_max = self.po.w_max - w = self.t * w_max - P_max = self.po.symb.get_Pw_pull(w) - eps_range = self.po.symb.get_eps_f_x(x_range, P_max) - ax11.plot(x_range, eps_range) - -class PO_ELF_RLM_Symb(bu.SymbExpr): - """Pullout of elastic Long fiber, fromm rigid long matrix - """ - E_f, A_f = sp.symbols(r'E_\mathrm{f}, A_\mathrm{f}', positive=True) - E_m, A_m = sp.symbols(r'E_\mathrm{m}, A_\mathrm{m}', positive=True) - tau, p = sp.symbols(r'\bar{\tau}, p', positive=True) - C, D = sp.symbols(r'C, D') - P, w = sp.symbols(r'P, w', positive=True) - x, a, L_b = sp.symbols(r'x, a, L_b') - - d_sig_f = p * tau / A_f - - sig_f = sp.integrate(d_sig_f, x) + C - eps_f = sig_f / E_f - - u_f = sp.integrate(eps_f, x) + D - - eq_C = {P - sig_f.subs({x:0}) * A_f} - C_subs = sp.solve(eq_C,C) - - eqns_D = {u_f.subs(C_subs).subs(x, a)} - D_subs = sp.solve(eqns_D, D) - - u_f.subs(C_subs).subs(D_subs) - eqns_a = {eps_f.subs(C_subs).subs(D_subs).subs(x, a)} - a_subs = sp.solve(eqns_a, a) - - var_subs = {**C_subs,**D_subs,**a_subs} - - u_f_x = u_f.subs(var_subs) - - u_fa_x = sp.Piecewise((u_f_x, x > var_subs[a]), - (0, x <= var_subs[a])) - - eps_f_x = sp.diff(u_fa_x,x) - - sig_f_x = E_f * eps_f_x - - tau_x = sp.simplify(sig_f_x.diff(x) * A_f / p) - - u_f_x.subs(x, 0) - w - - Pw_pull = sp.solve(u_f_x.subs({x: 0}) - w, P)[0] - - w_L_b = u_fa_x.subs(x, -L_b).subs(P, Pw_pull) - - aw_pull = a_subs[a].subs(P, Pw_pull) - - #------------------------------------------------------------------------- - # Declaration of the lambdified methods - #------------------------------------------------------------------------- - - symb_model_params = ['E_f', 'A_f', 'tau', 'p', 'L_b'] - - # List of expressions for which the methods `get_` - symb_expressions = [ - ('eps_f_x', ('x','P',)), - ('sig_f_x', ('x','P',)), - ('u_f_x', ('x','P',)), - ('w_L_b', ('w',)), - ('aw_pull', ('w',)), - ('Pw_pull', ('w',)), - ] - -class PO_ELF_RLM(bu.Model, bu.InjectSymbExpr): - """ - Pullout elastic long fiber and rigid long matrix - """ - symb_class = PO_ELF_RLM_Symb - - name = "PO-ELF-RLM" - - E_f = bu.Float(210000, MAT=True) - tau = bu.Float(8, MAT=True) - A_f = bu.Float(100, CS=True) - p = bu.Float(20, CS=True) - L_b = bu.Float(300, GEO=True) - w_max = bu.Float(3, BC=True) - - hist = tr.Property(bu.Instance(POHistory)) - @tr.cached_property - def _get_hist(self): - return POHistory(po=self) - - tree = ['hist'] - - ipw_view = bu.View( - bu.Item('E_f', latex=r'E_\mathrm{f}~[\mathrm{MPa}]'), - bu.Item('tau', latex=r'\tau~[\mathrm{MPa}]'), - bu.Item('A_f', latex=r'A_\mathrm{f}~[\mathrm{mm}^2]'), - bu.Item('p', latex=r'p~[\mathrm{mm}]'), - bu.Item('L_b', latex=r'L_\mathrm{b}~[\mathrm{mm}]'), - bu.Item('w_max', latex=r'w_\max~[\mathrm{mm}]') - ) - - w_range = tr.Property(depends_on='state_changed') - """Pull-out range w""" - @tr.cached_property - def _get_w_range(self): - return np.linspace(0, self.w_max, 100) - - def update_plot(self, ax): - P_range = self.symb.get_Pw_pull(self.w_range) - ax.plot(self.w_range, P_range*0.001) - ax.set_ylabel(r'$P$ [kN]') - ax.set_xlabel(r'$w$ [mm]') - diff --git a/pull_out/pull_out.ipynb b/pull_out/pull_out.ipynb index b4226f4fdaf4f346bb0c69d5c114467093c0c172..447c1f235e4df4c60f2cad589c49f02bdee9744d 100644 --- a/pull_out/pull_out.ipynb +++ b/pull_out/pull_out.ipynb @@ -2,15 +2,50 @@ "cells": [ { "cell_type": "markdown", - "id": "golden-cloud", + "id": "interior-commons", "metadata": {}, "source": [ "# Pull-out, Push-in" ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "handed-infrared", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "eta 0.0\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "082663c51da942d29e00473c77fc2dff", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib widget\n", + "from pull_out import PO_ELF_RLM\n", + "po = PO_ELF_RLM()\n", + "po.interact()" + ] + }, { "cell_type": "markdown", - "id": "defensive-pierce", + "id": "flush-apparatus", "metadata": {}, "source": [ "## Constant bond-slip law\n", @@ -24,7 +59,7 @@ { "cell_type": "code", "execution_count": null, - "id": "selected-nature", + "id": "blond-receptor", "metadata": {}, "outputs": [], "source": [] diff --git a/pull_out/pull_out.py b/pull_out/pull_out.py new file mode 100644 index 0000000000000000000000000000000000000000..e661f23942d58799a3939aea6455564cd3950a0f --- /dev/null +++ b/pull_out/pull_out.py @@ -0,0 +1,284 @@ + + +import bmcs_utils.api as bu +import numpy as np +import sympy as sp +import traits.api as tr + +class PO_ELF_RLM_Symb(bu.SymbExpr): + """Pullout of elastic Long fiber, fromm rigid long matrix + """ + E_f, A_f = sp.symbols(r'E_\mathrm{f}, A_\mathrm{f}', positive=True) + E_m, A_m = sp.symbols(r'E_\mathrm{m}, A_\mathrm{m}', positive=True) + tau, p = sp.symbols(r'\bar{\tau}, p', positive=True) + C, D = sp.symbols(r'C, D') + P, w = sp.symbols(r'P, w', positive=True) + x, a, L_b = sp.symbols(r'x, a, L_b') + + d_sig_f = p * tau / A_f + + sig_f = sp.integrate(d_sig_f, x) + C + eps_f = sig_f / E_f + + u_f = sp.integrate(eps_f, x) + D + + eq_C = {P - sig_f.subs({x:0}) * A_f} + C_subs = sp.solve(eq_C,C) + + eqns_D = {u_f.subs(C_subs).subs(x, a)} + D_subs = sp.solve(eqns_D, D) + + u_f.subs(C_subs).subs(D_subs) + eqns_a = {eps_f.subs(C_subs).subs(D_subs).subs(x, a)} + a_subs = sp.solve(eqns_a, a) + + var_subs = {**C_subs,**D_subs,**a_subs} + + u_f_x = u_f.subs(var_subs) + + u_fa_x = sp.Piecewise((u_f_x, x > var_subs[a]), + (0, x <= var_subs[a])) + + eps_f_x = sp.diff(u_fa_x,x) + + sig_f_x = E_f * eps_f_x + + tau_x = sp.simplify(sig_f_x.diff(x) * A_f / p) + + u_f_x.subs(x, 0) - w + + Pw_pull = sp.solve(u_f_x.subs({x: 0}) - w, P)[0] + + w_L_b = u_fa_x.subs(x, -L_b).subs(P, Pw_pull) + + aw_pull = a_subs[a].subs(P, Pw_pull) + + eps_m_x = 0 + sig_m_x = 0 + u_ma_x = 0 + #------------------------------------------------------------------------- + # Declaration of the lambdified methods + #------------------------------------------------------------------------- + + symb_model_params = ['E_f', 'A_f', 'tau', 'p', 'L_b'] + + symb_expressions = [ + ('eps_f_x', ('x','P',)), + ('eps_m_x', ('x','P',)), + ('sig_f_x', ('x','P',)), + ('sig_m_x', ('x','P',)), + ('tau_x', ('x','P',)), + ('u_fa_x', ('x','P',)), + ('u_ma_x', ('x','P',)), + ('w_L_b', ('w',)), + ('aw_pull', ('w',)), + ('Pw_pull', ('w',)), + ] + +class PO_ELF_ELM_Symb(bu.SymbExpr): + """Pullout of elastic Long fiber, fromm elastic long matrix + """ + E_m, A_m = sp.symbols(r'E_\mathrm{m}, A_\mathrm{m}', nonnegative=True) + E_f, A_f = sp.symbols(r'E_\mathrm{f}, A_\mathrm{f}', nonnegative=True) + tau, p = sp.symbols(r'\bar{\tau}, p', nonnegative=True) + C, D, E, F = sp.symbols('C, D, E, F') + P, w = sp.symbols('P, w') + x, a, L_b = sp.symbols('x, a, L_b') + + d_sig_f = p * tau / A_f + d_sig_m = -p * tau / A_m + + sig_f = sp.integrate(d_sig_f, x) + C + sig_m = sp.integrate(d_sig_m, x) + D + + eps_f = sig_f / E_f + eps_m = sig_m / E_m + + u_f = sp.integrate(eps_f, x) + E + u_m = sp.integrate(eps_m, x) + F + + eq_C = {P - sig_f.subs({x: 0}) * A_f} + C_subs = sp.solve(eq_C, C) + eq_D = {P + sig_m.subs({x: 0}) * A_m} + D_subs = sp.solve(eq_D, D) + + F_subs = sp.solve({u_m.subs(x, 0) - 0}, F) + + eqns_u_equal = {u_f.subs(C_subs).subs(x, a) - u_m.subs(D_subs).subs(F_subs).subs(x, a)} + E_subs = sp.solve(eqns_u_equal, E) + + eqns_eps_equal = {eps_f.subs(C_subs).subs(x, a) - eps_m.subs(D_subs).subs(x, a)} + a_subs = sp.solve(eqns_eps_equal, a) + var_subs = {**C_subs, **D_subs, **F_subs, **E_subs, **a_subs} + + u_f_x = u_f.subs(var_subs) + u_m_x = u_m.subs(var_subs) + + u_fa_x = sp.Piecewise((u_f_x.subs(x, var_subs[a]), x <= var_subs[a]), + (u_f_x, x > var_subs[a])) + u_ma_x = sp.Piecewise((u_m_x.subs(x, var_subs[a]), x <= var_subs[a]), + (u_m_x, x > var_subs[a])) + + eps_f_x = sp.diff(u_fa_x, x) + eps_m_x = sp.diff(u_ma_x, x) + + sig_f_x = E_f * eps_f_x + sig_m_x = E_m * eps_m_x + + tau_x = sig_f_x.diff(x) * A_f / p + + eps_f_0 = P / E_f / A_f + eps_m_0 = -P / E_m / A_m + a_subs = sp.solve({P - p * tau * a}, a) + w_el = sp.Rational(1, 2) * (eps_f_0 - eps_m_0) * a + Pw_pull_elastic = sp.solve(w_el.subs(a_subs) - w, P)[1] + + Pw_push, Pw_pull = sp.solve(u_f_x.subs({x: 0}) - w, P) + + w_L_b = u_fa_x.subs(x, -L_b).subs(P, Pw_pull) + + aw_pull = a_subs[a].subs(P, Pw_pull) + + #------------------------------------------------------------------------- + # Declaration of the lambdified methods + #------------------------------------------------------------------------- + + symb_model_params = ['E_f', 'A_f', 'E_m', 'A_m', 'tau', 'p', 'L_b'] + + symb_expressions = [ + ('eps_f_x', ('x','P',)), + ('eps_m_x', ('x','P',)), + ('sig_f_x', ('x','P',)), + ('sig_m_x', ('x','P',)), + ('tau_x', ('x','P',)), + ('u_fa_x', ('x','P',)), + ('u_ma_x', ('x','P',)), + ('w_L_b', ('w',)), + ('aw_pull', ('w',)), + ('Pw_pull', ('w',)), + ] + +class PO_ELF_RLM(bu.Model, bu.InjectSymbExpr): + """ + Pullout elastic long fiber and rigid long matrix + """ + symb_class = PO_ELF_ELM_Symb + + name = "PO-ELF-RLM" + + E_f = bu.Float(210000, MAT=True) + E_m = bu.Float(28000, MAT=True) + tau = bu.Float(8, MAT=True) + A_f = bu.Float(100, CS=True) + A_m = bu.Float(100*100, CS=True) + p = bu.Float(20, CS=True) + L_b = bu.Float(300, GEO=True) + w_max = bu.Float(3, BC=True) + + t = bu.Float(0.0) + t_max = bu.Float(1.0) + + ipw_view = bu.View( + bu.Item('E_f', latex=r'E_\mathrm{f}~[\mathrm{MPa}]'), + bu.Item('E_m', latex=r'E_\mathrm{m}~[\mathrm{MPa}]'), + bu.Item('tau', latex=r'\tau~[\mathrm{MPa}]'), + bu.Item('A_f', latex=r'A_\mathrm{f}~[\mathrm{mm}^2]'), + bu.Item('A_m', latex=r'A_\mathrm{m}~[\mathrm{mm}^2]'), + bu.Item('p', latex=r'p~[\mathrm{mm}]'), + bu.Item('L_b', latex=r'L_\mathrm{b}~[\mathrm{mm}]'), + bu.Item('w_max', latex=r'w_\max~[\mathrm{mm}]'), + time_editor = bu.HistoryEditor( + var='t', + var_max='t_max' + ) + ) + + w_range = tr.Property(depends_on='state_changed') + """Pull-out range w""" + @tr.cached_property + def _get_w_range(self): + return np.linspace(0, self.w_max, 100) + + def plot_fields(self, ax11, ax12, ax21, ax22): + L_b = self.L_b + x_range = np.linspace(-L_b, 0, 100) + w_max = self.w_max + w = self.t * w_max + P = self.symb.get_Pw_pull(w) + eps_f_range = self.symb.get_eps_f_x(x_range, P) + sig_f_range = self.symb.get_sig_f_x(x_range, P) + u_f_range = self.symb.get_u_fa_x(x_range, P) + eps_m_range = self.symb.get_eps_m_x(x_range, P) + sig_m_range = self.symb.get_sig_m_x(x_range, P) + u_m_range = self.symb.get_u_ma_x(x_range, P) + tau_range = self.symb.get_tau_x(x_range, P) + + P_max = self.symb.get_Pw_pull(w_max) + eps_f_max = self.symb.get_eps_f_x(0, P_max) + sig_f_max = self.symb.get_sig_f_x(0, P_max) + u_f_max = self.symb.get_u_fa_x(0, P_max) + eps_m_max = self.symb.get_eps_m_x(0, P_max) + sig_m_max = self.symb.get_sig_m_x(0, P_max) + u_m_max = self.symb.get_u_ma_x(0, P_max) + tau_max = self.symb.get_tau_x(0, P_max) + + ax11.plot(x_range, eps_f_range, color='blue') + ax11.plot(x_range, eps_m_range, color='blue', linestyle='dashed') + ax11.fill_between(x_range, eps_f_range, 0, color='blue', alpha=0.1) + ax11.fill_between(x_range, eps_m_range, 0, color='blue', alpha=0.1) + ax11.set_xlabel(r'$x$ [mm]') + ax11.set_ylabel(r'$\varepsilon$ [-]') + ax11.set_ylim(ymin=eps_m_max,ymax=eps_f_max) + + ax21.plot(x_range, sig_f_range, color='red') + ax21.plot(x_range, sig_m_range, color='red', linestyle='dashed') + ax21.fill_between(x_range, sig_f_range, 0, alpha=0.1, color='red') + ax21.fill_between(x_range, sig_m_range, 0, alpha=0.1, color='red') + ax21.set_xlabel(r'$x$ [mm]') + ax21.set_ylabel(r'$\sigma$ [MPa]') + ax21.set_ylim(ymin=sig_m_max,ymax=sig_f_max) + + ax12.plot(x_range, u_f_range, color='green') + ax12.plot(x_range, u_m_range, color='green', linestyle='dashed') + ax12.fill_between(x_range, u_f_range, 0, alpha=0.1, color='green') + ax12.fill_between(x_range, u_m_range, 0, alpha=0.1, color='green') + ax12.set_xlabel(r'$x$ [mm]') + ax12.set_ylabel(r'$u$ [mm]') + ax12.set_ylim(ymin=u_m_max,ymax=u_f_max) + + ax22.plot(x_range, tau_range, color='orange') + ax22.fill_between(x_range, tau_range, 0, alpha=0.1, color='orange') + ax22.set_xlabel(r'$x$ [mm]') + ax22.set_ylabel(r'$\tau$ [MPa]') + ax22.set_ylim(ymin=0,ymax=1.5*tau_max) + + def plot_Pw(self, ax): + w = self.t * self.w_max + P = 0.001*self.symb.get_Pw_pull(w) + w_L_b = self.symb.get_w_L_b(w) + ax.plot(w,P,marker='o', color='blue') + ax.plot(w_L_b,P,marker='o', color='blue') + + P_range = self.symb.get_Pw_pull(self.w_range) + w_L_b_range = self.symb.get_w_L_b(self.w_range) + ax.plot(self.w_range, P_range * 0.001, color='blue', label=r'$w(0)$') + ax.plot(w_L_b_range, P_range * 0.001, color='blue', linestyle='dashed', + label=r'$w(L_\mathrm{b})$') + ax.set_ylabel(r'$P$ [kN]') + ax.set_xlabel(r'$w$ [mm]') + ax.legend() + + def subplots(self, fig): + gs = fig.add_gridspec(1,2, width_ratios=[2., 1.]) + ax1 = fig.add_subplot(gs[0]) + gs2 = gs[1].subgridspec(2, 1) + ax2 = fig.add_subplot(gs2[0]) + ax22 = ax2.twinx() + ax3 = fig.add_subplot(gs2[1]) + ax33 = ax3.twinx() + return ax1, ax2, ax22, ax3, ax33 + + def update_plot(self, axes): + ax, ax2, ax22, ax3, ax33 = axes + self.plot_Pw(ax) + self.plot_fields(ax2, ax22, ax3, ax33) \ No newline at end of file