{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Point source on top of a halfspace" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Overview:** We are going to play with the solutions for a concentrated force located at $(0,0,0)$. Positive $z$ is inside the medium." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import division\n", "import numpy as np\n", "from sympy import *\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from matplotlib import colors" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib notebook\n", "\n", "gray = '#757575'\n", "plt.rcParams[\"mathtext.fontset\"] = \"cm\"\n", "plt.rcParams[\"text.color\"] = gray\n", "plt.rcParams[\"xtick.color\"] = gray\n", "plt.rcParams[\"ytick.color\"] = gray\n", "plt.rcParams[\"axes.labelcolor\"] = gray\n", "plt.rcParams[\"axes.edgecolor\"] = gray\n", "\n", "init_printing()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "x, y, z, r, E, nu, Fx, Fy, Fz = symbols('x y z r E nu F1 F2 F3')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(\\frac{F_{1} \\left(r \\left(- 2 \\nu + 2\\right) + z\\right)}{r \\left(r + z\\right)} + F_{3} \\left(- \\frac{x \\left(- 2 \\nu + 1\\right)}{r \\left(r + z\\right)} + \\frac{x z}{r^{3}}\\right) + \\frac{x \\left(F_{1} x + F_{2} y\\right) \\left(2 r \\left(\\nu r + z\\right) + z^{2}\\right)}{r^{3} \\left(r + z\\right)^{2}}\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ ⎛\n", " ⎜F₁⋅(r⋅(-2⋅ν + 2) + z) ⎛ x⋅(-2⋅ν + 1) x⋅z⎞ x⋅(F₁⋅x + F₂⋅y)⋅⎝\n", "(ν + 1)⋅⎜───────────────────── + F₃⋅⎜- ──────────── + ───⎟ + ─────────────────\n", " ⎜ r⋅(r + z) ⎜ r⋅(r + z) 3⎟ 3 \n", " ⎝ ⎝ r ⎠ r ⋅(r\n", "──────────────────────────────────────────────────────────────────────────────\n", " 2⋅π⋅E \n", "\n", " 2⎞⎞\n", "2⋅r⋅(ν⋅r + z) + z ⎠⎟\n", "───────────────────⎟\n", " 2 ⎟\n", " + z) ⎠\n", "────────────────────\n", " " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ux = (1+nu)/(2*pi*E)*((x*z/r**3 - (1-2*nu)*x/(r*(r + z)))*Fz +\n", " (2*(1 - nu)*r + z)/(r*(r + z))*Fx +\n", " ((2*r*(nu*r + z) + z**2)*x)/(r**3*(r + z)**2)*(x*Fx + y*Fy))\n", "ux" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(\\frac{F_{2} \\left(r \\left(- 2 \\nu + 2\\right) + z\\right)}{r \\left(r + z\\right)} + F_{3} \\left(- \\frac{y \\left(- 2 \\nu + 1\\right)}{r \\left(r + z\\right)} + \\frac{y z}{r^{3}}\\right) + \\frac{y \\left(F_{1} x + F_{2} y\\right) \\left(2 r \\left(\\nu r + z\\right) + z^{2}\\right)}{r^{3} \\left(r + z\\right)^{2}}\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ ⎛\n", " ⎜F₂⋅(r⋅(-2⋅ν + 2) + z) ⎛ y⋅(-2⋅ν + 1) y⋅z⎞ y⋅(F₁⋅x + F₂⋅y)⋅⎝\n", "(ν + 1)⋅⎜───────────────────── + F₃⋅⎜- ──────────── + ───⎟ + ─────────────────\n", " ⎜ r⋅(r + z) ⎜ r⋅(r + z) 3⎟ 3 \n", " ⎝ ⎝ r ⎠ r ⋅(r\n", "──────────────────────────────────────────────────────────────────────────────\n", " 2⋅π⋅E \n", "\n", " 2⎞⎞\n", "2⋅r⋅(ν⋅r + z) + z ⎠⎟\n", "───────────────────⎟\n", " 2 ⎟\n", " + z) ⎠\n", "────────────────────\n", " " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "uy = (1+nu)/(2*pi*E)*((y*z/r**3 - (1-2*nu)*y/(r*(r + z)))*Fz +\n", " (2*(1 - nu)*r + z)/(r*(r + z))*Fy +\n", " ((2*r*(nu*r + z) + z**2)*y)/(r**3*(r + z)**2)*(x*Fx + y*Fy))\n", "uy" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(F_{3} \\left(\\frac{- 2 \\nu + 2}{r} + \\frac{z^{2}}{r^{3}}\\right) + \\left(F_{1} x + F_{2} y\\right) \\left(\\frac{- 2 \\nu + 1}{r \\left(r + z\\right)} + \\frac{z}{r^{3}}\\right)\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ ⎛ 2⎞ ⎞\n", " ⎜ ⎜-2⋅ν + 2 z ⎟ ⎛ -2⋅ν + 1 z ⎞⎟\n", "(ν + 1)⋅⎜F₃⋅⎜──────── + ──⎟ + (F₁⋅x + F₂⋅y)⋅⎜───────── + ──⎟⎟\n", " ⎜ ⎜ r 3⎟ ⎜r⋅(r + z) 3⎟⎟\n", " ⎝ ⎝ r ⎠ ⎝ r ⎠⎠\n", "─────────────────────────────────────────────────────────────\n", " 2⋅π⋅E " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "uz = (1+nu)/(2*pi*E)*((2*(1 - nu)/r + z**2/r**3)*Fz +\n", " ((1 - 2*nu)/(r*(r + z)) + z/r**3)*(x*Fx + y*Fy))\n", "uz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Withouth loss of generality we can assume that $F_y=0$, this is equivalent a rotate the axes until the force is in the plane $y=0$." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(\\frac{F_{1} \\left(r \\left(- 2 \\nu + 2\\right) + z\\right)}{r \\left(r + z\\right)} + \\frac{F_{1} x^{2} \\left(2 r \\left(\\nu r + z\\right) + z^{2}\\right)}{r^{3} \\left(r + z\\right)^{2}} + F_{3} \\left(- \\frac{x \\left(- 2 \\nu + 1\\right)}{r \\left(r + z\\right)} + \\frac{x z}{r^{3}}\\right)\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ 2 ⎛ 2⎞ \n", " ⎜F₁⋅(r⋅(-2⋅ν + 2) + z) F₁⋅x ⋅⎝2⋅r⋅(ν⋅r + z) + z ⎠ ⎛ x⋅(-2⋅ν + \n", "(ν + 1)⋅⎜───────────────────── + ────────────────────────── + F₃⋅⎜- ──────────\n", " ⎜ r⋅(r + z) 3 2 ⎜ r⋅(r + z)\n", " ⎝ r ⋅(r + z) ⎝ \n", "──────────────────────────────────────────────────────────────────────────────\n", " 2⋅π⋅E \n", "\n", " ⎞\n", "1) x⋅z⎞⎟\n", "── + ───⎟⎟\n", " 3⎟⎟\n", " r ⎠⎠\n", "──────────\n", " " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ux = ux.subs(Fy, 0)\n", "ux" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(\\frac{F_{1} \\left(r \\left(- 2 \\nu + 2\\right) + z\\right)}{r \\left(r + z\\right)} + \\frac{F_{1} x^{2} \\left(2 r \\left(\\nu r + z\\right) + z^{2}\\right)}{r^{3} \\left(r + z\\right)^{2}} + F_{3} \\left(- \\frac{x \\left(- 2 \\nu + 1\\right)}{r \\left(r + z\\right)} + \\frac{x z}{r^{3}}\\right)\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ 2 ⎛ 2⎞ \n", " ⎜F₁⋅(r⋅(-2⋅ν + 2) + z) F₁⋅x ⋅⎝2⋅r⋅(ν⋅r + z) + z ⎠ ⎛ x⋅(-2⋅ν + \n", "(ν + 1)⋅⎜───────────────────── + ────────────────────────── + F₃⋅⎜- ──────────\n", " ⎜ r⋅(r + z) 3 2 ⎜ r⋅(r + z)\n", " ⎝ r ⋅(r + z) ⎝ \n", "──────────────────────────────────────────────────────────────────────────────\n", " 2⋅π⋅E \n", "\n", " ⎞\n", "1) x⋅z⎞⎟\n", "── + ───⎟⎟\n", " 3⎟⎟\n", " r ⎠⎠\n", "──────────\n", " " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "uy = ux.subs(Fy, 0)\n", "uy" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{\\left(\\nu + 1\\right) \\left(F_{1} x \\left(\\frac{- 2 \\nu + 1}{r \\left(r + z\\right)} + \\frac{z}{r^{3}}\\right) + F_{3} \\left(\\frac{- 2 \\nu + 2}{r} + \\frac{z^{2}}{r^{3}}\\right)\\right)}{2 \\pi E}$$" ], "text/plain": [ " ⎛ ⎛ 2⎞⎞\n", " ⎜ ⎛ -2⋅ν + 1 z ⎞ ⎜-2⋅ν + 2 z ⎟⎟\n", "(ν + 1)⋅⎜F₁⋅x⋅⎜───────── + ──⎟ + F₃⋅⎜──────── + ──⎟⎟\n", " ⎜ ⎜r⋅(r + z) 3⎟ ⎜ r 3⎟⎟\n", " ⎝ ⎝ r ⎠ ⎝ r ⎠⎠\n", "────────────────────────────────────────────────────\n", " 2⋅π⋅E " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "uz = uz.subs(Fy, 0)\n", "uz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The displacement vector is then" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "u = Matrix([ux, uy, uz]).subs(r, sqrt(x**2 + y**2 + z**2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check if the displacement vanish when $x,y,z \\rightarrow \\infty$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}0\\\\0\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡0⎤\n", "⎢ ⎥\n", "⎢0⎥\n", "⎢ ⎥\n", "⎣0⎦" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.limit(x, oo)\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}0\\\\0\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡0⎤\n", "⎢ ⎥\n", "⎢0⎥\n", "⎢ ⎥\n", "⎣0⎦" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.limit(y, oo)\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}0\\\\0\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡0⎤\n", "⎢ ⎥\n", "⎢0⎥\n", "⎢ ⎥\n", "⎣0⎦" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.limit(z, oo)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def sym_grad(u, x):\n", " \"\"\"Compute the symmetric gradient of u wrt to x\"\"\"\n", " return Matrix(3, 3, lambda i,j:\n", " S(1)/2*(diff(u[i], x[j]) + diff(u[j], x[i])))\n", "\n", "\n", "def strain_to_stress(e, E, nu):\n", " \"\"\"Strain to stress relation (Hooke's law)\"\"\"\n", " lamda = E*nu/((1 + nu)*(1 - 2*nu))\n", " mu = E/(2*(1 + nu))\n", " delta = eye(3)\n", " return Matrix(3, 3, lambda i,j: \n", " lamda*(e[0,0] + e[1,1] + e[2,2])*delta[i,j] + 2*mu*e[i,j])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "e = sym_grad(u, [x,y,z])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "sigma = strain_to_stress(e, E, nu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check if the strains and stress components vanish when $x,y,z \\rightarrow \\infty$" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "check_strains = False\n", "if check_strains:\n", " display(e.limit(x, oo))\n", " display(e.limit(y, oo))\n", " display(e.limit(z, oo))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "check_stresses = False\n", "if check_stresses:\n", " display(sigma.limit(x, oo))\n", " display(sigma.limit(y, oo))\n", " display(sigma.limit(z, oo))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualization of the fields" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "x_vec, z_vec = np.mgrid[-2:2:100j, 0:5:100j]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def field_plot(expr, x_vec, y_vec, z_vec, E_val, nu_val, Fx_val, Fz_val, title=''):\n", " \"\"\"Plot the field\"\"\" \n", " \n", " # Lambdify the function\n", " expr_fun = lambdify((x, y, z, E, nu, Fx, Fz), expr, \"numpy\")\n", " expr_vec = expr_fun(x_vec, y_vec, z_vec, E_val, nu_val, Fx_val, Fz_val) \n", " \n", " # Determine extrema\n", " vmin = np.min(expr_vec)\n", " vmax = np.max(expr_vec)\n", " print(\"Minimum value in the domain: {:g}\".format(vmin))\n", " print(\"Maximum value in the domain: {:g}\".format(vmax))\n", " vmax = max(np.abs(vmax), np.abs(vmin))\n", " \n", " # Plotting\n", " fig = plt.gcf()\n", " ax = plt.gca()\n", " levels = np.logspace(-1, np.log10(vmax), 10)\n", " levels = np.hstack((-levels[-1::-1], [0], levels))\n", " cbar_ticks = [\"{:.2g}\".format(level) for level in levels]\n", " cont = plt.contourf(x_vec, z_vec, expr_vec, levels=levels,\n", " cmap=\"RdYlBu_r\", norm=colors.SymLogNorm(0.1))\n", " cbar = fig.colorbar(cont, ticks=levels[::2])\n", " cbar.ax.set_yticklabels(cbar_ticks[::2])\n", " plt.axis(\"image\")\n", " plt.gca().invert_yaxis()\n", " plt.xlabel(r\"$x$\")\n", " plt.ylabel(r\"$z$\")\n", " plt.title(title)\n", " return cont" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Displacements" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -4.09665\n", "Maximum value in the domain: 4.09665\n" ] } ], "source": [ "plt.figure(figsize=(6, 4))\n", "field_plot(u[0], x_vec, 0, z_vec, 1.0, 0.3, 0.0, 1.0)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "scrolled": true }, "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -38.5975\n", "Maximum value in the domain: 272.979\n" ] }, { "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -51.6639\n", "Maximum value in the domain: 51.6639\n" ] }, { "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -59.0538\n", "Maximum value in the domain: 116.991\n" ] }, { "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -51.6639\n", "Maximum value in the domain: 51.6639\n" ] }, { "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: -158.248\n", "Maximum value in the domain: 116.991\n" ] } ], "source": [ "for row in range(0,3):\n", " for col in range(0,3):\n", " plt.figure(figsize=(6, 4))\n", " field_plot(sigma[row,col], x_vec, 0, z_vec, 1.0, 0.3, 0.0, 1.0,\n", " title=r\"$\\sigma_{%i%i}$\"%(row+1, col+1))\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stress invariants\n", "\n", "We can also plot the invariants of the stress tensor" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: 0.000527446\n", "Maximum value in the domain: 260050\n" ] } ], "source": [ "I2 = S(1)/2*(trace(sigma)**2 + trace(sigma**2))\n", "plt.figure(figsize=(6, 4))\n", "field_plot(I2, x_vec, 0, z_vec, 1.0, 0.3, 0.0, 1.0)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "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 = $('
');\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", " '
');\n", " var titletext = $(\n", " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
')\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 = $('');\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 = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var 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", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\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= 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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Minimum value in the domain: 0.014796\n", "Maximum value in the domain: 515.881\n" ] } ], "source": [ "Mises = sqrt(((sigma[0,0] - sigma[1,1])**2 + (sigma[1,1] - sigma[2,2])**2 +\n", " (sigma[2,2] - sigma[0,0])**2 +\n", " 6*(sigma[0,1]**2 + sigma[1,2]**2 + sigma[0,2]**2))/2)\n", "plt.figure(figsize=(6, 4))\n", "field_plot(Mises, x_vec, 0, z_vec, 1.0, 0.3, 0.0, 1.0)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('./styles/custom_barba.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "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.6.6" } }, "nbformat": 4, "nbformat_minor": 1 }