From a15f314a4a54acfab448141d0efe73e94ae82770 Mon Sep 17 00:00:00 2001 From: rch <rostislav.chudoba@rwth-aachen.de> Date: Fri, 8 May 2020 15:05:49 +0200 Subject: [PATCH] plasticity --- bmcs_course/2_2_PO_LF_LM_EL.ipynb | 4338 ++++++++++++++-- bmcs_course/4_2_BS_EP_SH_IK_A.ipynb | 1207 +++++ bmcs_course/4_2_BS_elasto_plastic.ipynb | 694 --- bmcs_course/4_3_BS_EP_SH_IK.ipynb | 1123 ----- bmcs_course/4_3_BS_EP_SH_IK_N.ipynb | 6015 +++++++++++++++++++++++ index.ipynb | 11 +- 6 files changed, 11180 insertions(+), 2208 deletions(-) create mode 100644 bmcs_course/4_2_BS_EP_SH_IK_A.ipynb delete mode 100644 bmcs_course/4_2_BS_elasto_plastic.ipynb delete mode 100644 bmcs_course/4_3_BS_EP_SH_IK.ipynb create mode 100644 bmcs_course/4_3_BS_EP_SH_IK_N.ipynb diff --git a/bmcs_course/2_2_PO_LF_LM_EL.ipynb b/bmcs_course/2_2_PO_LF_LM_EL.ipynb index 03cccc8..fa57263 100644 --- a/bmcs_course/2_2_PO_LF_LM_EL.ipynb +++ b/bmcs_course/2_2_PO_LF_LM_EL.ipynb @@ -1796,7 +1796,7 @@ { "data": { "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAHCCAYAAAC30AdjAAAgAElEQVR4nOzdZ1hU1+I18D1DVVRsgJggiYrdqNixhRhL7IolMRpC1KixxfrqVREVYq/EFgtYEhUlolixF4wiolhQqiDDtdwkotGgUtb7IZF/JjMgZWAPM+v3POuDHJ05cubssxfM7CNARERERERERknI3gEiIiIiIiKSg4WQiIiIiIjISLEQEhERERERGSkWQiIiIiIiIiPFQkhERERERGSkWAiJiIiIiIiMFAshERERERGRkWIhJCIiIiIiMlIshEREREREREaKhZCIiIiIiMhIsRASEREREREZKRZCIiIiIiIiI8VCSEREREREZKRYCImIiIiIiIwUCyEREREREZGRYiEkIiIiIiIyUiyERERERERERoqFkIiIiIiIyEixEBIRERERERkpFkIiIiIiIiIjxUJIRERERERkpFgI9ZCdnR3KlCmDevXqMQzDMAzDMAxjxClTpgzKlCmDnj17Fkn3YCHUQ2XKlIGFhYX0Fx/DMAzDMAzDMHJjYWEBCwsLFkJj8ubgExERERGRcSvqbsBCqIdYCImIiIiICGAhNEoshEREREREBLAQGiUWQiIiIiIiAlgIjRILIRERERERASyERomFkIiIiIiIABbCQgsPD8eCBQvQt29fVK1aFUIIWFhYFPjxnjx5ggkTJqBatWowNzdHtWrVMH78eDx58kRn+8xCSEREREREAAthofXu3RtCCLUUtBD++uuvcHJyghAC1atXx8CBA1G/fn0IIVCzZk38+uuvOtlnFkIiIt3IyspCZmYmIylZWVmyXwJERCUeC2EhLVy4EJ6enggODsbDhw8LVQiHDh0KIQT69euH9PT07K+PGzcOQgh88cUXOtlnFkIiooLLyMjAo0ePEBcXh6ioKEZy4uLi8OjRI2RkZMh+aRARlUgshDpW0EL44MEDKJVKmJmZ4eHDh2rbXr58CRsbG5iYmGhsKwgWQiKigsnIyEBCQoL0EsRoJiEhgaWQiKgAWAh1rKCFcMuWLRBCoGPHjlq3f/XVVxBCwM/Pr5B7yEJIRFRQjx49QlRUFKKjo5Gamor09HTpb5s05qSnpyM1NRXR0dGIiorCo0ePZL9EiIhKHBZCHStoIZwwYQKEEJg6darW7d9//z2EEPj2228Lu4t6VQhfvnwpexeI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\" width=\"600\">" + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw4AAAGHCAYAAAAZYgV0AAAgAElEQVR4nOydeVxUVf/Hz4ygbEqIKK64lOb+BIparuQeZplbLrmlVqZm4aPmQqigKC4sCioobmhpgAoqqCAmi4ALioCiAgNoT1qmqaUon98fzw+epmEZtrkD83m/Xu/XS2dg5s7l3nO+n7n3nCNACCGEEEIIIaUgpN4AQgghhBBCiPbD4EAIIYQQQggpFQYHQgghhBBCSKkwOBBCCCGEEEJKhcGBEEIIIYQQUioMDoQQQgghhJBSYXAghBBCCCGElAqDAyGEEEIIIaRUGBwIIYQQQgghpcLgQAghhBBCCCkVBgdCCCGEEEJIqTA4EEIIIYQQQkqFwYEQQgghhBBSKgwOhBBCCCGEkFJhcCCEEEIIIYSUCoMDIYQQQgghpFQYHAghhBBCCCGlwuBQhWRnZ8PHxwfh4eGIjo6mlFJKKaVUY4aHh8PHxwfZ2dmVUtsyOFQhPj4+EEJQSimllFIqmT4+PpVS2zI4VCHh4eGFfyypEyellFJKKdUtC77EDg8Pr5TalsGhComOjoYQAtHR0VJvCiGEEEII0TEquxZlcKhCGBwIIYQQQohUMDhUIxgcCCGEEEKIVDA4VCMYHAghhBBCiFQwOFQjGBwIIYQQQohUMDhUIxgcCCGEEEKIVDA4/AMXFxeMHj0arVq1ghACVlZW5XqdxMREDBkyBPXq1YOJiQn69euHqKioCm0bgwMhRJvIz8/Hw4cPoVAokJ6ejhs3btBKMj09Hffu3cPz58+l/jMTQkghDA7/QAiB+vXrY+DAgTA1NS1XcIiPj4ehoSGsrKywfv16eHh4oFOnTtDT08OpU6fKvW0MDoQQbSE/Px85OTlISUlBSkoK0tLSJC+2a5KpqalISUnB7du3kZ+fL/WfmxBCADA4qHD79u3Cf7dr165cwaFnz54wNjZGVlZW4WO///47mjZtijfeeKPcnQCDAyFEW3j48GFhYfvs2TMWt5XMq1evoFAokJKSgl9//VXqzSGEEAAMDiVSnuBw+/ZtCCEwdepUleccHR0hhEBsbGy5tkfK4PD06VONvychRHspKGqfPXsm9abUWJ4/f46UlBRkZmZKvSmEEC1DqrqMwaEEyhMcDhw4ACEEtm/frvJcWFgYhBBwd3cv1/ZIFRxCQ0PRuHHjcgceQkjNIz09HWlpabzSUIXk5+cjNTUV6enpUm8KIUSLCAgIgKWlJVJTUzX+3gwOJVCe4ODm5gYhBI4fP67y3PXr1yGEwMKFC0t9HYVCgejoaCV9fHw0HhyuXbsGY2NjCCFgYGCAwMBAjb03IUR7KbgXn1Qt3M+EkALy8/Ph4uICIQSEEGjZsiV+++03jW4Dg0MJlCc4rFy5EkIInDlzRuW5gtuY5syZU+rrFNzWVJSaDA5Pnz7FBx98UPjeMpkMGzZs4LeMhOg4LGg1A/czIQQAXrx4gZkzZyrVg/Pnz8erV680uh0MDiVQ2VcckpOTq90VBwB4+fKlysH65Zdf4uXLlxrdDkKI9sCCVjNwPxNCHj16hCFDhhTWYLVq1cLy5ctx//59jW8Lg0MJcIzD/7h79y4WLlwImUxWeODa29vjyZMnGt8WQoj0sKDVDNzPhOg22dnZ6NKlS2HtZWRkBB8fHyQlJTE4aBvlCQ63bt0qdValmJiYcm2P1MHhypUr8PPzg4GBQeEBbGNjg3v37ml8ewgh0sKCVjNwPxOiu1y5cgVNmzYtrLkaNmyII0eOIDs7m8FBGyktONy9exepqakqU2LZ2trC2NgYCoWi8LFHjx6hWbNmaNOmTbVcx6EgOOTm5iI0NBTm5uaFB3Lz5s1x7do1jW8TIUQ6WNBqBu5nQnST0NBQmJiYFNZabdu2xU8//YTc3Fzk5OQwOGgLe/bswapVq7Bq1So0aNAAr732WuH/PT09lX52ypQpEEIgMjJS6fG4uDgYGBjAysoKGzZsgKenJzp16oRatWohLCys3NumLcEhNzcXsbGxaNOmTeEBXbduXZw4cULj20UIkQYWtJqB+5kQ3cPT0xNyubywxurVqxeuXr1aWIMxOGgR/fr1K3Y2o39efSguOABAfHw8Bg0ahLp168LIyAh9+/Yt8ufKgjYFh9zcXFy/fh29evUq3D9yuRxeXl4a3zZCiOZhQasZuJ8J0R3y8vIwd+5cpdrzo48+wq1bt5TqLwYHohbaFhxyc3ORmZmJcePGKR3k8+bN44xLhNRwdLWgHTRoEBo3bqzy+K+//gohBL766qtKfT9d3c+E6BqPHz/G8OHDlaa/d3BwgEKhUKm9GByIWmhjcCg4gJcuXao049Lw4cPx+PFjjW8nIUQz6GpB26BBA9jb26s8Hh4eDiEEdu/eXanvp6v7mRBdIisrC507dy6soQwNDeHp6YmcnJxi6y4GB1Iq2hocCtyxY4fSjEudO3dGVlaWxreVEFL1lFbQDhgwAG3atNE6BwwYUO7PnJWVBSEEHB0dVZ5bs2YNhBC4evVquV+/KBgcCKnZxMXFwdLSUmnmpKCgoBLrLQYHohbaHhxyc3Nx4sQJWFhYKJ0A5Z1+lhCivZRW0P598gRtsk2bNuX+zIGBgRBC4OjRoyrPjR49GnXq1EFeXh4A4MGDB3j33XdRr149DB06tNzvyeBASM0lICAAderUKWyf3nzzTZw/f77UWovBgahFdQgOubm5SEhIQIcOHQpPhNq1a2Pv3r0a32ZCSNWhi1ccli1bBiEEcnNzVZ5r2bIlunXrVvh/Z2dnDBgwoMLjvRgcCKl5vHr1qrA9KbB///5ITk5Wq85icCBqUV2CQ25uLtLT0zF06FClk2LRokV49eqVxredEFL56GJBO3z4cFhaWqo8fvfuXQgh8OmnnxY+NmPGDMyZM6fC76mL+5mQmsyTJ08watQopfpoxowZyMzMVLvGYnAgalGdgkNubi6ys7NVphV7//338ccff2h8+wkhlYsuFrTNmzfHu+++q/K4m5sbhBDYsmULAOCDDz6Anp4e9PX1YWxsDHd393K/py7uZ0JqKgqFAm+99VZhTaSvrw8XF5diB0EzOJAKUd2CQ4Genp6oXbt24YnSpUsXZGZmavwzEEIqD10saM3MzGBra6v02KVLl2BsbAwhhNJ4rilTpvCKAyGkkNjYWDRq1KiwFqpfvz4OHDhQrrqKwYGoRXUNDrm5uTh27JjSoGkLCwtERUVp/HMQQioHXSxohw0bBiEEpkyZAnd3d8ycORMWFhawtraGXC7HkydPCn+WwYEQUoC/v7/SF6jt2rVDVFRUuWsqBgeiFtU5OOTm5iI+Pl5p0LSenh68vb01/lkIIRVHFwvazMxMDB06FCYmJrCwsMDkyZNx584d9OjRA+3atVP6WQYHQkheXh6++uorpVu2BwwYoPYgaAYHUiGqe3DIzc3FrVu3YG9vr3QSzZ49G8+fP9f4ZyKElB8WtCXD4ECIbvPrr79i0KBBKvVOWQZBMziQClETgkPBAb9o0SKllab79OmD//znPxr/XISQ8sGCtmQYHAjRXZKTk5XWsjE0NMTGjRvLPAiawYFUiJoSHArctWtX4aBCIQSaN2+OS5cuafyzEULKDgvakmFwIEQ3CQ4OhomJSWFt06RJExw5cqRS6ycGB6IWNS045ObmIjIyElZWVkqpfP/+/Rr/fISQssGCVjNwPxNSPXj16hVWrFihdGuSjY0N4uPjK712YnAgalETg0Nubi6uX7+OPn36KJ1sX331FfLy8jT+OQkh6sGCVjNwPxOi/fz+++8q4zfHjh2LW7duVUndxOBA1KKmBofc3FwoFAp8/vnnKsuv//LLLxr/rISQ0mFBqxm4nwnRbq5fv462bdsqLerm5OSE7OzsKquZGByIWtTk4FCgt7c3DA0NlcY9XLx4UeOflxBSMixoNQP3MyHaS2BgoNJ4hoYNG+LQoUNVXisxOBC10IXgkJubi9OnT6NFixaFJ6KBgQF2796t8c9MCCkeFrSagfuZEO3j5cuXWLp0qdJdEtbW1rhw4YJG6iQGB6IWuhIccnP/O+6hX79+SiflZ599hr/++kvjn50QogoLWs3A/UyIdvHgwQMMHjxYqT75+OOPq2w8A4MDKTe6FBxyc/877uHLL79UOjm7d+8OhUKh8c9PCFGGBa1m4H4mRHtISEhQuiOiTp06WL16daWtz8DgQCoVXQsOBfr5+SndQ9igQQOcPn1a4/uAEPI/WNBqBu5nQrSDHTt2oHbt2oW1SNOmTREcHCxJXcTgQNRCV4NDbm4ufvrpJ6VZC+RyOVxcXJCfn6/xfUEIYUGrKbifCZGWZ8+eYfr06Up3P7zzzju4dOmSZDURgwNRC10ODrm5uUhPT8fIkSOVTt73338fDx8+1Pj+IETXYUGrGbifCZGO27dvw9raurDmkMlk+Pzzz5GZmSlpPcTgQNRC14NDwcmyatUq6OnpFZ7IrVq14pSthGgYFrSagfuZEGkIDg6GqalpYa1Rr149bNu2TePjGRgcSLlhcPifwcHBaNSokdIApW3btvHWJUI0BAtazcD9TIhmefHiBRwcHJTubmjfvj0iIyMlr30YHEiZYHBQ9urVq+jTp4/SyT1x4kQ8efJE4/uHEF2DBa1m4H4mRHPk5OSgd+/eSnXFmDFjkJaWJnnNw+BAygyDg6oKhQJff/01ZDKZ0jcDKSkpGt9HhOgSLGg1A/czIZrh1KlTsLCwKKwlDA0N4erqqhW3JjE4kHLB4FC8AQEBMDMzKzzhjYyMuNo0IVUIC1rNwP1MSNXy8uVLrFixQukLyNatW+PEiROS1zYMDqRCMDiUbGJiImxsbJQuMU6ZMoW3LhFSBehqQTto0CA0btxY5fFff/0VQgh89dVXlfp+urqfCdEEubm56N+/v1LdMHz4cCQnJ0te0zA4kArD4FC6mZmZ+Oyzz1QGNSUnJ2t8nxFSk9HVgrZBgwawt7dXeTw8PBxCiEq/0qmr+5mQqubkyZNKtybVqVMHjo6OUCgUktcyDA6kUmBwUN89e/Yo3bpkaGgIX19fzrpESCVRWkE7wH8A2ri30ToH+A8o92fOysqCEAKOjo4qz61ZswZCCFy9erXcr18UDA6EVC55eXlYvHix0heMrVq1wrFjxySvXRgcSKXC4FA2ExMT0b17d6XG4eOPP8bjx481vv8IqWmUVtC2cW8D8Z3QOtu4tyn3Zw4MDIQQAkePHlV5bvTo0ahTpw7y8vLK/fpFweBASOWhUCjwzjvvKNUF9vb2Wn9rEoMDKRcMDmU3KysLc+fOVRn0lJCQoPF9SEhNQhevOCxbtgxCCOTm5qo817JlS3Tr1q3cr10cDA6EVA4//vijyp0Izs7OyM7OlrxWYXAgVQKDQ/k9cOAAGjRoUNhg6OnpYd26dXj16pXG9yUhNQFdLGiHDx8OS0tLlcfv3r0LIQQ+/fTTSn9PXdzPhFQmT58+xezZs5WuMrRp0wbHjx+XvDZhcGBwqFIYHCrmlStXVBaMGzhwIO7du6fx/UlIdUcXC9rmzZvj3XffVXnczc0NQghs2bKl8DErKys4OzvD1tYWRkZGGDBgAH755Rc4ODigfv36aN68eZG3PP0TXdzPhFQW165dQ8eOHZX6/bFjx2rdgm4MDqRKYHCouNnZ2Vi2bBn09PQKG5GGDRvixIkTGt+nhFRndLGgNTMzg62trdJjly5dgrGxMYQQiImJKXzcysoKHTt2REZGBh4/fgwbGxu0atUKfn5+ePnyJTw8PNCwYcNSx0To4n4mpKLk5+dj69atMDAwKOzr69WrBw8PD61c0I3BgVQJDA6V5/Hjx2FlZaX0LcT8+fPx559/anzfElId0cWCdtiwYYXrw7i7u2PmzJmwsLCAtbU15HK50poxVlZW8PT0LPy/k5MT2rVrV/j/gnUfMjIySnxPXdzPhFSE+/fvY+TIkUr9u7W1Nc6dOyd57cHgoAqDQxXC4FC53rhxA6NGjVJqXDp16oRr165pfP8SUt3QxYI2MzMTQ4cOhYmJCSwsLDB58mTcuXMHPXr0UAoFwH+Dw6FDhwr/v379evTr16/w/3/++SeEEKW2N7q4nwkpLydPnoSlpWVhny6Xy/HFF1/gzp07ktccDA5Fw+BQhTA4VI0eHh4wMTFRWgTG3d2daz4QUgIsaEuGwYEQzfHnn39i/vz5Sl8ENm7cGPv27asRtyYxOJByweBQdcbFxcHGxkap0RkyZAgHThNSDCxoS4bBgRDNcPXqVXTq1Emp/x4+fDiSkpIkry0YHEqHwaEKYXCoWrOysuDg4IBatWoVNj4NGjRAcHCwxvc3IdoOC9qSYXAgpGp59eoVNm3ahDp16hT22SYmJnB1da2WazMwOFRzAgICYG1tDQMDA5ibm2P8+PHIzMxU63fz8/OxZ88e9OzZE/Xr10fdunXRqVMnODs7448//ij3NjE4aMZjx46hRYsWSt9eTJ06FY8ePdL4fidEW2FBqxm4nwlRJSsrC3Z2dkr99FtvvYWzZ89KXkMwOJSNGhEcPD09IYTAO++8A29vb6xatQrm5uZo0qQJcnNVVwz9J//+978hhICdnR08PT2xdetWfPjhhxBCoG/fvuXeLgYHzXnz5k2MHTtWqVGysrJCVFSUxvc9IdoIC1rNwP1MyP8o+GK2Xr16Sgu6zp07FxkZGZLXDgwOZafaB4cHDx7AxMQE1tbWSvNrJyQkQCaTYcaMGSX+/vPnz2FgYABra2uVVYkLpgdLTU0t17YxOGhePz8/1K9fv7CBkslk+OabbzhtK9F5WNBqBu5nQv7L/fv3VWZCbNWqFQIDAyWvFRgcyk+1Dw5+fn4QQsDf31/luX79+qFu3bp4/vx5sb//xx9/FA7M+Seff/45hBDIysoq17YxOEhjUlISBg4cqNRYdezYEZcvX9b434EQbYEFrWbgfiYECAkJQaNGjZT64UmTJlX7FaAZHGpAcJg9ezaEELh586bKc0uWLIEQAklJSSW+Rq9evSCXy+Hq6or09HRkZGRg+/btMDAwwKefflrubWNwkPYkdXNzg5GRkdLl0ZUrV+LFixca/3sQIjUsaDUD9zPRZX7//XdMnz5dKTBYWlrC39+/Rk6zyuBQDbG3t4cQAs+ePVN5bsuWLRBCIDQ0tMTXyMrKQv/+/ZUOdLlcjpUrV6q9HQqFAtHR0Ur6+PgwOEhsbGwsunfvrrIiZXJyssb/JoRISXp6OtLS0rjeSRWSn5+P1NRUpKenS70phGic8PBwNG/eXKm/fe+992r0NKsMDtWQglH6/xyfAPzvNqa/T7FXFPfv38fs2bPxySefICAgAAcPHsT48eMhhICjo6Na2+Ho6Kh0svxdBgdpVSgUWL58udIUcLVr18batWuVxsUQUpNRKBRISUkp8ksWUjk8f/4cKSkpas/oR0hN4PHjx4V3fxRoZmYGd3f3Gj/NqroyOGgRJV1x8PLyKvWKw9OnT/HGG29g/PjxKs9NmTIFMplMrXvjecVB+42KikLXrl2VGjdbW9tyD34npDrx8OFDpKSk4Pbt23j27BmvPFQyr169Kgxnv/76q9SbQ4hGiIyMRMuWLZX61UGDBiEhIUHyPl+bZHDQIio6xmH37t0QQuDHH39UeS40NBRCCGzevLlc28YxDtpnVlYWFi9eDH19/cJGrk6dOnB1deXVB1Kjyc/PR05ODlJSUpCSkoK0tLTC+/FpxU1NTS0MZgxlpKbz+PHjwglkCjQ1NcWGDRt4laEIGRy0CF9f3xJnVTIxMSlxViUXFxcIIXDw4EGV54KCgiCEgJubW7m2jcFBez1z5gw6duyo1OjZ2Njg6tWrGv9bEaIp8vPz8fDhQygUCqSnp0tebNck09PTce/evRL7G0JqAmFhYSqLrvbv3x9xcXGS9+3aKoODFnH//n0YGRkVu47D9OnTCx+7e/cuUlNT8fTp08LHgoODIYTAsGHDVF77/fffhxAC586dK9e2MThot5mZmXBwcFC6+qCvrw8nJyd2/oQQQsjf+O233zBt2jSVqwxr166FQqGQvE/XZhkctIzNmzcXrhzt4+OD1atXw9zcHJaWlsjJySn8uSlTpkAIgcjIyMLHXr58CVtbWwgh0Lt3b2zatAmbN29Gv379IISAvb19ubeLwaF6GBERgS5duig1hp07d0ZiYqLG/26EEEKItnHkyBE0btxYZSzDhQsXJO/Dq4MMDlrIvn378NZbb8HAwAD169fHuHHjcOfOHaWfKSo4AP8dIO3q6op//etfMDU1RZ06ddCxY0c4OztX6JtnBofqY1EzL9WqVQsLFy5UukJFCCGE6Ao///wzxo0bpxQY6tevj02bNnEsQxlkcCBqweBQ/fzpp59U1n1o3bo1Tp06pfG/ISGEECIF+fn58PPzg5mZmcq6DBcvXpS8r65uMjgQtWBwqJ5mZ2fD2dkZxsbGSg3mlClT8ODBA43/LQkhhBBNkZ6eXrhG1t9Xf/b29tbp1Z8rIoMDUQsGh+ptQkICBg4cqNR4WlhYICAggNMtEkIIqVG8ePECa9euhYGBQWGfJ5PJMGHCBFy7dk3yPrk6y+BA1ILBofqbk5ODbdu2oUGDBkoBYsiQIbh9+7bG/66EEEJIZRMTE6MyScjrr7+O77//nlcZKqmWYHAgpcLgUHO8fv06xo8fr9SoGhgYVHgAPSGEECIVv/32G2bPng2ZTKY0LfmXX36J9PR0yfvemiKDA1ELBoea5+HDh9G6dWulANG+fXtERUVp/G9MCCGElIf8/Hzs378fDRs2VOrPunXrhrCwMMn72pomgwNRCwaHmumdO3fg4OCgNHWrEAJTp06VpFEghBBC1OXmzZsq4/fMzMzg4uLChdyqSAYHohYMDjXb6Oho9O7dW2V+623btuHVq1ca/5sTQgghxfH06VMsW7YMtWvXVuq3Ro0axSlWq1gGB6IWDA4135ycHHh5ecHc3Fzlcm9CQoLG/+6EEELI38nPz8eRI0fQsmVLpX6qTZs22L9/Pwc/a6hWYHAgpcLgoDumpKRgypQpkMvlStPYzZ49G7/++qvG//6EEELIrVu38N577ykFBkNDQyxYsICDnzUogwNRCwYH3TMsLAxvvfWWUiNtbm6OHTt24OXLlxo/DgghhOgeT58+haOjo8pYvMGDB+PcuXOS95W6JoMDUQsGB900Ozsbbm5uMDMzU2qwbWxsEBMTo/FjgRBCiG6Qn5+PQ4cOoUWLFkr9j5WVFfz8/HhbkkQyOBC1YHDQbZOTkzFx4kSl+bGFEJg8eTLu3r2r8WOCEEJIzeXatWsYMGCAynpD8+fPx82bNyXvE3VZBgeiFgwONDc3FydPnoSNjY1SY25iYgJXV1f89ddfGj82CCGE1Bx+++03zJ07F7Vq1VLqZ4YOHcrbkrREBgeiFgwO9O+NhqenJxo1aqTUsL/++usIDg5Gfn6+xo8RQggh1Ze8vDxs2bJFZVa/tm3bYt++fbwtSYtkcCBqweBA/+nNmzcxZ84c6OvrKzX0AwYMwJUrVzR+nBBCCKl+nDhxAh06dFDqR0xNTbF8+XJkZGRI3tdRZRkciFowONDijImJweDBg5UafZlMhunTp+PevXsaP14IIYRoP9evX8fQoUOV+o5atWph/PjxuHTpkuR9Gy1aBgeiFgwOtDR/+OEHtG/fXmX8g7OzM549e6bx44YQQoj28csvv2DOnDkq4xh69+6NEydOSN6X0ZJlcCBqweBA1VGhUGD9+vVo0KCBUofQrFkz+Pv7c/0HQgjRUZ49ewYXFxfUq1dPqX9o3bo1duzYgezsbMn7MFq6DA5ELRgcaFm8ceMG5syZo7JgT9euXREeHq7xY4gQQog0vHz5Ert27UKzZs2U+oPXXnsNy5Ytw+3btyXvs6j6MjgQtWBwoOUxPj4eH3zwgcr6D4MGDeIAakIIqeGcPHkSXbp0UWr/a9eujenTpyMpKUnyPoqWXQYHohYMDrQinjx5Er169VIZQD158mTcuXNH48cUIYSQqiMhIQEDBw5UafPt7e25HkM1l8GBqAWDA62MxmbPnj144403lDoTfX19zJs3D//5z380fmwRQgipPNLS0jB69GilNl4IgR49eiA4OJjrMdQAGRyIWjA40MqyYAC1paWlUsdibGyMFStW4NGjRxo/xgghhJSf7OxszJw5U2WmpLZt22LHjh1QKBSS9z20cmRwIGrB4EAr29u3b2PZsmUwNTVV6mjMzc3h5ubGKVwJIUTL+eWXX+Dg4AADAwOVmfTWr1+PzMxMyfsaWrkyOBC1YHCgVWVqairmzp0LQ0NDpY6ncePG8PT0xF9//aXxY44QQkjx/Pbbb1i6dCmMjY2V2u0GDRpg+fLlSE9Pl7xvoVUjgwNRCwYHWtVeuXIFkydPhp6enlJH1Lx5c2zfvh0vXrzQ+LFHCCHkfzx69AgrV65UuVJct25dzJ8/HykpKZL3JbRqZXAgasHgQDXlhQsXMHbsWJV7ZVu3bg1/f3/k5eVp/BgkhBBd5o8//sDatWtRv359pXbZyMgIs2bNYh+tQzI4ELVgcKCa9vz580WuAdGmTRvs3LmTVyAIIaSKefz4MVxcXGBubq7UDhsYGGDq1KlITEyUvK+gmpXBgagFgwOVysjISAwfPlxler/WrVvDz8+PAYIQQiqZR48ewdnZWeUKg76+PiZMmIC4uDjJ+wYqjQwORC0YHKjUnjp1CsOGDVMJEK1atcL27ds5iJoQQirIw4cPsWrVKpiZmams9vzxxx/j/PnzkvcFVFoZHIhaMDhQbfH06dMYPny4yi1MTZs2xebNm/H06VONH6OEEFKd+c9//oMlS5agXr16KoFhwoQJiImJkbztp9ohgwNRCwYHqm1GRETA3t5eJUA0aNAAzs7O+P333zV+rBJCSHVCoVBg3rx5KtNh16lTB5MmTUJsbKzkbT3VLhkciFowOFBt9ezZsxg1apTKLEz16tXDt99+i59//lnjxywhhJZT69cAACAASURBVGgzaWlpmDFjBvT19VVmSZo2bRrHMNBiZXAgasHgQLXduLg4TJw4EbVr11b55mz27Nm4efOmxo9dQgjRJmJjY/Hhhx+qXKk1NTXFF198gcuXL0vellPtlsGBqAWDA60uXr58GTNnzoSRkZFSxyiTyfDRRx/hwoULGj+GCSFEKl69eoVjx46hT58+KpNLWFhYwMHBAcnJyZK33bR6yOBA1ILBgVY3r1+/DgcHB5XpBIUQ6Nu3L44ePYpXr15p/HgmhBBN8Oeff8LX1xcdOnRQaQOtrKywcuVK3LhxQ/K2mlYvGRyIWjA40Orq7du34eLiAisrK5XO84033oCXlxeePHmi8eOaEEKqgp9//hmOjo6wsLBQafM6d+4MLy8vZGZmSt420+opgwNRCwYHWt1VKBTYtm0bunTpotKZvvbaa1i0aBGys7M1fnwTQkhlcO3aNUyfPl1lnFfBVdaAgAAoFArJ22JavWVwIGrB4EBrijk5OQgMDMSQIUMgl8uVOlc9PT2MGzcO0dHRyM/P1/ixTgghZeHly5cIDg7Gu+++qxIWDAwMMGbMGISFhSEnJ0fytpfWDBkctJCAgABYW1vDwMAA5ubmGD9+PDIzM9X+/ZcvX8Lb2xu2trYwMTGBsbExOnXqBGdn53JvE4MDrYnGxMRg6tSpKgOphRCwtrbGrl278Oeff2r8mCeEkJL49ddfsW7dOrRs2bLIAc/z5s3DxYsXJW9jac2TwUHL8PT0hBAC77zzDry9vbFq1SqYm5ujSZMmyM3NLfX3X7x4AXt7e+jp6WHSpEnw9vbGtm3bsHjxYsyaNavc28XgQGuyqampWLp0KZo2barSCTdo0ABLlixBVlaWxo99Qgj5O0lJSfj0009VFmwTQuDNN9/E2rVrkZ6eLnmbSmuuDA4l4OTkVCEzMjLK9H4PHjyAiYkJrK2tkZeXV/h4QkICZDIZZsyYUeprrFixAnK5HCdPnizrxy0RBgeqCyoUCvj6+uLtt99W6ZTlcjlGjBiB0NBQvHz5UuPnASFEN/nzzz+xZ88e9OrVS6Vd0tPTw9ChQ3Hw4EGOX6AakcGhBGQyGeRyOWQyWZmVy+U4c+ZMmd7Pz88PQgj4+/urPNevXz/UrVsXz58/L/b3nzx5gnr16mHkyJEAgPz8fDx+/LhsH7oYGByorhkZGYmJEycW+c1ey5Yt4eLiwlWpCSFVxs2bN/HNN98UOaW0ubk5PvvsM8TExEjeVlLdksGhBGQyGdzd3ZGZmVkmL126BJlMVubgMHv2bAghilzhdsmSJRBCICkpqdjfP3nyJIQQcHZ2xsKFC2FqagohBMzMzPDll1/i6dOnZd4HBTA4UF01NTUVjo6OaNOmjUrnra+vjzFjxiA8PJxrQhBCKsxff/2FgwcPFjnYuWDs1fr163k7EpVMBocSkMlk2L9/f5l/78GDB+UKDvb29hBC4NmzZyrPbdmyBUIIhIaGFvv7mzdvLhwYZWlpCQ8PDxw+fBiTJk2CEALvvvuuWjPFKBQKREdHK+nj48PgQHXanJwcHD58uHAMUVFXIVauXAmFQqHxc4QQUr25evUq5s+fX+TVBRMTE0yYMAHHjx/n7EhUchkcSuD8+fPl2jEvX77E+fPny3ybkJ2dHYQQRX5zWXAb06FDh4r9/VWrVkEIgVq1auH69etKzxWEB3XGPjg6Ohb5TQeDA6X/NSkpCYsWLUKzZs2KHAsxbNgwHD58uMRbCwkhus2jR4+wfft29OjRo8j+tkOHDli1ahVSUlIkb/MoLZDBQYso6YqDl5dXqVcc3NzcIITA22+/rfJcREQEhBBYtGhRqdvBKw6Uqmd2djYOHjwIe3t76OvrF3kf8pdffomEhASuC0EIwcuXLxEWFoYJEyYUOX6qbt26+Pjjj3H06FFeXaBaKYODFlHRMQ4HDx6EEAIfffSRynOpqakQQmDmzJnl2jaOcaC0ZK9du4YVK1agbdu2xX57uG7dOty9e1fj5xAhRFpSU1OxePHiIqd8FkKgW7duWLduHdLS0iRvyygtSQYHLcLX17fEWZVMTExKvPUhIyMDQgjY2tqqPBcWFgYhBJYtW1aubWNwoFQ9c3JycOzYMUycOBH16tUr8lamQYMGYdeuXXj06JHGzydCiGa4d+8eNm3ahG7duhUZFiwtLTFz5kycPn2aVxdotZHBoYzs3bsXvXr1goWFBeRyuYq1atUq92vfv38fRkZGxa7jMH369MLH7t69i9TUVJWZkvr27QuZTIbY2NjCx/Lz8/H+++9DCIGYmJhybRuDA6Vl986dO9i6dSv69++PWrVqqRQOBgYGGDNmDIKDgzkegpAawKNHj7Br1y4MHDgQcrlc5Zw3NDTEiBEjsHv3bmRmZkreRlFaVhkcyoCTkxPkcjkaN26MkSNHYurUqUVaEQpmRnrnnXfg4+OD1atXw9zcHJaWlsjJySn8uSlTpkAIgcjISKXfT0pKQt26dVGvXj0sXboUXl5eGDx4MIQQSsGjrDA4UFoxr1y5gm+//Rbt27cv8ttHMzMzzJgxA2FhYUpfHBBCtJsnT57ghx9+wEcffQQDAwOVc1smk8HW1hYuLi5ITk6WvC2itCIyOJQBS0tL2NnZ4cWLF1X6Pvv27cNbb70FAwMD1K9fH+PGjcOdO3eUfqa44AAAycnJ+PDDD2FmZobatWujQ4cO2LRpU4XmmWdwoLTyjIyMxJw5c4qclalgUPWsWbNw+vRphghCtJCnT5/i8OHDGDt2LIyMjIo8j9u3b4+FCxciOjqatyLRGiODQxkwNjaGj49PVb+NVsLgQGnlm5OTgyNHjmDy5MlFzt9esC7L7NmzcfLkSd7ORIiEPH78GN9//z3GjRsHY2PjIs/X5s2bY9asWTh58iTDAq2RMjiUgT59+mDp0qVV/TZaCYMDpVVrVlYWDhw4gPHjx8PMzKzIosTU1BQTJ07Ejz/+iCdPnmj8XCRE17h//z527twJe3t71KlTp8jzskmTJpg+fTqCg4OhUCgkb0sorUoZHMrA2bNnYW5ujosXL1b1W2kdDA6Uas6srCzs27cPY8aMgampaZHFiqGhIUaOHAlfX1/cu3dP4+clITWV9PR0bNy4Ef379y9ygLMQAo0bN8bUqVMRGBjIsEB1SgaHMhIUFAR9fX307dsXn3zyCaZNm6ZkRQYgazMMDpRKY8GViIkTJ6Jhw4ZFFjEF0zCvXr0aSUlJXGyOkDKQl5eHc+fOYeHChXjzzTeLPcdat26NmTNn8soC1WkZHMpAbGwsTE1NIZPJilUul1f1ZkgCgwOl0pudnY2jR49i1qxZsLKyKrbAadGiBWbPno2goCA8fvxY4+csIdrOzz//jD179uDjjz+Gubl5sedShw4dMH/+fI5ZoPT/ZXAoAz169EDDhg0REhKChw8fVvXbaRUMDpRqlzk5OTh79iwWLVoEGxubYm+p0NfXx4ABA+Dq6oqrV6/yagTRSfLy8nD+/HksW7YMNjY2xQaFOnXqoE+fPnByckJMTAzDAqX/kMGhDBgaGmLdunVV/TZaCYMDpdrttWvXsHHjRgwbNgx169YttjBq1KgRJk6ciF27dkGhUGj8fCZEE+Tn5yMlJQUeHh54//33i1zF/e8zl40aNQpbt25Famqq5Ocypdosg0MZaNmyJTZt2lTVb6OVMDhQWn3MysrC4cOH8fnnn6NDhw7FFkxCCLRr1w5ffPEFDh8+jF9++UXj5zchlUVGRgb8/f3xySefoEmTJsUe83p6erCxscGCBQsQEhLC8QqUlkEGhzKwatUq2NjY6OSCTAwOlFZfL126hPXr12PEiBEl3s8thEDHjh3xxRdf4IcffsB//vMfjZ/vhKhDfn4+7ty5g507d2LKlCkljvkpWF9hzJgx8PLywrVr1yQ/JymtrjI4lIEzZ86ge/fusLGxgZ+fHyIiIhAVFaViTYTBgdKaYU5ODk6dOoWlS5eiX79+MDQ0LPWKxPTp0+Hn54e0tDSOkSCSkJeXh4sXL8LDwwPjxo0rdtX1As3MzDB06FCsXr0a586d41gFSitJBocyUNQMSn+XsypVDQwOlFadGRkZOHz4ML7++mu8/fbbMDAwKLEgMzc3x4gRI7BmzRpERERw1iZSJfzyyy8ICQnB8uXLYWdnV+xKzQWamprCzs4OS5YswbFjx5CVlSX5uUVpTZTBoQz4+/urZU2EwYFS3TAjIwNBQUH45ptv0Lt3b5iYmJRYsMlkMnTs2BHTpk2Dj48PLl68iOfPn2u8nSDVlydPnuD8+fPYuHEjxo0bh1atWpV4zBUE2HfffRdLly5FaGgogwKlGpLBgagFgwOluqlCoUBYWBicnJwwYsSIEged/n0KWGtra3z66afYsmULYmNj8fTpU423HUT7ePjwISIiIuDm5oYJEybgzTffhEwmK/WYatOmDUaPHg1XV1dERkZyQDOlEsngQNSCwYFSWmBiYiJ8fHwwa9Ys2NrawsjIqNTCTy6Xo127dhg9ejRWrlyJoKAg3Lp1C69evdJ4m0KqnhcvXiA5ORkHDhzAkiVLYG9vjxYtWpR6nBSMT+jbty/mzp2LnTt3IikpiWMUKNUSGRzKyN69e9GrVy9YWFiojHGQy+WoVauWJjZD4zA4UEqLU6FQ4PTp03B1dcWECRPQtWvXUsdKFGhsbIxu3bph0qRJcHZ2RmBgIFJTU/HixQuNtzWk7Dx79gyXL1/GgQMHsGLFCowZMwadOnVC7dq11fr716tXD7a2tpgyZQo2bdqEc+fO8WoCpVosg0MZcHJyglwuR+PGjTFy5EhMnTq1SGsiDA6U0rJYECY2btyIadOmwdbWFmZmZmoVk0L8d679tm3bYvjw4Zg/fz48PT1x4sQJpKenM1RomGfPnuH69esIDg6Gm5sbPvvsMwwcOBBWVlZq3WZUoKWlJfr06YNZs2bB09OTIYHSaiiDQxmwtLSEnZ2dTnZaDA6U0oqak5ODS5cuYffu3Vi8eDFGjhyJ9u3bq3114u+3PTVv3hx9+vTB5MmTsXz5cvj6+uLUqVNISUnhTE9lID8/Hw8ePEBSUhJCQ0OxdetWLFq0COPGjUOPHj1gaWlZpr+NEAJ169ZFly5dMGbMGCxfvhwHDhzg7UaU1hAZHMqAsbExfHx8qvpttBIGB0ppVZmdnY3Y2Fj4+/tj6dKlGDt2LKytrWFhYVHmovXvxeubb76JgQMH4pNPPsHChQvh5uaGvXv3IiwsDFeuXMG9e/dq7AxQz549g0KhQGJiIkJDQ7Fz506sXbsWCxYswIQJE9CvXz+0adOmzKGtQJlMhiZNmqBnz56YMGECHB0dsW/fPsTHxyM7O1vyY4pSWjUyOJSBPn36YOnSpVX9NloJgwOlVApv3LiBEydOYMuWLXBwcMBHH32EHj16oHnz5tDT0yt3sPi7JiYmaNGiBf71r3/Bzs4Oo0ePxowZM7BgwQKsWLECbm5u2LZtGw4cOICjR4/i1KlTOH/+PC5evIiUlBRkZGTg3r17uH//Pn7//Xc8efIEz58/L3WxvFevXuGvv/7CkydP8PDhQ9y/fx93797FnTt3kJycjISEBJw7dw5hYWEIDg7Gvn374O3tDVdXVyxbtgzz5s3D1KlT8eGHH6Jfv37o3LkzmjRpUu4w8E8NDAzQqlUr9O7dG+PGjcPixYuxbds2nDp1Cunp6ZIfG5RSzcvgUAbOnj0Lc3NzXLx4sarfSutgcKCUapsKhQLx8fE4dOgQNmzYgG+++QYTJ06EnZ0dOnXqVDiJRalFslxAGAkIcwHRTEC8ISA6CwgbAfG2gBggIIYKiPcFxGgBMV5ATBYQ0wTELAExR0DMExBfCYhvBMRCAbFIQCwREEtLcMn//5yDgPj6/39/noD4QkDM/P/XnyQgxgmIjwTECAExWED0FxC9BIS1gOgoIF4XEE0FRH0BYSggZKWHAj09PTRu3Bhdu3bF4MGD8cknn+Df//43PDw8EBQUhIsXL3L8AaVURQaHMhIUFAR9fX307dsXn3zyCaZNm6bk9OnTNbEZGofBgVJanbyddRsxqTE4dOEQnI84Y7bfbNhvtIftalu0WdYGFkssYLTECLWW1YL4TtQsHQX0lurBeLExGi1phLbL26KXcy98sPkDzNk1B+uOrUNQQhDib8QjK5sLp1FK1ZfBoQzExsbC1NQUMpmsWOVyeVVvhiQwOFBKtcWcnBxcTr+Mo5eOYuu5rVgSugSTv58MOz87dPDogPpr62ukQK+1ohb0l+mjzrd1YLDYAIb/NoTRQiMYfWMEowVGMJ5vDKO5RjCea6yi0dz/f37Bf3/ecKEhDP9tCIPFBqjzbR3oL9eHfIW8yj+D3EmORusaoatXVwzZNQTTD03HihMrsOP8DpxMOonk28kc1EwpLZTBoQz06NEDDRs2REhICB4+fFjVb6dVMDhQSjVpVnYWYlJjEHAhAM7hzvj08KcYuHMgXt/8OgxWGVS4YDZcbYjG6xujnXs7dPfujnf93sWHez/ElO+n4MugL7EkdAmcw52xKWITdpzfgQNxB3Dk4hGcvnoa51POIz4tHok3EnHx5sUqNT4tHj9d/wnhSeEIvhiM/XH7sf2n7dgYsRGrwlZhcchizAmcg8nfT8bIPSPR37c/rLda443Nb6Cha0Por9Sv8L4ycTZBe4/2GO4/HHOC5mD9mfU4lHAIiTcTkZ3DgdCU6pIMDmXA0NAQ69atq+q30UoYHCilVWF6ZjpOJp2EZ5Qn5gXPw/Ddw9F2c9tyF7z1XOqh1cZWsPW2xXD/4Zj6w1QsPLYQa0+txY7zOxCYGIhzyec0UvRrg4k3EnE2+SwOJRzCtnPb4HLKBV8f/RqTv5+MIbuGwHqrNVpsaAGj1UblDmCdPDvhw70fYuGxhdh+fjsikyORociQ/NiilFa+DA5loGXLlti0aVNVv41WwuBAKa2IWdlZiLoeBZ+ffPDVka8wZNcQWG2wKnOharbGDB08OsDOzw6TDk6CwzEHbIzYiO/jv9epQFAVRiVHISAuAG5n3LDgyAKMDxiPfjv6oe3mtjBxNinT30nPSQ/t3Nth5N6RWBSyCP4x/riQdoG3PVFazWVwKAOrVq2CjY0N8vLyqvqttA4GB0qput7Ouo3jV47D9bQrJh2chH9t+VeZbi+q51IPHT06Yqj/UMw8PBMrw1bCP8YfEdciGAwk9PTV0/CN9sWKEysw/YfpGLhzINpubgvD1YZq/23rOtdFT5+e+PTwp3A/646IaxEcoE1pNZLBoQycOXMG3bt3h42NDfz8/BAREYGoqCgVayIMDpTSoszKzkLY1TC4nnbF+IDx6ODRAXpOemoVkfXX1ofNVht8tO8jfHPsG2yJ2oITV04wHFQzE28kIuRyCNwj3TE/eD7e3/M+Ont1VvsqhcEqA1hvtca0H6bB46wHzl0/xysTlGqpDA5loKgZlP4uZ1WqGhgcKNUeE28mwucnH8z6cRZsvW3VupKgv1If7dzbYZj/MMwNmguPsx44mXSSAaGGWxAoNkZsxGc/foaBOwei5caWkDuVPluUqYsp+u3oh/lH5mN37G5cv3Nd8mOfUsrgUCb8/f3VsibC4ECp7qnIViD8ajicTznjw70foplbM7W+Pe7k2Qmj9o7CktAl2Bu7FzEpMZIXsVR7jE6Jxs7onXA46gD73fZqD4Zvu7ktJh6ciE2Rm3A+5TyvSlAqgQwORC0YHCit+WZlZyHkcgiWHV8GOz871HWuW2IhJ3eS4/VNr8N+tz0WhSzCvrh9iE2JlbwwpdXP2NRY7IrehQVHFmDwzsFo7ta81CBh4WqBEXtGwPmUMyKTIxkkKNWADA5ELRgcKK15KrIVCL0Sim9Dv8UA3wEwdjYu9faRt7e9jc9+/Axbz21FVHKU5AUnrblGXIuAe6Q7pv0wDTZbbUodhG2+1hzv7X4PzuHOiLoexSBBaRXI4FACUVFR+OWXX8r8e3l5eYiKisLvv/9e2ZskGQwOlFZ/c3JycD7lPNacWoPhu4fjtTWvlViINXNrhmG7hmFRyCIcjD+I+LR4yYtJqrteSLuAvbF7seDIAtj52cF8rXmJx6/lOkuM2T8GHmc9cCn9kuTnH6U1QQaHEpDL5di/f3+Zf+/BgweQy+U4c+ZMZW+SZDA4UFo9TctIw47zOzDx4MRSxyg039Ac9rvt4XjCEUcvHeXgZarVJt5IRGBiIBaHLMagnYNg4WpR4vHdzr0dZv04CwfiD+CO4o7k5yal1VEGhxKQyWTw8PBAVlZWmbx8+TJkMhmDQyXB4ECp+ubk5CD8ajiWhC5Br229SpwataFrQwzbNQyOJxwRcimEQYFWaxNvJCLoYhAWhyyGnZ8dTF1Miz32DVcbYuDOgXA+5YyY1BjJz1tKq4sMDiVQ1JSrZZHBoXJgcKC0ZG9l3cLu2N2YdHASLNdbFlssmTiboM/2PlhwZAF+iP+Btx7RGm3CjQTsi9uHOYFz0N27O2qvrF3sufH6ptfxeeDnCEwM5IJ0lJYgg0MJfPfddxUyIyOjsjdJMhgcKNUuL6dfxvoz6zF41+AS11Jou7ktJh+cDO9z3pwWleq00SnRcI90x5j9Y0qctem1Na9h1L5R8D7njbSMNMnPdUq1SQYHohYMDpRKb0xqDJafWI5u3t0g+05WZNFT17ku7PzssPT4Uhy/fJy3H1FajEcuHoHDMQf02tar2KsRtVfWhp2fHdafWY+kW0mStwGUSi2DA1ELBgdKNW9OTg7OXDsDh2MO6ODRocTZj8bsHwOvKC9eVaC0HJ5POY/1Z9ZjxO4Rxc7WJHeSo6dPTziFOSH+Rrzk7QOlUsjgQNSCwYFSzRlxLQILji7A65tfL7KAkX0nQ0fPjvjsx89wMP4grypQWokm3EjA7pjdmPrDVLTa2KrYwG691RqOJx0ZIqhOyeBA1ILBgdKqNep6FL45+g3abm5bZJFSy6kWbLba4OujX3MGJEo1aGBiIL4I/ALtPdoXGyK6be0GpzAnJN5MlLwtobQqZXAgasHgQGnlm3AjAcuOLyv2NiT9lfro5dML3x7/FuFJ4ZIXUJTquqGXQ/H10a/R1atrkeOMZN/J0GtbL6w7sw7X71yXvI2htLJlcNBCAgICYG1tDQMDA5ibm2P8+PHIzMws12uNGTMGQgi0a9euQtvE4EBp5Xj9znWsO7MOvbb1KrLw0HPSQw+fHvj2+Lc4nXRa8kKJUlq0Jy6fwNdHvkZnz87FDqweumsotv20Dbezbkve9lBaGTI4aBmenp4QQuCdd96Bt7c3Vq1aBXNzczRp0gS5ublleq2QkBDI5XIYGhoyOFAqoZnZmdgZvRPD/IcVOXuL/Ds5bLbaYFHIIl5ZoLQaGno5FPOD56O9e9G3M9V1rouPD3yMwMRA5OTkSN4mUVpeGRzKwNdff429e/ciOTkZr169qvTXf/DgAUxMTGBtbY28vLzCxxMSEiCTyTBjxgy1X+uPP/5AixYt8OWXX8LKyorBgVIJDLsahhmHZxQ7S0s793aYGzQXoZdDJS98KKWVY2BiIGYcmoFmbs2KPO+tNlrB4ZgD4tLiJG+jKC2rDA5l4O8rSRsaGsLW1hazZs2Ct7c34uLi8OzZswq9vp+fH4QQ8Pf3V3muX79+qFu3Lp4/f67Wa82fPx+NGzfGo0ePGBwo1aDXbl+D40nHYgdSNlnfBFO+n4KDFzgbEqU12cQbidgdsxtj94+F2RqzItuDnj49sSlyE25l3ZK87aJUHRkcysBvv/2GU6dOYe3atRgzZgxatWqlFCb09PTQoUOHcr/+7NmzIYTAzZs3VZ5bsmQJhBBISkoq9XXi4+Mhl8tx8OBBAGBwoLSKzc7JRsCFANjvtof+Sn2V4sDY2Rjv+b8H73PeiE+Ll7ygoZRq1gtpF7AxYiMG+A4oso2o61wXk7+fjBNXTvBWJqrVMjhUkHv37sHNzQ0mJiawsbFBz549y/1a9vb2EEIUeeViy5YtEEIgNDS0xNfIy8tD165dMXjw4MLHyhocFAoFoqOjlfTx8WFwoPQfxt+Ih8MxhyJvSZB/J0c3725wPOmIqOQoyQsXSql2GHEtAguPLSz2qmRHz45wDnfmrExUK2VwqCQuXbqERo0alXv2IwCws7ODEKLI8RMFtzEdOnSoxNdYu3YtDAwMcOvWrcLHyhocHB0dIYQoUgYHqusqshXYE7sHg3YOgtxJrtLpN17fGDMOzcCRi0ckL1AopdrtofhD+DjgY5i6mKq0JXVW1cHYgLEIuRzCqxBUa2RwqERmzZqFqVOnlvv3S7ri4OXlVeoVh1u3bsHQ0BArV65UepxXHCituFfSr2Bx6GI0d2te5HoLdn52cI90x4W0C5IXI5TS6mVcahxcTrnA1tu2yGmaO3l2gutpV9zMvCl5W0h1WwaHSsTDwwONGjUq9+9XdIzDyJEj0aRJE9y4cQMZGRmFNm3aFK1bt0ZGRgZ+/vnncm0bxzhQXTQnJweBiYEYsWdEkfclW22wwpdBXyLsSpjkhQeltGYYcikE0w9NL3I2NhNnE3zy/SeITI6UvH2kuimDQxlo2rQpRo4cCScnJ4SEhODevXtKz0+dOhX16tUr9+v7+vqWOKuSiYlJibMqde3atdhbjAocMmRIubaNwYHqkreybmH9mfVFruhccHXB66wXBzpTSqvMC2kXsO70OnT37l7kWIje23vDL9oPimyF5G0m1R0ZHMrAoEGDYGFhoTSTUpMmTTBo0CD07NkTcrkcw4cPL/fr379/H0ZGRsWu4zB9+vTCx+7evYvU1FQ8ffq08LGIiAgEBQWpaGFhgaZNmyIoKAgxMTHl2jYGB6oLxqXF4fPAz/HamteKHLsw6/AsHL98XPKCglKqWwYnBmPigYlFjoVo5tYMS48vxbXb1yRvQ2nNl8GhHCgUCgQFBWH58uV477330KJFC9SvXx/Dhw9HMKnAawAAIABJREFUVlZWhV578+bNhStH+/j4YPXq1TA3N4elpSVycnIKf27KlCkQQiAyMrLU1+R0rJQWb8HtSMP8hxU52Lmbdze4nnZFXGqc5MUDpVS3jUmNgeMJR7Rzb1fkYOqJByfibPJZydtVWnNlcNBC9u3bh7feegsGBgaoX78+xo0bhzt37ij9DIMDpRUzMzsTXlFe6OrVVaUDNlpthA/3fogDFw5wkTZKqdaZeCMRO6N3YtDOQdBz0lNpwwb4DsCBCwc4GxOtdBkciFowONCa4vU71/Ft6LewXG9Z5CX/ecHzcObqGckLA0opVcewpDDMODSjyFss33R/ExsiNuCO4o7kbS+tGTI4ELVgcKDV3fgb8Zh5eCaMVhupdK7/2vIvrDm1hrcjUUqrrbGpsVh+fDlab2qt0sZZuFpgSegSpNxJkbwtptVbBgeiFgwOtLp66uopjNo3SuVyvp6THgbtHIRdMbt4OxKltMaYeCMRXlFe6OnTUyVAGK82xqwfZyH+RrzkbTOtnjI4ELVgcKDVyZycHBxKOIQBvgOKnAd9woEJOHrpqOQdPKWUVqWH4g8VuQ6NnpMeRu8fjYhrEZK317R6yeBA1ILBgVYHc3Jy4B/jD5utNkVeqp8TNIfjFyilOufJpJP45PtPYOxsrNI2Dtk1BKFXQiVvv2n1kMGBqAWDA9VmFdkKbD23Fe092qt0iq02tsK3od8iOiVa8s6bUkql9Nz1c5gXPA8WrhYqbWXfHX1xKOEQZ2KiJcrgQNSCwYFqo5nZmdgQsQGtNrZS6QQ7enaE62lXru5MKaX/MC41DsuPL0dzt+aqa9ds7YY9sXsYIGiRMjgQtWBwoNpkhiID686sK7bT8zzriYQbCZJ3zpRSqs3Gp8XDJdwFr29+XaUt7eLVBbtidjFAUCUZHIhaMDhQbTBDkYG1p9eimVszlU6u9/be8D3vyxmSKKW0jCbeSMTmyM3o5NlJpW3t7NkZO6N3MkBQ5OYyOBA1YXCgUnpHcQdrTq1BU7emSh2a7DsZ+vv2x57YPQwMlFJaQRNvJMLnnA/e2vJWkbd/+p73ZYDQcRkciFowOFApzMrOwoaIDSpXGOTfyTHAdwD2xe1jYKCU0ipw20/bYL3VusgrEBwDobsyOBC1YHCgmlSRrYBnlCdabmypEhje9XsXAXEBDAyUUqoBfc/7otvWbioBwmarDb6P/17y/oJqVgYHohYMDlQTZudkY9tP29B2c1uVW5Ls/OwQcIGBgVJKpdD3vG+RVyB6beuFoItBkvcfVDMyOBC1YHCgVd0QBVwIQGevziqdUp8dfTiGgVJKtUTvc97o7KnaVtv52SH8arjk/Qmt+v6awYGUCoMDrSqPXT6Gt7e9rdIJ9fDpgZ3ROxkYKKVUy0y8kQj3SHe0c2+ncnX4g70fIDo1WvK+hVaNDA5ELRgcaGUbmRyJYf7DVAJD1y1d4XPOh4GBUkq13MQbiVh/Zr3KeDQ9Jz1M+WEKLqdflryvoZUrgwNRCwYHWlkm3kzE+IDxkDvJlTqa1ze/DrcIN670TCml1cz4tHg4nnBEo3WNlNp1w9WGmBc8D2kZaZL3PbRyZHAgasHgQCtqWkYa5gbPhcEqA6WOpen6pvju5HeIS42TvPOjlFJafmNTY7HgyAKYupgqtfPma83hfMoZmdmZkvdFtGIyOBC1YHCg5TUzOxPO4c4wX2uu1JHUX1sfXx/9GtEp0ZJ3dpRSSivPc9fPYcahGSpfFLXe1JqLyFVzGRyIWjA40PI0LjvO70Crja1ULl1P/WEqIpMjJe/cKKWUVp3hSeH4cO+HKremdvfujqOXjkreT9Hy9e0MDqRUGBxoWTyZdBI9fXoqL97mJMeI3SMQcjlE8s6MUkqp5jyccBi9t/dWmQxj5J6RuJB2QfI+i6ovgwNRCwYHqo4Xb17E2ICxkH0nU1kgaH/cfsk7L0oppdK5/aftaO/RXql/qLOqDuYFz8PNzJuS92G0dBkciFowONCSvJV1Cw7HHGC02khlpiSPsx6cWpVSSiku3vzvFK6rwlahoWtDpf7CwtUCGyM2IjsnW/I+jRYvgwNRCwYHWlwDsvXcVjRZ30Rl4POikEWcKYlSSmmRRqdEY/aPs1UGUHfy7ITgi8GS92+0+H6fwYGUCoMD/afhV8NVxjHUXlkbkw5OQsTVCMk7JUoppdrvyaSTsN9tr3KL6wd7P0DizUTJ+zqqLIMDUQsGB1rgtdvXMOWHKSqzZAzwHYDAxEDJOyFKKaXVz32x+9DVq6tSv2K02giLQxfjdtZtyfs++l8ZHIhaMDhQRbYCLqdc8Nqa15THMWx6HV5RXhzHQCmltEIm3kiEyykXlfEPVhussCtmF9d/0AIZHIhaMDjotkcuHUFHz45KDbmpiym+OfoNYlNiJe9sKKWU1hzPp5zHjEMzoL9SX6nfsfOzQ3RqtOR9oi7L4EDUgsFBN7166yrGB4xXWY/hg70fICwpTPLOhVJKac316KWj6Lejn/JYulW18fXRr3Er65bkfaQuyuBA1ILBQbdUZCuw5tQalduSunh1wZ7YPZJ3JpRSSnXHLVFb0GJDC6X+qPmG5vCP8Ze8v9Q1GRyIWjA46I6hV0LRxauL8vSqa+pj6fGliE+Ll7wDoZRSqnvGpcZhTtAclelbB+4ciLi0OMn7Tl2RwYGoBYNDzTc1IxVTf5iqNCWe3EmOUftG4XTSack7DUoppTTkcgj6+/ZXCg8Gqwzwbei3yMzOlLwvrekyOBC1YHCouebk5MD7nDcarWuk1BB39OyIXTG7JO8kKKWU0n/qEemBpm5Nlfqtdu7tuHicBmoGBgdSKgwONdOY1BgM8B2g1PDWdamLhccWctVnSimlWm1MakyRsy9NODABybeTJe9ja6IMDkQtGBxqlpnZmVgculjlXtHBOwfjxJUTkncGlFJKqboGJgbCZquNUn9mvtYcnlGeXPuhkmVwIGrB4FBzDLkcgvYe7VVmp3A/685F3CillFZLE28kwumkk8psgP18+3HwdCXK4EDUgsGh+nsz8yZmHJ6hNPhZ///aO/OoKM68bT+NLA00qLRGBJUkRs2CyUAcxx0H45gYx3GySRITPS7xzYkxjkHPmEkCCBgjoCgoLYs4YjQuMS5RARdcRiSAKAoSVEQWk5wX3xwdtyDR+/sjH61lA91Nd1PdzX2dc/1hbV08Vv3quWtd6IQpm6fgaOlR2Ys+pZRSaqoHzxzE39b9TRIeXKNcEZYZhuqaatmPxbYugwMxCAYH2zYjL0PnIbLnEp/Dhu83yF7kKaWUUnObcjRF59sPzyY+i+zT2bIfk21ZBgdiEAwOtumZijP4e8bfJYVTFa1C6M5QfF/2veyFnVJKKbWUuWW5mLplKhwjHLXHwA4RHTBr+yxUVFXIfoy2RRkciEEwONiWja9YVS9WS0LDiJQR2FW0S/ZiTimllLaVm/I34ZmEZyTHw97LemN7EV/d2pr+BYMD0QuDg+1YdL4IL619SeftEtHZ0Xz4mVJKabs0/4d8hO4MlbxNUBGuwPSt03H+0nnZj922IoODFbJhwwYEBgZCqVRCrVYjJCQEly5d0jvfL7/8gvj4eIwePRo9evSAUqlE3759MWPGDFRXV5u0TgwO1m9tbS2W5SxDx0UdJaFh7Nqx/PIzpZRSeu4EdhXtwh+T/ig5TvaK64XNBZtlP47bggwOVkZCQgKEEBg6dCiSkpIQGRkJtVoNHx8fXL58ucV59+7dCwcHB4waNQqLFi1CSkoK5syZA1dXV3Ts2BGlpaWtXi8GB+u2oLwAwWnBkkLovcQbSw8u5VUGSiml9AELywvx2d7P4B7tLjluTvp6Esory2U/pluzDA5WxJUrV6BSqRAYGIiGhgbt8IKCAigUCkybNq3F+SsrK3Hu3Dmd4fv27YMQAq+99lqr143BwTqtra3F0pyl8FzkKbn0OiFjAg6ePih7caaUUkqt1cxTmRiWPEwSHnrE9uDVBz39DgYHKyEtLQ1CCKxdu1ZnXFBQEDw8PFBfX9+qZXt5eaFfv36tXjcGB+uz6HwRXljzgqTg+cb4IvFwIq8yUEoppQZYWF6IqKwoyQk4ES4wZfMUPvvQhAwOVsTMmTMhhGjyqsGCBQsghEBxcbHRy7169SqcnJwwfPjwVq8bg4P1WFtbi8TDiZKvYyrCFXh1/as4VHJI9iJMKaWU2prZxdkYkTJCEh784vzw7YlvZT/uW5MMDlbEuHHjIITArVu3dMatXLkSQgjs3r3b6OWGhoZCCIHU1FSDpq+ursaxY8ckajQaBgcrsPhCsc4bk3xifLDi0ApeZaCUUkpNsLC8EAuzFsIj2kNyYm7G1hm4UHVB9j6ANcjgYEUEBwdDCIG7d+/qjGu8jWnLli1GLXPTpk1QKBQYPXp0k8ttirCwMAghmpTBQT7XHFuj812Gv637G3LO5MhebCmllFJ7MfNUJoasHiI53j4R/wT2ntore19AbhkcrIiWrjgkJiYafcVh9+7dcHZ2RmBgIK5evWrwfLziYF3+UPkDJm6YKClg3ZZ0w7KcZbzKQCmllFrAwvJCfL73c7hH3X/zkmOEI0J3haKqpkr2vgGDg+nYfHAw5zMOe/fuhYuLC5599llcuXLF5HXjMw7y+E3hN+gZ21MSGsakj8GB0wdkL6qUUkqpvbv75G48v+p5yXE4YGUAjpQekb2PwOBgGjYfHFJTU1t8q5JKpTLorUqZmZlQKpXo37+/2f5jGRza1oqqCsz8ZiYU4Qptoer0RSdEZUfxKgOllFLahhaUF2DujrlwXuisPSYrI5WI3heN2tpa2fsMDA6tw+aDQ11dHdzc3Jr9jsPUqVO1w3788UeUlZXh5s2bkmVkZWWZPTQADA5t6YEzB/DUiqckZzcGrx6M705+J3vxpJRSSturWwq2oO/yvpLj88jUkTh5/qTsfQcGB+Ox+eAAAPHx8dovR2s0GkRFRUGtVsPb2xu1tbXa6SZPngwhBHJycrTDCgoKoFQq4eLigmXLliEjI0PH1sLgYHlramsQkRUBl0gXbUFyi3LDvF3zkP9DvuwFk1JKKW3v5pXlYeqWqXCIcNAeq72+8EJ6brrs/QgGB+Owi+AAAOvXr0dAQACUSiW8vLwwceJEXLx4UTJNU8EhPT292bchNdpaGBwsa9H5IoxMHSk5i/FMwjPYnL9Z9iJJKaWUUqnpx9LhG+MrOW6/8/U7dv/aVgYHYhAMDpYzPTcdXou9tIXHIcIBUzZPQe7ZXNkLI6WUUkqb9kjpEYz79zhJeHh82ePILM6UvW/B4KAfBgcLwuBgfi9UXcA7m97R+Zib5ohG9mJIKaWUUsNcvG+x5KNxTgud8K89/0JNbY3sfQ0Gh+ZhcLAgDA7mdf+Z/egbL33A6sX0F3Hw9EHZCyCllFJKjXPPqT06r20dnjzc7h6cZnAgBsHgYL4dLnpftOQBaI9oD0RkRvA1q5RSSqkNW1BegNnbZ8MxwvH+g9OLvZCRlyF7/4PBQRcGBwvC4GC6ZyrOYEz6GMnZCP8Ef2wr3CZ7saOUUkqpecw4noEesT0kx/v3tr6Hi9UXZe+LMDjch8HBgjA4mObWwq3oHtP9/gPQ4Q6YvGkyjp89LnuBo5RSSql5PVJ6BGPXjtU5WWjrX5xmcCAGweDQOqtrqvHxzo8l73vu+mVXJBxO4K1JlFJKqZ0bkRkB1yhXyfeZEg4nyN4/YXBgcLAoDA7GW3S+CEOTh0rONgxLHobMU5myFzJKKaWUto3bT2zHk8uflPQHQjaE2OQ3HxgciEEwOBjnxu83osuXXSSvZvto+0f8AjSllFLaDs0ry8NbG9+ShIe+8X2RU5Ije5+FwYGYHQYHw6yqqcLs7bOhCFdoC4NvjC/WHFsje9GilFJKqbwuPbgUnos8tX0EZaQSSw8uRW1trex9GAYHYjYYHPRbeK4Qf9L8SXI2ITgtGAdOH5C9UFFKKaXUOtx9cjeeTXxW0l94df2rOH/pvOx9GQYHYhYYHFp2Y/5GqBertQXAJdIFoTtDeWsSpZRSSnXM+yEPkzdNloSHPvF9cKjkkOx9GgYHYjIMDk1bU1uD0F2hkluTesX1wrrj62QvSpRSSim1bhMOJaDjoo6Sty4lHk6UvX/D4EBMgsFB19MXTiMoJUhytmBU2igcPH1Q9kJEKaWUUttw76m9OrcuvbvpXav8YByDAzEIBgep24u2wzvGW/LWpDk75vDWJEoppZQabd4PeXj767cl4aF/Yn8cLzsue5+HwYEYDYPD/R0mIisCjhGO2h3be4k3Uv+TKnvRoZRSSqltG3sgFu7R7to+huciT6zNXSt7/4fBgRgFg8NlnLt0DuPXjZecDRi8ejCyirNkLzSUUkoptQ+3n9iOvvF9Jf2Nj7Z/hOqaatn7QgwOxCDae3A4XHpYshM7hDtgxtYZ+L7se9kLDKWUUkrty9yyXEzImCAJDyNSRuBMxRkGBwYH66c9B4fk/yRDFa3S7ridvuiE+Jx4FJYXyl5YKKWUUmq/frb3MzgtdNL2QXxifLDn1B4GBzPA4GBB2mNwqKqpwvvb3pek/adXPI3thdtlLySUUkopbR+uz1uP7ku6S17IEnMghsHBRBgcLEh7Cw6nL5zGkNVDJKFhQsYE/Kf0P7IXEEoppZS2Lw+eOYjBqwdL+iUhG0La/JWtDA7EINpTcMgszoRvrK92x1RGKvGvPf/irUmUUkoplc2C8gLM2DpD8tHZP6z8AwrPFTI4tAIGBwvSXoLD8kPLoYxUSu4lXJu7VvZiQSmllFJ64twJxOfES5697PJlF3x74lsGByNhcLAg9h4cLtVcwrSt0ySXAAckDeCrVimllFJqdW4/sR2PLX1M22dxjHBE9L5o1NbWMjgYCIODBbHn4FB8oVjnvsG3Nr6F42ePy14YKKWUUkqb8mjpUQSnBkv6L29seAMVVRUMDgbA4GBB7DU4ZBZnwifGR/I8Q3hmOJ9noJRSSqnVW1heiA++/UDy3MNzic9Z7LkHBgdiEPYYHFYdWSV5nsE3xhfrjq+TvQhQSimllBpjwqEEeER7aPs0j3z5CHYW7WRwaAEGBwtiT8GhuqYas76dpfM8Q3Zxtuw7PqWUUkppa3z4uQenhU5YlrOMwaEZGBwsiL0Eh7LKMoxKGyW9H/CrN/g8A6WUUkpt3iOlRzAiZYSknzN963RU1VQxODwEg4MFsYfgcPTsUTwR/4R2R3Je6IxPdn/C5xkopZRSajcWlBdg+pbpkvAwPHk4SipKGBwegMHBgth6cNiYvxEdF3W8/87jxV2QfDRZ9p2bUkoppdQSLt63WPIsp1+cHw6XHmZw+P8wOFgQWw4O0dnR6BDRQbvjPL3iaews2in7Dk0ppZRSakk3fr8R3ku8tX0gj2gPfJX3FYMDGBwsii0Gh0s1l/Dupncll+pGrxmNI6VHZN+RKaWUUkrbwv2n9+O5lc9p+0IOEQ6IyIxo1cfiGByIQdhacCipKMGw5GHanUQRrsCMrTOQ/0O+7DswpZRSSmlbmleWh/HrxktOpr799du4VHOJwYGYH1sKDodLD0teR+Ya5YpF2Yv4EDSllFJK262F5YX4x45/wCHcQdtHGrR6EM5UnGFwIObFVoLD1/lfSx6C9l7ijbW5a2XfWSmllFJKrcH4nHi4Rbm16qFpBgdiELYQHJYcWALHCEftjvBMwjP47uR3su+glFJKKaXW5Ob8zege013bZ/Jc5IlN+ZsYHIh5sObgUFNbg/e3va/zEPTR0qOy75iUUkoppdbo/tP78YeVf9D2nRwjHBF7IJbBgZiOtQaH85fO48X0FyWhYermqXwImlJKKaVUj8fLjuOltS9J+lHvb3sfNbU1DA6k9VhjcDhx7gT6J/aXfAn6872f8yFoSimllFIDLSwvxP988z+S8PDS2pdwoeoCgwNpHdYWHLJOZ8E75v4HTTp90QmaIxrZdz5KKaWUUls0OjsaTgudtH2rZxOfRdH5IgYHa2fDhg0IDAyEUqmEWq1GSEgILl26ZPD8hYWFGDNmDDw9PaFSqRAUFITDhw+btE7WFBwy8jLgHu2u3bAfXfoothZslX2Ho5RSSim1ZdOPpaPTF520fSyfGB8cPHOQwcFaSUhIgBACQ4cORVJSEiIjI6FWq+Hj44PLly/rnT8/Px+urq7w8/NDTEwMVqxYAX9/fzg6OmLfvn2tXi9rCQ5f7v8SHSI6aDfo51c9j/3F+2Xf0SillFJK7cGdRTvx6NJHtX0tj2gP7RuXGBysiCtXrkClUiEwMBANDQ3a4QUFBVAoFJg2bZreZQwaNAju7u6oqqrSDrt69Sp8fX3Rp08f3Lt3r1XrJndwKDpZhFnfzpLcfzd27VgcO3tM9h2MUkoppdSePFRyCM+vel7b53Ja6IT4nHgGB2siLS0NQgisXbtWZ1xQUBA8PDxQX1/f7PwVFRUQQmDKlCk648LCwiCEwPHjx1u1bnIGh4vVFzEmZYwkNEzbMo1vTqKUUkoptZB5ZXk6b1yau2MuTp06xeBgDcycORNCCJw7d05n3IIFCyCEQHFxcbPzb9y4EUIIJCcn64zLysqCEALLly9v1brJFRyu3LyCgZqBksT72d7P+OYkSimllFILW1heiBlbZ0jCw1/T/orLP+u/fd7cMDg8xLhx4yCEwK1bt3TGrVy5EkII7N69u9n5Y2NjIYTAnj17dMaVlpZCCIF58+bpXY/q6mocO3ZMokajafPgcPGXi+ib0Fdyj93izMU4UHQAB08epJRSSimlbeD87fMlz5gOSxmGa79ea7M+IcDgoENwcDCEELh7967OuMbbmLZs2dLs/AsXLoQQAgcOHNAZ13gb0wcffKB3PRpva2rKtgwO/3vjf9F7eW+IcIHuS7oj5WAK9ubvpZRSSimlbeyiPYvgHvX7Wy2HJg/Fnd/utFmfEGBw0KGlKw6JiYkmXXEoKSmxuSsOAHDuyjm8mPEiztSewU//9xOllFJKKZXJQ+cO4YW1L+Dnaz+3aX8QYHDQgc84EEIIIYQQoguDw0Okpqa2+FYllUrV4luVLly4oPetSrm5ua1aNwYHQgghhBAiFwwOD1FXVwc3N7dmv+MwdepU7bAff/wRZWVluHnzpmQZAwcOhLu7O6qrq7XDrl27hh49eqB37942+R0HQgghhBDSvmFwaIL4+Hjtl6M1Gg2ioqKgVqvh7e2N2tpa7XSTJ0+GEAI5OTmS+fPy8qBUKuHn54e4uDgkJCTA398fHTp0QFZWVqvXi8GBEEIIIYTIBYNDM6xfvx4BAQFQKpXw8vLCxIkTcfHiRck0zQUHAMjPz8fo0aPh4eEBNzc3jBgxosnpjIHBgRBCCCGEyAWDgw3B4EAIIYQQQuSCwcGGYHAghBBCCCFyweBgQzA4EEIIIYQQuWBwsCEYHAghhBBCiFwwONgQDA6EEEIIIUQuGBxsCAYHQgghhBAiFwwONkR2djaEENBoNDh27BillFJKKaVtpkajgRAC2dnZZunbMjhYkMb/LEoppZRSSuVSo9GYpW/L4GBBampqoNFokJ2dLUu65JUOthnbzLpkm7G92GbWJ9uMbWbP7ZWdnQ2NRoOamhqz9G0ZHOyQY8f4bIWxsM2Mh21mPGwz42B7GQ/bzHjYZsbDNjMOe2ovBgc7xJ420LaCbWY8bDPjYZsZB9vLeNhmxsM2Mx62mXHYU3sxONgh9rSBthVsM+NhmxkP28w42F7GwzYzHraZ8bDNjMOe2ovBwQ6xpw20rWCbGQ/bzHjYZsbB9jIetpnxsM2Mh21mHPbUXgwOdkh1dTXCwsJQXV0t96rYDGwz42GbGQ/bzDjYXsbDNjMetpnxsM2Mw57ai8GBEEIIIYQQohcGB0IIIYQQQoheGBwIIYQQQgghemFwIIQQQgghhOiFwYEQQgghhBCiFwYHQgghhBBCiF4YHGyI2tpaLFq0CCNGjIC3tzfc3Nzw9NNPIzQ0FFeuXDFqWefPn8err74KLy8vuLq6YuDAgfjmm2+anPbevXtISEjA008/DRcXF3h7e+O9994z+jflQKPR4K233kK/fv2gUCgghHGbfGVlJYQQLbp+/XqDpu/WrZu5/zyLYGqbAcDkyZObbYekpCSd6W15GwNMb7Pbt28jOTkZ48ePh5+fH5RKJR577DGEhITg7NmzOtNzO7tPe6llAJCVlYVhw4bB3d0dHTt2xMsvv4zTp08bNG97rGWAaW0GtL9aBpjWZvZayzZs2IDAwEAolUqo1WqEhITg0qVLBs9fWFiIMWPGwNPTEyqVCkFBQTh8+HCT09bX1yMiIgKPP/44nJ2d0atXL8yfPx83b940159jEgwONkRSUhKcnJzw17/+FbGxsUhOTsb06dPh6OiInj174qeffjJoOZWVlejSpQvUajUiIyORlJSEoUOHQgiB9PR0nek//vhjCCEwbtw4JCcnY8GCBXB1dYW/vz9u3Lhh5r/SvPj5+cHDwwMjRoyAr6+v0Z2TGzduICMjo0k7duwIZ2dn1NXVaadvLIJ///vfdabfunWruf88i2BqmwH3D7ZNtdu5c+d0prflbQwwvc3KysoghMCgQYMQHh6O1NRUfPLJJ+jcuTOcnZ1x8OBByfTczn6nPdWyHTt2wMHBAf7+/lixYgViYmLQq1cveHh4GNSpa4+1zNQ2A9pfLTO1zeyxliUkJEAIgaFDhyIpKQmRkZFQq9Xw8fHB5cuX9c6fn58PV1dX+Pn5ISYmBitWrIC/vz8cHR2xb98+nelfffVVCCHwzjvvICUlBbNmzUKHDh0QHByMu3fvWuJPNAoGBxuipKSkyY00JSUFQgiEhoYatJyQkBAoFAoUFBRoh925cwcBAQHo3Lkz/vvf/2qHnz17Fg4ODhg/frxkGVu3boUQApGRka38a9qGyspK7Y42ZsyYVp/VfJjc3FwIIfDaa6/p/J4QAmFhYWb5HTl51hOxAAAO4klEQVQwR5s1HmwNwda3McD0Nrty5QpOnDihM7y0tBTOzs4YMGCAzu9xO2s/tayhoQE9e/ZEjx49cO3aNe3wqqoquLu7Y9SoUa1etr3WMnO1WXuqZeZoM3urZVeuXIFKpUJgYCAaGhq0wwsKCqBQKDBt2jS9yxg0aBDc3d1RVVWlHXb16lX4+vqiT58+uHfvnnZ4ZmYmhBD48MMPJcuIjY3VBli5YXCwA65duwYhBMaMGaN32hs3bkCpVGLkyJE649LT0yGEwMaNG7XDPvvsMwghcOjQIZ3pH330UfTr18+0lW9DzBkcpk6dCiEEMjMzJcMfLIK3b9+2iTNMLWFqcLh37x6uXbuG3377rdlp7WkbA8y7nQFAQEAAXFxcJMO4nbWvWnbgwAEIIRAeHq4zbvLkyVAoFAad+WwKe61l5mqz9lTLLLmdAbZZy9LS0iCEwNq1a3XGBQUFwcPDA/X19c3OX1FRASEEpkyZojMuLCwMQggcP35cO+ydd96BEELnNqhbt27B1dXVoH6epWFwsAPOnj2rvaylj+PHj0MIgU8++URnXHl5OYQQ+Mc//qEdNmbMGDg4OODXX3/Vmf7NN9+EEAJXr1417Q9oI8zVobt+/TpUKhV69eqlc9mwsQiqVCrtfdvdu3dHaGio1RVEQzA1OHh6ekIIAScnJwQFBelcpm78DXvZxgDzBoe7d++ie/fu6Nmzp2Q4t7P2Vcu++OILCCGQnZ2tM2716tUQQmDHjh1GL9eea5m52qw91TJLbWeA7daymTNnQgjR5G1pCxYsgBACxcXFzc6/ceNGCCGQnJysMy4rKwtCCCxfvlw7rF+/fvDx8WlyWYMHD0bnzp1b8VeYFwYHO+C1116DEAL79+/XO23jJdNVq1bpjLt58yaEEHj99de1w/z9/fHII480uax58+ZBCIHS0tLWr3wbYq4OXWpqarNnZaqqqvDnP/8Zy5cvx44dO7BmzRqMHz8eQgj88Y9/xK1bt0z+/baktW02f/58zJ49GxkZGdi+fTuioqLQpUsXODg4YNOmTZJp7WkbA8wbHBITEyGEwKeffioZzu2sfdWyWbNmQQjR5MOlu3fvhhACK1euNHq59lzLzNVm7amWWWo7A2y3lo0bNw5CiCbXY+XKlRBCYPfu3c3O33iL0Z49e3TGlZaWQgiBefPmaYepVCoMHDiwyWW9/vrrEELI/pA0g4MM3Lx5E2FhYQZbWVnZ7LKWLFkCIQSmT59u0G+vW7cOQgikpaXpjLt79y6EEHj55Ze1wx5//HGdMwSNNF6WffD+YktgrvYyV4du0KBBcHBwkNyvqI/58+dDCIG4uDiTf98QrK3NgN/fCubl5YUuXbpIzshZwzYGWF+bHT16FC4uLujfv7/BB8/2tJ21p1rWeDtRRUWFzjIbby+JiYkxen3suZZZqs0A+61llmozW6hlzREcHAwhRJMPJTfexrRly5Zm51+4cCGEEDhw4IDOuMbbmD744APtMAcHBwwfPrzJZTXexvTgSwzkgMFBBurq6iBEy6/Fe9CcnJwml5OcnAyFQoGXXnqpxXvsHqSls3Q3btww6ixdaGhom5xBMVd7maND13iGwNj7DK9fvw6FQoHg4GCTft9QrKnNHqRxmzly5Ih2mDVsY4B1tVlhYSE6duyIRx99FNXV1QbP1562s/ZUy1o6E/zdd9+16kywvdcyS7TZg9hjLbNEm9lKLWuOlq44NF5Fae0Vh5KSEghh+BWHxrtLeMWBtIq0tDQoFAq88MILuH37tsHztaf7gh/GHB26uXPn6j3D0BxdunRB//79Tfr9tsbcwaGx0D74nn172sYA09vsxIkT6Ny5M3r27ImLFy8aPX972c7aUy2zxL3n9l7LLHm/PmCftczcbWYPtYzPOOjC4GCDrFmzBg4ODggODjb6/r8bN27AxcWlxTeRbNiwQTvs008/hRDNvyWib9++xv8BMmFqh+7OnTvo2rUrunbtijt37hg17y+//AIhBEaPHt3q35cDcweHjz76CEIIHDt2TDvMnrYxwLQ2KyoqgpeXF3r06IELFy4YPX972s7aUy3bv38/hGj5bTe1tbUGL6891DJzt9nD2GMtM2eb2Usta3wOqLm3KqlUqhbv+Lhw4QKEaPmtSrm5udphkyZNghDNv1XpL3/5iwl/jXlgcLAx0tPTDQ4NdXV1KCsr0znD8cYbb0ChUKCwsFA7rKGhAYGBgejUqZPk/c0lJSVQKBQ676X+5ptvIITAwoULzfBXtQ36OifNtVcjW7ZsgRACc+fObXYZP//8s86we/fu4b333oMQAgkJCcavuIy0ps1u3LiB69ev60xbXl4OlUqF7t27SwqtPW1jQOu3M2MOtNzOfqe91LKGhgb4+vo2+379h2/nYC0zT5u1t1pmru3MnmpZXV0d3Nzcmv2Ow9SpU7XDfvzxR5SVlencSjRw4EC4u7tLbtW6du0aevTogd69e0u+47Bnzx4Iofsdh7i4OAghsG7dOnP/iUbD4GBDNH7RsVOnTkhOTtb5yuK3334rmb4xzT78BdWKigqo1Wqo1WpERUVBo9Fov7aampqq87tz5syBEL9/CTMlJQWffPIJXF1d8dRTTzVZVK2JnTt3IjIyEpGRkejTpw+EENp/P/wxnubaq5EXX3yx2fs/G5kwYQIGDx6MTz/9FKtXr8bixYsxePBgCCEQFBRk8LMocmJqm508eRIdO3bE9OnTERsbC41Gg9mzZ8Pd3R1OTk7YtWuXzm/a8jYGmN5mly5dglqthkKhQHh4eJNfqX3w1YTczn6nPdWybdu2QaFQwN/fHwkJCYiNjYWfnx9UKpXOrRKsZb9japu1x1pmapvZYy2Lj4+HEL9/OVqj0SAqKgpqtRre3t6SKzCNr+59+FmuvLw8KJVK+Pn5IS4uDgkJCfD390eHDh2QlZWl83sTJkyAEALvvvsuUlNT8eGHH6JDhw4YOXIkvxxNjKNxJ21OPz+/Jqdv6uBRXl6OV155BZ06dYJSqcSAAQOavdf17t27WL58OZ588kk4OzujW7dumDFjhuxP9htC447cnA/SUnvV1NTAwcEBQ4YMafH30tLSMHLkSHh7e8PJyQnu7u4YMGAA4uLijL4lQC5MbbOffvoJkyZNwpNPPglPT084OTnB19cXb775Jk6ePNnkb9ryNgaY3mY5OTktzi+EkLyRiNvZfdpLLQN+/6rskCFD4ObmBk9PT4wdOxanTp3SmY617D6mtFl7rGWAaW1mr7Vs/fr1CAgIgFKphJeXFyZOnKjz3EZzwQEA8vPzMXr0aHh4eMDNzQ0jRoxo9mURv/76K8LCwvDYY4/B2dkZPXv2xLx586ziuxYAgwMhhBBCCCHEABgcCCGEEEIIIXphcCCEEEIIIYTohcGBEEIIIYQQohcGB0IIIYQQQoheGBwIIYQQQgghemFwIIQQQgghhOiFwYEQQgghhBCiFwYHQgghhBBCiF4YHAghhBBCCCF6YXAghBBCCCGE6IXBgRBCCCGEEKIXBgdCCCEWRwihNSgoSO7VaZZRo0ZJ1pUQQsh9WBUJIYRYHCEEhg8fjoyMDGRnZ8u9Os2yf/9+ZGRkYPjw4QwOhBDyEKyKhBBCLI4QApMnT5Z7NQxm8uTJDA6EEPIQrIqEEEIsDoMDIYTYPqyKhBBCmqWhoQFDhgyBq6srSkpKJOO++uorCCEwe/ZsvctpKTj4+fkhKCgIxcXFeOGFF6BSqdC1a1fMnTsXDQ0NuH37Nj7++GP4+PjAxcUFw4YN01mX9PR0CCGwf/9+REZGws/PD0qlEgMHDkRubi4A4NChQxg2bBjc3NzQrVs3hIeH4969e02uE4MDIYTowqpICCGkRaqqquDl5YVnnnkGt27dAgCcP38eHh4eCAwMRH19vd5l6AsOvXv3xiOPPIJZs2YhKSkJr7zyCoQQmDdvHsaOHYvg4GCsWLECn3/+Odzc3PDEE0/gt99+0y6jMTgMGDAAAQEBiIuLw+LFi9G1a1d4eHhg27Zt8PLywj//+U+sWrUKI0eOhBAC//73v5tcJwYHQgjRhVWREEKIXnbs2AEhBKZPn476+noEBgZCpVLh3LlzBs2vLzgIIbB582bJ8Oeffx4KhQLjx4+XXBlYvnw5hBDYu3evdlhjcAgICJAEmV27dkEIgQ4dOiA/P187vL6+Ht7e3vjTn/7U5DoxOBBCiC6sioQQQgzio48+ghACQ4cOhRACGRkZBs+rLzj4+vrqDJ89ezaEENi3b59keFFREYQQSEhI0A5rDA7JycmSaX/55RftOj/M+PHjoVarm1wnBgdCCNGFVZEQQohB1NfX46mnnoIQApMmTTJqXn3BYdiwYTrDw8LCIITAhQsXJMMrKyshhEB4eLh22IPPODT1202tb0vhgMGBEEJ0YVUkhBBiEEVFRXBxcYEQwuBnGxox5OHoh2kMDpWVlZLhjcEhLCxMO6wxOOTk5Bj82wwOhBBiHKyKhBBC9HL9+nX06dMHXbt2xZIlSyCEwJw5cwyen8GBEEJsH1ZFQgghenn77behUCiwZ88eAMC7774LIQS+++47g+ZncCCEENuHVZEQQkiLrFmzRvtq1EauX7+Ovn37okuXLrh8+bLeZTA4EEKI7cOqSAghpFnKysrg5uaGgQMH4s6dO5Jxjc88jBw5Enfv3m1xOQwOhBBi+7AqEkIIsThCCISEhKCurg5Xr16Ve3Wa5dq1a6irq0NISAiDAyGEPASrIiGEEIsjhNDa1NUFa2HUqFGSdSWEEHIfVkVCCCEWZ9++fVoLCwvlXp1mKSoqkqwrIYSQ+zA4EEIIIYQQQvTC4EAIIYQQQgjRC4MDIYQQQgghRC8MDoQQQgghhBC9MDgQQgghhBBC9MLgQAghhBBCCNELgwMhhBBCCCFELwwOhBBCCCGEEL0wOBBCCCGEEEL0wuBACCGEEEII0QuDAyGEEEIIIUQvDA6EEEIIIYQQvTA4EEIIIYQQQvTC4EAIIYQQQgjRC4MDIYQQQgghRC8MDoQQQgghhBC9MDgQQgghhBBC9MLgQAghhBBCCNELgwMhhBBCCCFELwwOhBBCCCGEEL38P4/p8urGM+GeAAAAAElFTkSuQmCC\" width=\"599.5333333333333\">" ], "text/plain": [ "<IPython.core.display.HTML object>" @@ -1831,13 +1831,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left\\{ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" + ], + "text/plain": [ + "⎧ -P ⎫\n", + "⎨a: ────────────⎬\n", + "⎩ \\bar{\\tau}â‹…pâŽ" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a_subs" ] @@ -1874,7 +1891,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1903,263 +1920,2270 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "u_fa_x_range = get_u_fa_x(x_range, 1)\n", - "u_ma_x_range = get_u_ma_x(x_range, 1)\n", - "fig, (ax_u2) = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", - "line_u_f, = ax_u2.plot(x_range, u_fa_x_range, color='black');\n", - "line_u_m, = ax_u2.plot(x_range, u_ma_x_range, color='green');\n", - "ax_u2.set_xlabel('x [mm]'); ax_u2.set_ylabel('$u$ [mm]')\n", - "def update(P):\n", - " line_u_f.set_ydata(get_u_fa_x(x_range, P))\n", - " line_u_m.set_ydata(get_u_ma_x(x_range, P))\n", - "ipw.interact(update, P=ipw.FloatSlider(min=0, max=1, step=0.05));" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Evaluate strains and stresses\n", - "With the known displacements at hand, we can directly calculate the strains as\n", - "\\begin{align}\n", - "\\varepsilon_\\mathrm{f} &= \\frac{\\mathrm{d} u_\\mathrm{f}}{ \\mathrm{d} x} \\\\\n", - "\\varepsilon_\\mathrm{m} &= \\frac{\\mathrm{d} u_\\mathrm{m}}{ \\mathrm{d} x} \\\\\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "eps_f_x = sp.diff(u_fa_x,x)\n", - "eps_m_x = sp.diff(u_ma_x,x)\n", - "sp.simplify(eps_f_x), sp.simplify(eps_m_x)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "The stresses along the fiber are given as\n", - "\\begin{align}\n", - "\\sigma_\\mathrm{f} &= \\frac{\\varepsilon_\\mathrm{f}}{ E_\\mathrm{f} }, \\;\n", - "\\sigma_\\mathrm{m} = \\frac{\\varepsilon_\\mathrm{m}}{ E_\\mathrm{f} }\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "sig_f_x = E_f * eps_f_x\n", - "sig_m_x = E_m * eps_m_x\n", - "sig_f_x, sig_m_x" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "The profile of shear stress along the bond zone is obtained as\n", - "\\begin{align}\n", - " \\tau = \\frac{\\mathrm{d} \\sigma}{\\mathrm{d} x}\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "tau_x = sig_f_x.diff(x) * A_f / p\n", - "sp.simplify(tau_x)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Plot the strains and stresses\n", - "Similarly to the callable function `get_u_fa_x` let us define the functions for the strains and stresses using the `sp.lambdify` generator " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "get_eps_f_x = sp.lambdify((x, P), eps_f_x.subs(data_f))\n", - "get_eps_m_x = sp.lambdify((x, P), eps_m_x.subs(data_f))\n", - "get_sig_f_x = sp.lambdify((x, P), sig_f_x.subs(data_f))\n", - "get_sig_m_x = sp.lambdify((x, P), sig_m_x.subs(data_f))\n", - "get_tau_x = sp.lambdify((x, P), tau_x.subs(data_f))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "To make the code for plotting shorter let us define a general procedure plotting and filling the curves and attaching the labels to a specified subplot in one call " - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "scrolled": false, "slideshow": { "slide_type": "slide" } }, - "outputs": [], - "source": [ - "fig, (ax_eps, ax_sig, ax_tau) = plt.subplots(1,3, figsize=(10,3), tight_layout=True)\n", - "poui.plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range,1 ), \n", - " color='green',xlabel='x [mm]', ylabel=r'$\\varepsilon$ [-]')\n", - "poui.plot_filled_var(ax_eps, x_range, get_eps_m_x(x_range,1 ), \n", - " color='green',alpha=0.8)\n", - "poui.plot_filled_var(ax_sig, x_range, get_sig_f_x(x_range,1),\n", - " color='blue', xlabel='x [mm]', ylabel=r'$\\sigma$ [MPa]')\n", - "poui.plot_filled_var(ax_sig, x_range, get_sig_m_x(x_range,1),\n", - " color='blue', alpha=0.8)\n", - "poui.plot_filled_var(ax_tau, x_range, get_tau_x(x_range,1),\n", - " color='red', xlabel='x [mm]', ylabel=r'$\\tau$ [MPa]');" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Pull-out curve" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Quick summary - direct derivation\n", - "\\begin{align}\n", - " \\varepsilon_\\mathrm{f}(0) &= \\frac{P}{E_\\mathrm{f} A_\\mathrm{f}}, \\;\\;\n", - " \\varepsilon_\\mathrm{m}(0) = \\frac{-P}{E_\\mathrm{m} A_\\mathrm{m}} \\\\\n", - " a &= - \\frac{P}{p\\tau}.\n", - "\\end{align}\n", - "Thus, the crack opening can be expressed as the area of the triangle\n", - "\\begin{align}\n", - " w &= \\frac{1}{2}\\left[\\varepsilon_\\mathrm{f}(0) - \\varepsilon_\\mathrm{m}(0)\\right]a \\nonumber \\\\\n", - " &= \\frac{1}{2}\\frac{P^2}{p\\tau} \\left[\\frac{1}{E_\\mathrm{f} A_\\mathrm{f}} + \\frac{1}{E_\\mathrm{m} A_\\mathrm{m}}\\right].\n", - "\\end{align}\n", - "By solving this equation for $P$ we obtain the pullout curve in the form\n", - "\\begin{align}\n", - " P(w) = \\sqrt{2wp\\tau \\frac{E_\\mathrm{f}A_\\mathrm{f}E_\\mathrm{m}A_\\mathrm{m}}{E_\\mathrm{f}A_\\mathrm{f}+E_\\mathrm{m}A_\\mathrm{m}}}.\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "eps_f_0 = P / E_f / A_f\n", - "eps_m_0 = -P / E_m / A_m\n", - "a_subs = sp.solve({P / (A_f) - p * tau * a}, a)\n", - "w_el = sp.Rational(1,2) * ( eps_f_0 - eps_m_0) * a\n", - "Pw_pull_elastic = sp.solve(w_el.subs(a_subs) - w, P)[1]\n", - "Pw_pull_elastic " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pull-out curve derived from the displacement field solution " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw4AAAGHCAYAAAAZYgV0AAAgAElEQVR4nO3dfXRU9Z3H8e8MT5NkwkMGNDxofFiktXG7BI0gQtgoslUWatUl3bWGgsrZo1XXilvUNkjQtQpHIGBGJEoF0S5a6hZUQES6DXgAcdkD5ohAIAL2bDgWyoMNkXz2D0+mJpNkMpOEX27yfp3zO6feO/fOza/jNe/MnTsmAAAAAIjBXB8AAAAAgPaPcAAAAAAQE+EAAAAAICbCAQAAAEBMhAMAAACAmAgHAAAAADERDgAAAABiIhwAAAAAxEQ4AAAAAIiJcAAAAAAQE+EAAAAAICbCAQAAAEBMhAMAAACAmAgHAAAAADERDgAAAABiIhwAAAAAxEQ4AAAAAIiJcGhDn332mcLhsNatW6fS0lIGg8FgMBgMBuOcjXXr1ikcDuuzzz5rld9tCYc2FA6HZWYMBoPBYDAYDIazEQ6HW+V3W8KhDa1bty7yf5br4mQwGAwGg8FgdK5R+0fsdevWtcrvtoRDGyotLZWZqbS01PWhAAAAoJNp7d9FCYc2RDgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRzqefLJJ3Xrrbfq4osvlpkpIyMjof1s375d48aNU8+ePRUMBpWTk6NNmza16NgIBwAAALhCONRjZkpLS9P111+vXr16JRQOW7duVVJSkjIyMvTMM89owYIFyszMVNeuXbV+/fqEj41wAAAAgCuEQz379u2L/O8hQ4YkFA7Dhw9XSkqKDh48GFl27NgxDRw4UIMHD1ZNTU1Cx0Y4AAAAwBXCoQmJhMO+fftkZpo8eXLUuoKCApmZtmzZktDxEA4AAABwhXBoQiLh8Oqrr8rMtHjx4qh1a9eulZlp/vz5CR0P4QAAAABXCIcmJBIOc+bMkZnprbfeilq3e/dumZmmT58ecz8VFRUqLS2tM8LhMOEAAAAAJwiHJiQSDrNmzZKZacOGDVHrai9juueee2Lup/aypoYG4QAAAIBzjXBoQmu/47Br1y7ecQAAAIAnEQ5N4DMOAAAAwNcIhyYkEg579+6NeVelzZs3J3Q8hAMAAABcIRyaECscjhw5orKyMp06darO8uzsbKWkpKiioiKy7Pjx4xo0aJAuvfRSvscBAAAAnkM41PPyyy+rsLBQhYWF6tu3r3r37h3556KiojqPzc/Pl5lp48aNdZZ/8MEHCgQCysjI0Ny5c1VUVKTMzEx16dJFa9euTfjYCAcAAAC4QjjUk5OT0+jdjOq/+9BYOEjS1q1bNXbsWKWmpio5OVmjR49u8HHxIBwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHDyEcAAAAIArhIOHEA4AAABwhXDwEMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHBqxYsUKZWVlKRAIKBQKKS8vTwcOHGjWtjU1NXr55Zc1fPhwpaWlKTU1VZmZmXriiSd04sSJhI+JcAAAAIArhEMDioqKZGYaOXKkiouLVVhYqFAopAEDBujw4cMxt3/44YdlZsrNzVVRUZGee+453XzzzTIzjR49OuHjIhwAAADgCuFQz9GjRxUMBpWVlaXq6urI8m3btsnn82nq1KlNbl9VVaVAIKCsrCydPXu2zrqJEyfKzFRWVpbQsREOAAAAcIVwqKekpERmpqVLl0aty8nJUWpqqqqqqhrd/sSJEzIz3XjjjVHr/vVf/1VmpoMHDyZ0bIQDAAAAXCEc6pk2bZrMTHv27IlaN2PGDJmZdu7c2eQ+RowYIb/fr1/+8pf69NNPVV5ersWLFysQCOjOO+9M+NgIBwAAALhCONQzfvx4mZlOnz4dtW7RokUyM61Zs6bJfRw8eFBjxoyRmUWG3+/XrFmzmn0cFRUVKi0trTPC4TDhAAAAACcIh3pyc3NlZlGfT5D+ehnTypUrm9xHZWWlpk2bpjvuuEMrVqzQa6+9pry8PJmZCgoKmnUcBQUFdcLjm4NwAAAAwLlGONTT1DsOCxcujPmOw6lTpzR48GDl5eVFrcvPz5fP59NHH30U8zh4xwEAAADtCeFQT0s/4/CrX/1KZqY33ngjat2aNWtkZpo3b15Cx8ZnHAAAAOAK4VDPkiVLmryrUjAYbPKuSk8++aTMTK+99lrUulWrVsnMNGfOnISOjXAAAACAK4RDPZWVlUpOTm70exymTJkSWXbkyBGVlZXp1KlTkWW//e1vZWb63ve+F7XvCRMmyMz0+9//PqFjIxwAAADgCuHQgHnz5kW+OTocDmv27NkKhUJKT0/XoUOHIo/Lz8+XmWnjxo2RZV999ZWys7NlZrr22mv17LPPat68ecrJyZGZafz48QkfF+EAAAAAVwiHRixfvlxDhw5VIBBQWlqaJk2apP3799d5TEPhIH39Aelf/vKX+ru/+zv16tVLPXr00He+8x098cQTTV7mFAvhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHDyEcAAAAIArhIOHEA4AAABwhXDwEMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHDyEcAAAAIArhIOHEA4AAABwhXDwEMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCIdGrFixQllZWQoEAgqFQsrLy9OBAweavf1XX32l4uJiZWdnKxgMKiUlRZmZmXriiScSPibCAQAAAK4QDg0oKiqSmWnkyJEqLi5WYWGhQqGQBgwYoMOHD8fc/syZMxo/fry6du2q22+/XcXFxXr++ef1s5/9THfffXfCx0U4AAAAwJV2Hw6PP/54i0Z5eXlcz3f06FEFg0FlZWWpuro6snzbtm3y+XyaOnVqzH384he/kN/v1zvvvBPvj9skwgEAAACutPtw8Pl88vv98vl8cQ+/368NGzbE9XwlJSUyMy1dujRqXU5OjlJTU1VVVdXo9idPnlTPnj01ceJESVJNTY3+/Oc/x/dDN4JwAAAAgCueCIf58+frwIEDcY0dO3bI5/PFHQ7Tpk2TmWnPnj1R62bMmCEz086dOxvd/p133pGZ6YknntD06dPVq1cvmZn69Omje++9V6dOnYp7DmoRDgAAAHDFE+HwyiuvxL3d0aNHEwqH8ePHy8x0+vTpqHWLFi2SmWnNmjWNbj9v3jyZmfr166f09HQtWLBAr7/+um6//XaZma677jrV1NTEPI6KigqVlpbWGeFwmHAAAACAE+0+HP7whz+osrIy7u2++uor/eEPf4j7MqHc3FyZmc6ePRu1rvYyppUrVza6fWFhocxMXbp00e7du+usq42H5nz2oaCgQGbW4CAcAAAAcK61+3A415p6x2HhwoUx33GYM2eOzEzXXHNN1Lr33ntPZqZ///d/j3kcvOMAAACA9oRwqKeln3F47bXXZGa65ZZbotaVlZXJzHTXXXcldGx8xgEAAACuEA71LFmypMm7KgWDwSbvqlReXi4zU3Z2dtS6tWvXysz02GOPJXRshAMAAABc8WQ4LFu2TCNGjFC/fv3k9/ujRpcuXRLed2VlpZKTkxv9HocpU6ZElh05ckRlZWVRd0oaPXq0fD6ftmzZEllWU1OjCRMmyMy0efPmhI6NcAAAAIArnguHxx9/XH6/X/3799fEiRM1efLkBkdL1N4ZaeTIkQqHw5o9e7ZCoZDS09N16NChyOPy8/NlZtq4cWOd7Xfu3KnU1FT17NlTjz76qBYuXKgbbrhBZlYnPOJFOAAAAMAVz4VDenq6cnNzdebMmTZ9nuXLl2vo0KEKBAJKS0vTpEmTtH///jqPaSwcJGnXrl26+eab1adPH3Xv3l2XX365nn322Qbv1tRchAMAAABc8Vw4pKSkKBwOt/XTtEuEAwAAAFzxXDiMGjVKjz76aFs/TbtEOAAAAMAVz4XD+++/r1AopA8//LCtn6rdIRwAAADgiufCQZJWrVqlbt26afTo0brjjjv04x//uM5oyQeQ2zPCAQAAAK54Lhy2bNmiXr16yefzNTr8fn9bH4YThAMAAABc8Vw4XH311TrvvPO0evVq/elPf2rrp2tXCAcAAAC44rlwSEpK0tNPP93WT9MuEQ4AAABwxXPhcNFFF+nZZ59t66dplwgHAAAAuOK5cCgsLNSwYcNUXV3d1k/V7hAOAAAAcMVz4bBhwwZdddVVGjZsmEpKSvTee+9p06ZNUaMjIhwAAADgiufCoaE7KH1zcFclAAAAoPV5LhyWLl3arNEREQ4AAABwxXPh0JkRDgAAAHCFcPAQwgEAAACueDIcli1bphEjRqhfv35Rn3Hw+/3q0qXLuTiMc45wAAAAgCueC4fHH39cfr9f/fv318SJEzV58uQGR0dEOAAAAMAVz4VDenq6cnNzdebMmbZ+qnaHcAAAAIArnguHlJQUhcPhtn6adolwAAAAgCueC4dRo0bp0UcfbeunaZcIBwAAALjiuXB4//33FQqF9OGHH7b1U7U7hAMAAABc8Vw4SNKqVavUrVs3jR49WnfccYd+/OMf1xlTpkw5F4dxzhEOAAAAcMVz4bBlyxb16tVLPp+v0eH3+9v6MJwgHAAAAOCK58Lh6quv1nnnnafVq1frT3/6U1s/XbtCOAAAAMAVz4VDUlKSnn766bZ+mnaJcAAAAIArnguHiy66SM8++2xbP027RDgAAADAFc+FQ2FhoYYNG6bq6uq2fqp2h3AAAACAK54Lhw0bNuiqq67SsGHDVFJSovfee0+bNm2KGh0R4QAAAABXPBcODd1B6ZuDuyoBAAAArc9z4bB06dJmjY6IcAAAAIArnguHzoxwAAAAgCuEg4cQDgAAAHCl3YfDpk2b9H//939xb1ddXa1Nmzbp2LFjrX1IzhAOAAAAcKXdh4Pf79crr7wS93ZHjx6V3+/Xhg0bWvuQnCEcAAAA4Eq7Dwefz6cFCxbo4MGDcY2PPvpIPp+PcAAAAABagSfCof4tV+MZhAMAAADQcu0+HGbOnNmiUV5e3tqH5AzhAAAAAFfafTjgrwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4RDI1asWKGsrCwFAgGFQiHl5eXpwIEDCe3rtttuk5lpyJAhLTomwgEAAACuEA4NKCoqkplp5MiRKi4uVmFhoUKhkAYMGKDDhw/Hta/Vq1fL7/crKSmJcAAAAIBneS4cHnzwQS1btky7du3S2bNnW33/R48eVTAYVFZWlqqrqyPLt23bJp/Pp6lTpzZ7XydOnNCFF16oe++9VxkZGYQDAAAAPMtz4fDNb5JOSkpSdna27r77bhUXF+uDDz7Q6dOnW7T/kpISmZmWLl0atS4nJ0epqamqqqpq1r7uv/9+9e/fX8ePHyccAAAA4GmeC4cvvvhC69ev11NPPaXbbrtNF198cZ2Y6Nq1qy6//PKE9z9t2jSZmfbs2RO1bsaMGTIz7dy5M+Z+tm7dKr/fr9dee02SCAcAAAB4mufCoSGff/655syZo2AwqGHDhmn48OEJ72v8+PEyswbfuVi0aJHMTGvWrGlyH9XV1frud7+rG264IbIs3nCoqKhQaWlpnREOhwkHAAAAONEhwqHWjh07dP755yd89yNJys3NlZk1+PmJ2suYVq5c2eQ+nnrqKQUCAe3duzeyLN5wKCgokJk1OAgHAAAAnGsdKhwk6e6779bkyZMT3r6pdxwWLlwY8x2HvXv3KikpSbNmzaqznHccAAAA4GUdLhwWLFig888/P+HtW/oZh4kTJ2rAgAH65JNPVF5eHhkDBw7UJZdcovLycv3xj39M6Nj4jAMAAABc8Vw4DBw4UBMnTtTjjz+u1atX6/PPP6+zfvLkyerZs2fC+1+yZEmTd1UKBoNN3lXpu9/9bqOXGNWOcePGJXRshAMAAABc8Vw4jB07Vv369atzJ6UBAwZo7NixGj58uPx+v2688caE919ZWank5ORGv8dhypQpkWVHjhxRWVmZTp06FVn23nvvadWqVVGjX79+GjhwoFatWqXNmzcndGyEAwAAAFzxXDjUqqio0KpVq/Tzn/9cN910ky688EKlpaXpxhtv1MGDB1u073nz5kW+OTocDmv27NkKhUJKT0/XoUOHIo/Lz8+XmWnjxo0x98ntWAEAAOBlng2HtrZ8+XINHTpUgUBAaWlpmjRpkvbv31/nMYQDAAAAOgvCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHDyEcAAAAIArhIOHEA4AAABwhXDwEMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjg0YsWKFcrKylIgEFAoFFJeXp4OHDgQc7svvvhC8+bN09ixYzVo0CAFAgFddtlluuuuu1RRUdGiYyIcAAAA4Arh0ICioiKZmUaOHKni4mIVFhYqFAppwIABOnz4cJPbvv322/L7/bruuuv05JNP6oUXXtADDzygpKQk9erVS7t37074uAgHAAAAuEI41HP06FEFg0FlZWWpuro6snzbtm3y+XyaOnVqk9uXl5drz549UcvXr18vM9Ott96a8LERDgAAAHCFcKinpKREZqalS5dGrcvJyVFqaqqqqqoS2ndaWpqGDBmS8LERDgAAAHCFcKhn2rRpMrMG3zWYMWOGzEw7d+6Me7/Hjh1Tt27dNGrUqISPjXAAAACAK4RDPePHj5eZ6fTp01HrFi1aJDPTmjVr4t7vQw89JDPTkiVLmvX4iooKlZaW1hnhcJhwAAAAgBOEQz25ubkyM509ezZqXe1lTCtXroxrn7/+9a/l8/k0duzYBvfbkIKCAplZg4NwAAAAwLlGONTT1DsOCxcujPsdhzVr1qh79+7KysrSsWPHmr0d7zgAAACgPSEc6mnNzzi8/fbb6tGjh/72b/9WR48ebfGx8RkHAAAAuEI41LNkyZIm76oUDAabdVeld955R4FAQFdccYUqKytb5dgIBwAAALhCONRTWVmp5OTkRr/HYcqUKZFlR44cUVlZmU6dOlVnH2vXrm31aJAIBwAAALhDODRg3rx5kW+ODofDmj17tkKhkNLT03Xo0KHI4/Lz82Vm2rhxY2TZtm3bFAgE1KNHDz377LNatmxZ1EgU4QAAAABXCIdGLF++XEOHDlUgEFBaWpomTZqk/fv313lMQ+Hw0ksvNXo3pNqRKMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwsFDCAcAAAC4Qjh4COEAAAAAVwgHDyEcAAAA4Arh4CGEAwAAAFwhHDyEcAAAAIArhIOHEA4AAABwhXDwEMIBAAAArhAOHkI4AAAAwBXCwUMIBwAAALhCOHgI4QAAAABXCAcPIRwAAADgCuHgIYQDAAAAXCEcPIRwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAhhAMAAABcIRw8hHAAAACAK4SDhxAOAAAAcIVw8BDCAQAAAK4QDh5COAAAAMAVwqERK1asUFZWlgKBgEKhkPLy8nTgwIFmb799+3aNGzdOPXv2VDAYVE5OjjZt2tSiYyIcAAAA4Arh0ICioiKZmUaOHKni4mIVFhYqFAppwIABOnz4cMztt27dqqSkJGVkZOiZZ57RggULlJmZqa5du2r9+vUJHxfhAAAAAFcIh3qOHj2qYDCorKwsVVdXR5Zv27ZNPp9PU6dOjbmP4cOHKyUlRQcPHowsO3bsmAYOHKjBgwerpqYmoWMjHAAAAOAK4VBPSUmJzExLly6NWpeTk6PU1FRVVVU1uv2+fftkZpo8eXLUuoKCApmZtmzZktCxEQ4AAABwhXCoZ9q0aTIz7dmzJ2rdjBkzZGbauXNno9u/+uqrMjMtXrw4at3atWtlZpo/f35Cx0Y4AAAAwBXCoZ7x48fLzHT69OmodYsWLZKZac2aNY1uP2fOHJmZ3nrrrah1u3fvlplp+vTpMY+joqJCpaWldUY4HHYSDr3v762uD3ZlMBgMBoPBYLST0fv+3uf090GJcIiSm5srM9PZs2ej1tVexrRy5cpGt581a5bMTBs2bIhaV3sZ0z333BPzOGova2ponOtw6PpgV9lMYzAYDAaDwWC0k9H1wa7n9PdBiXCI0tQ7DgsXLmzROw67du3iHQcGg8FgMBgMRosH7zi0A3zGAQAAAIhGONSzZMmSJu+qFAwGm7yr0t69e2PeVWnz5s0JHRvhAAAAAFcIh3oqKyuVnJzc6Pc4TJkyJbLsyJEjKisr06lTp+rsIzs7WykpKaqoqIgsO378uAYNGqRLL72U73EAAACA5xAODZg3b17km6PD4bBmz56tUCik9PR0HTp0KPK4/Px8mZk2btxYZ/sPPvhAgUBAGRkZmjt3roqKipSZmakuXbpo7dq1CR8X4QAAAABXCIdGLF++XEOHDlUgEFBaWpomTZqk/fv313lMY+EgSVu3btXYsWOVmpqq5ORkjR49usHHxYNwAAAAgCuEg4cQDgAAAHCFcPAQwgEAAACuEA4eQjgAAADAFcLBQwgHAAAAuEI4eAjhAAAAAFcIBw8hHAAAAOAK4eAh69atk5kpHA6rtLSUwWAwGAwGg8E4ZyMcDsvMtG7dulb53ZZwaEO1/2cxGAwGg8FgMBiuRjgcbpXfbQmHNvTZZ58pHA5r3bp1TuqSdzqYM+asfQ3mjPliztrfYM6Ys448X+vWrVM4HNZnn33WKr/bEg4dUGkpn62IF3MWP+YsfsxZfJiv+DFn8WPO4secxacjzRfh0AF1pBfoucKcxY85ix9zFh/mK37MWfyYs/gxZ/HpSPNFOHRAHekFeq4wZ/FjzuLHnMWH+YofcxY/5ix+zFl8OtJ8EQ4dUEd6gZ4rzFn8mLP4MWfxYb7ix5zFjzmLH3MWn440X4RDB1RRUaGCggJVVFS4PhTPYM7ix5zFjzmLD/MVP+YsfsxZ/Jiz+HSk+SIcAAAAAMREOAAAAACIiXAAAAAAEBPhAAAAACAmwgEAAABATIQDAAAAgJgIBw85dOiQnnzySY0ePVrp6elKTk7W5ZdfroceekhHjx6Na1+ffvqpbrnlFqWlpSkpKUnZ2dl64403GnxsTU2NioqKdPnll6tHjx5KT0/X3XffHfdzuhAOh/XP//zPGjJkiHw+n8zie8mXl5fLzJocy5cvb9bjzz///Nb+8dpES+dMkvLz8xudh+Li4qjHe/k1JrV8zr788kstXrxYEyZMUEZGhgKBgC6++GLl5eXp448/jno8r7O/6iznMklau3atrr32WqWkpKhXr1666aab9L//+7/N2rYznsukls2Z1PnOZVLL5qyjnstWrFihrKwsBQIBhUIh5eXl6cCBA83efvv27Ro3bpx69uypYDConJwcbdq0qcHHVlVV6fHHH9cll1yi7t2768ILL9TDDz+sU6dOtdaP0yKEg4cUFxerW7du+sd//EfNmTNHixcv1p133qmuXbvqggsu0Oeff96s/ZSXl6tv374KhUIqLCxUcXGxRo4cKTPTSy+9FPX4n/70pzIzjR8/XosXL9aMGTOUlJSkzMxMnTx5spV/ytaVkU7vYtAAABAoSURBVJGh1NRUjR49WgMHDoz7l5OTJ09q2bJlDY5evXqpe/fuqqysjDy+9iR48803Rz3+9ddfb+0fr020dM6kv/7HtqF527NnT9Tjvfwak1o+Z2VlZTIzDR8+XDNnztSSJUv0yCOPqE+fPurevbvee++9Oo/ndfa1znQue/PNN+X3+5WZmakFCxbomWee0YUXXqjU1NRm/VLXGc9lLZ0zqfOdy1o6Zx3xXFZUVCQz08iRI1VcXKzCwkKFQiENGDBAhw8fjrn91q1blZSUpIyMDD3zzDNasGCBMjMz1bVrV61fvz7q8bfccovMTD/60Y/0wgsv6N5771WXLl2Um5urs2fPtsWPGBfCwUN27drV4Iv0hRdekJnpoYceatZ+8vLy5PP5tG3btsiyM2fOaOjQoerTp4/+/Oc/R5Z//PHH8vv9mjBhQp19vP766zIzFRYWJvjTnBvl5eWRf9HGjRuX8F8169u8ebPMTLfeemvU85mZCgoKWuV5XGiNOav9j21zeP01JrV8zo4ePaoPP/wwavnu3bvVvXt3XXnllVHPx+us85zLqqurdcEFF2jQoEE6fvx4ZPnBgweVkpKi6667LuF9d9RzWWvNWWc6l7XGnHW0c9nRo0cVDAaVlZWl6urqyPJt27bJ5/Np6tSpMfcxfPhwpaSk6ODBg5Flx44d08CBAzV48GDV1NRElr/zzjsyM/3kJz+ps485c+ZEAtY1wqEDOH78uMxM48aNi/nYkydPKhAIaMyYMVHrXnrpJZmZXn311ciyn//85zIzvf/++1GPv+iiizRkyJCWHfw51JrhMGXKFJmZ3nnnnTrLv3kS/PLLLz3xF6amtDQcampqdPz4cX311VeNPrYjvcak1n2dSdLQoUPVo0ePOst4nXWuc9mGDRtkZpo5c2bUuvz8fPl8vmb95bMhHfVc1lpz1pnOZW35OpO8eS4rKSmRmWnp0qVR63JycpSamqqqqqpGt9+3b5/MTJMnT45aV1BQIDPTli1bIst+9KMfycyiLoM6ffq0kpKSmvV7XlsjHDqAjz/+OPK2VixbtmyRmemRRx6JWvfJJ5/IzPRv//ZvkWXjxo2T3+/XX/7yl6jH//CHP5SZ6dixYy37Ac6R1vqF7sSJEwoGg7rwwguj3jasPQkGg8HIddv9+/fXQw891O5OiM3R0nDo2bOnzEzdunVTTk5O1NvUtc/RUV5jUuuGw9mzZ9W/f39dcMEFdZbzOutc57L/+I//kJlp3bp1Ueuef/55mZnefPPNuPfbkc9lrTVnnelc1lavM8m757Jp06bJzBq8LG3GjBkyM+3cubPR7V999VWZmRYvXhy1bu3atTIzzZ8/P7JsyJAhGjBgQIP7GjFihPr06ZPAT9G6CIcO4NZbb5WZ6d1334352Nq3TJ977rmodadOnZKZ6bbbbossy8zM1HnnndfgvqZPny4z0+7duxM/+HOotX6hW7JkSaN/lTl48KD+/u//XvPnz9ebb76pF198URMmTJCZ6aqrrtLp06db/PznUqJz9vDDD+u+++7TsmXL9Nvf/lazZ89W37595ff79etf/7rOYzvSa0xq3XBYuHChzEyPPfZYneW8zjrXuezee++VmTX44dI1a9bIzLRo0aK499uRz2WtNWed6VzWVq8zybvnsvHjx8vMGjyORYsWycy0Zs2aRrevvcTorbfeilq3e/dumZmmT58eWRYMBpWdnd3gvm677TaZmfMPSRMODpw6dUoFBQXNHuXl5Y3u6+mnn5aZ6c4772zWc7/88ssyM5WUlEStO3v2rMxMN910U2TZJZdcEvUXglq1b8t+8/rittBa89Vav9ANHz5cfr+/zvWKsTz88MMyM82dO7fFz98c7W3OpK/vCpaWlqa+ffvW+Ytce3iNSe1vzv77v/9bPXr00BVXXNHs/3h2ptdZZzqX1V5OtG/fvqh91l5e8swzz8R9PB35XNZWcyZ13HNZW82ZF85ljcnNzZWZNfih5NrLmFauXNno9rNmzZKZacOGDVHrai9juueeeyLL/H6/Ro0a1eC+ai9j+uZNDFwgHByorKyUWdO3xfvm2LhxY4P7Wbx4sXw+n773ve81eY3dNzX1V7qTJ0/G9Ve6hx566Jz8BaW15qs1fqGr/QtBvNcZnjhxQj6fT7m5uS16/uZqT3P2TbWvmd///veRZe3hNSa1rznbvn27evXqpYsuukgVFRXN3q4zvc4607msqb8Er169OqG/BHf0c1lbzNk3dcRzWVvMmVfOZY1p6h2H2ndREn3HYdeuXTJr/jsOtVeX8I4DElJSUiKfz6frr79eX375ZbO360zXBdfXGr/QPfjggzH/wtCYvn376oorrmjR859rrR0OtSfab95nvyO9xqSWz9mHH36oPn366IILLtD+/fvj3r6zvM4607msLa497+jnsra8Xl/qmOey1p6zjnAu4zMO0QgHD3rxxRfl9/uVm5sb9/V/J0+eVI8ePZq8E8mKFSsiyx577DGZNX6XiMsuuyz+H8CRlv5Cd+bMGfXr10/9+vXTmTNn4tr2iy++kJlp7NixCT+/C60dDvfff7/MTKWlpZFlHek1JrVsznbs2KG0tDQNGjRIe/fujXv7zvQ660znsnfffVdmTd/t5tChQ83eX2c4l7X2nNXXEc9lrTlnHeVcVvs5oMbuqhQMBpu84mPv3r0ya/quSps3b44su/3222XW+F2Vbrjhhhb8NK2DcPCYl156qdnRUFlZqbKysqi/cPzTP/2TfD6ftm/fHllWXV2trKws9e7du879m3ft2iWfzxd1X+o33nhDZqZZs2a1wk91bsT65aSx+aq1cuVKmZkefPDBRvfxxz/+MWpZTU2N7r77bpmZioqK4j9whxKZs5MnT+rEiRNRj/3kk08UDAbVv3//OifajvQakxJ/ncXzH1peZ1/rLOey6upqDRw4sNH769e/nINzWevMWWc7l7XW66wjncsqKyuVnJzc6Pc4TJkyJbLsyJEjKisri7qUKDs7WykpKXUu1Tp+/LgGDRqkSy+9tM73OLz11lsyi/4eh7lz58rM9PLLL7f2jxg3wsFDar/RsXfv3lq8eHHUtyyuWrWqzuNra7b+N6ju27dPoVBIoVBIs2fPVjgcjnzb6pIlS6Ke94EHHpDZ19+E+cILL+iRRx5RUlKSvv3tbzd4Um1P/uu//kuFhYUqLCzU4MGDZWaRf67/ZTyNzVetf/iHf2j0+s9a3//+9zVixAg99thjev755/XUU09pxIgRMjPl5OQ0+7MoLrV0zj766CP16tVLd955p+bMmaNwOKz77rtPKSkp6tatm373u99FPaeXX2NSy+fswIEDCoVC8vl8mjlzZoPfUvvNWxPyOvtaZzqX/eY3v5HP51NmZqaKioo0Z84cZWRkKBgMRl0qwbnsay2ds854LmvpnHXEc9m8efNk9vU3R4fDYc2ePVuhUEjp6el13oGpvXVv/c9yffDBBwoEAsrIyNDcuXNVVFSkzMxMdenSRWvXro16vu9///syM91xxx1asmSJfvKTn6hLly4aM2YM3xyN+NT+S9rYyMjIaPDxDf3H45NPPtEPfvAD9e7dW4FAQFdeeWWj17qePXtW8+fP17e+9S11795d559/vu666y7nn+xvjtp/kRsb39TUfH322Wfy+/265pprmny+kpISjRkzRunp6erWrZtSUlJ05ZVXau7cuXFfEuBKS+fs888/1+23365vfetb6tmzp7p166aBAwfqhz/8oT766KMGn9PLrzGp5XO2cePGJrc3szp3JOJ19led5Vwmff2tstdcc42Sk5PVs2dP3Xjjjfqf//mfqMdxLvurlsxZZzyXSS2bs456Llu+fLmGDh2qQCCgtLQ0TZo0KepzG42FgyRt3bpVY8eOVWpqqpKTkzV69OhGbxbxl7/8RQUFBbr44ovVvXt3XXDBBZo+fXq7+F4LiXAAAAAA0AyEAwAAAICYCAcAAAAAMREOAAAAAGIiHAAAAADERDgAAAAAiIlwAAAAABAT4QAAAAAgJsIBAAAAQEyEAwAAAICYCAcAAAAAMREOAAAAAGIiHAAAbc7MIiMnJ8f14TTquuuuq3OsAIC/4qwIAGhzZqZRo0Zp2bJlWrdunevDadS7776rZcuWadSoUYQDANTDWREA0ObMTPn5+a4Po9ny8/MJBwCoh7MiAKDNEQ4A4H2cFQEAjaqurtY111yjpKQk7dq1q866V155RWam++67L+Z+mgqHjIwM5eTkaOfOnbr++usVDAbVr18/Pfjgg6qurtaXX36pn/70pxowYIB69Oiha6+9NupYXnrpJZmZ3n33XRUWFiojI0OBQEDZ2dnavHmzJOn999/Xtddeq+TkZJ1//vmaOXOmampqGjwmwgEAonFWBAA06eDBg0pLS9N3vvMdnT59WpL06aefKjU1VVlZWaqqqoq5j1jhcOmll+q8887Tvffeq+LiYv3gBz+QmWn69Om68cYblZubqwULFugXv/iFkpOT9Td/8zf66quvIvuoDYcrr7xSQ4cO1dy5c/XUU0+pX79+Sk1N1W9+8xulpaXpZz/7mZ577jmNGTNGZqZf/epXDR4T4QAA0TgrAgBievPNN2VmuvPOO1VVVaWsrCwFg0Ht2bOnWdvHCgcz03/+53/WWT5s2DD5fD5NmDChzjsD8+fPl5np7bffjiyrDYehQ4fWCZnf/e53MjN16dJFW7dujSyvqqpSenq6rr766gaPiXAAgGicFQEAzXL//ffLzDRy5EiZmZYtW9bsbWOFw8CBA6OW33fffTIzrV+/vs7yHTt2yMxUVFQUWVYbDosXL67z2C+++CJyzPVNmDBBoVCowWMiHAAgGmdFAECzVFVV6dvf/rbMTLfffntc28YKh2uvvTZqeUFBgcxMe/furbO8vLxcZqaZM2dGln3zMw4NPXdDx9tUHBAOABCNsyIAoFl27NihHj16yMya/dmGWs35cHR9teFQXl5eZ3ltOBQUFESW1YbDxo0bm/3chAMAxIezIgAgphMnTmjw4MHq16+fnn76aZmZHnjggWZvTzgAgPdxVgQAxPQv//Iv8vl8euuttyRJd9xxh8xMq1evbtb2hAMAeB9nRQBAk1588cXIrVFrnThxQpdddpn69u2rw4cPx9wH4QAA3sdZEQDQqLKyMiUnJys7O1tnzpyps672Mw9jxozR2bNnm9wP4QAA3sdZEQDQ5sxMeXl5qqys1LFjx1wfTqOOHz+uyspK5eXlEQ4AUA9nRQBAmzOzyGjo3YX24rrrrqtzrACAv+KsCABoc+vXr4+M7du3uz6cRu3YsaPOsQIA/opwAAAAABAT4QAAAAAgJsIBAAAAQEyEAwAAAICYCAcAAAAAMREOAAAAAGIiHAAAAADERDgAAAAAiIlwAAAAABAT4QAAAAAgJsIBAAAAQEyEAwAAAICYCAcAAAAAMREOAAAAAGIiHAAAAADERDgAAAAAiIlwAAAAABAT4QAAAAAgJsIBAAAAQEyEAwAAAICY/h8G42C5ZtXiNgAAAABJRU5ErkJggg==\" width=\"599.5333333333333\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1478b785b2114520b61d9227f1ec0640", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='P', max=1.0, step=0.05), Output()), _dom_classes=('w…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "u_fa_x_range = get_u_fa_x(x_range, 1)\n", + "u_ma_x_range = get_u_ma_x(x_range, 1)\n", + "fig, (ax_u2) = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", + "line_u_f, = ax_u2.plot(x_range, u_fa_x_range, color='black');\n", + "line_u_m, = ax_u2.plot(x_range, u_ma_x_range, color='green');\n", + "ax_u2.set_xlabel('x [mm]'); ax_u2.set_ylabel('$u$ [mm]')\n", + "def update(P):\n", + " line_u_f.set_ydata(get_u_fa_x(x_range, P))\n", + " line_u_m.set_ydata(get_u_ma_x(x_range, P))\n", + "ipw.interact(update, P=ipw.FloatSlider(min=0, max=1, step=0.05));" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Evaluate strains and stresses\n", + "With the known displacements at hand, we can directly calculate the strains as\n", + "\\begin{align}\n", + "\\varepsilon_\\mathrm{f} &= \\frac{\\mathrm{d} u_\\mathrm{f}}{ \\mathrm{d} x} \\\\\n", + "\\varepsilon_\\mathrm{m} &= \\frac{\\mathrm{d} u_\\mathrm{m}}{ \\mathrm{d} x} \\\\\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\frac{P + \\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}, \\ \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\- \\frac{P + \\bar{\\tau} p x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)$" + ], + "text/plain": [ + "⎛⎧ -P ⎧ \n", + "⎜⎪ 0 for x ≤ ──────────── ⎪ 0 \n", + "⎜⎪ \\bar{\\tau}â‹…p ⎪ \n", + "⎜⎨ , ⎨ \n", + "⎜⎪ P + \\bar{\\tau}â‹…pâ‹…x ⎪ -(P + \\bar{\\tau}â‹…pâ‹…x) \n", + "⎜⎪───────────────────────── otherwise ⎪───────────────────────── \n", + "âŽâŽ©A_\\mathrm{f}â‹…E_\\mathrm{f} ⎩A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "\n", + " -P ⎞\n", + " for x ≤ ────────────⎟\n", + " \\bar{\\tau}â‹…p⎟\n", + " ⎟\n", + " ⎟\n", + " otherwise ⎟\n", + " ⎠" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eps_f_x = sp.diff(u_fa_x,x)\n", + "eps_m_x = sp.diff(u_ma_x,x)\n", + "sp.simplify(eps_f_x), sp.simplify(eps_m_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The stresses along the fiber are given as\n", + "\\begin{align}\n", + "\\sigma_\\mathrm{f} &= \\frac{\\varepsilon_\\mathrm{f}}{ E_\\mathrm{f} }, \\;\n", + "\\sigma_\\mathrm{m} = \\frac{\\varepsilon_\\mathrm{m}}{ E_\\mathrm{f} }\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( E_\\mathrm{f} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}\\right), \\ E_\\mathrm{m} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\- \\frac{P}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{\\bar{\\tau} p x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)\\right)$" + ], + "text/plain": [ + "⎛ ⎛⎧ \n", + "⎜ ⎜⎪ 0 for x ≤\n", + "⎜ ⎜⎪ \n", + "⎜E_\\mathrm{f}⋅⎜⎨ \n", + "⎜ ⎜⎪ P \\bar{\\tau}â‹…pâ‹…x \n", + "⎜ ⎜⎪───────────────────────── + ───────────────────────── ot\n", + "⎠âŽâŽ©A_\\mathrm{f}â‹…E_\\mathrm{f} A_\\mathrm{f}â‹…E_\\mathrm{f} \n", + "\n", + " -P ⎞ ⎛⎧ \n", + " ────────────⎟ ⎜⎪ 0 \n", + " \\bar{\\tau}â‹…p⎟ ⎜⎪ \n", + " ⎟, E_\\mathrm{m}⋅⎜⎨ \n", + " ⎟ ⎜⎪ P \\bar{\\tau}â‹…\n", + "herwise ⎟ ⎜⎪- ───────────────────────── - ─────────────────\n", + " ⎠âŽâŽ© A_\\mathrm{m}â‹…E_\\mathrm{m} A_\\mathrm{m}â‹…E_\\m\n", + "\n", + " -P ⎞⎞\n", + " for x ≤ ────────────⎟⎟\n", + " \\bar{\\tau}â‹…p⎟⎟\n", + " ⎟⎟\n", + "pâ‹…x ⎟⎟\n", + "──────── otherwise ⎟⎟\n", + "athrm{m} ⎠⎠" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sig_f_x = E_f * eps_f_x\n", + "sig_m_x = E_m * eps_m_x\n", + "sig_f_x, sig_m_x" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The profile of shear stress along the bond zone is obtained as\n", + "\\begin{align}\n", + " \\tau = \\frac{\\mathrm{d} \\sigma}{\\mathrm{d} x}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{\\bar{\\tau} p} \\\\\\bar{\\tau} & \\text{otherwise} \\end{cases}$" + ], + "text/plain": [ + "⎧ -P \n", + "⎪ 0 for x ≤ ────────────\n", + "⎨ \\bar{\\tau}â‹…p\n", + "⎪ \n", + "⎩\\bar{\\tau} otherwise " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tau_x = sig_f_x.diff(x) * A_f / p\n", + "sp.simplify(tau_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Plot the strains and stresses\n", + "Similarly to the callable function `get_u_fa_x` let us define the functions for the strains and stresses using the `sp.lambdify` generator " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "get_eps_f_x = sp.lambdify((x, P), eps_f_x.subs(data_f))\n", + "get_eps_m_x = sp.lambdify((x, P), eps_m_x.subs(data_f))\n", + "get_sig_f_x = sp.lambdify((x, P), sig_f_x.subs(data_f))\n", + "get_sig_m_x = sp.lambdify((x, P), sig_m_x.subs(data_f))\n", + "get_tau_x = sp.lambdify((x, P), tau_x.subs(data_f))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "To make the code for plotting shorter let us define a general procedure plotting and filling the curves and attaching the labels to a specified subplot in one call " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"999.7333333333333\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax_eps, ax_sig, ax_tau) = plt.subplots(1,3, figsize=(10,3), tight_layout=True)\n", + "poui.plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range,1 ), \n", + " color='green',xlabel='x [mm]', ylabel=r'$\\varepsilon$ [-]')\n", + "poui.plot_filled_var(ax_eps, x_range, get_eps_m_x(x_range,1 ), \n", + " color='green',alpha=0.8)\n", + "poui.plot_filled_var(ax_sig, x_range, get_sig_f_x(x_range,1),\n", + " color='blue', xlabel='x [mm]', ylabel=r'$\\sigma$ [MPa]')\n", + "poui.plot_filled_var(ax_sig, x_range, get_sig_m_x(x_range,1),\n", + " color='blue', alpha=0.8)\n", + "poui.plot_filled_var(ax_tau, x_range, get_tau_x(x_range,1),\n", + " color='red', xlabel='x [mm]', ylabel=r'$\\tau$ [MPa]');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Pull-out curve" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Quick summary - direct derivation\n", + "\\begin{align}\n", + " \\varepsilon_\\mathrm{f}(0) &= \\frac{P}{E_\\mathrm{f} A_\\mathrm{f}}, \\;\\;\n", + " \\varepsilon_\\mathrm{m}(0) = \\frac{-P}{E_\\mathrm{m} A_\\mathrm{m}} \\\\\n", + " a &= - \\frac{P}{p\\tau}.\n", + "\\end{align}\n", + "Thus, the crack opening can be expressed as the area of the triangle\n", + "\\begin{align}\n", + " w &= \\frac{1}{2}\\left[\\varepsilon_\\mathrm{f}(0) - \\varepsilon_\\mathrm{m}(0)\\right]a \\nonumber \\\\\n", + " &= \\frac{1}{2}\\frac{P^2}{p\\tau} \\left[\\frac{1}{E_\\mathrm{f} A_\\mathrm{f}} + \\frac{1}{E_\\mathrm{m} A_\\mathrm{m}}\\right].\n", + "\\end{align}\n", + "By solving this equation for $P$ we obtain the pullout curve in the form\n", + "\\begin{align}\n", + " P(w) = \\sqrt{2wp\\tau \\frac{E_\\mathrm{f}A_\\mathrm{f}E_\\mathrm{m}A_\\mathrm{m}}{E_\\mathrm{f}A_\\mathrm{f}+E_\\mathrm{m}A_\\mathrm{m}}}.\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}$" + ], + "text/plain": [ + " \n", + " ______________ ______________ ______________ ______________ _____\n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar\n", + " \n", + "\n", + " _______________________________________________________\n", + "_______ ╱ w \n", + "{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── \n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eps_f_0 = P / E_f / A_f\n", + "eps_m_0 = -P / E_m / A_m\n", + "a_subs = sp.solve({P - p * tau * a}, a)\n", + "w_el = sp.Rational(1,2) * ( eps_f_0 - eps_m_0) * a\n", + "Pw_pull_elastic = sp.solve(w_el.subs(a_subs) - w, P)[1]\n", + "Pw_pull_elastic " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pull-out curve derived from the displacement field solution " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ "**`sympy` explanation:** In parallel let us use again the `subs` and `solve` provided in `sympy` to define the `P_push` and `P_pull` variables in the running `jupyter` kernel. As `solve` searches for zero point of the supplied equation we must transform the above equation into" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - w + \\frac{P^{2}}{2 A_\\mathrm{m} E_\\mathrm{m} \\bar{\\tau} p} + \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} p}$" + ], + "text/plain": [ + " 2 2 \n", + " P P \n", + "-w + ──────────────────────────────────────── + ──────────────────────────────\n", + " 2â‹…A_\\mathrm{m}â‹…E_\\mathrm{m}â‹…\\bar{\\tau}â‹…p 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…\\b\n", + "\n", + " \n", + " \n", + "──────────\n", + "ar{\\tau}â‹…p" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "u_f_x.subs(x,0) - w" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "and then send it to `sp.solve`" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( - \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}, \\ \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}\\right)$" + ], + "text/plain": [ + "⎛ \n", + "⎜ ______________ ______________ ______________ ______________ ___\n", + "⎜-√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\b\n", + "⎠\n", + "\n", + " _______________________________________________________ \n", + "_________ ╱ w \n", + "ar{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── , √2⋅╲\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "\n", + " \n", + " ______________ ______________ ______________ ______________ _________\n", + "╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar{\\ta\n", + " \n", + "\n", + " _______________________________________________________⎞\n", + "___ ╱ w ⎟\n", + "u} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── ⎟\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} ⎠" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pw_push_elastic, Pw_pull_elastic = sp.solve(u_f_x.subs({x:0})-w, P)\n", + "Pw_push_elastic, Pw_pull_elastic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Note that the obtained $P(w)$ covers both the pull-out and push-in case. If we supply the parameters defined above with unit stiffness, area and perimeter we obtain" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG8AAAAaCAYAAAC5KgISAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEJElEQVRoBe2a/1HbMBTHSa4DUDpBwwbQTkDYANigsAE9/iL/9WADYIIWNgAmaMsGZIOmbJB+P0JPlR2fS2PLMnd5d/KTnyy/30+Sk7X5fL4Wt9PT0y21cUxb9Ys26toe8sdxFc8BRIPJZLKl/onwvtFyYskxEv/HJjLoHYMm85vObUMHybCrdlT2y5uScFe63ynRct6eifmuhL7LKURD3q3oIBtgh0O1S5MnZJ6IFyI+Cp/bYE4sOci6a+HtnHI04d22DnofVWhb+Am5hlw8k0N1g1ehZ4bP4v8lswxN2betAwlGJjtwzlPvSO3SPPo8lO8qOdbFfSx8k0+KZpwT6YA9SDIH5jwIt57WB3QiIYja1wyt66CAmMogU+E9DDNUZyRMpPdiU+Ajdk/4tWddKh3wE5XSrXlj4ScZyy2CEDMDERvqemZZlmWfUgc2LR8QjKMCuznSMTtEWbcZC+PplHbohR2xxighnE3drtTfc+R5r37nASmeVDGyLpUOD3r/OnxY8yibM7U+AA6qyjqcwxGGdZmojoESEgcfDsOALjrjBzvqp9bBfDXCeRtqySNUxmf3SImuA74iFI4ruie4vvtJfGmIHQWZd4bNlp5nTaCVnxOpGSA/7R9vSa2D+WqDskmUmjcX5JKwjN8vDNQTPmke6e1A/WN1yBgMWnno9s9cuAnFy0xjtnk50FA4+4nO5zygvNliR9aq87x8fdAh+ArnmSedFcoXCc14pcHLz1bdaz6ZY9l0pnuit2xsphKxhXUComhOPmEinkAyRzIMjc1W2VG1OjHxf0Dv75MOVEoHQ13xZCA8k9u7Ylg1jGkOXDi/aZx1oirrYkH4WP7A+yIiZbQQCBrH0KGMRs8u3YWnWl90IICBKc5DKCNATAKR8mQeBo4Bh5pzY3rcZ07sOMaqaOz0Cg6NX9Kk3xMdLNFmOI/NQFc7M9tJhuyTQci6G2+YOtuSTcHpep6SiSJbNkk0+mGthS4a2+q52k97riHuXIeSvNjAncsH/PCqGwzzVgqShUlBPK7FgLOZ46f7wpfyOuZ61korcwCy9UqNAHynxhlwIYM9Dw3//SLPzbKg93Wug8nqbTAS3nU/CanzW4P7wknKjTEGiwfZQRZwbsPo/E7lPveonwzEg4C5E24coLl0wDjije2+Cp9TNoFvaiz+yUFMKWs0yiVb71BC1U8JH8W7seMQMJcO4svehOB31cWcRznCmF0BZzUE+dGWQesE90r/qntmibFOdfDycc4N+wPnPB9JlBRKS3IQH85qlGhb/FPzPBDPVv8hkEEHbESVCh8p4r9BkAn3EmrpAzlvX0EaC8gvVMZN4bDMBOfBUgNkXicbCPit4GUWkF84HlwIF/Yltua5t2iQcnYrzPFhBf2xANm28HfMQub1R9aVJC+xwB9QGj9Qo8RIMwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\left( - \\sqrt{w}, \\ \\sqrt{w}\\right)$" + ], + "text/plain": [ + "(-√w, √w)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pw_push_elastic.subs(data_f), Pw_pull_elastic.subs({A_f:1, E_f:1, L_b:1, p:1, tau:1, A_m:1, E_m:1})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Plot the pull-out curve\n", + "The symbolic expression must be transformed into a quantifiable form using `sp.lambdify`" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}$" + ], + "text/plain": [ + " \n", + " ______________ ______________ ______________ ______________ _____\n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅╲╱ \\bar\n", + " \n", + "\n", + " _______________________________________________________\n", + "_______ ╱ w \n", + "{\\tau} ⋅√pâ‹… ╱ ───────────────────────────────────────────────────── \n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "py_vars = ('w', 'tau', 'p', 'L_b', 'A_f', 'A_m', 'E_f', 'E_m')\n", + "map_py2sp = {py_var : globals()[py_var] for py_var in py_vars}\n", + "sp_vars = tuple(map_py2sp[py_var] for py_var in py_vars)\n", + "sp_vars\n", + "Pw_pull_elastic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "For plotting, let us also evaluate the for the displacement at the unloaded end\n", + "\\begin{align}\n", + "w = u_\\mathrm{f}(x = -L_\\mathrm{b})\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 36, "metadata": { "slideshow": { "slide_type": "fragment" } - }, - "outputs": [], + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\begin{cases} \\frac{A_\\mathrm{f} E_\\mathrm{f} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} & \\text{for}\\: L_{b} \\geq \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}} \\\\\\frac{A_\\mathrm{f} E_\\mathrm{f} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} + \\frac{A_\\mathrm{m} E_\\mathrm{m} w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}} + \\frac{L_{b}^{2} \\bar{\\tau} p}{2 A_\\mathrm{f} E_\\mathrm{f}} - \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{m}} L_{b} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}}} & \\text{otherwise} \\end{cases}$" + ], + "text/plain": [ + "⎧ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎨ \n", + "⎪ \n", + "⎪ \n", + "⎪ \n", + "⎪ A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…w A_\\mathr\n", + "⎪───────────────────────────────────────────────────── + ─────────────────────\n", + "⎪A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} A_\\mathrm{f}â‹…E_\\mathr\n", + "⎩ \n", + "\n", + " \n", + " \n", + " \n", + " A_\\mathrm{f}â‹…E_\\mathrm{f}â‹…w \n", + " ────────────────────────────────────────────────────\n", + " A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m\n", + " \n", + " \n", + " \n", + " ________\n", + " 2 √2⋅╲╱ A_\\math\n", + "m{m}â‹…E_\\mathrm{m}â‹…w L_b â‹…\\bar{\\tau}â‹…p \n", + "──────────────────────────────── + ─────────────────────────── - ─────────────\n", + "m{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} 2â‹…A_\\mathrm{f}â‹…E_\\mathrm{f} \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "─ \n", + "} \n", + " \n", + " \n", + " ____________________________\n", + "______ ______________ ____________ ╱ w\n", + "rm{m} ⋅╲╱ E_\\mathrm{m} â‹…L_b⋅╲╱ \\bar{\\tau} ⋅√pâ‹… ╱ ───────────────────────────\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} +\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ______________ ______________ \n", + " ╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} \n", + "\n", + " \n", + " ______________ ______________ \n", + " √2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱\n", + " \n", + " for L_b ≥ ───────────────────────────────────────\n", + " \n", + " \n", + " \n", + "___________________________ \n", + " \n", + "────────────────────────── \n", + " A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "─────────────────────────── \n", + " \n", + " \n", + "\n", + " __________________________________________\n", + "______________ ______________ ╱ w \n", + " E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} â‹… ╱ ─────────────────────────────────────────\n", + " ╲╱ A_\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ____________ \n", + " ╲╱ \\bar{\\tau} ⋅√p \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " otherwise \n", + " \n", + " \n", + "\n", + "_____________\n", + " \n", + "──────────── \n", + "E_\\mathrm{m} \n", + "─────────────\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "u_f_x.subs(x,0) - w" + "w_L_b_elastic = u_fa_x.subs(x, -L_b).subs(P, Pw_pull_elastic)\n", + "w_L_b_elastic" ] }, { @@ -2170,45 +4194,77 @@ } }, "source": [ - "and then send it to `sp.solve`" + "and also the expression for the debonded length as a function of the control displacement $w$" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [], - "source": [ - "Pw_push_elastic, Pw_pull_elastic = sp.solve(u_f_x.subs({x:0})-w, P)\n", - "Pw_push_elastic, Pw_pull_elastic" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}}$" + ], + "text/plain": [ + " ___\n", + " ______________ ______________ ______________ ______________ ╱ \n", + "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} â‹… ╱ ──\n", + " ╲╱ A_\n", + "──────────────────────────────────────────────────────────────────────────────\n", + " ____________ \n", + " ╲╱ \\bar{\\tau} ⋅√p \n", + "\n", + "____________________________________________________\n", + " w \n", + "─────────────────────────────────────────────────── \n", + "\\mathrm{f}â‹…E_\\mathrm{f} + A_\\mathrm{m}â‹…E_\\mathrm{m} \n", + "────────────────────────────────────────────────────\n", + " \n", + " " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" } - }, + ], "source": [ - "Note that the obtained $P(w)$ covers both the pull-out and push-in case. If we supply the parameters defined above with unit stiffness, area and perimeter we obtain" + "aw_pull_elastic = a_subs[a].subs(P, Pw_pull_elastic)\n", + "aw_pull_elastic" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "slide" } }, "outputs": [], "source": [ - "Pw_push_elastic.subs(data_f), Pw_pull_elastic.subs({A_f:1, E_f:1, L_b:1, p:1, tau:1, A_m:1, E_m:1})" + "import traits.api as tr\n", + "\n", + "class PO_LF_LM_EL(tr.HasTraits):\n", + "\n", + " get_Pw_pull = sp.lambdify(sp_vars, Pw_pull_elastic)\n", + " get_aw_pull = sp.lambdify(sp_vars, aw_pull_elastic)\n", + " get_w_L_b = sp.lambdify(sp_vars, w_L_b_elastic)\n", + " get_u_fa_x = sp.lambdify((x,) + sp_vars, u_fa_x.subs(P, Pw_pull_elastic))\n", + " get_u_ma_x = sp.lambdify((x,) + sp_vars, u_ma_x.subs(P, Pw_pull_elastic))\n", + " get_eps_f_x = sp.lambdify((x,) + sp_vars, eps_f_x.subs(P, Pw_pull_elastic))\n", + " get_eps_m_x = sp.lambdify((x,) + sp_vars, eps_m_x.subs(P, Pw_pull_elastic))\n", + " get_sig_f_x = sp.lambdify((x,) + sp_vars, sig_f_x.subs(P, Pw_pull_elastic))\n", + " get_sig_m_x = sp.lambdify((x,) + sp_vars, sig_m_x.subs(P, Pw_pull_elastic))\n", + " get_tau_x = sp.lambdify((x,) + sp_vars, tau_x.subs(P, Pw_pull_elastic))\n", + " " ] }, { @@ -2219,49 +4275,841 @@ } }, "source": [ - "### Plot the pull-out curve\n", - "The symbolic expression must be transformed into a quantifiable form using `sp.lambdify`" + "### Interactive exploration\n", + "Now that we have finished the construction of the model we can track the process and explore the correspondence between the internal state and externally observed response" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ - "py_vars = ('w', 'tau', 'p', 'L_b', 'A_f', 'A_m', 'E_f', 'E_m')\n", - "map_py2sp = {py_var : globals()[py_var] for py_var in py_vars}\n", - "sp_vars = tuple(map_py2sp[py_var] for py_var in py_vars)\n", - "sp_vars\n", - "Pw_pull_elastic" + "po = poui.ModelInteract(\n", + " models=[PO_LF_LM_EL],\n", + " py_vars=list(py_vars),\n", + " map_py2sp=map_py2sp,\n", + " E_f=1, A_f=1, p=1, tau=1,L_b=10, E_m=1, A_m=1\n", + ")" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 40, "metadata": { + "hide_input": false, + "scrolled": false, "slideshow": { "slide_type": "slide" } }, - "source": [ - "For plotting, let us also evaluate the for the displacement at the unloaded end\n", - "\\begin{align}\n", - "w = u_\\mathrm{f}(x = -L_\\mathrm{b})\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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bD0585VLK2/yB6VPrpOKjzd4TCorytO414rUrJn/6iSXy6c//t6r9K/DIECwyBtRiTHbFslRafz48TrrrLNC/nqeBQkAQHQgKjlETVcqTZw48bRXKu3evVtNmzbViy++GPDxiLlS6ZsR/qA0/xwpb0+DB6Vv006qe7eygKuTLvhJmebMOsnVSaz+RlRizLY5OSq1b99e/fv31/Dhw7Vw4UIdPnw44PODBw9WixYtQv7+PAsSAIDoQFRyCLPPVOrfv7/atWunHTt2KCMjo3Lt27fXT37yE2VkZOjIkSMhvTbbT84OL694ftJMo+J5SoeXN2hMKinI08jhxWrc2H91UmysT3++r1i7vg2D6MAie0Qlxmybk6NSnz591KZNm4B3fGvXrp369Omjbt26ye12q2/fviF/f54FCQBAdCAqOcSUKVNq/C9+cXFxNf4Xv8suu6za29Z+2I033hjSa7P15KzggPRea/9VStteadCglPb5SV12aeDVSRf/vEwfzj9pf2xg0TGiEmO2zclR6QdZWVmaP3++nnvuOd18880677zzlJCQoL59+yozMzPk78uzIAEAiA5EJYfIzs5Ws2bNqn02wd133135sUOHDik9PV0FBQWVH1u5cqXmz58ftDZt2qh9+/aaP3++1q9fH9Jrsy0qlZdJn1zrD0prbpeKcxskJpUX5+nVl4sCrk5q0sSnvz1SpL07wiA0sOgZUYkx2xYJUam+8CxIAACiA1HJQcaNG1f5LirJyckaOXKkEhMT1bZtWx04cKDyzw0aNEiGYSg1NfW039PRl5Fve9kflD64sOKqpQYISpm783VNr8B3dutyeak+WZJvf2Bg0TeiEmO2jahUPZ4FCQBAdCAqOcyMGTPUpUsXeTweJSQk6M4779TevXsD/kxURKWczVJKrP85SkdS6z0m+bx5mjGtUC1b+q9OahTr0yMPF2vfrjCICyw6R1RizLYRlarHsyABAIgORCWY1uAnZyX50oed/Fcppb1Q70Hp2JE83XlHScDVST/pWKYF83h2ErN5RCXGbBtRqXo8CxIAgOhAVIJpDX5ytuFuf1Ba3ksqPl6vQWn5xwVq3748ICj94X+82rE1DIICY0QlxmwbUal6PAsSAIDoQFSCaQ16cpY51x+U5iZIx7+tt5hUlJenv/7FGxCTzmxTrv99q0AH94VBTGAsM4+oxJiN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1A8DPzCcAQCcotmEZjIZRpdPudzWodK1116rhx56yPrvV155pW6++WZJUnFxsW666Sa1atUqZI8fTswtAADH8XhKQqW2bQmVNmzYoMTERL377ruhfihUE8MZAMApzn3uXJkMo59O+6mtQ6WnnnpKzZo109mzZyVJ06ZNk8vl0qWXXqrLLrtMbrdbzz33XMgeP5yYWwAAjhMVVRIqXXMNoZIkLV++XPXr11fnzp3Vv39//e53vytTgwYNqo1l4P8wnAEAnKJBZgOZDKOrX7za1qHSN998o48//lhFRUXWtvHjx6tt27a6+uqr9dxzz6m4uDjgx1m8eLFSUlLk8XiUmJioPn366MCBA9W+/5kzZzRjxgylpqYqPj5ecXFxSk5O1ujRo2u8JuYWAICjFBeXBErGSB06ECpt2bJFjRo1ksvlqrDcbneol4HvYTgDADjBmbNnZDKMTIbRdS9dZ+tQqTZkZWXJGKOOHTtqxowZyszMVGJiopo1a6bDhw9Xef/Tp0+rR48eqlevnvr27asZM2boxRdf1BNPPKF77723xuuqK/0FAKBaTp3yhkqdOhEqXXvttTr//PP1+uuv63eSn9MAACAASURBVKuvvgr1w6EaGM4AAE7wzalvrFCp2/xutg2Vjh49qq1bt2rv3r0hOb4kHTt2TPHx8UpJSSnzbajc3Fy5XC4NHjy4ymM888wzcrvdWr16dVDXxtwCAHCUb7/1hkrXX0+oFBMTo+effz7UDwM/MJwBAJzg6LdHrVCpx+IetguVzp49qyFDhigqKkput1tut1vt27fX559/HtTHkaQ5c+bIGKN58+b57OvSpYsSEhJ06tSpCu//7bffqmHDhurZs6ekkpOHf/3110FZG3MLAMBRvvrKGyp160aodMkll2jixImhfhj4geEMAOAEB746YIVKv/7rr20XKk2ePFkul0vNmzdXr169dNVVV8nlcqlHjx5BfRxJGjJkiIwx2rNnj8++J598UsYY7dixo8L7r169WsYYjR49WsOHD1ejRo1kjNG5556roUOH6kQAwzBzCwDAUY4e9YZKN99MqJSZmal27dqV+So1wovhDADgBB8d/cgKlfr/vb/tQqV27drpiiuuKPONn7vvvltRUVH68ssvg/pYPXr0kDFGJ0+e9Nk3bdo0GWO0YsWKCu8/adIkGWPUpEkTNW3aVFOmTNGy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\" width=\"899.3\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5c51964df7934170b3808eb6ab042c7a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(FloatSlider(value=1e-05, description='\\\\(t\\\\)', max=1.0, min=1e-05, step=0.05), …" + ] + }, + "metadata": {}, + "output_type": "display_data" } - }, - "outputs": [], + ], "source": [ - "w_L_b_elastic = u_fa_x.subs(x, -L_b).subs(P, Pw_pull_elastic)\n", - "w_L_b_elastic" + "po.interact_fields()" ] }, { @@ -2272,60 +5120,831 @@ } }, "source": [ - "and also the expression for the debonded length as a function of the control displacement $w$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "aw_pull_elastic = a_subs[a].subs(P, Pw_pull_elastic)\n", - "aw_pull_elastic" + "## Let's learn from the model\n", + "\n", + "Exercise the relation between $P$ and $\\tau(x)$ and between $w$ and $\\varepsilon(x)$.\n", + "\n", + " 1. Is the originally postulated assumption of rigid matrix relevant for the RILEM test?\n", + " 4. What is the role of debonded length $a$ in view of general non-linear simulation?\n", + " 5. When does the pull-out fail?\n", + " 6. What happens with $a$ upon unloading?" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": { "slideshow": { "slide_type": "slide" } }, - "outputs": [], - "source": [ - "import traits.api as tr\n", - "\n", - "class PO_LF_LM_EL(tr.HasTraits):\n", - "\n", - " get_Pw_pull = sp.lambdify(sp_vars, Pw_pull_elastic)\n", - " get_aw_pull = sp.lambdify(sp_vars, aw_pull_elastic)\n", - " get_w_L_b = sp.lambdify(sp_vars, w_L_b_elastic)\n", - " get_u_fa_x = sp.lambdify((x,) + sp_vars, u_fa_x.subs(P, Pw_pull_elastic))\n", - " get_u_ma_x = sp.lambdify((x,) + sp_vars, u_ma_x.subs(P, Pw_pull_elastic))\n", - " get_eps_f_x = sp.lambdify((x,) + sp_vars, eps_f_x.subs(P, Pw_pull_elastic))\n", - " get_eps_m_x = sp.lambdify((x,) + sp_vars, eps_m_x.subs(P, Pw_pull_elastic))\n", - " get_sig_f_x = sp.lambdify((x,) + sp_vars, sig_f_x.subs(P, Pw_pull_elastic))\n", - " get_sig_m_x = sp.lambdify((x,) + sp_vars, sig_m_x.subs(P, Pw_pull_elastic))\n", - " get_tau_x = sp.lambdify((x,) + sp_vars, tau_x.subs(P, Pw_pull_elastic))\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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9GqEE3u1zdUIxASMBWMpJpSUlCg+Pl5paWmqq6trejw7O1s+n0+jR49uemznzp3Kzc1VZWVl02N79+49bGxYu3at4uLidOGFF7ZqfcQERER7EhPACcQEYFDtUlchvXz2IfdJ+J3nG/ZIdemSKvXsGXo1wvBftt3VCMQEjAVjKSZI0rRp02SM0YABA5SRkaFJkyYpJSVFvXr1UnFxcdPPjRo1SsYYZWVlNT22dOlSnXDCCRo3bpymTZump556SmPGjFHnzp2VlJSk7OzsVq2NmICIaE9iAjiBmAAMql023GKFhBUXSQdKPd+0R5r7Sso06sbQqxF69WrQ//2jba9GICZgLBhrMUGS5s2bp379+ikQCCg5OVkjRoxQfn5+yM8cLiZ8/vnnGj58uE477TQlJCSoS5cuOuWUU3TLLbdo69atrV4XMQER0Z7EBHACMQEYVDsULrJCwuLu0t5PPd+4R5qrXq/Ud74TejXCL4bWtuqkBmICxrKxGBMiFWICIqI9iQngBGICMKhHo7xAWtzNiglbn/V84x5JVu4r0x3jakIiQnJyg2bNaL+rEYgJGAsSE9yDmICIaE9iAjiBmAAManM01EorLrZCwrujpZr9nm/gI8X31lXoe2eEXo1wxaBafbChvN0jAjEBo11ignsQExAR7UlMACcQE4BBbY5P7rdCwsvnSFW7Pd/AR4J1VWX6y5+rFRcXbIoISYlBPTKlStvz3YkIxASMdokJ7kFMQES0JzEBnEBMAAb1SHy1pvH4x/mm8TjIPes938RHgnm55br4ovqQqxEuuahO76xx72oEYgLGgsQE9yAmICLak5gATiAmAIN6OGq+kZaebF2V8NnfPN/Ee22wpkxznqlSYqJ1NcIxxwR13z0HtC3P/YhATMBol5jgHsQERER7EhPACcQEYFC/TTAovTPSCgmrrpSq93m+mffSkp3luvYXoUc+nnVmvV57pcKziEBMwGiXmOAexARERHsSE8AJxARgUL9N/vNWSHjheGn/Fs8381664pVKnXiidZNFny+oMTdXKy/X24hATMBol5jgHsQERER7EhPACcQEYFAPpbxAWpRkxYTCxZ5v5r2yurxMv78z9MjHE3s16Pm57hz5SEzAWJeY4B7EBEREexITwAnEBGBQDxJskN5It0LCht94vqH3ytyNFbrg/NCbLP7s6lrlfOh9PCAmYKxITHAPYgIioj2JCeAEYoLLZGZmKi0tTYFAQCkpKRo5cqQKCwtt/359fb1mzZql/v37KzExUQkJCerbt68mT57c4jUxqP/h86lWSPj39zrkMZDBmjL9I+OA4uOtmywmJAT16F+rVFzgfTggJmAsSUxwD2ICIqI9iQnghA4dE/7yl7+0yoKCAkf/vOnTp8sYowEDBmjWrFmaOHGiUlJSlJqaqh07dhz192trazVkyBB16tRJN9xwg2bNmqWnn35a9957r2699dYW/hUYVEnSNxulBV0aQ0JmZ2n3as839m6796syXXdt6E0Wv9+3XllvenPkIzEBY11ignsQExAR7UlMACd06Jjg8/nk9/vl8/kc6/f7tWrVKtv/rNLSUiUmJiotLU11dXVNj2dnZ8vn82nMmDFHfY0///nP8vv9WrFiRYv+fY9Ehx/U+mpp+fnWVQkfj/d8Y++2a1dX6jvfCb3J4q23VGvrZu9jATEBY1VignsQExAR7UlMACd0+JjwxBNPqLCw0JEfffSRfD6fo5gwZ84cGWM0d+7csOfS09OVlJSkmpqaI/5+RUWFjj32WA0bNkySFAwGVVZW5vxf+jB0+EH9eLwVEl77oXSg1PPNvVvWHyjTQxOq5fdbX2s4/vgGPffPyLrJIjEBY1FignsQExAR7UlMACd0+Jgwf/58x79XWlrqOCaMHTtWxhht2bIl7Lnx48fLGKOcnJwj/v6KFStkjNHkyZN19913q1u3bjLGqHv37ho3bpwqKysd/3scpEMPaskGKdPfGBIWxkulH3i+wXfLndvKNejHdSFfaxj0o1p99L73gYCYgB1BYoJ7EBMQEe1JTAAndOiY8M4776ikpMTx79XX1+udd95xdGXAkCFDZIxRVVVV2HMzZ86UMUbLly8/4u9PmzZNxhj17NlTvXr10pNPPqkXXnhBN9xwg4wxuvzyyxUMBo+6jqKiIq1bty7EjIyMjjmodVXSy2dZVyV89ojnG3y3XPlqpY4/3vpaQ5cuQT0w/oC253sfB4gJ2FEkJrgHMQER0Z7EBHBCh44JbjJo0CAZY9TQ0BD23MGvQCxZsuSIvz9x4kQZYxQXF6fPPvss5LmDQcHOvRQmTJggY8xh7XCD+uH/Z4WElQOl6n2eb/Lb27qqMt13T7V8PutrDX36NOilf1V4HgWICdjRJCa4BzEBEdGexARwAjHBJZq7MmHGjBlHvTJh6tSpMsbo0ksvDXtu9erVMsbonnvuOeo6uDLhP3z1tjTf1xgSFiVKe3M83+i3t0VbyzXg0tCvNfzs6lpt+sT7IEBMwI4oMcE9iAmIiPYkJoATiAku0dp7JixcuFDGGP3yl78Mey43N1fGGP3mN79p0do63KDWVUovnW5dlZD7d883+u3t8pcqlZxsXY0QCAQ16S9VUfm1BmICxorEBPcgJiAi2pOYAE7o8DHh6quvduTgwYNb9M+ZPXt2s6c5JCYmNnuaQ0FBgYwx6t+/f9hzr7/+uowxeuCBB1q0tg43qB/+wQoJbw6K6a83HPxaw6FXI5x+Wr1efTl6v9ZATMBYkZjgHsQERER7EhPACR0+Jvh8Pkf6/f4W/XNKSkoUHx+vtLQ01dXVNT2enZ0tn8+n0aNHNz22c+dO5ebmhp3QMHDgQPl8Pr377rtNjwWDQQ0dOlTGGK1fv75Fa+tQg1ry7iFfb0iS9n7q+Ya/vdxVVK4f/yj0aw3XDKvR5k+9DwDEBERigpsQExAR7VlTUxOyV/ESPuMinw4fE+ywevVq9e/fXz6fT717927x6xw8kWHAgAHKyMjQpEmTlJKSol69eqm4uLjp50aNGiVjjLKyskJ+PycnR0lJSTr22GN1//33a8aMGbryyitljAmJEU7pMINaXy29fLZ1VcLnj3m+4W8v16yqVK9e1mkNxxzT+LWG4gLvN//EBMRGiQnuQUxARLQnMQGcQExohpycHF199dXy+/3q1q2bJk+efNgbKDph3rx56tevnwKBgJKTkzVixAjl5+eH/MyRYoIkbdq0Sddcc426d++uLl266JxzztHjjz9+2FMi7NJhBvWT+w85veG/YvLrDQ3VZXpkSrXi4g45reHkBr28LHa+1kBMwFiRmOAexARERHsSE8AJxITDsG3bNt14442Ki4tTIBDQ73//e3399ddeL6vd6BCDuvdjKTOuMSQs7Cp9/ZHnG/+29ps9ZRo6pDbkaw0/uaJWn37s/YafmIAYLjHBPYgJiIj2JCaAE4gJh/D111/r97//vQKBgOLi4nTjjTdq27ZtXi+r3Yn5QW2ok15Ns65K+HSS5xv/tjbngwqddpr1tYZOnYIa/8cDMXFaAzEBY1VignsQExAR7UlMACcQEyRVVVVp8uTJOu644+Tz+XT11Vdr48aNXi/LNWJ+UD+faoWE134oVX/j+ea/LZ3/bJW6drW+1nDCCQ1alBm7X2sgJmCsGIsxITMzU2lpaQoEAkpJSdHIkSNVWFjYotcaPny4jDE688wzW72u1vydBg8erB/84Ae69NJLERFj3ssvv1zDhw9v9ftuWxBpn3EQToePCU8//bRSU1Pl9/t10UUX6a233vJ6Sa4T04Nani8tjG8MCZmdpT3rPN/8t5W1lWX63R01IV9r6P/DOmVvKPd8g09MQDy6sRYTpk+f3nST4VmzZmnixIlKSUlRamqqduzY4ei1XnnlFfn9fnXt2tXzmFBaWqpdu3YpISEBETHmjY+P1xVXXNHq9922IJI+4+DwdPiYcPC4x/79++uRRx45qo8++qjXS25zYnZQg0Fp9U+tqxI+/IPnAaCt3L29XAP/K/TYx1+PqlH+F95v7okJiPaMpZhQWlqqxMTEIx5/PGbMGNuvVV5erpNPPlnjxo1Tnz59IiIm7N69W+eeey4iYsyblJRETADbEBN8Pkf6/X6vl9zmxOygFsy3QsJLp0lVuz2PAG3hu29XKDXVuj9C165BPT61SjsKvd/YExMQ7RtLMWHOnDkyxmju3Llhz6WnpyspKUk1NTW2XuvOO+/UiSeeqP379xMTEBFdlpgATujwMeGtt95ybKwRk4Na/bX0Qk8rJmx/yfMI0BY+M+uAOnc+5NjHPg169eWOc38EYgLGkrEUE8aOHStjjLZs2RL23Pjx42WMUU5OzlFf5/3335ff79fChQsliZiAiOiyxARwQoePCRCjg7rhFiskrPuV5xGgtdZWlul/fht6f4Qfp9dqY4wf+0hMwFg2lmLCkCFDZIxRVVVV2HMzZ86UMUbLly9v9jXq6up0/vnn68orr2x6rCUxoaioSOvWrQsxIyODmICIaENiAjiBmACxN6h71lkh4YUeUnmB5zGgNe7ZUa70gaH3R/jf26u1Lc/7jXwkSEzAaDWWYsKgQYNkjFFDQ0PYcwe/ArFkyZJmX+Phhx9WIBBQXl5e02MtiQkTJkyQMeawEhMQEZuXmABO6NAxYc2aNdqzZ4/j36urq9OaNWu0b9++dliV+8TUoDbUScvPs2LCFzM8jwGt8ZPsCvXpY90fIT4+qKeerOyw90cgJmAsGUsxobkrE2bMmHHUKxPy8vLUtWtXPfTQQyGPc2UCIqK7EhPACR06Jvj9fs2fP9/x75WWlsrv92vVqlXtsCr3ialB/fwxKyS8fqlUvc/zINBSlyyoUny8dX+E75zE/RGICRhLxlJMaO09E4YNG6bU1FR98cUXKigoaLJ379469dRTVVBQoN27d7d4fdwzARHRnsQEcEKHjgk+n09PPvmktm3b5siPP/5YPp+PmBBpVG6XFiU2hoTMztKedz0PAi2xobpMf7qvOuRrDRdfVKePs73fuEeixASMVmMpJsyePbvZ0xwSExObPc3h/PPPP+JXEw561VVXtXh9xARERHsSE8AJHT4m+P3+FktMiDDWXmddlZB9p+dRoCVWfFOma4bVhoSEG66vUf4X3m/aI1ViAkarsRQTSkpKFB8fr7S0NNXV1TU9np2dLZ/Pp9GjRzc9tnPnTuXm5qqysrLpsdWrV2vp0qVh9uzZU71799bSpUu1fv36Fq+PmICIaE9iAjihQ8eEBx98sFUWFBR4/a/QJsTEoO56wwoJS78jVe7wPAw4tbigXP0uqG+KCJ07BzX5oSruj0BMwBg1lmKCJE2bNk3GGA0YMEAZGRmaNGmSUlJS1KtXLxUXFzf93KhRo2SMUVZW1lFfM1KOhty1a5cSEhIQEWPe+Ph4YgLYpkPHBGgk6ge1vkZ6+SwrJmx9zvMw4NQPNlQoNdW60WJycoMWL+D+CMQEjGVjLSZI0rx589SvXz8FAgElJydrxIgRys/PD/mZaIsJgwcP1g9+8ANdeumliIgx7+WXX67hw4e3+n23LYi0zzgIh5gA0T+on0+1QsKbg6LuposvLqpS167WjRbPOL1ea1eXe75JjxaJCRitxmJMiFRa83fKy8tTVlaWNm/ejIgY89bU1IR8Xc1L+IyLfIgJEN2DWrVTWpRk3XSx5D3P44BdgzVl+uuk0BstDrysTps+8X6DHk0SEzBaJSa4BzEBEdGexARwAjEBontQ1914yE0X/9fzQGDXmooy3XxT6I0Wb/xVjQq/9H5zHm0SEzBaJSa4BzEBEdGexARwAjEBondQ96yzQsKLJzYeDRkBoeBo7v2qTOkD65oiQlxcUH++/4CKC7zfmEejxASMVokJ7kFMQES0JzEBnEBMgOgc1GCD9NoPrZiwJcPzSGDHwi/LdfZZ1okNSYlB/fMflZ5vyKNZYgJGq8QE9yAmICLak5gATiAmSJo6daouuuginX322br55puVl5fn9ZJcJSoHNf85KyS89sOouOnih+9VqFcv68SG3qkNWrGcExuICdhRJSa4BzEBEdGeWVlZEbMX4jMu8unwMWHatGny+XwhpqSkaPPmzV4vzTWiblDrKqR/pVoxYdcbnoeCo/nqvyuVkGCd2HDO2fV6bx0nNhATsCNLTHAPYgIioj2JCeCEDh8T+vbtq9NOO02fffaZ9u3bpwULFig5OVk/+9nPvF6aa0TdoOb82QoJb/+356HgaP4j44Di4qyQ8F8D6vRZjveb8FiRmIDRKjHBPYgJiIj2JCaAEzp8TEhISNBjjz0W8tiMGTPUqVMnlZeXe7Qqd4mqQa0okhZ2bQwJC7tK33zmeSw4ksGaMv3pvtCjH6+7tkb5X3i/AY8liQkYrRIT3IOYgIhoT2ICOKHDxwSfz6f58+eHPJabmyufz6cPPvjAo1W5S1QN6rpfWVclfHSP58HgSNZWlmnUjaFHP945rlrb873ffMeaxASMVokJ7kFMQES0JzEBnEBMOExMKC0tlc/nU1ZWljeLcpmoGdTSbCsk/CtVqtrleTQ4nJX7yjT4auvox86dgnp4cpV2FHq/8Y5FiQkYrRIT3IOYgIhoT2ICOIGY4PNp+PDhWrp0qYqLiyVZMWHVqlUer84domJQg0HpjR9ZMeGLpzyPBofz691luvQS6+jHhISg5s7m6EdiAmK4xAT3ICYgItqTmABO6PAxwe/3y+fzye/3y+/3KzU1VVdddZX8fr+mTZumPXv2eL3EdicqBrV4uRUSXvm+VP2N5+Hg2xYXlOvcc6yQkJzcoGUvcvQjMQHx8BIT3IOYgIhoT2ICOKHDx4TKykq98847euKJJ3TTTTfp3HPPVadOnUICQ69evXTllVfqrrvu0vPPP+/1ktuciB/UhnrplXOtmLDtRc/Dwbf9YlO5+vRpaAoJvXs3aNVKjn4kJiAeWWKCexATEBHtSUwAJ3T4mHA4qqqqtH79ek2fPl0333yzzjvvPHXu3LkpMMQaET+oeXOskPDmj6Wa/Z7Hg0PNfrdCPXpYIeF7Z9RrwzuEBGICYvMSE9yDmICIaE9iAjiBmGCTAwcOaMOGDZo5c6bXS2lzInpQ6yobb7Y430jzfdJXazyPB4f65opKJSYGm0JCWr865Xzo/Qa7I0lMwGiVmOAexARERHsSE8AJxASI7EHdNMW6KuHt//Y8Hhzqsheq1KWLFRLSB9bpi03eb647msQEjFaJCe5BTEBEtCcxAZxATIDIHdSavdLi4xpDwoJjpL0bPQ8IB13wfJXi4qyQMOzntcr/wvuNdUeUmIDRKjHBPYgJiIj2JCaAE4gJELmD+sl91lUJ7/3W84Bw0DnPVMnns0LCDdfXqGir95vqjioxAaNVYoJ7EBMQEe1JTAAnEBMgMge1are0ML4xJCxKkPZ/6XlEUG2Zpk870BQRjJFuvaVa2/O931B3ZIkJGK0SE9yDmICIaE9iAjiBmACROagf3GldlfDhHzyPCKot0yNTqkNCwu/+t1rFBd5vUcmDhgAAIABJREFUpju6xASMVokJ7kFMQES0JzEBnEBMgMgb1Ipt0oIujSFhcXepotDTiBCsKdOEB0JDwr13H9COQu830khMwOiVmOAexARERHsSE8AJxASIvEHdMMa6KiHnT56HhLv+UNMUEXy+oB78EyEhkiQmYLRKTHAPYgIioj2JCeAEYgJE1qCWfSllxjWGhBeOlyp3eBoS7vxfKyTExQX1yJQqQkKESUzAaJWY4B7EBEREexITwAnEBIisQV0/yroqYdNfPQ0Jv7vDCgmdOwX1xN8JCZEoMQGjVWKCexATEBHtSUwAJxATIHIGtSzPuirhxROlqq88Cwl/+F1oSJj5RKXnm2YkJmBsSUxwD2ICIqI9iQngBGICRM6gvvvrQ65KmBIR90jo1Cmo6dOqPN8wIzEBY89YjAmZmZlKS0tTIBBQSkqKRo4cqcLCQlu/e+edd6p///7q2bOnunTpopNOOkk///nPtXbt2lavi5iAiGhPYgI4gZgAkTGo5VsPuSqhl1S125OQ8Mf/rzokJDz5OCEh0iUmYLQaazFh+vTpMsZowIABmjVrliZOnKiUlBSlpqZqx44dR/39/v3767bbbtNjjz2mOXPmaNKkSTr77LPl8/n03HPPtWptxARERHsSE8AJxASIjEE99ASHTyd5EhLuuas65GaLT/ydkBANEhMwWo2lmFBaWqrExESlpaWprq6u6fHs7Gz5fD6NGTOmRa9bXl6u448/XmeccUar1kdMQES0JzEBnEBMAO8HtbxAyuxkneBQtcv1kDD+j6EhYdpUQkK0SEzAaDWWYsKcOXNkjNHcuXPDnktPT1dSUpJqampa9NrnnHOOevTo0ar1ERMQEe1JTAAnEBPA+0F979ZDrkp4yPWrEh78U2hIeJyQEFUSEzBajaWYMHbsWBljtGXLlrDnxo8fL2OMcnJyjvo6wWBQJSUl+uqrr5STk6M777xTxhiNGjWqVesjJiAi2pOYAE4gJoC3g1q5Q1rQ5T9XJfR0/aqEv//tQFNI8PuDeuxRjn+MNokJGK3GUkwYMmSIjDGqqqoKe27mzJkyxmj58uVHfZ2SkhIZY5oMBAK65ZZbVF5ebnstRUVFWrduXYgZGRnEBEREGxITwAnEBPB2UD+627oqIedProaEOc9UNYUEY6SHJxESolFiAkarsRQTBg0aJGOMGhoawp47+BWIJUuWHPV1amtr9cYbb+i1117TrFmzNHDgQN1www3as2eP7bVMmDAhJEgcKjEBEbF5iQngBGICeDeoNXulRYmNIWHxsVLFNtdCwuLMKvn9waaQcP+9BwgJUSoxAaPVWIoJzV2ZMGPGDNtXJnyburo6XXLJJerbt69qa2tt/Q5XJiAitlxiAjiBmOAyrTmD+9sMHz5cxhideeaZrVqTZ4P66STrqoTsO1wLCa+9XKnOna2QcOe4akJCFEtMwGg1lmJCW90z4XAcPHLyzTffbPH6uGcCIqI9iQngBGKCi7T2DO5DeeWVV+T3+9W1a9fojAl1lY33SJhvpAUBad9mV0LC2tWV6trVCgm/HlWj7fneb4iRmIAdz1iKCbNnz272NIfExMQWn+bw6KOPyhijxYsXt3h9xARERHsSE8AJxASXaMszuMvLy3XyySdr3Lhx6tOnT3TGhC9mWFclrL/ZlZDw4XsVOvZYKyRcdy0hIRYkJmC0GksxoaSkRPHx8Uf8jBs9enTTYzt37lRubq4qKyubHistLQ35vYOUl5fr7LPPlt/vb/FVfBIxARHRrsQEcAIxwSXa8gzuO++8UyeeeKL2798fnTGhoVZa1qcxJGTGSV9/1O4hIXdjhXr0aGgKCVdfVavCL73fCCMxATuusRQTJGnatGlNV99lZGRo0qRJSklJUa9evVRcXNz0c6NGjZIxRllZWU2P/fOf/1RqaqrGjRunxx9/XE8//bTuvfdepaamyhijhx56qFVrIyYgItqTmABOICa4RFt9n/T999+X3+/XwoULJSk6Y0JBpnVVwppr2j0k7Cgs18knWyFh4GV12rrZ+00wEhOwYxtrMUGS5s2bp379+ikQCCg5OVkjRoxQfn5+yM8cLiZs2rRJo0aN0plnnqmkpCR16tRJvXr10tChQ/Xaa6+1el3EBEREexITwAnEBJdoizO46+rqdP755+vKK69sesxpTGjru1w7JhiUXvuBFRN2r2nXkFD2dZkuOL++KSRcmFanLzZ5vwFGYgJiLMaESIWYgIhoT2ICOIGY4BJtcQb3ww8/rEAgEDLgTmNCW5+/7Zg971ghYeVlUs3+dgsJtZVluvIndU0h4fTT6pXzofebXyQmIO7YQUxwE2ICIqI9iQngBGKCS7T2DO68vDx17do17HujUXdlwtpfWjEhf167hYRgTZluvqm2KSQc37NBb2eVe77xRWIC4kGJCe5BTEBEtCcxAZxATHCJ1t4zYdiwYUpNTdUXX3yhgoKCJnv37q1TTz1VBQUF2r17d4vW5tqgludLmf7GkLDsVKn6m3aLCX++v7opJCQkBPXvpRWeb3qRmIB4qMQE9yAmICLak5gATiAmuERrz+A+//zzj/j1hINeddVVLVqba4P6we+tqxI2/bXdQsLspw80hYROnYL65z8qPd/wIjEB8dsSE9yDmICIaE9iAjiBmOASrT2De/Xq1Vq6dGmYPXv2VO/evbV06VKtX7++RWtzZVBr90uLkhpDwuJuUuX2dgkJr/67UnFxwaaY8PCkKs83u0hMQDycxAT3ICYgItqTmABOICa4SGvO4D4SUXM0ZO7j1lUJ79/eLiHhgw0VSkiwQsKd46q1o9D7zS4SExAPJzHBPYgJiIj2JCaAE4gJLtPSM7iPRFTEhGCD9NKpjSEhM07au7HNQ0JxQblOPLGhKSQM/2WNtud7v9FFYgLikSQmuAcxARHRnsQEcAIxAdp/UHe8al2V8NbQNg8JVfvL9MMf1DeFhIGX1Sn/C+83uUhMQGxOYoJ7EBMQEe1JTAAnEBOg/Qf1rZ9bMWH7S20aEoI1ZfrV/7OOgDz9tHpt+sT7DS4SExCPJjHBPYgJiIj2JCaAE4gJ0L6DWrHNOg7y39+Tqve1aUx4ZIp1BGS3bkFlvVnu+eYWiQmIdiQmuAcxARHRnsQEcAIxAdp3UD+5/5DjIKe0aUh4ZVmlfL7GGy7GxQX17P9xBGRHlJiA0SoxwT2ICYiI9iQmgBOICdB+g1pfI714QmNIWNhVqihss5DweU6FkpKskxseGH/A800tEhMQnUhMcA9iAiKiPYkJ4ARiArTfoBYusq5KeOf6NgsJX+8u02mncXIDEhMwuiUmuAcxARHRnsQEcAIxAdpvUN/4kRUTdq1uk5BQV1WmywfVNYWEC9PqlJfr/YYWiQmITiUmuAcxARHRnsQEcAIxAdpnUPd9boWEV/tJNfvbJCbcMa6mKSSkntig7A3ccLGjS0zAaJWY4B7EBEREexITwAnEBGifQf3g91ZM2Pxkm4SEhfOqmkJC165BvbyswvONLHovMQGjVWKCexATEBHtSUwAJxAToO0HtaFWeqFnY0hYlCRV7mx1SPhiU7kSE60bLk6bWuX5Jhb///bOPz6q8sDX74Rfk59ostQU6GbVIruKSEZFaoRYELl6qdYtFdarwgUVV3G1W2xl221ag2gLlECARAiCiKCioq0RIiJiRS3RKgrFRSAhBvQaqgEMmITke/9IM+M4+XFOZnImZ/I8n8/zaZ3JzOedl7yTnCfvnNM1JCagWyUmOAcxARHRmsQEsAMxASK/UD9+LrArYftNYYeEE0ePaej5p/wh4cZ/q9Wh8ugfxGLXkJiAbpWY4BzEBEREaxITwA7EBIj8Qt12bSAmHNoYdky4dVrgPAlDzjvFCRcxSGICulVignMQExARrUlMADsQEyCyC/Xk/5PW9mwKCc+fLX1VHVZIWLMqcJ6ElJRGbdvCCRcxWGICulVignMQExARrUlMADsQEyCyC3XP7wO7Et77ZVghYc/7XyoxMXCehKX5NVE/cMWuJzEB3SoxwTmICYiI1iQmgB2ICRC5hdrYKBWf//eYECd9sbvDIaGm+pjOOzdwnoQpN3OeBGxZYgK6VWKCcxATEBGtSUwAOxATIHIL9W/vBHYlvDw6rF0JU26u84eEYRec0v4Po3/Qil1TYgK6VWKCcxATEBGtSUwAOxATIHILtXRGICZ8VNThkLCyKHCehNNOa9Dr2zhPArYuMQHdKjHBOYgJiIjWJCaAHYgJEJmFeqpWWp/aFBKeOk068WmHQsKHHxxXfHzgPAnLCjhPArYtMQHdKjHBOYgJiIjWJCaAHYgJEJmFWvnHwK6ENyZ3KCTUnzimS4YHzpNwy9SvOE8CtisxAd1qLMaEtWvXyufzyev1Ki0tTZMmTVJ5eXm7j/v888+Vl5ensWPHauDAgfJ6vTrnnHN06623qqKiIuxxERMQEa1JTAA7EBMgMgt1+42BmFD5xw7FhAfu/8ofEs79F86TgNYkJqBbjbWYkJ+fL2OMsrKyVFBQoNzcXKWlpal///46dOhQm4/duHGj4uLiNGbMGM2ZM0fLly/XPffco/j4ePXt21e7d+8Oa2zEBEREaxITwA7EBAh/odafkJ5MagoJz3xb+uoL2yHhvdIv1atX08cbevdu1MYXvoz6QSq6Q2ICutVYiglHjhxRUlKSfD6f6uvr/beXlpbK4/Fo2rRpbT6+rKxMe/fuDbl98+bNMsZowoQJYY2PmICIaE1iAtiBmADhL9SKZwK7Et6abjskfHX8mM4fEvh4w73/eTLqB6joHokJ6FZjKSasWLFCxhitWrUq5L7s7GwlJyertra2Q8+dmpqqwYMHhzU+YgIiojWJCWAHYgKEv1D/dH0gJhwusR0TZv0s8PEGX2a9yj+K/gEqukdiArrVWIoJ06dPlzGmxd0Fs2bNkjFGO3futP281dXV6tWrl0aOHBnW+IgJiIjWJCaAHYgJEN5CrTsuPRHfFBI2fEf6qtpWSHjjtS8VF9f08Yb4+EZtfZnLQKI9iQnoVmMpJowfP17GGJ04cSLkviVLlsgYo+LiYtvPO3PmTBljVFRUZPkxFRUV2r59e5CFhYXEBERECxITwA7EBAhvoZatC+xKKJ1hKyR8+cUxDfpug39XQs4v+XgD2peYgG41lmLC6NGjZYxRQ0NDyH3NH4FYv369red88skn5fF4NHbs2BaftzVycnJkjGlRYgIiYtsSE8AOxAQIb6Fu+2EgJny61VZMmHFHrT8kZF1ar48PRP/AFN0nMQHdaizFhLZ2JixevNj2zoTi4mL17t1bPp9P1dXVtsbCzgRExI5LTAA7EBOg4wu1tlpa17spJDx3lq2POLy8qcYfElKSG7X9NT7egB2TmIBuNZZiQiTPmbBx40b16dNHQ4cO1ZEjRyIyPs6ZgIhoTWIC2IGYAB1fqPsfDexKeOc/LYeE6qpj+s53Ah9vmPvgiagfkKJ7JSagW42lmFBUVNTm1RySkpIsXc1h06ZN8nq9Ov/881VVVRWx8RETEBGtSUwAOxAToOML9dVrAjHhs+2WY8LddwU+3jB2TB0fb8CwJCagW42lmFBVVaWEhAT5fD7V19f7by8tLZXH49HUqVP9tx0+fFh79uxRTU1N0HOUlJR0SkiQiAmIiFYlJoAdiAnQsYVafyJwFYfnzpJqj1oKCe+VBq7ekJLSqNK3+HgDhicxAd1qLMUEScrLy5MxRllZWSosLNTs2bOVlpam9PR0VVZW+r9u8uTJMsZo69at/ttKS0vl9XrVp08fLViwQI899liI4UBMQES0JjEB7EBMgI4t1MoXArsS/ny7pZDQWHtMWZfW+3cl/OoXXL0Bw5eYgG411mKCJK1Zs0aZmZnyer1KTU3VxIkTdeDAgaCvaSkmrFy5stUrMDQbDsQERERrEhPADsQE6NhC/fP0QEz4+DlLMeHRFSf8IeHcfzml8o+ifyCK7peYgG41FmNCV4WYgIhoTWIC2IGYAPYXamOj9OyAppDwVF/pZFW7IeGLz47pW99qOumix9Oop5/8MuoHoRgbEhPQrRITnIOYgIhoTWIC2IGYAPYX6t/eCexK2HadpV0J/zEjcNLFH11Xq0Pl0T8IxdiQmIBulZjgHMQERERrEhPADsQEsL9Q3/91ICbsfdjWSRf79m3UO3/mpIsYOYkJ6FaJCc5BTEBEtCYxAexATAD7C3XjhU0hYW0P6XhZmyGh4avgky7++r856SJGVmICulVignMQExARrUlMADsQE8DeQq05FNiVUHJpu7sSVhUFTrp43rmcdBEjLzEB3SoxwTmICYiI1iQmgB2ICWBvoX60LBAT3v9Nuydd7NcvcNLFZ57ipIsYeYkJ6FaJCc5BTEBEtCYxAexATAB7C/XVHwRiQlVpmzFhxh2Bky5O+FdOuoidIzEB3SoxwTmICYiI1iQmgB2ICWB9odafkJ6IbwoJz39Xqj3aakh4d0fwSRf/siP6B50YmxIT0K0SE5yDmICIaE1iAtiBmADWF+qhTYFdCTvuaHNXwv++OnDSxd/8ipMuYudJTEC3SkxwDmICIqI1iQlgB2ICWF+o7/48EBMOrm81JLz1+pf+kHD22Zx0ETtXYgK6VWKCcxATEBGtSUwAOxATwPpC3XTJ3y8J2bPpqg6txIRxVwZ2JSz8/YmoH2xibEtMQLdKTHAOYgIiojWJCWAHYgJYW6h1x6S1PZpiwsaLWg0Jr79a4w8J5ww6pYP7on+wibEtMQHdKjHBOYgJiIjWJCaAHYgJYG2hVhYHPuLw9j2txoQxowO7EpYsZFcCdr7EBHSrxATnICYgIlqTmAB2ICaAtYX6l5mBmFDxbIshYduWwK6Efx58Sh8fiP6BJsa+xAR0q8QE5yAmICJak5gAdiAmgLWFuvHCppCwrrd04pMWY8Ll2YFdCQWLa6J+kIndQ2ICulVignMQExARrUlMADsQE6D9hVr7hbQ2rikmbBrRYkh45aXAroTzzmVXAjonMQHdKjHBOYgJiIjWJCaAHYgJ0P5C/fj5wEcc3pkZEhIaa4/psqzAroRlhexKQOckJqBbJSY4BzEBEdGaxASwAzHBYdauXSufzyev16u0tDRNmjRJ5eXl7T7u888/V15ensaOHauBAwfK6/XqnHPO0a233qqKioqwxtTuQn37nkBM+PgPITFh88bAroTzh7ArAZ2VmIBulZjgHMQERERrEhPADsQEB8nPz5cxRllZWSooKFBubq7S0tLUv39/HTp0qM3Hbty4UXFxcRozZozmzJmj5cuX65577lF8fLz69u2r3bt3d3hc7S7U4gv+fr6EPtKJT0N2JXxvxCl/TFixjF0J6KzEBHSrxATnICYgIlqTmAB2ICY4xJEjR5SUlCSfz6f6+nr/7aWlpfJ4PJo2bVqbjy8rK9PevXtDbt+8ebOMMZowYUKHx9bmQv3qSGBXQklWyK6EjX8M7EoYdkE9uxLQcYkJ6FaJCc5BTEBEtCYxAexATHCIFStWyBijVatWhdyXnZ2t5ORk1dbWdui5U1NTNXjw4A6Prc2FWvFsICb85echuxIuviiwK+HRR9iVgM5LTEC3SkxwDmICIqI1iQlgB2KCQ0yfPl3GmBZ3F8yaNUvGGO3cudP281ZXV6tXr14aOXJkh8fW5kItvSsQEyqLg2LCC88FdiVcdCG7EjA6EhPQrRITnIOYgIhoTWIC2IGY4BDjx4+XMUYnTpwIuW/JkiUyxqi4uNj2886cOVPGGBUVFVn6+oqKCm3fvj3IwsLC1hfqi5lNIeGJeOnkZ0ExYfT3A1dwWPMouxIwOhIT0K0SE5yDmICIaE1iAtiBmOAQo0ePljFGDQ0NIfc1fwRi/fr1tp7zySeflMfj0dixY1t83pbIycmRMaZFQxbqqa+kdb2aYsLGi4JCwv4Pj/tDwnnnnlJlWfQPKrF7SkxAt0pMcA5iAiKiNYkJYAdigkO0tTNh8eLFtncmFBcXq3fv3vL5fKqurrb8OFs7E/72TuAjDm9ODYoJv7jvK39M+PV/n4z6ASV2X4kJ6FaJCc5BTEBEtCYxAexATHCISJ4zYePGjerTp4+GDh2qI0eOhD22VhfqR8sDMWHPQn9IqD9xTAMGNMgYKd7bqA/ejf4BJXZfiQnoVmMxJqxdu1Y+n09er1dpaWmaNGmSysvLLT32ySef1JQpU3T++eerR48eMsaorKwsIuMiJiAiWpOYAHYgJjhEUVFRm1dzSEpKsnQ1h02bNsnr9er8889XVVVVRMbW6kLd8e+BmPDpay2eePGaH9RF/WASu7fEBHSrsRYT8vPzZYxRVlaWCgoKlJubq7S0NPXv31+HDh1q9/HZ2dnyer265JJLNGjQIGICImIUJCaAHYgJDlFVVaWEhAT5fD7V19f7by8tLZXH49HUqVP9tx0+fFh79uxRTU1N0HOUlJREPCRIbSzUTSOaQsK63tLJKn9M+OE1df6YsG4NJ17E6EpMQLcaSzHhyJEjSkpKavVn3LRp09p9joMHD/of27ybj5iAiOisxASwAzHBQfLy8vx/tSksLNTs2bOVlpam9PR0VVZW+r9u8uTJMsZo69at/ttKS0vl9XrVp08fLViwQI899liIHaXFhdpQ33QFh8eNVDzUHxI+qTiunj0bZYz0TxmnuBwkRl1iArrVWIoJzScSbm33XXJysqXdd80QExARoyMxAexATHCYNWvWKDMzU16vV6mpqZo4caIOHDgQ9DUtxYSVK1e2ehWGZjtKiwv1i12Bjzhsv9EfE347J3DixZk/4cSLGH2JCehWYykmRPK8QF9/PmICIqKzEhPADsQEaHmhHlgdiAm750p1x9RYe0znDGo68WLPno3a8ebxqB9IIhIT0K3GUkxo64pFS5YssX3FonBigq2rFlmAmICI3UliAtiBmAAtL9S37wnEhMMvSXXH9NorgRMvjvk+J17EriExAd1qLMWE0aNHyxijhoaGkPuaPwKxfv16y88XTkzIyclpdQcfMQERsW2JCWAHYgK0vFA3j2oKCWt7SCc+keqOafJNgRMvLivgxIvYNSQmoFuNpZjQ1s6ExYsXszMBEdElEhPADsQECF2ojQ3SUylNMeGP/yzVHVN11THFxzedePFb32pQ+UfRP4hEPHyQmIDuNZZiAudMQESMDYkJYAdiAoQu1GMfBT7i8NqPpbpjKlxy0r8rYfqtX0X9ABKxWWICutVYiglFRUVtXs0hKSmJqzkgIrpAYgLYgZgAoQu1/MlATPhgtlR3TBddeMofE7a+zIkXsetITEC3GksxoaqqSgkJCfL5fKqvr/ffXlpaKo/Ho6lTp/pvO3z4sPbs2aOamppWn4+YgIgYHYkJYAdiAoQu1Hd/HogJlS/ovdIv/SHhkuH1OlQe/QNIxGaJCehWYykmSFJeXp6MMcrKylJhYaFmz56ttLQ0paenq7Ky0v91LV3+WJK2bdum3Nxc5ebm6uKLL5YxRj/96U/9t1VXV3d4bMQERERrEhPADsQECF2oW8YGYsKXFbrrzlp/TJj/uxNRP3hE/LrEBHSrsRYTJGnNmjXKzMyU1+tVamqqJk6cqAMHDgR9TWsxoa2rMIS7S4GYgIhoTWIC2IGYAMELtbFRejqtKSQ8d5ZOHjum009vOvFiSkqj9v41+gePiF+XmIBuNRZjQleFmICIaE1iAtiBmADBC/XLisCuhFev1drVJ/y7Ev7Pv9VG/cAR8ZsSE9CtEhOcg5iAiGhNYgLYgZgAwQv14+cDMWHnf+vqq+r9MaH4+S+jfuCI+E2JCehWiQnOQUxARLQmMQHsQEyA4IW6d2kgJuxfpfT0BhkjDRzQwIkXsUtKTEC3SkxwDmICIqI1iQlgB2ICBC/U93/jjwnH9hT7dyV8P7su6geNiC1JTEC3SkxwDmICIqI1iQlgB2ICBC/U0rv8MeEvL7/tjwm3TP0q6geNiC1JTEC3SkxwDmICIqI1iQlgB2ICBC/U1yf5Y8JjDx/0x4SH5nBJSOyaEhPQrRITnIOYgIhoTWIC2IGYAMEL9eUxf48JcZp5T40/Jjy7npMvYteUmIBulZjgHMQERERrEhPADsQECF6oxRc0xYT1qUFXcvjrzugfNCK2JDEB3SoxwTmICYiI1iQmgB2ICRC8UJ/t3xQT/jBIZ57ZdCWHM87gSg7YdSUmoFslJjgHMQER0ZrEBLADMQECC/X116V1vaXHjU69OEIeT6OMkb43oj7qB4yIrUlMQLdKTHAOYgIiojWJCWAHYgIEFuq2l/wnX/xiw3j/RxxuvKE26geMiK1JTEC3SkxwDmICIqI1iQlgB2ICBBbq5qf8MWHv6v/rjwm/yTkZ9QNGxNYkJqBbJSY4BzEBEdGaxASwAzEBAgu1eJk/Jmxd8DN/TFi3pibqB4yIrUlMQLdKTHAOYgIiojWJCWAHYgIEFupzv/PHhBUz5/ljwl/+fDzqB4yIrUlMQLdKTHAOYgIiojWJCWAHYgIEFupT/+WPCTMnrJYx0ml9uZIDdm2JCehWiQnOQUxARLQmMQHsQEyAwEJdc4c/JvyvYZtkjJQ5jCs5YNeWmIBulZjgHMQERERrEhPADsQECCzUlTf4Y8KwjL/IGOnHP+JKDti1JSagWyUmOAcxARHRmsQEsAMxAQIL9eGr/TFhQOrHMkaa9XOu5IBdW2ICulVignMQExARrUlMADsQEyCwUPMv9ceEPr1OyhhpZRFXcsCuLTEB3SoxwTmICYiI1iQmgB2ICRBYqL8/V3rc6MSjSf4rOWx/jSs5YNeWmIBulZjgHMQERERrEhPADsQECCzUhwZIjxtVLvknGSMlJDTq4wPRP1hEbEtiArpVYoJzEBMQEa1JTAA7EBMgsFBzE6THjUpnXyxjpPPOPRX1A0XE9iQmoFslJjgHMQER0ZrEBLADMQECCzWn6XwJL8y8WsZI14yvi/qBImJ7EhM+5BInAAAbE0lEQVTQrRITnIOYgIhoTWIC2IGYACExYdX0m2WM9J93fxX1A0XE9iQmoFslJjgHMQER0ZrEBLADMQFCYsLcG34qY6SCJSeifqCI2J7EBHSrxATnICYgIlqTmAB2ICZASEz42fiHZIy05SWu5IBdX2ICutVYjAlr166Vz+eT1+tVWlqaJk2apPLycsuPf/vttzVu3DilpKQoKSlJ2dnZ2rZtW9jjIiYgIlqTmAB2ICZASEyYml2kXr0aVbY3+geKiO1JTEC3GmsxIT8/X8YYZWVlqaCgQLm5uUpLS1P//v116NChdh+/Y8cOxcfHKyMjQ3PnztWiRYs0ZMgQ9ezZU5s3bw5rbMQERERrEhPADsQECIkJP/A9r7PP4koO6A6JCehWYykmHDlyRElJSfL5fKqvr/ffXlpaKo/Ho2nTprX7HCNGjFBiYqIOHjzov626uloDBgzQoEGD1NjY2OHxERMQEa1JTAA7EBMgJCZ8b9B2jRvLlRzQHRIT0K3GUkxYsWKFjDFatWpVyH3Z2dlKTk5WbW1tq4/fv3+/jDGaMmVKyH05OTkyxujNN9/s8PiICYiI1iQmgB2ICRASE757xl7dcTtXckB3SExAtxpLMWH69Okyxmjv3r0h982aNUvGGO3cubPVx69bt07GGC1btizkvpKSEhljtHDhwg6Pj5iAiGhNYgLYgZgAITGhb8IXWjCPKzmgOyQmoFuNpZgwfvx4GWN04sSJkPuWLFkiY4yKi4tbffy8efNkjNGLL74Yct/u3btljNG9995raSwVFRXavn17kIWFhWHFhC1btmjr1q2IiDHvli1biAlgGWICBMWEukd7yphGFT//ZdQPEhGtSExAtxpLMWH06NEyxqihoSHkvuaPQKxfv77Vx99///0yxmjLli0h9zV/BOLOO++0NJbmj0W0ZEfmqaysTPv27UNE7DaWlZXZfq/sDLrKzzhoHWICBMWEw4vT5fE0au/u6B8kIlqRmIBuNZZiQls7ExYvXhzWzoRdu3ZFdWcCAABEh67yMw5ah5gAQTHh/YeG6DsDG6J+gIhoVWICutVYigmxfM4EAACIDrx3d32ICRAUE7b81/eVPao+6geIiFYlJqBbjaWYUFRU1ObVHJKSktq8msO+ffvavZrDG2+80eHxdZV5AgAA6/De3fUhJkBQTHjirus1dUpt1A8QEa1KTEC3GksxoaqqSgkJCfL5fKqvr/ffXlpaKo/Ho6lTp/pvO3z4sPbs2aOampqg5xg+fLgSExNVUVHhv+3o0aMaOHCgzj77bDU2NnZ4fF1lngAAwDq8d3d9iAkQFBMWT7lDD87mSg7oHokJ6FZjKSZIUl5enowxysrKUmFhoWbPnq20tDSlp6ersrLS/3WTJ0+WMUZbt24Nevxbb70lr9erjIwMzZ8/X/n5+RoyZIh69OihkpKSsMbWleYJAACswXt314eYAEExIedfc/TMU1zJAd0jMQHdaqzFBElas2aNMjMz5fV6lZqaqokTJ+rAgQNBX9NaTJCkHTt2aOzYsUpOTlZCQoJGjRrV4tfZpavNEwAAtA/v3V0fYgIExYQ7xi7WB+9G/wAR0arEBHSrsRgTuirMEwCA++C9u+tDTAD/Qn309rO0aMrd+uuOsqgfICJalZiAbpWY4BzMEwCA++C9u+tDTHCYtWvXyufzyev1Ki0tTZMmTVJ5ebnlx7/99tsaN26cUlJSlJSUpOzsbG3bti2sMX19Z4IeNzq5qo82LVwY9YNERCsSE9CtEhOcg3kCAHAfvHd3fYgJDpKfn+8/OVVBQYFyc3OVlpam/v3769ChQ+0+fseOHYqPj1dGRobmzp2rRYsWaciQIerZs6c2b97c4XF9MyY0rGn6X4ICukFiArpVYoJzME8AAO6D9+6uDzHBIY4cOaKkpKRWL5s1bdq0dp9jxIgRSkxM1MGDB/23VVdXa8CAARo0aFCHL5v1zZjQHBROruqjv5bykQfs2hIT0K0SE5yDeQIAcB+8d3d9iAkOsWLFChljtGrVqpD7srOzlZycrNra2lYfv3//fhljNGXKlJD7cnJyZIzRm2++2aGxtRQTmt04/4GoHywitiUxAd0qMcE5mCcAAPfBe3fXh5jgENOnT5cxRnv37g25b9asWTLGaOfOna0+ft26dTLGaNmyZSH3lZSUyBijhQsXdmhsbcWEd393adQPFhHbkpiAbpWY4BzMEwCA++C9u+tDTHCI8ePHyxijEydOhNy3ZMkSGWNUXFzc6uPnzZsnY4xefPHFkPt2794tY4zuvffedsdRUVGh7du3B7lgwQIZY1Q4tSkoNPv6r4zW/ceZeubJEsQu67PrntczT23WM89sR3SVK1du1/PPbw95T7ZjYWGhjDF66aWX7P1Q6ma89NJLTT/nCgvDmm9ERHROfsZ1fYgJDjF69GgZY9TQ0BByX/NHINavX9/q4++//34ZY7Rly5aQ+5o/AnHnnXe2O47mj0QgImLsWFhYaO+HUjej+RdSRER0n/yM67oQExyirZ0JixcvljEd35mwa9cuGdPxnQkPPvigjDFasGBB1AtkV7L5l0/+ksW8MC/MTVedl5deekmFhYX6+OOP7f1Q6mZ8/PHHKiws1EsvvcT3L6+f187r57W75LXzM67rQ0xwCFecM2E7n0f6OsxLyzAvLcO8tA5z0zLMizvo7v9O3fn1d+fXLnXv189r756vHexDTHCIoqIiGdP61RySkpLavJrDvn37ZEzbV3N44403OjQ23jRahnlpGealZZiX1mFuWoZ5cQfd/d+pO7/+7vzape79+nnt3fO1g32ICQ5RVVWlhIQE+Xw+1dfX+28vLS2Vx+PR1KlT/bcdPnxYe/bsUU1NTdBzDB8+XImJiaqoqPDfdvToUQ0cOFBnn322GhsbOzQ23jRahnlpGealZZiX1mFuWoZ5cQfd/d+pO7/+7vzape79+nnt3fO1g32ICQ6Sl5cnY4yysrJUWFio2bNnKy0tTenp6aqsrPR/3eTJk2WM0datW4Me/9Zbb8nr9SojI0Pz589Xfn6+hgwZoh49eqikpKTD4+JNo2WYl5ZhXlqGeWkd5qZlmBd30N3/nbrz6+/Or13q3q+f1949XzvYh5jgMGvWrFFmZqa8Xq9SU1M1ceJEHThwIOhrWosJkrRjxw6NHTtWycnJSkhI0KhRo1r8OjtUVFQoJycnaMcDMC+twby0DPPSOsxNyzAv7qC7/zt159ffnV+71L1fP6+9e752sA8xAQAAAAAAAABsQUwAAAAAAAAAAFsQEwAAAAAAAADAFsQEAAAAAAAAALAFMQEAAAAAAAAAbEFMAAAAAAAAAABbEBMAAAAAAAAAwBbEhBhm7dq18vl88nq9SktL06RJk1ReXm758W+//bbGjRunlJQUJSUlKTs7W9u2bevEETtDR+fl888/V15ensaOHauBAwfK6/XqnHPO0a233hoT1+IN9/vl6/z4xz+WMUaDBw+O8CidJ9x5OXXqlAoKCjR8+HAlJSUpMTFRQ4YM0QMPPNCJo+58wpmXxsZGrV69WiNGjFBqaqqSk5P9c3L8+PFOHnnnMWfOHE2YMEFnnnmmjDHKyMjo0PPE6nuvGyksLNQNN9ygwYMHy+PxyJi2f206duyYfvKTn2jgwIHq3bu3Bg0apAcffFD19fUOjbjzqa2t1aJFizRs2DClpKTotNNO04UXXqj8/HzV1dVFe3iOcPLkST344IMaOnSo4uPjlZKSIp/Pp+XLl0d7aI7R0NCgESNGyBijcePGRXs4nU5lZaXmzJmjUaNGKT09XQkJCTr33HM1c+ZMHTlyJNrDixiR/F0QugfEhBglPz9fxhhlZWWpoKBAubm5SktLU//+/XXo0KF2H79jxw7Fx8crIyNDc+fO1aJFizRkyBD17NlTmzdvduAVdA7hzMvGjRsVFxenMWPGaM6cOVq+fLnuuecexcfHq2/fvtq9e7dDryLyhPv98nVeeOEFxcXFKT4+3vUxIdx5qaur0/jx49WzZ0/deOONKigo0MMPP6z77rtPt912mwOvoHMId15+9rOfyRij0aNHKz8/X0uXLtV1110nY4xGjRrlwCvoHIwxSk1N1RVXXKG+fft2KCbE6nuvW8nIyFBycrJGjRqlAQMGtBkT6urqNGLECPXo0UN33XWXli9frptuuknGGE2ZMsXBUXcu119/vYwx+tGPfqSlS5cqPz9f3//+92WM0U033RTt4XU61dXVuvjii5WQkKDbb79dy5cv15IlS/STn/xEv/zlL6M9PMfIz89XYmJit4kJBQUF6tWrl37wgx9o3rx5WrZsmW655Rb17NlT3/nOd/TJJ59Ee4hhE8nfBaH7QEyIQY4cOaKkpCT5fL6gv4aUlpbK4/Fo2rRp7T7HiBEjlJiYqIMHD/pvq66u1oABAzRo0CA1NjZ2ytg7k3DnpaysTHv37g25ffPmzTLGaMKECREfsxNE4vulmePHj+sf//EfNWPGDGVkZLg6JkRiXn71q18pLi5OmzZt6syhOkq481JbWyuv1yufz6eGhoag+6699loZY7Rnz55OGXtns3//fv//Hzx4cIdiQiy+97qZsrIy//fpuHHj2owJhYWFMsZo/vz5QbfPmDFDxhj96U9/6tSxOkFFRYWMMfrhD38YdHtDQ4MyMzMVFxenmpqaKI3OGW6++WYlJCTovffei/ZQokZlZaVSUlI0b968bhMTdu3a1eIB9fLly2WM0cyZM6MwqsgRyd8FoXtBTIhBVqxYIWOMVq1aFXJfdna2kpOTVVtb2+rj9+/f3+pfUnJycmSM0ZtvvhnRMTtBuPPSFqmpqa49cI7kvNx999369re/raNHj7o+JoQ7L19++aVSUlJ07bXXSmra2n/s2LFOG69ThDsvx48flzFGV199dch9//7v/y5jTNCBtFvpSEyI1ffeWKG9mDBy5EjFx8frxIkTQbeXlZXJGKPp06d39hA7nQ8++EDGGN1xxx0h91111VXq3bt3TH/Uoby8XHFxcbr77rslNUUUN380q6Nce+21Gjp0qOrr67tNTGiNo0ePxsQcdObvyBDbEBNikOnTp8sY0+Jf0WfNmiVjjHbu3Nnq49etWydjjJYtWxZyX0lJiYwxWrhwYUTH7AThzktrVFdXq1evXho5cmQkhuk4kZqXHTt2KC4uTk888YQkuT4mhDsvmzZtkjFGDzzwgO6991717dtXxhidfvrpmjFjhmv/eheJ75fvfe97iouL029/+1t99NFHKisr07Jly+T1enXLLbd01tAdpSMxIVbfe2OFtmJCQ0ODEhISdOmll7Z4/7e//W1lZmZ25vAcoa6uThkZGYqPj9fy5ctVVlamjz76SA8++KDi4uKUm5sb7SF2Ks27T1asWKFp06YpPj5exhidccYZysnJialzY7TG008/LY/HozfeeEOSYuJAOhz++te/xsRHfDrrd2SIfYgJMcj48eNljAn564gkLVmyRMYYFRcXt/r45m1rL774Ysh9u3fvljFG9957b0TH7AThzktrzJw5U8YY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\" width=\"799.6333333333333\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "44198f7f12eb47189edc39f04e7241d7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(FloatSlider(value=1e-05, description='\\\\(t\\\\)', max=1.0, min=1e-05, step=0.05), …" + ] + }, + "metadata": {}, + "output_type": "display_data" } - }, + ], "source": [ - "### Interactive exploration\n", - "Now that we have finished the construction of the model we can track the process and explore the correspondence between the internal state and externally observed response" + "po.interact_geometry()" ] }, { @@ -2333,60 +5952,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "po = poui.ModelInteract(\n", - " models=[PO_LF_LM_EL],\n", - " py_vars=list(py_vars),\n", - " map_py2sp=map_py2sp,\n", - " E_f=1, A_f=1, p=1, tau=1,L_b=10, E_m=1, A_m=1\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "hide_input": false, - "scrolled": false, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "po.interact_fields()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Let's learn from the model\n", - "\n", - "Exercise the relation between $P$ and $\\tau(x)$ and between $w$ and $\\varepsilon(x)$.\n", - "\n", - " 1. Is the originally postulated assumption of rigid matrix relevant for the RILEM test?\n", - " 4. What is the role of debonded length $a$ in view of general non-linear simulation?\n", - " 5. When does the pull-out fail?\n", - " 6. What happens with $a$ upon unloading?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "po.interact_geometry()" - ] + "source": [] } ], "metadata": { diff --git a/bmcs_course/4_2_BS_EP_SH_IK_A.ipynb b/bmcs_course/4_2_BS_EP_SH_IK_A.ipynb new file mode 100644 index 0000000..a8fff79 --- /dev/null +++ b/bmcs_course/4_2_BS_EP_SH_IK_A.ipynb @@ -0,0 +1,1207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 4.2 Bond behavior governed by plasticity\n", + " \n", + "In the first part of this notebook, we rephrase the basic framework of\n", + "elasto-plastic models showing which conditions are used to find out how during yield \n", + "to describe the material behavior, once it crosses the elastic limit.\n", + "Perfect plasticity with constant level of yielding stress is considered first.\n", + "\n", + "In the second part, hardening variable is included which allows for to expand\n", + "the elastic range \n", + "\n", + "Define a bond-slip law governed yielding with hardening or softening." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import sympy as sp\n", + "sp.init_printing()" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "## Elastic, ideally plastic behavior\n", + "Assuming a constant yielding stress $\\bar{\\tau}$ and no hardening the possible paths along which the stress strain states can develop are depicted in Figure 1.\n", + "" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASQAAAA5CAYAAACfxlYdAAAABHNCSVQICAgIfAhkiAAAF2ZJREFUeF7t3QW0bMWxBuDGJbgGd3d31+AWHIIGlzzcX4K7Bkhw9wALdwjuwd2Duzsv+2sY3smcmS2zZ+ace8/utXrde2a29K7d/VfVX1U9Q/xf0kLVKglUEqgk0A8kMGQ/GEM1hEoClQQqCUQJVIBUTYRKApUE+o0EKkDqN6+iGkglgUoCFSBVc6CSQCWBfiOBCpD6zauoBlJJoH9L4KeffgqvvPJK+OSTTzo20AqQOiba6sKVBAYvCdx9991h3XXXDeutt1545JFHOvJwFSB1RKzVRQeSBC6++OKwxRZbhI8++miwfuzLL788LLbYYmGuueYKG2+8cXj44Yfb/rxD/W/S2n7V6oKVBAaABH788cdwzTXXhD//+c/h7bffDrPNNluYdNJJB9snH3roocNwww0Xdthhh/Ddd9+F4447Lkw33XRhwgknbNszD922K1UXqiQwwCTw5JNPhpNPPjlstNFG4b777gvjjTfeYC2BJZZY4tfn22yzzcI333wT9ttvv3D88ceHqaaaqi3PPkSVqd0WOVYXGWAS+Oqrr8LWW28dJppoorD99tuH9957L0w77bRhqKGGGjCSQG6fdNJJ4V//+lc4/PDDw8QTT1z62SsOqbQIqwsMNAmotjrjjDPCu+++G92XscceO8wwwwwDCoy889FGGy2C8ZhjjhmOPvro8MUXX5SeChUglRZhdYGBJoHHH388nHvuuWHfffcNY4011kB7/P963t/85jdh5513Do899lg4//zzg9SAMq0CpDLSq87tqATef//9mPeSpyGYWSzPPfdcjP7cf//94eOPP85zaqFjvv3223DeeeeFBRdcMJLYVQth8sknj+B81llnRS6tTL1+RWqXmFHff/99ePXVV2NkZZhhhul1pR9++CFGX15//fVgcX322WfRrPW5fI6Brl17CazuAxEs8ttjjz16HUr25Prss8+G1157Lf4feH3++edh5JFHjsdzJxZYYIFe55b5ANA9+uij4ZhjjgnDDz98mUsNVucuvPDCcU7jko466qgw2WSTtfR8FSC1JLafT/rnP/8ZF8suu+wSfv/730eg8ZmkMREYCwQAmbhjjDFGGGWUUcJII40U+xBDDFHizgPjVGDfc9ED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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Elastic behavior\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAASCAYAAAAkAezhAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACoUlEQVRIDcWW702bQQyHQ8UANGwAG9CyQdmA0AmADaj6KflW0Q2gE1DYIHSCEjaADaDdIH2e0/nl3r8SoFBLln22z/b9zu8la8vlclTSbDY7Yb0Hf8r2a+R91sdZ7iC34FviP2Tb2wob7+LpdLqEF10+bfiO4Hmff9X2d10wgWKgfdHlz7afyLiJgbDVuDobp5SjIjkmQ3Q35Fylr6/xhDjI35bFWZ/GGv0v+lWs31qu9xT046uhTaNH2GoIY3v2qOTDP+S6Hv4GWw2g7BsUrcZJEvM9Rj9jty+Jtg14G65Rjk83gT74wuBfsPkQmRpFzlm757iWtLEgzto/4A30NMZdoxLzbYFjeAK/Z5NPXwthbN6MfAP3EnFbOHeQJbpfsMmDxB5vRhAD1FEL8XA2Cpi4OTplEyb8ZtAAPeoj7x+EL9Ilei2n/gGqAdOFeGu+c7KqMQp6ddXp0d1TIpm3PAn2iJq3aQN+L3NsjsqLqIY4iaKZVsJcOIp8RUkHwW7T0j66chd2zGw0EXqMia9QQhmbv9Cn+uA0gkgB8XvxEdiEH7B9R7aoiXjMd+8VkshGLRaNeVgLn+civ9GrZxNduoRrtmgIWX43v4hb6IOd/V3kPrJFzcZTEMGd147dJk1ejQ26hz3DFwdRfoRLcr4DlGQnXsSrD5O1gMjOf9AFyudYlHKdDV6PT43XKY+wiVD6mJBj2Jjw+7qUB7PJEk2ftxJFlum5i1HyYOa7J4+jExSHPcAethQXi1LauIkmpfGZusnLL/6A9WGZgxoepHNWi7iUg9jzwtarNkelN3DAUaFLUV8LfwlLJAe2PrnY4y1e5xyVo7kOx5p/P19DJHYufWXSAVhXc/uSvOyPsfNvwab5YG/VcfYbvGI9eXXjJPov9A/tvnYctBP/5wAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle E_{b} s_\\mathrm{el}$" + ], + "text/plain": [ + "E_bâ‹…s_\\mathrm{el}" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_el = sp.symbols('s_\\mathrm{el}')\n", + "E_b = sp.symbols('E_b', positive=True)\n", + "tau_ = E_b * s_el # explain the naming - what is meant by underscore in the notebok\n", + "tau_" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGUAAAAVCAYAAABfXiAOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEYElEQVRoBe2Z61FVMRCALwwFICVAB6AdYAegFQAdyPiPfwx0AFSg0IFYAUgHYgUiHeD3ZZI7OfecnMflwpXBnQmbs5tsNvsMsPDw8DCaJxwcHKxy/ib4dJ56zOts7r3F2Tfg26TDwqRTYH6C+Z6xGRddgtOGlUhbB2tMhW1E2mDE3mU2nYM979UC9z/n8vvgYOelSUvAOIZ2DDaFNHqjwaDvwt+e3D/w+/sMZAw88p9cvoNW2iIE+GKTihg8ZcmXJn6kfQWnDGpZ1syKTr0GTy2jWfLLo2KDe7S+BFulRrVMiVdK2WHpaoOfbcwO3j78dE7H0lfBPuSWvxjHjZkCI2QKnrvJzcH3UfqO3r1I30Mwe+1HI/Crz5Jkt2jPW/BmKVNs5JUsYbE9pJIZ0KY1qi+OivykXI6RbxD8jjRT3HJXCZR8/VPOn0kXbbJdcwqHhyyBucL8RMyQ5ktpjVGBuD5kEPO+LzHLli+OIiDrB8wdcHAC+Bvfyt8rbnoixix0QYb2O2NsMV8oqGrQ7zWVr1TnNcgeY5vxhsWVt3QSCk/vOq4TrQe2fN2V1iFT/jo4zwp7kONZYVa6IMdMN8jbqos2Wa5lCsSQKRMGgVwtN/Bzo7nHRtUXzD6VLEFwGGf8YYGvPH+X6VPujEaflkNgnI2FTVPpUpBlwLfdQ4etNjml1k/iAWOjYyAvryNSJLsnzePy6RHy7xlewMywl+3qlEgrCnYfzL4ltCgnZygznjtIl1xGNtdOrWXbtRWncLiGFqzfFYgXTrTPTIKToHuQYK0Uv2MYfV2ZoGNrwL5UunzZhaiC5vv9SB6jLf1r8h5D6KsL6wwcg8E+KHg37XAILw9W7dvWE1fg3072lNRPiinGITpB4ySje5CGOoXmXwOuGOOnM/MmcL0KNIGRVNkf5Y7Az+aQqNgQXVxrz/CFqB0MWmkBoGk3s67tDgbk/aRTfKqO2Jh7V1IA6DrAmj0uZcx15Am85CTxW0YbKL9UZu7gpeAIMpBtpjx7k+fMTl3QTUPa9zT6Bd/JdtpBXgJt1/UY0iaXSwhZZuJTTQFBCDQ9rEKCEe2axPcVlg6WrwPyyFZwWzS4x/JoVDWB6Z1KoRfzbH+pmuoX1aYDBtA6dUGvcFew5eoqkx0yI/s20GptIeM71ZY7OsWLP+YPixotj4APCmYUgTNt2iNGrUdA85Km/9xhoC5mQl5BPvJtBiXQ4P4lOH+1Jt4IunZcBt8sjqnTT8ZZgUAbnjW1T1SbXfMoSdPftLCT+1pFNKoBPuLbLHHk9wsGh6bzmsDHU6ges3CKWXaGIhp5DVzpB02nS2Od/9QyU7zQSwcdYEm37Nr/LHsbzIOTmAs+hLRRXvoDA7oO3QSHCrEUqI/4gSAPmbb8uc/+1cuRj1DzqbeqvyW5WHbh6agSaIOxDWeRKaWDOukoaiT5pxzL3ksGS1Le5HvfJd5dG4zbQO3fwb2l/V8YLIAx7QMGlX2065fmsKfrx1/Eh8Ich2jebgAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle E_{b} \\left(s - s_{pl}\\right)$" + ], + "text/plain": [ + "E_bâ‹…(s - sₚₗ)" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s, s_pl = sp.symbols('s, s_pl')\n", + "s_el_ = s - s_pl\n", + "tau_.subs(s_el, s_el_)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOEAAABGCAYAAAA6qvMsAAAABHNCSVQICAgIfAhkiAAAFXlJREFUeF7tnQWUVtUWgDfjCGKLHSBiEgY2ICqKKBjPFsUAfIiCtcReStgFJnZidyCiDxUDu1DBQEBBUURBxUAUuG9/Z7zjP3du/nPvH8PZa+018984sc/ZZ8fZZ98GjoJYsBSwFCgaBSqKVrOt2FLAUsBQwDKhnQiWAkWmgGXCIg+Ard5SwDKhnQOWAkWmgGXCIg+Ard5SwDKhnQOWAkWmgGXCIg/A4lb9woUL5ddff13cuh3aX8uEoeSpnzcXLFhQNEYYPXq03HrrrSVFWBaGb775Rn777beitMsyYVHIXtxKP/jgAxk8eLD8+eefBW/Izz//LD/++GPB6w2r8LvvvpP99ttP+vTpI0888YT88ccfYY+nfs8yYeokLf0CX3zxRbn33ntl3rx51Y0lcOrrr7+WF154Qd56662iScpiUG+NNdaQli1bCjRAUh966KFy3333ycyZMwvSnMqC1GIrKSkKwGxdunSRRo0aVbfryy+/lGOOOUZWXnll+fvvv2XJJZc0kqFz584l1fYsGlNZWSmDBg2Sfv36yVFHHSVLL7203HXXXTJixAgjIXv16iUNGzbMouqqMokdtbD4UEDtH2f//fd33nnnnepOT5482VFmc1RCVl975ZVXnK5duzrHHnus8/rrrzuLFi1KhUh33323c/bZZ6dSVlAh3377rfP4448733//fdAjvtc///xzZ8iQIY7ahub+pEmTnJNOOslp0aKFc9555zlvvvmmo+q077t1uWglYXbrW0mWjD02f/58WXvttU37dPLI/fffLx06dJCdd965us0dO3aUjTfeWHQyi05Mc69Hjx6y5pprCpKj1IA+0Tdlcnnttddk3XXXle222y5RMzfccEM59dRTpXHjxuY9fnfq1MlIRBw3Q4cONbTbdNNNpX379kaFXX755aWiokKWWGIJadCggXkPR89ff/0lb7zxhmyyySaGjmFQetQMa629V2cKqNST5ZZbTrCDXJgwYYIceeSR1ZPIvb7aaqtJ3759pV27dnL00UfLmDFjZOuttzYqKhNwnXXWqdEemGDixImGoQvFqDhRXn31VXnsscdk6tSpsuuuu8oVV1wROfH9CAkToYq6gM388MMPyxFHHCEDBgyQ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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Yield condition\n", + "Elastic domain is defined by the inequality equation\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGEAAAAXCAYAAAAbfSF/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADdUlEQVRoBe2a7U0cMRCGuYgCSNIBdAAlBDogSgWBDoL4dfcvIh2QFqADSAVBdBA6CEoHl/dxbMs762V9u75DF+1IZjz2eDwfHnv2xGy5XO5MUOaBxWKxL85fZdzlXLvlrBOnPHCldqJg3Nf0xpuawv5nWT4L9msHAJ9NmVB+ci7E+rWcvcmp4JFFe2pcaU9qFxr7IzwFASf0gZyF846Fz/t4c/M+ANfCOH9H+Eboh9oR9HQd4YV+uBQLmTAUTs1CMupQwSArpiAY57RIOYosOBW+bU2uNuAc7pe4a0h9Nza9Cf2OJAu4zweDAnhgFh96+gG8lUGQUaQ3lco3b8xakOSHLLBOHLsfQY0P8/QmvOzOM02PygIrXoFF3n16gLYyE6xhQ2g54Zh1wi99eJ1rvloWSBZB3RNuVFlVgiChXyScu5P0zQGpt9arI7dp11iiLyWjKxMtr+e5tuOBTmQU2Sx+gn4g7ALg6Wfhx9FBkJCQrh+0Ca8+NCUYfQfieVIjUO/VfoNFjyn5nNwhf7QvFcl3v/ZKNPV/Lhs6s0D8RTYH/cTPQ+z8on4oVwnGR3hGBcEL/ykcyzf1SbdHhAcQTRpGx4um5LtRc0oEvk1g7Rk+mAgEjuEwNIIgHvTNZoHmcGivzeJJgQ8zMoaPtAiS5Q7qbD6fMwnTKvBZAhqOZrFX8FK44VzR/PLIyYrGqs/Pt2+FY8YgIwXN4STS2AI6v1NzDjWTZF1jfzMfSfHhaBzONRFlqY++R8KdugUh4iEoLZvDfAne9Rtl78USAYbnk+i7dEzycRhXwHM6rj4G4uCYRWZ+R2uzV5bGa5WoBJkgsE+4q6FvtUdvAMQHtGz+N1z+t3aJinPcB0iiAgEArFEEhdP8aiBHc/o5BGfqc1gAAsKbVgo5m0vXOr5qQZAROJsPqNY15TWymcBwMNyzvAoKDudKwaHU8PbAZBUrsDm7zg5WC4IEY0C8V+1Gou2pt3RmyfqH/KHh4HANUWZnr8AOTfps7ljWHK4ZBD5qchVFCIw99dBdWdPUcv0U2YA+D6VZ4FXqsnkljUeVqOlOUt49bOkYfYxSIxC5k2/fD7t8I7T04yGmcuOhLgatydpcLMAzVgtCz8ZkCGWjK1GlPGm8SgVixcdS104MpaXTydC1Y9fNNvXfFjIyfDGjc+v3k7GGbPP6vwatLH7VrxGZAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle - \\tau_{0} + \\sqrt{\\tau^{2}}$" + ], + "text/plain": [ + " _______\n", + " ╱ 2 \n", + "-τ₀ + ╲╱ \\tau " + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tau = sp.symbols(r'\\tau')\n", + "tau_bar = sp.symbols(r'tau_0')\n", + "f_tau_ = sp.sqrt( tau * tau ) - tau_bar\n", + "f_tau_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**An idea?...**: what about to get rid of the unknown $s_\\mathrm{pl}$ by substitute for the stress and then for the constitutive law and resolve the condition for $s_\\mathrm{pl}$?" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[ s - \\frac{\\tau_{0}}{E_{b}}, \\ s + \\frac{\\tau_{0}}{E_{b}}\\right]$" + ], + "text/plain": [ + "⎡ τ₀ τ₀⎤\n", + "⎢s - ───, s + ───⎥\n", + "⎣ E_b E_b⎦" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_s = f_tau_.subs(tau, tau_).subs(s_el, s_el_)\n", + "s_pl_f0 = sp.solve(f_s, s_pl)\n", + "s_pl_f0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**... it's a dead end:** well, this is not of much help because once we substitute back into the constitutive equation $\\tau = E_\\mathrm{b}(s - s_\\mathrm{pl}$ we just recover the fact that in inelastic regime, the stress must be equal to $\\bar{\\tau}$. But what we need is a relation between a control slip $s$ and the stress in the plastic regime." + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAMCAYAAAADFL+5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABMklEQVQ4Eb2U4W3CQAyFLxUDBLoB3QBGaEeg6gSUDYr4lfxDdIPOQDcI3SDKBrBBERuE70U5ZB2JVJoIS8Z+73y2zxcuKsvSdZU0TT/IsULjllxLYj6b1gZN5C0ciTd1/DP2hAqvax/jHDEHVE0+or+y4CXWOU3gv5okyQSd2f3gzGL5cO/oxvPag26FIxyN7afq5u8/c05QhOFwE7gV9tWugffgBXbneXzd/XCAo7FN/UJH+8b+zOYgvw44Ro+Wx1fdl4eA7ApnJMiDJCouUUEramjUWwOcVIXG2KurqauGExAd99YAyXT6g7K2yCjgK9xnA08U+AqKCPqm9C1YES46vwM+I6NfeN9a+BOqJsIJKCzvcwK2buhrMpe/Jg3pur7VXKTH4B5CMf8SqlwMriZ2BgUdpaTGjykhAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle - \\tau_{0}$" + ], + "text/plain": [ + "-τ₀" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tau_.subs(s_el, s_el_).subs(s_pl, s_pl_f0[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Evolution equation:\n", + "Let us be more precise in defining the goal of the derivation: Inelastic behavior is path dependent. That means, during yielding, the value of stress does not depend only on the value of slip but also on the history of loading in a material point. Thus, we cannot get an explicit relation between the stress and slip. \n", + "\n", + "**But!**, we can try to find a mathematical compass that would tell us: \"in which direction would the yielding proceed once it went through a known history of loading?\". In other words, we want to establish the relation between stress and strain (or shear and slip) in a rate form, i.e. $\\dot{\\tau}$ and $\\dot{s}$. Which is a short form of $\\displaystyle{\\frac{\\partial \\tau}{\\partial t}}$ and $\\displaystyle{\\frac{\\partial s}{\\partial t}}$, respectively." + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Regarding Figure 2 - what is the direction of flow/yielding when $\\tau = \\bar{\\tau}$ and when $\\tau = -\\bar{\\tau}$?\n", + "\n", + "**Compass:** Let us postulate, that the amount of yielding can be mathematically controlled by a new nonnegative variable $\\lambda$. The irreversible part of material response can be related to this scalar variable. The yielding is assumed to proceed in a normal direction with respect to the yield surface $f$\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAAvCAYAAABOtfLKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADoklEQVRoBe2a31EbMRDG7UwKoAbTgVNCoAMYOjAdhPETvDGkAyghoQOggmTSQVICSQfk+8laje6sO584nZ5OM7L+rVb77bdaYyXLt7e3Rc1yc3Oz0nlnqnelz/1YWuEAfYC4F6jlANkskapgPCsrtc9ZVnph7cMRR6qw+0f1SnP/1LpSFYxOvFK93R2d9+mBwCggFmq/q3lR/cSY8mHX7D4lcKS6UQV50YJuKTxR+/hOxdyzuOCUdWxrGwyUvar+ltBJvLNAfysdMDOmxE628ApzDTCc4j3n4nHMqfFe6YSVM687Xhrc195j1fiurf3mn6ZkD4xfuFdLSGBEiQIrpVMx+hoJoAuMxfVmLBLvEFh5GKvL9ksXQJ7VfrU52iQYCRFmv1QvERpZcEgxVmQb+khUe7b1pWZCjVTI94JLh21QmndJQm0cy22xS60ftydtrLUv6hOGXSFNKDkG1HIed8cB8eNXtTh+0Qfmm9YBxMa9LCQFZgRAQ65XPxQvg45k0box9lkCZCfGt76vxiUk50jJcuHduvqWprHtHDlKH5jVTmQBrQ0wUsaa3YE7jUkWKXY6WZE8xv1Qa/dzoT7h47zsz44bviBhjy/LUCSPE1xZpv7QlIB5gY149lRze8ZqDuV/VbmMp2pD0dhiu3FJg0CrI3nO3KoNnm6JHBzuJQCvFBDn6uN9kLsYbWvTOmvIwAxsxQU2jb14vqt/oYWnrsUh8w0wMogLBp0wYfRxdyxGUzot7kMoai+sPEY6Uvvac5wRvgDbi0PGAYwHgmdgJM5e7gJrLgnIyxL3G/UJOwrAuMiDivbBKlmz674M0uPASAmMAIQL27gb/gDAJUPNn2KGE/OA5g4Zs16kt2FP7MBe4a5FYwZPks+7Ypz11L1wej1gvEp4bVVDyDmBwx98D3Wm8MPbdxLJbDZ0cyznGSFxPKjfx2K8rWjfmBmtVAC4N4SoJYTROnMVFGMm9+Ap5IsxM4VxuTpnMLkeqyU/M1PL07nnLK+vr+u+z+ZamCE/p+YMZ1UVnRNAVXdnHDYzk+GsqqIzM1XdnXHYzEyGs6qK9r1ojjJEvzzt+dZebNr6whtye+G940nACIj9dD74hvxew5P7eJ4tWfWH61r1LNap8VM8nqpfnBmxwpNTeMzTmDfknDe0pNOHTNbIZhcyZNQb8hAgyNQAM/oNeSiYSX/PKMRWMoR/hi/+X0tSAKdmpsgbcsrw1NzUYIq8IacMT839B/4RvLoTtUcqAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}$" + ], + "text/plain": [ + " _______\n", + " ╱ 2 \n", + "\\lambda⋅╲╱ \\tau \n", + "──────────────────\n", + " \\tau " + ] + }, + "execution_count": 127, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lambda_ = sp.symbols(r'\\lambda', nonnegative=True)\n", + "dot_s_pl_ = lambda_ * f_tau_.diff(tau)\n", + "dot_s_pl_" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPwAAABCCAYAAABza7tiAAAABHNCSVQICAgIfAhkiAAAE8FJREFUeF7tnQOwJkcQx/suF9u2beti27ZtJ5eKjYptJxXbtm3b9qR/k9pXe/sWs7pvv9vpqlfv3mLQM61/9+z1MUriyXPAc6AVHOjbiln6SXoOeA5YDniB9xvBc6BFHPAC36LF9lP1HPAC7/eA50CLOOAFvkWL7afqOeAF3u8Bz4EWccALfIsW20/Vc8ALvN8DngMt4oAX+BYttp+q54AXeL8HPAdaxAEv8C1abD9VzwEv8H4PeA60iANe4Fu02H6qngNe4LtsD/z666+yyiqryLbbbiu//fZbl42+HcPlAGpT18YLfJftwbvvvls+++wzeeqpp+TTTz/tstG3Y7ivvvqqbLDBBvLMM880bsJe4Bu3JMkD+uuvv+Tiiy+WHXfcUfr16ydYe0/N48Bll10mr7/+uhx//PGNG5wX+MYtSfKAfv75Z2s1FltsMenTp0/yg/5Oxzjw559/yiuvvCI77LCDPPbYY/Lvv/92bCxxHXuBj+NKQ6+9+OKLMsUUU0jfvn2thR966KEbOtL2DotwC89rttlmk6GGGkp++eWXRjHDC3yjliN9MI8++qjMM8888tVXX8lwww0nI488cvoL/u4g58DHH39s+5x00kmtQv79998H+RjSOvQCn8adBt3DVXzttddkpplmsmDd8MMPL6OMMkqDRuiHAge+/vprGXXUUS0zfvjhBxlhhBEaxZjBXuABus455xyZf/75ZbnllpPbb79duvG7nT/99JO8++671lUEEJpooom8S98oUfp/MF9++aWMPfbYdm0GDBggww47bKNG2S9rNMQgWJchhxzSToLf3UCAJbi+J510klx//fWy55572nQWizDmmGPK7LPP3g3T6Bkj6/Ddd9/JhBNOKE8++aQsueSSXTX+tgz2k08+kfHHH19GHHFE2XjjjRs37UyB32mnneTBBx+0FmX66ae3oNFUU00l00wzjYw33niNVQDXXXedHHLIIXZ8N910k0w++eSW+YBdxx13nJA66Sb64osvZLTRRrMx4dNPPy0HHXRQNw2/NWPFpccLayplCvwWW2whc845p91sL730knWJr7jiCvnnn38scDTvvPPKiiuuaCfZFOvPGI8++mhZfPHF7ZgCYWcRVlhhBUEZfP755zLOOOM0dV16jevNN9+0ipbCm2mnnVbGHXfcXs8M6gs//vij9f6wZj5j8D/38cKCGL7O9cAAvPDCC9K/f3+bDXClTIGfe+65hR9ojTXWsL9xld944w358MMPrXu5zjrryFZbbSU777xzxxcehh988MGyzTbbyHrrrdcLJcUlRtAZfzcJ/FtvvSWTTTaZ3HnnnTYPj7LtFP39999y5plnyj333CMIPePCfZ1vvvk6NaTEfm+99VaLeQCeYZxmmGGGWmsYBoXA4+VtueWW8sgjj8i1114rCy+8cOL8ozcKgXbEwAsssICsu+66cuyxx9qFv+GGG6yrDEjWScJVxxKihNB8I4000kDDQVCwSLhe3UKAjO+//75MMMEE8txzz1m0viyfafPZZ5+VI444wmIbrgR4uPXWW9v3GMsmm2xiLRoKFs+vSQSPTj31VBu+3XzzzbL55pvL6quvLqQ3UVp1EDn4OpUx2NQZZ5xh98Css84qV111lf23KxBdSODDjCImJud41lln2QV/++236+Cjc5toPDyRYYYZJvadbqxQ++OPP6wlBQxae+21ZYkllpAhhhgidn4uFwnHWCusMp5DHnec9+Dx6aefbsOKRRZZRA4//HA57LDDrGfVpLwz4dyyyy5rPaJrrrnGliXPPPPMQpjKv+FDlUR7/OThZ97+MVSXXnqpPZxD2u+BBx6w8yGD40T833JV0V577WUOPfTQqprL3c4333xjNF43ypTEd3VDGtXyRl3jxGeadkPxBrPUUksZPZRRemjffvut2WWXXYxufKN4gFGL4dymegJG8RyjgKF9h7Z0g9t/axbBqHCZ++67z/7dFFJFaRh3mLTk1cwxxxxGcZ5c88+aE30ttNBClaxTUl8KQNs12HTTTS3PWb8111zTqBJOemWg66UtfFirECM9/vjjFhDTXlIVzuWXX241Fc9WpWmJaQAP04odvv/+e+GHWL5bCOuO5RxrrLEKD5n1wPXTjSKc5sJSL7roorni2SCUwH2HcOUp84Xw9Kj8q+NADyEHa1aECN+iWA3VioSfV199tbWQVRFrBB/ygGh5+mYNwSQ23HBDOfnkk23ogMdKtoz8vwtVKvBM9qGHHrKxfdbC44Lsv//+opbL/r7tttvko48+KnzYAGaQriK/nuZSqVWy7vHEE0/swp9GPMN4UYpl0F9wFo5s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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Relate increment of yielding to the increment of primary kinematic state variables:**\n", + "But how far do we go along the direction given by the gradient $\\partial f / \\partial \\tau$? The amount of yielding \n", + "is now controlled by a new unknown variable $\\lambda$? \n", + "\n", + "The idea that helps to sort thins out and to mathematically distinguish the loading process into elastic and inelastic is provided by the **Kuhn-Tucker condition**\n", + "\\begin{align}\n", + " \\lambda f = 0, \\; \\lambda > 0,\\; f \\le 0\n", + "\\end{align}\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Consistency condition\n", + "Now, if the process is yielding, then $f = 0$ and $\\lambda \\le 0$. Moreover, value of $f$ must remain zero during the whole yielding process. This means that the rate of the yield function, i.e. \n", + "\\begin{align}\n", + "\\frac{ \\mathrm{d} f}{\\mathrm{d} t} = \\dot{f} = 0\n", + "\\end{align}\n", + "must be zero during the yielding process as well. This is the sought equation that can be used to resolve for $\\lambda$ to determine the amount of yielding that corresponds to a prescribed rate of the control slip $\\dot{s}$. \n", + "\n", + "To construct the rate of the yield condition let us recall that it depends on stress, which in turn depends on the control slip and on the plastic slip\n", + "\\begin{align}\n", + " f:= f( \\tau (s, s_\\mathrm{pl}) )\n", + "\\end{align}\n", + "Thus, to obtain $\\dot{f}$ we can apply the chain rule \n", + "\\begin{align}\n", + "\\dot{f} &= \\frac{\\mathrm{d} f}{\\mathrm{d} t} =\n", + "\\frac{\\partial f}{\\partial \\tau} \\frac{\\mathrm{d} \\tau}{\\mathrm{d} t} \n", + "= \\frac{\\partial f}{\\partial \\tau} \n", + "\\left(\n", + "\\frac{\\partial \\tau}{\\partial s} \\frac{\\mathrm{d} s}{\\mathrm{d} t} +\n", + "\\frac{\\partial \\tau}{\\partial s_\\mathrm{pl}} \\frac{\\mathrm{d} s_\\mathrm{pl}}{\\mathrm{d} t}\n", + "\\right)\n", + "= \\frac{\\partial f}{\\partial \\tau} E_\\mathrm{b}\\left( \\dot{s} - \\dot{s}_\\mathrm{pl} \\right)\n", + "\\end{align}" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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xAmx+Bx66KHF2mPTS+TGHi9PeUp/Pj4LLrhgWmaZZdKqq65aLEcnnXRScbGzAemTnvSkCXe3M0YboMo89sgjj6Q//elPicXM+PQnSnsEEKNvfvOb6alPfWp61rOeNZBlsX0rU/iXv+e+/zlXfy2lRhWqY4/881i3y+wV+fybcr0911fm+qJcowQCgUAgMAUQ6N/vZAoMLroYCAQCMwuBhx56KF1yySXpxhtvTAcddFB6+tOfnlZeeeU011z9p9Kac84507zzzlvq3HPPnTbffPN0wAEHlJTISy65ZBG2x7Owfj366KOJZcxfsVDX5M1VEUHWMa6Er371q9NHP/rR9NrXvnZcuqIPLC6TQQiHOSAE6ZBDDklvfOMb07bbbpvsA6TUmDJzXesw2x35ezGwIkbX5np5rvPkunaujW5xP8r/PjfXdXN9Y67dlPnySSvkys1O4oalc43wvW6Qi3MCgUBgkhEIgjTJExDNBwKBwHAQYFn5wQ9+kL7zne+k5ZZbLr373e8uwu4wywILLJA23XTT0s6nP/3pdNxxxyXHhpm0ARFBhJASAv0vfvGLEv+EFP3oRz8q/xZT9fznPz8tv/zy6e1vf3t63etel17wAoEe41N+/vOfl0x+L3vZy0q7U61UTFnczNXtt99e1slzn/vcQvrgiUTLUvic5zynHPdv56qtiJPjg8S2jQyGyNFtuX4x1+/k+sxcX5XrY7nu0tDLM/P/35zrKg3HuvnfN+WTLsn1v3N9KNf5u7kozgkEAoFAYHIRCII0ufhH64FAIDAkBH72s5+l888/v1h0xB8NmxzVbiIIyJENNVmr1lxzzeKuNWhB8BCjX/3qV+m73/1usYJdfPHF6Z577imJJpC+97///WmRRRZJSyyxRHre8543aJNdX3/OOecUMrj22munfffdd0oRA+SIle2MM85IX/3qV9NPfvKTMu4rrriijAMRrdY556qOc61ElJCmV73qVcW9shInxBUxltVwmOS46wkZ1olI0DW57pHr73PdM9eNc527qYG/5n9fmuuSufbKw1+er3l1rhflekOub801SiAQCAQCI45AEKQRn6DoXiAQCIyNgFijU045pSRR+PCHP5wWWmihsS/q8wwEjCvb+uuvn44++ugSizQoQRJTJLEE8sGywTXwrW99a9puu+1K7NMrXvGKcSN83cCw8cYbp3vv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uhEIBAKBQCAQCAwbgSuuuCKdcMIJxWrxzne+Mx177LGFHKy99tppp512KpaT+++/v7hJnXvuuenuu+8uZGGZZZZJH/zgB9Mb3vCG2V367W9/m04//fT0ne98J/3yl79MyMALX/jCQjB23HHH9LSnPa2ce91115U2r7766vTII4+kF7/4xWmNNdYoZGTBBRdsOURuX4ccckh6/vOfn3bYYYdy31pYPFh79G3vvfcufXrwwQfTBRdckL7xjW+k22+/PT35yU9OSyyxRNp2223LX/9uVX72s5+lAw88sIyV5cMY55577rTaaquVaxdffPF07733lt/d+5577inj+rd/+7e03XbbFZfApz71qeXWF110Ufra175Wfv/3f//3dNJJJ6UHHnigYLvLLrukpz/96a268IRj+u9aeN13333l/tpZa621SjUftXBL/Na3vpW23nrrdOuttxYMuAtyFdx8883TQgstlM4888ziPvjQQw+lRRZZJH30ox9Nb3rTmx53H/dzHffGz3/+8+m2225Lz3jGM4rb3cYbb5xe/epXz27TvJ933nnpuOOOK2vlRS96UWnL8cbyxz/+MV1zzTXptNNOS1wJf//73xf3RWvJ+caEOEYJBKYCAq3fIFOh59HHQCAQCAQCgUAgEOiIABc2Aj8CwmJC+EVYCN0EYqRjn332ST/+8Y8LCVhzzTWLYH3JJZekbbbZJh199NFFyGZd+eIXv5guu+yy9PrXv764pjlGYNYGAuaeBOSPfexjpU9ve9vb0gILLFAI01FHHZVuuummtO+++xahubkQ7J/5zGeWfjgfmVOQo9/85jfp29/+djn2rGc9q7SJKFx44YXpNa95TemnPiAsm2yySRHkl1xyyTTXXHM1N1PGvtVWW6WXvOQlhWxxr+Na5/jLXvayQh6/+tWvFoL0ute9Lr3rXe8qeJxyyinpRz/6UTr88MNn3/svf/lLwQ+5+MMf/lBIAPIAh1ZtP6Ez/zyAhClvf/vb0/zzz1+Iy7XXXpsOPfTQQv5222238jtCqh3HDjjggLTccsulddddt/QBEb7xxhsL5v6uv/76BZNTTz017b///mn33XdPK6ywwuwuIIfus8cee6RVV121EDHYI8CIDowQGiRIbJZ7II/Wz5///OdCwJBkhLYWx82V+YUFgljn7uc//3nB+s1vfvPs8+N/AoFRRiAI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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To realize this derivation in `sympy` let us transform the elastic relation from absolute values into the rate form\n", + "\\begin{align}\n", + "\\dot{\\tau} = E_\\mathrm{b}(\\dot{s} - \\dot{s}_\\mathrm{pl})\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGUAAAAWCAYAAADZylKgAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAETElEQVRoBe2Z21FUQRBAF4sAkBAwA9QMMAMwg4UMpPzjz4IMwAgUMhAiEMlAjEDcDPCccWbrPubufeyLKuyqYR7d093TPd09d9l4fHwcrRNOTk52kL9Hf7FOPdYlm3PvI/uO/j7psFF1CsgPIN/R9iLRNX3asB3Xduk1psxex7XeHXu32HRJr7xnC5z/ksMf0wc7b1YtAeKMtTN6Q0ijZw3G+iH4g+r+nvObWTyQodN+0e4ZD3Z+T52y5EvWZYxQbRHO+CKnAQqkKPmSw8e1r/QpgmaQ5VHI0Km39I08wE2geaA10uS5L351mbpE3tf0ZqlRLVLicVJ0mLpmwc9ZyBbcMfgkp5EURV81IleMWLIunziOWeEsGykgQqSgxF3x3MxP05yxt/gqzfv07LUejejXHgF99F4mbbSnaXqvKVIs5KUogdh0U4oM1oYa1RdHiX/uwPD3EvyOOC+B6a50UXL7lrG2Il20yUHNKQgPUQJym/G5Pc01i24tlUT6EEGMuxZj05YvjkaA1w+QY/rgBPpvzOV/1LhpSYh5dWG/tvtM22I8K2V76Y9y6Stt0iBHtAPaS4hLb2nmAcDpXdvtv5VOf01fFvAswFP8Ln0xKqxBtpXCInSBh1HuBU8XvukM2mSrFilpY8UgMimlG/BFoynMQtUVjD4VbYLgMGT8gcBXnt8yJfm5jdB4I31a9oFpNDZsGqRLhleXS2s52Mk5pVZPooCp0ePhdUS6ye5J40g+vIP/hGbEGhnWskPmPhlTFGeZuw9E1xSa5VFdlGeU20uXKp8+85JTEK6hBfN3CeKB09pHBsFJrOsQYZ+x/Vuat68tErzVNWBfSl2+7EJ0sOb7/VQcbejjoiarbaGLLpHG+uh5rK3WXcdmgzY7QFIC99xXa0q6iY2pAiV0gsZJRteRGuqCNX8N+E6bPp0Z50B6FciBByztj3xH9CtzSFSsVZeo0xh6L5OvQ38u8TGiHfqmUnlMqk7xqTqCaTYVsa4DFDRNZYx15Dm45CT7N7RZIP+mNPMALl2OwAPeRsrKizwye+lStBtjL6h1N2WfcJaWP9rkepNNhprPNb1kG7HmDVEhwRstTcL7CtOoCXRA8WbLuO1Gmx59jeTAW5ZSoQ5Wth9Vgz5UcwJ6rM2ri/oHm3aUqS3HOsWN8/ywqNGKL4v3MqY1AjIt2iNarUawpkO9ZWuHBegSLlSXgyBLWr9j7l502dBCM40KGKYfGbvcaqNrHSmp5TjD0Zx/GhWMTblmlcb6XJHk4ylkj9r/UyqErVOEWvhlGJzDvLOhoTWN+YE6dWyrwCdIEG3gLxCmOyG8wFgPc3qjwBJhzb5iXspMEX9DH+rsJkRzAYysLyUhPRi6z/pVKuw99j8pUmyR/e8p6xMUnWUjbTDFLyJ9DTZMVNZIMe09S4hnL2WLudPXs7Rk4dAY1TpiLfDp67daSmEFqn7D/07pZ6+VUP8F3BjMBF33k7AAAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle E_{b} \\left(\\dot{s} - \\dot{s}_\\mathrm{pl}\\right)$" + ], + "text/plain": [ + "E_bâ‹…(\\dot{s} - \\dot{s}_\\mathrm{pl})" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_s, dot_s_pl = sp.symbols(r'\\dot{s}, \\dot{s}_\\mathrm{pl}')\n", + "dot_tau_ = E_b * (dot_s - dot_s_pl)\n", + "dot_tau_" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{E_{b} \\left(\\dot{s} - \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}\\right) \\sqrt{\\tau^{2}}}{\\tau}$" + ], + "text/plain": [ + " ⎛ _______⎞ \n", + " ⎜ ╱ 2 ⎟ _______\n", + " ⎜ \\lambda⋅╲╱ \\tau ⎟ ╱ 2 \n", + "E_b⋅⎜\\dot{s} - ──────────────────⎟⋅╲╱ \\tau \n", + " ⎠\\tau ⎠\n", + "─────────────────────────────────────────────\n", + " \\tau " + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_f_ = f_tau_.diff(tau) * dot_tau_.subs(dot_s_pl, dot_s_pl_)\n", + "dot_f_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By setting this expression to zero and resolving for $\\lambda$ we obtain " + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACcAAAAvCAYAAABg8NNYAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADZElEQVRYCe2Y0U0cMRCGuSgFUAN0QEoI6YCICgIdBPEEb4h0ACUEOoBUEEgJpIKQdEC+z2dbu4fvdu07IYRuJK+99njm399jr+3J09PTxmuV9y3ATk9PN+n3m/RA+UOLjTF93o1RmtUB0D/qHkkPs22rfJ+85mFtYm6V7Cyy1Rpz5xj9Ew07xHcM9a/kiPJXysckY7MkR+h8KzV066rBYfQeA18SGPIb3p0UhxrmXeDKR5LAfT+LZbKgMypWq8DheAvbO+SZJd6PSMEZ9TuUf5JfkwehvDmjn5oG8ypwWHOGbuDsL9l30hXlW+sUyoLOwHkXrOw1SdWEwJmOPpHuSAekG+oc1nmyT8Oi9nn9Qv1o5gCRhtQhC2xRZ+Cf20YqxdEe7Z+Dp4ZHDXNXAun6AFCYcSVgAkZX0HmYu33HlGvAGW8OaRYcy5wToiSyVmKzpFusGz2s9Hap2AOQhoy9TZL/1jwzbejINuWLznt1cf37qqYsdqiJuVYfzf3W4FqpWzP3JpmbnJycvNrj13oRfpMxV/PjLxLAj3+LBncgve1UUbmycmlwEdQFICeVvgfVlwIXWXNDmc8Rgx47CvSTbbdesu/ezyOj27EgS4HDghtNj33VEoHJeDq5udP+Qcp3L82/L4z6xbvk8zabQ4CN0674kR47ZTFIMzh6e6Kft0WfWh9+ZiCopuHMdU3DGllzy94Mjr5u47viGVfx2BmklTlZW/XSob3ehKj+fUXW7gtfPv3chie2wqwl9xCVpYU5T/orYw1A2vM+pQdMhL2YQ2HXSvJF69Yh7bPxYrcgtI2+/kJXf9vkAVh8fyQPB/EMjopk1HUnrzVTl9Nn1Jl7FqU9MTp4/YWuE0D9M8ppWRFkvr4I4Gh0+l6SFO8+XL9K7M1lDf3a6y8XXNdKF98s2ElLykZvQtCgstdbt5Rnrx5SbAzeSOqJ/oI9Js9MWF8jvQmBIVHLoMzJZldc0xK73fp55X0amq+/NNoDF72kuMkLLEBl7TqCj2qDmXGUF9RB7YLCM3AAcEL4vzyg7DArAj0LpREP+sn6UtdfunkGLvpOQIwZGTAGc6BGnUWZfcJuY5HSUFsRHEBcZ0wOZ8sPfunrL4H3ZqsVSSJjTvNLymGRTG0vlReZ0zmAjDvXujRBrH5R+Q9l3C+DDXMFigAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\frac{\\dot{s} \\tau}{\\sqrt{\\tau^{2}}}$" + ], + "text/plain": [ + "\\dot{s}â‹…\\tau\n", + "────────────\n", + " _______ \n", + " ╱ 2 \n", + " ╲╱ \\tau " + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lambda_solved = sp.solve( dot_f_, lambda_)[0]\n", + "lambda_solved" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAocAAACGCAYAAACv1yBuAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7t3QnYLEV1N/D2MxiXxCXEXeN1BVFRUJS4AgoYQBSQRXEBBJRNRVxAFEFBQUURXABBwAVEQBbZEbmgbIJRlrgLiBsmcUmiJjHRfPUrKWya7pmemZ7lnal6nnrufWd6uqtOVZ3zr/85dfpO/xdKkUuWQJZAlkCWQJZAlkCWQJZAlkCQwP/LUsgSyBLIEsgSyBLIEsgSyBLIEkgS+IssiiyBLIEsgSyBLIEsgSyBLIHZl8C//Mu/xEbe8573LP7yL/9ybA3O4HBsos03zhLIEsgSyBLIEsgSyBLoRgKiAM8999ziX//1X4v73e9+xQMe8IDi/ve/f/z3b/7mb4r/9/+6cwZncNjNmOW7ZAlkCWQJZAlkCWQJZAmMTQJ/+MMfin/8x38sLr/88uK3v/1tBIUrrbRSseqqqxaPe9zjihVXXDGCxPve977Fne50p5Hacad8IGUk+eUfZwlkCWQJZAlkCWQJZAlMTAI33nhj8cMf/rC46aabiiuvvLK44oorit/97nfFYx7zmOLZz352semmm0Zm8R73uMfQbGIGhxMbzvygLIEsgSyBLIEsgSyBLIFuJfDLX/6yuPTSS4vjjz++OO+884q73e1uxb777ltssskmQ7ubMzjsdozy3bIEsgSyBLIEsgSyBLIEJiYBsYhczv/zP/9T/Pu//3tx1llnFfvtt1+xxhprFPvvv3+x8sorD9yW7qIXB350/kGWQJZAlkCWQJZAlkCWQJbAKBIQX/gXf/EXkTEUb/jiF7+4OOaYY4rvf//78d8f/OAHA98+g8OBRZZ/kCWQJZAlkCWQJZAlMC0J/PGPfyx+/OMfF9ddd11ky3L5swScWJbm5u///u+LrbfeuvjGN74RYxMHLRkcDiqxfH2WQJZAlkCWQJZAlsBUJAAMnnHGGcXuu+9eHHjggcWXvvSlqbSj7UP/93//N7p81d///vfx30kULKITzL/5zW/iyeZBS05lM6jE8vVZAlkCWQJZAlkCU5QAgIQ5+8pXvlI873nPi7nuusxxN8Wu9X20VC5nnnlm8a1vfat48IMfXHzzm98s1l9//b6/m8YF2nrZZZcVP/vZz+JpYozeOuusUzznOc+ZSHN+9KMfFX/9138d3c2DlgwOB5VYvj5LIEsgSyBLIEtgShLARH3ve98rjjjiiJjCBDCU226cb8uYUlfv8FjJnwFDbJiULQ5fzHL5t3/7twgOnSZ+0IMeVNznPveZ2Dj96le/Ki644ILi0Y9+dHz2oCWDw0Ellq/PEsgSyBLIEsgSGLMExNVdddVVMdHxAx/4wOIud7lLfKLXpzH6Z599dsxrd9e73nXkhMdj7kont3ci95JLLolMoVO4QPE555wTgfGsFuOz4YYbFiussEKxyiqrxDYDiOMuNhCnnXZazIXocMpDHvKQgR+ZweHAIss/yBLIEsgSyBLIEhivBP75n/+5+MhHPlJsttlmxd/+7d9GcCheDTgSZ8c96cDBmmuuGcHHvJef//znMdaQLNZee+3oVsYgDgN8JiUrbm9jNMny3//933FTceSRR0b3tYMp97rXvQZuQj6QMrDI8g+yBLIEsgSyBLIExisB8YTf/va3I/BLLuP/+I//KP7pn/4psoc77bRTdK0CjaO+Km28PRn97ljDL37xi8VPf/rTCIYf8YhHFLfccksEy/6fy58k8J//+Z/F17/+9ZjjUEqb7bfffmjwnJnDPKuyBLIEsgSyBOZeAgAG4wlMyQlXLYCG2LA73/nOkWnx7zQL17HTppix1F4HDG644YYIiJ70pCdNs3kTfbbTtqeeemp0o6+++urxgAeXKTftQx/60Im2ZVYfZm47AOPNKGIxP/7xj0fZDDuPM3M4qyOd25UlkCWQJZAl0JkEAIzzzz+/uPnmm2vv+Ytf/KLYbbfdin322Scyc8DktIpnf+1rXyse+9jHRjdqKk4oa+cTn/jEaTVtKs8FlOXq4yYVu4dRddhD7GEd0J9KI6f4UKfXr7766ggMscunnHJK8Xd/93dDA0NdyeBwigOaH50lkCWQJZAlMBkJcNMecsghMWavWgTwc1lipz796U/HYH4s4jQKYOhUrhi7ZcuWxVQkis+xZWIRV1tttWk0bSrPxOgeffTRxZOf/OT4GjhAiGv9v/7rv2I83aIXcxd4tqkRXnDsscfG08mjpja6I7e+6JLO/c8SyBLIEsgSmDsJ/PrXv44xanXxeYCXBMWK14095SlPiTnpplEYe0D27ne/e/Hwhz+8uMc97hGbgTHEHPp81VVXnUbTJv5M4+XwjdfA7bDDDsUjH/nI6Dr1t/8//vGPn3ibZumB5ooNjcMnTrW/5S1vKR71qEeNDAz1MYPDWRrp3JYsgSyBLIEsgbFIwAEGaV9SSpjyQ6SNAQ6xLSuttFJxv/vdb2ruSszYpZdeGt2n9773vW8z9IBhypc3y+lbuhw84Of444+PYFi+Pi5kYNGJ3Gc84xlxPBe1mLOA4XHHHRfjUnfdddc4Z7pys2e38qLOrNzvLIEsgSyBBZKAwxxO/dYliwbIMHMM64orrjjVE8DYsssvv7x4whOecJtL2TCJlfSWDcxQVwBglocfMDRmF110UbHBBhvEXI9f/epX42lcjOrTnva0WW7+2Nvm9PZJJ50UNzJOJQPQdRufYRuSweGwksu/yxLIEridBJyWk4ds2sH8eViyBOokIF4P01THNmENxfg5/MFtW+d6rrtn158BhuINv/Od78RDJ8ml7DnajzFzYncRCn1y4YUXRhlw8yemDACSwsdJ5UUtN954Yzx04rV4W221VZRP17kus1t5UWdX7vdAEpA6geLuFeib4plGDQQeqGEzcjHm5eSTTy4++9nPxl19+YTljDQxN2OBJYCF4pZ1urUulhDociDlYQ97WCfxWsOKWjskd6ZLuLfTO3GdQMUcAgA+X4Siz9ymTigDgtzJ119/fXyXNNZwKehZelF8JDAnYTeWT5zkKPpRfKwDUw4mbbLJJsXTn/70WjZ81DmSweGoEsy/n3sJUNQCxAW0exVR3euPXGOXCzza2XdJ78+6gBk0rh4nQRmvaaYAmXVZ5fZNXgLmI5exeD15AyUHrhbuWqlSAK9pgg4ncK0leQy1s5zfEKPoM2/dmLeSdEZibDG5wDBZSC9En0pDJO7Qm2GArFkv2u9NJRdffHEEtfpoXL3dxVtThmWnbWLIAlv4zGc+s/irv/qrsYgiu5XHItb5uqn8YHYpaP1FLPJpffnLX47V7q+uWLDAkfgYCn5Rip3xD37wg+Kwww4rrr322mLdddeNBmxYxbcocsv9nJwEGGXsjTkJXNS9SoyOc424rWGTBnfRI7rjuuuuiwxneYNpjWE/5a5LbGIXz5uFe+iXPosnBIAVSZz9LY0PljAxpi996UtjLOasF/351Kc+FU++SzPz3e9+N/aBLREnSG8OW5zWtpmRzkiqo3GVzByOS7Jzcl+MGDfHN77xjUhhC9ZetCLWB/MgVUBTnAuXB8VGcXcd+zGr8qbU7Y5POOGE6P7R7+c+97m1zOqs9iG3a/4lABzKi2fT4vRv9TCHefyrX/2q+MlPfhLfOjItcKidjL48jLvsssvtwOH3vve92C4hG/NQ9JW+JHcbbhtrzC6WcP3114+fX3HFFcVaa60VmTFxom984xtnvusIFPPo3e9+d2SiX/CCF8R5BxRiPPWRFwo4HNa75B7iMB2sGqeXJoPDmZ9u022gSQ34CH61q15EcEgxA8nikeoWNIWwfPnyyEpwW83bzr5uBlJK2OTTTz+9+OhHPxpTKdjlk0FdwH/dPfJnWQKjSgDTBuwBTk1stbnKPemUb50LDjgRE+Ye1u+03Mp0TMplCKSmTWZi54GBeXiPcNIdmDVACSD2SkDucgyu78nBmL3zne+8A5gfdc6M8/fm0vvf//7Y9g984AMxzOjtb397ZDvVz3/+8zHesHzQaND22CCwy1zV3qAjrZG5m+ZteR34TLVGBp3XGRzeOjLJZUqwTUpm0EGch+uxhldeeWXccZuIi1bMCzQ+I9S0a6fIMKvbbrttBEeLUMiDC937OzfffPOoqOzynfTMJUtgEhKwNsVzSYZscwI81elu1zHWWJz0tpFy+7BUwIn1Tc9NqwAWXgunH0BqAofSuTgQB1wsdXAI+AE2r371qyMz+MIXvjACQqez9dthIXLAujmt7LDFKEyusS+za+bHoCCp7XxIh57oxCOOOCLGA2KBtYHHCVOKVRz1rS7yOzqk460x5557bgxBkOYnvQ8cEDR39NV89zn3MxDp87b9z+Dw1pEHgMSNpWSbbSfEPF9nUosjs3A33HDD2l33PPdf37ijVDs9C7CuXHLJJXHBebXTIiWntdOn5LEclDxXSgaHdTMkfzYOCUiZtOeee0a9/bKXvSzmeqtuYOkwbjjsv/VZBw4dNBM6Mu33FTudq52AYRno0r8K/bPUvRLGbLvttosnx4Wi6Ks+izGkOxw0MV76DKzrcx3gbzOfgH7vGwY0HXBxf0mixerVeYDa3LPXNRhQB1DYChtlc82mxbPEIAKK2rHRRhv1uk3f74BlbOR6660XPVbue9lll0UZYp/VFNNoTnkmGQr5kShb29qUDA6DlOw+3/Wud8UJScGo83girM2EKF8jCPqaa66JNLg4kGEX6aDPnaXrMWJ2e3awYg7rioBjSs73bXdldfdZSp9RgE996lPjOjnrrLOiEsdsjEPpLiW55LYOJgHAjEEVu/qqV71qoB8LccGSYE4YPC68amEYMf8YE6x+nTsPiOBWZmynWRh3BxdWX3312+kR4Ik7XP+Wsg4G+gBCLC6XMjAO7KrGEZDCcBkL4FHKl2H0qQ0B5u7EE0+M80p2CTaMt0MojGeZC6985SvjmHcFuI2NeZbetGMuYQzpxjPPPDP+u+WWW3bC/mrzmmuuGXWufgGDZZY0saU+893Xvva1mH92EP280OCQAFG9Bx988G0xU9wLUH4Gh0WUA5cGZogCXsRiHmADBRVXc1OZP9K4cI+8/OUvr02RMa8yo7QTS2h3/qxnPWuqyYPnVc7z3i8bL7kxxakOCg4ZeRsyhh7LVMcKWp+8QtVX0SW5cmFiDbE+UoNMq9AlwKET09JllUGgTXo6gABMD+P6TvkTgTPMFVAx6dhgScad1N1ss82KJz/5yRGU6Scdu8UWW0QQBwRzO2ODhQEMUyTi9xwssoM9D33oQyMTm2I6ER4yT7ztbW+L8fS77757jCcfFXiTJ7kaS+5e/TRWL3nJS2IbAEXZHLo6sNiU0L0qM+0hY3O8Lua2en36e6HBIVTtoEWiuhl/O41FPHRRnSAmkjg6ChgdXad4q7+Zx78pFHEwAGL1tVu+Q+ljHiiFuvyH8yiT1Cf9t3awq3vttddIsUHzLKfct2YJJDZnWGBmg8JIYkTqWCagiMvN/esYIkwStyN3JoAwrULfptfjYQ4TUCEfG3RMmhg88XmbbrrpQM3EHIllBIYAUODIoQnxi3UyG+jmLS/WbqwoWb/3ve+NICX1kW2R2DodKgIO6ZVhk31jDI0llo53oxzqQhZCx8TtYTA/+clPRjAHRA77vCQCtlKqIa5bKWz0CzNpPG1e2I9pYAtyBlIH3VQsLDhMsSif+cxnYuCoOAS076IlMG5a2wy+XawTfov8DstbbrklGh/gsLqzFIB86aWXRnePnVkVPDbJdl4+Z2iEYlC4owaOz4tMlko/6D/gvisWY9h+M8wASl3uwTb31A/rsro2/Vb/eIZ4QF7zmtfUxsM66AF8TYNJK/cvubaBVCxT6g/9gtmkh4CMYTxa2Nnjjz8+ulRf+9rXFu94xztiDkFkyKCAoc2Y1F0D/GoHgC4Ep3zIxPgnrwwAzP1Mtw4D1oFpcfI77bRTZIurMdDmOzuPcea2BuiOPfbY+H/AreodqutL02fGDOgVlmbuJbe2FHCAeN0cbbrXLHw+V0mwKRq7DvEGdloGqKnYUTpGj75+/vOfH3eOdp/+ndSCaWrbtD8XM+Gl3lwuXMpLIRv9uGTGcFBodTs+oIh7wk7ULnGpLf5RZcbYMLx23IzWovV/VPlN6/fWNTbNxriXjhxX+wTJq4o5AygAA6lwndJB9Hm/4nfARd3cSzkDAUjxbVU3qs/ZCcBrWOayX/vafg8Q0TXICbZJjNinP/3pmCZK++TIE7qCxAB4HZLT/n7FBo5bXVw9t70k0u5Bb1m/kyrGMs01gMyzxYKmeZDagWGU/cFYNeWUdS0ZAYHnnXdevF7xDPPGPWzm03ibT64py8t8sSFxkAmIFPcq1nHUYi4Dgg7qcWuLRzeGQL52LaUyV8yhCSOGwOESuw4TpLpzSINDcXgXLPBjEOtcDktpILtsK8XjBC5GjHwWtVA2du3mUPWVW75jZCmVt7zlLQPFcsySPNMJSW4cmwBMcZsQAv0XQ8RVJOxgUu6pWZLdUm0Ltkw4DePM9TZJ3WeeASYMs3nDmGJzMD6pOIGJgQHoquuuKnO/8/u6dCeAkXhgmzdMUfWalMIGaAGYuiiJTQdIPDMlcE7xddaJtQOo2FyyWUCDuF0bLf098sgj44sH3MP6si7FIWLnXXv55ZdH5u/Nb35z37Uqhl7KKWwZ1y2Q6PCO+5cBeRd973UP/Qf2yNzhDH2lZ8iorG+S69z1dYeH0jPIhesWyOTKTZt3wFMpA0EgEmvJlezacjE+XmeH5XNNV7H1ACJXNYAPkwD/5G8Ml4VDN3WbmV7ym8Z3cwUOGToLy6RntCmFOnBo4piklNS+++67ZA37OCaMxQk0A0WU91LPqzWKjMgCs8DlVGVP7VDtNCknRqyXIhulDeP8bXKLU9ZYC6cFjbnaz82XYqEYewovl6UjAXOacW2zCei6V9bM5z73uciQJXAoHMNmPRWxYMIVGNcqODRnASRGHciix629KiuYvsPAybSQQEN6BkAINADIgEVTDtNB+w/QYYuAUmw6L5SYZfHIgCGAyv6o+kzH2GRqi/hlORsdZtDvDTbY4DZwmVK6OJwi8TzQRwf1KuQkvtBYYwy9+929uVyx/b2YuV73HfQ7Y5Eq8LzPPvtE4oarv7oxMS5qdTzLz2TnvVv4tNNOi+7gdMgC4DKX2H33TxtW88l4kGEVHLovN34CpYP2zfX6plQBn+e97nWviwemHJAR32j8AH1plWZ9Qz034NCEQrcDfIRPCZmIdekNGDbxdBSLhJR1AHKYSTIPv0lUPYVmAi9F0NPVOABMFBElWo1Fodjt4CmWFGzc1XMndR/rxe4bgwHgMk4f/vCHI5tBwTIgVaOa2oY1lGKD8QOe2xRrlHFflNhMRoMszSHGhzGwrqYZgpAYX8BBsHwvI9xmTAe9pmpIzS8AoexeFAMOxAj5KRdtBhrNU6ddsU4+A+4YZuyMuWyO+ZcHhDHm/WALXOtzY2Hue1sFxk5MWJVVHLRf6Xp6Qoy2TZN7e77/G/MUS5hAhPngczUx907OSnCsb67jNmXDbNaSzqF3HLSoC3Upt5sNBIxcB0Q5PSuEir7CXjWt7WH7Xvc7Y6FvXNtSXtGlgO2BBx4YGcwqOEz36OUyZ6MwoMaT149cUzGOe++9d/wcaKRzAHb3a8pBCw8k4F7Xh16f6R+XNZIAoDdu5SJU7UUvelHUr14zes4558R5bZxtkKqAstezJv3d3IBDC57ioHz233//uKCakDlFZEfJ9Wx3N4lFMumBHeZ5DJms606UbbXVVgvzto8mWVFilI1FX1ViFBN2WgqXSRvYpvYO+jnDQXEa62222SayKMAhxWX9cEcBM3UKDPsEPFN6/TZX1iTDxp0pfgo7kozfoG3udX3yCCQQ1pXB7/XMpu/MD5tP4MA8MZfME7nJuJcYKnJxHX3EgHOPkrXPGbVkIPVnEB3FYIm9BiiqvwOOAHsAXWL7urFNfdKO1IauZOl++pk2CNpn/gBrSmLUPK/8TPpd3JbDFGSJrT700EPjXAICzGWnfRlp8iRXIFIfEAF+4/+e4//mOvBkPBjvroq+YETFCFofDoI48GCj7VVwPBDJDe5a4MEm6xOf+ER09UrpkuyW9lovwK1r9RFjZm70i5H0W/ezTgFp//rMieXEnpkj5uS4NmvGkqtWTkOsmc3mfvvtVxxwwAExrEGsH2BXttPakzYL5nF1/uo7YGj8yJRLuFrSAUrXppPe7ovJqxYysYmwVgbNNuH+gJ5UTNjcrbfeuth5552rj4h/A+TeDU1feq0eAHv44YffgXSo/fGUPpybAykodgMF7FEWTcCQnO0igUOLeNqn9aY07rWPxbpyiXBzpOP3tRcuyIcMOyNepzRSvOGzn/3sgRKLzpLoKE5MB/ALJFDeWBtKz66ewmwCD35rvWEw+hXA8Atf+EJcb/J8UeiMN8XcZTEmTgoKFWFUp1H0iS4Sa6S/ABiGSn8ZIeCGgSRjIMbhOXFOWCa/8zl5AS50FCPILei7XmxK6qvfm7de5eh3wGC5AAk2f8CoU6O9ivYJL2Hguyp0rzmVNhSAiXkG1CXw9qEPfSgyW8nVq990k00/lodbFOCm5+Xtw65JaEyuQAdZyraQ4uoOO+ywwj1tfNzHesaiYejIYBxhEfoIhL3hDW+I4MhYvP71r4+sJp2CcU8JifXdRgKTVLZb5G9Ou5ZshH/oq/WK2e9V/BY4Nu+Eixx11FExrpJcgW4bNSllHMrUpnEUTK5XyWHMHKYRrkTuQBGXsDi/6qEYY2puWgN1847ekWINW0cG9G9dIS+bBbrA87Gzdcyh52CpEUVkM0ghw4997GMR2Fvr/fJ0Gm/M7Vvf+ta4vh1UmeUyN8xh2i0zdk0GLQ2EhSMg1kml6s5klgdrnG1jVLz+jFGlRCjmQbKpj7Nt07o3hqEOHFK4lL2dN+ZwXDvvcfebodb2xHz6N8VHYbeaSgrkZ7T7BXBjfChnscAYGkaCQeq3Rpue3etzhpXhZHCqoKjX77r6jkGyfqQLcajCKwV32GGHyMBbS4AN0AgoA36Mkc1YcrvRYVxvKuBdZg654zAuG2+8cV+dBUg6jcwwe81W2Si6L4PIGAIJntG0kcYwGjcA5SMf+UjjdYPIj1H33LThMv/8n6EFRLHYdBGGK4UrkBGARwYMKgbNvCJv8wj7x23JTS6OjQ2QbcHBRP0vz2V99XzjYK5jcsZpA4y7ZwCxgJHDa0BuOcbR+GPwMXzlguU0j7VT+Id5o63Yx37gEDAGjtzDqXRjqM9p3VknQCdvkXmZ4vYGGct+13J/A0HGFGuW7IkNpfEUe0jnOBSV4h+FMWH4jFHy7pWf4570sg0meTZ5LYBIshZzCaSTWZmJdk/zB1CjLzC9g8bXk6s4Thux3XbbrZW91AaMp1yVGEcymNUyd+CQIuxleCgVCtKCsGirE2ZWB2qc7SILyotyJg8Gf9qvaqIsuRemCby4e+qSWwOFWCAuraTIxjk+47p3Mq7l9UKBG/terBLlbFfPwPXKuwZ4MGjYHHOKsma4yc3YpucyYFxFAAJ3GWPfVLgIxe0AP4CGtjpw4G0KnudejEGTR0CfgVvuOboAcDCGowIEgEaiYUaQfIAqfWH0klFk+MgMUyYEhkuNHP0Wu4jdYcQYPScrtUt7zTdrk7uM0Qd8gFDrFnAQN60CWdav+zNAZOHe5eJ5+s0Q+v7ss8+O92YkqzJwL+AhxWw1gcimsar73L1SG31vfdPZxhWY1gdsj/lCblhAmwvjSbbmm419uZCXPmBZHTzATvvbHMMOVlOTkZvNnXvaCJMxQG1eVGPG6vow6Gf6Ydyxlw7ZOJyAmEjx8AkcyhRQLpi3tIYAdQygtWN+9ztMRHeZY+YJ+R500EG3i83TJu84Jv8mgDVoP6vXpwMz5n05LMczvaUFcASQjLmxTyEs+snlzCVf3gwZHyd/tR24oifqbL05L6bRZss88m/ZpWy8bYzNM/PfqW+AtUlnVPuV/tZOz+cyT14UILPOfV2+B3kYQ+NLRimcpOk50/p8bsChRYTRaYqRSgK2g7KrsLgMbhcKL92b0rUYMQJ1k3Zag9zruclYit9hUEzYlBA8/c41DIkdu3/9becJOPm3alR6Pa/Nd3aMhxxySAwqFoNTVZpt7jHqNRS2seQGqAZ+M9aAgJ1+130ftd2D/J6SpjiTW4nRBkqwSr0UHLclGbi2V/8BOK4wBnfHHXeM97QuEliixLmWgEfA0PoF+Cjq6rq0vrEnQJR1Zk4wlIndEo+2xx57RFdaUxwooGNuifkB7rEyywPDh5GjC4Yt5MfNyQBbG+J2bTyxMWU94P+MJLaE90KfGCmHBcwnDAsjaR2ac65zP4YHeN4mxIW6Xr8ZFWuRYcGmAB9inoQD+J21AxyUXYbuRfeRnzEmKy4xhrqqr1wrXQoDLsSkq000cGhsy+DGs8wF8sKqpVerYb4ABPMCO0OmgB3mE6BJbQb+6Anzkix8BxylU6vVcSUXMjWHuHIBbswo2Xzwgx+MsqzOv+o9Bv3bOAHwXOLGRD8U8qBnrKOqniNzsgGIsGtA3k0hJMD492qfOZJeYgBAWRdkWh5DsqvqtUH71O9689r6wuoC7uZRKsbffE5j7G/zkBzI32YPqyZUwOf6jcCwDqwRoQDVOPB0bxsD69xr68iWjqB7jLnPsYlStZlXmGWMc53LuV///M46okusX7qJy1x4Dnc3oEj3VXUkvWP9a7/vqmuv33Mn9f3cgEPKhdKoKuSqIIFDhsigdslKUbgWgbgW7jOKvjopTAgGivIa126t2t9+f1MkWBSKEdNhAQG36ZSyNjO80k/4LrmD/I6Rt8Ozu6OImxZrvzak7xlLijDFBlnkdn5Vpdn2ftXr9AMTQTmTPyOqn+aM/5sPaf6Ia9F3YIVbS98VMjKumAcurGEWtvnHkHk2WdfFNFbbPo6/U2yPNaGQiz5rm/6b09YVxU0uKiVKwZqjVg/+AAAgAElEQVTHvXJgctUI0gZigBZgJcmKwcMC2AAAVZQpJiuNTVWmrneteCsbFwwaA6JdjKs4MvNTWIR5DFzVzUX9Ev/lPhS0PhhzemOUYi6IpyJH7lCGq8l4k0fSAWSr/YCCPgEA5ldy8+u3NgNwjKx+AQbmMfBjrLisjYNnA8/GKLGTVf3jWeYxoEL+QLk5SF9V20uXpZQqTvNWx2RYedl8ehZAp/1CDDCmNvU2G/pi7PQHY4iFZYQZ2wSqtR3DWm5zkoMNrHlnc0cH14Fap131h5wAZGAe6DAO5M02VOUxbH/T7zyPzgFi9TulxgJc6BiMejVdFt1A9vSsTSqwDiTVZeDwHPNF/81FMiATYRw2W13aurayIMd/+Id/iOzge97znsj2mWtpbeoHHWrdOvxmbiMcrGtAGrPJS2AuWjfmKjnayPXavCb7KjyDHjKuGPM0f8iaXRFf7Tnm3jDjjRihu61L68pY2kyZQ4CsuEp98j39Zzy1AXAHTrVhmOfWyZ8uYT8HZT/r7pU+mytwaNH1W9iuEZQ96nsUq0KlhEzcdELMpLBTSouS0cKi2EFZrCZ+neKq3reLvxlCbhs7HIuE4qVI0iJlLAXUAnzAnsWjbSabnbhYFSwFN5h+AWuYI4uAotW3xFqUlZDfU3xcPXZw7m03WZdDT3s8H4NJOVAcDAOQQo5d7HLtFC3MFLPERZXcSJ6vJjecPmk74GHBW8SMie+BO/03jsacAtJ2CiuB6uq4uTewZXfJuBsD8rELdmih6XfV+3T5NyVLJgy2fjE8AAPGLx1S0T/tBBz1gZLm1iMP8TaAFWBHNglAuI5SB2CweIx+YgvNReMqdgyDwwXItQuIMI7WZbqPvnqunT4Dw32MDWD0khL0LGOoXXbtFL3v64yhzYa+celQ1vpqnqW2DSNb+sT8JhNrQH+bFD45Amh+Y+4BieRP9q94xSviBisBQ20xx7QXcMGe6Kf/W7eMrL/1BfsF5JhbNnoMrv7rV1mW1qB70gE2POZsysNW7jtdQd6MKsDaK8RgEJkZI3MNgNUHchO3Rdcw1J5rjVh3GGXzy+fy/SXXsPnDCFfDXvQXKPdbhpeOMe+qRRusf+uN7LkEsVeYKgbdmIyz0BFlYJMYc7q1OmcBD/OCvOhk68B6SDoqtdMaIDvhBuaHcXWNOQaYVO87zv6V720uA1/aR7Y2OfpgnMxbY0QW2mj9YN+AQ3NWOIbcjK4D9K1385muTZvVpn7YwHLfA4fkYu7QdWyI+9FV7BCsUF4fTffr9bkNmLFRk45nL/SHnmNHjIt1SR76QQeYx9o4ajFf2RPPtFa6xDVzAw4tGooHGm8acIOXgukZZEyFYqKUlXIaMPc0kJQppUq5m9AmV3W3YeKa6AyTSWHQPC8Vk4XS8nzsQPm7USdI3e+1lRK1I6P8/J8y1CffKf7GevhebA6wJ0dkUsQUNZaIEjfp9BFzw0gr7kkZYSzSzi+xfEADJXzGGWdE+bmXSWxBGKNqIS/PATYBB3I34SkMCrQLcAgQMKoUsX5RFFxVic2xYBOLBMS73ljpE+Bi50cZJPDkb7/Vf4YUOKhjOckbuD7uuOMia0VRMbjiXfQZyJwGOAT0janNEqNK5kCGtlLMjArDTSbArD6awwxPcnFRfhQe4A/oWRvGzUaIcbLpSC6bBAxtAMy75Eal/G1crJ/qe7z9hpywAVgUQKjMiFnrQJJ7aZ91xbDUbbyAMm3XN+0FDjFSjO+wxdrRdmAawKh7bro3+ZK1NtMT1p/2Jja07Gr1mzQfgQTuYgdM3MMatV7Ji+zdz7/mtM1PKtW2WK/0mE2A+YZVSms5/cY1GDtrFmPnOV2xEQy79jOkNgY2EIpTvPrqJDevAT3ue65QY86Ip0JPkLkNSbV/1hTdS4dYm9Z3tei7a4BTa9zcE7NoPDBudYxz9R5d/U0vYJzoEO2tK2VjTw7mPtBjHpsv1iZ56BPZWgs2EnSUsfRdL3Bv/tk0aAMd13X/zV2HR9ybTrDu2UAbKNW69hldU7bB+mkDgGlNha6xabHJs+aMb507mE6z6QaSyZcOdx9rVO1qPlfHyzrUH/JW6Rv6lA3TZnrVPKfDrPmmk9bV+/b62/y10bNebUy7LHMDDk1uyseEsnAoXgbNv4wGcGKwgBiT0cQCOgwUxVCemBaVQbXgDKj7+r1nKEADgANUlienCW1xmugmR5mRYBQsPAqXG7aq2LoaVItdP7nrGHJKwoQFBBhewIQxTIYeZc8AmLzAISWVjKV7AcN+bxJW3xTCCFt0gK/JSREBR+QOeNspkrH7WxQCsfW9DhxScpQH2XqO6xOzMqrbL8kWKFQBFowk5ep5VabHsy04LhEGtByPxgADP2mHC/wCs1ifpnxpDDLDw32FBcEaM+yUBgORwHpXc6B6H/2hkBkP8z0Vc9W8MDcZY2NvF28sjZHvysV8cC9KECtjrBlibIDYMEwhkAbMWXeUH/mmYg4BZMuDi1TON/K1Do4NeeDMGX9Xn2ktW4vabYNQdZW6t3sYV4Hl5kovoM1YYS6seXPRM6ug7Had7vMH2QEzdAHQ06tYX9YZOafxN/fohLpYae0yDoycTYV1Jv0I2Vc3s3SNz+gp88m/9E2a28YOiwIcMZAARNWdbMwwPDZx2mQDXWd8e/Wx13eebU2TGYBjTopF9Sz/T3OJ8TYuDHyZkXZv42s+0FHVdWNTS/fSWTZ9dSDAZox+dx9gCzgGtlN8Zt386tWnYb+zjrQFO8qu1AHZ6r3pGDqWbuI2ppfdx/wzn2xOEhAzz7GyXJvmgTH3r/55Hv1PBta69WucjXd1/VXbMMzf2mke0wWeZZytBfrIuFs31mS/E9j6AOgZfzqGLm2an8behpdc3Nt8mHSxftlclR4jb/PfOPTSUYO0ky6mh+lHeqXLsiTBIUXHmJhYgJCJbicBiFBAJo5BSO6+BA7tkLh9KZW0oAi2rETsNPye0Xe9HY+Fa2Ji3SgRChT44nIRdJrcpBS0yWqHY2KUQYcF6W8LoQsWrG4SaB/Fx/hSDIwKIGT3zegng2KiYhjID8gR88ElJaDeQk4KkgJm9FxDRuKpqiwLWZqgDLT+WQAYQ7Fd7i+gGDNmxwdMVo1a6gf5+B2jQMH72zhTcgxnl0Ubmk7Ept08pQlAlE86ao85xbgxrBSdoGkyZ7CrMUPabO65zulVykwAtPlik0J5kW1K49BlH9O9EjPAbQswlMGhceb2AdopbAqcImOwsEd77rnn7cCYNQdgaD+Dbk6JhSIT9xB+YMzFRnH/uldyaRlPaw84TIyh5zOQ4kwTe1YF6uaW9WItJuBTvUZfXWdcm+aXayhk65KeAFzf//731zJQg4xDYiurJ2Kr97A26SibTfNAe60VfcGQ1bXbZwyq9kqa++pXvzq2uw700IPWuzloDvu7rIMAd5tFY+WkLHdl2UBpnznJnWttAI9NsW3VvrX925oiLzrUvNcO84gs6E1rg+GnI+nb8ubaM5J3CLDwf8CoXPwNPJkn7l8t1oIwGdfoOzccFtl8NhfpPvc2b+kz7RpX0Vaytmkk6zaGHdDhndA+utIYazt2Efgpu4/pXBsRIFK4hbE0H8iUbSQj69lG19/0V1eb8CaZsR2ek9z9xkMftLvc9qbfWw/Gy0ZJqdMD6bf0DRKIfGwcp13MJ/IfZSNa1wfeGQQGWVbXS931g3y2pMAhpYd9oOCwLhQJhUPhWvAYGq47k4YChdApHYqGgQEy/G33YcFUJyTDZrHabVlMXKAmchkQGQRsmwBbgMq9KRnFM90fWHBduSRFVqfYBxmwpmsBPrJgfDFUjAqWgQGv7obJD1jgVpGk1e6cfMiNwqB4UyFbhcGoAkOf+x5goLiAaMqV0gPSnQqltNzTggbEmwyOZxpDStK4ADF+B7BMcnFrB8DCUHBdlQ0ohUrGQB0jLFcXo6tPXKp14JBhl86FYts3pE5wPwoZq2o+6l9Xu8i6ucEY28gApxIFVwtwmFipFItrQwHMA3jmRlLCxtb645JNxsx3GEinMI0vVpQcsMVld6C1hfmyDuQEoyzNHevQ/GzKM0bhYTTMU2y0e9swDGO4ky7QDkYG+B+1JHbOZpN+ajJY5oFNgn5z/5hnwJx+aEeTYjcmwLr1JcF3nf6w9q0dAJrc/a09xkh7bHgl6+VFMKcB8fJa1habA5tEegNo60I2dbLVHu0yt6oHXfStF8MDvNh4kzNdU9Vr+qyvxqS8CUrtIBffkzWQZXOfNurAPUBlU6t9aS3T7+ZN0/jU9bHNZ/RLOlhBf7RhDt3X7zBsbVg2oIEHi/seIAcCgSZ6R7UpNdb6rc9d97GfHMz9QTf+dI/aryRP1lohHGOUTAT9njML349r3JYMODSxLWzxXXZDFAEFkNIVJGMDGEHnFnV590mhAHPuIQC+CgwpSKAQuGKwxcHUTSoTGlBC4Ttp536pUG52KsCD55ULYKHUMQRdTDDPxN6IS3IqDGNXN2kALqwot46FQ0HbvTFclCdFRbkqiSnjbqpTtvroXow89wwDhrG0q33Tm94UFT25YiQYdjFFTW4L92IsyY8cJbA15oDAOMFTVfbai8kyr7SlDEIYeGCQXBhtoM88IkN9NwerhWwYXu53cmXAsY3uww1ajbGr/n7Uv81PstcXCZmrxc7TfDYfbBiAPHObDKyzXXfd9bZ5ZDPGIAOM1XlMThgf39ssmUdl2THsNm+epy1AIkNMNuZKkxzMBXNLG51YTn9XY36r/ar7G4gFWDFo5lZVB9T9pt9nNi70jQ0jAFznFTCnADwbWrpFO6w1646MyKMJVNpoYkCMSVN7zTHr1/0wi9aStjjIZXMgv54+aycQUDbI2mYjZ9ytM3oPQBwGfPeTVfKy6D9mr6nPTfex7vzG/JOeJempdL35pT/mYd1G1m8xldYiEF3W7+alTYv5vk1IsQIQmiMAOaa7zhY0tbPt5+a19QIYNo1t23vVXWe89VNdtMJ7odgMGctcBpfAkgCHlII4mPT6ITEim2++eWTFGAuGFgNBoTUFZVKcYgiBtMT0lcVFAYubwipSEv2UAeVO2ZR3rxY4kEBZe15iFTwHmNUPhiABx0GVY9Pwui/2B/gFDDEAdcrdc4FfJ/QoZ25D1+kLw68w2ql9ZJVYUAq5WrBIUohwazB62AuuM4qWMXNfYEjyWswaANBEq2sH+SU33ThdrdV+lP9mEMT0MBLVXa3+Yf2M7cEHHxx33TYj5lxTv9yP0WIA7N4ZHrE2fs9QjcMolPtDruaZMSVbG4bq3OAaBui53LApWCOsKIBRBrzaj7moY3LdW5Jrc98cr25MgEkG23xyLeXNreu0rE1K1Zib09qZ/tUer6faa6+94pwie0q/2pdeY6vdWBKbKLGjXbw2zabJPckO2NWfapswrtgbDK65YK6ItSOHfsXGjO5oYvKsMcA+ney1qcGuAePGSpuEwXhrSzqBn3SWOQEYyiFo42NzoD9d6aVq32zWzbVhi3nl8Ahm272qBXONYbbmqpsX1+pX0wlR65AOw66mlDFka2zHpYswuGou3UsAXrDe2zKy3bdg6d9xybxbWZJSAEVOLKDG7ja5WChQRqeJlTJMwB8lbSdRZ9y4o7kWsIp131eHGiClXMu7kgQOfY6xoVyUpOApa8bB2wiAJ0CjiwKQUWpYgd133/0OxskzGFkxYdyZcokxsomRs9vmGgYsuSGSYgX+MJIpFUC5rX4DDFDEYqgYFdf7m5JmIMmA+wj7h5notVAZLKwOAM/1MY3CWGOygA8MTDWODFtIzvoJ6HJNGWPzpQnkmaPmg/kLBAHO2FXAsM6Add1vbQNejaMAf/Goxq5cbGi4avRf//TFeDKWCRz6DjgEbKrjCCzrU9qt23xVDSo2B5NlLTDQGBlAwZyrXgtgcv1qM3coxtD8dfDHptD7iMXglU/mtpGbOYa1okew2V0U8sHMkK1Nl1CNauGRAEatN2BDjJn+VMeh+jt/A9nmiY1JtRgTp3vNLeNXBj42ecZSaAfGWIwsOXuu3/ke2ykMwHpzGMy6rbpqq8+c9t/WUx07q13An/muH8MW44kgMC/NNTYl2Zlh75l/N1kJ8EDZ7LL1VV012ZYs7actCeYQ0BCsjMnhrqoaVcaJ8mRw6wqFaLIw7piR6s7YrpmiZKwAp+r31XvaqWMBXO/ARioUizZSJuL6AAf/Bya0Uc48z3EdVwWg0EUBfDEFAEvdiUnxF5gqaWeAX0yBZydmhrHQRqc3/T71H3PIgAG1ZQUJ7Di8ktzH4tYYFffzHeNORoy5+woFoGTr3K6p/2nnzlWPFQIoJ10AFzmpsKoAU9VQAr7kAPxw22OGXcMIM0jJaLnOfAQUMDqJcTOHxc8xYHUM3jj6q73iZjFvNgZy4FGY5gG3P9bXBgcroy+YJONorMrjBYhhsNyrunkSqoC1ts6EDmBDqmDZva0th5qwWH5jvQJN5hGZJQCKhdMGoAvTDRySF3aROxEQwljbCJkrqvtbb1y3+lQduyRbgB/wHRRY9hobgJMuMM5YcmwdPZXWkUNWWErPTjFs1lav9ZCeR9bGCQAE7hLbaUPI02GOGUsgTztSMRYYcCEPKUeicTdXMad0kdABQNnJcYa0SWa9+j6N73rp5zYy7dfmDAb7SWi2v2dj6ROexbo48Nlu/ey0bkmAQ+LCaCUAUhYfJYuhwsg1vbHB94wG4Ia9qRasmZ00AFPnrnA90IMtBLAoZcwl90YZxDBojBglDpAlZsABBywhkIVlk26Agaq63qrtavu3hcAYYCaS4sQGYHK4iiwWsnMggaHCMCZDoN+YMm0FcMrAO50YLrfTrgxb4cACNpAMAAuFISM/LBLA6r5iB41LFSxU+0Y22A2uQ6daAZZqTFH1N13+ra3a7aQ61gBDVnUPipliYIUckBVA7gTpsSEVCyYKsCZPIIpLVvttHhJgMHfcu24ed9mX6r2AKoyVscHIiROVyiflS9Me68e8KKeeKd/HHEqsYXXeWlfkYNMBOHtOVXb+Nk+tC7/n/iNzsvOdNjDKZJhybQI35g4G03euo+yx7sYBcATEgPqdd945/kvWwk+0oy5W1ZhYn0BpV0Xbyc362jccOtIGa8RmQZutdf/qQ1qfZFGVY1179BNDDUwDcdaJYp1i2gFtfbX2EjAyHphZOs96SsAPg2zTIgTFOqYLyDq1r+75+bMsgaUmAfG11gYCJAP94UdvyYDDpkFmiAEvCrHJrex7ytD3dadlgSDgzzOadp6MPoWPWeEesyPHYFSvdw+KWnyP39jZM2KYRIHQDEhS5IlVo7yBxqT4Bx1ORp2hwQhgQQFm7WSItScl3GRkGdfyzlu/U+yT55e/S/93DWMG8GGfGG3uYkba/RIQYHTFFgLbKSM8EGKM3IPxxpwxpFge7QNKACjtl9JDzBTAYJzs/HqxBIPKqdf12qhf5IdpqQOmCRgmoEJeQImNi5AF88h3wCNgIE6MksIYGXPsD1d8CoifJDsKTJCn9lgHKRTDvDRfAKmUEqMqJ7IBfvXfb6vAj6xsEqwFMql+7342H0IGbFYAF0wXcAhEJ3Do9zYaZCUuk5I3j20WMFyAI/naOGCrtZkr18EgLKP2uQc52xBiOX1W3vD4vd+5f5dFv60v8crY0ZSyR3+qng7P9Zl5g60nvzqZpesw2UAgsKdf+oAltO6Nh/lV/r3NQDpoRm6uV6xVn2MiAVqycY+mZ3cpn3yvLIFJSIDNxYrbCGXWcDSJLxlw2NRNxg0QY/jqmAK/Y4QUhjExZuX7UbBYEUwKo2lSMTIMGsNp1+5zrAsXDlBkt10HIChi93N6EEASiE6hM2x+Q1kDRgAr1sP33I2jKGhGHeuGmZLbygIBtrjtMFxAF4Nbx97pZzoMwPWtbQnwMmz6yBWFtXBv8gZwucWrJ3TdHxAVlI/x0UdxY+JB9Y8MUhymf8lTsLwYH23UD8bVs7B4mKg6MNI0F0b5nHFnrBlaoK5unlQ/IydjaoeaQLnxJ3v3SSlXsLoYQ98BDWLmBEwz+oy8PtogjDIH2vTd/fWTrBWAHfsJ1Bo7Y10HxrU7Jaktp6dJz/Sb6uGdantsAoAbGxHjqr/63VSAJyBdjPGBBx4Y54416nNy1xdr0j1tXMwn3wFRWG1y5tI3p4wRIGTzAoyax/3a29SuXp9rH5DMU2Btp7evpPVU/q25pP9c4/02hcYFoLNxssl1P5/V3dczfG5tquVCZvSPmkuWwLxJgD6jD5AO1kqTF3De+j2u/tw5uEH2HdfNJ3Hf9BJrbrOmdBhYAkAHYKkqTG0EjhgtYAbrhSET05Mqd7IJx9hvE06bYr7q2IDUX8YW6MN6KJjGdHqQUseIJNeedAZ284DtsODAPRk/hhAI1E9GCkvn/1isKrBJbfVMIPjYwNZZXIw2YMPAAAWAJoOaZIjpEOPlnnXGCcgAlvSZ8QMmtEnbjI/7kx3A5J5kDSQC0xgivxcbysAmoE7udc9KfejiX33VbkpFu+tAUtNzgEFsFvABxGhvmQ0iY30GBn2v7zYs5of++64JkDY9s4vPtUvbtdW/TfPPmCwLDJM2Vk8Vt22HNWGjRcbmfNOz0v3IxLXWLfCn2qTZwKhAkjULXLsf8KptgI9x0B9z1+bE+hXXKMxCtc6tj6bMBm37VL1On8wj8132BIDO/K/blKVrscxt51qaR/rW9jfVNua/swTmUQI2h0gIB6uETrBR1mE/PTOPsuiqT3cKhur22Zq7uvOE7sOViokRqC6Gpq4wKtWYvOp1rpEPjrEGWgCmFAcFuGEaGKx0irVJOQNYDJIDAIwXdzEmUhu51fzfgQ0GmQvWJK4zHtX2jfNvhtYJasCYSwyzpH0KgIb5dA1Xbx24HrZtZAx0A8vAIEYHsGLUBcsDhOKtuCDbJD4dth2T/p1+Sx0EFFNo+sYtmmQ+6fZM6nn6DeQ1MfxN7UiK33pKLKH1nBhagLtu82DOWs82HhgFrLd1C/ybV+Ni0Mxfa1ssoFhMRiqXLIEsgfFIIB1kWx4yMYgZR96IaUaY5DK8BJY8OBRzBHgdeuiht7nLhhfH+H7pFCw2EeuBnWI8sGmzUABagJgBxW5hYCa948IsAadAk8MC2iIm0wL3qq9R8qPNgoxzG6YvASATQB33ZsxznAq3uWSkmnIUTl8iuQVZAktfArwwMmJ4AYT4aOmveM3GETqy9KXVvgdLOuYQewDYUMYYBX9PGtS0FbVYRXUWCzaFW7SLpMDD9g8LlF6N5AQlsMj9ZzzLKTqGvX/+XZYAdrGOYRyHZKypJe6UGYdY8j2zBDqXAKaeB4YXSvxu9fWQnT9wQW64ZJJg140H4CAIHEAUfA5QLFQREPAfof421Nu/rW/JiwFYTIcJ8g5wyQ/nQnUAKMR6001Nsb4LJZDc2SyBMUqAN8CBNzgAwSE0qSnsa4zNmLtbL2lwaDQccpAaxOnPurcIzN2IlTsEGB4Q6pGh/ttc9zR3LktgyUgAOBQW4WBMv5PIS6ZTuaFZAjMqgQQObcQcTstrrpuBWtJuZSJwSEKuObnT7NQXqvx36O3PQz0z1L8MdadQ77RQEsidzRKYigSc4JdfkZtafFN61SJDJeelOCjxu5n1nsrw5IcukASElTlQai16UUGvTCILJJaRu7rkwSH62E5hIXcL3jC3V6iHhLo81CeG+oyR50S+QZZAlkCDBJx49qrA008/PWYjeOlLXxpPTaci9tlJe5tWaWyyoWoQZP44S6BDCVhnKZ9pDuXoRrDTB4fnhY54WcHTQl3WTaeWzF3EDI7C9Bk9eYQ3CvVToZ4a6hNCveeSkUBuaJbAzEuAmxgQPPHEEyMwlCJnzTXXjGmt5DIsA0C5HDGKKeXVrB6Qm3mh5wZmCbSUgAOLvIfiDpFEec21FFyfy6YPDi8OLfxKqN8L9SWhNr80oU9XlsjXPwvtXB7qNaE+NdRNR2z3ncPvAetvhvqlUIHtzUe8Z/55lkCWQJQAsOcVkEceeWRMpi0Z+GabbRZf31d9NZ8DcXJ1SsW0yy67zL1L+Tvf+U7MEiGP4yRfBZmnZpZAWQLCyeQUdWp5UtkIFmEEpg8O1wxivjpUcXOPCPVhoU6/Vd2P/X+FW14V6lmhfjdUeXH/pqPHrBju85xQvx8q9pBr+UEd3TvfJktgQSXgrUbejX7IIYfENxwlUOhd4HVvipHD9PLLL4/xh95MNO8uZW+Q4kL38gGxXvOexH1Bl8HMdxsgrFuPM9/wGW/g9GHYekFC/xrqYaFeHiqwCCTOU/nf0JlLQj051F+G+sxQ1wl1lQ47+dhwr2eH+slQzw51+w7vnW+VJbCAEhBfKHG9HGp77713sfbaazcm0OZ6loBXsnv5TBchnYa4Suxheo1hemf3Ak6V3OUsgbmTwPRT2dw1yHTdUIGbr4d6ZahL+oV+lTki/+AVoZ4Q6m9CfWWou4b6pFD/HMde+dEQf/5V+M2TQ3UoBQj9xRD3yD9ZSAl4RSIgJGYnlz9LQK7Ca6+9NqbH8IaeXm9W4X72hh8pbDbddNPbHVKZV5muscYa8U1P3ol+wQUXxNeC5pIlkCUwHxKYPjgkRy5W8XdsEyA1Tzrm26E/HwtVTkLAcKNQe4HC/wnf/yrUm0P9Qag/DNWBnTaFS55L+ZZQxXHOE8hu0/98zVAS+PGPf1ycf/75xVe+8pXIAuXyJwlIkSGOybub+xXgWq5V705/xjOesRDJr7nzuNq9o/rKK6+MsZm5ZAlkCcyHBGYDHJLlWqFyszqocWmo8wBs/j3049BQgbWtQ+VKbjqdzPX8o1CvDvWMUI8J9fBb/z03/PvjUPsVLOyjQ8UenhTqH/r9IH+fJRD2LSFWzgnbj3zkI8X1118f3zSQSxFjBr1WUt7CXoW8JOD/6le/Wmy00UYx9m5RTkw+8pGPjG50h3EcxHFAJZcsgU9HGlAAACAASURBVCyBpS+B2QGHqwZh/n2okjo7cbvUCQzg9pxQMaEvD5XrfIVQm8pPwhdvCnWzUN8W6oWhYg0vC/Vdob4zVACyX3lAuGCtUJ0C51rOdr6fxBb++8c97nGF6vDFhz/84Rhjl0s4LxaA4aMf/ejiy1/+ciG5dVPhjudaxR5usskmTZfN7ecbbLBB8YhHPKL4+te/Ht3qucyuBDDhAHx+7/fsjtGstGx2wKGWPCfU1UPlnVg+KyIash020B8KlZvXIRsxgb0KQOxAzgtD9X/g7sRQxQ/uGSqw+K1Q+zGq9w7XrBGqFDdfDDVv5IMQcuklAUzXeuutF12E3/3ud4t99tknulMXvXARS1lz0003Fdddd10jQJTi5oorrigcyAAmF62Qk7yOYldPOeWURev+kumvNW0DeNZZZ8VcnblkCfSSwJ33DaXXBRP9TkqWfwl1eaiYQ/F5TW7YiTZswIexq+IMHa7ZI1RuXmCtVxF3yS3s9LbDOV6Hp+/YRiecnUD2nbjCXjLx3e9DtYHnin5uqO6bS5ZADwl4DzAgJA0LA+/kLYO/yEVMnbjDq666Kh7WefrTn36HgyYMrnQuF154YbHddtsVK6200pIQ2S9+8Yt4iET+xp/97GfxVX/eNjVsEZcpxyPwscoqqxQPfOADh71V/t0YJGAeGx+HpazxpzzlKTn9yxjkPE+3HE8qG+yWpNZiB68N9aehPiZU6VWAm6bioAYg9bhQsWQADqC0lIq+/zbU40LdOFREQi93cuqbmPdtQ71bqGUw53CKvIjA5aPSxX3+vXv4Hnt4eKiAYi5ZAn0ksMIKKxQrrrhi8dznPjcCw6OPPrpYeeWVixe+8IWF7xaxiBvkWpbC5oQTTij22GOP4h73uMftRIFpBYgSezaKnC6++OLim9/8ZnT5AaP3ve99YwyjN0B0WeQn/MQnPlGcffbZESBcc8018TWAoyQQBg6f9rSnxdQ2J598crHaaqt12eTW93JqHBDKee/+JDKbAKy3eerfG2+8sfj1r38dPQPm2aLExraeQPnC2yTQLThMoPBT4f5cpJgrdoWrc+VQ/7qF5G28nxLqsaFyrS41cIjxxBg6hPL8UO8bai+mL3wdi0075rRcMJBc7FhDLve29wIOgWwHXP45VMm2ux3pcMNcJiUBSpzb0oligGHjjTcuHvKQh3T+eIYCyJG2xSGMAw88MMYicpUu6vtK73Wve0Vw+N73vjeCQG9iKCd7BqwcRnEow7XDFmPstO8ll1xS/OY3v4ngEND57Gc/Wzj0IZ2OZxv/UQy6A0fHHXdcTLvz5je/OZ409pxRxxewlPibjJzaBkLce5JFAnKvOJSCSJjEC17wggjuF7lwH8tCYB5JNQQ4n3nmmZEFt/HIb7ZZ5NnRu+/duJWBQiEMHwj12FC/HCqvwgahvijU9UN12OTBofbzXHCnOkgBXP4uVPHdbcBVuKyr8qtf/SoqGKcQB876L2XNZ0MFErcJ9T6hDtN+fb8oVAwkYPe6UMmvTSFjTCPmcJ1Q/y7UwMpKU6Jv3vZAmY9qENo0JV8zmgTMQW7eT37ykwVmyalQYOFhD+tFwQ//TK5FrAsQwlX605/+tJDPrsqYDf+EpfVL6wRzCvBYN2V3HNmcccYZ8bT3q171qiizYQvA572w2FrP4OIHttxTLJ9UMcuXL49AnUEfhuXT3uOPP77AHNpgiDF9zGMeE18D2AU7rP3AiIMpckJOOim2+ap/ZEVm3Nte7bfIxTwxFv41b2z2vALSW21sMLsY90WW7zz3vRs+SR6+Y0M9MlTuY6dzgUHuYWxYv3i7cMltRYuAGffhVr451GV//nrc/5OOwlsR7HwtIrvPgZRcYg7XDC11CGUYYKiTcj5iIJeHikkdpACHWFpg8qZQQ5v+eLc/Fp///OfjLtLukSIHAriDKAlGieG5y1349nOZFQlIMYPp4Vp0EhYoHHc8lxQuYtB22mmn4t3vfnex1lprRWbMO0wXrQBt97znPWOslnEQVwiwAdFAkByRQEgXLNmqq65aqKnYCNjM/ehHP4ppYhwkOOigg4r99tsvzoNBAKLT1phn7CR9tuGGG97GdHb1mj9Agw4BOM8777zi5S9/+URfIWjThBETHuEVh6OA9XmZ5+Yud78NAMIjuZKBxIGJj3kRSu5HKwmMDg65PqUBAwxtnHcOFVt1z1bPr78IqBGyIg0MgLSs/rJxfCoVw2mnnVY4gWhR2b0PBA6dDhYjuG2oo+AsDCrXMNc01zAWEOh+RqhtAKeRfUSoPwn11rhDLBSjJt7klltuie4khoHR99ovypVi12dgJAPFILsplssuu6w46qij4o7/ZS97WfHYxz42jsko7su23bF5sDE6/fTTo0vqUY96VARBgwCSts+a9eswL1zt8kBym3ptnHXEjak861nP6vn2lGH7Z6wdFFIZc5u4bbfdtth8882j+3+QuDrub2vcuhZH6p7jKNq4+uqrR/e49D6TjD30LIBHKiapdeizXMLZxjB/ER1qLlkCbSUwOjjEGn4lVCDkfaGuG+rtY7bbtuXP12Eb03uHAcQtB7/FsL8AjuTtEp8BFDLIrQv3OrBMJnTvIIxp9SFCZV4QKpB8fqinhyo1DjZWaFM/97zvhaUBlqFNjBk3EoOfGAlKFDPhXycynboESLAXduCUbd59B/lNuGB2uQDlHOT6x1bZqKSdPhYIm3T11VdHxf/gBz84MjYA3SgnTsvdxJjZNGAPd99995jgGSjCyixaMQbA8Zprrhm9CsAPFsYGktwnAYBs4riatcUhg0FSDXH1Ck3wG7F4QIKYUp+bU8bUCVb3HiWe0bywceGFcE+noW00R71n2/kGLHPJ55IlkCUwugRGB4c/D42Q7PkBoYovdNp21IJxu1+oAJbTzhI59wNDoz7z1t8zAJQ9+n0odwuAiNlrw+71a7PRWRbqy0Llat8hVAdUnh4qZrFX8XwnoLnmb83fyxAkgAH0AcKpbL/99tFNduqpp8ZYM24srjSMybjdmL26sWjfAYaSKR977LHFDTfcULzrXe8qnvrUp97OBST2TfzZnnvuWTzxiU+McVXPec5zolHGlnAldcHwAZoOYzC4F110UXyWAP9JGftZGnuycKJ3r732iuwhYM6N6lV5kwjql7iYS9jGwGag13ueq3Kz4dNeh1qk2pHU22dOpQNzQH9ilrjHxZeOMsZ0Cx1Kjzjh3cVcrPYp/50lkCUwXgmMBrmANu9BBkC8GxkYabrjH8J3Dq38NFSHNoCoXoVbmlv0+6FKDdPv+l73GvA7incoYAiQSUNDDjeH2vxShcFa5PSx097LQsXStklsrS1CxBxsIfs+hTHAiAAjBxxwQAQY0pmcdNJJ8eRkLuOXQEphIsXI4YcfXrzhDW+IbFX1MIiDRdgjn7/yla+MByKkK5W8WowiVkhAfhdvQTAvttpqq3i6VTqMRX09GjlI8wM8OfTARcurALiPuySm+LDDDotrVDwdlrhNcfLZRsMGD5CVzuQDH/hA3FyYHxhoaW122223OId4D37yk5+MNM42EMChk9HSpuTXMbYZqXxNlsBsSaAJyrVrJdAmXQqw8rRQm9gywI57k2t071DPDBXj6HdNoA84fHSowA2A2ALghKumXzB6TwiVO/w/h2iO+EB99i/ZAOAOucBnXNbYxCY5h6/uUFw7yPXhcsmPDz744Gj4nMYUd4atymW8EkjskBQyr3jFK2J4Q90hEJsXnwOH6667bszBJx5OvBdwv/fee0emT2gEIDkqSMRKilHDmN10003jFcIM3x1TyMUuLAObSvbjdrMDhg69fO5zn4vyB+wGCfUAYuUedDoVs8wjYO587GMfi/XTn/50TJNkzmGsd9lll3joBUtpzQ8zd9wfQ+m3vBGDuMBnePhz07IEFkoCo4FDCZoBN2yZQ3ZNIASw+UKoe4Z6XKgOVjhscVaoAGZd4Z4WMwcU3nTrv3XXzdpnNvTiLrnaMaVN4Lep3ReGL8RuXhAq8OyNMVLjOOgjxc8WobYjDf4EMo3NEKMscH3XXXeNSt7pyA99SMBjLuOUgMNQQLmTqFicKmOYni22ClgDUrAzWC2xZEcccUSMiXMCfccdd4zxpUDFqGyfgxE2DFgmru5FLnINOvV7zDHHjJ01BK4AO+sP+P/gBz8YQ0EGST/iQJPYaWyjeWMsq25em40tt9wysomHHnpoBHRbbLFF/D/mb9DCBc/zgGW99tprG187OOh98/VZAlkCk5PAELCh1DivdXMyF5BrAofXh+/edmvlbj041P1DfVSofo8NqyvuKVfiUgOHDuNsHKq4yc+FijEdpCwLFzvcs1uoDts5kHJAqA6iuN/DQm1z0AXjeEuo9wkV2zhEAVK4zjAIGIdcxicBiZS5hB1EkXCZEW+K+2LcsYROsDpJrLhWZZCxQEICnNgELDCQXpPmEMWwBcAQo8bluMhuQjIm/64O/jSNh0wCGHvuXpuGj3/843Ec2+YmTalrvHHFJsFc8FvsoZADmwbXpJL6hWHkNnc63r+YUizioAXgNBe1vfycQe+Tr88SyBKYjgRGS4L9zdDoU0MF4rYLtcwcAifYM2Dwy6FKwfKOULFqq4f6/FABn3uHWgdRASDM26dCBZLWCnWU1DDh5xMp+sK1DNSy2yuHigFdoeXTudPJR55IrvoXhkq23jP98FDb3odL+4hQVwrVARY5F0sFIyEXGTahKaCeAbTzxyiIwXQ4wanGXLqVAAZQrJf4zhe/+MXxzQX9QECKiZV7TyyZ1CbGS/VdivcSs4hllOOSsZe/06Ek7GJioMSUakMvQGqeyLPHZSgHYtuYt24ltRh3wxgaL0yhefDqV786HjTCAMss4JS0AyZcxoC6sa/OF+EEDs8AaOYUTwAA6FoZCowlN7JT8OXf+r8xxjSKU+TKBlKBVcCy7UEYz5fKhp5xsG3SOfW4sr0zmv6S429Ri7VNF5gvmH/eCGu3aeO5qHLK/b6jBIbklG69kYMl2L8nh1oFeIDRMaGKLdw01JeFCihxcypYxF7F/bCHmDiEB7A5xUJhY3UwME7wOrnZaCCBw61DvTpUMpB6BtBrA+z8Fjt4v1C5lY0QObRhC8NlsZCVsbku1FeEWjlBzshgAgW4O2QgwbFcbdWCzaLc9Z1REJu0bNmy6mX57xElgJlh6J0adfijjQHmtvPmEuyhOEPMEsBH6XsDBuNv/LbeeuvoEpaaSByi8X7LW94SY+WccgYIGQ1xhQ63NOXOs4HwTOlPVM/KZXwSwNY7dMSta50C8sYWGPR/42QMyxkHUmusb3kNrVfuaPMqgQHxilJauQ/AoHKVl4sNBjCJqfRbc8kbeswfzCLgaJMIdDXNVSDTHJFPdRpM8w9/+MPiU5/6VIx3rPZvfKM2O3e2zm3+vVXJJsA4YXDNgxe96EXxb6mRpGKaNHCfHSnllvSSwPDgUCwddsphiepbo7iSuUB/E+pLQt0sVOzfIAAnXB6BEaJqBsChFCNSM2DRKJueOy8M6oNC3SXU94UqXE+c5dqhOkHcpgB0FVDX5mfxGmPCEwRcPinUSowit5gThYwLN6HTrtVCoTMGYswABwqEIQFeculOAoy/hMHGwSvYGOM2xRhy+++www4xXYj3pTL6QIPTzsaO8QYGsEfuK37Uc4BB7JNxxxgyEL7rlfTc8zBKDMy8HU4iA2Bm3K7iNuPqGroFoAfIMT8AjvVokwYYYoYxQNLQGLtqDCK3sRAFrmR5Bsuxq/poPkjL48BZL1aNjrCpwCCaH14h6ICalwSYT29961sbX0+X5ov2jxsceoa2YTn13aYHc0lXc48vUrE+zz333Mg8O5Bm8wDQmys2DZhUIQVkhtwQnpLB4SLNkPZ9HR4cAh4OkwBCVU/jJeEzsYhcosDhslCHKVqHdXMQY4rMIaVsYckPJsdY67eHcA3vEOpnQv1kqD8Odb1QAeWyCz782Wnhjj8vVIwurFFhLBlCRuN1r3tdNDgUf7WIFdJfBkLMUmIZKPpZMaLVNjOiDGvVxVa9bpb+llway2MMAIKem45Kwyl3jK+4NEC/HAYgPhDzg+VRMAUMhWoMnYAVg8iYYHjazGkgxHyZtxgyyZrTmqi+OQTIkMYH2CG76mGOtnMpsTZtf8+NrJK3jal/1X4g1rXG1cGkl7zkJbfNi3I73YMHQFWAY+wgdzMgaU4BhOYiICruGIjgLcFIYTRtFBo9J+Gefmu+jHuuYN0BVu1SzHNzWzonrnAb20Up5qpk5zYGAJ/XbWIHzSNjYW4gNsjFKXXj6LNcsgTqJDA8OMQKynEoDvD+lVtzJWOvHh7qA+se2/Kz5Fp2vwkXuy7uuZtC6g5KE1sicexAGf+BMrGC4v1ODFUKn2+F+txQn3fr5+GfTosUODeGCqC/NtSGk83AgFpXMEoUjH571RYFw6UuhgfTBTCOqzCA3GHkzm2K5WhjUBlEDBx3F7ZjKeyGuXvEGlLQ3nU7qFwZYEYa48jAM+TiwxhHsWTCBbAo1QJEYox6sUbV3/jbBskzlhL4ruuHzwBk8xvTyqVvbkvjIiavDNCtBWOEacHQ9gJETc8yzt5pjpk1NwcZ50E3O5gz7BD9hTHq117XA8fCErQLWylUoZr43jwzp9S2hYwH2ey0va/r6AkbWCf06Sb5H+kL61+MXcrVaDO/KMUcc0BNn73XmjzK3oDkbdhmm20iu0jvjJvVXRTZz2M/hweHMhw4DQt8VON9Hx0+E1v4o1Cxfu08Zc3yHSfLVnmqnS5XKoNhsSXXm8sE81tQGLXEtjQ3+tZvANx1QhWidXaoV4b6lVAd0KkcErn1F6P943S0NDiA6T+EmmI8W96VsgCy9BFTYOdN4QKSAAiX5CDGrddjyRrDZZefXgoPfDhpKyZy3333jUaqKaVL+d7GTDLf9A7gLsCh2DruV2PNjVZ13/XqW5vvvJsXKyVh8LDJlBO7Q25k4J6MO/c/INKVcQYibAyAdbGHS7EAFMbUCV6yAiDMZYmhHZ6Q5BrIKM83gNh3iWUdpt/Y4UMOOSSuIYa7q/VT1xZsEHeqtVvnci7/xnrWNwdfsIjyNgKTKXa17v5tPyNrTD4mr6s5mJ5NR5mLgKH1A+yIA085J7GcNkjY0EVhxvQTG2izw5VuQ9/k4fGO9LXWWiuOeVPMaNtxztfNrwSGB4dyFwIi4uKq4BDwcaDiO6HeHOqw4FBcI3cygDWBkpSlmAwsoZgdJ/24kyg4MV0YhhNPPDEyiE3MW21Tpfp5QqjkIYZyHPaVO/mKUM8PVagN1nZAYA0Ay+HGgHFLimtTAAIAxC6d4Rm1kDUDjZURLyRwnUFhmP2NqWHoGOc24JAxSO3syhhhIAT0c7OZB+kQhnYCtt4+QRlj0gZ9pt+KYfV77uQ2fewnc+41hhNr4FVpTcah333qvsfkAlbm/FI8jGLMsGmAk1PhQAU2DMhweAEo4m5Tq+DQ3OKer2OwyZs7z3iaA9ZJ1eBaUzZBNllkOK6iLVhKISDex92P4QV4xapaZw7acT/2+03btgMrNhTm96Bro98z6A4HLYC/d77znZEhLWdRME76QR6LkoAbiSE8Zdttt42nynutfXrc25dseK2BXLIE6iQwPDjkVsYeYqaqB1KWhc+Aw5+FOopLGDiUB7HNKd9w2SiFIrGLdjKQsXByU9B2ouWBFG9FwCgyKBTUwAVQg7X+hLcG/nnPH4j/vDTU40Ml++1DHRAYUjCMhP5RMtKgpEKhcDkBcV0UrI00LAANIAN4J/aLQseAMbptYpZcA8g5fCGmpg1oN34qw2WM61hB7CkGk2uWbIAizyIf4MJ8oYiBZUzlIEZQomGMqR28HIKjFqCGoTdHsae9jMMwz+KqJCPMVz9XZdv7AxAq4Magq4PIsO1zXAe8icP76Ec/GuM7MXlYwquuuqp4zWteE5lbIL0KfM0RoNL35TlCXwB61oNxNB98j7Ulf3MwgUnrCHuon12Br7q+A2MJiGJB68Bs+p01ps3mjLAEbe51fd3zen1mnQCd5Fk3F8nCmKSDEYOwqfrJu2DTljwb5bboRzrN7SDGIhQyMSfbhn3QW7lkCfSSwPDg0IEUcYVSzYg7LBegBGC8KdQ7HoStXNzjT7GyQKgQtwGBTo+71n5FSXGvAIZij4CVsqGicBhy8TmMudikSRUGNJ0QbVLg//flYGA/dudihd+vUNz5feFY+IAua8+wEwfWJL7llig/i+GjcMVpdVEws9x5XEJvetObbndLoFyuP2PBMPeTNTaT8V111VULLpNeBeBMhwzcHzDkKuViwRiVx9yzfc4IYVApX8wx5slrzNIGgcy4hquMUVM7GEbzCNuhzaOCLffDFmG4HDIaNJawqZ3pc/0GogAeLrs2xWaq7NLTxlQTKAQerDtyBOwxGdUxaPOsNteIYzVOAKG3/SSgJ3cn8A9E+EwblTQPgJvtt98+ulzTb1yDdXMilCvPYQhjaRwxd+uss07x/ve/P+aXBIzEfgFf2NcEDoEngB5I85m1VQei2vQtXaNN4qSNv+f1KtppA6YvwGGTXul1j17fGVMhKNjIunubH7wG0s0A5a99rQDpdoXM6A55HOsYd5vYxMaPA4xbD9qf5kr6N7Xe365JxVxStUUlj643QcJv6CpjarPKRo2j7+1GKF81DxIYHhxy9ap/TrJ/e3kAdXL2NRyIaCU89xazyN4Pmgan1QP+fBFFDyx4p61TXnWLl/KnjOSOE88zqZJeocWocnVrR2ofIxMN8S/+UDzsEQ8r1n3RusVjH//YgZrmHp4BpDnhiMmr7uQpNOCHQeui2OkCZnVy9GyA0DPLAKPpuXKwMRiMcC/wwmCJSxR8r7+eT46MvtxfAB8jnQpjiwlibBluIJTL/TOf+Uzxtre9LR7W2XjjjWNqD+CxGsTf1F6A6Morr4ztdRJ01MIYyWmGEeuVe27Y53CJAode0ZfCDHrdy5iRUZKx9tncGHN9B6bE/SXW0L3EizH2O+20U2uQ3asN1e+wZNogPKDMAGqb/vnXfEuAPwF9oBWLXgZuGMN3vOMd0bUJCHrNHJBvHZITrwMG3usnUxycvnsG/eE64OaAAw6Ibm5JzF3fNo1RtW/pb5sZzGGbQyM2OQ50AFHjiCHVR4zq5ptvXgtSjIV4Xusgnahv6lf1c+NkoyKPZxqv8jXGDjiyEei6GEN6QGiRzY2iDQkQ0kPmhzllEwqgaY95IAZYu7B2XcREl/tmftLf3MXmErDdRfhP1/LL91s6EhgeHAJrwGGTd9XGCds3bLyg32Mmhegg6cbIHNpFO+UljpALqG6nC0RQ3hYfIzzJXRnAghGjbLEP5V2rtgI5d73LXYsHPuCBxd0eGoJAB5AVA03JYvCwX/6tA1j6S6HV5UQMozNwwWxwgXDTixmqsm6AGkNaBal1DwKIGFiMHsXMOJfBvV084M99CLBwPTPuDHpiTG0OuJG1JRXKHxjSDqDYSWBxgu4jrs99jQtDMEhsExaL4QA8RwUE2sowiTdyv3G40cjGPGNs27jsyR74Ofnkk+P4YY+MtfkD9AMD1pFx015zC/OJ+SgDt7qxHvaztGaqbwPCbhnbxPKJMQXwvNUDsFHKwJCs3/3ud8e1KJm4DYL1qd36wSCbf0CftQQUJJaQDF1jDnmtoe/8u++++8b4W39X18Eg/cXqY4+lnupXrBPzuy75fb/f9vs+uZT1yQaobkwxrRhbrP2gYRU2xzbo73vf+6K736n88qZO+8zBug1+v7b3+56uFA5j85NArf55lnlifMXxCb/wuXlnrQs/EMpAfwKW5FJnZ/o9v9f3ZPH2t789blb23nvvYuedd44HdUZlpHs9M383vxIYHhz6pcq9XBcX6HPAcNgn+L0DL4oDLWNkDilrhp6ixMzVFQtZPJdXh41jp133zPQZg+wVWpRMYlswMIytdgO3mAkK6UEPHez0j12woG73xoY1uYEYLYbc67u6KIAoQEfJAoIMbVmJAWX+bqPguaAlfuZSEQ9Y/g15Ucxcg4pneTZGKLlzGShGXwxUuWA3Ujyi+6t+6zQgwEjRGwe/H0TRS9YLFKpdbTIYesBnFHBRHVcycV8bJwYcy9umn8YNa4YpYShTDKTf+o5MzV3/6r/xsiHx/3EZMmPt+dZKuQBkQCC2XDsAGq5Z41xXxF4KYTDnHNgqg02/J3+g14YBSFLMKwAUWLAxAA7oEXNeu/bZZ5+4rjBQw46f9ese9IB79yvWhQ1N1wyW51oXmGF9sQGrA4fG2XeYYiEsgxRt5uGQ43D//fePa954VONFB7ln22vNWeuWrcB0K0nf+Fc1z9Jcp59VY2ts/OuA4zjmubYJkyAfHhKywQ47nFQ+sNO2r/m6xZbAsNDtT3GG4g2dWsburVgSpFhB3kd3r8YjtpU3O/29W+8xZrcyNglzwC3YSznbnVZ3qG27M8p1Fj2AyFhTMILqxexhZRge7k9GhoJsMmp1z08nrx2OwGAwKk391waGHgPXRQE07WqBDwwTQ/XmN785MkxKGxCS2iHlkBPmZFRlIciG8WUMvdGBITKGSaEz4vrk+3K8Ilkng85VZwNhUwAYApa+Z5CBBcH/qd1tZENhm2vJ5djmN/2ucS8HZPQnsWDpN9gLwEE/gH/GrY1xAm4OP/zwyH5wKdflTGxqF8AMXKd8c9znvZ45Dsaz3DabDePnJDwgmApDyngaU4VLttcr3/zefbBGdWDEvLBhsFbSHPa3uUQWZGJjwe0HNPtOabsRuq3hlf+kwzHmYRvXf9Jl9MiWW2450HprakP63BzEHGNRy2ut+jtMMSa5yuZWr6v+TVZkT18I8xD3Sbb60S/WsnqvQf+2zmwKeB+spUGL+VHevA76+37XkzcdxzaIIRduIqQCCG+zaeh3//z94khgeHAoNOs+oUq47ABrGRxeG/6WIFuK8rM/igAAGTVJREFUG6luAEUgcRD2D+CUCkfcoswpw7c0/Lh3YRi4FO12uYzbuDJ737H7b+0+ASlAB1BhBOwGKSgGDSBggNsqHkZJPkOnFbloGMxeAMfuHwBNxmzUHlLwjBiFrmDlGE2HgXq1o/xcivaEE06Ibh6sKQYIG5EKQwy8UZAHH3xwZCrLAexkisVj8IUUlFlj7AdQpM/kBFyRUVKwjL2TzIwy+Q+SEoIrE3vQFQNtzB3iEUvpPcuJhcNSALA2FGRhDLlz28RG6juGjHy5SdOJ7Lbj7vQ4xpGLlvHHtKSQDQyhMU4MImBoU9J27rZtQ/k6a0Osl42EzVDaRJmHQEoqQEcvBpaOAK6Bmjqwa5PjGuBY/xQbOONAJvrK3Qxcpg2If4HUuvu17at5aG1qf2LEe/1Wn530Ba7MGa5Z89/vtQfDClToC0A0yGsz6SngsF86JX0elrk0V4wnj4DxMq5AKUbRBnFccykxh8OGg4yrXeWxpuPosxS77fAb/Wftl/Vjr/mRv8sSGB5yeWWeF2z8LtSbQn1cSZhnhf//5Nbvjgr/nhaqgykAJK+n/Hs8Cb2eDhxiDl2rDgIsw+WDFFS8mC07LawOJQlsMLKJ4UmKfpD7dn0tMGOH7BCERZ5SZlDodoxtjQtGSH+d3gTQgMMyaKprt/4DM5g47Wj7rLp7pc+ABH0Qv6dNxx57bJS5t4X0Y2i1geHyG4YOOOL2L/+OUXYNg5wS/JbbgzH2pgAG3e/Lhgo41CZsm/gyxt7hg8SsMsaANSXs+YPMD8DSfercbb3k1fSdscDsAXTAcIoLZYhUmwhtNKdtIvoZKCyqcIMPf/jDsd/GY1CW0+/JTowWV61YOEAxPRsAwayRg7kHXHuGuKk2ByqaZNH0uXUMnHJFAkTkUcdYAdLmVtN6MP/JpA6AkRtgJLzBJiddA5gbm+RmpW+MmeuT69nf/calqW8+Bz5tBsz1NvexIRZfq79Aq0NCxsAaNzbmt3Xhfv2yBZTbZe45aOJwjH6Ouwh1wOabOzbNDmOIF/XsJi9IV20iJ/0FhMXMAtgAa2KMfa92oSsHbbNnmuOybpjn4rHFPAodovMH8cwM+ux8/XxIoBc8691D4NCbiRwa+UHpUgdJ5NuT6FksIhbRU4TfiEG0mQYQha55tVzdGzxcKzTo5lCl2htznkPuRKeUKZdkyBhuBoJypEi5LC02zNEgQCy0vpNC4WuLIGOABCAcNl4NI4CpE6vjhBvQ0K9gesjBbyhERqSNEep3X0pKjJYToQAEN6a/MTu9GESG1XgxvIAdV0rVGKRYH3JiPCnq5IJnxJ0yBmAYyXJOR21mGF0v3QZ3qvi5xCx6NmbFaVXuwX5AtioDoIEhH+QQS/Ue1b8ZR3OYDBlmfTeHyTAZffO535glGTmEAmhKyQIMDQpkrRUng9O7XBN4cX+ACFjSf0CZGxeY1FZAZFRwCABietP9zG/z1boRyuB0u7rjjjvGa8oyMb+Nbx1wJHNy8L1aLX5rXRlb/S6DQ33FvgpBSPFfnmtDYv7YgGC8hmXSjHca82q76v62Jngd6BOuZYDW2jAOSdcAXg4hkVvb4vc2ntZMv7RS/e5JxuQG6PTafNlQYgzJFQjiSSCLcvqhfs8a9Hv3dwDoqKOOiieusew2Qjbt5rg5YJ5rm838tAo7gcE13g6q2PB5DWQ5D+e02pafO9sSGB4cYgKF6bhDGRxKE+Zdy9zJ3gIiXhDDKGH2N0P9eqj/GCrG8bmh1oFD1343VImdvW1lAoUyxzw5DYxtAqC4/4AHAeoWFyWOPWJgqnFd424ihc2QefYoBXDAljH8YhTbnlZMhpayZszJou3u02/IlKJkdKs7afdhTMQEYgEAE26bXrFTDEfK6eW6KjAkI2DITt7zgQGAhQIHFPyb0r+stdZadwDa6XCE+UC5Ayyp3dgWrCM3Xt1J637jo6/iPRkXQLiron3uN8o9tckJ8lNOOSWyDoPGU6a+kHu/RLuMJ4YqHezhFhyEpWqSG7cxg60Ya/MDQw3kcqWKMRWwbz6KHysDMgDJ3Go6lW0OmROAYLnoA5DFlS5UQthAAjTAOd3ieWWgZbxs+OgUrj/XayNgYe5qc5sQgNQOOgIwaVtcTz50ioppt2nyuc1GE3vadH/jSW/yvmDRhgW66f70rk0YmfSL76OPrFP/8iYAiDazTgWPo5CzuUtX0QdAmJhf9gJwpHPoNUy40+P9NmXDtFEbUriCuWIuVXWr+/rcOqavpE+S1cDazodUhpH64vxmeHB4J7MuVK7iG0K1keb6VbcP1Wnjq0P9dqgOl6S3nXARA4u94gh/Gr7/WqhiGp8Z6oQKAFQ1ahQ1NkZsGjcsat7il8KCQlhKhSJZHlJsiM8RgzVIIDrGhJKh8ChsLFobcEiBcYVLMA74YeDqXHLAGCMghkiSYsYKQKxjrJJS5M5xiruJuWOUxRlyM3EBU9gUJIDsN+6dxreab5HRxPSQE5dtGXAxCgwX0MF4kwPZul8bmWA5zSVsQwpbaPO7cc814ED8pRPk5IFhqAPdXbXDmIuL6jrGF3vDGJt35shFF10U5xygIK+fzQAQ45S+NcyAAzLmQgqbaGoTJo2MbBxdnwAgYAuUAiTY5DLrjUEDDMnSGioX4y7pvPQ4DlYw2NhU8seGtQWHae5h0oct1kTTWmpzT+uKvLUBazdqAbzcD5AB1o1RHfhJzyFfoJR+cGhP+IA13It1HLaN2oEgED5Ar5C/9plnngdYA9g2O+MAhtptntDl2EDuYvO+PO/KfTPvyJH7m1yQAj4bV9uGlWv+3exIYHhwqA/Amxcm/FOo3MhAnwLQAYFfCPWLoTq0onht3CtDxRg+JtS6pwORPw4Vy+j6Kb/lx0IHhFQ7wNe//vVxcXFV2Y3VgZfQ6pkrFCZAA5QwAA4ZDBJHRomQBdAEHLVlKFyHNRRvhnVhdAEtwK0KPChcrkhAEvtA2aVTpGWBYii4/xl/bv5eh0H0UcA9NyPGiMuLOzgdSKAsgbRqfJR+HnjggVHZVw1mcncxAFgkxb2BW/OinzEyjwAWYABAknR92rt44DYdQDHW8qU1uVZnbnJXGsQ9m06t65cx5u7F7GHoADyAX3/lu7QZwaYAhkCe8W0CIYCluDagBZtsTivm2RZbbBEBXZV1ZLCbjLbnaM8RRxwRDziZ10BG2pi0lbXfeAbmL4GVtr/t4jobZmuLR4Lsu0rubjNnY24N0sHWuvWVwHACN8aMXtB389bBQsDJ7+t0yKh99ly6QSjHtIr5+p73vCd6UJAV9Ck50SmqjUfygGgvMAm0S6WE+TZms7ApnZb88nN7S6AOnvX+RflbYPApoV4W6oWhviTUlPTaKf/X31qxikBfm6dxJWMinXbepHS/8N9pF4uPMbEDA3acOMQI1BULDzBSLUxGYJq7NIAOqGX8dthhh6FOrVHI+kvZNhnPqixcx22GNeTq4dK2u3fIAbBLSt51ZMXApRQ94tLqCjcOY68tKcFy3XXpM3JnsFUGXayZkg4gVUFq+l0TawMIYKGABId5tIerXfyW2MkEGJraBEBirez4uaH8dprgkGEVp2d8sMJcT+NOCdIkm64/N5+EjKgMojyDXtkmDYpxwAKKPcUgcqkDGMCH9VtXzE3sI8BJZjY65i6j3M+NXne/9Jk5BbAOW7Rff6xvrGb55P2w9xzkd9zqZOL51kEXhZ7SL3GEwkKMC9BnE8arYCyAG3rD881d4SLiN/1N79jkzWuxIRCuoM9ixwFBTCU9R27mFBkld7NQFuEWNrXWxTTt0byOyTz1qw1ca+6vN5c8OVR69MRQt2q4dJCTxt8J97giVB7b4XVlQ0NG/xgTYWFhohibOnDIsFBUKcebhUqZVRmo0VvT/g7icBgzKSnKbwFpf4ciAjExVZTOIIqFvBhjrODRRx8d7wFYcedxH2NtxOHZ9QOPTjsCWE2AKblT9GPQuKhyf+28jWeV6eknE+MoyPsLX/hCBBeMlgMtwEHbMRaThiFNG4d+zxzn906rejMIeUiVZFzmsZhPABiXmj4fdthhkfEFaLiIzW9xr8azV4ybDQGQiYm0SWhzoGvc8jTvAFVrTeqlSYNDssAcYjwHTWrdJBtyBTS9kYiu5fmwKXeyGutLx9K11hAABBhZg16FSaeI7wSY5rXYpPNu2MyxR0CxjQG7429ufrrU/FboOWNz0EEHxbCFthv8eZVf7ldvCYy2coA+8fTPC/W8UL8RqjRzo5wuFqN4faiS/PdP9B8ual8ScyBhMkWDmcJcMQYUTKoUis+TYrEzZTwsMgYU0ANqygYE+4PNsst1WMG9E/vgvgwTN7S0LZM2vmKhTj311GgUMXbDusLJw050EGCYRscO347fWwUwAtokt6R2ORFLvgojxyCITWwCfp7vOocJmq7pNyuwZWJJjdMwhpQR5g5khLQnubraysZ1s2C4gBxvjTFX3/jGN0ZmtW0f+sl4Fr9nELkDhRU4vbl/eIsEYMFdaY4C7UovGdgQimU1h7n0bHpmoWiX+egwEXfnpIw/vehUvznkkFtXrkpj4F6qDSlgw2VtE2n9qqnoa3Kj0m9l/T0LYzOONpTlk3Jvsi1JNv41JskOkRE9hXEc1gaMox/5nrMpgdHAoT5JS+MVpGeGelCoHwu1nBB7kH5LbwMYKuIW7zLIj/tfKwidK5FykTDZAkmxKimGzr8WE/dSUj7JkAMEdrN2p2V3pt+IQcKKYRK4m/3f4QpMhXsBoxSopMLAyCQPs2Dp9InhZ0B6Gb5+UhzF4ABDyRCnlCUOQaTTqu4NfCaXUVM7GQq7XwHhTS7hfv3AGNllu9cw7kBto2jVpVrOP//8yBhyvWHD6tIBLdW+9Wp3GjtzTXxaeZ61AexAiFPPybUMENEN0y4OSAnZcDiBnnHgrE1/Rm03th9rhT23YRpHoRus9WHX+zjaNEv3TCB6ltqU27K0JTA6OJSyBlsoZ6Hk1yeHukWoDqsMWq4LP8A+CuNba9Af97+e8sTcUTAoeQuqvLOqAsT0tztTTsAkpkot744ZF/FzWAjg0T0xYsuCa5RrAyshQJsCFfeR3mTQv8XdXEFpc4P6dxZ2jGRJJukgCTkD7OTYpn2u6eX2ayM17C73dMpb2eY383KNzYr4U68t5M53kMLcGJaFXcpyadqA9OuTE8g2J9az3H7DsM/9njHo98bP5tR4ClkA+rtIKdOrHVy8PCb0qY3wIs6hXvLJ32UJLFUJjA4OHUCR13CHUCW8PjJUqaXEAQ8SayhhtvyHXsW3QajLQu24pADdrtweqXnAoHtjEwAfBxSwjp7D+ACj3M7p5JxrJ1kAwwRqJ/ncts9KTE7b67u4Tk4yhRtxFDa0i7ZM8h7mpUTjXI9cdE45pg3MJNuxlJ5lfYtvE44CRHPd2tiI4QKOZgUcmscOUUkKn3TPOOUsJEMYDX0nzMZhkVyyBLIE5kMCo4NDcuBRAQj3CPVLt/49qHycUAYuvXnFW1G8U7njMi4Q4JSjNBQAIFeO2Eang+2mGWOpU44//vjIKDpBV8111nE373C7QQ9c3OEGS+wDTKQ4KEHZTt1WXb/GRqA2wDyMS3mJieN2zSUbqYUwSgL3ySe76ppHVM4+7mPAENsMGCo2NOKIgbBqQuzmu43/G3PdmDqRb6yrc7/LFkjHJG7YSXAnuEdNet1l2/K9sgSyBEaTQDfgUBuAOe7k1UJ1SCWltGnbvq+GC71pxZuaxhO20rYlA19HCctPBgDaTQOE/pWrz+eMi7/lt6NEh3VlDdywBfsB8M3NJ/4TWCdzCYarBtKYyAfHpVx32nyexWaDZB4KXK97W808932QvqW55C06y5cvj4mdHYCymUjxhckDkWKTB7n/OK8VZ9iUhqmr5zrMJSUQ17qDdsITcskSyBKYHwl0Bw69MQVAfPwQwpHb0NtUHFgVv9j/Vb9DPGR8PxHYztgCJALBxbJhY6RbEEtHgUohw+28VBMLj0963dyZyx4oxGQ4RcrVJTi+Doi7DkgSE7poMVL6PWwqo25GavbvIibTgSX5D1WhB1L8iDMsH/CwzoHIRWLMbIT1WyJlAHG33XaLB/Dq1tnsj3RuYZZAlkCTBLoDh01PaPP598JFQsC8EcVr9ZZYYXDl99p3332L008/Pb5iTx4pTIMkpYxL2/x3S6zrM9HclEpD/kSufeysoHxjUjVajJuT4+mduzPRgdyImZEAFhAwtMmTx9KGbs8997zDK/6AQvPOfJp0DPE0hWWz680j3u4j44MYzF5vKJpmW/OzswSyBIaXwGyAQ6eUvQxjnVBXGb4z0/wlF1PKfyh/2nbbbRdfpZUV53hHBUPolYBO32ICvU5KjsSmQ0fcgw4RAOzl9yWPt5X57ktBAoCeOFXvlpbySooab56oS1Mj/ZIkw74btwt3VmSHUfU2DonCZV/gDZmFBOCzIp/cjiyBeZLAbIBDeWd3DZVL2oGUJVrEuKUM9XIK1hmVJdq1mW32F7/4xZi2w/uJAfJ+gE8cqANEEnIvWrzhzA7ijDSMuxQwFGe48cYbx7f6NKVW8k5tB1F4CISNzGvBkEpQj1EVuuE91E5uize01qrM/LzKIfcrS2DRJDAb4NBJZ+9oHvQQy4yNFtCRXl3lxGCTYZmxZi/p5jDmmELvu24TFH/ttdfG0+JOcE8iQfCSFu6CNf6cc84pnMBdd91140GmXutXzlLhJLwFTSz1PIiPi/3MM8+MB+ukPhK6cdRRR0WWPq+feRjh3IcsgXoJzAY4XOKgMInWq/UuuOCCeBq0l2GpH4r86TASwPaIH8TStmExxBtieuaZ7RlGjov+G+/YxhhKPyVnX79DJtIBOXSGgZ7nIuWTDa/39Tq1vdNOO8U0SNkrMs+jnvuWJbDkubrZGUIuJqdkpVLZdNNN8656QkPjwI/Txw6i9CtiysQbenXhIh0i6CeX/H0RY+nMIW7ifqdvvfJRzkMM9Khv6pl12QPN2EOxmEAhcOiEf5uN2Kz3LbcvSyBLoFkCc8LZNXdwUt9wKVOi3hIgWHtcCbcn1Z+l8hyxYYD5pZdeGt9U0atgdhk5BwgyOOwlqcX7zgETcXVY6H7pjbDP1rvXcc573KoT/3vssUex9957F695zWsW5vDN4q2A3OMsgdtLYDbcynMwKliEtddeO74toJ9Lag66OzNdAMTJ/fLLL4+sz4Ybbtjo8nIYBXvohGU+RT4zQzgTDbn73e8e2TBhCg5g9HprjLkGQHqf8ryvdWtFXkzAOedonYmpmhuRJTARCWTmsCMxe5WWE8qASi6Tk4DYJymDGGvxng6cNBWMD5eymmNCm6S0mJ9jk4EfruVeDDTwKLk9xnDeXcpmgkMn2NQMDBdzXeReL64EMjjsaOy5kb2mLcfidCTQAW4jRkwqGy7j888/P/5bV5wwBQIya1gnncX+zOZOSIjQA5uIpuI74DHnyWySUP48SyBLYB4kkMHhPIxi7kN8G82TnvSk4pprromv0Kt7363XfYk15ELMJUugKgFv+5DXz8Eyh06qRUiC5NhYNEASo5ZLlkCWQJbAPEogg8N5HNUF7BO3MoDoNYXnnntugSWsFuk4vAc7g8OqZPLfJODkO3fxt771rdrwBKzihRdeGN/ZPe8pbPKMyBLIElhsCWRwuNjjP1e9l6RXAmMM4dFHH104gZqKV39xN2N95v0QwVwN6gQ7w7XsvdzYQwyh+MJUsIZnn312ZBRd0ybh+gSbnh+VJZAlkCXQqQQyOOxUnPlm05SAuE/sIYAoce8pp5wS3csMu/fgytnmMEpO4DvNUZrtZz/rWc+KqagcOrniiitiY80fJ5g/8YlPFFzP2MWcqmq2xzG3LksgS2A0CWRwOJr88q9nTAJSCklCvs466xQf/ehH4+ECTJDk5ICiN2BkcDhjgzZDzRFHuNZaa8VNxDHHHBM3FOrnP//5mPh6iy22mPvchjM0HLkpWQJZAlOSQAaHUxJ8fux4JOC0OJffRhttFOPC9txzz5iw+Pvf/350KYtJnOd34Y5HqotzV/NnjTXWiLn9vCJvxx13LD70oQ8Vb33rW4vtttuuWHnllWNWglyyBLIEsgTmWQJ3Ci6T/5vnDua+LaYEfvvb3xYXX3xxsd9++8U3WTiE8stf/rJ43/veF0+a5pIl0CQBKlG+Q+9aPv300+Nlq6yySrH99tvHjYfcf7lkCWQJZAnMswQyOJzn0V3wvnmtntOlRxxxROHtKF4DtvXWW0eXYS7TkYADHQ52nHPOORGoz+pYCEHAON9www2Fw0wPetCDIjDMrPN05k1+apZAlsBkJZC3wJOVd37aBCXg9On6668fk17ffPPNMQ5RTOKslt/97nfF9ddfXyxfvrzYdddd46nqeUuqro/eZHPSSSfF2L1XvepVMwm6gMD0Np1ZnS+5XVkCWQJZAuOSQI45HJdk831nQgJiDNdbb73oEvQu3Fl+bR5X+NVXX10cddRRkbGqS+Q9E0IdoRHeWbzaaqsVy5YtK6666qrbpRsa4bb5p1kCWQJZAlkCHUogM4cdCjPfKktgFAmIZcNyOl0tYbdXtM1bAdZf/OIXx0Md0sHc//73z67aeRvk3J8sgSyBJS+B/w8Ub3jzQFo+hQAAAABJRU5ErkJggg==" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAvUlEQVQYGYWR0Q3CMAxEG8QAnQE2gBnYgBVgBPhMfmEUygZlhMIIYQIoG4R3aRIVPsDS9Wyf47NUE0KofsV0LDrnauo78ORLaRN9ctB8kT+Bzz3zz+JjQ3415u8bDoiPNCC7rljgf6WxgW8agFvIxw0UM4pFFjVA7MEwQKLL9aqHTqAhv6gXj6SQ3wp0YAtaerKojLU2rz+roUDcQTp4rg1NKqAhGDgqg70G5K/1JdIGHVks1knVLTXQv4iWb/y6SDi/G9jcAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle \\dot{s}$" + ], + "text/plain": [ + "\\dot{s}" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_s_pl_.subs(lambda_, lambda_solved)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA10lEQVQoFXVS2w3CMAxsKwZAsEHYgMcElA1gBNiBv/whVmADBCN0A0RH6Aat2CDcBV8VVdSSc/b5HKdJ8xBCJvPeXxG38A98Ab+Dq4FZLiGIN/IL8MkCcAogt0PcFEaegE4i47grmx7MoxB4gFckBvZCvuTuEpYDgVLuSisLOwuTjsuIOe44s6K6U23frNEs8ivHbE5h3/VHpWktz6iRIlO9pvzuERVejchUqOZKZ+SlrlOFxXzGmlOjEMENRAfcS4yYE/hiR3ITLmYr4BkCZ/kGuEUef4ovviBAXcWd104AAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle 0$" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_tau_.subs(dot_s_pl, dot_s_pl_).subs(lambda_, lambda_solved)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Convex mathematical programming literature]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "" + } + }, + "source": [ + "## Hardening - elastic domain expands during yielding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Yield condition" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIoAAAAXCAYAAADUf9f5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEeUlEQVRoBe2a7VEUQRCGgSIAxAwgAwhByADKCIQMpPgF/yzMQM1AyECMQCQDyEA0A3yedWfZnRtg7na4pXC7aun57Onueafn41i8vb1dGOnleOD4+HgNa65KW7RcWuAob3APnKDBNoA5L6nJUklho6xhPVBHk7XSINGqMaIMO7elRz9A4IdZhQIwo9EKn9vXNd8BZX/gI1B0wksgJtQJ3oLvz2JPDZJPcAGyAD+FfefbND9uPXrhZdAhZhhRZqWdqKORaQPAGF3KRxQE/0au6DZkXdT8Bi456BbfJe0qpFo4Uj8P4Ev9vQPvAxSVcH6qiAJ3/qSqrOgZBUUFgUrvkj5zlEC1MT/Jq8CbUD7yIh4wmni+mJmYn/Wo80add7EXjyi7yJwAST2g+90q3yZKBbTWVS+PYaOh3BvIx6e0DvkuTKNJPNF9hxV4T3aYXUXhTiRRW8q+wUSoIAmhzaqR+ntgDxG9okmsAnOkvHN4A/KiWw/CJ65mDPaJcrckH4Eu4SNlegB/6bcF+EOPZ/vUF4smyBJ4K/DO7akoUBDeAQJ5kenAGvOQsTR5WmL894zgXm6oTpFhtllBqQbzLGvpawROHvzrNi7EJLVkZNlMe4G5Dq9AUudv4JdFgdLWFuECxMlxAj636+adZvwQmj1Eez4yb/QzXRFtrvnU9zXfLzn5vreISva0fxjXm0bw2Qn5Lb7UQrs3mtA+y+agG+09GlR+IR2uygLGc2fxw6wyF+qBRPpn0oOuUsbXAT/gzdmJtKE1jn4CuwEH9R4QT/kqR1E3N2LM8OglWJw8AdsBCm3UNxlNqMuymf5t8rJh5PGhrSFkVYtp8ejoyEobTUPvENBxdOhMueHLw+sZ6Y6TyXsLePAwS31RfYJegSNfJx7CY92uKO9skbTxp/VX8MpZQUabU+dEanNM2rHKl7LX6NUZP+4c8rQTDILCLaGRRVp9s26QtE3aHMbI4csI0QnJPTBHQLtNrZAg8UEt5QhXRueQ1O5vuqQ+sew6/xaujg0xppNquL9pCv8l9I0gaKJRVK++ye2J8lLXY4EoUBrfIdu8C1H9cmjC5pxO7TZL7UyfNErraCOTq2UCeJTpcB/chiYnsHpEaimi7lLseIFjVBiM8JtRRKDukRbQkqDxjJVLKZtz+1btigClNiCs0gmQ1BoZQr9OpV3hxugpINz+ktsmdXFEUYMwOaaHogAKt0wn3TeOGNRJ3TJsTvaLC5fjghnzRhJX3sSeiaLuj1/4jDRZxtH2qUgnN/t8YhBtaOs4aDQJ+uE3t3LB7ZZjZPb2lkuP2ZwlpzdQMMBTsmBwArzKwapVqJNdwWFFPng2sdMcyIep1E0hgCfoGlQxf1/0CW3mxY0q+voCH7fB/Nj499n8WL9OfQmgpA6tnUGeSwYHJ8Gq4/kESyqCxOeZQcxBPw+vXpE93GYTfZI2ZwuoG/YGyrQDPuP2RhpBX71X4GBD9jQ3i9i0zrtHXDlLHp22Z+lXos/i+F/4d25kIsLLrIUTv3fctfz/Un8BQfWYoXk7x+QAAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle - Z - \\tau_{0} + \\sqrt{\\tau^{2}}$" + ], + "text/plain": [ + " _______\n", + " ╱ 2 \n", + "-Z - τ₀ + ╲╱ \\tau " + ] + }, + "execution_count": 133, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Z = sp.symbols('Z')\n", + "f_ = sp.sqrt((tau)*(tau)) - (tau_bar + Z)\n", + "f_" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAAvCAYAAABOtfLKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADoklEQVRoBe2a31EbMRDG7UwKoAbTgVNCoAMYOjAdhPETvDGkAyghoQOggmTSQVICSQfk+8laje6sO584nZ5OM7L+rVb77bdaYyXLt7e3Rc1yc3Oz0nlnqnelz/1YWuEAfYC4F6jlANkskapgPCsrtc9ZVnph7cMRR6qw+0f1SnP/1LpSFYxOvFK93R2d9+mBwCggFmq/q3lR/cSY8mHX7D4lcKS6UQV50YJuKTxR+/hOxdyzuOCUdWxrGwyUvar+ltBJvLNAfysdMDOmxE628ApzDTCc4j3n4nHMqfFe6YSVM687Xhrc195j1fiurf3mn6ZkD4xfuFdLSGBEiQIrpVMx+hoJoAuMxfVmLBLvEFh5GKvL9ksXQJ7VfrU52iQYCRFmv1QvERpZcEgxVmQb+khUe7b1pWZCjVTI94JLh21QmndJQm0cy22xS60ftydtrLUv6hOGXSFNKDkG1HIed8cB8eNXtTh+0Qfmm9YBxMa9LCQFZgRAQ65XPxQvg45k0box9lkCZCfGt76vxiUk50jJcuHduvqWprHtHDlKH5jVTmQBrQ0wUsaa3YE7jUkWKXY6WZE8xv1Qa/dzoT7h47zsz44bviBhjy/LUCSPE1xZpv7QlIB5gY149lRze8ZqDuV/VbmMp2pD0dhiu3FJg0CrI3nO3KoNnm6JHBzuJQCvFBDn6uN9kLsYbWvTOmvIwAxsxQU2jb14vqt/oYWnrsUh8w0wMogLBp0wYfRxdyxGUzot7kMoai+sPEY6Uvvac5wRvgDbi0PGAYwHgmdgJM5e7gJrLgnIyxL3G/UJOwrAuMiDivbBKlmz674M0uPASAmMAIQL27gb/gDAJUPNn2KGE/OA5g4Zs16kt2FP7MBe4a5FYwZPks+7Ypz11L1wej1gvEp4bVVDyDmBwx98D3Wm8MPbdxLJbDZ0cyznGSFxPKjfx2K8rWjfmBmtVAC4N4SoJYTROnMVFGMm9+Ap5IsxM4VxuTpnMLkeqyU/M1PL07nnLK+vr+u+z+ZamCE/p+YMZ1UVnRNAVXdnHDYzk+GsqqIzM1XdnXHYzEyGs6qK9r1ojjJEvzzt+dZebNr6whtye+G940nACIj9dD74hvxew5P7eJ4tWfWH61r1LNap8VM8nqpfnBmxwpNTeMzTmDfknDe0pNOHTNbIZhcyZNQb8hAgyNQAM/oNeSiYSX/PKMRWMoR/hi/+X0tSAKdmpsgbcsrw1NzUYIq8IacMT839B/4RvLoTtUcqAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}$" + ], + "text/plain": [ + " _______\n", + " ╱ 2 \n", + "\\lambda⋅╲╱ \\tau \n", + "──────────────────\n", + " \\tau " + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_s_pl_ = lambda_ * f_.diff(tau)\n", + "dot_s_pl_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Hardening behavior\n", + "The hardening force $Z$ is an additional stress measure. It must be accompanied with a corresponding kinematic variable, a hardening slip and a material parameter, a hardening modulus\n", + "\\begin{align}\n", + " Z = K z\n", + "\\end{align}\n", + "This relation will be need to solve for the consistency condition in the rate form. Thus, in `sympy` we shall introduce directly $\\dot{Z} = K \\dot{z}$" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAOCAYAAADT0Rc6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABwUlEQVQ4EZ2U201CQRCGD8YCjCVgB4IdSAcQKlA7kPgEr9gBtKAdSAcmdCBWIKED/L7N2c2eWxAnmTO3f3b2MnN6x+OxyGmxWDxj38Hj0r9F7vBPSjsI7DeUHPOAT+xJ6tWLxgwWcDdb5CD6confgk8y+i6P5TqxK+xv2I2HtS5zQNQJ3pf6JvpySfwRe48c5f42HcwB3hNLG2stCiAu9pEvRLK7foFX6GmRHNOmg73J/V1Fw0kBp5Oi35I4Rc7yBf6jdxW1QGoKCnmdA6Rv+CcC68ZX8DU8wd7ArjtsFC3BxIpwSmy7eQmfc50+gzdinrpF7f4+cnSBUqf4nj8WhF8BrGET4ojUcxq2i8PrMt/ioaDAtqLhPYnZdRaUTJJsopNE3iGC0L1SrznNeWNOATmf3n88ccjHtpPdkG+b3jsEOz7gxDvHqaDQyklLkP7KqOiAzj1t+HnUC7pQpSh2PF0aFUESyfpspjG6zdFJxC3om1ZOiO2vs6h3b2gUgl3X59t4Yt+2dV7J9Q3FLNGVX7CbnMIhpzefz3UYHMImSO/wJ0mxkQp0R8c57cOSJ2/8d8H5twrzjHS+XdsbmmGHG/wFT6Cz1aivRycAAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle K \\dot{z}$" + ], + "text/plain": [ + "Kâ‹…\\dot{z}" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "K = sp.symbols('K', positive=True )\n", + "z = sp.symbols(r'z')\n", + "Z_ = K * z\n", + "dot_z = sp.symbols(r'\\dot{z}')\n", + "dot_Z_ = K * dot_z\n", + "dot_Z_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Evolution equation\n", + "As in case of ideal plasticity, the yielding process is controlled by the plastic multiplier $\\lambda$ which must be non-negative. Following the same arguments as above, the hardening slip $z$ is assumed to evolve in a normal direction with respect to the yield surface, i.e. \n", + "\\begin{align}\n", + "\\frac{\\mathrm{d} f }{ \\mathrm{d} Z} = -1\n", + "\\end{align}\n", + "To let the hardening slip $\\dot{z}$ grow in a positive direction we introduce the evolution equation as\n", + "\\begin{align}\n", + "\\dot{z} = - \\lambda \\frac{\\mathrm{d} f }{ \\mathrm{d} Z} = \\lambda\n", + "\\end{align}\n", + "**Side remark:** The choice of the sign in the evolution equation might seem somewhat arbitrary but it is not. If a hardening stress variable, rd$Z$ in this case, appears in the yield condition with a negative sign. Therefore, we take the minus sign in the evolution equation to let the hardening slip grow positive consistently with the growth of $\\lambda$." + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA6ElEQVQoFXWSzRGCMBCFURugBuzACnLADtSjRymBK1dL0Ks3tQN1hgrsQK/eHDvA70EIhJ+dSfZl8+WxEzIpiiJQZFkWkjaMO/qtWjemdQHgh/4yXui4rrezg1UEupLkmmrdDQ+2mwdyzEG15cUQLHfFrkrN3INxVBtPRtJglerBFlArEQej9oEx+Gwhz30Mrh29vnswn17gumfINWTt7tyDLXgBWqOPZP0o14qDrcODzSVakEK9r0rFVMIWvLGWY/td6FYCauWBGVo9CUwoqgUXxphPnudbCnP0Sc56BymgehwK7ev3R39y/EPRn+AqqAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\lambda$" + ], + "text/plain": [ + "\\lambda" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_z_ = - lambda_ * f_.diff(Z)\n", + "dot_z_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Consistency condition\n", + "The consistency condition is now depending on both $\\dot{s}_\\mathrm{pl}$ and $\\dot{z}$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\\begin{align}\n", + " \\dot{f} = \n", + " \\frac{\\partial f}{\\partial \\tau} \\dot{\\tau} \n", + "+\n", + " \\frac{\\partial f}{\\partial Z} \\dot{Z}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMoAAAAvCAYAAACi7FWZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJS0lEQVR4Ae2c65HUOBCAB2oD4AgBMgAuAiADOCIAMjiKf/yjIAO4CDjI4CACHhnARcAeGXDfJySXPbbG9tgzOzNWV3lkSy2p1a1+qO3dSz9//lwVWAYHnj17do2Vfp17tYx7ae4xD228s0MjqNCzUw68YPS7bOz3O53lBAcvinKCQu1aUvQm17ZVEvqpZFe49ErfuJ5Q94NyEVAUZRFiDot8wu/zbZYbleQVpQqyonxL8YHrps9LgMuHsEgYr6V7dAi07JsG1n3P9e9yXsbXE9yhfLflPPfW+qlwN3ZN99qcF/rY8igs/k8oust1J1JmPBssCeXVWHeDUuF+AX+SVaG/QtRaOefigHW/43rLZSiT+Dw3H54yoB5lCijvRF8Kuep1U8Y++L5divISql8iNNNhKkLnBqZeD3B/hhXqwrPjMI+K9C/XN+4nKeVUWndIy0No20koE2nWa22tKPS9vsY7DaXw6Vdx+r+Xu5YIY5I3edPVHuv+pkwWZgNavol5VLZPlNlxaNN6nXNlcfIzzNuyK1riuO8p9eZzg97Eg/ic4HjlMA8TkhfpSyNOzclr5dJcWUGygdYtWhZ31w07pMW4X8+pR58FoFVvrDeZjX+MpZKo1LPROctidzxIp0dhzuBRYMaX+vyRSaGKey39tofDFf2Nby0v3FOEBV3wD3yQn4aXyZvPQZEeezZvAm2Od4Xy8RzEHdMYrTNKJN4YtOFNIpMaHoS6KZvcTEpjji7GMYeC/h7b3EyGag0F7uq3i7o90CI/PK8N4UsyZptwH0Nzpzeh3jDPsEyv0wWGVpXX4N75rlMGJYnP55QXIosugndZ11KUyADnvMr9K0sumSRDW0yP+MFqcT/msG3IZT4+C4z3mcaHlEEYlP/w7Bx7t2hTaaG//PuLS4ucCzc1RL1ro3/a5BqqTp5HHOXXAtqSl7lNo8bH5+fxnqLp6cHXcAYc7lOqWDqzSRjHOCVoKQqLS0KsNqgLhkGfuVoehDrjVa1azjLZvQsMvc67GqxjTNvN1dctlmeaFg3i7xLmoIUxfnC5cVX2HMiPjXyMtLyOA7zg+Q5Xl1fp9Cbguuk/UlZhM/cqb53P6/SZkZOuhmGjj0q2COhSFL3HqoNxDWHQXt/E9tEijQE91SZGByVinv/AM8Pmu4YGDeuT0a4wFeoYaBiETMfRtGTG6UunagTC2S3Tf8Uag6GgVFm08hqPBl9o8yyR8yYqRKUU4Ko4m+SwAuc3cBYNXYoi4xqMjxyqFAHGuSFVjsRw+6T7iD6tYA4tsN7NjaDgH/Gs90oerzWBfajsDEVayCMqHDfOO5iWEcNvhRppUlnki1821D2tdA7lwwNwN3m5reg7tU4NRYHZbn6hxTgF86sp/D7lNygO9SqJYBrS8ncurXQd3/p1OKdChWsBfVPYZXgQlJY643JDjfVN0eo/Z8UQWiKOYYnr0cp7lvP+KtcQXoAWQPz6ho/V2cK5NCIqhmeGFbT47Nv+Pv6LLnjmWMxZI6x4i5/La32Ste7yKAEVAagYbtYkCJVL4b6mzizJRy4F2Af2cWN0gZuuMUYce0U5ZiN1jT22rpeWSNNDBlbBzcqZMXLjyosxoaD9E1+53QxxXo2JXkXFFFSayvuHmswPfZxPWc4aDWSmO+rqdUUJGY0c46hXKRR8XRAql99qJQFb3uLqA4WTCw/0NklpwziMr0dxE+wbRtFS5x33Gg7PcslT99EuP7JGKtM5yeIp8yg/w9Mki0yXqlr8fRueavJjujmDqVoi05bBukg8dVpRN4ig1Rcntfv9l5s8gUpRt/4KewjzDe86D5zUa41TKKfQnd+XcVWmhud9wVRapF/eDQF5qWcaDMoiysOQS4U05TsUDBFzMhg6xiLwVBQFOSVGdRPXszl/8NwrbObV8q24WmcO6lS06mUX9xcGM9ASlLxvAcwjXl+aNjeMXkXjZtinPAcBuBqBowfWYbTh2VgPKWjINayNfc2zPKrjDMl4Ot7qLPxO+6m8B4Ro1RTWUMuvJ6oOotPIOIzerL1SfO4VoBZ/SDhlgmQr6y6/4xx1z34YDNkDFaw9GFXK9MV7LqR/AzkaJN8xVfu2TiL1tre+Vr809Z9LMLCHe4UcJuZ51DkCfEOwLOG0HQVEPvglQbLSIfNFfXimVACGuFo0N3Zl7WLbB8qcgOlSYBMH4J1hp3vJPxFp7UHqNOJ+ctNrxMH5Cq4GrpLRZI/CYLq5akDux4J9dYmNw/vYQQ4FH36kt+YNkqg3JMrxyfXn2hrjlIcsB9L+UVkqgO8aqOCtue/0IhVyvAFPI9eA9axXo3EfD3ED6VHU+MVBXPfRe9QDEJweZQU/qzCX+xDtUE7+69HJodcBMOjCSUAQZrU8Xygs3yel8OvCaVsKAfC8cT7hWcN7c4wswFV+ytFM732eTTipbLeKosCFAsfNgbjBq/MJzyZRTGyY+WqFUV2rBc8QzRDYy/vUz+TM3QsPvSCoQOHAVA6k88l3lYTLLJhnRTd5Sgf3zqFCcKUvTFS0oCR29D2KLqtA4cDWHGAPbfyXqrRrocd8yiMtg99xgBvOJ5R+vJqSKW50wy8P8kMyXT/AC8AYhlv2rxIsJfT6xZvye8QcYGNr7FtfllNvOKYSeVapf02SXS144ptcqZRE5BJ6ZVlWGo6BA3FjS2ojLRxp1ysIepVeYCzDtJaS2LEoSi/7CsKBcyCdT6q0cKKXjW+d7078btDwLwtRSTyjNDwJzx7uZ/mEJTt5aSgc2AMHwmGdDZ0LrUz36ln0Kq039tJH33Qm8e+dxPXNvIr1gCv0KWcUOFHguDjAZnYTu6FvcbnJBQ/s/i+A6mNa7k0T+07L91yCHqb1chc8/0wkfWpkAsCx9US+qAyeqigK3ChQONDHgXJG6eNQaS8cgANFUco2KBwYwIGiKAOYVFAKB4qilD1QODCAA2cDcBaHErMlphNzuffG/+VdHIMWuOCiKGtCR0lMDQq3uX5w+fw83lOEvPugPwAKyOXnJDhQFKUmRpTEnPzY/8tbG6HcnioHiqLUJIui+Ha3esMbFUevUmDhHCiH+c0bwE8Yuj6229yrtJ4cB4qibBap3xF92oxSWpfAgfIJS0bKhF3XaPpKufGPkjLdS/WJcaB4lLxA9SYlu5Xnz6JaiqLkxe0/F/AT7QKFA6v/Abwnfboas8voAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle \\frac{E_{b} \\left(\\dot{s} - \\dot{s}_\\mathrm{pl}\\right) \\sqrt{\\tau^{2}}}{\\tau} - K \\dot{z}$" + ], + "text/plain": [ + " _______ \n", + " ╱ 2 \n", + "E_bâ‹…(\\dot{s} - \\dot{s}_\\mathrm{pl})⋅╲╱ \\tau \n", + "────────────────────────────────────────────── - Kâ‹…\\dot{z}\n", + " \\tau " + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_f_ = f_.diff(tau) * dot_tau_ + f_.diff(Z) * dot_Z_\n", + "dot_f_" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{E_{b} \\left(\\dot{s} - \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}\\right) \\sqrt{\\tau^{2}}}{\\tau} - K \\lambda$" + ], + "text/plain": [ + " ⎛ _______⎞ \n", + " ⎜ ╱ 2 ⎟ _______ \n", + " ⎜ \\lambda⋅╲╱ \\tau ⎟ ╱ 2 \n", + "E_b⋅⎜\\dot{s} - ──────────────────⎟⋅╲╱ \\tau \n", + " ⎠\\tau ⎠\n", + "───────────────────────────────────────────── - Kâ‹…\\lambda\n", + " \\tau " + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_f_lambda_ = dot_f_.subs(dot_s_pl, dot_s_pl_).subs(dot_z, dot_z_)\n", + "dot_f_lambda_" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{E_{b} \\dot{s} \\sqrt{\\tau^{2}}}{\\tau \\left(E_{b} + K\\right)}$" + ], + "text/plain": [ + " _______\n", + " ╱ 2 \n", + "E_bâ‹…\\dot{s}⋅╲╱ \\tau \n", + "──────────────────────\n", + " \\tauâ‹…(E_b + K) " + ] + }, + "execution_count": 139, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lambda_solved = sp.solve(dot_f_lambda_, lambda_)[0]\n", + "lambda_solved" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{E_{b} K \\dot{s}}{E_{b} + K}$" + ], + "text/plain": [ + "E_bâ‹…Kâ‹…\\dot{s}\n", + "─────────────\n", + " E_b + K " + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.simplify(dot_tau_.subs(dot_s_pl, dot_s_pl_).subs(lambda_, lambda_solved))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The relation between the rate of control slip and rate of stress is continuous. How to transform it into an algorithm?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Numerical iterative solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far we expressed the change of the yield condition using the continuous rate. \n", + "To move through an inelastic space of a material, let us now choose discrete values. We assume that we are in a state $n$ represented by known values of $s_{n}$ and $s^{\\mathrm{pl}}_{n}$ and $z_n$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us now prescribe the value of total control slip at the next step as\n", + "\\begin{align}\n", + "s_{n+1} = s_n + \\Delta s\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How to determine the new state of the material represented by $s^\\mathrm{pl}_{n+1}$ and $z_{n+1}$?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we have learned from the continuous case, the consistency condition is the key to the identification of the plastic multiplier. Thus, given an inadmissible state $k$ with the consistency condition $f_k \\neq 0$ not fulfilled let us introduce a linearized approximation of its change around the state $k$ to search for $k+1$ in the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\\begin{align}\n", + " f_{k+1} &= f_{k} + \\frac{\\partial f}{\\partial \\lambda} \\Delta \\lambda\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While in the continuous case, we required \n", + "\\begin{align}\n", + " \\dot{f}(\\tau(s, s_\\mathrm{pl}(\\lambda), z(\\lambda)) &= 0,\n", + "\\end{align}\n", + "in the discrete case we transform this condition to\n", + "\\begin{align}\n", + " f_{k+1} = 0 \\;\\;\\; \\mathrm{for} \\;\\; k \\rightarrow \\infty \n", + "\\end{align}\n", + "In the linearized form of the yield condition we can transform it to a recurrent formula\n", + "\\begin{align}\n", + "\\left. \\frac{\\mathrm{d} f}{\\mathrm{d} \\lambda}\\right|_k \\Delta \\lambda &= - f_k,\n", + "\\hspace{1cm} f_k \\rightarrow 0, k = 1\\ldots\\infty\n", + "\\end{align}\n", + "In every iteration step the state variables $s_\\mathrm{pl}$ and $z$ must be updated using the discrete evolution equations, i.e. \n", + "\\begin{align}\n", + "\\lambda_{k+1} &= \\lambda_k + \\Delta \\lambda \\\\\n", + "s^\\mathrm{pl}_{k+1} &= s^\\mathrm{pl}_k + \\lambda_{k+1} \n", + "\\left. \\frac{\\partial f}{\\partial \\tau} \\right|_k \\\\\n", + "z_{k+1} &= z_k + \\lambda_{k+1} \\left. \\frac{\\partial f}{\\partial Z} \\right|_k\n", + "\\end{align}\n", + "a loop and simultaneous update of the state variable using the evolution equations we obtain an iterative scheme valid behind any plastic material model applied in finite-element codes. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\\begin{align}\n", + "\\frac{\\partial \\dot{f}}{\\partial \\lambda}\n", + "&= \n", + "\\frac{\\partial f}{\\partial \\tau} \\frac{\\partial \\tau}{\\partial s^{\\mathrm{pl}}}\n", + "\\frac{\\partial \\dot{s}^{\\mathrm{pl}}} {\\partial \\lambda}\n", + "+\n", + "\\frac{\\partial f}{\\partial \\tau} \\frac{\\partial Z}{\\partial z}\n", + "\\frac{\\partial \\dot{z}}{\\partial \\lambda}\n", + "\\end{align}\n", + "after substituting the evolution equations we obtain\n", + "\\begin{align}\n", + "\\frac{\\partial \\dot{f}}{\\partial \\lambda}\n", + "&= \n", + "\\frac{\\partial f}{\\partial \\tau} \\frac{\\partial \\tau}{\\partial s^{\\mathrm{pl}}}\n", + "\\frac{\\partial f}{\\partial \\tau} -\n", + "\\frac{\\partial f}{\\partial \\tau} \\frac{\\partial Z}{\\partial z}\n", + "\\frac{\\partial f}{\\partial \\tau}\n", + "\\end{align}\n", + "which can be expressed as\n", + "\\begin{align}\n", + "\\frac{\\partial \\dot{f}}{\\partial \\lambda}\n", + "&= -\n", + "\\left( \\frac{\\partial f}{\\partial \\tau} \\right)^2 E_\\mathrm{b} -\n", + "\\left( \\frac{\\partial f}{\\partial Z} \\right)^2 K\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, to evaluate this iterative scheme we need the functions\n", + "<table style=\"width:50%\">\n", + "<tr>\n", + "<th>Symbol</th>\n", + "<th>Sympy expression</th>\n", + "<th>Python function</th>\n", + "</tr>\n", + "<tr>\n", + "<td>$\\tau(s, s^{\\mathrm{pl}}_k) $ \n", + "</td>\n", + "<td>tau_</td>\n", + "<td>get_tau</td>\n", + "</tr>\n", + "<tr>\n", + "<td>$Z(z)$ \n", + "</td>\n", + "<td>Z_</td>\n", + "<td>get_Z</td>\n", + "</tr>\n", + "<tr>\n", + "<td>$ f(\\tau, Z)$</td>\n", + "<td>f_</td>\n", + "<td>get_f</td>\n", + "</tr>\n", + "<tr>\n", + "<td>\n", + "$\\displaystyle{\\frac{\\partial f}{\\partial \\tau}}(\\tau, Z)$\n", + " </td>\n", + "<td>df_dtau_</td>\n", + "<td>get_df_dtau</td>\n", + "</tr>\n", + "<tr>\n", + "<td>\n", + "$\\displaystyle{\\frac{\\partial f}{\\partial Z}}(\\tau, Z)$\n", + " </td>\n", + "<td>df_dZ_</td>\n", + "<td>get_df_dZ</td>\n", + "</tr>\n", + "</table>" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [], + "source": [ + "get_tau = sp.lambdify((s, s_pl),tau_.subs(s_el,s_el_))\n", + "get_Z = sp.lambdify(z, Z_)\n", + "get_f = sp.lambdify((tau, Z), f_)\n", + "get_df_dtau = sp.lambdify((tau, Z), f_.diff(tau))\n", + "get_df_dZ = sp.lambdify((tau, Z), f_.diff(Z))" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_f_df(s_n1, s_pl_k, z_k):\n", + " tau = get_tau(s_n1, s_pl_k)\n", + " Z = get_Z(z_k)\n", + " f_k = get_f(tau, Z)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": true, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/bmcs_course/4_2_BS_elasto_plastic.ipynb b/bmcs_course/4_2_BS_elasto_plastic.ipynb deleted file mode 100644 index cbab04a..0000000 --- a/bmcs_course/4_2_BS_elasto_plastic.ipynb +++ /dev/null @@ -1,694 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 4.2 Bond behavior governed by plasticity\n", - " \n", - "In the first part of this notebook, we rephrase the basic framework of\n", - "elasto-plastic models showing which conditions are used to find out how during yield \n", - "to describe the material behavior, once it crosses the elastic limit.\n", - "Perfect plasticity with constant level of yielding stress is considered first.\n", - "\n", - "In the second part, hardening variable is included which allows for to expand\n", - "the elastic range \n", - "\n", - "Define a bond-slip law governed yielding with hardening or softening." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "import sympy as sp\n", - "sp.init_printing()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The onset of inelasticity" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADEAAAARCAYAAAB0MEQqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACsklEQVRIDcWX/1FTQRCAA5MCMHagHaB2gB2AHQgdyPhX8h+DHQgVKHYQ7ADoQDpQ6SB+387tm3sv7yVhQNiZZe9293Zvf90LW4vFYlTDbDb7xP49uFf4l9Dbsp4Uugt9Bd6g/6bwno8YRB9Op9MFeN0nk4fsEJwPyZ+Sv92XPrKbVfjWJy+879Cs0Aq1/y/qDQK3tpNgK62CX6uETyUbCiIqQUVu6ouwP8096zvWP3L/nHQ84NzBbVWBSx/Ca2Ue3i3ogO9AWwEP2G3Y6JuQ34VhQq7uayONLQWBoZyHCeuvKPoiydsBX4MNIDcAdd6CLxrBmgXnrlH5CI3AoXP2vnJHa46GGH3vcg7us97qa6ecB50cgQegF/Q5bQ1y2R+H5Q3/cMbAd6F15bSxsR3OWjmTF/dZqgSCqETHCeyl9upeRJ1N4I9K2P8L8YW7YN1qXeUbgMmOc32VWJqHYvAkDePUcmbbJXsjylmz6AWuQOdsDs92ui94T9ty1KoExvJiS0aL83T0mUUTlEzkXsjgBGfnuHNGnWwlX7XIIjx/IZwqA5t2Za0t/eTwj+B9YZ/gXWOGupXIeRgsL4bMgA7NaIIOL3VSHF2w/5nCispvnmn5RV/aDcDzJ0V+xvqd+gI873CXZ7pB7BeleuhkBXDI6MN4YTUkDcpgbRKcmaxs6jkPmajgoWMlukPty2NQH5BbYekBNEG7tmPAGKFZ9JClFkfwzFgMIHQCqpNyX6neINGpwUuEvYpp+X0WZVlJ7fqt6X40vaSv4lBHmIim5Q1CY3WUbB8FDKBpES3iy33d17L7IIKrBZz1g+pdBb9Lzly8kNvBeoQ/GGyyztoWsGJDmVznMdoxlbBjUHZLQv5CiHYdJ/eB1Ozu4UwzOnzJ+iH/Z9gZ8WJpUMBe3S1n7H0goqX+AWo4hU7cghCdAAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle E_\\mathrm{b} s_{el}$" - ], - "text/plain": [ - "E_\\mathrm{b}â‹…sâ‚‘â‚—" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_el = sp.symbols('s_el')\n", - "E_b = sp.symbols('E_\\mathrm{b}', positive=True)\n", - "tau_ = E_b * s_el\n", - "tau_" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGcAAAAVCAYAAABbq/AzAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEdUlEQVRoBeWZ61EUQRCAD4oAUDPADFAzwAykjADIQMp//KMkAzUC1AzECFQyECNQyQC/b2pma/Yxw97eCSd01dI73TPdPf2a2WPt6upqtgpwdHS0hR074HerYM9N28C+X6DzHHyRdK91gwPzFcznPDtx0hk4LXgYadtgnamwJ5E2GSFjk8Ufweq9t8D+P7L5Q3Dw90bXEzBOoJ2ALSmdP+gw6Pvwd7vrJ46/LFHWRBNWYtkeVuiLkPDrQybh+FQ1p0P8SPsAThVVmVZnxSB/Ay8sq65p9bn44BIrz8B2r1mvcuIWUrXY0mrwo8YcyTtkXtI3csmdnnbM7n7ynAxWDoxQOUTwPHcD4zdpHKP8KY2nYGR4bs3A975qkv+iXy/AO6XK8cBvVQ2TPWNalQJNITp4E9wKZFJ2DfaG0tIzNB/ZJsWvyLP0bYNT9A2Jn4t2Q7bok91ecFAeqgbmQ97finmkeaN6zNMAfAPjnKc8DxrG+BfbmTeUIqDjO8w9cAgG+DNjD8yD4qJ/xFiGLcjQj+95XvC+VjDVIjgYamup/+uQA55dHh3fuoMrFLrtyDNjKhjc36XFyJe/Dc6rRH2L6Cypq9KXZQtyrHwTutbK9clmr3IghsrpOARyu/3A7zrNOfOCVamxJQiBQ9cfJng79Fuo2gbhm5leR+eBpjIri+a2pSLLAqjtw8BtDQWnd95EJd4iAkQHGMQ8oyN3eQg9lzxuxErxzNtn7FUzVXdPmWsgLvxh3BWs3Kh3tC1dGdlYH1fbuXNbwUF5qBro9vUWxE0n2mtemmBJhK/zzFrBs8kv3VpVOC+Ury9dYG1qad4IQ5ZB8/7/Rh5PrS10xS00HmsL8/SBieE5KeiPZzzH8PJE1s+1M9OOctE9c1JGFksOJUZd5+SO1wgz2l8W/IXBrBjTWnSwhgyBMpqruxOibPGNBSYaNo8tzvVM8UapL0xiaQGg6T+rsLYHE/OyGxyvtjMW5lGWFAC6EdfpraqRCa9RxrvB9UxKleiUIVBPqQVZVSlZwlrkWTk3fhlA57W2YJsO9VzU+Z8YJx+axPIS6JNvaVDA+uRsAyFmvVc7BQQh0Iy0BglmtnMS31tbUiy/BAYrN2ponu3TLBsCy97rpjw3qA1+Vy304auwCXCtLdgVkhNsG/ua6QiVko1NuN6xkfF99dNkz+C48WX9gKngBAamqaZEzDG6bYUznt4ZAs21toVbhzltsTLyzvKSsRWVQMd7Hg/edqGbhOGjfj2tWBQjtKkS3j0YrbDi2ZXp81y5jVaVmbCc1+gDnWvCzxhbNT75/oLjoRnEIfCyFbpJ7/85Q7NrtGiA2eFXraBxj6DnBgVG6Q9zLXM/eKuVVlq/KnTs98zWuafRpt6tlTk63uB95r2VvIz13RdwOIc3opDJCEGeP2POoJoO26rnXOsCUFuwojztD7fWkn34y/OrBPqgOWKW1tZK2sbQMdhMsnJsh/8z2Kryy8DovcS9t7rHwm1ttPY7PhHn2q5MLm+T/hxkwi0EfwHEAsoiJZo6qgAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle E_\\mathrm{b} \\left(s - s_{pl}\\right)$" - ], - "text/plain": [ - "E_\\mathrm{b}â‹…(s - sₚₗ)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s, s_pl = sp.symbols('s, s_pl')\n", - "s_el_ = s - s_pl\n", - "tau_.subs(s_el, s_el_)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAWCAYAAABAMosVAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC3UlEQVRYCe2Z0VEbMRCGMUMBTEqADqCEmA7IpIJAB2F4st8ypAPSQuggpIIwdBBKyKQD5/uE7rDlM9z51sHJ3M4cK+lWK+2v3dWeGc1ms52BnhCYTqcH9H4+jcS09mLU/FdarrDmBMBvI63ajVT2r+vK3nwQDbK4DB696B0XdD8tDrXvcUBGwz6P6eeB54Kx3/ABaEGQAESAxvDzNNDxD/ME+RouwDvwr7DvPMf2h9QhCo90CdOj16XTYqKRcQTgevcAtCAAht58Cr+x34MSqHl+Shm009iQox9R0ZsN/bWJQzosJh/l/p08BGgWMWxOsuIlxvvOeS/rtAL4vKQwcAD9lTeXQPVdxYOLvQzZrCHXN+z6Grbu/DMm9vLmcmHwUN/tvJOEeHS50Lb0MXTsXuDPfXyc8z7Mm9Hlwe3DF6I4BGiUfkS5ec4wbCJDaKMpoFx0bk+WW6nEWiFzXY5X/TkdrexC3oM9hCeQc/8X/L430Cipwu4ti3jT2re0sZ0ImVRbVv1Nc9bzpv+S17miP+Zp8uqV3ox8J7uQ9/JLttOuSj0Bf+c+egGdlf+A1/mZtmFzr/LXItavPhoEW+OtjxeARsYQb/Rm3glaV7v8ONHz/VCpCV3J4UaTycSXCnWhDyhYAjNv8BKeTrGNQmQFwpAryX294WmKhoe2ayAnmIJqSNe6aPsL3TE8AUF7JSEj8J3sKpXt5YUac1gp3KL/HplvLeRqEdZv/Bpj3PCLKO88SIF2nSp32r/JttN8kTrbVWrcLQd69gUnFeg99YRNB0y92NR2RtsokQTde6Qt9bYrDGiM8ALSA5dSSltrNihXgWr4C5o17ospw/0gF2JXGNDsSQPqHOgmt4UAy8P3MWVYhjamK8abKMSuSKAt+htv8abdv8KYXm3quGvrzXmPIXaNtvV/hoChJ0VchhmvlAa8qK2d/3rk9aqjaws201ioeyOWAOCVP3xF6H9Oxx9x6wELSe8rywAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle - \\bar{\\tau} + \\sqrt{\\tau^{2}}$" - ], - "text/plain": [ - " _______\n", - " ╱ 2 \n", - "-\\bar{\\tau} + ╲╱ \\tau " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tau = sp.symbols(r'\\tau')\n", - "tau_bar = sp.symbols(r'\\bar{\\tau}')\n", - "f_tau = sp.sqrt( tau * tau ) - tau_bar\n", - "f_tau" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle E_\\mathrm{b} \\sqrt{\\left(s - s_{pl}\\right)^{2}} - \\bar{\\tau}$" - ], - "text/plain": [ - " ____________ \n", - " ╱ 2 \n", - "E_\\mathrm{b}⋅╲╱ (s - sₚₗ) - \\bar{\\tau}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f_s = f_tau.subs(tau, tau_).subs(s_el, s_el_)\n", - "f_s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The question is, how does the stress develop in the inelastic regime?\n", - "This means when $f = 0$?" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD8AAAArCAYAAADPGFBSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADMUlEQVRoBe2a7XETMRBA7UwKgNCB04GhA0IHyVAB0AEZftn/GOiAoQIIHSR0kKSDpAM+OjDvyZLG50R3ieNhTgc7I0un1Z31tKuVTvZ4sViMapT5fH5Iv1+U+o7+TUmX6se1wieAh+Q7D7m59nt3awXArd/S93ekRwWGY9p8LOhCdZXwQH2IUM/Jf5O8fh/LZKMRba5Doe3DOV9Tms1mU9Lhap+5Pl29vmu5Ostj0UuMaQrC9ZSC1r+3DCHgvYT69N7k3DAEeNf7803gq17ncfkJ0Ffk403ga7e8Vu+O6oWRqR1+H65PBbbO6qrdvpOuo0Htlu/Aa1f/h28fn+Fq/2nLN7a3rJe+IPyItnbLeE5d3koOzQcyPJAXwL1KsORuGZ+SOk9Eah2UAA/oBIBpAo8wx+QbbyBqGJBk+Z92FvhfZF9JJ5TPrCsJeg8Rvpf0hfrsWQV9qObZf+VgMW9y+MIDvllrmytn1BUPCJdN6v4ccxCQXP5bQgHaIyKD3z7lwbq+S91JBCVbCsDh7GvI4JIK73xvuHe0vFNg0JLc3ldDxbXdQHbNAORpoGKIkgNen+GiJ+qdORhTTrFoL/bdszzj1yXt3Z90ShXwiQIol8AiHPrX6I/IG9M43b+eO+erEICS1b+0dNg9SvKIlmZLVTXwdDdZs3XzRburTurYoCb4YHk8oPGixbX7kSCUDdh3DtQ1wRvQGlYH1jnesDR1rlQTku1bZbdV2xMlIGm+71H2wNIIb53LsoeYWQTnwjbPSI+z4pZCFfD0O833xosRoBekRoDzmuQGrfOlqxa3D5YHqjHfAVyfBp2uvuoAtcDfmO8Rwp+lgzAwToE0PWJte9Z7twcqAd34MRKd0T2Jf1TIg2ElegOig6IYG/zDQr6n9/B0OM33hotLkwQgPcMIn8G4FtoziRATyB1E40De+tbg9uGli86vz3c4gnUTVMPqUZeDIfc7eB7VJU8a9dLydFCrfSa5bJlG1Hnu4Ou34lJnm6R3v3/r4Nh4RRyM8Dzr+gqv+x7ZwS2L4Nkbdrb88F49Dm/IVqZs8NNDcuzopeW3NIIexR0A6+OcIk8o52Bn5R+8MaqBJpgVCAAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle s - \\frac{\\bar{\\tau}}{E_\\mathrm{b}}$" - ], - "text/plain": [ - " \\bar{\\tau} \n", - "s - ────────────\n", - " E_\\mathrm{b}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_pl_f0 = sp.solve(f_s, s_pl)\n", - "s_pl_f0[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAABoAAAAMCAYAAAB8xa1IAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAvklEQVQ4EWP8//8/A6WgoaEhBGiGKy5zgPLpjNSwCJcFyOJMyBxaslmoYTgwaMqA5lQCsQAO88optghoSSfUcGcg/QGIQfx2KBtIMTAA1dxjAMURubi+vt4IiEOQ9QP5u5H5MDYL0DaQd/eCrSaeSAXqOwfCQC0gDAZAvhGQAfIVBgBZBJIwxpAhTyAcqG03Nq3UTnWg/HQGm0VUy0fAkFECWnAXSDNis4iaPgL55h42S0Bi1LRIGWjeTFwWAQALMXeXGKiinwAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle - \\bar{\\tau}$" - ], - "text/plain": [ - "-\\bar{\\tau}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tau_.subs(s_el, s_el_).subs(s_pl, s_pl_f0[1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So far, so good. We obtained a trivial result telling us that the stress cannot grow over the \n", - "introduced elasticity limit. But in this case we can just reproduce the constant bond-slip \n", - "law - now extended with a elastic stiffness. How to provide a general framework suitable\n", - "for an algorithmic treatment? How to distinguish between loading and unloading?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So how much plastic deformation was consumed? What was the direction of flow? \n", - "There might be several different processes going on the material structure?\n", - "Let us postulate, that they can be clustered by a positive flow variable $\\lambda$. Then\n", - "we assume that the rate of change of all state variables representing yielding \n", - "can be related to the common positive parameter $\\lambda$ and that the yielding direction \n", - "is normal to the yield surface $f$" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAAvCAYAAABOtfLKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADoklEQVRoBe2a31EbMRDG7UwKoAbTgVNCoAMYOjAdhPETvDGkAyghoQOggmTSQVICSQfk+8laje6sO584nZ5OM7L+rVb77bdaYyXLt7e3Rc1yc3Oz0nlnqnelz/1YWuEAfYC4F6jlANkskapgPCsrtc9ZVnph7cMRR6qw+0f1SnP/1LpSFYxOvFK93R2d9+mBwCggFmq/q3lR/cSY8mHX7D4lcKS6UQV50YJuKTxR+/hOxdyzuOCUdWxrGwyUvar+ltBJvLNAfysdMDOmxE628ApzDTCc4j3n4nHMqfFe6YSVM687Xhrc195j1fiurf3mn6ZkD4xfuFdLSGBEiQIrpVMx+hoJoAuMxfVmLBLvEFh5GKvL9ksXQJ7VfrU52iQYCRFmv1QvERpZcEgxVmQb+khUe7b1pWZCjVTI94JLh21QmndJQm0cy22xS60ftydtrLUv6hOGXSFNKDkG1HIed8cB8eNXtTh+0Qfmm9YBxMa9LCQFZgRAQ65XPxQvg45k0box9lkCZCfGt76vxiUk50jJcuHduvqWprHtHDlKH5jVTmQBrQ0wUsaa3YE7jUkWKXY6WZE8xv1Qa/dzoT7h47zsz44bviBhjy/LUCSPE1xZpv7QlIB5gY149lRze8ZqDuV/VbmMp2pD0dhiu3FJg0CrI3nO3KoNnm6JHBzuJQCvFBDn6uN9kLsYbWvTOmvIwAxsxQU2jb14vqt/oYWnrsUh8w0wMogLBp0wYfRxdyxGUzot7kMoai+sPEY6Uvvac5wRvgDbi0PGAYwHgmdgJM5e7gJrLgnIyxL3G/UJOwrAuMiDivbBKlmz674M0uPASAmMAIQL27gb/gDAJUPNn2KGE/OA5g4Zs16kt2FP7MBe4a5FYwZPks+7Ypz11L1wej1gvEp4bVVDyDmBwx98D3Wm8MPbdxLJbDZ0cyznGSFxPKjfx2K8rWjfmBmtVAC4N4SoJYTROnMVFGMm9+Ap5IsxM4VxuTpnMLkeqyU/M1PL07nnLK+vr+u+z+ZamCE/p+YMZ1UVnRNAVXdnHDYzk+GsqqIzM1XdnXHYzEyGs6qK9r1ojjJEvzzt+dZebNr6whtye+G940nACIj9dD74hvxew5P7eJ4tWfWH61r1LNap8VM8nqpfnBmxwpNTeMzTmDfknDe0pNOHTNbIZhcyZNQb8hAgyNQAM/oNeSiYSX/PKMRWMoR/hi/+X0tSAKdmpsgbcsrw1NzUYIq8IacMT839B/4RvLoTtUcqAAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}$" - ], - "text/plain": [ - " _______\n", - " ╱ 2 \n", - "\\lambda⋅╲╱ \\tau \n", - "──────────────────\n", - " \\tau " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lambda_ = sp.symbols(r'\\lambda', nonnegative=True)\n", - "dot_s_pl_ = lambda_ * f_tau.diff(tau)\n", - "dot_s_pl_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Relate increment of yielding to the increment of primary kinematic state variables**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But what is the amount of yielding controlled now by $\\lambda$? Solving for $f = 0$ is not \n", - "of much help any more. Can the elastic range change during the yielding process? An abstract\n", - "distinction between elastic and inelastic loading processes can be provided by Kuhn-Tucker conditions\n", - "\\begin{align}\n", - " \\lambda \\dot{f} = 0, \\; \\lambda > 0,\\; \\dot{f} \\le 0\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGcAAAAWCAYAAADdP4KdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEW0lEQVRoBe2Z61HcMBCAD4YCCOmAdEBSAukAJhUcdBAm//iXgQ5CKkigg0AFIXQAqSDkOiDfp5E8ts8y9p3vMUN2Rqy9D+1qpV2tj42np6fROsDp6ekufuyDL9bBn2X7wLoPsHkHfki2N+qbA/MjzPeM/Sh0DU4KO5G2BzaYTvY20mZGzLGN8iVYuy8WWP8liz8Bh3hv1SMB4xzaOdiUMviNAYN+BP+wrj/j+03bXNhy834zHnie+zDM6GNQW7AvY4wYi7DGzSZHcSBlzbcmfqR9B6eMahFrZ2HLTb4FZ+eCN0HmkZGVabcyHHeRvsS5r8FWr9FU5sRlpGyxpLXBfRuzI+8EuWQvq4LDb7LMJTMW7MtnlmOVOG/MHBghc3Dirrxu3s/SO8+e5qv0PgtmDu+tEXjlGTGL/4vQiXG1fO/nMscLv5I1CFt+KpkCzUkM8Da4spEdHbdDqdhp0mNuD8WfyPNQWAZnsdc0fS/aknwxJodTm4PxkDUwd3j+ImZI81KulBb4bowy7xivGH3BcmaHkgVs/II5BofNAP/g3QvzOKu0IMa8vqBvDL8yPMxtpdwkOG4qa0nJgBwzDhkGvtKD8z6CbjnyzpgV3NzHnDLzy98Dl7NEe/PYzJlrpQ/hC3OY9R7mlAA5m8ZkeypzkmItIE5SKT/w60FTpi+YlTqcg7Bx2PqLgN2h30IVP+qK8D2dtqN9oMjMFqXevmTmus3Qy2QP/W7T5kzdN1HLLiJADIC7Xz7RkTscws6EYSabKd55R7zbaqbsnjKmDsTBv4WcN9rt7MuUcz0Jlc3BuAEXrOsViItOtE88FJslEb7B89QK3k1+6bZlhXIhfX2oA7qppNkRhmyBZv9/Jo+xtA6viy9RxvvTGNjAGAOfrQ5m5nOxQKwAdR7qd046kdnSgREzy+CUjemEJ9pfFvyFQSe7lBYDrCNN4BxF665AnFu8tI2Jjj3rS/RpjLyHym7Sw2nT8pPRJRaIFeAck/rm2NqOmLSxXEE3szRUyZqoUwQMOTfXOylloiJNoJ1cCTKr0mEJusxn5iy9GcBmL1/ws4gfzx7WLrEIa4x/jMn1Fsqeets7d8sxguZJ0SHBk61M4tu1FcYVyICbFebL8CVbPu1emsBTd4AteWapPvhdNdeHr5PNAPP6ov/PxaLslp8mYzdHxaF+wCwb0Jkim8qM9IxtS+GIMXWHQFPXU7dyGMCXcLC6LARbyoaP+s0uCl1kDHCS49nmwAzL3l1JFuy9sopSVXJh2MdaLCzFXWOhIzZboZpM/T9Hbh/AERuED4z7qOfOv4beOeDIWt784G3NtDj/2qIYC3/RsAwKoWODHt7BxsYrxLv9ivdKxYr8G3C4h7cQmguYyPunyx3UZkcnvecqDUCbwjrziEnjf3OhT/C7siG1dRiDgj9YWasZ6fUanTZzLIcvEuLaK9Vj7rL2IiPZsGiC653rXeHnwwXvqbQ1SHcj/d+cbnFaidQ/7XrNcMLKob4AAAAASUVORK5CYII=\n", - "text/latex": [ - "$\\displaystyle E_\\mathrm{b} \\left(\\dot{s} - \\dot{s}_\\mathrm{pl}\\right)$" - ], - "text/plain": [ - "E_\\mathrm{b}â‹…(\\dot{s} - \\dot{s}_\\mathrm{pl})" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_s, dot_s_pl = sp.symbols(r'\\dot{s}, \\dot{s}_\\mathrm{pl}')\n", - "dot_tau_ = E_b * (dot_s - dot_s_pl)\n", - "dot_tau_" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "dot_f = f_tau.diff(tau) * dot_tau_.subs(dot_s_pl, dot_s_pl_)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAACcAAAAvCAYAAABg8NNYAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADZElEQVRYCe2Y0U0cMRCGuSgFUAN0QEoI6YCICgIdBPEEb4h0ACUEOoBUEEgJpIKQdEC+z2dbu4fvdu07IYRuJK+99njm399jr+3J09PTxmuV9y3ATk9PN+n3m/RA+UOLjTF93o1RmtUB0D/qHkkPs22rfJ+85mFtYm6V7Cyy1Rpz5xj9Ew07xHcM9a/kiPJXysckY7MkR+h8KzV066rBYfQeA18SGPIb3p0UhxrmXeDKR5LAfT+LZbKgMypWq8DheAvbO+SZJd6PSMEZ9TuUf5JfkwehvDmjn5oG8ypwWHOGbuDsL9l30hXlW+sUyoLOwHkXrOw1SdWEwJmOPpHuSAekG+oc1nmyT8Oi9nn9Qv1o5gCRhtQhC2xRZ+Cf20YqxdEe7Z+Dp4ZHDXNXAun6AFCYcSVgAkZX0HmYu33HlGvAGW8OaRYcy5wToiSyVmKzpFusGz2s9Hap2AOQhoy9TZL/1jwzbejINuWLznt1cf37qqYsdqiJuVYfzf3W4FqpWzP3JpmbnJycvNrj13oRfpMxV/PjLxLAj3+LBncgve1UUbmycmlwEdQFICeVvgfVlwIXWXNDmc8Rgx47CvSTbbdesu/ezyOj27EgS4HDghtNj33VEoHJeDq5udP+Qcp3L82/L4z6xbvk8zabQ4CN0674kR47ZTFIMzh6e6Kft0WfWh9+ZiCopuHMdU3DGllzy94Mjr5u47viGVfx2BmklTlZW/XSob3ehKj+fUXW7gtfPv3chie2wqwl9xCVpYU5T/orYw1A2vM+pQdMhL2YQ2HXSvJF69Yh7bPxYrcgtI2+/kJXf9vkAVh8fyQPB/EMjopk1HUnrzVTl9Nn1Jl7FqU9MTp4/YWuE0D9M8ppWRFkvr4I4Gh0+l6SFO8+XL9K7M1lDf3a6y8XXNdKF98s2ElLykZvQtCgstdbt5Rnrx5SbAzeSOqJ/oI9Js9MWF8jvQmBIVHLoMzJZldc0xK73fp55X0amq+/NNoDF72kuMkLLEBl7TqCj2qDmXGUF9RB7YLCM3AAcEL4vzyg7DArAj0LpREP+sn6UtdfunkGLvpOQIwZGTAGc6BGnUWZfcJuY5HSUFsRHEBcZ0wOZ8sPfunrL4H3ZqsVSSJjTvNLymGRTG0vlReZ0zmAjDvXujRBrH5R+Q9l3C+DDXMFigAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle \\frac{\\dot{s} \\tau}{\\sqrt{\\tau^{2}}}$" - ], - "text/plain": [ - "\\dot{s}â‹…\\tau\n", - "────────────\n", - " _______ \n", - " ╱ 2 \n", - " ╲╱ \\tau " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lambda_solved = sp.solve( dot_f, lambda_)[0]\n", - "lambda_solved" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAvUlEQVQYGYWR0Q3CMAxEG8QAnQE2gBnYgBVgBPhMfmEUygZlhMIIYQIoG4R3aRIVPsDS9Wyf47NUE0KofsV0LDrnauo78ORLaRN9ctB8kT+Bzz3zz+JjQ3415u8bDoiPNCC7rljgf6WxgW8agFvIxw0UM4pFFjVA7MEwQKLL9aqHTqAhv6gXj6SQ3wp0YAtaerKojLU2rz+roUDcQTp4rg1NKqAhGDgqg70G5K/1JdIGHVks1knVLTXQv4iWb/y6SDi/G9jcAAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle \\dot{s}$" - ], - "text/plain": [ - "\\dot{s}" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_s_pl_.subs(lambda_, lambda_solved)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA10lEQVQoFXVS2w3CMAxsKwZAsEHYgMcElA1gBNiBv/whVmADBCN0A0RH6Aat2CDcBV8VVdSSc/b5HKdJ8xBCJvPeXxG38A98Ab+Dq4FZLiGIN/IL8MkCcAogt0PcFEaegE4i47grmx7MoxB4gFckBvZCvuTuEpYDgVLuSisLOwuTjsuIOe44s6K6U23frNEs8ivHbE5h3/VHpWktz6iRIlO9pvzuERVejchUqOZKZ+SlrlOFxXzGmlOjEMENRAfcS4yYE/hiR3ITLmYr4BkCZ/kGuEUef4ovviBAXcWd104AAAAASUVORK5CYII=\n", - "text/latex": [ - "$\\displaystyle 0$" - ], - "text/plain": [ - "0" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_tau_.subs(dot_s_pl, dot_s_pl_).subs(lambda_, lambda_solved)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Convex mathematical programming literature]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Can the elastic range expand?" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIMAAAAWCAYAAADjNi+WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD7klEQVRoBe2a0VHcMBCGD4YCGEqADqCEQAcwqSDQQRie4C1DOoB0kNBBSAUh1wGUQNIB+T6P5LF9uovPls0w8c44K8m63dXur11ZZOPl5WU20dvywNXV1S4WP+a2eiu3wEneKB64RssRoLjPqW0zp7BJ1vAeCFlhNzcQtHzKDMPHL7eGcwR+6ioUEJlVtnksNU8854z9gU9g0AlvhQiaQTyEn3WxOQDhBi4IZvBvsB88B/anMqEX3g5dYKqZoSsdN35ohtkHFGaJ/JkBwb+RK4JNPQ+BP8MllR7yzJlXoNHBif7tAfylT4/hfcCgImNQZAa4MZKKsaxnBgw10Bp9QvtOLZHCYn7R14B3cXzirT1gVrDedyZisNf48X7ou2mzZ4YTZC4AISi0Nu3wHGBURGR4NTxDpynyaJkm3q9dh4NMT/afl8nNMY58N5hZoRnMvuIF12AHyB0MrmUErWXsO0wUCoSYonw1GgW7FmwbzYB+ik75ea+s0FSPP5R3Dy+BnLVMIHzhkwdlN4xbPrwkmcMnqngAn+ibGXzVBdIZ77NlBWQJrm14LRtmBQPCa8GmL/pU7GJWLZYpwxL6P6LBumvKTZHpstwlqQm5xyo2mS2TB+owxw2VpIqMVutivuDbgxdACP1n+DwrGKrWIlwQGACdfFt9N3Yb/THFenD1vGLfLGa7IOaMWr7Q5wk++uWa/iFPasMszQrMX2tdzLdUF2unHT8zBYVnvewHSGXOgiLRfEt71N1WGFD5B/064Ce8PC/QNkXWsljlJ6M00V+ADy4gDJCfjDUw8M4NlcwKvOuyLg/xZhAvm0pCVrEpNi4vL33ppHXoAwKSzmTcNOSB8Y52gbgomL4n75U7kPdZ7Ym6I0e+TryA12yL71OcuQbLdTVJW3d4Umt6aquDeQbcwJu+S1m0Hxlr9fXF3LXXhewabSFEVCTrVW1mi04wSCB4qZRytuivHVqaYnPa05Qd+u/h2tiasCl50cO4qTbHp6VgEwylf5Bt3w1lfNrQ2utqCt1sDnTtY7Q10AzjjlgAF2PuLC+dXpsMYHHJ8tqGRP34xmxgGTulbbaRBIbnmrbUe11ZwBAWEHfbAhDCakyFX9uubIh52Clg3cnJEjeEzjVkxsBbwgysdwCtskKudeX6mjAjWDsX6huGWsu+8JgxWi2OuUORTi5r8lBKusjFN5ZWQWp5MIv65dOWsqyrNxhYgCdTA66T/USCFSdWweFOjGlv5VnBH41AXtwkT+cj6G6jwuygPx/w4zobJ8u6Nqb/A9kmRuk5BMwdmeMAWSpApuXWu4XRM1jvzFCu4v9s1O4FcrgAECz9Y1oO+atk/AVYwWpner+tGgAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle - Z - \\bar{\\tau} + \\sqrt{\\tau^{2}}$" - ], - "text/plain": [ - " _______\n", - " ╱ 2 \n", - "-Z - \\bar{\\tau} + ╲╱ \\tau " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z = sp.symbols('z')\n", - "K = sp.symbols('K', positive=True )\n", - "Z = sp.symbols('Z')\n", - "f_tau = sp.sqrt(tau**2) - (tau_bar + Z)\n", - "f_tau" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAAvCAYAAABOtfLKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADoklEQVRoBe2a31EbMRDG7UwKoAbTgVNCoAMYOjAdhPETvDGkAyghoQOggmTSQVICSQfk+8laje6sO584nZ5OM7L+rVb77bdaYyXLt7e3Rc1yc3Oz0nlnqnelz/1YWuEAfYC4F6jlANkskapgPCsrtc9ZVnph7cMRR6qw+0f1SnP/1LpSFYxOvFK93R2d9+mBwCggFmq/q3lR/cSY8mHX7D4lcKS6UQV50YJuKTxR+/hOxdyzuOCUdWxrGwyUvar+ltBJvLNAfysdMDOmxE628ApzDTCc4j3n4nHMqfFe6YSVM687Xhrc195j1fiurf3mn6ZkD4xfuFdLSGBEiQIrpVMx+hoJoAuMxfVmLBLvEFh5GKvL9ksXQJ7VfrU52iQYCRFmv1QvERpZcEgxVmQb+khUe7b1pWZCjVTI94JLh21QmndJQm0cy22xS60ftydtrLUv6hOGXSFNKDkG1HIed8cB8eNXtTh+0Qfmm9YBxMa9LCQFZgRAQ65XPxQvg45k0box9lkCZCfGt76vxiUk50jJcuHduvqWprHtHDlKH5jVTmQBrQ0wUsaa3YE7jUkWKXY6WZE8xv1Qa/dzoT7h47zsz44bviBhjy/LUCSPE1xZpv7QlIB5gY149lRze8ZqDuV/VbmMp2pD0dhiu3FJg0CrI3nO3KoNnm6JHBzuJQCvFBDn6uN9kLsYbWvTOmvIwAxsxQU2jb14vqt/oYWnrsUh8w0wMogLBp0wYfRxdyxGUzot7kMoai+sPEY6Uvvac5wRvgDbi0PGAYwHgmdgJM5e7gJrLgnIyxL3G/UJOwrAuMiDivbBKlmz674M0uPASAmMAIQL27gb/gDAJUPNn2KGE/OA5g4Zs16kt2FP7MBe4a5FYwZPks+7Ypz11L1wej1gvEp4bVVDyDmBwx98D3Wm8MPbdxLJbDZ0cyznGSFxPKjfx2K8rWjfmBmtVAC4N4SoJYTROnMVFGMm9+Ap5IsxM4VxuTpnMLkeqyU/M1PL07nnLK+vr+u+z+ZamCE/p+YMZ1UVnRNAVXdnHDYzk+GsqqIzM1XdnXHYzEyGs6qK9r1ojjJEvzzt+dZebNr6whtye+G940nACIj9dD74hvxew5P7eJ4tWfWH61r1LNap8VM8nqpfnBmxwpNTeMzTmDfknDe0pNOHTNbIZhcyZNQb8hAgyNQAM/oNeSiYSX/PKMRWMoR/hi/+X0tSAKdmpsgbcsrw1NzUYIq8IacMT839B/4RvLoTtUcqAAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}$" - ], - "text/plain": [ - " _______\n", - " ╱ 2 \n", - "\\lambda⋅╲╱ \\tau \n", - "──────────────────\n", - " \\tau " - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_s_pl_ = lambda_ * f_tau.diff(tau)\n", - "dot_s_pl_" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA6ElEQVQoFXWSzRGCMBCFURugBuzACnLADtSjRymBK1dL0Ks3tQN1hgrsQK/eHDvA70EIhJ+dSfZl8+WxEzIpiiJQZFkWkjaMO/qtWjemdQHgh/4yXui4rrezg1UEupLkmmrdDQ+2mwdyzEG15cUQLHfFrkrN3INxVBtPRtJglerBFlArEQej9oEx+Gwhz30Mrh29vnswn17gumfINWTt7tyDLXgBWqOPZP0o14qDrcODzSVakEK9r0rFVMIWvLGWY/td6FYCauWBGVo9CUwoqgUXxphPnudbCnP0Sc56BymgehwK7ev3R39y/EPRn+AqqAAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle \\lambda$" - ], - "text/plain": [ - "\\lambda" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_z_ = - lambda_ * f_tau.diff(Z)\n", - "dot_z_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\\begin{align}\n", - " \\dot{f} = \n", - " \\frac{\\partial f}{\\partial \\tau} \\dot{\\tau} \n", - "+\n", - " \\frac{\\partial f}{\\partial Z} \\dot{Z}\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAOCAYAAADT0Rc6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABwUlEQVQ4EZ2U201CQRCGD8YCjCVgB4IdSAcQKlA7kPgEr9gBtKAdSAcmdCBWIKED/L7N2c2eWxAnmTO3f3b2MnN6x+OxyGmxWDxj38Hj0r9F7vBPSjsI7DeUHPOAT+xJ6tWLxgwWcDdb5CD6confgk8y+i6P5TqxK+xv2I2HtS5zQNQJ3pf6JvpySfwRe48c5f42HcwB3hNLG2stCiAu9pEvRLK7foFX6GmRHNOmg73J/V1Fw0kBp5Oi35I4Rc7yBf6jdxW1QGoKCnmdA6Rv+CcC68ZX8DU8wd7ArjtsFC3BxIpwSmy7eQmfc50+gzdinrpF7f4+cnSBUqf4nj8WhF8BrGET4ojUcxq2i8PrMt/ioaDAtqLhPYnZdRaUTJJsopNE3iGC0L1SrznNeWNOATmf3n88ccjHtpPdkG+b3jsEOz7gxDvHqaDQyklLkP7KqOiAzj1t+HnUC7pQpSh2PF0aFUESyfpspjG6zdFJxC3om1ZOiO2vs6h3b2gUgl3X59t4Yt+2dV7J9Q3FLNGVX7CbnMIhpzefz3UYHMImSO/wJ0mxkQp0R8c57cOSJ2/8d8H5twrzjHS+XdsbmmGHG/wFT6Cz1aivRycAAAAASUVORK5CYII=\n", - "text/latex": [ - "$\\displaystyle K \\dot{z}$" - ], - "text/plain": [ - "Kâ‹…\\dot{z}" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_z = sp.symbols(r'\\dot{z}')\n", - "dot_Z_ = K * dot_z\n", - "dot_Z_" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\frac{E_\\mathrm{b} \\left(\\dot{s} - \\dot{s}_\\mathrm{pl}\\right) \\sqrt{\\tau^{2}}}{\\tau} - K \\dot{z}$" - ], - "text/plain": [ - " _______ \n", - " ╱ 2 \n", - "E_\\mathrm{b}â‹…(\\dot{s} - \\dot{s}_\\mathrm{pl})⋅╲╱ \\tau \n", - "─────────────────────────────────────────────────────── - Kâ‹…\\dot{z}\n", - " \\tau " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_f = f_tau.diff(tau) * dot_tau_ + f_tau.diff(Z) * dot_Z_\n", - "dot_f" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\frac{E_\\mathrm{b} \\left(\\dot{s} - \\frac{\\lambda \\sqrt{\\tau^{2}}}{\\tau}\\right) \\sqrt{\\tau^{2}}}{\\tau} - K \\lambda$" - ], - "text/plain": [ - " ⎛ _______⎞ \n", - " ⎜ ╱ 2 ⎟ _______ \n", - " ⎜ \\lambda⋅╲╱ \\tau ⎟ ╱ 2 \n", - "E_\\mathrm{b}⋅⎜\\dot{s} - ──────────────────⎟⋅╲╱ \\tau \n", - " ⎠\\tau ⎠\n", - "────────────────────────────────────────────────────── - Kâ‹…\\lambda\n", - " \\tau " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dot_f_lambda = dot_f.subs(dot_s_pl, dot_s_pl_).subs(dot_z, dot_z_)\n", - "dot_f_lambda" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "lambda_solved = sp.solve(dot_f_lambda, lambda_)[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\frac{E_\\mathrm{b} K \\dot{s}}{E_\\mathrm{b} + K}$" - ], - "text/plain": [ - "E_\\mathrm{b}â‹…Kâ‹…\\dot{s}\n", - "──────────────────────\n", - " E_\\mathrm{b} + K " - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sp.simplify(dot_tau_.subs(dot_s_pl, dot_s_pl_).subs(lambda_, lambda_solved))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Construct the bond slip model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Given an increment of slip, calculate the corresponding amount of stress \n", - "regarding the current state of the material" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us now solve this problem numerically\n", - "\\begin{align}\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "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.7.6" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": true, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/bmcs_course/4_3_BS_EP_SH_IK.ipynb b/bmcs_course/4_3_BS_EP_SH_IK.ipynb deleted file mode 100644 index 92ad5d5..0000000 --- a/bmcs_course/4_3_BS_EP_SH_IK.ipynb +++ /dev/null @@ -1,1123 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Bond-slip elasto-plstic model with isotropic and kinematic hardening \n", - "This notebook is a work in progress on an abstract and general implementation of time integration algorithm for general damage-plasticity modes. It serves for the development of a package that can be configured by specifying the ingredients of thermodynamically based model\n", - "\n", - " - Vector of state variables $\\boldsymbol{\\mathcal{E}}$\n", - " - Vector of streses $\\boldsymbol{\\mathcal{S}}$\n", - " - Yield condition $f(\\boldsymbol{\\mathcal{S}},\\boldsymbol{\\mathcal{E}})$\n", - " - Flow potential $\\varphi(\\boldsymbol{\\mathcal{S}},\\boldsymbol{\\mathcal{E}})$\n", - "\n", - "as symbolic equations using the sympy package. The time-stepping algorithm gets generated automatically within the thermodynamically framework. The derived evolution equations and return-mapping to the yield surface is performed using Newton-Raphson scheme. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "%matplotlib notebook\n", - "import sympy as sp\n", - "sp.init_printing()\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Material parameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "E_b = sp.Symbol('E_b', real=True, nonnegative=True)\n", - "gamma = sp.Symbol('gamma', real=True, nonnegative=True)\n", - "K = sp.Symbol('K', real=True)\n", - "tau_bar = sp.Symbol(r'\\bar{\\tau}', real=True, nonnegative=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "py_vars = ('E_b', 'gamma', 'K', 'tau_bar')\n", - "map_py2sp = {py_var : globals()[py_var] for py_var in py_vars}\n", - "sp_vars = tuple(map_py2sp[py_var] for py_var in py_vars)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## State variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "s = sp.Symbol('s', real=True)\n", - "s_pi = sp.Symbol(r's_pi', real=True)\n", - "alpha = sp.Symbol('alpha', real=True)\n", - "z = sp.Symbol('z', real=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "Eps = sp.Matrix([s_pi, z, alpha])\n", - "Eps.T" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Thermodynamic forces" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "tau = sp.Symbol('tau', real=True)\n", - "X = sp.Symbol('X', real=True)\n", - "Z = sp.Symbol('Z', real=True, nonnegative=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "Sig = sp.Matrix([tau, Z, X])\n", - "Sig.T" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Sig_Eps = sp.Matrix([[E_b * (s - s_pi), K * z, alpha * gamma]]).T\n", - "Sig_Eps" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "**Executable code for** $\\boldsymbol{\\mathcal{S}}(s,\\boldsymbol{\\mathcal{E}})$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "get_Sig = sp.lambdify(\n", - " (s, Eps) + sp_vars, Sig_Eps.T, 'numpy'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "To derive the time stepping procedure we will need also the matrix of derivatives of the generalized stresses $\\boldsymbol{\\mathcal{S}}$ with respect to the kinematic variables $\\boldsymbol{\\mathcal{E}}$ \n", - "\\begin{align}\n", - " \\partial_\\boldsymbol{\\mathcal{E}} \\boldsymbol{\\mathcal{S}}\n", - "\\end{align}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "dSig_dEps = sp.Matrix([Sig_Eps.T.diff(eps) for eps in Eps]).T\n", - "dSig_dEps" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "**Executable Python code generation** $\\partial_\\boldsymbol{\\mathcal{E}} \\boldsymbol{\\mathcal{S}}(s,\\boldsymbol{\\mathcal{E}})$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "get_dSig_dEps = sp.lambdify(\n", - " (s, Eps) + sp_vars, dSig_dEps, 'numpy'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Threshold function" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "To keep the framework general for different stress norms and hardening definitions let us first introduce a general function for effective stress. Note that the observable stress $\\tau$ is identical with the plastic stress $\\tau_\\pi$ due to the performed sign switch in the definition of the thermodynamic forces." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "f_Sig = sp.sqrt((tau - X)*(tau - X)) - (tau_bar + Z)\n", - "f_Sig" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "**Executable code generation** $f(\\boldsymbol{\\mathcal{E}}, \\boldsymbol{\\mathcal{S}})$\n", - "\n", - "Note that this is a function of both the forces and kinematic state variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "get_f_Sig = sp.lambdify(\n", - " (Eps, Sig) + sp_vars, f_Sig, 'numpy'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "The derivative of $f$ required for time-stepping $\\partial_\\boldsymbol{\\mathcal{S}} f$ is obtained as" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "df_dSig = f_Sig.diff(Sig)\n", - "sp.simplify(df_dSig).T" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "**Executable code generation** $\\partial_\\boldsymbol{\\mathcal{S}}f(\\boldsymbol{\\mathcal{E}}, \\boldsymbol{\\mathcal{S})}$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "get_df_dSig = sp.lambdify(\n", - " (Eps, Sig) + sp_vars, df_dSig, 'numpy'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Flow direction\n", - "Evolution equations have the form\n", - "\\begin{align}\n", - " \\dot{\\boldsymbol{\\mathcal{E}}} = \\lambda \\, \\boldsymbol{\\Phi}\n", - "\\end{align}\n", - "with the vector $\\Phi$ representing the flow direction within \n", - "the stress space. Assuming the normality condition, i.e. that \n", - "the flow direction coincides with the vector normal to the \n", - "yield condition we can write\n", - "\\begin{align}\n", - " \\boldsymbol{\\Phi} = \\boldsymbol{\\Upsilon} \\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}\n", - "\\end{align}\n", - "The sign matrix $\\boldsymbol{\\Upsilon}$ is used to direct all the derivatives in the outward direction from the elastic range." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Sig_signs = sp.diag(-1,1,1)\n", - "Phi = -Sig_signs * df_dSig\n", - "Phi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "get_Phi = sp.lambdify(\n", - " (Eps, Sig) + sp_vars, Phi, 'numpy'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Time integration scheme" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "## Summary of the backward Euler scheme\n", - "The derived expressions can be now plugged-in into a generic return mapping algorithm that efficiently identifies a state that satisfies the discrete consistency condition. The general structure of an implicit integration scheme reads\n", - "\\begin{align}\n", - "\\boldsymbol{\\mathcal{E}}_{n+1} &= \\boldsymbol{\\mathcal{E}}_{n} + \n", - "\\lambda_\\Delta \\, \\boldsymbol{\\Phi}_{n+1} \\\\\n", - "f(\\boldsymbol{\\mathcal{E}}_{n+1}; \\lambda_\\Delta) &= 0\n", - "\\end{align}\n", - "To reach an admissible state let us linearize the threshold function at an intermediate state $k$ as\n", - "\\begin{align}\n", - "f(\\boldsymbol{\\mathcal{E}}^{(k)}; \\lambda_\\Delta^{(k)} )\n", - "& \\approx\n", - "f^{(k)} \n", - " + \n", - "\\left. \\frac{\\partial f}{\\partial \\lambda} \\right|^{(k)}\n", - "\\Delta \\lambda\n", - "\\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "Thus, by rewriting the linearized equation as a recurrence formula, the iteration algorithm is obtained\n", - "\\begin{align}\n", - "&\\left. \\frac{\\partial f}{\\partial \\lambda} \\right|^{(k)}\n", - "\\Delta \\lambda =\n", - "- f ^{(k)}\n", - "\\\\\n", - "&\\lambda_{\\Delta}^{(k+1)} = \\lambda_{\\Delta}^{(k)} + \\Delta \\lambda \\\\\n", - "& \\boldsymbol{\\mathcal{E}}^{(k+1)} = \n", - "\\boldsymbol{\\mathcal{E}}^{(k)} + \n", - " \\lambda_\\Delta \\, \\boldsymbol{\\Phi}^{(k)}\n", - " \\\\\n", - "&k = k + 1\n", - "\\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "To define a generic return mapping we need to construct the derivatives of the flow rule $f$ with respect to $\\lambda$. The dependency of $f$ on $\\lambda$ is intermediated via the stresses $\\boldsymbol{\\mathcal{S}}$ and state variables $\\boldsymbol{\\mathcal{E}}$\n", - "\\begin{align}\n", - "f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}(\\lambda))).\n", - "\\end{align}\n", - "To correctly resolve the dependencies in the derivative $\\frac{\\partial f}{\\partial_\\lambda}$, we need to apply rules for chaining of derivatives. Let us start with the derivative with respect to $\\boldsymbol{\\mathcal{E}}$ in the form\n", - "\\begin{align}\n", - "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}))}{\\partial \\boldsymbol{\\mathcal{E}}}\n", - " &=\n", - "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}})}{\\partial \\boldsymbol{\\mathcal{S}}} \\, \n", - "\\frac{\\partial \\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}})}{\\partial \\boldsymbol{\\mathcal{E}}}.\n", - "\\end{align}\n", - "By expanding the derivatives of $\\boldsymbol{\\mathcal{E}}$ with respect to $\\lambda_\\Delta$ that will be abbreviate in index position as $\\lambda$ for brevity we obtain\n", - "\\begin{align}\n", - "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}(\\lambda)))}{\\partial \\lambda}\n", - " &=\n", - "\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}} \\, \n", - "\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}\n", - "\\frac{\\partial \\boldsymbol{\\mathcal{E}}}{\\partial \\lambda}.\n", - "\\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "The last term $\\frac{\\partial \\boldsymbol{\\mathcal{E}} }{ \\partial \\lambda}$ can be obtained from the evolution equations\n", - "\\begin{align}\n", - "\\boldsymbol{\\mathcal{E}} = \\lambda \\, \\boldsymbol{\\Phi} \\; \\implies\n", - "\\frac{\\partial \\boldsymbol{\\mathcal{E}} }{\\partial \\lambda} = \n", - " \\boldsymbol{\\Phi}\n", - "\\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "**Summarizing**: the algorithm can be written in a compact way as follows:\n", - "\\begin{align}\n", - "&\n", - "\\left(\n", - "\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}\n", - "^{(k)} \\, \n", - "\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}\n", - "^{(k)} \\, \n", - "\\boldsymbol{\\Phi}^{(k)}\n", - "\\right)\n", - "\\Delta \\lambda = -\n", - "f^{(k)}\\\\\n", - "&\\lambda_{\\Delta}^{(k+1)} = \\lambda_{\\Delta}^{(k)} + \\Delta \\lambda \\\\\n", - "& \\boldsymbol{\\mathcal{E}}^{(k+1)} = \\boldsymbol{\\mathcal{E}}^{(k)} + \n", - " \\lambda_\\Delta \\, \\boldsymbol{\\Phi}^{(k)}\n", - " \\\\\n", - "&k = k + 1\n", - "\\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## Implementation concept\n", - "The gradient operators needed for the time-stepping scheme have been derived above and are now available for the implementation of the numerical algorithm both in `Python` and `C89` languages\n", - "\n", - "<table style=\"width:50%\">\n", - "<tr>\n", - "<th>Symbol</th>\n", - "<th>Python</th>\n", - "<th>C89</th>\n", - "</tr>\n", - "<tr>\n", - "<td>$\\mathcal{S}(\\boldsymbol{\\mathcal{E}}) $ \n", - "</td>\n", - "<td>get_Sig</td>\n", - "<td>get_Sig_C</td>\n", - "</tr>\n", - "<tr>\n", - "<td>$ f(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}})$</td>\n", - "<td>get_f</td>\n", - "<td>get_f_C</td>\n", - "</tr>\n", - "<tr>\n", - "<td>\n", - "$\\displaystyle{\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}}(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}})$\n", - " </td>\n", - "<td>get_df_dSig</td>\n", - "<td>get_df_dSig_C</td>\n", - "</tr>\n", - "<tr>\n", - "<td>\n", - "$\\displaystyle{\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}}(\\boldsymbol{\\mathcal{E}})$</td>\n", - "<td>get_dSig_dEps</td>\n", - "<td>get_dSig_dEps_C</td>\n", - "</tr>\n", - "<tr>\n", - "<td>$\\boldsymbol{\\Phi}(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}}) $</td>\n", - "<td>get_Phi</td>\n", - "<td>get_Phi_C</td>\n", - "</tr>\n", - "</table>" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "To avoid repeated calculation of the same expressions, let us put the evaluation of $f$ and $\\frac{\\partial f}{\\partial \\lambda}$ into a single procedure. Indeed, the iteration loop can be constructed in such a way that the predictor $\\frac{\\partial f}{\\partial \\lambda}$ for the next step is calculated along with the residuum $f$. In case that the residuum is below the required tolerance, the overhead for an extra calculated derivative is negligible or, with some care, it can be even reused in the next time step. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "def get_f_df(s_n1, Eps_k, *margs):\n", - " Sig_k = get_Sig(s_n1, Eps_k, *margs)[0]\n", - " f_k = np.array([get_f_Sig(Eps_k, Sig_k, *margs)])\n", - " df_dSig_k = get_df_dSig(Eps_k, Sig_k, *margs)\n", - " Phi_k = get_Phi(Eps_k, Sig_k, *margs)\n", - " dSig_dEps_k = get_dSig_dEps(s_n1, Eps_k, *margs)\n", - " df_dSigEps_k = np.einsum(\n", - " 'ik,ji->jk', df_dSig_k, dSig_dEps_k)\n", - " dEps_dlambda_k = Phi_k\n", - " df_dlambda = np.einsum(\n", - " 'ki,kj->ij', df_dSigEps_k, dEps_dlambda_k)\n", - " df_k = df_dlambda\n", - " return f_k, df_k, Sig_k" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "The update of state variables $\\boldsymbol{\\mathcal{E}}^{(k+1)}$ for an newly obtained $\\lambda_\\Delta^{(k+1)}$ is performed using the evolution equations. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "def get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs):\n", - " Sig_k = get_Sig(s_n1, Eps_k, *margs)[0]\n", - " Phi_k = get_Phi(Eps_k, Sig_k, *margs)\n", - " Eps_k1 = Eps_n + lam_k * Phi_k[:,0]\n", - " return Eps_k1" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "The double loop over the time increments and over the return mapping iteration. The inner loop represents the material point level in a standard finite element calculation. The input is the maximum slip value, the number of time steps, the maximum number of iterations and a load function which can define cyclic loading as shown below. The procedure returns the record of $\\boldsymbol{\\mathcal{E}}(t)$ and $\\boldsymbol{\\mathcal{S}}(t)$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "def get_response(margs, s_max=3, n_steps = 10, k_max=20, get_load_fn=lambda t: t):\n", - " Eps_n = np.zeros((len(Eps),), dtype=np.float_)\n", - " Eps_k = np.copy(Eps_n)\n", - " Sig_record, Eps_record, iter_record = [], [], []\n", - " t_arr = np.linspace(0,1,n_steps+1)\n", - " s_t = s_max * get_load_fn(t_arr) + 1e-9\n", - " for s_n1 in s_t:\n", - " lam_k = 0\n", - " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", - " f_k_norm = np.linalg.norm(f_k)\n", - " f_k_trial = f_k[-1]\n", - " k = 0\n", - " while k < k_max:\n", - " if f_k_trial < 0 or f_k_norm < 1e-8:\n", - " Eps_n[...] = Eps_k[...]\n", - " Sig_record.append(Sig_k)\n", - " Eps_record.append(np.copy(Eps_k))\n", - " iter_record.append(k+1)\n", - " break\n", - " dlam = np.linalg.solve(df_k, -f_k)\n", - " lam_k += dlam\n", - " Eps_k = get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs)\n", - " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", - " f_k_norm = np.linalg.norm(f_k)\n", - " k += 1\n", - " else:\n", - " print('no convergence')\n", - " Sig_arr = np.array(Sig_record, dtype=np.float_)\n", - " Eps_arr = np.array(Eps_record, dtype=np.float_)\n", - " iter_arr = np.array(iter_record,dtype=np.int_)\n", - " return t_arr, s_t, Eps_arr, Sig_arr, iter_arr" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Support functions\n", - "To run some examples, let us define some infrastructure including a more complex loading history and postprocessing" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Loading history\n", - "This implementation uses the symbolic machinery which is not necessary a simpler data point based implementation with `numpy.interp1d` would be better ... later " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "t, theta = sp.symbols(r't, \\theta')\n", - "n_cycles = 5\n", - "A = 2\n", - "ups = np.array([((theta-2*cycle)*A+(1-A), theta-2*cycle<=1) \n", - " for cycle in range(n_cycles)])\n", - "downs = np.array([((1-(theta-(2*cycle+1)))*A+(1-A),(theta-(2*cycle+1))<=1) \n", - " for cycle in range(n_cycles)])\n", - "ups[0,0] = theta\n", - "updowns = np.einsum('ijk->jik',np.array([ups, downs])).reshape(-1,2)\n", - "load_fn = sp.Piecewise(*updowns).subs(theta,t*n_cycles)\n", - "get_load_fn = sp.lambdify(t, load_fn,'numpy')\n", - "t_arr = np.linspace(0,1,600)\n", - "plt.plot(t_arr, get_load_fn(t_arr));" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Plotting functions\n", - "To simplify postprocessing examples, here are two aggregate plotting functions, one for the state and force variables, the other one for the evaluation of energies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "def plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33):\n", - " colors = ['blue','red', 'green', 'black', 'magenta' ]\n", - " s_pi_, z_, alpha_ = Eps_arr.T\n", - " sig_pi_, Z_, X_ = Sig_arr.T\n", - " n_step = len(s_pi_)\n", - " ax1.plot(s_t, sig_pi_, color='black', \n", - " label='n_steps = %g' % n_step)\n", - " ax1.set_xlabel('$s$'); ax1.set_ylabel(r'$\\tau$')\n", - " ax1.legend()\n", - " if ax11:\n", - " ax11.plot(s_t, iter_arr, '-.')\n", - " ax2.plot(t_arr, z_, color='green', \n", - " label='n_steps = %g' % n_step)\n", - " ax2.set_xlabel('$t$'); ax2.set_ylabel(r'$z$')\n", - " if ax22:\n", - " ax22.plot(t_arr, Z_, '-.', color='green')\n", - " ax22.set_ylabel(r'$Z$')\n", - " ax3.plot(t_arr, alpha_, color='blue', \n", - " label='n_steps = %g' % n_step)\n", - " ax3.set_xlabel('$t$'); ax3.set_ylabel(r'$\\alpha$')\n", - " if ax33:\n", - " ax33.plot(t_arr, X_, '-.', color='blue')\n", - " ax33.set_ylabel(r'$X$')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from scipy.integrate import cumtrapz\n", - "def plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr):\n", - " W_arr = cumtrapz(Sig_arr[:,0], s_t, initial=0)\n", - " U_arr = Sig_arr[:,0] * (s_t-Eps_arr[:,0]) / 2.0\n", - " G_arr = W_arr - U_arr\n", - " ax.plot(t_arr, W_arr, lw=2, color='black', label=r'$W$')\n", - " ax.plot(t_arr, G_arr, color='black', label=r'$G$')\n", - " ax.fill_between(t_arr, W_arr, G_arr, color='green', alpha=0.2)\n", - " ax.set_xlabel('$s$'); ax3.set_ylabel(r'$E$')\n", - " ax.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "def plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr): \n", - " colors = ['blue','red', 'green', 'black', 'magenta' ]\n", - " E_i = cumtrapz(Sig_arr, Eps_arr, initial=0, axis=0)\n", - " c = 'black'\n", - " ax.plot(t_arr, E_i[:,0], '-.', lw=1, color=c)\n", - " ax.fill_between(t_arr, E_i[:,0], 0, color=c, alpha=0.1)\n", - " c = 'black'\n", - " ax.plot(t_arr, E_i[:,0], color=c, lw=1)\n", - " ax.fill_between(t_arr, E_i[:,0], E_i[:,0], \n", - " color=c, alpha=0.2);\n", - " c = 'blue'\n", - " ax.plot(t_arr, E_i[:,1], '-.', lw=1, color='black')\n", - " ax.fill_between(t_arr, E_i[:,1], 0, color=c, alpha=0.1)\n", - " c = 'blue'\n", - " ax.plot(t_arr, E_i[:,1] + E_i[:,2], color='black', lw=1)\n", - " ax.fill_between(t_arr, E_i[:,1] + E_i[:,2], E_i[:,1], \n", - " color=c, alpha=0.3);" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Examples" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "material_params = {\n", - " E_b:1, gamma: 0.0, K:0.1, tau_bar:1, \n", - "}\n", - "margs = [material_params[map_py2sp[name]] for name in py_vars]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Monotonic load \n", - "Let's first run the example with different size of the time step to see if there is any difference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", - "ax11, ax22, ax33 = ax1.twinx(), ax2.twinx(), ax3.twinx()\n", - "for n_steps in [20, 40, 200, 2000]: \n", - " t_arr, s_t, Eps_arr, Sig_arr, iter_arr = get_response(\n", - " margs=margs, s_max=8, n_steps=n_steps, k_max=10\n", - " )\n", - " plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "fig, ax = plt.subplots(1,1,figsize=(9, 5))\n", - "plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr)\n", - "plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Cyclic loading" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", - "ax11,ax22,ax33 = ax1.twinx(), ax2.twinx(), ax3.twinx()\n", - "t_arr, s_t, Eps_arr, Sig_arr, iter_arr = get_response(\n", - " margs, s_max=2, n_steps=20000, k_max=20, get_load_fn=get_load_fn\n", - ")\n", - "plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "fig, ax = plt.subplots(1,1,figsize=(9, 5))\n", - "plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr)\n", - "plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "hide_input": false, - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Interactive application" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "hide_input": true, - "scrolled": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "def init():\n", - " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n\n", - " s0 = 0\n", - " t0 = 0\n", - " Sig_record = []\n", - " Eps_record = []\n", - " iter_record = []\n", - " t_arr = []\n", - " s_t = []\n", - " Eps_n = np.zeros((len(Eps),), dtype=np.float_)\n", - " \n", - "def get_response_i(s1, margs, n_steps = 60, k_max=20):\n", - " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n\n", - " Eps_k = np.copy(Eps_n)\n", - " t1 = t0+n_steps+1\n", - " ti_arr = np.linspace(t0, t1, n_steps+1 )\n", - " si_t = np.linspace(s0,s1,n_steps+1)\n", - " for s_n1 in si_t:\n", - " lam_k = 0\n", - " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", - " f_k_norm = np.linalg.norm(f_k)\n", - " f_k_trial = f_k[-1]\n", - " k = 0\n", - " while k < k_max:\n", - " if f_k_trial < 0 or f_k_norm < 1e-6:\n", - " Eps_n[...] = Eps_k[...]\n", - " Sig_record.append(Sig_k)\n", - " Eps_record.append(np.copy(Eps_k))\n", - " iter_record.append(k+1)\n", - " break\n", - " dlam = np.linalg.solve(df_k, -f_k)\n", - " lam_k += dlam\n", - " Eps_k = get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs)\n", - " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", - " f_k_norm = np.linalg.norm(f_k)\n", - " k += 1\n", - " else:\n", - " print('no convergence')\n", - " t_arr = np.hstack([t_arr, ti_arr])\n", - " s_t = np.hstack([s_t, si_t])\n", - " t0 = t1\n", - " s0 = s1\n", - " return\n", - "\n", - "import ipywidgets as ipw\n", - "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", - "ax11 = ax1.twinx()\n", - "ax22 = ax2.twinx()\n", - "ax33 = ax3.twinx()\n", - "axes = ax1, ax11, ax2, ax22, ax3, ax33\n", - "axes = ax1, None, ax2, ax22, ax3, ax33\n", - "def update(s1):\n", - " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n, axes\n", - " global margs\n", - " get_response_i(s1, margs)\n", - " Sig_arr = np.array(Sig_record, dtype=np.float_)\n", - " Eps_arr = np.array(Eps_record, dtype=np.float_)\n", - " iter_arr = np.array(iter_record,dtype=np.int_)\n", - " for ax in axes:\n", - " if ax:\n", - " ax.clear()\n", - " plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, *axes)\n", - " \n", - "init()\n", - "\n", - "s1_slider = ipw.FloatSlider(value=0,min=-4, max=+4, step=0.1,\n", - " continuous_update=False)\n", - "\n", - "ipw.interact(update, s1 = s1_slider);\n", - "\n", - "def reset(**material_params):\n", - " global margs\n", - " init()\n", - " s1_slider.value = 0\n", - " margs = [material_params[name] for name in py_vars]\n", - "\n", - "n_steps = 20\n", - "margs_sliders = {\n", - " name : ipw.FloatSlider(description=name, value=val, \n", - " min=minval, max=maxval, step=(maxval-minval) / n_steps,\n", - " continuous_update=False)\n", - " for name, val, minval, maxval in [('E_b', 50, 0.5, 100),\n", - " ('gamma', 1, -20, 20),\n", - " ('K', 1, -20, 20),\n", - " ('tau_bar', 1, 0.5, 20)]\n", - "}\n", - "\n", - "ipw.interact(reset, **margs_sliders);" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "165px" - }, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/bmcs_course/4_3_BS_EP_SH_IK_N.ipynb b/bmcs_course/4_3_BS_EP_SH_IK_N.ipynb new file mode 100644 index 0000000..b471645 --- /dev/null +++ b/bmcs_course/4_3_BS_EP_SH_IK_N.ipynb @@ -0,0 +1,6015 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Bond-slip elasto-plastic model with isotropic and kinematic hardening \n", + "This notebook is a work in progress on an abstract and general implementation of time integration algorithm for general damage-plasticity modes. It serves for the development of a package that can be configured by specifying the ingredients of thermodynamically based model\n", + "\n", + " - Vector of state variables $\\boldsymbol{\\mathcal{E}}$\n", + " - Vector of streses $\\boldsymbol{\\mathcal{S}}$\n", + " - Yield condition $f(\\boldsymbol{\\mathcal{S}},\\boldsymbol{\\mathcal{E}})$\n", + " - Flow potential $\\varphi(\\boldsymbol{\\mathcal{S}},\\boldsymbol{\\mathcal{E}})$\n", + "\n", + "as symbolic equations using the sympy package. The time-stepping algorithm gets generated automatically within the thermodynamically framework. The derived evolution equations and return-mapping to the yield surface is performed using Newton-Raphson scheme. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "%matplotlib notebook\n", + "import sympy as sp\n", + "sp.init_printing()\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Material parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "E_b = sp.Symbol('E_b', real=True, nonnegative=True)\n", + "gamma = sp.Symbol('gamma', real=True, nonnegative=True)\n", + "K = sp.Symbol('K', real=True)\n", + "tau_bar = sp.Symbol(r'\\bar{\\tau}', real=True, nonnegative=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "py_vars = ('E_b', 'gamma', 'K', 'tau_bar')\n", + "map_py2sp = {py_var : globals()[py_var] for py_var in py_vars}\n", + "sp_vars = tuple(map_py2sp[py_var] for py_var in py_vars)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## State variables" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "s = sp.Symbol('s', real=True)\n", + "s_pi = sp.Symbol(r's_pi', real=True)\n", + "alpha = sp.Symbol('alpha', real=True)\n", + "z = sp.Symbol('z', real=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAZCAYAAADOtSsxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADDUlEQVRoBe2a7VHbQBCGRSYFeJIOnA6AEkwHECogdBAmv+x/GacDpwTsDpwOQugAUkEIHTjPo5E0Z418CJA0nsztzM7e5+7q3bu9k+yD6XS6zLLsEC7pZDab3ZeVJLtDAFwnaFsEGlcHBOCOjg9BYyoOgACYjzEzfzOArWQigkAKQAScIbpSAIZAOWIjBSACzhBdKQBDoByxkQIQAWeIrrdtjHBlmjPuTzH2EXlD222buUOMwZfyfv0Oe2fUf8C+2xwjvw/kQ4iR1/qlfjxl+8kAoOQXSi6QOeDINfUj+PIp5UP0488IO1ewAFg2AGfIMfIE2SthY4wBMbmknAOO1I/fyCP4vqhPkKu6M9EAMEHlh8hwtfuwe/WmjH8V0IXPi7Ct/tAd1wV/hb1qtVN+hG9oFysX6ie4cSdGA8CkBzhD2V/ENdxqWzlnKPJhS1uUTTvuBHdA74Q9Pyu4SL82GHORHhft70M/w7HRQ7iY5OoymkZxTZsR3zvCL8+BL0i/ZVVB6dnRj+j3vGmyZ5tp0AXRFKDctZ07gIll+jFvlbntM+W5ffDepCF8OcWvc+QgK1/ksDVCyGF6tisk+38y1mA00s4AMNqvpCqoDg4UfYMNQAU+ZQNV/6JKU0UeRDEnq4EvKaBb8F31W+BTN11utb1E/6456DbP2323awztjqnwaxoXC4D5f+sBUOYO8GAJyfpF0TBBeti47fJxOlr0dS7QXeZ8F4U2BcNFcw7X/aSpc/JZTdFbByy+mK4lfcn0E25chLEAeHqfMlEdgqgyr1RVRCmPYMdlSIPjbSBfGUrbeyavfvmndKQPbRDcnVfUq1tJXz5gQ/th8HNTtOUBQYqPPvkO1RiAzN8DNptN9lpGz1odyDG8eK2+/31+gdMyegtqu3KIsudASZZ9I03UAoFOAoAd860HseTZ4VmQqAUCXQVAwH1Ry9gN5roHZH4A2ZZoNwKxQ3j3rFoPYG/9plyv14anaoBAVzsgUJmKz0EgBeA5aPUwNv9bSk1v+l9QDZCuqqRmz8rwf0G3/wARrh6V0tmKEwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}s_{\\pi} & z & \\alpha\\end{matrix}\\right]$" + ], + "text/plain": [ + "[sₚᵢ z α]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Eps = sp.Matrix([s_pi, z, alpha])\n", + "Eps.T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Conjugate stress variables" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "tau = sp.Symbol('tau', real=True)\n", + "X = sp.Symbol('X', real=True)\n", + "Z = sp.Symbol('Z', real=True, nonnegative=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGEAAAAZCAYAAAAhd0APAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADJ0lEQVRoBe2a7U0bQRBATZQCkNMBdAAlAB0EpYJAB0H8sv9FTgeQDsAdkFQQ4g5CCQkl5L3LrXV3Xtt31nodSzfSaPb29uZ7Z2cxB6PR6HEwGJyAAS7G4/FLeOhpWg/g23M43lW4Tg8Iwi9eHFcm+2EmD+D3I0RN3mSS14tZ4YG3K979V6/Imj8odAi+gs8l/Q0VzCi3+Yx1p05sE5BxBf9LUJmC5XvC/L0PUPX8DoYy/43xHfNT6ALsRRBQXmM17LJpSGnwT94ZnDNw64BMnX0P9Tx9D95U9WL8Clr3L8CPPkOXwl4EAe3NuoUAlFaZcUPwdJ2x5fqU5DPMDMItOM9y9HAH2OCo91rYlzNhiEFzI4NVzD0x1uAzxtk7OmTOkC2eMC5KD9TSeAttFQDWDvYlCGZcDTDS7W6ZMuN0xK4g6KbjDYBnQ+sAqPTKcgSzT6xxq1mPY2At/BJ7kXIOGTUn8zyBv4fjNWMPvZ0B8qegNd+ypJ86BUDFl+6E0tB3rPGw8x5hObDzcFwga7YeAGTVAJk63+QwAYpupLZgNw9Bjyd0WnkIx9SL7gQYWd9+QOd1mPEhWMvIGMNtziHfbLMM2ZlkT4AVtlmGBKtGZ72iO0Fng9UAGJTOEVarVIA+1n9bQrf/dZUvz8EJ1eksY2SbFDeg/jJRTZROEA1ChMMH5uxEdgIYZhIo3+SI1VydkB3KAHgJszMLB3QtQdoo1TYIRve5DcPUazDQLPcu8MJ44TbMnDvEy1pWQK7NwSO0KNElNRjnjNW5NawNQsnwKAhrzTnBQmTabYQduBCAUoTl4CGBuNYs0MvGwEO42ZkZGKHTzlwbBBi6C7JfhLQEWHobxgFekNwB7pBs5xWyPJeOoc0ADJgLXdIVYxOoFUS7o8aXtqNmW1bAiPA7hwngBUj5GjYE3e7ByM41mG87AbI9k76CUqH42xDz826xsubfCkqk78HYGRbWFLT/PaHmjrwPBMhk6n9PyOv2uLQ2Z0L8y342mQf6ICRz5eaM+iBs7rtkX/ZBSObKzRn1Qdjcd8m+LFrUBrf+/44aDkn5SFvqn1mq967ZXy34CSrx3MmyAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\tau & Z & X\\end{matrix}\\right]$" + ], + "text/plain": [ + "[Ï„ Z X]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Sig = sp.Matrix([tau, Z, X])\n", + "Sig.T" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}E_{b} \\left(s - s_{\\pi}\\right)\\\\K z\\\\\\alpha \\gamma\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡E_bâ‹…(s - sₚᵢ)⎤\n", + "⎢ ⎥\n", + "⎢ Kâ‹…z ⎥\n", + "⎢ ⎥\n", + "⎣ α⋅γ ⎦" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Sig_Eps = sp.Matrix([[E_b * (s - s_pi), K * z, alpha * gamma]]).T\n", + "Sig_Eps" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Executable code for** $\\boldsymbol{\\mathcal{S}}(s,\\boldsymbol{\\mathcal{E}})$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "get_Sig = sp.lambdify(\n", + " (s, Eps) + sp_vars, Sig_Eps.T, 'numpy'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "To derive the time stepping procedure we will need also the matrix of derivatives of the generalized stresses $\\boldsymbol{\\mathcal{S}}$ with respect to the kinematic variables $\\boldsymbol{\\mathcal{E}}$ \n", + "\\begin{align}\n", + " \\partial_\\boldsymbol{\\mathcal{E}} \\boldsymbol{\\mathcal{S}}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- E_{b} & 0 & 0\\\\0 & K & 0\\\\0 & 0 & \\gamma\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡-E_b 0 0⎤\n", + "⎢ ⎥\n", + "⎢ 0 K 0⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 γ⎦" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dSig_dEps = sp.Matrix([Sig_Eps.T.diff(eps) for eps in Eps]).T\n", + "dSig_dEps" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Executable Python code generation** $\\partial_\\boldsymbol{\\mathcal{E}} \\boldsymbol{\\mathcal{S}}(s,\\boldsymbol{\\mathcal{E}})$" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "get_dSig_dEps = sp.lambdify(\n", + " (s, Eps) + sp_vars, dSig_dEps, 'numpy'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Threshold function" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "To keep the framework general for different stress norms and hardening definitions let us first introduce a general function for effective stress. Note that the observable stress $\\tau$ is identical with the plastic stress $\\tau_\\pi$ due to the performed sign switch in the definition of the thermodynamic forces." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAVCAYAAAC38ldgAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADs0lEQVRoBe2a7VHcMBCGSYYCGEqADiAdBDqASQXhOgjDP/5lSAeQDgIdQCoIoQQ6CKED8jyO7fh8Pse+ky178M4s+rR29Wq1Wul48/LysjFRHATOz8/3kPxI+hxHg/6lZnN+27/oSWIBgQ/k3xXKryGbzHkz9Eyx6N+MuQW7i+/T9IlU2oEP4Af67Vsx0XIEwOiE1mNYzKRH+IL6Kwuk4vwd1nNKd/Al9TdJacB/ghoeExYgwTguTz4F6SdtGuR7eKL/IABmGtgV6TXpEXxaxJX8M3xJ/SH80TLpKCio4TFjd+eC0aVIuDO34f0YACHThXOBKon2WWVDTWU65g7pl5puIZo+M4j6n8G5N0Ounu6QVNxHRaENbxsQcmAyJKi7JS9IGp3HRe+U6rWgW++KrCAQ3Q1NHvh0j1S2bNhyRjo6oxOC0JcLd+YcAYxHgUewO1PwJloNgQxbjU2jM9YbpdE5/aAer2xYlC+QYYA8I2/gG42Q/wnhHlXGoFVk/NT1kVklt1Edut3AxnAeuc5hMEa3CrZBDa+IIMpocC62C5rcwortfeaR7waQvNS4eJb1IOYTok+UECCT3zAVRzG9Rd9c94bfdtJtVWw7MTyUcVd6xHoji+pFkG9s+YM0j+/Ib8FjPPY9YiU9d1RcVQIMV8Z200VgDG+cbcire+XCUW885/Xfo2FWHJSyN8Baz0J7aH3UM9eV8QWrlbfgGz2k8yqTunqh8lG0TP4iEew4ZCw38mkq5IiynG+msvCqMv0Hg62G5yIEecxlLBfVG6y3rirQBW7OGCnPUUh95gb+V9BI1LExoVO24HPfUK9n7/w5BTkanQ/DGrMhgnLFsa3hBVtrZFdRY2yD3WoBxGNAzyk4C4ZMnR7DB+TY5KLdx1aiqXxw09tekyZeO009NQ7IZ0dv0+G67tcY2yCGBwC68MyLLBhdOlt37beuZ143frpQeqj86K3rH7sNPbOLRPlFILssVXriGHq3xTaI4THRpb9KoJAPnnq6IfwXhjuyNsaMsWhVMsHMOHmXtGx0G9RlrwQn5N30Q6BW2K59q2XiAmRs54L6qEmyIRjbsEdBBkxtbEe/PmgXIXreQRLYieNX2FRKfoulPvfQhT5/exC+2A5XxdRZnz7SVtiGMLzYE24MKoszBONfqq8GROOyUCX5rkmfpQI6bGiL7dqG1+FcxjD0wjE4BqWHoONkeGusArv8eY3PX/WnoS4XrxrEafLtEZgMrz1mIb/4xWBPIQccwVjJnP8AH7ZnRmtTxKsAAAAASUVORK5CYII=\n", + "text/latex": [ + "$\\displaystyle - Z - \\bar{\\tau} + \\left|{X - \\tau}\\right|$" + ], + "text/plain": [ + "-Z - \\bar{\\tau} + │X - τ│" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_Sig = sp.sqrt((tau - X)*(tau - X)) - (tau_bar + Z)\n", + "f_Sig" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Executable code generation** $f(\\boldsymbol{\\mathcal{E}}, \\boldsymbol{\\mathcal{S}})$\n", + "\n", + "Note that this is a function of both the forces and kinematic state variables" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "get_f_Sig = sp.lambdify(\n", + " (Eps, Sig) + sp_vars, f_Sig, 'numpy'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The derivative of $f$ required for time-stepping $\\partial_\\boldsymbol{\\mathcal{S}} f$ is obtained as" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- \\operatorname{sign}{\\left(X - \\tau \\right)} & -1 & \\operatorname{sign}{\\left(X - \\tau \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "[-sign(X - Ï„) -1 sign(X - Ï„)]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_dSig = f_Sig.diff(Sig)\n", + "sp.simplify(df_dSig).T" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Executable code generation** $\\partial_\\boldsymbol{\\mathcal{S}}f(\\boldsymbol{\\mathcal{E}}, \\boldsymbol{\\mathcal{S})}$" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "get_df_dSig = sp.lambdify(\n", + " (Eps, Sig) + sp_vars, df_dSig, 'numpy'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Flow direction\n", + "Evolution equations have the form\n", + "\\begin{align}\n", + " \\dot{\\boldsymbol{\\mathcal{E}}} = \\lambda \\, \\boldsymbol{\\Phi}\n", + "\\end{align}\n", + "with the vector $\\Phi$ representing the flow direction within \n", + "the stress space. Assuming the normality condition, i.e. that \n", + "the flow direction coincides with the vector normal to the \n", + "yield condition we can write\n", + "\\begin{align}\n", + " \\boldsymbol{\\Phi} = \\boldsymbol{\\Upsilon} \\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}\n", + "\\end{align}\n", + "The sign matrix $\\boldsymbol{\\Upsilon}$ is used to direct all the derivatives in the outward direction from the elastic range." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- \\operatorname{sign}{\\left(X - \\tau \\right)}\\\\1\\\\- \\operatorname{sign}{\\left(X - \\tau \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡-sign(X - Ï„)⎤\n", + "⎢ ⎥\n", + "⎢ 1 ⎥\n", + "⎢ ⎥\n", + "⎣-sign(X - Ï„)⎦" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Sig_signs = sp.diag(-1,1,1)\n", + "Phi = -Sig_signs * df_dSig\n", + "Phi" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "get_Phi = sp.lambdify(\n", + " (Eps, Sig) + sp_vars, Phi, 'numpy'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Time integration scheme" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "## Summary of the backward Euler scheme\n", + "The derived expressions can be now plugged-in into a generic return mapping algorithm that efficiently identifies a state that satisfies the discrete consistency condition. The general structure of an implicit integration scheme reads\n", + "\\begin{align}\n", + "\\boldsymbol{\\mathcal{E}}_{n+1} &= \\boldsymbol{\\mathcal{E}}_{n} + \n", + "\\lambda_\\Delta \\, \\boldsymbol{\\Phi}_{n+1} \\\\\n", + "f(\\boldsymbol{\\mathcal{E}}_{n+1}; \\lambda_\\Delta) &= 0\n", + "\\end{align}\n", + "To reach an admissible state let us linearize the threshold function at an intermediate state $k$ as\n", + "\\begin{align}\n", + "f(\\boldsymbol{\\mathcal{E}}^{(k)}; \\lambda_\\Delta^{(k)} )\n", + "& \\approx\n", + "f^{(k)} \n", + " + \n", + "\\left. \\frac{\\partial f}{\\partial \\lambda} \\right|^{(k)}\n", + "\\Delta \\lambda\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Thus, by rewriting the linearized equation as a recurrence formula, the iteration algorithm is obtained\n", + "\\begin{align}\n", + "&\\left. \\frac{\\partial f}{\\partial \\lambda} \\right|^{(k)}\n", + "\\Delta \\lambda =\n", + "- f ^{(k)}\n", + "\\\\\n", + "&\\lambda_{\\Delta}^{(k+1)} = \\lambda_{\\Delta}^{(k)} + \\Delta \\lambda \\\\\n", + "& \\boldsymbol{\\mathcal{E}}^{(k+1)} = \n", + "\\boldsymbol{\\mathcal{E}}^{(k)} + \n", + " \\lambda_\\Delta \\, \\boldsymbol{\\Phi}^{(k)}\n", + " \\\\\n", + "&k = k + 1\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "To define a generic return mapping we need to construct the derivatives of the flow rule $f$ with respect to $\\lambda$. The dependency of $f$ on $\\lambda$ is intermediated via the stresses $\\boldsymbol{\\mathcal{S}}$ and state variables $\\boldsymbol{\\mathcal{E}}$\n", + "\\begin{align}\n", + "f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}(\\lambda))).\n", + "\\end{align}\n", + "To correctly resolve the dependencies in the derivative $\\frac{\\partial f}{\\partial_\\lambda}$, we need to apply rules for chaining of derivatives. Let us start with the derivative with respect to $\\boldsymbol{\\mathcal{E}}$ in the form\n", + "\\begin{align}\n", + "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}))}{\\partial \\boldsymbol{\\mathcal{E}}}\n", + " &=\n", + "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}})}{\\partial \\boldsymbol{\\mathcal{S}}} \\, \n", + "\\frac{\\partial \\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}})}{\\partial \\boldsymbol{\\mathcal{E}}}.\n", + "\\end{align}\n", + "By expanding the derivatives of $\\boldsymbol{\\mathcal{E}}$ with respect to $\\lambda_\\Delta$ that will be abbreviate in index position as $\\lambda$ for brevity we obtain\n", + "\\begin{align}\n", + "\\frac{\\partial f(\\boldsymbol{\\mathcal{S}}(\\boldsymbol{\\mathcal{E}}(\\lambda)))}{\\partial \\lambda}\n", + " &=\n", + "\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}} \\, \n", + "\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}\n", + "\\frac{\\partial \\boldsymbol{\\mathcal{E}}}{\\partial \\lambda}.\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The last term $\\frac{\\partial \\boldsymbol{\\mathcal{E}} }{ \\partial \\lambda}$ can be obtained from the evolution equations\n", + "\\begin{align}\n", + "\\boldsymbol{\\mathcal{E}} = \\lambda \\, \\boldsymbol{\\Phi} \\; \\implies\n", + "\\frac{\\partial \\boldsymbol{\\mathcal{E}} }{\\partial \\lambda} = \n", + " \\boldsymbol{\\Phi}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Summarizing**: the algorithm can be written in a compact way as follows:\n", + "\\begin{align}\n", + "&\n", + "\\left(\n", + "\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}\n", + "^{(k)} \\, \n", + "\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}\n", + "^{(k)} \\, \n", + "\\boldsymbol{\\Phi}^{(k)}\n", + "\\right)\n", + "\\Delta \\lambda = -\n", + "f^{(k)}\\\\\n", + "&\\lambda_{\\Delta}^{(k+1)} = \\lambda_{\\Delta}^{(k)} + \\Delta \\lambda \\\\\n", + "& \\boldsymbol{\\mathcal{E}}^{(k+1)} = \\boldsymbol{\\mathcal{E}}^{(k)} + \n", + " \\lambda_\\Delta \\, \\boldsymbol{\\Phi}^{(k)}\n", + " \\\\\n", + "&k = k + 1\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Implementation concept\n", + "The gradient operators needed for the time-stepping scheme have been derived above and are now available for the implementation of the numerical algorithm both in `Python` and `C89` languages\n", + "\n", + "<table style=\"width:50%\">\n", + "<tr>\n", + "<th>Symbol</th>\n", + "<th>Python</th>\n", + "<th>C89</th>\n", + "</tr>\n", + "<tr>\n", + "<td>$\\mathcal{S}(\\boldsymbol{\\mathcal{E}}) $ \n", + "</td>\n", + "<td>get_Sig</td>\n", + "<td>get_Sig_C</td>\n", + "</tr>\n", + "<tr>\n", + "<td>$ f(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}})$</td>\n", + "<td>get_f</td>\n", + "<td>get_f_C</td>\n", + "</tr>\n", + "<tr>\n", + "<td>\n", + "$\\displaystyle{\\frac{\\partial f}{\\partial \\boldsymbol{\\mathcal{S}}}}(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}})$\n", + " </td>\n", + "<td>get_df_dSig</td>\n", + "<td>get_df_dSig_C</td>\n", + "</tr>\n", + "<tr>\n", + "<td>\n", + "$\\displaystyle{\\frac{\\partial \\boldsymbol{\\mathcal{S}}}{\\partial \\boldsymbol{\\mathcal{E}}}}(\\boldsymbol{\\mathcal{E}})$</td>\n", + "<td>get_dSig_dEps</td>\n", + "<td>get_dSig_dEps_C</td>\n", + "</tr>\n", + "<tr>\n", + "<td>$\\boldsymbol{\\Phi}(\\boldsymbol{\\mathcal{S}}, \\boldsymbol{\\mathcal{E}}) $</td>\n", + "<td>get_Phi</td>\n", + "<td>get_Phi_C</td>\n", + "</tr>\n", + "</table>" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "To avoid repeated calculation of the same expressions, let us put the evaluation of $f$ and $\\frac{\\partial f}{\\partial \\lambda}$ into a single procedure. Indeed, the iteration loop can be constructed in such a way that the predictor $\\frac{\\partial f}{\\partial \\lambda}$ for the next step is calculated along with the residuum $f$. In case that the residuum is below the required tolerance, the overhead for an extra calculated derivative is negligible or, with some care, it can be even reused in the next time step. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def get_f_df(s_n1, Eps_k, *margs):\n", + " Sig_k = get_Sig(s_n1, Eps_k, *margs)[0]\n", + " f_k = np.array([get_f_Sig(Eps_k, Sig_k, *margs)])\n", + " df_dSig_k = get_df_dSig(Eps_k, Sig_k, *margs)\n", + " Phi_k = get_Phi(Eps_k, Sig_k, *margs)\n", + " dSig_dEps_k = get_dSig_dEps(s_n1, Eps_k, *margs)\n", + " df_dSigEps_k = np.einsum(\n", + " 'ik,ji->jk', df_dSig_k, dSig_dEps_k)\n", + " dEps_dlambda_k = Phi_k\n", + " df_dlambda = np.einsum(\n", + " 'ki,kj->ij', df_dSigEps_k, dEps_dlambda_k)\n", + " df_k = df_dlambda\n", + " return f_k, df_k, Sig_k" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The update of state variables $\\boldsymbol{\\mathcal{E}}^{(k+1)}$ for an newly obtained $\\lambda_\\Delta^{(k+1)}$ is performed using the evolution equations. " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs):\n", + " Sig_k = get_Sig(s_n1, Eps_k, *margs)[0]\n", + " Phi_k = get_Phi(Eps_k, Sig_k, *margs)\n", + " Eps_k1 = Eps_n + lam_k * Phi_k[:,0]\n", + " return Eps_k1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The double loop over the time increments and over the return mapping iteration. The inner loop represents the material point level in a standard finite element calculation. The input is the maximum slip value, the number of time steps, the maximum number of iterations and a load function which can define cyclic loading as shown below. The procedure returns the record of $\\boldsymbol{\\mathcal{E}}(t)$ and $\\boldsymbol{\\mathcal{S}}(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def get_response(margs, s_max=3, n_steps = 10, k_max=20, get_load_fn=lambda t: t):\n", + " Eps_n = np.zeros((len(Eps),), dtype=np.float_)\n", + " Eps_k = np.copy(Eps_n)\n", + " Sig_record, Eps_record, iter_record = [], [], []\n", + " t_arr = np.linspace(0,1,n_steps+1)\n", + " s_t = s_max * get_load_fn(t_arr) + 1e-9\n", + " for s_n1 in s_t:\n", + " lam_k = 0\n", + " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", + " f_k_norm = np.linalg.norm(f_k)\n", + " f_k_trial = f_k[-1]\n", + " k = 0\n", + " while k < k_max:\n", + " if f_k_trial < 0 or f_k_norm < 1e-8:\n", + " Eps_n[...] = Eps_k[...]\n", + " Sig_record.append(Sig_k)\n", + " Eps_record.append(np.copy(Eps_k))\n", + " iter_record.append(k+1)\n", + " break\n", + " dlam = np.linalg.solve(df_k, -f_k)\n", + " lam_k += dlam\n", + " Eps_k = get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs)\n", + " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", + " f_k_norm = np.linalg.norm(f_k)\n", + " k += 1\n", + " else:\n", + " print('no convergence')\n", + " Sig_arr = np.array(Sig_record, dtype=np.float_)\n", + " Eps_arr = np.array(Eps_record, dtype=np.float_)\n", + " iter_arr = np.array(iter_record,dtype=np.int_)\n", + " return t_arr, s_t, Eps_arr, Sig_arr, iter_arr" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Support functions\n", + "To run some examples, let us define some infrastructure including a more complex loading history and postprocessing" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Loading history\n", + "This implementation uses the symbolic machinery which is not necessary a simpler data point based implementation with `numpy.interp1d` would be better ... later " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"639.85\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t, theta = sp.symbols(r't, \\theta')\n", + "n_cycles = 5\n", + "A = 2\n", + "ups = np.array([((theta-2*cycle)*A+(1-A), theta-2*cycle<=1) \n", + " for cycle in range(n_cycles)])\n", + "downs = np.array([((1-(theta-(2*cycle+1)))*A+(1-A),(theta-(2*cycle+1))<=1) \n", + " for cycle in range(n_cycles)])\n", + "ups[0,0] = theta\n", + "updowns = np.einsum('ijk->jik',np.array([ups, downs])).reshape(-1,2)\n", + "load_fn = sp.Piecewise(*updowns).subs(theta,t*n_cycles)\n", + "get_load_fn = sp.lambdify(t, load_fn,'numpy')\n", + "t_arr = np.linspace(0,1,600)\n", + "plt.plot(t_arr, get_load_fn(t_arr));" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Plotting functions\n", + "To simplify postprocessing examples, here are two aggregate plotting functions, one for the state and force variables, the other one for the evaluation of energies" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33):\n", + " colors = ['blue','red', 'green', 'black', 'magenta' ]\n", + " s_pi_, z_, alpha_ = Eps_arr.T\n", + " sig_pi_, Z_, X_ = Sig_arr.T\n", + " n_step = len(s_pi_)\n", + " ax1.plot(s_t, sig_pi_, color='black', \n", + " label='n_steps = %g' % n_step)\n", + " ax1.set_xlabel('$s$'); ax1.set_ylabel(r'$\\tau$')\n", + " ax1.legend()\n", + " if ax11:\n", + " ax11.plot(s_t, iter_arr, '-.')\n", + " ax2.plot(t_arr, z_, color='green', \n", + " label='n_steps = %g' % n_step)\n", + " ax2.set_xlabel('$t$'); ax2.set_ylabel(r'$z$')\n", + " if ax22:\n", + " ax22.plot(t_arr, Z_, '-.', color='green')\n", + " ax22.set_ylabel(r'$Z$')\n", + " ax3.plot(t_arr, alpha_, color='blue', \n", + " label='n_steps = %g' % n_step)\n", + " ax3.set_xlabel('$t$'); ax3.set_ylabel(r'$\\alpha$')\n", + " if ax33:\n", + " ax33.plot(t_arr, X_, '-.', color='blue')\n", + " ax33.set_ylabel(r'$X$')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from scipy.integrate import cumtrapz\n", + "def plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr):\n", + " W_arr = cumtrapz(Sig_arr[:,0], s_t, initial=0)\n", + " U_arr = Sig_arr[:,0] * (s_t-Eps_arr[:,0]) / 2.0\n", + " G_arr = W_arr - U_arr\n", + " ax.plot(t_arr, W_arr, lw=2, color='black', label=r'$W$')\n", + " ax.plot(t_arr, G_arr, color='black', label=r'$G$')\n", + " ax.fill_between(t_arr, W_arr, G_arr, color='green', alpha=0.2)\n", + " ax.set_xlabel('$s$'); ax3.set_ylabel(r'$E$')\n", + " ax.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr): \n", + " colors = ['blue','red', 'green', 'black', 'magenta' ]\n", + " E_i = cumtrapz(Sig_arr, Eps_arr, initial=0, axis=0)\n", + " c = 'black'\n", + " ax.plot(t_arr, E_i[:,0], '-.', lw=1, color=c)\n", + " ax.fill_between(t_arr, E_i[:,0], 0, color=c, alpha=0.1)\n", + " c = 'black'\n", + " ax.plot(t_arr, E_i[:,0], color=c, lw=1)\n", + " ax.fill_between(t_arr, E_i[:,0], E_i[:,0], \n", + " color=c, alpha=0.2);\n", + " c = 'blue'\n", + " ax.plot(t_arr, E_i[:,1], '-.', lw=1, color='black')\n", + " ax.fill_between(t_arr, E_i[:,1], 0, color=c, alpha=0.1)\n", + " c = 'blue'\n", + " ax.plot(t_arr, E_i[:,1] + E_i[:,2], color='black', lw=1)\n", + " ax.fill_between(t_arr, E_i[:,1] + E_i[:,2], E_i[:,1], \n", + " color=c, alpha=0.3);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "material_params = {\n", + " E_b:1, gamma: 0.0, K:0.1, tau_bar:1, \n", + "}\n", + "margs = [material_params[map_py2sp[name]] for name in py_vars]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Monotonic load \n", + "Let's first run the example with different size of the time step to see if there is any difference" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"1399.1833333333334\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", + "ax11, ax22, ax33 = ax1.twinx(), ax2.twinx(), ax3.twinx()\n", + "for n_steps in [20, 40, 200, 2000]: \n", + " t_arr, s_t, Eps_arr, Sig_arr, iter_arr = get_response(\n", + " margs=margs, s_max=8, n_steps=n_steps, k_max=10\n", + " )\n", + " plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"898.9166666666666\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1,1,figsize=(9, 5))\n", + "plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr)\n", + "plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Cyclic loading" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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RTp16pQGDBig1NRUq8MyTXp6ujIyMpScnGzLNwVmuHDhghYsWKAvv/xS1dXV+vjjjxUVFaV33nnH6tDQTBjJI0lJSRozZoxKSkp08OBBde/eXWvWrDE54voFOp/Dhw/rr3/9qwoLC1VVVaVNmzapXbt2OnDggAVR181onq+urtawYcOUkJBgy7xoZD5Lly7Vz372M+Xk5Ki6ulqnT5/W4cOHTY64fkbmM2DAAM2YMUMVFRU6e/asBg0apMcee8zkiOtmpKY2h1wA+6DOUGfMRJ2hzqBhNOWa2BtvvKFevXpZHYYljhw5ElJNuW7duikjI8P39YYNG9SjRw8LI7KG0+m05ZsCq0yYMEEul8vqMNBMBJpHLl68qFatWik3N9e37amnntKwYcNMiTNQV5MX4+LitHr16qYK7YoYnc+SJUuUlJRk27wY6HwuXbqkrl27auvWrWaGZ5iR8xMZGaldu3b5vn7yySc1duzYJo/RqIauneaSC2Af1JnvUGeaHnWGOoOG0ZRrYrNnz9avf/1rq8OwRCg15YqLi+VwOHTkyBHftoKCAjkcDpWWlloXmAXs+qbACm63W7GxsdqwYYPVoaAZMJJHcnJyFBYWpqqqKt+27du3KyoqyqxwG3Q1efHMmTNq06aNdu/e3cRRBs7ofE6dOqXevXvrq6++smVeNDKf/fv3y+Fw6Pnnn1evXr0UGxur3/3ud/rmm29MjrpuRs9Pamqqpk2bJrfbraKiIt1www36+9//bmLEgWno2mkOuQD2QZ35DnWm6VFnqDMIDE05Azwej9xud52jurrab//Nmzerffv2+uyzzyyKuPEZWYNQasodP35cDofD7+8H1iTuwsJCCyMznx3fFFihurpad999t2666Sa/IgbUxUge2blzpzp06OC3LScnRy1btjQl1kBcaV4sLy/XzTffrKSkJDPCDJjR+UycOFHLli2TZM+8aGQ+77//vhwOh2655RadPXtWZ8+e1YgRIzR16lSzw66T0fOza9cu9evXTy1btpTD4dD48eNtmasbunaaQy6AfVBnvKgz5qDOUGcQGJpyBtx5551yOBx1jsu75tu2bVPHjh317rvvWhdwEzCyBqHUlKtJyEePHvVt40650FVdXa0HHnhA1113Xcidf1w5I3mkOfzW8kryYkVFhW677TaNHTtWFRUVZoUaECPz2bRpkwYPHuz7RZUd86KR+eTm5srhcPi9p8nOzlbnzp1Ni7chRuZTXFys9u3b6/nnn5fH49HZs2c1btw4PfTQQ2aH3SDuYEBjos5QZ8xEnaHOIDA05ZrA9u3bFR0drS1btlgdiqVCqSknef/GwOWfEJSenq7u3btbGJE17PimwEzV1dV66KGHFBcXp+LiYqvDQTMTaB6p+fsee/bs8W17+umnNXToUFPiDJSRvFhRUaHExETdeuutKi8vNytEQwKdzyOPPKLw8HDFxMQoJiZGbdu2VatWrRQbG2tmuA0KdD7ffvut2rRpo23btvm22e2HJSnw+ezevVutW7f227Zp0yb17NmzqUM0LNC/9WP3XAD7oM5QZ8xEnfkOdQZ1oSnXyLKzsxUVFaXMzEyrQ7FMdXW13G638vPz5XA4dO7cuR98vDfYLFiwQPHx8SoqKlJRUZHi4uJC6tNXKysr5Xa7NX/+fE2YMEFut9t2v4E0w7Rp09S/f3+dO3fO6lDQDBnJI1OmTNHYsWNVWlqqQ4cOqUePHrb7JKxA5+PxeDRu3DiNGDFCbrfbgkgDE+h8SktLVVhY6BuzZs3Sr371K504ccKCqOtm5HqbOnWqRo4cqeLiYpWUlGjUqFG2eqxICnw+33zzjaKiorRkyRJdunRJJSUlmjBhghITEy2I+ocZqanNIRfAPqgz1BkzUWeoM2gYTblGdtNNNyksLEzh4eF+I5TU3CFX36Otwcjj8WjatGmKiopSVFSUkpOTVVlZaXVYpnE6nbXOeUJCgtVhmero0aNyOBxq3bq13///Bx54wOrQ0EzUl0dGjx6tRYsW+fYtKyvTpEmTFBERoc6dO9vylwCBzmfHjh1yOBxq06aN3/+dy+drB0bOz+XsegexkflcuHBB9957rzp06KAuXbpo6tSptvoD3JKx+bz33nsaNGiQOnTooE6dOmnixIk6efKkVaHXUl9NbY65APZBnaHOmIk6Q51Bw2jKAQAAAAAAACajKQcAAAAAAACYjKYcAAAAAAAAYDKacgAAAAAAAIDJaMoBAAAAAAAAJqMpBwAAAAAAAJiMphwAAAAAAABgMppyAAAAAAAAgMloygEAAAAAAAAmoykHAADQTPTv31+ZmZlWhwEACFLUGcBcNOUAAACaAY/HNXKpgAAAAg9JREFUox//+Mc6ceKE1aEAAIIQdQYwH005oJEUFhbqjjvuUJcuXRQREaH+/fvr5MmTVocFAAgCx48fV5s2bdSiRQuFh4crPDxcn3/+udVhAQCCBHUGsAZNOaCRjBw5Uk888YQqKirk8Xi0c+dOVVZWWh0WACBIvPTSS0pISLA6DABAkKLOAOajKQc0kl69esnlcunChQtWhwIACEKzZs3SzJkzrQ4DABCkqDOA+WjKAY3kww8/1JgxYxQdHa3bb79dX3zxhdUhAQCCSEJCglavXm11GACAIEWdAcxHUw5oZGVlZRo/frySkpKsDgUAEEQ6dOigvXv3Wh0GACBIUWcA89GUAxpBenq6Dhw4oKqqKhUVFWnIkCF67rnnrA4LABAkPB6PwsLC+GEJANAkqDOANWjKAY1g9uzZio2NVbt27dSzZ0+5XC5VVVVZHRYAIIg8+uijat++vSIiInTu3DmrwwEABBnqDGA+mnIAAAAAAACAyWjKAQAAAAAAACajKQcAAAAAAACYjKYcAAAAAAAAYDKacgAAAAAAAIDJaMoBAAAAAAAAJqMpBwAAAAAAAJiMphwAAAAAAABgMppyAAAAAAAAgMloygEAAAAAAAAmoykHAAAAAAAAmIymHAAAAAAAAGAymnIAAAAAAACAyWjKAQAAAAAAACajKQcAAAAAAACYjKYcAAAAAAAAYLL/A/j/6rMUG8fuAAAAAElFTkSuQmCC\" width=\"1399.1833333333334\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", + "ax11,ax22,ax33 = ax1.twinx(), ax2.twinx(), ax3.twinx()\n", + "t_arr, s_t, Eps_arr, Sig_arr, iter_arr = get_response(\n", + " margs, s_max=2, n_steps=20000, k_max=20, get_load_fn=get_load_fn\n", + ")\n", + "plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, ax1, ax11, ax2, ax22, ax3, ax33);" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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lBIHcnspOXr0qDp06KBLL71U69atU15enk6cOKElS5aoU6dOZ/28m/YVAACUnF27diksLEzGGF1y1SWnLSSUEneilDiQ20vJwIED1bBhQx0+fLhYn3fTvgIAgJLTo0cP6yzJu/PfpZSUIpQSB3JzKfn1118VFRWladOmFftnuGVfAQBAydmyZYtCQkJkjNEV7a84YyGhlLgTpcSBCltKatWqpaSkpKCnVq1ahd722bNnKyoqSseOHbP+2T333KPExETFxMToscceO+vPoJQAAID/1bVrVxljFBISoolLJ1JKShlKiQO5uZSMGzdONWrUOO3/r1GjRpo4ceJZfwalBAAA/NmXX35pXbZ1Vcer/rKQUErciVLiQG6+fGvBggUKDw8/5X6Sw4cPKyQkRJs3bz7rz3DLvgIAgJJx8803yxij0LBQTV01lVJSClFKHMjNpeTIkSNq0KCB7rzzTv33v/+VJH333XcaOnSoYmJidPLkybP+DLfsKwAACL709HTrLMnfuvztrIWEUuJOlBIHcnMpkaTs7GzdeeedqlKlihITE9WwYUP16tVL6enphfq8m/YVAAAE13XXXSdjjMIjwjUrbRalpJSilDiQ20uJv8rSvgIAgDNbsWKFdZbkpr/fVKhCQilxJ0qJA1FKys6+AgCA0/N6vbrssstkjFFUTJTmbZxHKSnFKCUORCkpO/sKAABOb/bs2dZZkq73dy10IaGUuBOlxIEoJWVnXwEAwKlOnjyp888/X8YYxSfGa+nXSyklpRylxIEoJWVnXwEAwKkmTpxonSXp9a9eRSoklBJ3opQESW5urjp27Kjy5csrOTlZt99+u77//vtCfZZSUnb2FQAAFHTs2DHVrl1bxhglpyRr5faVlJIygFISJB07dlTnzp118OBBHTx4ULfccovuuOOOQn32r0rJsWPHAr2pjnPs2DFKCQAAZdQbb7xhnSV5+PmHi1xIKCXuRCkJkgsvvFBTp061/vuUKVN0/vnnF+qzpxtqr9erbdu2af/+/Tp27JiOHz9eKnPs2DHt379f27Ztk9frDdi/DwAA4HyHDh1SSkqKjDGqWquq1u1ZRykpIyglQfL+++/r1ltv1a+//qpffvlFN998sx5//PFCffZMQ/37779r27ZtysrKKtXZtm2bfv/990D+6wAAAC4wbNgw6yzJk689WaxCQilxJ0pJ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\" width=\"898.9166666666666\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1,1,figsize=(9, 5))\n", + "plot_work(ax, t_arr, s_t, Eps_arr, Sig_arr)\n", + "plot_dissipation(ax, t_arr, s_t, Eps_arr, Sig_arr)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hide_input": false, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Interactive application" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "hide_input": true, + "scrolled": false, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support. ' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option);\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>');\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABOUAAAFmCAYAAAAiQy5WAAAgAElEQVR4nOzdd1gUV/cH8LMsINIRFVQQY4sdldgjxBKDPdGYSBLbGzuQmFhjXcBG1Gg01thi7zXWxN5LNNFYY0FRsSMKImX3+/tjfmwkLLJldmcGzud55nlf2TtnzsydnGEvM3MJjDHGGGOMMcYYY4wxmyKpE2CMMcYYY4wxxhhjrKDhQTnGGGOMMcYYY4wxxmyMB+UYY4wxxhhjjDHGGLMxHpRjjDHGGGOMMcYYY8zGeFCOMcYYY4wxxhhjjDEb40E5xhhjjDHGGGOMMcZsjAflGGOMMcYYY4wxxhizMR6UY4wxxhhjjDHGGGPMxnhQjjHGGGOMMcYYY4wxG+NBOcYYY4wxxhhjjDHGbIwH5RhjjDHGGGOMMcYYszEelGOMMcYYY4wxxhhjzMZ4UI4xxhhjjDHGGGOMMRvjQTnGGCsAZsyYgaCgIDg6OqJjx45vbJuUlISwsDC4ubmhePHiiI6OtlGWjDHGGGOMMVZw8KAcY4wVAOvXr8fGjRsRHh6e56Bc165d0bJlSyQmJuLKlSvw9/fHL7/8YqNMGWOMMcYYY6xg4EE5xhgrQMaMGfPGQbmUlBQ4Ojri7Nmz+p9NnjwZwcHBtkiPMcYYY4wxxgoMHpRjjLECJK9BuTNnzsDOzg5arVb/s71798LT09MW6THGGGOMMcZYgcGDcmYiIl544YUXWSwqlUq/aDSaN9auvAblDh48CA8Pj2w/O3PmDNRqtSi1k+Uk9fnDCy+88ELEXwnMIeb7Wu/evYuWLVvC2dkZ/v7+mDdvnkm5SH3+8MILL7xkLUqrn1LjK7CZjD3ZGGPMmkytRXynnPzw9YQxJjWuQ+YR832twcHB6NmzJ5KTk3H8+HF4eHhg//79RufCfcgYkwNja5Gc6qfUuHqbiS98jDE5EHtQLuudcn/++af+Z1OmTEHjxo3NzpG9GV9PGGNS4zpkGUvf13rt2jWo1Wo8evRI/3lERAS6du1qdA7ch4wxObDWdxNr1k+pcfU2E1/4GGNyYGwtysjIQGpqKkaMGIGPPvoIqampSEtLM9i2S5cuaN26NZ49e4arV6+idOnSPPuqFfH1hDEmNa5DlrH0LvQNGzYgICAg2zoLFy5EzZo1jc6B+5AxJge2fopHjPopNa7eZuILH2NMDoytRWPGjMnxvoeQkBAAQGhoKMaNG6dvm5SUhM6dO8PV1RXFihVDVFSUNVJn/4+vJ4wxqXEdsoyl72tdsmQJAgMDs32+YcMGlCtXLteYGo0m2ztluQ8ZY3JAZNv3XZtTP+WGq7eZ8rrw6XQ6pKen88ILdDqdjc5KVhDxL+HKx33IGJMa1yHLiHGnR5kyZbKtw3fKMcaUSIo75Sytn1Lj6m2m3E42nU6Hhw8f4tKlS7h48SIvvODSpUt4+PAhD84xq+BfwpWP+5AxJjWuQ5ax9H2tWe9Eevz4sf7zyMhIdOnSxegcuA8ZY3Jg6/ddi1E/pcbV20y5nWxZA3KJiYlIS0uT/C4tXqRd0tLSkJiYqB+YY0xs/Eu48nEfMsakxnXIPGK+r7Vx48bo3bs3UlJScOLECXh6evLsq4wxxZHifdeW1k+pcfU2k6GTTafT6QfkGHtd1sAc3y3HxMa/hCsf9yFjTGpch8wj5vta79y5g9DQUDg7O8PPzw/z5s0zKRfuQ8aYHEjxvmtL66fUuHqbydDJlp6ejosXL+Y6wssKrrS0NFy8eBHp6elSp8LyGf4lXPm4DxljUuM6pHzch4wxOeBaZDo+YmZ606AcD7yw/+Jzg1kLX/iUj/uQMSY1rkPKx33IGJMDrkWm4yNmJh6UY6bgc4NZC1/4lI/7kDEmFnNfk8F1SPm4DxljcsC1yHR8xMzEg3L/2rdvH7y9vaVOw2yPHj2Ct7c3goKCsv38woULaNq0KTw9PeHj44NevXohJSVF//mhQ4dQr149uLu7o2TJkhg2bFi2qZpfV1DPjYLg6dOn2LdvH6ZNm4aePXti3bp1Nt0+X/iUj/uQMSaW8G3h+Hbnt8jUZpq0Htch5VNiH27cCHz0EdCwIfDar9iMMQVTYi2SGh8xM/Gg3L+UPij3+eefo0mTJjkG5QIDAxEZGYm0tDQ8evQI9evXx7BhwwAAmZmZKFKkCGJjY5GZmYm4uDiUK1cOc+bMMbiNgnpu5CdarRZXr17F2rVrMWLECLRp0wb+/v45XlD6zjvv2DQvvvApH/chY0wM/X7tB9IQfCb54N7zeyaty3VI+ZTYh+XKAUTCMmaM1NkwxsSgxFokNT5iZlLyoFxAQAAmT56MevXqwdXVFcHBwbh9+3ae6y1ZsgTly5eHq6srSpYsiejoaDx79gxOTk4gIri4uMDFxQVHjx4FACxduhRVq1aFh4cHGjRogDNnzuhjhYSEYOjQoQgJCYGrqyvq16+Pixcv6j+fNGkS/P394erqioCAAPz888/iHwgAu3btQkhICBYtWpRjUM7NzQ0nTpzQ/3vixIlo3bo1AODJkycgIjx48ED/ed++fREeHm5wO0o5N5jg+fPnOHLkCGbNmoU+ffqgfv36cHFxyTEAZ2dnhypVqiAsLAyffPIJiAhdu3a1aa584VM+7kPGmKXGHxoP0hBUGhWO3D5i8vpch5RPaX344MG/A3JEwt1yjDHlU1otkgM+YmZS+qBctWrVcP36daSmpqJNmzbo1q3bG9dJTk6Gvb09Dhw4AABITEzEyZMnARi+U27Lli3w9/fH2bNnkZmZicWLF6NEiRJITk4GIAzKeXt749ixY0hLS8Pw4cNRoUIFZGRk4PLlyyhcuDAuXboEALh//z7++usvg3ndunULHh4euS79+vXLdZ9SUlLw9ttv4+LFiwYH5aKiotC/f3+kpqYiISEBdevWxaxZs/Sf/+9//8P48eORnp6O69evo2zZsvj1118Nbksp50ZBo9PpEBcXh82bNyM6OhodO3ZEuXLlcgy+ERE8PDwQHByMyMhIzJ8/H6dOncLLly/1saKjo0FEmDFjhk33gS98ysd9yBizxLar20AaAmkI4dsM/3EwL1yHlE9pfThqlDAYV6mS8L9160qdEWNMDEqrRXLAR8xMxg7KBQQEwNPT0+pLQECA0bkHBARg3rx5+n+vWrUK1apVe+M6ycnJKFy4MObMmYOkpKRsnxkalGvZsiWmT5+e7WdVqlTBtm3bAAiDcpGRkdmOnaenJw4dOoRr167ByckJ69atyzboIbaBAwdi+PDhAGBwUO7EiROoUqUK1Go1iAgffvhhtnfG7dixA35+fvrPv/rqq1y3xYNy0ktNTcXp06exYMECREZGIjg4GJ6engYH4MqVK4cOHTogKioKmzdvRlxcXJ4vz27Tpg2IKNvdlbbAFz7l4z5kjJnr6uOrsI+2B2kIjRc2NjsO1yHlU1ofNmwoDMZ16QI4OgI+PlJnxBgTg9JqkRzwETOT0gfltm7dqv/31q1bjVr/999/R2hoKNzd3dGoUSPs27cPgOFBucqVK8PFxSXbXWuFCxfWDwaGhIRg8uTJ2dapWrUqVq1aBQBYvXo1QkJC4ObmhhYtWuR6p5y5zpw5gwoVKugH/f47KPf06VO4u7vjp59+Qnp6Oh49eoT27dvr77y7fPkynJycsGHDBmRmZuL27duoX78+YmNjDW6PB+VsR6fT4d69e9ixYwcmTpyIsLCwbIOrry/Ozs6oX78++vTpg1mzZuHIkSN4/vy5Wdv08fGBg4MDXr16ZYW9yh1f+JSP+5AxZo4XaS/gMcEDpCH4/eCHDG2G2bG4Dimf0vrQy0sYlNuw4d93y5nxKxhjTGaUVovkgI+YmZT++Ko5g3JZ0tPTMW3aNHh5eUGn0+HAgQM5BuU++OCDN74H7r93ymVkZOjvlHvdy5cvMWjQINSsWdNgnFu3bunfZWdo6dOnj8H1pk6dCicnJ3h7e8Pb2xuurq6wt7eHt7c3Hjx4gFOnTqFQoULZ1tmyZYv+OK1duxZvv/12ts+nT5+OkJAQg9tTyrmhNOnp6Th37hyWLl2KQYMG4f3330exYsUM3v3m7++PNm3aYMSIEVizZg2uXLmCzEzTZqfLza1btySZ5AHgC59c3LlzB+3bt0eRIkXg7e2NTp064eHDh0aty33IGDOVVqtFxekVQRqC8zhnPEp5ZFE8U+qQJfWOWY+SriVpaf++Sy4tDShSRPj/O3ZInRljzFJKqkVywUfMTAVtUO7+/fvYsGEDnj9/Dp1Oh4ULF6Jo0aLQ6XS4fPky7O3ts/1CtmnTJlSoUAFnzpyBTqdDcnIytm/fjsePHwMQBuWKFi2KEydOIC0tDaNGjUK5cuX075TbvXs3Xr58iczMTGg0mhyPllrqxYsXiI+P1y8//PADatSogfj4eGi1Wjx//hyenp6YM2cOMjMzkZiYiI8++gjt2rUDAFy/fh3Ozs7YsmWL/s6shg0b5voIq1LODTl78uQJ9u7di6lTp6Jbt26oWbMmHB0dcwy+OTo6olatWujevTumTp2Kffv24cmTJ1bNbd26dSCiN77D0Fr4wicP7du3R4cOHfDixQu8ePECH374ITp37mzUutyHjDFTtVneBqQh2EXZ4Y97f1gcz5Q6ZEm9Y9ajpGvJ+vXCIJyXl/DvChWEf48fL21ejDHLKakWyQUfMTMVtEG5e/fuISQkBB4eHnBzc0NQUBD27t2r/7xXr14oUqQIPDw8cOzYMQDAihUrEBgYCHd3d/j6+qJDhw7ZBuWGDh2K4OBguLi4oF69ejh//jwA4Ny5c6hXrx7c3Nz0L9cX+/HV/zL0TrkDBw6gfv368PDwQNGiRdGxY0fcvXtX//nGjRsRGBgINzc3+Pj4oEePHrk++qiUc0MOMjMzcfnyZaxevRrDhw9H69at4efnZ/Dut+LFi6NFixYYPHgwli1bhvPnz0tyjIcMGQIiwqJFi2y+bb7wyUP16tWxevVq/b9XrVqFqlWrGrUu9yFjzBQj94zUT+yw7NwyUWKaUocsqXfMepR0LenSJfuMq02a/Pt+OcaYsimpFskFHzEzKXlQTg5CQkJsPkullPjcMOz58+c4fPgwZs6cid69e6NevXpwdnbOMfimVqtRtWpVfPbZZ4iNjcXOnTuRkJAgdfp6TZo0ARHh77//tvm2+cInDwsXLkTHjh2RlJSEZ8+eoV27dhgyZIhR63IfMsaMtfbCWv2A3ODdg0WLa0odsqTeMetR0rWkYkVhEG7kSOHfPXsK/27USNq8GGOWU1Itkgs+YmbiQTnL8KBcwaLT6XDz5k1s2rQJGo0GH330EcqWLWvw7jdPT0+EhITgq6++woIFC3D69GmkpqZKvQu50mq1cHNzg6urq2jvqDMFX/jk4erVq2jYsCHs7OygUqnQoEEDJCcnG2yr0WigUqn0C/chY8wYCc8T4BjjCNIQWixpIWpsIspWlzQaTa5tTal3zHaUdC0pVEgYhMv6W+bUqcK/33pL2ryksn8/EBYGtGkD+Pv/u7z7LpBh/vwtjElCSbVILviImSk/DsodPHgw1wkTTp48Keq2eFAu/3r58iVOnjyJn3/+GREREWjcuDE8PDxyDL6pVCqUL18eHTt2RExMDLZs2YJbt25Bp9NJvQsmuXjxIogo10k+rI0vfNLTarUICAjAsGHDkJKSgufPn6Nv375o2bKlUetzHzLG8pKakYoG8xuANIQas2pAq9WKGt/YOmRpvWPWo5Rrye3bwgCcvf2/Pzt4UPiZu7t0eUnpvff+nfjivwu/Z48pjVJqkZzwETNTfhyUY9aTH88NnU6Hu3fvYvv27ZgwYQI6d+6MypUrw87OLscAnIuLCxo0aIC+ffti9uzZOHr0KF68eCH1Lohi8eLFICIMHizeY0Sm4Auf9B49egQiyvZI9blz52BnZ2fU3ZPch4yxN9Fqtei8rjNIQ2i4oCFeZbwSfRvG1iFL6x2zHqVcS2JjhcGm119nnZIi/EytliwtSRUtKuz/nj3AwoXC0q6d8LOyZaXOjjHTKKUWyQkfMTPxoBwzhdLPjbS0NPz111/45Zdf8O2336JZs2YoWrSowcdPS5cujbZt22LkyJFYu3Ytrl69Kvpf9OUkPDwcRIQ1a9ZIsn2+8MlDuXLlMHLkSLx69QopKSno378/atSoYdS63IeMsTdp9kszkIbg/4M/HiQ/sMo2TKlDltQ7Zj1KuZY0ayYMNnXsmP3narXwcxm/scQqXr0S9tvOLvvPL18Wfu7kJE1ejJlLKbVITviImYkH5ZgplHRuPHr0CL///jumTJmCrl27IjAwEA4ODjkG3woVKoTatWujR48emDZtGvbv34+nT59Knb7N1alTB0SEmzdvSrJ9vvDJw/nz59G8eXN4eXnBy8sLLVq0wMWLF41al/uQMZabFedX6Cd22Hhpo9W2Y0odsqTeMetRyrUka5KH/05Y7+4u/PzwYUnSksyVKznvHMyiUhXMgUqmbEqpRXLCR8xMbxqUe/VK/McKmLK9evVKdoNymZmZuHTpElatWoXvvvsOrVq1QqlSpQze/ebj44MPPvgAQ4YMwfLly/H3338jg988i1evXsHR0RHFihWT7F14fOFTPu5Dxpghp+6eQuGxhaHSqDDl6BSrbovrkPIpoQ91OuFRTUfHnANNZcoIA1DTp0uTm1Sy3qcXFpbzM09P4bPt222fF2PmUkItkhs+YmYydLLpdDpcvXoV169fR3JyMtLS0pCens5LAV7S0tKQnJyM69ev4+rVq5IN3CQlJeHQoUOYMWMGevbsiTp16qBw4cI5Bt/UajWqVauGzz//HN9//z127dqF+/fvS5KzEpw8eRJEhFatWkmWA1/4lI/7kDH2X3/c/QM+k3xAGsIPR3+w+va4DimfEvrw2jVhkKlhw5yfNWwofNanj+3zktLSpcJ+DxuW87Pq1YXPJHptMWNmUUItkhs+YmbK7WTLyMhAfHw8Ll68yAsv+iU+Pt4md5bpdDpcv34dGzZswJgxY/Dhhx/irbfeMnj3m5eXF9577z18/fXXWLhwIc6cOcN3eZpo5syZICJoNBrJcuALn/JxHzLGXvcw+SGcxzmDNISwdWE2+YMe1yHlU0IfTpwoDDJFROT87Msvc79jLD/7/HNhv0ePzvlZWJjwWdOmts+LMXMpoRbJDR8xM+V1smm1Wsnv0uJFHou1JjlISUnBiRMnMG/ePISHh+Pdd9+Fm5tbjsE3lUqFChUq4OOPP8bYsWOxdetW3L59W7K79vKTbt26gYiwbds2yXLgC5/ycR8yxrJkaDNQakopkIbgOdETyWnJNtku1yHlU0IfZt35NWBAzs927hQ+69nT9nlJqVIlYb+jonJ+NmOG8Jm/v+3zYsxcSqhFcpOvjpiLi0u2xd7eHtWrV8+1fUhICBwdHbOtY+ydQnyyMVvR6XS4c+cOtm3bhvHjx+OTTz7B22+/DTs7uxwDcC4uLmjYsCH69euHOXPm4NixY0hOts0v9AVRlSpVQER4+PChZDlwLVI+7kPGWJZGCxqBNASHaAdce3LNZtvlOqR8SujDt94SBpmOHcv52aVLwmfvv2/7vKTk7S3s9+bNOT/LetzX19f2eTFmLiXUIrnJ10esevXqGDduXK6fh4SEYMaMGWbF5pONWUNaWhrOnj2LxYsX45tvvkHTpk3h7e1t8PHTgIAAtGvXDqNGjcK6devwzz//WO2uPJbT8+fPoVKpUKZMGUnz4FqkfNyHjDEA6Lu1L0hDUGlU2PHPDptum+uQ8sm9D1++BOztgRIlhAkf/islRRiAKlnS9rlJydFR2O8HDwx/7usLODgA6fKZK46xN5J7LZKjfHvETpw4AbVajbt37+bahgflmJQePnyI3377DZMnT0aXLl1Qo0YN2Nvb5xh8K1SoEIKCgvC///0PP/74Iw4cOIDExESp0y/w9u3bByLCJ598ImkeXIuUj/uQMTb39FyQhkAaQuzhWJtvn+uQ8sm9D48cEQafPvoo9zYqldCmoPyNWasV9lelyr1Ns2ZCm4sXbZcXY5aQey2So3x7xHr37o02bdq8sU1ISAi8vb1RpEgR1K5dG2vXrjU6Pp9szFgZGRm4ePEiVq5ciaFDhyI0NBQlSpQwePebr68vQkNDMXToUKxYsQIXLlywyQQRzHSxsbEgIkyaNEnSPLgWKR/3IWMF2+Fbh6HSqEAaQue1nSXJgeuQ8sm9D7t3FwaXhgzJvY2vr9Dm1i3b5SWlCxeE/XV2zr1Nly5Cm4kTbZcXY5aQey2So3x5xFJSUuDu7o5Nmza9sd2xY8eQlJSE9PR0bNmyBc7Ozti3b5/BthqNBiqVSr/wycYMefbsGQ4cOIDp06fjyy+/xDvvvAMnJ6ccg29Z7zv84osvMGnSJOzevRsPcrtvncnSxx9/DCLCgQMHJM2Da5HycR8yVnDdTbqLQjGFQBpC4OxAyfLgOqR8cu9DPz9hcGn69NzbdOwotDlxwnZ5SWnx4rwf2c2anfW992yXF2OWkHstkqN8ecQWLVoEX19fk+8w6t27N8LDw41qyydbwabVanHt2jWsX78eo0ePRvv27VGmTBmDd78VKVIETZo0wYABA7Bo0SKcPXvW6AlFmHyVLl0adnZ2ePHihaR5cC1SPu5DxgqmtIw0FP++OEhDKBpbFKkZqZLlwnVI+eTeh2r1m9+dBgDffiu0WbPGdnlJKWt/a9fOvc2KFUKb5s1tlxdjlpB7LZKjfHnEGjVqhKFDh5q8Xt++fdG/f3+j2vLJVnAkJyfj+PHjmDt3Lvr164eGDRvC1dU1x+CbSqVCxYoV8cknn2DcuHH49ddfER8fD52ht9kyRbt//z6ICNWqVZM6Fa5F+QD3IWMF07sL3gVpCI4xjrj1TNrn9bgOKZ+c+/DkSWFgqXDhN7cbMUJo16uXbfKSWps2eb9nLzFRaFOliu3yYswScq5FcpXvjtjly5ehUqlw5cqVN7ZLTEzE9u3b8fLlS2RmZmL79u1wcXHBb7/9ZtR2+GTLf3Q6HW7fvo2tW7di7Nix6NSpEypWrKh/XPn1xc3NDY0aNUL//v0xd+5cHD9+HMnJyVLvArORrVu3gojQo0cPqVPhWpQPcB8yVvD8/MfPwoBctCP23tgrdTpch/IBOffhoEHGDSx9953Qrnp12+QltRo1hP0dNuzN7UqWFGau5RlYmRLIuRbJVb47YoMHD0ZwcLDBz0JDQzFu3DgAwsyXderUgZubG9zd3VGzZk2sXLnS6O3wyZZ/JCQkIDQ0FEWKFDH4+GmZMmXQvn17jB49GuvXr8e1a9egLSjTQlngxYsXOHr0KGbPno3Vq1dLnY6oRo8eDSLC7NmzpU6Fa1E+wH3IWMGy7+Y+2EfbwyHaAQfjDkqdDgCuQ/mBnPuwTh1h8Klnzze3W7VKaOfjY5u8pJY1scWKFW9uV7Wq0G77dtvkxZgl5FyL5IqPmJn4ZMs/oqKiQERwcnLCO++8gy+//BIzZszAwYMH8ezZM6nTkz2dTodbt25hy5YtiImJwccff4wKFSrkuMMwKSlJ6lRFExoaCiLC6dOnpU6Fa1E+wH3IWMHx+/XfYR9tD9IQFp1dJHU6elyHzJOeno7w8HB4eXnBy8sLERERBt9pfevWLbi4uGRb1Go12rZtq28TEBAAJycn/edly5Y1KRc596G7u3GDSjduCO2cnGyTl9ScnIT9vXbtze1q1RLaDRhgm7wYs4SxtUhO9VNq8q3eMifnCx8zTbVq1UBEeT7yzIDU1FT88ccfWLhwIb7++muEhITAy8vL4B2GZcuWRdu2bUFE8PLyyjfv1tPpdPD29kahQoWQlpYmdTpci/IB7kPG8ofVf6/GZ+s+M7jMPDETM07MgPsEd5CG0GhBI6nTzYbrkHlGjx6N2rVrIyEhAffu3UNgYCCioqLyXC8tLQ1FixbF8uXL9T8LCAjA1q1bzc5Frn2YkiIMKKlUQF5z8Gm1QluZ7oroXF2BQoWE/X6Trl2FY5LLw2CMyYqxtUhO9VNqBaTkiU+uFz5mmkuXLoGIUKNGDalTkZ379+9j586diI2NxWeffYaqVatCrVbnGHwrXLgw6tati969e2PmzJk4fPiw/q64s2fPgojQokULifdGPNevXwcRoV69elKnAoBrUX7AfciY8k07Ng2kIaOWmrNrIi1D+j/qvI7rkHn8/PywceNG/b/XrVuH0qVL57ne6tWr4eXlhdTUf2fcza+DcsuWCQNKRYsa175QIaF9XJx185JaUpKwn1Wr5t127lyhbalS1s+LMUsZW4vkVD+lJs/qrQByvfAx08TExICIEBMTI3UqkklPT8f58+exbNkyDB48GC1atICPj4/Bu9/8/PzQunVrDB8+HKtXr8bly5eRmZmZa+x58+aBiDBy5Egb7pF1rVq1CkSEyMhIqVMBwLUoP+A+ZEzZ9tzYA5VGBdIQAmcHInRpaI5l7IGxmHhoIpb8uQSZ2tyvm1LhOmS6p0+fgohw8+ZN/c9u3LgBIsrz9SctWrRAREREtp8FBASgePHi8Pb2RqNGjbB3r2kTgMi1Dz/9VBhQeu8949oXLy60X7PGunlJ7dw5YT9btcq77a1bQltHR+vnxZiljKlFcqufUpNn9VYAuV74mGlq1KgBIsLly5elTsUmnj59in379mHatGno0aMHatWqBUdHxxyDbw4ODqhZsya6deuGH374AXv27MHjx49N3l7Pnj1BRNi8ebMV9kYa3377LYgIS5YskToVAFyL8gPuQ8aUKy4xDo4xjiANoc68OlKnYzauQ6a7ffs2iAiJiYn6n2V90YyPj891vbi4ONjZ2eHPP//M9vODBw8iJSUFqampmD9/Ppydnd/4+6lGo4FKpdIvcu3DsmWFAaWxY41rX7260H74cOvmJbXx44X9bNbMuPZqtdD++XPr5sWYpYgoW23SaDQ52khdP+VGntVbAeR64WPGu3LlCogI1apVkzoV0Wm1Wly9ehVr1++spxUAACAASURBVK7FiBEj0KZNG/j7+xu8+61YsWJo3rw5Bg4ciCVLluDcuXNIF2nO9cDAQBAR7t27J0o8OWjcuLGsBnK5Fikf9yFjypSakQrvWG+QhuA72Vd2j6SaguuQ6bK+QMa99pylMXd6jBkzBkFBQXnGb9GiBSZNmmR0PnLtQwcHYTDpxg3j2rdqJbTv2NG6eUmtUydhP0NDjWvv7S20X7/eunkxZilT7pSTS/2UmjyrtwLI9cLHjDdu3DgQkVEvlJSzFy9e4MiRI5g1axb69OmD+vXrw8XFJcfgm52dHSpXroywsDBMnDgRO3bswL1796w2AUNKSgrUajX8/PysEl8KGRkZcHZ2hru7O7R5vZXXRrgWKR/3IWPK9OHKD0EagtNYJyS8SJA6HYtwHTKPn58fNm3apP/3+vXr4e/vn2t7rVaL0qVLY/bs2XnGDg0Nxffff290LnLsw8ePhYGkNxySHAYMENYx4nu3omXtpxGnAgCgdm2h/VdfWTcvxixlyjvl5FI/pSa/6q0QcrzwMdPUrFkTRISLFy9KnYpRdDod4uLisHnzZkRHR6Njx44oX768wbvfPDw8EBwcjMjISMyfPx+nTp3Cy5cvbZrv4cOHQUTo0KGDTbdrTefOnQMRoZmxzxrYANci5eM+ZEx5Zp6cCdIQPCZ44Ojto1KnYzGuQ+YZNWoUgoKCkJCQgISEBNSqVeuNf+zduXMnnJ2dc9wJcuvWLRw8eBBpaWlIT0/H4sWLUbhwYVy4cMHoXOTYh9u3CwNJ3bsbv878+QVjUoOsO+WOGlk+uncX2r/7rnXzYtI7dUp4rLlx49yXZs2AP/6QOlPDjK1FcqqfUpNf9VYIOV74mPH++ecfEBGqGjPlkQRSU1Nx+vRpLFiwAJGRkQgODoanp6fBAbhy5cqhQ4cOiIqKwqZNmxAXF2e1u99M8cMPP4CIMGHCBKlTEc2CBQtARBg2bJjUqehxLVI+7kPGlGXN32ugjlKjUEwhHIs/JnU6ouA6ZJ709HT0798fnp6e8PT0RHh4ODIyMgAId2qMGzcuW/tOnTqha9euOeJcuHABgYGBcHFxgaenJxo0aIDdu3eblIsc+3D4cNPuBgOAv/4S1nFxsV5eclCnjrCfd+8a1z5rsLJkSevmxaRXrZrQ13ktFStKnalhxtYiOdVPqcmveiuEHC98zHjff/89iAhjxoyROhUkJCRgx44dmDhxIsLCwlClShWo1eocg2/Ozs6oV68eevfujVmzZuHIkSN4LuO3vYaFhYGIsGfPHqlTEU2fPn1ARNiwYYPUqehxLVI+7kPGlGPb1W0gDYE0hOXnlkudjmi4DimfHPsw6z1o27YZv05GhjCpgYeH9fKSA7UaUKmATCMnY75zRziWDg7WzYtJz9393/cq9u2bc/niC+Hc8fUFZHAfRg5yrEVyx0fMTHyyKVv79u1BRDhy5IjNtpmeno5z585h6dKlGDRoEN5//30UL17c4N1v/v7+aNOmDUaMGIE1a9bgypUryDT2qi0T5cqVM2paayWpXbt2nrMC2RrXIuXjPmRMGR6nPEbJySVBGkLjhY2lTkdUXIeUT259qNX+O2Noaqpp61aoIKxn4zev2ExionkDbFnHMx/9as3+Q6sVBtyIhAHq3DRoILS5ds12uRlLbrVICfiImYlPNmUrWbIk7O3trfaetSdPnmDv3r2YOnUqunfvjpo1a8LR0THH4JujoyNq1aqF7t27Y+rUqdi7dy+ePHlilZxs6cmTJyAiVKpUSepURJOamgp7e3uUKFFCFo8HZ+FapHzch4zJX1pmGkIWhYA0hJbLWiJD+4ZvSwrEdUj55NaHFy8KgwaNzRi/bt5cWFcmE92LbudOYf+8vExbr2FDYb0//7ROXkx6WXdEli//5nb9+gntXpsnQTbkVouUgI+YmfhkU647d+6AiFCrVi2LY2VmZuLKlStYs2YNhg8fjtatW8PPz8/g3W/FixfH+++/j0GDBmHp0qU4f/480tPTRdgj+dm5cyeICF26dJE6FdEcO3YMRIR27dpJnUo2XIuUj/uQMXnTarVo9kszkIbwzrx3kJKeInVKouM6pHxy68OFC4VBg6FDTV+3aVNh3R9/FD8vOZgwQdi/ChVMW2/QIGG9FSuskxeT3u7dQh8beHVaNn36CO0++MA2eZlCbrVICfiImYlPNuXauHEjiAi9e/c2ab3nz5/j8OHDmDlzJnr37o169erB2dk5x+CbWq1GlSpVEBYWhtjYWOzcuRMJCQlW2ht5iomJARFhxowZUqcimh9//BFEhLFjx0qdSjZci5SP+5AxeWu7oi1IQ3AZ54K7z418K7vCcB1SPrn1YYcOwqCBOa/hzRqUy0d/282ma1dh/5o0MW29RYuE9b77zippMRmYOlXo49jYN7f74QehnRwfSpJbLVICPmJm4pNNub777jsQEebPn29U+2HDhunfj/bfxcPDAyEhIfjqq6+wYMECnD59GqmmvjgjH2rbti2ICMePH5c6FdF88cUXICLs2rVLtJgPHjzA7t27MWnSJHz99de4ZsaLIUyZ4Sg8PBxeXl7w8vJCRESEfoaj/7pw4QKaNm0KT09P+Pj4oFevXkhJyX93hsgFX08Yk69Re0fpJ3ZYdm6Z1OlYDdch5ZNbHzo5mf+o5ZQpwroDB4qflxy8+66wfz17mrbeunXCeiVKWCcvJr2qVYU+zuu+hrt3hXY1a9omL1PIrRYpAR8xM/HJplzNmzcHEeGvv/7Ks21cXJx+AK58+fLo2LEjoqOjsXnzZsTFxcnq3WJyodPp4OvrCwcHh3w1QFmxYkUQkVnv/MvIyMCFCxewfPlyDBkyBB988AF8fX1zDPKOHz/e5NjG1qLRo0ejdu3aSEhIwL179xAYGIioqCiDbQMDAxEZGYm0tDQ8evQI9evXx7Bhw0zOjRmHryeMydPaC2v1A3KDdw+WOh2r4jqkfHLqw4QEYcBArTZv/f37hfW/+ELcvOSibFlh/6ZONW29rOPq7GydvJj0PDyEPj50KO+2xYoJg99ymwtQTrVIKfiImYlPNmXSarXw8PCAs7NzrncJvW727NkgIgwenL9/GRdTfHw8iAhBQUFSpyKaxMRE/cCsMW3379+PH3/8Ef/73/8QFBQEJyenHANwDg4OCAwMRNeuXVG9enUQETaY8YyHsbXIz88PGzdu1P973bp1KF26tMG2bm5uOHHihP7fEydOROvWrU3OjRmHryeMyc/5++ehjlKDNIQWS1pInY7VcR1SPjn1YdYjeP7+5q1/86aw/rvvipqWbGQNvBw4YPq6AQGAnZ3pM9oy+dPpADc3oHDhN8+8miUkRDiPzpyxemomkVMtUgo+Ymbik02Zrly5AiLCu0Ze5du1awciwt69e62cWf6xfv16EBH69esndSqi+e2330BE+Oyzz/Q/02q1+Oeff7Bu3TqMGjUK7dq1Q+nSpQ0+5ly0aFE0a9YM3377LX755Rf8+eefSEtL08cKCgoCESE+Pt7k3IypRU+fPgUR4ebNm/qf3bhxA0SEZ8+e5WgfFRWF/v37IzU1FQkJCahbty5mzZplcm7MOHw9YUxeElMT4TreFaQhvDXtLWi1WqlTsjquQ8onpz784ANhsKB9e/PWT0sT1ndwEDcvuVCrhf0z580grVsL6549K35eTFrx8ULf1qljXPsaNcyfTMWa5FSLlIKPmJn4ZFOmZcuWgYjw7bff5tn21atXcHFxgaura7YBFPZmw4YNAxFh4cKFUqcimhEjRoCIUKlSJfTt2xcNGjSAq6trjsE3Ozs7VKpUCZ9++ikmTJiA7du34+7du298zDk1NRX29vYoUaKEWY9DExFUKpV+0Wg0Odrcvn0bRITExET9z7IG6gwNBJ44cQJVqlSBWq0GEeHDDz8sEF9KpcLXE8bkQ6vVosy0MiANwW28G56l5vzDRX7EdUj55NSHvr7CYMHcuebHsGTgSs5SUy17tHfwYOPeOcaUZ/16oW+7dzeufefOQvtmzaybl6nkVIuUgo+YmfhkU6avvvoKRISVK1fm2fb333/XD0gw4zVt2hREhL///lvqVEym0+lw69YtbNmyBTExMfj4449RoUIFg3e/ubu7o3HjxoiIiMDPP/+MkydPmjUZwvHjx0FEaNeunVk5m3KnXFxcnP5nud0p9/TpU7i7u+Onn35Ceno6Hj16hPbt2+erOx/lhq8njMlH8yXNQRqCOkqNvx8o7zpmLq5DyieXPtRqhccriYDX/hZoMnd349+tpSRHjwr75eZm3vq9egnrN2ggbl5Meu3aCX3boYNx7adPF9rn8jYaycilFikJHzEz8cmmTA0aNAAR4fr163m2HThwIIgIcy35M18Bo9Vq4e7uDhcXF2TK7a2j/5Gamoo//vgDCxcuxNdff4333nsPXl5eBgfgspahQ4di48aNuHHjhmiTfEyfPh1EhJiYGLPWN+Wdcps2bdL/e/369fA38LKXU6dOoVChQtl+tmXLFgQEBJiVH8sbX08Yk4eBuwbqJ3ZYd2Gd1OnYFNch5ZNLHx46JAwUuLhYFqdMGSHOtGni5CUXP/8s7Je5v1YtWSKs7+sralpMBipWFPo2l3nYcrh6VWjv5GTdvEwll1qkJHzEzMQnm/Kkp6fDyckJ3t7eRg2oVK1aFUSE27dv2yC7/OHSpUsgIoSEhEidSjb379/Hrl27EBsbi88++wxVq1bVP5r5+lK4cGHUrVsXvXr1wk8//YTDhw/j8uXLICLUtNKc4126dAERYdeuXWatb2wtGjVqFIKCgpCQkICEhATUqlXL4Oyrz58/h6enJ+bMmYPMzEwkJibio48+MvtOPpY3vp4wJr39N/frB+TG7B0jdTo2x3VI+eTSh5GRwkBBYKBlcRo2FOL06iVOXnKxdKmwX0OGmLf+w4fC+vb24ubFpOfqKvTt0aPGr5N1V6qcJv6QSy1SEj5iZuKTTXnOnDkDIkJoaGiebZ88eQIiQsWKFW2QWf6xZMkSEBEGDRokyfbT09Nx/vx5LFu2DIMHD0aLFi3g4+Nj8K63UqVKoXXr1hg+fDhWr16Ny5cvG7y7b9OmTSAi9LLSb4Vvv/02iAhPnjwxa31ja1F6ejr69+8PT09PeHp6Ijw8XD8DcWhoKMaNG6dve+DAAdSvXx8eHh4oWrQoOnbsiLt375qVH8sbX08Yk9bd53dRckpJkIbw8ZqPpU5HElyHlE8ufVizpjBIEBFhWZwuXYQ4TZuKk5dcjB0r7NecOebHsLcXYjx6JF5eTFpardCnRML/N5anp7DO9u3Wy81UcqlFSsJHzEx8sinPnDlzQEQYNWpUnm137doFIkKXLl1skFn+ERERASLCmjVrrL6tp0+fYt++fZg2bRp69OiB2rVro1ChQjkG3xwcHFCzZk1069YNP/zwA/bs2YPHjx8bvZ3hw4eDiDBv3jzR9+HZs2cgIpQvX97sGFyLlI/7kDHpPEt9htpzaoM0hJ6be4r2agKl4TqkfHLpw6y7fQ4csCzO+PFCnPz29/HPPhP2a8cO82P4+Agxli0TLy8mrWPHzHvsO2sGVonuhzBILrVISfiImYlPNuX58ssvQUTYunVrnm1jYmJARJg+fboNMss/6tWrByLCzZs3RYup1Wpx9epVrF27FiNGjECbNm3g7+9v8O63YsWKoXnz5hg4cCCWLFmCc+fOIT093aLtv//++yAi/PnnnyLt0b+yJhMJCwszOwbXIuXjPmRMGhnaDJSaUgqkIQQvCkZaZsGdaZ3rkPLJoQ+TkoQBApXKtLt9DNm+XYhVpIg4ucmFt7ewX7/+an6M+vWFGL17i5cXk1Z0tNCnFSqYtl7WIG+TJtbJyxxyqEVKw0fMTHyyKU/16tVBRLh//36ebdu1awciwvHjx22QWf6QlpYGR0dHFC1a1Ow7DV68eIEjR45g1qxZ6NOnD+rXrw8XF5ccg292dnaoXLkywsLCMHHiROzYsQP37t0T/Q4HnU4HT09PFC5cWP+op5gmTJgAIsLUqVPNjsG1SPm4DxmTRuT2SJCG4BDtgH8e/yN1OpLiOqR8cujDvXuFAYLKlS2P9eSJEMvBwfJYcuLhIezXgwfmx+jTR4hRr554eTFptWkj9Kmpr3D+6SdhPQNzt0lGDrVIafLVEevWrRscHBzg4uKiX65cuZJr+6SkJISFhcHNzQ3FixdHdHS00dvik01ZkpOTYWdnh9JGzBmt0+ng6+sLe3t7pMrprZkyd/r0aRARWrVqlWdbnU6HuLg4bN68GdHR0ejYsSPKly9v8O43Dw8PBAcHIzIyEvPnz8epU6fw8uVLG+wRcPXqVRARGjVqZJX4H330EYgIhw8fNjsG1yLl4z5kzPaWn1sO0hDcxrth+z8yehmPRLgOKZ8c+nDaNGGAYPx4ceKpVEI8K/xdVBI6nTBTZtGilsVZvlw4LsWLi5MXk1758kKfjh1r2nrXrwvrFSpknbzMIYdapDT56oh169YNAwcONLp9165d0bJlSyQmJuLKlSvw9/fHL7/8YtS6fLIpy8GDB0FE6NixY55t4+PjQUQICgqyQWb5x6xZs0BEGDNmTLafp6am4vTp01iwYAEiIyMRHBwMT09PgwNw5cqVQ4cOHRAVFYVNmzYhLi5O0vf7LFu2DESEAQMGWCW+n58f1Go1UlJSzI7BtUj5uA8Zs62V51fCMdoR6ig1dl/bLXU6ssB1SPnk0IedOwsDBHv2iBPPxUWI99df4sST2v37wv5Y+hUj6y5CnoE1/8g610+eNH3drBlYLfg6ISo51CKlyVdHzJRBuZSUFDg6OuLs2bP6n02ePBnBwcFGrc8nm7JMmTIFRITY2Ng8265fvx5EhL59+9ogs/yjR48eICJERkZi4sSJCAsLQ5UqVaBWq3MMvjk7O6NevXro06cPZs2ahSNHjuD58+dS70IOX3/9NYgIK1asED32vXv3QEQIDAy0KA7XIuXjPmTMdg7fOgyVRgXSEKYdmyZ1OrLBdUj55NCHWQMLSUnixCtVSoi3eLE48aSW9Z680FDLYzk4CLGMeCsPk7mMDPNmXs2S9d/J0aPi52YOOdQipclXR6xbt27w8vKCl5cXqlatipkzZ+ba9syZM7Czs4P2tTN/79698PT0NGpbfLIpy6effgoiwt69e/NsO2zYMBARFi5caIPMlCk9PR3nzp3D0qVLMWjQIP1kCIYWf39/tGnTBiNGjMCaNWtw5coVZGZmSr0LRmnQoAGICP/8I/67hjZv3gwiQq9evSyKw7VI+bgPGbONu0l34RTjBNIQasyqIXU6ssJ1SPmk7sO//hIGBpycxIsZHi7EXL1avJhS+vZbYX9q17Y8lq9v/hqwLMgOHRL60tXVvPW//lpYf+1acfMyl9S1SIny1RH7448/8PDhQ2RmZuLgwYPw8fHB4lwq1cGDB+Hh4ZHtZ2fOnIFarTbYXqPRQKVS6Rc+2ZSlbNmyUKlUSDLiT3dNmzYFEeH8+fM2yEz+njx5gr1792Lq1Kno3r07atasCUdHx1wH4bp3746pU6di7969ePLkidTpmy09PR1OTk7w8vKyyiO0I0aMABFh3rx5FsXhWqR83IeMWV9aRhp8JvmANATvWG+kZvA7Y1/HdUj5pO7D9euFgYE2bcSLOX26EPP778WLKaWsl/l/9JHlsT74QIgVE2N5LCatWbOEvqxh5t+K5s0T1tdoxM3LXFLXIiXK10ds/PjxaN26tcHP+E65guPRo0cgIlQ2YioorVYLd3d3uLi4KOZuLrFkZmbiypUrWL16NYYPH47WrVvDz8/P4MBb8eLF8f7772Pw4MFYtmwZZs6cCSJCp06dpN4N0Zw5cwZEhBYtWlglfosWLUBE+PPPPy2Kw7VI+bgPGbMurVaLoLlBIA3BMcYRt57dkjol2eE6pHxS9+GwYcLAwIIF4sXcvFmIaeFDBbJRo4awP8OGWR4ra7KHwYMtj8WkFRsr9OXUqeatv2ePsH79+uLmZS6pa5ES5esjNnHixFxngsx6p9zrX4inTJmCxo0bGxWbTzbl2LFjB4gI3bp1y7PtpUuXQERGv1tQqZ4/f47Dhw9j5syZ6N27N+rVqwdnZ+ccg29qtRpVq1bFZ599htjYWOzcuRMJCQk54k2aNAlEhEmTJkmwN9Yxd+5cEBFGjhwpemydTgcvLy8ULlwYGRZOKca1SPm4DxmzzI2nN9BgfgO4jHNBoZhCIA0ZXFQaFfbcEOkN9PkM1yHlk7oPQ0KEgYELF8SLuWFD/ppl1MdH2J+VKy2P9eefQqxcvuoyBenaVejL3WbOOxQXJ6zv6ChuXuaSuhYpUb46YqtXr8bz58+h0+lw9OhR+Pr6Yv78+bm279KlC1q3bo1nz57h6tWrKF26NM++mg9FRUWBiPDTTz/l2XbJkiUgIgwaNMgGmVmfTqfDzZs3sWnTJkRFRaFDhw4oW7aswbvfPD09ERISgq+++goLFizA6dOnkZpq3OM9nTp1AhFh//79Vt4j2/nyyy9BRNi8ebPosf/55x8QERo1amRxLK5Fysd9yJj5ph2bBsdoR5CG4DnREx4TPKDSqHIszuOcMf+P3H8nLOi4DimflH2YlvbvbKDmvKg+N1mDDUY+yCR7Tk7C/ly/bnms1FRApQK8vCyPxaRVtqxwXsTHmx/DzU2YhTUtTby8zMXXE9PlqyPWuHFjeHh4wNXVFZUrV8b06dOzfR4aGopx48bp/52UlITOnTvD1dUVxYoVQ1RUlNHb4pNNOdq0aQMiwkkj5piOiIgAEWG1At8o+/LlS5w6dQo///wzIiIi9P89/HfwTaVSoXz58ujYsSNiYmKwZcsW3Lp1y6L3ppUpUwZ2dnZ48eKFiHskrRo1aoCIcO/ePdFjL1++HESEAQMGWByLa5HycR8yZp45p+bo74Jru6ItMrUF67UTYuI6pHxS9uHatcKgQpEi4sd2dxcWK7ze1+bIghk2DcmagdXAQyxMIbJmXlWpLDsvWrQQ4vz9t3i5mYuvJ6bjI2YmPtmUQafToXjx4nBwcMCrV6/ybF+vXj0QEW7evGn95Myk0+lw9+5dbN++HRMmTEDnzp1RuXJl2NnZ5RiAc3FxQYMGDdC3b1/Mnj0bR48eFX3g7OHDhyAiVK1aVdS4UkpOToadnR38/PysEn/AgAEgIqxYscLiWFyLlI/7kDHTZGgzELEtAqQhOEQ7oPeW3lKnpHhch5RPyj78/HNhQMDItwCZpHp1IfbTp+LHtqXbt4X9KFRIvJg1awox9+0TLyazrYsXhT7097cszjffyGemYr6emI6PmJn4ZFOGW7dugYhQp06dPNumpaWhUKFCKFq0qFVm2zRHWloa/vrrLyxZsgQDBw5E8+bNUaxYMYOPn5YuXRpt27bFyJEjsXbtWly9ejXbRCbWsm3bNhARevToYfVt2cqhQ4dAROjQoYNV4jds2BBEhH/++cfiWFyLlI/7kDHjXXtyDSUmlwBpCMUnFceR20ekTilf4DqkfFL2YYUKwoDAmDHix37/fSG20t+Qsm6dsB/FiokXc8QIIebCheLFZLa1ZYvQh70t/NtSdLQQp317cfKyBF9PTMdHzEx8sinD2rVrQUTo379/nm1Pnz4NIsp1chBre/z4Mfbs2YMpU6aga9euCAwMhIODQ47Bt0KFCqF27dro0aMHfvzxR+zfvx9PJfzz4ZgxY0BEmDVrlmQ5iG3KlCkgIkyYMEH02Onp6ShcuDC8vLxEGfzlWqR83IeMGWfb1W1wiHYAaQjesd48i6qIuA4pn5R96OgoDAhcvix+7Kw75YYPFz+2LY0aJeyHmA+WrFghxBw4ULyYzLYmTBD68McfLYszb54Qp1QpcfKyBF9PTMdHzEx8sinDkCFDQERYvHhxnm1nz54NIsIYa/yZ7zWZmZm4dOkSVq1ahe+++w6tWrVCqVKlDN795uvriw8++ABDhgzB8uXL8ffff1s8W6fYWrVqBSLC6dOnpU5FNJ07dwYRYc8e8WfpO3v2LIgILVq0ECUe1yLl4z5kLG9R+6P0748rNaUUHrx4IHVK+QrXIeWTqg+zJmNwcLBO/FathPgdO1onvq106iTsR8uW4sU8dEiI+dZb4sVktlWnjtCH69ZZFifr8Wg5zMDK1xPT8REzE59syvDee++BiHDBiPnZe/ToASLCtm3bRNt+UlISDh06hJ9++gm9evVC3bp1Ubhw4RyDb2q1GtWqVcPnn3+O77//Hrt27cL9+/dFy8NadDodihYtCkdHR6TJYbofkWTNUPvs2TPRY8+bNw9EhJEjR4oSj2uR8nEfMpY7rVaLtiva6gfkghcFI0Mrrz9O5Qdch8yTnp6O8PBweHl5wcvLCxEREbn+8TQkJASOjo5wcXHRL6+/7/ju3bto2bIlnJ2d4e/vj3nz5pmUi1R9OH68dQeGBgwQ4gcFWSe+rbzzjrAfX30lXsykJCGmWi1eTGZbhQsLffjXX5bHUquFWElJlseyhLG1SE71U2p8BTYT//Iif5mZmXBzc4ObmxsyM/Oeka1atWogIjx8+NDkbel0Oty4cQMbN27EmDFj8OGHH+Ktt94yePebl5cX3nvvPXz99ddYtGgRzpw5Y9QkFHJ08+ZNEBHq1asndSqiefz4MYgIlSpVskr8nj17goiwefNmUeJxLVI+7kPGDEtKTUL56eX1A3Lf7PxG6pTyLa5D5hk9ejRq166NhIQE3Lt3D4GBgYiKijLYNiQkBDNmzMg1VnBwMHr27Ink5GQcP34cHh4e2G/Ci9Sk6sMmTYSBgE6drBN//nz5PJZniQYNhP1YvlzcuFmPDt++LW5cZn3p6eLMvJqlaFFx7rqzlLG1SE71U2p8BTYT//IifxcuXAAR4b333suz7YsXL2BnZ4eAgIA826akpODEiROYN28ewsPD8e6778Ld3T3H4JtKpULFihXRqVMnjB07el0KrAAAIABJREFUFlu3bsXt27dlM4mEGFavXg0iQkREhNSpiGbHjh0gInTp0sUq8QMDA0FEuHfvnijxuBbJx+bNmxEYGAhnZ2eUKFECs2fPNmo97kPGcjp//zzcxruBNAR1lBrLz4n8TZZlY2odMrfe5Td+fn7YuHGj/t/r1q1D6dKlDbZ905fKa9euQa1W49GjR/qfRUREoGvXrkbnItW1pFgxYSBg6VLrxD93Tojv7Gyd+LZSt66wHyL9+qdXsqQQV2E3BjEAv/8u9J27uzjxgoKEeJGR4sQzl7G1SE71U2r8TcBM/CVK/hYvXgwiwpAhQ/Jse+DAARAROr32Zz6dToc7d+5g27ZtGD9+PD799FNUqlQJdnZ2OQbgXF1d0bBhQ/Tr1w9z5szBsWPHkJycbM3dk4VBgwaBiLBkyRKpUxFNdHQ0iOiNf40xV0pKCtRqNfz8/ESLybVIHnbs2IFSpUph3759yMzMxNOnT3Hp0iWj1uU+ZCy7ledWQh2lBmkIruNd8dd9EZ7rYW9kSh2ypN7lJ0+fPgUR4ebNm/qf3bhxI9fXX4SEhMDb2xtFihRB7dq1sXbtWv1nGzZsyPGH4YULF6JmzZpG5yPFtUSrFe7yIQJSUqyzjczMf+8mUjIfH+GuNjHuiHpd48bC8enWTdy4zPqGDxf6rkoVceL16CHEa9RInHjmMqYWya1+So2/CZiJv0TJX//+/UFE2f6jzc24ceNARKhWrRq++eYbNG3aFN7e3gYfPw0ICEC7du0watQorF+/HteuXYNW7CusQgQHB4OI8tUv423btgUR4fjx46LHPnz4MIgIHTp0EC0m1yJ5eOeddzB37lyz1uU+ZOxfmn0a/eOq5X4sh2ep4r/bk+VkSh2ypN7lJ7dv3wYRITExUf+zrC+a8fHxOdofO3YMSUlJSE9Px5YtW+Ds7Ix9+/YBAJYsWYLAwMBs7Tds2IBy5crlun2NRgOVSqVfpLiW7N4t7p0+uXFwELbz+LF1t2MtiYlC/r6+4sf+6ishdu3a4sdm1tWihdB3H38sTrwFC4R4JUqIE89cWU+MZS0ajSZHG6nrp9zwNwEz8Zco+atTpw6ICLdu3cr284cPH+K3337D5MmT0aVLF9SoUcPg4FuhQoXwzjvv4Msvv8T06dNx4MCBbIWjoMvMzISLiwvc3d3zzaCkTqeDj48PHBwckJqaKnr8H374AUSECRMmiBaTa5H0kpOToVKpMGnSJLz99tvw8fHBJ598goSEBKPW5z5kDNDqtNkG5Nosb5Nvri1KYGwdsrTe5SdZXyDj4uL0P3vTnR7/1bt3b4SHhwMQvkCWKVMm2+dKuFNuzBhhEKBuXetup0gRYTvbt1t3O9ayc6eQv5eX+LE3bBBie3uLH5tZV5kyQt9NmSJOvHv3rDsTsrFMuVNOLvVTavxNwEz8JUreXr16pX/MdOXKlRg2bBhatmyJkiVLGhyAy1rCw8OxYsUKXLhwIdfZX5jg/PnzICI0bdpU6lREk/VXmyArTfEVFhYGIsKePXtEi8m1SHrx8fEgItSoUQNxcXF48eIFvvjiCzRv3txgeznc3cCYnDx48QCtl7cGaQjuE9yx8dLGvFdiojLmzgbA9HqX3/n5+WHTpk36f69fvx7+/v5Grdu3b1/0798fwL/vRHr82q1gkZGRJr3fVoprSf/+wiCAEQ+lWOTtt4XtjBtn3e1Yy9q1Qv7Nmokf+8ULIbadnfixmXU5OQl99/ff4sXMmoFVyvtITHmnnFzqp9T4m4CZ+EuUvDx79gwHDx7EjBkz8OWXX+Y66GZvb4/q1avjiy++wKRJk/Dbb7/pJ4SoWrWq1LuhKAsXLgQRYdiwYVKnIpp169aBiNCvXz+rxC9XrpzRfwEyFtci6SUmJoKIMH/+fP3Pbt68CZVKZdS7JbkPWUF29t5ZFB5bGKQhvDXtLVx8eFHqlAokY+uQpfUuvxk1ahSCgoKQkJCAhIQE1KpVy+DsgYmJidi+fTtevnyJzMxMbN++HS4uLvjtt9/0bRo3bozevXvrJxTz9PSU/eyrtWsLAwAGnjYTVbNmwna++MK627GWefOE/HOZWNJiWTOwvnbTEZO5tDTrvCsxa+KVVavEjWsKY2uRnOqn1PibgJn4S5Q0tFotrl+/jvXr12P06NFo3749ypQp88a737755hssXrwYZ8+exatXr3LE3LZtG4gI3bt3l2CPlKtv374gIqxfv17qVEQzdOhQEBEWLlwoeuwnT56AiFCpUiVR43ItkofSpUtjwYIF+n9nfUl98eJFnutyH7KC6ujtoyj+fXGQhuA10QvXn16XOqUCy5Q6ZEm9y2/S09PRv39/eHp6wtPTE+Hh4fonLUJDQzHu/2/tevjwIerUqQM3Nze4u7ujZs2aWLlyZbZYd+7cQWhoKJydneHn54d5Jk6naetryaNHwoCCj4/1t9WnjzDQ0LCh9bdlDSNGCPkvXmyd+KVKCfHnzLFOfCa+XbuEPvPwEDdunTpC3P+/iUwSxtYiOdVPqfE3ATPxlyjrS0lJwfHjxzF37lz0798fjRo1gpubW45BN5VKhbfffhuffPIJxo0bh19//RXNmjUDEWG7ES+f0Gg0ICLMmjXLBnuVfwQFBeX6Mk6latKkCYgIf4t5H/n/27VrF4hI9FupuRbJw9ixYxEYGIg7d+7g5cuX6Natm9GPc3EfsoJoxokZcIxxBGkIvbb0QkqalaZuZEYxpQ5ZUu+Y9dj6WjJjhvDlv1Qp62/r55+VPShXq5Z1714KCRHiK+hpvQJv6FChz6pVEzdubKwQd/BgceOagn+vNR0fMTPxySYenU6H+Ph4/Prrrxg3bhw6deqEihUr6t+19Pri5uaGRo0aoX///pg7dy5OnDiBFANzsFeuXBlEhEePHuW5/VatWoGIcOrUKWvsXr6UmpoKe3t7+Pr6QqfTSZ2OKLRaLdzc3ODi4oLMzEzR48fExICIMH36dFHjci2Sh8zMTHz77bfw9vaGt7c3Pv74Y57ogTEDXmW8QtDcIJCGoI5SY84pvrVDDkypQ5bUO2Y9tr6WDBokfPn/7DPrbysuTtjWu+9af1vW4O4u5H/woHXif/ONEF9B77Uv8LIeyf70U3HjnjwpxG3fXty4puDfa03HR8xMfLKZ59WrVzh79iwWLVqEAQMGoEmTJihSpIjBx07LlCmD9u3bY8yYMdiwYQOuX79u1ExsSUlJUKlUeOutt/Jsq9PpUKxYMTg6OiItLU2MXSwQjh8/DiJCu3btpE5FNBcvXgQRISQkxCrx27VrByLC8ePHRY3LtUj5uA9ZQRGXGIeisUVBGoJKo8JPJ36SOiX2/7gOKZ+t+7BDB+HL/6FD1t9WRobwAnsj3wEvO1kv3zdwH4Eojh4V4jdpYp34THwffij02erV4sbNmvijXDlx45qCryem4yNmJj7Z8vbgwQPs3r0bkyZNwhdffIHq1avD3t4+x+Cbk5MT6tSpg549e2LGjBk4ePCgRS/C37t3L4gInxrxp4ebN2+CiFDX2nO55zPTp08HESEmJkbqVETzyy+/gIgwaNAg0WPrdDr4+vrC3t4eqamposbmWqR83IdMyc7dP4dmvzRDqSmlUHJySdhF2eW6kIZAGoJTjBMO3DwgdersNVyHlM+WfajTASVKAPb21hto+q9ixYR32Nlqe2JJTRUGSdRq620jPR1wcBD6hClD9erCeWHEQ10mc3YWYj95In5sY/D1xHR8xMzEJ9u/MjIycOHCBaxYsQJDhw7FBx98AF9fX4N3v5UsWRItW7bEsGHDsHLlSly6dEn0RwVjY2NBRJg8eXKebdesWQMiQkREhKg55HddunQBEWHXrl1SpyKa8PBwEBHWrFkjeuz4+HgQEYKCgkSPzbVI+bgPmVL1+7UfVBoVSEOwj7aHQ7SDfuAttyVgagASXvCjjnLDdUj5bNmHWY/I2fJunKxHQG1xZ56YDh8W8nZ3t+52qlYVtvP4sXW3wyyXkSHMmFu8uHXiFy8unAsbNlgnfl74emI6PmJmKqgnW2JiIg4cOIAff/wR//vf/xAUFAQnJ6ccg28O/8feeUdFdXVtfA8DCAzgIIIkoBgVe1TAWKOoUWKJXRNL7F2IGks01hFjjxpjiRq7xoqxRaOJhVeNvUWNNbFgBFEREREpM8/3x/kGJZRpt8yM57fWrKXDYe9n7rnsc++Zffd2ckKVKlXQrVs3zJkzBwcOHDCqvpsQdOjQAUSEI0YUbhg5ciSICGvWrJFAmf1Qrlw5EBES5foKRgRq1KgBIsKdO3cEt71t2zYQEQYOHCi47bc1FtkTfA45tkZKegp6bO+RvdHWekNrZGmFr8XJkQ4eh2wfKedw+HB20//++5K5RJ06zOeOHdL5FILvv2e6S5YU10+FCszPQl4VwOrZu5fNVWCgOPaHDmX2160Tx74h+HpiOvyImYm9n2xarRa3bt1CdHQ0JkyYgFatWiEwMDDP7LeiRYvio48+wvDhw7FmzRpcvHhR1vpsJUqUgIODA168eGFwbFhYGIgI165dk0CZffDs2TMQEUrLWaxAYNLT0+Hs7AwfHx9RGleMGTMGRISVK1cKbtveY9HbAJ9Dji3x29+/oeyCsiANwX+OP5afWy63JI4A8Dhk+0g5h6Gh7KZfhO8a82XcOOZz9WrpfArBgAHSdI5t2JD56d9fXD8cyxk7VtxN7TVrmP0xY8Sxbwi+npgOP2JmYk8n24sXL3DixAksWbIEgwYNQp06deDu7p5r883BwQHly5fHZ599hmnTpmHPnj148OCBVXXffPjwIYgI7xsR5bKysqBSqeDp6WlUAwkO48CBAyAidO7cWW4pgnHmzBkQEZo3by6K/UaNGoGIcPnyZcFt21Mselvhc8ixBbRaLTps6fA6O25jazxJ5c9J2Qs8Dtk+Us6hhwe76T9wQDKXWLaM+Zw8WTqfQqDvstm1q7h+Nm5kfr74Qlw/HMuZPJnN1ezZ4tg/e5bZb9RIHPuG4OuJ6fAjZia2eLLpdDrExsZi9+7dmDJlCjp06ICgoCAoFIpcG3Cenp748MMPERERgR9//BGnT59Gqg1UVt29ezeICL179zY49sqVKyAiNJIrYtko06dPBxFh7ty5cksRjEWLFoGIoNFoBLet1Wrh6ekJlUoleP1EwDZjEScnfA451s7NJzfh961f9oZc5+jOVvWFHMdyeByyfaSaQ313R4UCkPI77XXrpMk4E5py5Zjub74R18+1a/JuxHCM59NP2VwZUWnJLBITmX1HR3HsG4KvJ6bDj5iZWPvJ9urVK5w7dw4rV67E0KFD0aBBA3h5eeX5+GmpUqXQtm1baDQabN++Hbdv37bZi+2JEyeCiLBkyRKDY1euXAkiwujRoyVQZj+0bdsWRIRjx47JLUUwevbsCSLCnj17BLd97do1EBHq168vuG3A+mMRxzB8DjnWzIJTC6CcrARpCE5RTth4eaPckjgiwOOQ7SPVHOofjfPxkcRdNvo6XEWKSOvXUooUYbpFuMTMQWYm68Bqa8fnbUS/UStmaW5HR+bj0SPxfOQHX09Mhx8xM7Gmky0hIQH79+/HrFmz0LVrV1SuXBlKpTLX5purqytq1KiBfv36YeHChTh69CiSk5Plli8oTZs2BRHh3LlzBscOGjQIRIRt27ZJoMx+CAgIgFKptInMSWOpWLEiiAiPRFi51q5dCyLCyJEjBbcNWFcs4pgHn0OONZKemY5GqxtlZ8eVnl+ad021Y3gcsn2kmsMOHeTJyNJn/zg5SevXUpycmG4p+t25uDBfN26I74tjHqmpbI6USnH9FCvG/KxdK66fvODrienwI2Ym1nKy6R+7++/L398fzZs3x9dff43Nmzfj+vXrojw6Z03odDp4e3ujUKFCyMjIMDg+NDQURITY2FgJ1NkHcXFxICJUrVpVbimC8fz5cygUCpQUqS1WZGQkiAibN2/Ofi+vRiohISFGdQz+L9YSizjmw+eQY22cizsH9Qx19obcgF0D5JbEERkeh2wfqeawZEl2sz99uiTucuDgwHxnZkrv2xy02teP+kpBiRLM3/z50vjjmM6uXWyOvLzE9VOrFvPTr5+4fvKCryemw4+YmVjLyVa7dm0QEbp06YK5c+fi4MGDePLk7Sy8/M8//4CIUKtWLYNj09LS4OTkBD8/P5t9VFcOdu7cCSJC37595ZYiGIcPHwYRoWPHjqLYr1y5MogIY8aMwcCBA1G7du08G6kQEWbMmGGyfWuJRRzz4XPIsSYmHZoEhUYB0hBcv3HFvlv75JbEkQAeh2wfqeZQn/l1754k7nKgUjHfFy5I79sc4uOZ3nLlpPGnbyrx2WfS+OOYzvDhbI7Ezm8YOJD5qVFDXD95wdcT07GrI/bq1Sv07dsXJUuWhLu7O8qVK4cVK1bkOz4sLAzOzs5QqVTZr1evXhnlyxpOtufPn0OpVOKdd97hG0sANm3aBCLCkCFDDI49efIkiAgtW7aUQJn9MH78eBARli1bJrcUwZg1axaICLMtbIGkb6Sya9eu7EYqJUuWzHPz7b+NVOrXrw8iwm+//WayX2uIRRzL4HPIsQbSs9JR88ea2dlxwUuCkZxmXyUuOPnD45DtI8Uc6psJFCokuqs8CQhg/n/8UR7/pnLqFNPbvr00/kaPZv4qV5bGH8d0wsKk6ca7YQPz4+srrp+84OuJ6djVEXvx4gUmTJiAv//+GzqdDidOnIBarcbvv/+e5/iwsDAsWLDALF/WcLLt2bMHRITPP/9cbilWwfDhw0FEWLduncGxCxYsABFhypQpEiizH8LDw0FEuGArX1EaQYcOHUBEiImJMfp30tLSjG6kon8V1EilbNmyICI8ffrUZP3WEIs4lsHnkCM3txJvIXRpKEhDUGgUGH9wvNySOBLD45DtI8UcTpzIbvSDgkR3lSfVqzP/Rnz/bhVs2cL0Dh8ujb/9+5m/woWl8ccxHf3G8uLF4vqRswMrX09Mx+6PmL6raF7Y+qacfhNq5cqVckuxCurVqwciwg0jqpt269YNRIR9+/hjOcai0+ng5eUFV1dXo2r22QqBgYFwcHBASkpKnj9/+PBhjkYqlSpVMrqRyowZM0BEmDRpUr7+k5KSQEQIMvMK1xpiEccy+Bxy5GTCoQlQTVWBNIR6K+vh0sNLckviyACPQ7aPFHNYrx670e/WTXRXeaJvMtGsmTz+TaVtW2nreqWnS1vDjmM6zs5sju7eFd+X/lHzeIl7NPH1xHTs+oilpaXB398f0dHRef48LCwM3t7eKFKkCEJCQrB161ajbVvDyVatWjUQEe5K8Vdt5WRmZsLNzQ2FCxeGVqs1OL58+fIgIiSK2Yvazrh16xaICHXq1JFbimAkJCSAiFCpUiVkZmbiypUrWL9+PUaNGoXw8HAUK1aswEYqY8eOLbCRSq9evUBE2LNnT74afv/9dxARupqZx24NsYhjGXwOOXLwIv0FqvxQJTs7TnNYgyytfTeE4uQPj0O2jxRzqK9ZZsLDBYIyfrxtPZ5ZtSrT+/XX0vnUd2D96y/pfArF6tVAqVJAhQpAly7s1bo1EBgIBAe/fi88nG0QG3HLZ1WkpLC5cXCQxp+fH/O3erU0/vTw9cR07PaI6XQ6dO3aFQ0aNMh3k+bEiRNITk5GRkYGdu3aBTc3Nxw+fDjPsRqNBgqFIvsl98n2+PFjEBFKly4tqw5r4dKlSyAiNG7c2ODYZ8+e8WNnBhs2bAARYdiwYXJLsZinT5/i8OHDaNKkSfZGW6FChXJtvjk5OaFatWro0aOHWY1UKlWqBCLCo0eP8h0zbdo0EBG+++47sz6L3LGIYzl8DjlSczH+IsotKAfSEJSTlZh/krfqe9vhccj2EXsOs7IADw/A3Z39Ww62bpWvTpY5tGjB9J44IZ1PfXfcuXOl8ykURYow7ca+li+XW7FpbN/OdBcpIo2/OnWYvz59pPGnh68npmOXR0yn02HAgAGoXr06nj17ZvTv9e/fHxEREUaNlftk27p1K4gI/eToc2yFLF++HESEr434KurgwYMgInTu3FkCZfbDsGHDQET46aef5JZiNFqtFjdv3sTWrVsxfvx4tGzZEsWLF88z+83HxweNGzfGiBEjsHbtWvz5559IT0832/fz58+hUChQsmTJAse1adMGRITjx4+b5UfuWMSxHD6HHKnQarXo/nN3OEc5gzSElhtaIv65xM+1cKwSHodsH7Hn8OxZdoPfsKGobgrk3j15G02YyvvvM71mlAw2m/Bw5rNjR+l8CsHjx68fvV21Cjh+nL0OHgSWLmWNC/TvhYba1mPMeoYOZbqDg6XxN3gw81e9ujT+9PD1xHTs7ojpdDoMGjQIwcHBJhdNHzhwIAYPHmzUWLlPtkGDBoGIsGnTJll1WAsDBgwAEWH79u0Gx06fPh1EhLm2+BWSjNStWxdEhFu3bsktJU9SUlJw/PhxLF68GAMGDECtWrWgUqlybb45ODigQoUK6NSpU/Z7u3fvFryDcUxMDIgIHQ1cFfn7+8PR0REvX740y4/csYhjOXwOOZbw6MUjxNyJwY/nfizwteDUArzz7TsgDcFhsgPmn5zPO7dzsuFxyPYRew579GA3+B9/LKobg+izpGzh0UUPD/aSMtR+/TU7PhUrSudTCL75hukuUcLw2B9/ZGN9fMTXJST6mozdu0vjb9s25q9SJWn86eHrienY3REbPHgwqlSpYvARs6SkJOzduxcvX75EVlYW9u7dC5VKlW+n1v8i98mm79aYkJAgqw5rITg4GESEf//91+DYdu3agYhw7NgxCZTZB5mZmXB1dYWXl5fsN3E6nQ53797Fzp07ERUVhfbt26NMmTLZj5W/+SpcuDDq16+PL774AsuXL8eZM2eyN790Oh28vb3h7OxsUUZcfsyePRtEhNmzZ+c75sGDByAiBFvwlZncsYhjOXwOOeZy6t9TcJvqBtKQ0S+nKCesv7RebukcK4PHIdtH7DmsVYvd4I8dK6obg+gfz7T2stB37zKdbm7S+j1wgPn19JTWr6Xos9969TI8NjX19easCJfwouHvzzQvXSqNv7Q0Vr/OmI1OIeHrienY1RG7e/dudm0olUqV/RowYAAAoGnTppg6dSoA4NGjR/jggw/g4eEBT09PVKtWDRs3bjTal5wn2/3790FEeP/992XTYE28fPkSjo6OePfdd40aHxAQAKVSidTUVJGV2Q8XL14EESE8PFxSv2lpaTh79ixWrFiBIUOGICwsDGq1Os/HT0uXLo127dph8uTJ2LFjB+7cuVPgBuLt27dBRKhZs6Yo2jt27AgiQkwB1ZB37NgBIkL//v3N9sMXPtuHzyHHHM4+OItis4uBNITGaxojcF6gwVfD1Q3xIPmB3NI5VgiPQ7aP2HNYuTLbUHggcwhp2ZLpuHBBXh2G2LxZnvp36elsI8bVVdoMPUspVIgdr1OnjBuvrz+3bp24uoTEy4tpvndPOp9lyzKfz59L55OvJ6bDj5iZyHmyrVmzBkSEoUOHyqbBmjh+/DiICK1btzY4Ni4uDkSEKlWqSKDMfli2bBmICOPGjRPNR3x8PPbt24cZM2agc+fOqFixIpRKZa7NNzc3N9SsWRP9+/fHokWL8Mcff+C5GSvNpk2bQESIjIwU4dMAJUuWhIODA1JSUvIdM3bsWBARlltQqZYvfLYPn0OOqcSnxMP1G1eQhtBze0/ZM5g5tg+PQ7aPmHOYnMxqfb33nmgujCYykm0y7Nght5KCGTtWvk6xwcHM98OH0vs2h3PnmF5nZ+N/p3Fj9jutWomnS0hevQKUSiAgQFq/+o7J27ZJ55OvJ6bDj5iZyHmy9ejRA0SEnTt3yqbBmpg/fz6IKDsLsiB27twJIkLfvn0lUGY/9OvXT7BzLiMjA5cuXcK6deswcuRINGnSBL6+vnlmvxUvXhyffPIJxo0bhy1btuDGjRvIEqjl14gRI0BEWLt2rSD23uTRo0cgIlQyUMRB3/31zz//NNuXsbEoIyMDERER8PLygpeXFyIjI5GZmZnv+B9//BFly5aFm5sbAgMDscPar35tGH7xwjEFrU6L5j81B2kIRWYWQWo6z/rmWA6PQ7aPmHO4fr31NA/o04dp6dpVbiUF074909m8ufS+P/+c+T54UHrf5tC3L9NbrZrxv7NoEfsdPz/xdAnJpUvy1GT88EPmt2dP6Xzy9cR0+BEzE7lONp1Oh+LFi8PBwcGkzrL2TNeuXUFE+O233wyOHT9+PIgIS6V6mN9OqFq1KogIcXFxJv1eYmIiDh06hHnz5qFnz54IDg6Gs7Nzrs03Z2dnBAcHo2fPnpg3bx4OHTqERJGLhdSrVw9EhGvXrglue8+ePSAi9CqgMIZOp4NarYabm1uBm2OGMDYWTZw4ESEhIYiPj0dcXByqVq2KyZMn5zl26dKlKF++PM6fPw+dToeHDx/in3/+MVsjp2D4xQvHFMb8PgakIQR9H4S7SXfllsOxE3gcsn3EnEN9VlK7dqK5MJovv2RaQkLkVlIw+hppw4ZJ73v0aOZ7yBDpfZtDYCDTO2mS8b+TnPy6W6sFl9GSMWsW0/v/VbUkY/Jk5rdbN+l88vXEdPgRMxO5TrabN2+CiFCjRg1Z/Fsj+qYXxnTbDQ8PBxHhgrUXorAiUlNToVQqEVBAvnVWVhZu3LiBLVu2YNy4cWjRogUCAgLyzH7z9fVFkyZNMHLkSKxbtw6XL19GRkaGhJ+INa5wc3ODp6cntCK075o0aRKICIsXL853jP5v+cMPP7TIl7GxKCAgIEd34ujoaJTIo/JrVlYWihUrhv3791uki2M8/OKFYyxD9g4BaQheM7xw88lNueVw7Ageh2wfMeewWDF2Y79ypWgujObgQaalTRu5lRSMvqi/BRVKzGb8eOa7QgXpfZtKZibbWDPncVu1mv3e5s3iaBMSOTLWAHky9PjUoiAqAAAgAElEQVR6Yjr8iJmJXCfbkiVLQET4+uuvZfFvbSQlJYGIEBQUZHCsTqeDl5cXXFxcJN8EsmWOHTsGIkLbtm0BAM+fP8exY8ewaNEi9O/fHzVr1oSbm1uuzTelUomKFSuiS5cumDlzJvbt24f4+HiZPw3j0qVLICI0atRIFPvNmzcHEeHs2bP5jlm/fj2ICMOHD7fIlzGx6OnTpyAi3LlzJ/s9faOL/2bc/vXXXyAiLFy4ECVLloS/vz/69+9vVt0+jnHwixeOMSw6vSi7g+q+W/vklsOxM3gcsn3EmkOt9vWmSQFlciXj4UOmJTRUbiUFo1IxnRZUKDGbEyfkq2dnKps2Ma1qtem/26CB9WRwGqJ2babVhL6SgiBHLTu+npgOP2JmItfJ9umnn4KI8Pvvv8vi39r4/fffQUToakRhiVu3boGIUKdOHQmU2T46nQ537txBgwYNsjfaSpcunWf2m1qtRlhYGIYMGYIVK1bg7NmzSEtLk/sj5MuKFStARBgzZozgtnU6HYoWLQpnZ2ekF9CnfejQoSAik7o+5wURQaFQZL80Gk2uMbGxsSAiJCUlZb+n36i7f/9+jrFHjx4FEaFx48Z4/PgxHj9+jI8++ojXYRQRfvHCMUTMnRgoNAqQhtD95+5yy+HYITwO2T5izeHhw2wzwd1dFPMmo9MBLi6At7fcSgpGv5Epx6OVWi3g5sa6fVp7H6ApU9hxKqDiS77Mm8d+199feF1CI0cXVD1+ftJ2feXrienwI2YmcpxsOp0OPj4+cHZ2RmoqL+wMAFOnTgUR4bvvvjM4dsOGDeBda/Pm5cuXOHPmDJYvX44vvvgC9erVQ+HChfPcgCtTpgzat2+PqKgo7Ny5E/fu3bO5zn8DBgwAEWGbCK2I7ty5AyJCzZo1CxxXu3ZtEJHFtdpMyZS7e/d1/an8MuUuXLgAIsKBAwey3zt8+DB8fHws0snJH37xwimI+8n3UWhKIZCGELLUyosocWwWHodsH7HmcPBgdkMfHCyKebNwc2OaEhLkVpI3iYlMn5OTfBr0Ne1MLActOfruoAU8XJIviYmAg4P1bz6mpTGdeVSNkQT9o9RSlVTn64np8CNmJnKcbH///TfP9PoPbdq0ARHh+PHjBsd++eWXICL89NNPEiizTnQ6HeLi4rB3715Mnz4dnTp1QoUKFeDg4JBr802lUqFWrVrZ///111+RYg3PLQhASEhInlliQrB582YQESIjI/Mdk5GRARcXF3h7e1u8oWlKTbk3O6hu27YNxYsXzzXu5cuXcHFxwcE3WnbxTTlx4RcvnPxIy0yDzywfkIbgO8sX6Zn5Z99yOJbA45DtI9YcVqlifU0DihRhmnbvlltJ3uzdy/QVKSKfhoYNmYbvv5dPgyFSUtjGpbc3y+4zh7p12ee8fl1YbUKyaxfTWL26PP7r12f+u0uUaM/XE9PhR8xM5DjZ9Jlew+Ro42OlvPvuu3B0dMTLly8Njq1bty6ICDdvvh3FsTMyMvDnn39i7dq1GDFiBBo3bgwfH588s99KlCiBli1bYvz48di6dStu3rwJrVaLxMREEBHKlSsn98cRjLS0NDg6OsLPz0+UDL+RI0eCiLBmzZp8x5w/fx5EhI8FqLpqbCyaMGECQkNDER8fj/j4eAQHB+fbfbVv375o0qQJnj59iqSkJISHh/PHV0WEX7xw8qPakmogDaHQlEK4nyz8lwgcjh4eh8wjIyMDERER8PLygpeXFyIjI/PsqJ6QkIAuXbrA398fHh4eqFatGnbu3JljTGBgIFxcXKBSqaBSqVCqVCmTtIg1h/raaMeOiWLeLMqVY5qmTJFbSd5Mm8b0lS0rn4ZmzZiG/y8JbZXoH1394APzbXz9tbRZYOagzzaVa1Nu2DBps12NjUXWFD/lhq/AZiLHxQvP9MrJv//+CyJCsBERJjMzE66urlCr1Tb3qKUxPHnyBAcPHsTcuXPRo0cPVKtWDU5OTrk23woVKoSQkBD06tUL3333HQ4fPozExMR87e7fvx9EhG5S9tEWmRMnToCI0KpVK1Hs169fH0SEa9eu5Ttm6dKlICJMmDDBYn+mLHyDBw+GWq2GWq1GRERE9sLXtGlTTJ06NXvsixcv0LNnTxQuXBi+vr7o27cvb/QgIvxmmJMXXaK7gDQEhUaBo/eOyi2HY+fwOGQeEydOREhICOLj4xEXF4eqVavm+YXXP//8g9mzZ+P+/fvQarXYtWsX3NzcclwrBAYGYrcFqV9izOHTp+xm3sHB/EwmMdA/8tili9xK8iYykulr0kQ+DZMmMQ3ly8unwRD6DC5z6snpWb2a2TCi559s1KnDNPbpI4//HTukzdw0NhZZU/yUG74Cm4kcFy/6TK9bt25J7tsa2b59O4gI/fv3Nzj24sWLICI0kXN1FICsrCxcv34dmzZtwtdff43mzZvD398/z+y3YsWKITw8HKNGjcJPP/2EK1eumNx1dsqUKSAifG/Nue8m8v3334OIMEWEr1ezsrKgUqng6ekJbQFXr3369AERYdeuXRb75DdStg+fQ85/+faPb7M7rf5w+ge55XDeAngcMo+AgABs3749+//R0dEoYWThqODgYKxevTr7/9a4Kbd0KbuZf+cdwU1bxMCBTFft2nIryZtx45i+Ah6aEJ2jR5kGDw/5NBiicmWmsYDvsQ1y/z6z4ehovXXl9I0W3vhzl5SUlNeb61JgSmkda4mfcsNXYDOR+uJFn+nl5eVll5le5jB27FgQEZYvX25w7I8//ggiwrhx4yRQJgzJyck4evQoFi5ciH79+qFGjRpwdXXNtfmmVCpRuXJldO3aFbNmzcL+/fvx8OFDQTS0atUKRISTJ08KYs8a+Pzzz0FE2L9/v+C2L1++DCJCo0aNChxXpUoVEBHi4+Mt9slvpGwfPoecN9l3a192p9WBuwfKLYfzlsDjkOnomyjduXMn+738mij9l4SEBLi4uODMmTPZ7wUGBsLX1xfe3t6oW7cuDh06ZJIeMeawVSt2M9+0qeCmLWLBAqYrMFBuJXnz+edMX0yMfBoyM5kGIuvKctTz4AHTVrGi5bYqVGC23vhTtCqcnJg+AS77zaZQIabhjZ5vomFKEzpriZ9yw1dgM5H64kWf6RUeHi6pX2umcePGICL8+eefBsf269cPRJSj0L21oNPpcPv2bWzfvh0ajQZt27ZFqVKl8sx+8/LyQoMGDTB06FCsXLkS586dQ1pammi6/Pz84OjoKJoPOShXrhyIqMDHds1l5cqVICKMHj063zEvXryAg4NDnk0WzIHfSNk+fA45ehJfJsJ9qjtIQ6iznDd14kgHj0OmExsbCyJCUlJS9nv6G82CGkm9evUKDRs2RPf/VF0/cuQIUlNTkZaWhuXLl8PNzQ3XC6her9FooFAosl9izGFAALuR/+47wU1bxPHj1p0FVq0a0/fPP/Lq0NcDfGPvwmqYMYNpE6JU+pdfyp+ZmB/6TryOjvLq0P8tL14svi8iyhGbNBpNrjFyx09rg6/AZiL1xYstZnqJiVarhVqthpubW54FIf9LtWrVQESIk7kv+MuXL3H69GksW7YMERER+PDDD+Hp6Zlr802hUCAoKAgdOnTAlClTsGvXLsTGxkqaJXn//n0QEUJCQiTzKTZJSUkgIpQpU0YU+wMHDgQRYdu2bfmOOXr0KIgI7du3F8Qnv5GyffgccgAgIysDjdY0AmkIlRdXRqbW8NrG4QgFj0Omo7+BvPtG6omhTI/09HS0bNkSLVq0QHp6wd2Uw8PDMXv2bKP1iDGHPj7sRl6gBzAEIy2N6VIq5VaSN0ol02dEHzpRKVOG6Zg2TV4deREYKJw2fc20zz6z3JbQbNjAtPn6yqujQQOmo2tX8X2ZkilnLfFTbvgKbCZSX7zoM73+22nkbeXGjRsgInz44YcGx6ampkKpVMLf318CZQydTod///0Xe/bswbRp0/DZZ5+hfPnycHBwyLUBp1KpUKdOHQwaNAhLlizBiRMnkJKSIpnW/Ni2bRuICAMH2s/jUwcOHAARoXPnzqLYDw0NBREhNjY23zFz584FEWHGjBmC+OQ3UrYPn0OOVqtF7x29QRpCyNIQvEh/IbckzlsGj0PmERAQkOMpjG3btuWbCZ+eno5WrVrh448/xqtXrwzabtq0KWbNmmW0FqHnUP94YbVqgpoVDP3GV2qq3Epykp7OdLm6yq0EaNGCaWndWm4lOcnMBBQKpi0hwXJ79+4xW05OltsSGn39wxo15NUxfDjTUbWq+L5MqSlnLfFTbvgKbCZSX7xYS6aXtbB+/XoQEYYPH25w7B9//AEiQlsJeoLHx8ejTZs2KFq0aJ6PnwYGBqJVq1aYMGECoqOjcevWrQIbAsjJmDFjQERYsWKF3FIEY9q0aSAizJs3T3DbaWlpcHR0hJ+fX4EZjZ06dQIRCVbrgN9I2T58DjltNrYBaQg+s3zwb/K/csvhvIXwOGQeEyZMQGhoKOLj4xEfH4/g4OA8uwdmZGSgdevW+Oijj/IsCXLv3j0cOXIE6enpyMjIwOrVq+Hq6oq//vrLaC1Cz+HPP7Ob+AEDBDUrGIULM33/+5/cSnJy5w7TZUTegOhMnsy0lC0rt5Kc6LPH1GrhbOprpl24IJxNIahVi+nq109eHbt3Mx1eXuL7MjYWWVP8lBu+ApuJlBcv+kyvgIAAyXxaO0OGDAERYePGjQbHzps3D0SEaSLnbj979gxVq1YFEaFQoUIIDQ1F7969MX/+fMTExODp06ei+heaRo0agYhw+fJluaUIRtu2bUFEOHbsmOC2T548CSJCy5YtCxxXunRpKBQKJCcnC+KX30jZPnwO32723NiT3Wl1zUUrLIjDeSvgccg8MjIyMHjwYKjVaqjVakRERGSXVWnatCmmTp0KAIiJiQERwcXFBSqVKvul//lff/2FqlWrQqVSQa1Wo3bt2vjtt99M0iL0HDZqxG7ip08X1KxglCrF9InwPatFxMRI95igIfS199zd5VaSk6ZNma6PPxbOpr6T69ChwtkUgmLFmK516+TVkZoqXQdWY2ORNcVPueErsJlIefEiZaaXrVC7dm0QEf4xooJqly5dQEQ4cOCAaHrS0tLQoEEDEBEaN25sVFqtNaPVauHp6QmVSoWsrCy55QiGv78/lEolUkV41uH7778HEWHKlCn5jnny5AmICBUqVBDML7+Rsn34HL69XEm4Ao9pHiAN4ds/vpVbDucthsch20foOdRnou3ZI6hZwfjwQ+vchJkyhekaNEhuJazrKllhB1YvL6Zp/XrhbA4ZwmxWriycTSFwdGS6Hj+WWwlQsiTTIkKvuxzw9cR0+BEzEylPNn2m13Rr/apKYjIyMuDi4gJvb2+jGh+UKVMmV3cXoRk+fDiICKGhoXj+/LlofqTi2rVrICLUr19fbimC8eDBAxARqopUTKFbt24gIuzbty/fMfv27QMR5eoYZAl84bN9+By+nVx9dBX+c/xBGkJUTJTccjhvOTwO2T5CzmFmJuDiwrp3GtFPTRaWLmUbDHk87SYr+gxDa8iUA153YD15Um4ljMePmR6FQthz69w5ZrdQIeFsWor+s8rdeVXPZ58xPUeOiOuHryemw4+YmUh5skmR6WVLnD9/HkSEpk2bGhybmJgIIkK5cuVE1VS2bFkQEf791z5qAa1duxZEhBEjRsgtRTB27NgBIkI/kYo6lCtXDkSExAK+foqKigIRYeHChYL55Quf7cPn8O0jOS05O0MufF24pJ21OZy84HHI9hFyDs+fF/7xQqH57TemsXdvuZXkpGxZpuubb+RWwmjTxroyHvWZhCVKCG/byYnZvnlTeNvmcPIk01OrltxKGFFRTM/ixeL64euJ6fAjZiZSnmz6TK/82gO/bSxduhREhAkTJhgcu3//fhARPv/8c9H0JCUlgYhQpkwZ0XxITWRkJIgImzdvlluKYIwbNw5EhGXLlglu+9mzZyAilC5dusBxLVu2BBHh1KlTgvnmC5/tw+fw7UKr1aLU/FIgDUE1VYXEVJGfI+FwjIDHIdtHyDlcsIDdvE+aJJhJwbl+nWmsXVtuJTkpUoTp2rtXbiWMOXOYnm+tpEJCSIh4m6lBQcz2118Lb9sc1qxhesaMkVsJY/p0aTqw8vXEdPgRMxOpTjapMr1siT59+oCIsGvXLoNjv/nmGxARvv/+e9H0/P777yAidOnSRTQfUlOzZk0QEW7fvi23FMFo0qQJiAgXL14U3PaBAwdAROjcuXO+Y3Q6HYoVKwYnJydBaw7yhc/24XP4dtF0XVOQhqCcrMSfD/+UWw6HA4DHIXtAyDksXZrdvC9aJJhJwUlKYhqdnORWkhN9ttaTJ3IrYezbx/T07Cm3Eoa+S+rp08Lb7tuX2Q4NFd62OXz1lXU0edCzdy/T4+srrh++npgOP2JmItXJps/06tatmyT+bIEqVaqAiBAfH29wbKtWrUBEOHHihGh6pk2bBiLCPGtr/2Qm6enpcHZ2RtGiRe3mkSqdTge1Wg1XV9fsrj5CMn36dBAR5s6dm++Y2NhYEBGqV68uqG++8Nk+fA7fHsb8Pia70+qWK1vklsPhZMPjkO0j5BzqN5b+/lswk6Lg7My6SVpLE4OsrNf10qyFy5etpwPrmTPi1n373/+YfTc3ceybyrvvMj2//iq3EkZ6Ovvb5pty1gc/YmYi1ckmRaaXLfHixQs4ODigePHiBsfqdDr4+fnB0dERaWlpomlq06YNiAh//PGHaD6k5OzZsyAiNGvWTG4pgnHz5k0QEerWrSuK/Xbt2oGIcOzYsXzHREdHg4gwePBgQX3zhc/24XP4drDh0obsDbmxB8fKLYfDyQGPQ7aPUHP4999sI8HZWRBzolKjBtP64IHcShiXLjE9KpXcSl6j78BqDZuXffowLcHB4tjXagGlkvmwhjLf+s1tsbudmkKVKuJ3g+XrienwI2YmUp1s+kyvk9bSMkdmjh49CiJC+/btDY69f/8+iAghISGiavL394dSqURqaqqofqRi8eLFICJMsuZCIiby008/gYgwbNgwUewHBAQYPAdGjx4NIsKqVasE9c0XPtuHz6H9cyHuApSTlSANofn65nLL4XByweOQ7SPUHOoL8Rsok2sVdOzItB4/LrcSxvLlTI+/v9xKcqLfvLx7V14dLVsyHWI+XFSypHU02khJYToCA+XV8V86dWK6du8WzwdfT0yHHzEzkeJkkyrTy5aYM2cOiAgzZswwOPbnn38GEWHgwIGi6Xnw4AGICNWqVRPNh9T06tULRIRffvlFbimCMXToUBARNmzYILjtuLg4EBGqGqia2rBhQxAR/vrrL0H984XP9uFzaN8kpiZCNVUF0hCCvg+CVu5UBQ4nD3gcsn2EmsOwMHbT3qmTIOZEZcAAprWA6iGSMmyYddU006OvtSZnB1atFvDxYRmYL16I56d/f+voynv6NNPRurW8Ov7Lxx8zXZ99Jp4Pvp6YDj9iZiLFySZVppct0alTJxARDh06ZHDsmDFjQERYsWKFaHp27NgBIkK/fv1E8yE1lSpVAhEhISFBbimCUadOHRARbt26JbjtnTt3gojQt2/ffMdotVp4eHjA3d0dWVlZgvrnC5/tw+fQftFqtSg+tzhIQ/Cc7omU9BS5JXE4ecLjkO0j1Bx6e7ObdhG+xxScDh2YVmupuNK8OdNjxAM9kjJ3rvxdSc+fZxoaNRLXz7VrzM+HH4rrxxCLFjEdY62sWsWYMUxX5cri+eDrienY3RHLyMhAREQEvLy84OXlhcjIyHwLuycnJ6Nz587w8PCAr68voqKijPYjxckmRaaXrVGqVCkoFAokJycbHPvRRx+BiHD58mXR9IwdOxZEhGXLlonmQ0qeP38OhUKBQGvLtbaAjIwMuLi4wMvLS5TGFePHjzd4Dly9ehVEhAYNGgjuny98tg+fQ/ul1cZWIA3BMcoR1x9fl1sOh5MvPA7ZPkLMYWYma1JABNjCQzrjxzOtlSrJrYTx/vvWuREzc6b8jyS3aME0CFxaORc63euMvJcvxfVVENWrs887fLh8GvLit9+YrsKFxfPB1xPTsbsjNnHiRISEhCA+Ph5xcXGoWrUqJk+enOfY7t27o1mzZkhKSsKNGzdQvHhxrFmzxig/UpxsUmR62RJPnjwBEaFChQoGx2q1Wnh6ekKlUgmemfQmTZo0ARHh4sWLovmQkpiYGBAROnbsKLcUwbhw4QKICOHh4aLYDw8PBxHhwoUL+Y5Zs2YNiAijRo0S3D9f+GwfPof2ycbLG0EagvMUZ+y8vlNuORxOgfA4ZPsIMYd794p/wy4kW7cyvT4+cith+PoyPZs3y60kJ+fOyd+VtGhRpuGnn8T31aAB87Vkifi+8kP/ea3tXEhPF79DMF9PTMfujlhAQAC2b9+e/f/o6GiUKFEi17jU1FQ4OzvnuJH+9ttvUb9+faP8SHGySZHpZUv8+uuvICJ0797d4Njr16+DiFCvXj3R9Oh0OqjVari6uuabjWlrzJ49G0SEWbNmyS1FMJYuXQoiwrhx4wS3rdPp4OXlBVdXV2RkZOQ7LiIiAkSErVu3Cq6BL3y2D59D++Pk/ZNw+cYFDpMdsO/WPrnlcDgG4XHI9hFiDvXdMWvUEECQBNy7x/QWKiS3Ekbx4kzPvXtyK8mJVvs6A1KOW5YXL1gnUrVaGv/t2rHP2rCh+L7yQ98FNilJPg354erKtF25Io59vp6YjkVHbOnSpULpEISnT5+CiHDnzp3s927fvg0iwrNnz3KMPX/+PBwcHHIUXD506BDUarVRvsQ+2aTK9LIloqKiQERYuHChwbFr164FEWHEiBGi6bl58yaICHXr1hXNh9R07NgRRISYmBi5pQhG3759QUTYuVP4TJVbt26BiFCnTp0Cx9WoUQNEhLsitL3iC5/tw+fQdnmQ/ADH7h3DyfsncTfpLu4m3cXWv7bCMcoRpCEsOLVAbokcjlGIFYe6d++O2NhYUWxzciLEHFasyG7Wv/pKAEESod9ssoYeOp6e7GWNeHiw4yTHJb4+A7NzZ2n87dkjb125Bw+YfycnefwbQt+hds4ccezb03Xtrl27JPFj0RHz8PAQSocgxMbGgoiQ9MaWtH6j7v79+znGHjlyBIX/k5t9/vx5KJXKPG1rNBooFIrsl9gnmz7Ty9jMvbeBTz75BESEU6dOGRz7xRdfgIiwadMm0fQ8ePAAUVFRWL58uWg+pKZkyZJQKBR4/vy53FIEo0qVKiAixMXFCW57w4YNICIMGzYs3zHp6elwdnaGr6+vKDXt7Gnhk4OuXbvi+nV5a33xObRNjt07BtJQvq/3F78vyt88hyMGYsUhhUKB9957L98vpU6fPi2ov7CwMBw7dizX+2m2UCDNQoSYQxcXdrN+7pwAgiRCr/mff+TVkZTEdLz/vrw68qN8eaZvwgTpfffsyXyvWiWNv6ws9gi2qyt7XFNqli9nn/edd6T3bQzh4Uxfhw7i2Len61ovLy8sWJD/F6xJAqVCWnTE3N3d83z/559/tsSs2eg34N5c+G01U06KTC9bQqfToVixYnBycsKrV68Mjq9ZsyaICLdv35ZAnX3w6NEjEBEqWUu1XAF48eIFlEolAgICRLE/bNgwEBF+KqBAxv79+0FEaNOmjSga7GnhkwNHR0e89957uTrzfiVhmgCfQ9vknW/fAWkILt+4oNjsYmi4umH265MNnyA1PVVuiRyO0YgVh1QqFfr27YvAwMAcT7LoEfoL/uPHj6NRo0Zo0aIFzp49ixcvXuDatWv53rPYE5bOYXKydWf35Iefn3V0i/3lF6YjNFReHfmhf6SzaVPpfRcqJO7jknmhbyxx/Lh0PvXoNyHl7gCbH2PHMn0VK4pj356uay9duoQSJUrkSsB4+PAhRo4cCU+BUmMtOmKOjo7o2rUrZs6ciV9//RUPHjxAfHy8rAtfQEAAduzYkf3/bdu2oXjx4rnG6WvKvVmgf86cOUbXIBP7ZNNnem22tuqQMnHv3j0QEapXr25wbHp6OgoVKgRvb2+epWACe/bsARGhZ8+ecksRjKNHj4KI0LZtW1Hs161bF0SUa0PnTXr27Glw484S7GnhkwN3d3fs3r0bpUqVyrGJL2UmOJ9D20NzWJPdVTUxNVFuORyOxYgVh/SxtH///ihevDj+/vvvHD8X+p5h/PjxcHJyQrFixVC0aFE4ODjA09MTX375paB+rBFL5zAmht2of/qpQIIkokoVpnvMGHl16Dc6rDVTbtYspu+996T1e/q0PHX/+vVjfps3l9YvwDZmiYAvvpDetzEcPMj0ifWotb1d18bFxSE0NBRt27bF1atXMWjQILi5uaFNmzaCZXtbdMRcXFwQFRWFDh06ICgoCA4ODnBwcEBnqR4Yz4MJEyYgNDQU8fHxiI+PR3BwcL7dV7t164YWLVrg2bNnuHnzJkqUKGE13Vd5pldOoqOjQUQYbEQf7bNnz4KI0KxZMwmU2Q8ajQZEhMWLF8stRTDmzp0LIsL06dMFt52ZmQlXV1d4eXnlu/n76tUreHp6wtXVFSkpKYJrAOxv4ZMa/Q3jtm3bULp06exMa3NuFB8/fgxvb2+Emvg1OZ9D2yIxNTG7ZpzmsEZuORyOIJgah4yNd29+wTFo0CD4+/vn+CJL6C9A1Gp1DvsbN25EUFAQ9uzZI6gfa8TStWTGDHHrTInFJ58w3SJ9/2o0U6cyHUOHyqsjP/78k+lzdZXWr755SEiItH71j5DK0ZnX25v5jo6W3rcxZGa+7sAqRi1Ge7yuPX/+PFQqFRwcHPDJJ58I3ohT0Jpy6enpePLkiUWCLCUjIwODBw+GWq2GWq1GREREdmfMpk2bYurUqdljk5OT0alTJ7i7u8PHxyffzbu8EPNk02d6FS1alGd6/T9fffUViAirjChG8MMPP4CIMHHiRPGF2RHNm58GATMAACAASURBVDcHEeHMmTNySxGMTp06gYhw4MABwW1fvHgRRITw8PB8x+zYsQNEhI4dOwruX489LnxS8ubm2+bNm1GmTBnExsaadaPYtWtXNGzYkG/K2Tlhq8JAGsI731ppsRgOxwxMjUPGxrv/xtLIyEi8++67uHHjRp4/t5SgoCA8fPgwx3s3b97Eu+++K6gfa8TSteSDD9iN+v/+J5AgiRg+XJ5Nn/x0WOtDTm92YM3IkM5vYCDzOWWKdD4BIDWV+SWSvq6cvvNqcrK0fk1B34H1zz+Ft21P17WXL19Gp06d4Obmhj59+qB3794ICgrKlfVtKRYdsRC5o5+MiHmy8Uyv3DRs2BBEhL/++svg2F69eoGI8Msvv0igzD7Q6XTw8fGBs7Mz0uWoiCoSpUuXzrOmpBAsW7YMRIRx48blO0a/Kbht2zbB/euxp4VPDvr27Zvj/+vXr0eZMmXg4uJikp39+/cjLCwMq1at4ptydszB2wezGzkcu5e7mDyHY6uYEodMiXd5ZR0PHToUfn5+uHr1quCbcvPnz0doaCjOnj2b/d4///wDb29vQf1YI5asJVot4ODAbtITbeyJ/NWrmW65913bt2c6Tp6UV0dBeHoyjSJ8V50nmZmvNwIfP5bG55sUKcJ8b9wonc9795hPZ2fpfJpD5cpM57p1wtu2p+talUqFIUOG5GgaOm3aNPj6+uLEiROC+bGfIyYxYp5s+kyvSZMmiebDltBqtfDw8IC7uzuysrIMjq9cuTKICAkJCRKosw/u3LkDIkKNGjXkliIYT548ARGhXLlyotjv168fiChHDcs3efHiBdzc3ODh4SFq1zd7WvishdWrV6NIkSJGj09NTUW5cuVw9epVvilnx2i1WvjM8gFpCOFr88+Q5XBsEWPjkKnxbu7cuXm+P2LECPj6+qKQCIWmpk2bBpVKhRIlSqBWrVrw9PTEgAEDBPdjbViylvz9N7tB9/MTUJBEXL/OtAcGyqtDvwEkdxfYgqhYkWkcO1Yaf+vXM39eXtL4+y+NGkn/aPPSpcynv790Ps1B/7j6/PnC27an69r89hM2bNgALy8vwRIv7OeISYyYJxvP9MrJ1atXQURo0KCBwbEpKSlwcHBAoNwrs42xZcsWEBEiIyPlliIY+/btAxGhW7duotivWrUqiAhxcXF5/nzjxo0gInTv3l0U/3rsaeGzVUaMGIGx/3+Fa8xNqkajgUKhyH7xObQNvvrtK5CG4BzljJR0cWpEcjhyQUQ54pJGk3e9RFPjXUF89dVXUCgUZv9+QaSlpWHfvn1YsWIF9u/fb9SXuraOJWvJpk3WXZi+IHQ69ihe0aLy6tBnhFnzqdajB9PYr580/j7+WL6OrwDw3XfSZ1GOHs18Nm4snU9z2L2b6ezfX3jbb8t1bUxMDIoKFHjejiMmAmKebDzTKyerV68GEWHUqFEGx/7vf/8DEaFDhw4SKLMfRo4cCSIyutGJLRAVFQUiwvfffy+47dTUVCiVSvgX8DVY69atQUTYu3ev4P7f5G1Z+KyV8+fPIygoCC9fvgRg3k0qn0Pr51naMygnK0Eawqxjs+SWw+EIjjFxSIh4918uXbpk0e9zXmPJWjJsGLtBF6lRvOiUK8f0v3ghj//Hj5l/Jyd5/BvLoUNMZ9eu0vhTq5m/DRuk8fdfEhPFbWiQF/q/JWutLajn5k2mMyhIeNtv03XttWvXBLHz9hwxgRHrZOOZXrmJiIgAEWHr1q0Gx86ePRtEhFmz+E2TKYSFhYGIBAss1kDLli1BRDgpQnGPY8eOgYjQNp98+KSkJDg7O8Pb2xsZIlfTfZsWPmtk3rx5cHFxgbe3N7y9veHu7g5HR0d4e3sb/cUKn0PrZ8zvY0AaQuVFleWWwuGIgjFxSIh4xxEPS9YSPz92g371qoCCJCQ4mOk/dEge/3v2MP8mVL6QhYQEprNaNel8KRSstpxc6Ovo7d4tjb8mTZi/K1ek8WcuYnZg5de1psOPmJmIdbLpM73E7NZoa3zwwQcgIty9e9fg2E8//RREhMOHD4svzE7IysqCSqWCp6cntFJ9jSQyOp0OxYoVg6Ojoyj13ObNmwciwrRp0/L8+cqVK0FEktSw4QufvKSkpOD+/fvZr7lz56JKlSq4f/++0X9PfA6tm2uPr8Epygnu09zxb/K/csvhcETBmDgkRLzjiIe5a0lysvTZREJTvjz7DFFR8vj/5hvmX6QyxoLi6Qk4OorfkXTyZOuo9VenDtPRpYs0/tRq1n3VFvrm+fuzY3PvnrB2+XWt6fAjZiZinWw80ysnr169grOzM3x9faHT6QyOL1myJBQKBZ4/fy6BOvvgypUrICI0bNhQbimCERsbCyKy+LGa/OjcuTOICAfyaV8VHh4u2eYwX/isC/74qn2h1WpRdkFZkIYw5/gcueVwOKJhThwS4vFVjnCYu5asWMFuzIsVE1iQhPTtyz7D9Ony+O/alfn/6CN5/JtC4cJM62+/ieunWjXmp08fcf0YYupU6TYH79xhvkToXyMK+hqDQp8L/LrWdPgRMxOxTjZ9pldMTIwo9m2N06dPg4jQokULg2MfPXoEIkLFihUlUGY/6LO6Ro8eLbcUwYiOjgYRYeDAgaLYL1OmDIgISUlJuX6WkJAApVKJd955R5LC0nzhs334HFovkXsiQRqC+zR3ZGSJ+yg6hyMnPA7ZPubOYdu27Ma8SROBBUnIunXsM4wZI49/fTaWLTT51T9euWqVuH4CA5mfc+fE9WOIBw+YDgcH8TNBf/mF+apSRVw/QjFrFtM7b56wdvl6Yjr8iJmJWCcbz/TKyaJFi0BEmDx5ssGxe/bsARGhZ8+eEiizHwYNGgQiQnR0tNxSBGP06NEgIqxcuVJw24mJiSAilPv/ZxSSkpIQExOD+fPno3fv3qhYsSKICMOGDRPcd17whc/24XNonSS/SobvLF+QhrDg1AK55XA4osLjkO1j7hzqN09mzxZWj5QcOcI+Q+fO8vgvWZL5F6G3mOAsWsS0fvONeD7u32c+KlUSz4cpeHgwPWL3lVm6lPnJp3m11bFmDdNbq5awdvl6Yjr8iJmJGCebPtOrkrVEMCugR48eRnew1Gg0ICIsWrRIAmX2Q2hoKIgIsbGxcksRjIYNG4KIcPnyZcFsarVa3Lp1C/379wcRgYhQokSJ7H+/+fL398dViaol84XP9uFzaJ0M+3UYSEPovr273FI4HNHhccj2MXcOHR3Zjfn9+wILkpC//mKfwc9PHv/6ZgLHjsnj3xRiYsTfwFy5kvn48kvxfJjC8OFMz+rV4voZMoT5MaI3oVVw7BjT6+4urF2+npgOP2JmIsbJxjO9cqPPOnr8+LHBsc2bNwcR4cyZMxIosw/S0tLg5OSEYsWKGVWzzxbQarXw9PSESqUy+/HRlJQUHD9+HD/88AMGDhyI2rVrw93dPdfmm4ODAypUqIBOnTph+vTp2Lt3Lx48eCDpseQLn+3D59D62Hl9Jxw0DlDPUONhykO55XA4osPjkO1jzhxevmxbNbDy49Wr148oyoFSyfyL0FtMcOLjmVZvb/F8lCvHfGzYIJ4PU9i5k+np3VtcP2XKWMcju8ai1TK9RMI+2svXE9PhR8xMxDjZ9JleixcvFty2LfL8+XMoFAq89957BsfqdDr4+PjA2dkZ6bbQ7sZKOHnyJIgILVu2lFuKYFy7dg1EhPr16xscq9PpcO/ePezatQtTpkxBhw4dEBQUBIVCkWsDrnDhwqhXr172/xcuXIiXL19K8IkKhi98tg+fQ+siU5sJj2keIA1h9O/2U2uTwykIHodsH3PmcOxY2+kaagj9xlhKirR+U1OZX6VSWr+WoFCIt4mYlfXavhE5FZKQmMj0+PiI68fBgflJTRXXj5CoVEzz6dPC2eTrienwI2YmYpxsPNMrJ4cPHwYR4bPPPjM49s6dOyAi1KhRQwJl9sOCBQtARIiSq4e8CKxZswZEhJEjR+Z4Py0tDefOncOKFSswZMgQhIWFwcvLK8/HT0uXLo127dph8uTJ2LFjB+7cuQOdTgedTgc/Pz84OjoizUq+DuULn+3D59C66LOzD0hDcJvqhvRM/iUP5+2AxyHzyMjIQEREBLy8vODl5YXIyEhkZmbmOTY5ORmdO3eGh4cHfH19c117PXjwAM2aNYObmxuKFy+OZcuWmaTFnDmsXZvdkPfoYfKvWh36rqISNL7PwdGjzK+np7R+LUGtZpqNqA5kMufOMdshIcLbtgQXF6ZLrNvsv/+2zazToCDhawwaG4usKX7KDV+BzUToixee6ZWbmTNngojw7bffGhy7ZcsWEBEiIiIkUGY/dOvWDUSEffv2yS1FMCIjI0FE6NOnD2bOnIkuXbqgUqVKUCqVuTbf3NzcULNmTfTv3x+LFi3CsWPHkJycnK/t+/fvg4gQYkVXGvxGyvbhc2g93H56GwqNAqQhrDwvfKMYDsda4XHIPCZOnIiQkBDEx8cjLi4OVatWzbc5Wffu3dGsWTMkJSXhxo0bKF68ONasWZP98/r166Nv37548eIFTp48icKFCyMmJsZoLebMoX4ja8cOk3/V6ihVin2WOXOk9Xv4MPPburW0fi3h/feZ5lGjhLc9fTqzPXOm8LYtoX59puuHH8Sxv2ABs1+8uDj2xeKTT5juVq2Es2lsLLKm+Ck3fAU2E6EvXnimV246dOgAIsKRI0cMjh01ahSIKMcfJ8cw5cuXBxHhyZMncksxi4yMDFy+fBnr16/HqFGjEB4enmfmGxEhICAALVq0wLhx47BlyxbcuHHD5Jpz27ZtAxFh4MCBIn0i0+E3UrYPn0ProdKiSiANofzC8nJL4XAkhcch8wgICMD27duz/x8dHY0SJUrkGpeamgpnZ2dcuHAh+71vv/02u9TG33//DaVSmaOGcmRkJLp3N77RjKlz+MMPr+uw5ZOcYlPUq8c+T58+0vrVd7AcN05av5bQuTPT3KiR8Lbr1mW23zjVrYLNm5muQYPEsS/mMRWTKVOY7qAg4WwaG4usKX7KDV+BzUToixee6ZWbwMBAODg44MWLFwbHhoWFgYgk63hpDzx79iz7UU1b4OnTpzh8+DDmzZuHnj17Ijg4GM7OzvluwvXs2RPz5s3DoUOHBNt0HDNmDIgIK1asEMSeEPAbKduHz6F1sObiGpCGoNAocPPJTbnlcDiSwuOQ6Tx9+hREhDt37mS/d/v2bRARnj17lmPs+fPn4eDgAO0b1dQPHToEtVoNAPj5558RGBiY43dWrlyJatWqGa3H1Dl87z12M16qlEm/ZrX06ME+T4MG0vqdPJn5taWn5cTK6kpIYHYdHYVtHCAEcXFMW6VK4tgXM/tQTE6eZLpVKuFsGhOLrC1+yg1fgc1E6IuXkSNH8kyvN0hISAAR4f333zc4NisrC+7u7vDw8Mjxx8opmIMHD4KI0KlTJ7ml5ECr1eLGjRvYsmULxo0bh08++QTFixfPc+PN19cXTZo0wciRI7Fu3TqsWrUKRITmzZuLoq1Ro0YgIly+fFkU++bAb6RsHz6H8pOemQ7VVBVIQ+ixvYfccjgcyeFxyHRiY2NBREhKSsp+T3+jef/+/Rxjjxw5gsKFC+d47/z581D+f3eAtWvXomrVqjl+/vPPPxf4xalGo4FCoch+mTqHy5cDHTpYX0aTucycKXzGjzHoO43Ony+tX0sQq/6ZRsPs/md/xGooVozpu35deNti1ukTEzE6sBJRjtik0WhyjZE7flobfAU2E6EvXnimV05++eUXEBF6G9G7+sqVKyAiNGzYUAJl9sP06dNBRJg7d65sGp4/f44//vgDixcvxoABA1CrVi2oVKpcm29KpRIVK1ZE586dMXPmTOzbtw/x8fG57C1evBhEhEmTJgmuVavVwtPTEyqVyuTHXsWE30jZPnwO5adLdBeQhuA+zR2ZWjt4jovDMREeh0xHfwN59+7d7PcsyfQoWbJkjt8RO1PO3vjtN7ax4OUlrd933rHNzRgxOoVWqybPI8TGot9AHTNGeNtidrQVG3d3pv34cWHsmZIpZy3xU27e7uhtAUIufFlZWVCpVDzT6w0mTpwIIsKSJUsMjtVnR40ePVoCZfZDu3btQEQ4evSo6L50Oh3u3r2LnTt3YvLkyWjXrh1Kly6dZ/abWq1GWFgYhgwZghUrVuDs2bNGdzrt2bMniAh79uwR/DNcu3YNRJRdv8BaeNsvwu0BPofycvXR1ezmDpsub5JbDocjCzwOmUdAQAB2vNElYdu2bSiexzOB+ppIFy9ezH5vzpw5qFevHoDXNZHeLLfxxRdfoFu3bkZredvnMCnp9aOTUlKmDPNrRLUdq8LLi+nevVs4m87OzObZs8LZFJIBA5i+4GBh7V6/zuy6uAhrVyrKlmX68+mxYDKm1JSzlvgpN2939LYAIRc+numVm2bNmoGIcO7cOYNjBw0aBCJCdHS0BMrsh4CAACiVSqNq9pnCy5cvcebMGSxfvhxffPEF6tevD7VanecGXJkyZdC+fXtERUVh586duHfvHnQ6ndm+K1WqBCLCo0ePBPxEjLVr14KIMGLECMFtW8LbfhFuD/A5lJeg74NAGkLVH6oaHszh2Ck8DpnHhAkTEBoaivj4eMTHxyM4ODjf7oHdunVDixYt8OzZM9y8eRMlSpTIUbamXr166N+/P1JTU3Hq1Cmo1WrRu6/aG/rsL6kaV2i1bCPK11caf0JStSo7VsOHC2Pv1ClxHokVkmPHmEY3N2Htfvcds5tHjwKboHVrpr9FC2HsGRuLrCl+yg2P3mYi5MLHM71yotPp4O3tjUKFCiEjI8Pg+OrVq4OIcO/ePQnU2QdxcXEgIlSpUsVsGzqdDnFxcfj1118xY8YMdO7cGRUrVoRSqcy1+aZSqVCrVi0MGDAAP/zwA44fP46UlBQBPxF7FFahUORKXxaKyMhIEBE2b94sin1z4Rfhtg+fQ/nYeGkjSENwmOyAe8/4GsJ5e+FxyDwyMjIwePBgqNVqqNVqREREIPP/d4SaNm2KqVOnZo9NTk5Gp06d4O7uDh8fn1w3n//++y+aNm0KNzc3BAQEYJmJnQP4HLJi9USAEd/pC8Lt28xfaKg0/oSka1dhG2P06sXshYQIY08slEqmU8jbxs8+YzY/+kg4m1Kyfj3T36WLMPaMjUXWFD/lhkdvMxFy4eOZXjnRP09eq1Ytg2NfvXoFJycnFCtWzKIMq7eNnTt3gojQt29fo8ZnZGTg0qVLWLduHUaMGIHGjRvDx8cnz+y3EiVKoGXLlhg/fjy2bt2KmzdvSvJYdkxMDIgIHTt2FMV+zZo1QUS4ffu2KPbNhV+E2z58DuUhU5uJKj9UAWkIw/cJlCrA4dgoPA7ZPnwOgfBwtrlw5Ig0/pYvZ/78/aXxJySLFzPtAQHC2CtRgtn75hth7ImFvuuwUI9qAkDlysymrebX/Psv0//BB8LY47HIdPgRMxMhTzZ9pldsbKxgNm2ZTZs2gYgwZMgQg2NPnToFIsInn3wigTL7Yfz48SAiLF26NNfPnjx5goMHD2Lu3Lno0aMHqlWrBmdn51ybb4UKFUJISAh69eqF7777DocPH0ZiYqIMn4Yxa9YsEBFmz54tuO309HQ4OzujaNGiVrf5a8q3UREREfDy8oKXlxciIyOzv43Kj2vXrsHZ2Rnt27cXQionH/jFizx8d+I7kIYQtirM6v6uORyp4XHI9uFzCIwaxTYXNm6Uxt/Qocxf9erS+BOSBw+Y9nLlLLeVmfm60cHjx5bbE5Nu3ZhOI3I/jKZmTWbz5EnhbEqJTgcULswe6xWilx2PRabDj5iZCHWy8Uyv3IwYMQJEhHXr1hkcu2DBAhARoqKiJFBmP4SHh4OIsGnTJmzevBljx45FixYtEBAQkGf2W7FixRAeHo5Ro0bhp59+wpUrV4x6tFhKOnbsCCISpX7A2bNnQURo1qyZ4LYtxdhYNHHiRISEhCA+Ph5xcXGoWrVqvnUbAPZ4cv369REWFsY35USGX7xIz4W4C3Ce4gzlZCWuJFyRWw6HIzs8Dtk+fA6BhQvZ5siMGdL4a96c+evQQRp/QvPuu6wxRnq6ZXbWrZOn8605/Por0+rhIZzNokVZkwchNrTkws+PHRch+v/xWGQ6/IiZiVAnmz7Tq2XLloLYswfq1asHIsKNGzcMju3evTuICL/++qsEymyX58+f49ixY1i0aBH69u2b58YbEUGpVKJy5cro2rUrZs2ahf379+Phw4dyyzeKwMBAODg4CF6rDgAWL14MIsKkSZMEt20ppnQ42r59e/b/o6OjUaKAirRLlixB9+7dMWnSJL4pJzL84kV63vvuPZCGUH+ldXVT5nDkgsch24fPIfDtt2xjwYKSySahf2xx3Dhp/AlNkyZM/6VLltnRPzZshd9d50Krfd0QRIisvoQEZqtaNcttyUn58sJtaPNYZDr8iJmJUCcbz/TKSWZmJtzc3FC4cGGj6pCVL18eRJSjBfLbjE6nw+3bt7F9+3ZoNBq0bdsWpUqVyncTrkGDBhg6dChWrlyJc+fOIS0tTe6PYBYJCQkgIlSqVEkU+7169QIR4ZdffhHFviUYE4uePn0KIsKdO3ey39PXbnz27Fmu8XFxcShVqhQePXrEN+UkgF+8SMuh24dAGoLbVDfEp8TLLYfDsQp4HLJ9+BwC0dFsY8HPTxp/vr7M35Yt0vgTmgYNmP5hwyyzo1YzO5s2CaNLbAICmN45cyy3NW+e7T7C/CYzZrDPMXOm5bZ4LDIduzliq1evxgcffABPT0/4+fmhd+/eSEpKynf8qlWr4ODgAJVKlf1avny50f6EOtn0mV779u0TxJ6tc+nSJRARGjdubHDss2fPoFAoUKpUKQmUWR8vX77E6dOn8eOPPyIyMhL16tVD4cKFc228KRQKBAUFoUOHDpgyZQo6d+4MIsLQoUPl/giC8csvv4CI0KtXL1HsV6pUCUSEhIQEUexbgn6O9S+NRpNrTGxsLIgoR0zUb9Tdv38/1/j27dtndy3im3Liwy9epCM9Kx0VFlYAaQhb/9oqtxwOx2rgccj24XMIPH3KNhYqVpTGX6FCzN/du9L4E5ru3S3PcEtJYZlnhQqx2nK2QIcO7HOHhVluq3NnZis83HJbcvL77+xzdO9uuS0ei0zHbo7YokWLcPjwYaSlpSExMRHNmjXD559/nu/4VatWIdSC/tVCnWw80ysnK1asAP0fe/cdHkX19QH8bHonhSYQCB1CkyIihC7SQ69GBMQfvUgRUEKWjoTeQTAgVaQ3UUpoEqQISK9BAkRASCghdff7/jFvojGb7M5mdmdncj7Ps8/jbu7cPTN3PJMc7swlwvjx4422PXz4MIgI3bt3t0Jk8tHr9Xj06BH279+P6dOno1u3bqhQoQLs7OyyFODc3d1Rt25dDBw4EMuXL0dUVFSW2zlHjBgBIsKGDRtk2iPphYWFgYiwdOlSyft+9eoVNBoNSpQoIXnfUhAzU+7+v35rzG6m3O7du1G3bt2MZ1xyUc7y+JcX6+mzsw9IS/ho3Uf8HFfG/oXzkPLxGAq8vQF3d+Hh9Zak0wlFDCUf9qNHhfhz82vevn1CHx9/LF1clvbjj0LMBQvmvq8BA4S+lP5n1ePHwn5Urpz7vjgXiafaI7Zr1y4EBARk+3NbKMqlz/QqXbp0rvtSi/79+4OIMj37KjszZ84EEWGOFHOPbURycjIuXryItWvXYuTIkWjatCny589v8NbTEiVKIDg4GKGhodi6dStu375t0i2/9erVAxHh1q1bVtgj62jZsiWICGfPnpW876NHj4KI0KVLF8n7loKYZ8rt3Lkz4/22bdvg7++fpd3w4cPh7u4OPz8/+Pn5wdXVFU5OTihatKhkMbPM+JcX64h6EAXSEkhLuBR7Se5wGLMpnIeUj8dQULWqUFyItfDTCe7dE77HxcWy32NJ8fHCPlSoYH4f6SvQrl0rXVyWlpoqLPTg6pr7RS7q1xf2/84daWKTi17/zwq6uZ3xyLlIPNUesZEjR6JNmzbZ/jwiIgKurq7Inz8/SpUqhREjRoh6QLwUJ1temeklRo0aNUBEePjwodG2HTt2BBHhhBTLxMjg2bNnOHToEObMmYNevXqhWrVqcHR0zFJ8c3Z2Rs2aNdG3b18sWLAAR48exYsXL8z6ztTUVLi6usLb21s1s0T0ej3y588PJycnJOf2ympAeHg4iAizZs2SvG8pmJqLQkNDUbNmTcTGxiI2NhbVq1c3uPpqfHw8YmJiMl5ffPEFWrVqZdL/k8w8/MuLdRSZUwSkJQStDpI7FMZsDuch5eMxFBQpYp2ZS5s3C99TqJBlv8fSihYVbj81d520fPmE46C0XxPbthXiPnXK/D50OmFmpqur8N9K5+UlHJPIyNz1w7lIPEUcsZSUFCQmJmb7+m9xYf/+/fDy8sIfOSwlc/fuXdy5cwc6nQ63b99GvXr10Lt372zba7XaTM9tkuJkS5/pNXfu3Fz3pQaJiYlwcHDAO++8Y1J7f39/2NnZ4c2bNxaOLHfS0tJw/fp1bN68GePGjUPLli1RpEgRg7PfChcujBYtWmDs2LHYuHEjrl69ilQJH9Bw8eJFEBGaNWsmWZ9yS78Ns3bt2hbpv0uXLiAiROb2CmUhpuailJQUDBo0CN7e3vD29sbgwYMzzq0WLVpg2rRpBrfj21ctj395sbypx6aCtASHyQ54liDBcmuMqQznIeXjMRSkz5QbO9ay3zN+vPA9VapY9nssLX9+YT+2bhW/7enTwrbOztLHZWnh4ULsY8aY38elS0Ifnp7SxSWnihWF/ZkwIXf9cC4STxFHrFu3bgYLGOmvf68oePjwYfj6+uLQoUOivuPUqVPw8PAwefaQFCeb0md6SS0qKgpEhHbt2hltGxsbCyJCVWuteW6i+Ph4HD9+HIsWLUK/fv3w3nvv3HFmJgAAIABJREFUwdXVNcs56+DggCpVqiAkJATh4eH45ZdfrLKIwMqVK0FE+Fqpa7cb8MMPP4CIMGTIEIv0HxAQAI1Gg1evXlmk/9ziC5/y8RhaVlxiHBwnO4K0hAmHc/mbJmMqxXlI+XgMBW3aCIWF9u0t+z0dOwrf07q1Zb/H0mrWFPbDnF+jv/1W2LZzZ+njsrQNG4TYCxQwv49Zs4Q+1LLmYKdOwv40b567fjgXiaeqI3bkyBH4+PiYtZLp6dOnrV6U8/f3h729vc3P9LKWBQsWgIgwdepUo213794NIsJnn31mhciy0uv1uHv3LrZv346wsDC0b98eJUuWNFg09vX1RePGjTFixAhERETgwoULSEpKkiXuzz//HESU6dliSjdq1CgQEdZa4GEWT58+BREh0FrLeJmBL3zKx2NoWY3XNAZpCYXCFX6PEWMWxHlI+XgMBaNGCYWF6tUt+z0tWgjfM26cZb/H0nr3FvYjyIwnO3TrJmxrxp/esktIEJ6h5ugIpKWZ10d6YbZFC2ljk8vs2cL+lCyZu344F4mnmiMWGRkJb29v7N2716T2+/fvx+PHjwEA0dHRqF+/fo6rtf5Xbk82W53pJaeQkBAQEX755RejbSdMmAAiwooVKyweV0JCAn777TesXLkSgwYNQr169eDp6Zml+KbRaFCuXDl07doV06ZNw969exETE2NTz26rVq0aiCjj3FeDBg0agIhw/fp1yfvet28fiCjHW9vlxhc+5eMxtJzI6MiMxR2ORR+TOxzGbBbnIeXjMRSsWSMUFkx8Go7Z0mcV/fabZb/H0latMu94paYCvr7CrasJCZaJzdKaNRP2/fx587avUEHYPjRU2rjkcvmysD+urrnrh3OReKo5Yo0aNYKdnR3c3d0zvdKtX78+02yX0aNHo1ChQnB1dYW/vz+GDRsm6va03J5s6TO9+vXrl6t+1KRcuXIgIpMWMWjevDmICL///rtk36/X6xETE4O9e/di2rRp6Nq1K8qXLw87O7ssBThPT0/Uq1cPgwYNwooVK3D69Gmbn/GYkJAAe3t7Va2imZaWBnd3d3h5eZm08qxYWq0WRIQlS5ZI3rdU+MKnfDyGlqHT6VBwVkGQltB0bVO5w2HMpnEeUj4eQ8HVq9IUFoypVUv4nr/+suz3WNqjR8J+ODqK2+7774XtAgIsE5c1TJki7MO8eeZt7+kpbH9MJf/mp9P9swJrbtbO41wkHh8xM+X2ZLPmTC8liIuLAxGhbNmyRtvq9Xr4+vrCxcUFKSkpZn1fcnIyLly4gDVr1uCLL75AkyZN4OfnZ/D204CAALRr1w4TJ07Etm3bcPfuXYsUgCzt5MmTICJ06NBB7lAkc/nyZRARmjRpYpH+W7VqBSLC2bNnLdK/FPjCp3w8hpYx/tB4kJbgONkRLxNfyh0OYzaN85Dy8RgKdDqhqKDRWPZ7vLwAJyfAhm6IMZu9vXDM4uJM3+ajj4RtWrWyXFyWduiQsA81aojf9t8FLAnX5JNd+mq6Ih/PnwnnIvH4iJkptyebJWZ6KdnBgwdBROjZs6fRtnfu3AER4YMPPjCp76dPn+LgwYOYPXs2QkJCUKVKFTg4OGQpvrm4uKBWrVro168fFi1ahOPHjyM+Pj63u2Yz5s2bByLC9OnT5Q5FMqtXrwYRYawFltjS6/UoUKAAnJyckJybfy6yML7wKR+PofSeJTyD/SR7kJYw48QMucNhzOZxHlI+HsN/ODkJhQVLraH27Jl5s8tsVYECwv788IPp23h7C9ts3my5uCwtLu6fAq7Y58qdPy9s6+ZmmdjkUqmSsF/jx5vfB+ci8fiImSk3J5sUM73UZvr06SAizJ8/32jbjRs3gogwfPjwTJ+npqbi6tWr2LhxI8aOHYsWLVrgnXfeMTj7rUiRImjZsiXGjRuHTZs24dq1a0hV0z9zGNCjRw8QEQ4ePCh3KJIZMGAAiAjbtm2TvO/o6GgQEWrXri1531LiC5/y8RhKr82GNiAtodjcYnKHwpgicB5SPh7Df/j5CYWFXbss0/+ZM0L/pUtbpn9rS78Vd9Ag09rHxgrt7eyUP0vMy8u8c2XGDHWdA+m6dBH2q1kz8/vgXCQeHzEz5eZkEzvTKy9o3749iAi//vqr0bZffPEFiAj9+/fHwoUL8dlnn6FWrVpwcXHJUnxzcHBA1apV8cknn2D27Nk4ePAgnj59aoU9sj1lypQBESFOzNx0G1ejRg0QER48eCB531u2bAERYfDgwZL3LSW+8Ckfj6G0bjy7AYdJDnCe4owzD8/IHQ5jisB5SPl4DP+R/gD+SZMs0/9PPwn9q+XR4J99JuxP3bqmtQ8LU/7z5NIFBQn70r27uO3at1f+7buGzJsn7FeJEub3wblIPD5iZsrNyZbdTK+8rGjRorC3t8fbt28zfa7T6XDnzh1s27YNEydORHBwsMGZb0QEPz8/NGnSBCNHjsTatWtx8eJFm77t0JqeP38OIkK5cuXkDkUyiYmJcHBwQOHChS2ywu3o0aNBRFi7dq3kfUuJL3zKx2MoHb1ejw+//xCkJYT/Gi53OIwpBuch5eMx/Ef6qpo9elim/+XLhf6nTLFM/9aWvmJt4cKmta9WTWj/+eeWjcsa0me8FS8ubrvy5YXttFrLxCWXa9fEnQuGcC4Sj4+YmXJzsqXP9Fq/fr2EESnXo0ePMhZ5iIqKwvLlyzFw4EDUrVsXHh4e2RbhunbtiunTp2Pfvn14+PChRQozavHzzz+DiBASEiJ3KJKJiooCEaFt27YW6b9hw4YgIly7ds0i/UuFL3zKx2MondE/jwZpCYGLA5GSxo+HYMxUnIeUj8fwH8OGWXYWU+fOQv9z5limf2tLvx3V1GfkpT+z78IFy8ZlDf++FVfMOn4eHsJ2J09aLja5FCgAODuLf85eOs5F4vERM1NuTrZ69eqBiHDr1i0JI1IOvV6PBw8eYM+ePZg6dSqcnJyyLbx5eXkhKCgIgwcPxsqVK/Htt9+CiNAsNze650FTp04FEWHBggVyhyKZhQsXgogwxQL/TJmWlgZ3d3d4enra/Eq7fOFTPh5Dabx4+yJjcYelZ5bKHQ5jisJ5SPl4DP9x4oRlZ8oFBAj9L1xomf7l4OYm7NPq1cC4ccKtuYsWCbPo1qwBhg8XPkufhejiInfE0nF3F/bp8GHT2uv1QgFTbCFPKRo1Eo7HzZvmbc+5SDw+YmYy92RLTU2Fq6srvL2988TMrqSkJPz++++IiIjA8OHD0ahRI/j6+mZbhGvfvj20Wi127NiBe/fuZTlG6UW5r776SqY9Uqb0236joqLkDkUyISEhICIcOHBA8r6vXLkCIkLjxo0l71tqfOFTPh5DaYz6eRRIS3h3+btyh8KY4nAeUj4ew388eCDuGWlieXoK/Z86ZZn+5dCunbBPpr7atZM7YumkL3TRp49p7WNihPY2vhac2T75RNi/efPM255zkXh8xMxk7sl28eJF1c70+uuvv/Dzzz9j1qxZ+Pjjj1G5cmU4ODhkKby5urqidu3a+Pzzz7F48WK4urqCiHDp0iWj3/H555+DiLBz504r7JE66PV6FC5cGA4ODkhMTJQ7HMmUL18eRITnz59L3vd3330HIsLYsWMl71tqfOFTPh7D3Lv85DLsJ9nDa4YXYl/Hyh0OY4rDeUj5eAz/kZYG2NsLq7Bagr29ULRQ0a/VuH1beEaeViuswNmoETBypPBeqwXatBE+a9QIGDpUXTPEJkwQxrNMGdPaHzggroinNN27C/vXtKl523MuEo+PmJnMPdnUMNMrNTUVV65cwYYNG/Dll1+iefPmKFy4sMGZb0WLFkWrVq0wfvx4bN68GdevX0fav25Q1+v18Pb2hqurK1JNWFP73XffBRHh0aNHltxFVYmJiQERoUaNGnKHIpm4uDgQEUpbaB3ygQMHgoiwdetWi/QvJb7wKR+PYe7odDqUnF8SpCUsPK2ie4kYsyLOQ8rHY5iZg4NQWHj9Wtp+ExKEfu3tpe2XyefePWFMHRxMaz9ihLoW+viviAguylkbHzEzmXuyKW2m14sXL3D06FEsWLAAffr0QY0aNeDs7Jyl+Obo6Ihq1aqhV69emDt3Lg4fPoxnz54Z7f/WrVsgIgQFBRltm5CQAHt7exQtWlSKXcsztm/fDiJC//795Q5FMocOHQIRoYeFHhZSs2ZNEBEePHhgkf6lxBc+5eMxFO/a02twnuIM0lLGy3O6J1J1xv9xhzGWFech5eMxzKxYMcssRnDsmNBvvnzS9svk5eIijOuZM8bbli2r7qLc338L+1elinnbcy4Sj4+Ymcw92Wx1ppdOp8Pt27fx448/YsKECWjbti2KFy9ucPZbgQIF8OGHH2LUqFH4/vvvcenSJSQnJ5v1vevXrwcR4YsvvjDa9tdff8147hwz3bhx40BEWL16tdyhSGbGjBkgIsydO1fyvp8+fQp7e3sUKVJEEc995Auf8vEYild2YdmMYpxGq4H7NHdsv7Zd7rAYUyzOQ8rHY5hZr17iHt5vqnnzhH5LlZK2XyavqlWFcR0yxHjbMmWEtmfPWj4uuRQqJKyya8KNbFlwLhKPj5iZzDnZbGWm1+vXr3Hq1CksW7YMAwYMwAcffAAPD48sxTc7OztUrFgR3bt3x4wZM7B//348evRI0kLF8OHDQUTYtGmT0bbz5s0DEWH69OmSfX9e0LRpUxAR/vjjD7lDkUyHDh1ARDhpgXXIlyxZAiLC0KFDJe/bEvjCp3w8huIsP7scpCXYTbLD/bj7cofDmCpwHlI+HsPMQkOFwsl330nbb79+Qr8m3OTDFGTuXGFcP/ss53Z6vbDQh5eX8N9qVbmycDwOHhS/Leci8fiImcmck83aM730ej3+/PNP7N69G1OmTEGnTp1QpkwZaDSaLAU4Ly8v1K9fH0OGDMGqVatw9uxZvH371uIxfvDBByAi3Llzx2jbnj17gohw0JzskEfpdDp4eXnB3d0907P8lK5YsWKwt7dHQkKC5H0HBQVBSSvV8oVP+XgMTZeYmgiXqS4gLaH/HvXcks+Y3DgPKR+PYWazZglFhV69pO23cWPL9Mvk9ddfwrgGBubc7s8/hXZ16lgnLrkEBQn7udCMR/VyLhKPj5iZzDnZLDnTKzExEefOncPq1asxbNgwNGzYED4+PgZvPy1dujQ6duyISZMmYefOnYiOjpblNr2UlBS4uLjA19fXpO8vU6YMiAhxcXFWiE4dbty4ASJC/fr15Q5FMo8fPwYRoVq1apL3/eeff4KIULJkSUXcugrwhU8NeAxN13FzR5CWkG9GPujUtPQbYzLjPKR8PIaZffONuBU1TZX+PLEZM6Ttl8mvfHlhbGNzWMR9wQKhTZs21otLDnv2CKvsnjsnflvOReLxETOTOSebVDO9YmNjceDAAXzzzTfo2bMnKlWqBHt7+yzFNzc3N7z//vv43//+hyVLluDkyZN4+fJlrr5bShcuXAARoXnz5kbbPn/+HESEcuXKWSEy9fj+++9BRBg1apTcoUhm165dICL069dP8r5nzZoFIsL48eMl79tS+MKnfDyGprnw+ELGc+R2XlfGYkmMKQXnIeXjMczs4EGheOLtLW2/Pj5CvwcOSNsvk1+9esLYjhmTfZvWrYU27dpZLy6l4VwkHh8xM5lzsomd6ZWSkoLLly9j/fr1GDNmDJo1a4aCBQsanP1WrFgxtG7dGl999RW2bNmCmzdv2vztiitWrAARITQ01Gjbn3/+GUSEjz/+2AqRqcfQoUNBRNi8ebPcoUjm66+/BhFh5cqVkvedvhDL5cuXJe/bUvjCp3w8hqYJmBcA0hJqragldyiMqQ7nIfPs2LEDZcqUgaurK+rVq4fr169n2zY8PBxVqlSBp6cnihYtilGjRmVaKC0sLAz29vZwd3fPeIn5h3wew8xevhSKJw4O0vbr6Cj0yzfuqM+AAcLY5nSDUfoiD/yI8+xJnYtsKc9aCmdvM4k92YzN9Hr+/DmOHDmCefPmoXfv3qhevTqcnJyyFN+cnJxQvXp19O7dG/PmzcORI0fw999/S7FLVtevXz8QEXbv3m207dSpU0FEWLBggRUiU4/3338fRIR79+7JHYpkPvroIxARLki8xv3169dBRKhcubKk/Voa/xKufDyGxh24fSBjcYfY1zncV8IYMwvnIfFu3rwJd3d37N27F4mJiQgNDUW5cuWQms1yhTNnzsSZM2eQkpKCmJgY1KxZExMmTMj4eVhYGDp16mR2PDyGWdnZCQUUc1aQNESnE4p8np7S9Mdsy82bwvlSvXr2bdzd1b/yam5JmYtsLc9aCmdvM4k92dJnevXs2RM3b97Eli1b8PXXX6NNmzbw9/c3OPutYMGCaNasGUaPHo1169bhjz/+QEpKioX2yPqqVq0KIkJsTjfu/7/g4GAQEU6dOmWFyNQhOTkZzs7O8PPzU8zz0YzR6/Xw8fGBq6ur5P8vTJw4EUSEadOmSdqvpfEv4crHY5iz5LRkVFxcEaQlLD2zVO5wGFMlzkPiTZgwAe3+dQ9bSkoKfHx8cOTIEZO2X7BgARo1apTxnoty0vPwkLaA8vix0F/t2tL0x2xPiRLCGLdtK9yi+u9Xy5bCz+zshAItM0zKXGRredZSOHubSezJlj7Ty9DL3t4egYGB6NGjB2bOnIkDBw6YVKhSsjdv3sDe3h7+/v5G2+r1ehQuXBgODg5WWRFWLc6dOwciQsuWLeUORTK3b98GEaFu3bqS9fns2TMcOnQIJUuWVOSsQv4lXPl4DHM248QMkJbQ7PtmqvkHBsZsDech8YKDgxEWFpbpswYNGmD+/Pkmbd+xY0cMGTIk431YWBg8PT3h6+uL8uXLY/LkydnOBjGExzArf3+hiLJ8uTT9RUUJ/XXpIk1/zPb06SOMcU6vhg3ljtK2SZmLbC3PWgpnbzOJPdkWL14MIkK+fPnQsGFDDBs2DKtXr8a5c+eQmJhooSht14kTJ0BEJlWqY2JiQESontNcYpbFsmXLQESYOHGi3KFIZsOGDSAijBgxQvS2aWlpuHbtGjZt2oRx48ahZcuWKFKkSKYCuZTFPmvhX8KVj8cwe6djTkOj1cB+kj1u/n1T7nAYUy3OQ5mlpKQgMTEx25der0eTJk0wb968TNsFBwdjypQpRvtfuXIlChUqhMePH2d8duXKFTx8+BA6nQ4XLlxA+fLlodVqs+1Dq9VCo9FkvHgMs6pdWyii/Otv8lz5+muhvw4dpOmP2Z6nT4EpU4BOnQy/evXi5wkaQ0SZclN2eUwJedZaOHubyZwLX1xcHP8r//+bO3cuiAgzZ8402nb79u0gIvTv398KkalHnz59QETYu3ev3KFIZsSIESAibNiwIcd28fHxOH78OBYtWoR+/frhvffeg4uLS5ZZqg4ODqhcuTJCQkIQHh6OP//800p7Ih3+JVz5eAyzV315dZCWUG91PblDYUzVOA9l1q1bt2zvcCEiREdHIzg4OMsfc6bM4Fi/fj0KFiyIS5cu5dhu48aNqFSpkskx8xhm1a2bUERr3lya/tJvX+SZcoxlz9RcpMQ8aymcvc3EF77c6d69O4jIpPvBx48fDyLCqlWrrBCZelSuXBlEhCdPnsgdimTq1q0LIsLt27cBADqdDnfv3sX27dsxceJEtGvXDgEBAQYTu6+vLxo3bowRI0YgIiICv//+O5KSkmTeo9zjXKR8PIaGpS/uUDi8MJ4lPJM7HMZUjfOQeBMmTED79u0z3qekpMDX1xeHDx/OdpsNGzYgf/78+P333432v3nzZgQGBpocD49hVmFhQhFNxGHMUd++Qn8REdL0x5gaSf1MOVvKs5bC2dtMfOHLndKlS0Oj0eDly5dG2zZt2hREhD/++MMKkanD69evYWdnhxIlSsgdimTi4+MzCmwDBw5EvXr14OnpmaX4ptFoUK5cOXTp0gVTp07Fnj17EBMTo9pZqpyLlI/HMKvE1ESUWVgGpCXsurFL7nAYUz3OQ+LduHED7u7u2L9/P5KSkhAWFoayZctm+3yijRs3wtfXF2ezWXVgx44deP78OQDhFquKFStmWjXQGB7DrLZvF4poBQpI01+rVkJ/RibfMJanSZmLbC3PWgpnbzPxhc98f//9N4gIFStWNNpWp9MhX758cHNzs4mHMCrFsWPHQETo3Lmz3KGIptfrERMTg71792LatGno2rUrypcvb3D2m4eHB+rVq4dBgwZhxYoVOH36NN68eSP3LlgV5yLl4zHMqtn3zUBaQsv16lmohjFbxnnIPNu3b0eZMmXg4uKCunXr4vr16xk/W79+faYZGAEBAXBwcIC7u3vG698/79GjB/z8/ODm5oZSpUohLCxM1ErzPIZZPXokFNGcnaXpr1Ilob/4eGn6Y0yNpM5FtpRnLYWzt5n4wme+AwcOgIjQq1cvo21v3LgBIkL9+vWtEJl6hIeHg4gwa9YsuUPJUVJSEi5cuIA1a9bgiy++QOPGjeHr65vj8wWICNu2bcOdO3eg4/XIORepAI9hZseij4G0BNISjkUfkzscxvIEzkPKx2NomIsL4OQE5PaGCZ0O0GgABwdp4mJMrTgXiaeaIxYZGQkiylQVNbbq5PLly+Hv7w83Nze0atUq08ocxvDJZr7JkyeDiLB48WKjbdetWwciwsiRI60QmXp07doVRITIyEi5Q8nw5MkT/PLLLwgPD0dISAiqVKkCBweHLAU3FxcX1KpVC5999hkWLlyIY8eOIS4uDv369QMRYdcuvpXt3zgXyS8pKQn9+vVDQEAAPDw8UL58eaxevdrk7XkMMysYXhCkJTRd21TuUBjLM0zNQ7nNd8xy+Fpi2LvvCrPb/v47d/3cuSP04+IiTVyMqRXnIvFUc8QiIyPh5+dncvvDhw/D29s743a3Pn36oHHjxiZvzyeb+dq2bQsiwm+//Wa07dChQ0FE2Lx5sxUiU4+AgABoNBq8evXK6t+dmpqKq1evYuPGjRg7dixatGiBd955x+CMt3feeQctWrTAuHHjsGnTJly7di3b25SrVasGIhJVPM8LOBfJ782bNwgNDcWdO3eg1+sRFRUFb29vHDx40KTteQz/8dXhr0BaguNkR7xMNP7MUcaYNEzNQ7nNd8xy+FpiWLt2QjHt3Lnc9bNxo9BP4cLSxMWYWnEuEk81R0xsUS4kJATDhw/PeP/kyRPY29vj7t27Jm3PJ5t59Ho9ChUqBEdHR5NWvqxTpw6IyORxYcDTp09BRFZZSSYuLg7Hjh3DwoUL8dlnn6FmzZpwcXHJUnxzcHBA1apV8cknn2D27Nk4ePAgnj59avL3JCQkwN7eHsWKFbPg3igT5yLb1KFDhyxLuGeHx1DwLOEZ7CfZg7SE6cenyx0OY3lKbvKQmHzHLIevJYalF+WmTctdP+PGCf1UrSpNXIypFeci8VRzxCIjI2Fvb4/ChQvD398fvXv3zvGP/qpVqyLiP+tZFy9eHDt37jTp+/hkM8+DBw9ARKhVq5bRtsnJyXB2doafn59qV860hH379oGI0Lt3b8n61Ol0uHPnDrZu3YrQ0FAEBwejRIkSBme/+fn5oUmTJvjiiy+wZs0aXLhwwaQCbE5OnjwJIkKHDh0k2iP14FxkexITE1G0aFFs3brVpPY8hoK6q+uCtISic4rKHQpjeY65eUhsvmOWw9cSw4KDhWJau3a566dDB6GfNm2kiYsxteJcJJ4ijlhKSgoSExOzfen1esTGxuLy5cvQ6XR49OgR2rdvj0aNGmXbZ6lSpbBjx45Mn1WtWhXr1q0z2F6r1UKj0WS8+GQzz9atW0FEGDRokNG258+fBxGhRYsWVohMPbRaLYgIS5YsMWv7N2/eICoqCsuXL8fAgQNRt25deHh4ZCm+2dnZoXz58ujatSumT5+Offv24eHDhxYpoM6dOxdEhOnTefbMf3Eusi16vR4ff/wxGjVqlO1CJHw9yWr/rf0ZizuceXhG7nAYy3OIKFNeMmXmmyn5jlkPX0sMW7JEKKb165e7fmrUEPrhx1wzljPOReIp4oh169Ytx5UYo6Ojs2zz+PFjEBGePXtmsM+qVatizZo1mT7jmXKWN3bsWBBRllmKhixbtgxEZHTBDpZZq1atQEQ4cybnP2z1ej0ePHiAPXv2YOrUqejSpQvKli2bUST498vT0xNBQUEYPHgwVq5cid9++w0JCQlW2iNh+WoiwqFDh6z2nUrBuch26PV69O/fH7Vq1UJ8fLzJ2+X1MdTpdPD9xhekJbTe0FrucBjLk8TmIXPzHbOcvH4tyc7Zs0IxrX373PVTpIjQz3/+fGSM/QfnIvFUe8T++usvEFG2t7CGhIRgxIgRGe+fPn3Kz5SzgsaNG4OIcPXqVaNt+/btCyLCnj17rBCZOuj1ehQoUABOTk6ZbhlNSkrC77//joiICAwfPhyNGjWCr6+vwSJ3yZIl0b59e4SFhWH79u24e/eu7P8CXrp0aRAR4uLiZI3DFnEusg16vR4DBw5E9erV8eLFC1Hb5vUxHPHTCJCW4DzFGQnJ1iv2M8b+ISYP5SbfMcvJ69eS7Dx9KhTTqlfPXT9ubkI/V65IExdjasW5SDzVHLEjR44gOjoaer0eT548QadOnRAUFJRt+8OHD8PHxwdnzpxBQkICPvvsM1591cJ0Oh08PT3h4eGBtLQ0o+0rV64MIsJff/1lhejUITo6OqO4NmvWLHz88ceoXLkyHBwcshTfXF1d8d5776Ffv35YvHgxTpw4YZP/2v38+XMQEcqXLy93KDaJc5FtGDRoEKpWrYq///5b9LZ5eQwfvXwEu0l2IC1hXtQ8ucNhLM8Sk4dyk++Y5eTla0lO9HrAzg6wt89dPxqNUJTjO7UZyxnnIvFUc8TmzJmDYsWKwc3NDUWKFMGnn36K2NjYjJ+vX78+y2qUy5YtQ9GiReHm5oaWLVvi8ePHJn8DeT2jAAAgAElEQVQfn2ziXbt2DUSU47P+0r1+/Rp2dnYoXry4FSJTptTUVFy5cgUbNmzAl19+iebNm2d7i3fRokXRqlUrjB8/Hps3b8b169dNKozaggMHDoCIEBISIncoNolzkfzu378PIoKzszPc3d0zXv379zdp+7w8hn139gVpCQHzA+QOhbE8zdQ8lNt8xywnL19LjHFyEgpq//rTUJQnT4TtnZykjYsxNeJcJB4fMTPxySbe2rVrQUQYM2aM0bbHjh0DEaFz585WiMz2vXjxAkePHsWCBQvQp08f1KhRA87Ozjk+a3HOnDk4dOhQts9VVIopU6aAiLBw4UK5Q7FJnIuUL6+O4eUnl2E/yR6e0z1x6+9bcofDWJ6WV/OQmvAYZi9/fqGoZuKjw7PYs0fY3s9P2rgYUyPOReLxETMTn2ziDR48GESEH3/80Wjb2bNng4jwzTffWCEy26HT6XD79m38+OOPmDBhAtq2bYvixYsbLLrlz58fTZs2xciRI/H999/j0qVL+OCDD0BEuHbtmty7Ipm2bduCiBAVFSV3KDaJc5Hy5cUx1Ol0CPouCKQlLDzNBXfG5JYX85Da8Bhmr2JFoahmwqLCBs2YIWxfoYK0cTGmRpyLxOMjZiY+2cSrXbs2iAj379832rZr164gIkRGRlo+MJm8fv0ap06dwrJlyzBgwAB88MEH8PDwyFJ8s7OzQ8WKFdG9e3fMmDED+/fvx6NHj6DX6zP1l5aWBnd3d3h6esq+MINU9Ho9ChUqBAcHByQmJsodjk3iXKR8eXEM++/uD9ISyiwsg1RdqtzhMJbn5cU8pDY8htn76COhqNa9u3nbL18ubD9hgrRxMaZGnIvE4yNmJj7ZxElOToaTkxMKFCiQpZhkSMmSJaHRaPDq1SsrRGdZer0ef/75J3bv3o0pU6agc+fOKFOmDDQaTZYCnJeXF+rXr48hQ4bg22+/xZkzZ/D27VuTvufKlSsgIlELlti6Bw8egIhQo0YNuUOxWZyLlC+vjWFcYhxcprqAtIQV51bIHQ5jDHkvD6kRj2H2Bg0Simrvv2/e9uPHC9uvWydtXIypEeci8fiImYlPNnHOnj0LIkLr1q2Ntn369CmIKMvCHEqQmJiI8+fPY/Xq1Rg2bBgaNmwIHx8fg7eflipVCh06dIBWq8XOnTszVg8213fffQciwpdffinhHslr27ZtICIMGDBA7lBsFuci5ctrYzh432CQltBhcwe5Q2GM/b+8lofUiMcwe0uXCkU1c9eP69xZ2P74cWnjYkyNOBeJx0fMTHyyibNkyRIQEbQmPMxh//79ICJ8+umnlg8sF2JjY3HgwAF888036NmzJypVqgR7e/ssxTc3Nze8//77+N///oclS5bg5MmTePnypeTxDBw4EESErVu3St63XMaOHQsiwurVq+UOxWZxLlK+vDSG5x6dg90kO/h+44tnCcpehIYxNclLeUiteAyzd+aMUFTz8DBve09PYfszZ6SNizE14lwkHh8xM/HJJk7v3r1BRNi/f7/RtlqtFkSEJUuWWCEy41JSUnD58mWsX78eY8aMwUcffYRChQoZnP1WrFgxtG7dGl999RV++OEH3LhxA2lpaVaJs2bNmiAi/Pnnn1b5Pmto0qQJiAiXL1+WOxSbxblI+fLKGKbqUuE1wwukJSw7u0zucBhj/5JX8pCa8RhmLzlZKKrZ2Zm3vYuLsD0/3pgx4zgXicdHzEx8sokTGBgIIsKzZ8ZnRrRu3RpEhDMy/HPUixcvEBkZifnz56N3796oXr06nJycshTfnJyc8O677+LTTz/F3LlzceTIEfz9999WjzddYmIiHB0dUahQoVzdAmtLdDodvLy84O7ubrXCphJxLlK+vDKGn2z7BKQluE9z58UdGLMxeSUPqRmPYc4cHITC2uvX4rZLThaKeSVKWCQsxlSHc5F4fMTMxCeb6V69egWNRoOSJUsabavX61GgQAE4OjoiKSnJYjHpdDrcvHkTW7Zswddff402bdrA39/f4Oy3AgUKoFmzZhg9ejTWrVuHP/74AykpKRaLzRynT58GEaFNmzZyhyKZ69evg4jQoEEDuUOxaZyLlC8vjOGNZzeg0WpAWsK6i/ykbMZsTV7IQ2rHY5gzb2+hKHf4sLjt7t4VtuNfRxkzDeci8fiImYlPNtNFRkaCiNC1a1ejbe/fvw8iwnvvvSfZ97969Qq//vorli5div79+6NOnTpwd3fPUnyzt7dHYGAgevTogZkzZ+Knn37C48ePFTHzbNGiRSAiTJ48We5QJLN27VoQEUaNGiV3KDaNc5Hy5YUxLL+oPEhLqLykstyhMMYMyAt5SO14DHNWurRQXJs9W9x2W7cK25nwZwxjDJyLzMFHzEx8splu1qxZICLMNuEquGXLFhARBg0aJPp79Ho97t+/j127dmHy5Mno2LEjSpcubXD2W758+dCgQQMMHToUq1atwrlz5/D27Vtzds8m9OrVC0SEn376Se5QJDNkyBAQEX744Qe5Q7FppuailJQUDB48GD4+PvDx8cGQIUOQmpr1FsInT56gZ8+eKFq0KDw9PfHuu+9i165dUofN/kXt15Nvz38L0hI0Wg3uvbgndziMMQPUnofyAh7DnI0cKRTXxK4d9tlnwnZBQZaJizG14VwkHh8xM/HJZrrOnTuDiHDs2DGjbceMGQMiwpo1a3Js9/btW5w9exarVq3C0KFD0aBBA3h7exsswJUuXRqdOnXC5MmTsWvXLty/f18Rs9/EqFChAohI1ufaSa127dogIty7x3/E58TUXDRx4kTUqFEDsbGxePz4MapVq4ZJkyZlaXf37l2Eh4cjJiYGOp0Ou3fvhpubG65fvy516Oz/qfl6kpyaDNepriAt4fPdn8sdDmMsG2rOQ3kFj2HOVq8WimsTJ4rbrlEjYbtevSwTF2Nqw7lIPD5iZuKTzXQlSpSAnZ0dXpvwZNWGDRuCiHD16lUAwuy3x48f46effsLMmTPRo0cPBAYGwt7ePkvxzc3NDXXq1EH//v2xdOlS/Prrr3j16pWld0928fHx0Gg0KFWqlNyhSCY5ORlOTk7Inz+/6gqoUjM1FxUrVgw7duzIeL9161YUL17cpG2rV69utFDOzKfm60nnLZ1BWoLXDC/odDq5w2GMZUPNeSiv4DHM2aFDQnHtk0/EbVe2rLDdzJmWiYsxteFcJB4fMTPxyWaaJ0+egIhQubLx5wilpaXBw8MDGo0GI0eORLNmzVCgQAGDs9/8/f3Rpk0bfP3119iyZQtu3bqVJ//gS0hIwOTJk0FE6N69u9zhSObcuXMgIrRs2VLuUGyeKbnoxYsXICJER0dnfHbv3j0QEeLj43Pc9smTJ3BxccHZs2dzGyrLhlqvJ5f/ugzSEkhL2Hp1q9zhMMZyoNY8lJfwGObs+HGhuObtLW47Hx9hu59/tkxcjKkN5yLx+IiZiU820+zduxdEhL59+xpt++DBgyzFNycnJ1SvXh19+vTB/PnzERkZiefPn1shctuj1+tx79497NixA1qtFh06dICPj0/Gsdq2bZvcIUpm6dKlICKEhYXJHYrNIyJoNJqMl1arzdIm/f+tuLi4jM/SC3UxMTHZ9p2UlITGjRujF9+zYVFqvZ6Uml8KpCXUXFFT7lAYY0aoNQ/lJTyGOXv5UiiuubqK287RUdjuX79CMcZywLlIPD5iZuKTzTRhYWEgIixbtsxoW71ej9DQUIwZMwbr16/H5cuXkZKSYoUobc/bt29x5swZrFy5EoMHD0ZQUBC8vLyyFC0dHR0REhKiullMffr0ARFh7969codi88TMlLt//37GZ8ZmyiUnJ6Nt27Zo3bo1kpOTJYuXZaXG68mCqAUgLcFukh0evXwkdziMMSPUmIfyGh5D4woXBhwcgLQ009qnpgoFOTs7y8bFmJpwLhKPj5iZ+GQzTcuWLUFEOH/+vNyh2CS9Xo+HDx9i3759mD59Orp164YKFSrAzs4uSwHO3d0dH3zwAQYMGIDly5cjKioKb968kXsXLKJSpUogIjx58kTuUGyemGfK7dy5M+P9tm3b4O/vb7BtcnIygoOD0bx5cyQlJUkSJ8ue2q4nKWkpCJgXANIShu0fJnc4jDETqC0P5UU8hsbVqSMU2XK4SSCT8+eF9u7ulo2LMTXhXCQeHzEz8clmnF6vR/78+eHs7JxnZ7z9W3JyMi5evIi1a9di5MiRaNq0Kfz8/Aw+M69EiRIIDg5GaGgotm7ditu3b+eZZ+a9evUKGo0GJUqUkDsURTA1F4WGhqJmzZqIjY1FbGwsqlevbnD11ZSUFLRr1w5NmzZFYmKi1OEyA9R2PQn/NRykJTRZ2yTP5C3GlE5teSgv4jE0rlMnoci2f79p7VesENpn82+YjDEDOBeJx0fMTHyyGZd+e1ydOnXkDsXqnj17hkOHDmHOnDn45JNPULVqVTg6OmYpvjk7O6NmzZro27cvFixYgKNHj+LFixdyhy+ro0ePgojQpUsXuUNRBFNzUUpKCgYNGgRvb294e3tj8ODBSE1NBQC0aNEC06ZNA/DP8XdxcYG7u3vGK/3nTHpqup5ceXIFblPd4DjZETee3ZA7HMaYidSUh/IqHkPjatcWimyDB5vWfuhQof1771k2LsbUhHOReHzEzMQnm3E//PADiAhDhw6VOxSLSUtLw7Vr17Bp0yaMGzcOLVu2RJEiRQzOfitcuDCaN2+OL7/8Ehs3bsTVq1cziiLsH+Hh4SAizJo1S+5QFIFzkfKpaQyLzS0G0hIG7BkgdyiMMRHUlIfyKh5D47p1E4pszZub1r5FC6E9/zsxY6bjXCQeHzEz8clm3KhRo0BEWLdundyhSCI+Ph7Hjx/HokWL0K9fP7z33ntwcXHJUnxzcHBAlSpVEBISgvDwcPzyyy/8bDQRunTpAiLC0aNH5Q5FETgXKZ9axnD3jd0gLcF+kj2evOacx5iSqCUPWduOHTtQpkwZuLq6ol69erh+/Xq2bSMiImBnZ5dpFvqqVasytdFqtShYsCA8PT3Rs2dPvH792uRYeAyNCwsTimyBgaa1r1RJaB8aatGwGFMVqXORLeVZS+HsbSa+8BnXoEEDEBFu3FDWLUw6nQ53797F9u3bMXHiRLRr1w4BAQEGZ7/5+vqicePGGDFiBCIiIvD777/zg/FzKSAgABqNBq9evZI7FEXgXKR8ahjDpNQklF1YFqQlrD6/Wu5wGGMiqSEPWdvNmzfh7u6OvXv3IjExEaGhoShXrly2d0FERESgZs2a2fb33XffoUSJErh16xbi4uLQvHlz9OnTx+R4eAyN27FDKLLlz29a+8qVhfZ79lg2LsbURMpcZGt51lI4e5uJL3w5S0tLg7u7O/Lly2fTD/pOSEjA6dOnsWLFCgwaNAj16tWDp6dnluKbRqNBuXLl0KVLF0ybNg179+5FTEwM9Hq93LugKk+fPgURoVKlSnKHohici5RPDWM4KXISSEtovaE150XGFEgNecjaJkyYgHbt2mW8T0lJgY+PD44cOWKwvbE/FoOCgjBv3ryM9+fOnYOzszPevn1rUjw8hsY9fiwU2ZycTGufPlPu5UvLxsWYmkiZi2wtz1oKZ28z8YUvZ5cvXwYRoWnTpnKHAkBYCTYmJgZ79+7FtGnT0LVrV5QvXx4ajSZLAc7T0xP16tXDoEGDsGLFCpw+fRpv3ryRexfyhH379oGI0Lt3b7lDUQzORcqn9DE8fv84NFoNHCc74u6Lu3KHwxgzg9LzkByCg4MRFhaW6bMGDRpg/vz5BttHRETA1dUV+fPnR6lSpTBixIhMt015eXkhMjIy431aWhrs7Oxw8eJFk+LhMTSNRiMU2ozNGdDrAQ8PwNvbOnExphZS5iJby7OWwtnbTHzhy9nq1atBRBg/frzVvzspKQkXLlzAmjVrMGLECDRu3Bi+vr4Gbz8NCAhAu3btMHHiRGzbtg137tyx6Zl9ahcWFgYiwtKlS+UORTE4Fymf0sewUHghkJbQeE1juUNhjJlJ6XlIaikpKUhMTMz2pdfr0aRJk0wzLgDhD8gpU6YY7PPu3bsZv2fevn0b9erVy/SPkHZ2drhw4UKmbby8vHDixAmD/Wm1Wmg0mowXj6FpXF2Fopyxp+vcvy+0K13aOnExphbpd5mlv7RarcF2Ssiz1sLZ20x84cvZgAEDQETYvn27Rb/nyZMn+OWXXxAeHo6QkBBUqVIFDg4OWYpvLi4uqFWrFvr164dFixbh+PHjiI+Pt2hsTLy6deuCiHD27Fm5Q1EMzkXKp+QxnHB4AkhLcJjsgLjEOLnDYYyZScl5yBK6detm8B9z01/R0dEIDg7O8sdmTjM4/uvUqVPw8PDIuOXfy8sr0yJXOp2OZ8pZwDvvCMU2Y+vQbdwotCtc2DpxMaYWpuYiJeZZS1FN9u7fv3+mVTZcXV1BRDh//rzB9qaszJETvvDlrEaNGiAiPHz4UJL+UlNTcfXqVWzcuBFjx45FixYt8M477xj8H7hIkSJo2bIlxo0bh02bNuHatWvZPgyS2Y6jR4+CiBAYGMizFUXgXKR8Sh3DZwnP4DDZAaQlTDlm+F8sGWPKoNQ8JKcJEyagffv2Ge9TUlLg6+uLw4cPm7T96dOnM/2xGBQUlOkPzfPnz/Mz5Szg3XeFYtuYMTm3W7VKaNeypXXiYkwtpH6mnC3lWUtRbfaePXs2ypYtm+3PjT0E0Bi+8GUvMTERDg4OeOedd8zaPi4uDseOHcPChQvRt29f1KxZEy4uLlmKbw4ODqhatSo++eQTzJ49GwcPHsTTp08l3htmLY0bNwYRYdOmTXKHoiici5RPaWN46a9L8J/rn1GQKzKniNwhMcZySWl5yBbcuHED7u7u2L9/P5KSkhAWFoayZctm+w/B+/fvx+PHjwEA0dHRqF+/PkJCQjJ+vnr1agQEBOD27duIj49Hy5YtefVVC2jXTii2/evZ8QbNmye0mz3bOnExphZS5iJby7OWotrsHRgYiJkzZ2b7cy7KWU5UVBSIKNNKKYak3+u9detWhIaGIjg4GCVKlDA4+83Pzw9NmjTByJEjsXbtWly8eBHJyclW2iNmacePHwcRoUKFCkhLS5M7HEXhXKR8ShrDw/cOZxTjSEtwnuKM848Nz0hnjCmHkvKQLdm+fTvKlCkDFxcX1K1bF9evX8/42fr16xEYGJjxfvTo0ShUqBBcXV3h7++PYcOG4dWrV5n602q1KFCgADw8PNCjR48sP88Jj6FpxowRim3vvptzuxEjhHY//miduBhTC6lzkS3lWUtRZfY+deoUHBwcEBsbm20bYytzGMMXvuwtXLgQRISpU6dmfPbmzRtERUVh+fLlGDhwIOrWrQsPD48sxTc7OztUqFAB3bp1w/Tp07Fv3z48fPgwY8opU6cPP/wQRIT169fLHYricC5SPqWM4Q9XfoDdJDuQluA/1x/nH59Hqo4fDcCYGiglD7Hs8RiaZvNmodhWpUrO7SpXFtr98ot14mJMLTgXiaeII2bKyhz/1rdv30z3HhtibGWO/+IVjkwXEhICIkLnzp3RuXNnlC1bNuOY/fvl5eWFoKAgDB48GCtXrsRvv/2GhIQEucNnVvbrr7+CiHKcisyyx7lI+ZQwhsvOLMuYHVd5SWUkp/JMZcbURAl5iOWMx9A0z56ZNlMufZXWa9esExdjasG5SDxFHDFTVuZI9/r1a3h4eGDPnj2ivuO/K3MYwydb9mrVqpVljEqWLIn27dtDq9Vix44duHfvHs9+y6PevHmD06dPY8WKFRg0aBBKliwJIsLatWvlDk2ROBcpn62P4e4bu+E8xRmkJTSKaMQLsTCmQraeh5hxPIam0esBNzfAxyfndhqNUJTjSx5j4nAuEk91R+zbb79FkSJFRD+X6r8rcxjDJ1v2tm/fjgEDBmDx4sU4ceIEXr58KXdITAZ6vR4xMTHYu3cvpk6dii5duqBcuXIGZ03Wr1+fZ8mZiXOR8tnyGK46vwr2k+yh0WoQfjJc7nAYYxZiy3mImYbH0HQBAULB7ckTwz9/8kT4uZOTdeNiTA04F4mnuiNWp04dfPXVV0bbGVuZwxg+2Rj7R1JSEn7//XdERERgxIgRaNy4MXx9fQ3ObA0ICEC7du0QFhaG7du34+7duzzzJhc4FymfrY5hmw1tQFqCwyQHbLrMqyIzpma2moeY6XgMTZc/v1B027HD8M937RJ+7udn3bgYUwPOReKp6ohdvXoVGo0Gd+/ezfIzc1bmyAmfbCyvevLkCX755ReEh4cjJCQEVapUgYODQ5bim4uLC9577z3069cPixYtwvHjxxEfHy93+KrDuUj5bG0M9Xo9Rh4YmfEMuQWnF8gdEmPMwmwtDzHxeAxN16iRUHSLiDD880mThJ9XqGDVsBhTBc5F4vERMxOfbEztUlNTcfXqVWzcuBFffvklmjdvjsKFCxuc/VakSBG0bNkS48aNw6ZNm3Dt2jW+HdVKOBcpny2NYaouFX129gFpCd4zvRHxe4TcITHGrMCW8hAzD4+h6aZPF4puS5YY/nmPHsLPmzWzblyMqQHnIvH4iJmJTzamJnFxcTh69CgWLFiAvn37ombNmnBxcclSfHN0dETVqlXxySefYM6cOTh06BCePXsmd/h5Guci5bOVMXzx9gUC5geAtIRic4vh6tOrcofEGLMSW8lDzHw8hqbbsEEoun35peGf16kj/HzgQOvGxZgacC4Sj4+YmfhkY0qk0+lw+/ZtbN26FaGhoQgODkaJEiUMzn7Lnz8/mjZtipEjR2Lt2rW4ePEikpOT5d4F9h+ci5TPFsbwz/g/kW9GPpCW4DHdA3/G/yl3SIwxK7KFPMRyh8fQdHv3CkW3WrUM/7xEiZxn0jHGsse5SDw+Ymbik43Zujdv3iAqKgrLly/HgAED8MEHH8DDwyNL8c3Ozg4VKlRAt27dMH36dOzbtw8PHz40eSViJi/ORcon9xhe/usyXKe6grQE92nuuPHshqzxMMasT+48xHKPx9B0Z84IRTcPD8M/9/QUfn76tHXjYkwNOBeJx0fMTHyyMVuh1+vx4MED7N69G1OmTEHnzp1RtmxZaDSaLAU4Ly8vBAUFYfDgwfj2229x5swZJCQkyL0LLBc4FymfnGN4NPooHCc7grQE32988ejlI9liYYzJh68lysdjaLqUFKHoZmdn+Od2dsLP+QYRxsTjXCQeHzEz8cnG5JCYmIjz58/ju+++w/Dhw9GoUSP4+PgYvP20ZMmS6NChA7RaLXbs2IF79+7x7DcV4lykfHKN4Y9Xf4TdJLuMZ8i9THwpSxyMMfnxtUT5eAzFcXAQCm8v/3Ppe/1a+NzBQZ64GFM6zkXi8REzE59szNL++usv/Pzzz5g1axZ69uyJSpUqwd7ePkvxzdXVFbVr18bnn3+OxYsX48SJE3j5398wmGpxLlI+OcZw8W+LQVoCaQmBiwORnMrTARjLy/haonw8huJ4ewvFt0OHMn9+86bweZUq8sTFmNJxLhKPj5iZ+GRjUklNTcWVK1ewfv16jBkzBh999BEKFSpkcPZb0aJF0apVK4wfPx4//PADbty4gbS0NLl3gcmIc5HyWXsMQw+HZhTkGnzXADqdzqrfzxizPXwtUT4eQ3HKlBGKb7NmZf78yBHh81695ImLMaXjXCQeHzEz8cnGzPHixQtERkZi/vz56NOnD2rUqAFnZ+csxTdHR0dUq1YNn376KebOnYvDhw/j2bNncofPbBDnIuWz5hh+vuvzjIJcpx86We17GWO2ja8lysdjKE7DhkLxrXfvzJ9HRAifh4bKERVjyse5SDw+Ymbik43lRKfT4datW/jxxx8xYcIEtGnTBv7+/gZnvxUoUAAffvghRo0ahe+//x6XLl1CMj9ZlpmIc5HyWWsMZ56YmVGQG7JviFW+kzGmDHwtUT4eQ3H69BGKbw0aZP68ZUvh8zFj5ImLMaXjXCQeHzEz8cnG0r1+/RqnTp3C0qVL0b9/f9SpUwfu7u5Zim92dnaoWLEiunfvjhkzZmD//v149OgRL77AcoVzkfJZegz1ej3GHhwL0hJcprpg+vHpFv0+xpjy8LVE+XgMxZk9Wyi+lS6d+fOyZYXPv/lGnrgYUzrOReLxETMTn2x5j16vx/3797Fr1y5MnjwZnTp1QpkyZaDRaLIU4PLly4f69etj6NChWLVqFc6ePYu3b9/KvQtMhTgXKZ8lxzAxNRHVl1cHaQm+3/giKibKYt/FGFMuvpYoH4+hOIcPC8U3b+/MnzdqJHx+6ZI8cTGmdJyLxOMjZiY+2dQtMTER586dw+rVqzFs2DA0aNAA3t7eBm8/LV26NDp27IhJkyZh586diI6O5tlvzGo4FymfpcYwMTURgUsCQVqC61RXXH161SLfwxhTPr6WKB+PoTivXwvFNweHzJ+XKiV8npgoT1yMKR3nIvH4iJmJTzb1iI2NxYEDBzBz5kz06NEDgYGBsLe3z1J8c3Nzw/vvv4///e9/WLJkCU6ePImXL1/KHT7L4zgXKZ8lxjA+MR4NIxqCtASvGV749c9fJf8Oxph68LVE+XgMxbOzEwpw6Y9yTksTinTvvCNvXIwpGeci8fiImYlPNuVJSUnBH3/8gXXr1mH06NFo1qwZChYsaHD2W7FixdC6dWt89dVX2LJlC27evIm0tDS5d4GxLDgXKZ/UY3j5r8uouLgiSEuotbIWnr55Kmn/jDH14WuJ8vEYipf+/Lh794T3Z88K73185I2LMSXjXCQeHzEz8clm254/f44jR45g3rx56N27N9599104OTllKb45OTmhevXq6N27N+bNm4cjR47g77//ljt8xkzGuUj5pBzDY9HH4DjZEaQlBK0OwqukV5L1zRhTL76WKB+PoXjduwtFuBMnhPfLlwvv/f3ljYsxJeNcJB4fMTPxyWYb0tLScPPmTWzZsvM/5i8AABb3SURBVAVfffUVWrdujWLFihmc/VawYEE0a9YMo0ePxrp16/DHH38gJSVF7l1gLFc4FymfVGO49epW2E2yA2kJRecUxctEvr2eMWYavpYoH4+heGPHCkW49euF90OGCO9r15Y3LsaUjHOReHzEzMQnm/W9evUKJ0+exJIlS/C///0P77//Ptzc3LIU3+zt7REYGIgePXpg5syZOHDgAGJjY+UOnzGL4FykfFKM4ZIzS6DRakBaQuDiQCSnJksQGWMsr+BrifLxGIo3apRQhOvYUXjfvLnwvmtXeeNiTMk4F4nHR8xMfLJZjl6vR3R0NHbu3IlJkyahY8eOKFWqlMHZb/ny5UPDhg0xbNgwrF69GufOnUMiL5fE8hDORcqX2zGceGQiSEsgLaH+d/Wh0+kkiowxllfwtUT5eAzF02qFIlyFCsL7wEDhfViYrGExpmici8TjI2YmPtmk8fbtW5w9exarVq3CkCFDUL9+feTLl89gAa5MmTLo1KkTJk+ejF27duH+/fvQ6/Vy7wJjsuJcZBtSUlIwePBg+Pj4wMfHB0OGDEFqaqpJ2+ZmDD/f/XlGQa7j5o5m98MYy9vE5KHc5DtmOfz7gHhRUUIRrkkT4X2BAsL77dvljYsxJeNcJB4fMTPxySaOXq/Ho0ePsH//fsyYMQPdu3dHxYoVYWdnl6X45u7ujjp16qB///5YunQpTp06hdevX8u9C4zZJM5FtmHixImoUaMGYmNj8fjxY1SrVg2TJk0yaVtzxzB4Y3BGQW7QvkFm9cEYY4C4PJSbfMcsh38fEO/168wz5ZydhfePHskbF2NKxrlIPD5iZuKTLXvJycm4dOkSvv/+e4waNQoffvghChQoYHD2m7+/P9q2bYsJEybgxx9/xK1bt/jWK8ZE4FxkG4oVK4YdO3ZkvN+6dSuKFy9u0raiZqikpSD6RTTeXf5uRkFu0lH+Y5gxljti8lBu8h2zHP59wDy+voCLC3DmjFCQ02jkjogxZeNcJB4fMTPxyWaYXq+Hr69vluKbs7MzatSogT59+mD+/PmIjIzE8+fP5Q6XMcXjXCS/Fy9egIgQHR2d8dm9e/dARIiPjze6vZgx/O3hbxnFOI1WgxXnVpgTMmOMZWJqHsptvmOWw78PmMfHRyjGpb+KFpU7IsaUjXOReHzEzMQnW/batWuHjz76CGPGjMH69etx+fJlpKSkyB0WY6rEuUh+Dx48ABEhLi4u47P0P1xjYmKytNdqtdBoNBkvMWN45ckVVFxcEYVnF8ax6GOSxM8YY0SUKS9ptVqD7cTmO2Y9/PuAeQYMANzdhZePD3DqlNwRMaZsnIvE4yNmJj7ZGGO2gHOR/NL/IL1//37GZ5aaKccYY5YgdqacufmOWQ5fSxhjtoBzkXh8xMzEJxtjzBZwLrINxYoVw86dOzPeb9u2Df7+/iZty2PIGJOb2GfKmZvv1GbHjh0oU6YMXF1dUa9ePVy/fj3bti1atIC7u3vGy9nZGRqNBs+ePQMAhIWFwd7ePlObgwcPmhwLX0sYY7ZA6lxkS3nWUhSTvS9fvoyPPvoIfn5+ICKDq3EuX74c/v7+cHNzQ6tWrfD48eMc+9RqtShYsCA8PT3Rs2dPUSt88oWPMWYLOBfZhtDQUNSsWROxsbGIjY1F9erVLb76KmOMSUVMHspNvlOTmzdvwt3dHXv37kViYiJCQ0NRrlw5pKammrT9kCFD0KxZs4z3YWFh6NSpk9nx8LWEMWYLpMxFtpZnLUUx2fvGjRtYtWoV9uzZY7Aod/jwYXh7e+P06dN48+YN+vTpg8aNG2fb33fffYcSJUrg1q1biIuLQ/PmzdGnTx+T4+ELH2PMFnAusg0pKSkYNGgQvL294e3tjcGDB5v8CwOPIWNMbqJWgc5FvlOTCRMmoF27dhnvU1JS4OPjgyNHjhjdNikpCT4+Pti8eXPGZ1yUY4ypgZS5yNbyrKUoLntHR0cbLMqFhIRg+PDhGe+fPHkCe3t73L1712A/QUFBmDdvXsb7c+fOwdnZGW/fvjUpDr7wMcZsAeci5eMxZIzJjfOQeMHBwQgLC8v0WYMGDTB//nyj227cuBF+fn5ISkrK+CwsLAyenp7w9fVF+fLlMXnyZFHFTh5DxpgtkDIX2VqetRTFZe/sinJVq1ZFREREps+KFy+e6ZkX/+bl5YXIyMiM92lpabCzs8PFixdNioMvfIwxW8C5SPl4DBljcuM8lFlKSgoSExOzfen1ejRp0iTTP/ADwh+QU6ZMMdp/kyZNMGLEiEyfXblyBQ8fPoROp8OFCxdQvnz5bFfBBXK3kjdjjFmKqat5KyHPWotNZG9TBiRddkW5Uv/X3r3GRlG+fRxfitTS3dItK6DpgQZBAiTlUI0JpC2SGNs/SQU1gQYpRglgi4rWN0pLC4rxBQiRoAkBASF4oi0x2MQYkNQIaELBaGgLSJFCm3BqC5SWhd3f84J0Hxba7q7S2Z3p95PMi52ZLvd1zz33tXsxOzNqlCorK/3WpaWlaceOHd3+m1FRUTp69KjfuiFDhuiXX37pdn8SH4BIxFxkfhxDAOHGPORvzpw5stlsPS4NDQ3Kzc2978tcMFdwnD59WgMGDNCff/7Z6367du3ShAkTgm4zxxBAJAh2LjLjPNtXImL2DuaAdOntSrlt27b5rQt0pdyBAwd8rz0eD1fKATAd5iLz4xgCCDfmodAVFxdr1qxZvtdut1tDhw7Vvn37ev275cuX6+mnnw74/l9//bXGjx8fdHs4hgAiwYO+p1wkzbN9xXSzd2/3lLv78sQLFy4EvKfc3RXWI0eOcE85AKYT7FzkdrtVWFiohIQEJSQkaOnSpT3eQ6GtrU15eXmKi4vT8OHDtWrVqgfZZNyDfAIg3JiHQldXVye73a6qqip1dnaqtLRUY8aM6fX+RLdv31ZiYqI2bdp037bKykpdvnxZ0p2fWI0bN07FxcVBt4djCCASPMi5KNLm2b5imtnb6/Wqo6NDdXV1stlsunTpkt9PW/ft26eEhAT9/vvvam9v12uvvdbr01e3bNmi1NRUnTx5Uq2trcrJyeHpqwBMJ9i5aMWKFZoyZYqam5vV1NSkiRMnauXKld3um5+fr5ycHLW0tKi+vl7Jycnavn37g2w27kI+ARBuzEP/TkVFhUaPHq2YmBhNnTpVtbW1vm07d+687wqMH374QXa7XVevXr3vvfLy8uRyuRQbG6tRo0aptLRUbrc76LZwDAFEggc9F0XSPNtXTDN7d10h19tPWz///HMlJiYqNjZWOTk5ampq8m1bvXq1srOz/d6zrKxMw4YNk8PhUF5eXrcHrickPgCRINi5KCkpye++m7t371ZKSsp9+7W3tys6Otrvnptr1qxRZmbmf28sukU+ARBuzEPmxzEEEAmYi0JHj/1LDDYAkSCYuejKlSv3/SfG6dOnZbPZ1Nra6rdvTU2NoqKi5PF4fOv2798vp9P5wNoMf+QTAOHGPGR+HEMAkYC5KHT02L/U24MpWFhYWIxcAj12/OzZs7LZbGppafGt6yrUNTY2+u1bXV2t+Ph4v3U1NTUaOHBg30ymCPv4YWFhYbHZ+EpgduEePywsLCxdC0JDj6FHAwYMCHcTTIF+Cow+Ck5f9VNXAe7MmTO+dVwpZ25WPaeIy1yIy3ysHBtCZ9XxQFzmY9XYiAvBoCiHHnGyBYd+Cow+Ck5f9lNSUpL27Nnje11eXq7k5OT79uu6p9yxY8d869auXauMjIw+axtCZ9VzirjMhbjMx8qxIXRWHQ/EZT5WjY24EAyKcugRJ1tw6KfA6KPg9GU/lZSUKD09Xc3NzWpubtbkyZN7fPrq/PnzNXPmTLW2turEiRNKSUnh6asRxqrnFHGZC3GZj5VjQ+isOh6Iy3ysGhtxIRgU5dCj7u5NhfvRT4HRR8Hpy35yu90qKCiQ0+mU0+lUYWGhbt26JUnKzs7W6tWrffu2tbVp7ty5cjgcGjZsWI/FO4SPVc8p4jIX4jIfK8eG0Fl1PBCX+Vg1NuJCMCjKAQAAAAAAAAajKAcAAAAAAAAYjKIcAAAAAAAAYDCKcgAAAAAAAIDBKMoBAAAAAAAABqMoBz+VlZUaPXq0Bg8erGnTpqm2trbHfbdu3aqoqCjZ7XbfsnnzZgNbawy3263CwkIlJCQoISFBS5cu9T218l5tbW3Ky8tTXFychg8frlWrVhnc2vAIpY+ysrIUHR3tN246OzsNbrHxNmzYoPT0dEVHR+vFF1/sdd/+Oo4QWCjnWqTobewHGuvnz59XTk6OYmNjlZycrE2bNhnZ9F51dnZq4cKFSk1NlcPh0NixY7VlyxbfdrPG9t577yklJUVxcXF67LHH9NZbb+nmzZu+7WaN624XL16Uy+VSenq6b52Z41qwYIEGDRrkl1fr6+t9280cG/qGGXOJZM18YtVcIlk/n5BLzBNbpKMoB5/6+nrZ7Xbt3btXHR0dKikp0RNPPNFjkt66davfJGRVK1as0JQpU9Tc3KympiZNnDhRK1eu7Hbf/Px85eTkqKWlRfX19UpOTtb27dsNbrHxQumjrKwsbdiwweAWhl95ebkqKytVWFgYsCjXX8cRAgvlXIsUvY39QGM9MzNTCxcu1PXr13X48GHFx8frwIEDRofQrevXr6ukpESnTp2S1+vVoUOH5HQ69dNPP0kyb2x1dXW6evWqpDtfOKZPn67Vq1f7tps1rrvNmzdPzzzzjN9nGDPHtWDBAhUVFfW43cyxoW+YMZdI1swnVs0lkvXzCbnEPLFFOopy8CkuLtbzzz/ve+12u5WQkKD9+/d3u39/KcolJSWpsrLS93r37t1KSUm5b7/29nZFR0fr6NGjvnVr1qxRZmamIe0Mp2D7SOq/RbkupaWlvRbl+vM4QmChnGuR5t6xH2isnzp1SgMHDtTFixd925cuXar8/HzjGh2i2bNnq6yszDKxXbx4UTNmzNCrr74qyRrH7Mcff1RWVpbfZxizx9XbFymzx4a+YeZcIlk/n1gtl0jWyyfkEnPFFukoysEnNzdXpaWlfusyMzO1fv36bvffunWrBg8erEceeUSjRo3SsmXLdO3aNQNaapwrV67IZrOpoaHBt+706dOy2WxqbW3127empkZRUVHyeDy+dfv375fT6TSquWERSh9Jd4pyLpdLQ4cO1ZQpU/Tdd98Z2NrwC1SU66/jCIGFeq5FmnvHfqCxXlFRoZEjR/q9xxdffKFJkyYZ0t5QdXR0KDExUbt37zZ9bJ999pkcDodsNptcLpeOHDkiyfzHrL29XWPHjtXx48f9vkiZPa4FCxb4foY4YcIEbdy40bfN7LHhwTN7LpGsnU+slEska+YTcskdZoot0lGU6yfcbrc6Ojp6XLxer2bMmKF169b5/V1ubq4++OCDbt/z77//1qlTp+TxeHTy5ElNmzZNr7zyihHhGObs2bOy2WxqaWnxrev6MNPY2Oi3b3V1teLj4/3W1dTUaODAgYa0NVxC6SNJOnTokNra2uR2u/X9998rNjZWP//8s4EtDq9ARbn+Oo4QWKjnWqS5d+wHGutffvmlJk6c6Le9oqJCjz/+eN83NkRer1fz5s3T9OnT5fF4LBNbXV2dSkpKdP78eUnmP2ZFRUV6//33Jflf7W/2uI4cOaILFy7o9u3bqq6u1ogRI7Rt2zZJ5o8ND57Zc4lk3Xxi1VwiWSufkEvuMFNskY6iXD8xZ84c2Wy2HpeGhgbl5uaqrKzM7+96u1LuXgcPHpTD4ZDX6+2LEMKi60PKmTNnfOu4Us5fKH3UnUWLFqmwsLAvmxhRuFIO/9Z/PdfC7d9c2ZCamur3HpH4v65er1eLFy/Wk08+6TsOVolNkr799ls999xzkswdV01NjcaMGaMbN25IUshXN0RqXN356KOPNHPmTEnWiw3/ndlziWTNfGL1XCJZI5+QS6wRW6ShKAef4uJizZo1y/fa7XZr6NCh2rdvX1B/f/jwYcsV5aQ7993Ys2eP73V5ebmSk5Pv26/rt/bHjh3zrVu7dq0yMjIMaWc4BdtH3VmyZIkKCgr6qmkRJ9h7yvXHcYTA/su5Fm493QOop7HedX+SS5cu+ba/8cYbmj9/vnGNDsDr9er111/X5MmTdeXKFd96K8TWZdeuXRo1apQkc8e1bt06xcTEyOVyyeVyyeFw6KGHHpLL5dI///xj2ri68/HHH+t///ufJHMfM/QdM+cSyXr5pD/kEska+YRcYo3YIg1FOfjU1dXJbrerqqpKnZ2dKi0t1ZgxY3p8+mpVVZWampokSQ0NDcrIyNDLL79sZJMNUVJSovT0dDU3N6u5uVmTJ0/u8QlV8+fP18yZM9Xa2qoTJ04oJSWlXzw1M9g+amlpUVVVlW7cuKHbt2+rqqpKdrvd94QpK7t165Y6Ojq0fPlyzZ49Wx0dHX6Phb9bfx1HCCyU+ShS9Db2A431jIwMLVq0SO3t7frtt9/kdDoj6kleBQUFSktL8/sQ2sWssW3cuFGXL1+W1+vVX3/9pQkTJmjJkiW+7WaN69q1a2psbPQtn3zyidLS0tTY2CiPx2PauCTpm2++0dWrV+X1enXw4EE9+uij2rx5s2+7mWND3zBjLpGsm0+smEska+YTcok5Y4t0FOXgp6KiQqNHj1ZMTIymTp2q2tpa37adO3dq/PjxvtfvvvuuRowYocGDBys5OVlvvvmm77HXVuJ2u1VQUCCn0ymn06nCwkJfoTI7O9vv0d5tbW2aO3euHA6Hhg0bZooPOA9CsH104cIFPfXUU4qLi9OQIUM0adIkffXVV+FsumFKS0vv+9l4VlaWJMYRgtfbuRapehv7gcb6uXPnlJ2drdjYWCUlJWnTpk1hiKB7Z86ckc1m08MPPyy73e5bFi9eLMm8seXk5Mjlcik2NlapqakqKipSe3u7b7tZ47rXvU+QN3NcGRkZio+Pl8Ph0Lhx4/Tpp5/6bTdzbOgbZswlkjXziVVzidQ/8gm55P9FcmyRjqIcAAAAAAAAYDCKcgAAAAAAAIDBKMoBAAAAAAAABqMoBwAAAAAAABiMohwAAAAAAABgMIpyAAAAAAAAgMEoygEAAAAAAAAGoygHAAAAAAAAGIyiHAAAAAAAAGAwinIAAAAmlZaWpr1794a7GQAAkyOfAOFBUQ4AAMCE3G63Bg0apHPnzoW7KQAAEyOfAOFDUQ4wWGNjo1566SUNHz5cDodDaWlpOn/+fLibBQAwkbNnzyomJkYDBgyQ3W6X3W7X8ePHw90sAIDJkE+A8KIoBxjs2Wef1YcffqibN2/K7Xarurpat27dCnezAAAms2PHDmVlZYW7GQAAkyOfAOFDUQ4wWGpqqsrKynT9+vVwNwUAYGJvv/22li1bFu5mAABMjnwChA9FOcBgv/76q3JycpSQkKAXXnhBJ0+eDHeTAAAmlJWVpW3btoW7GQAAkyOfAOFDUQ4Ik7a2Ns2aNUv5+fnhbgoAwITi4+P1xx9/hLsZAACTI58A4UNRDjBQeXm5amtr5fF41NzcrGnTpmn9+vXhbhYAwGTcbreioqL4EgUA+E/IJ0B4UZQDDPTOO+8oMTFRsbGxGjlypMrKyuTxeMLdLACACRUVFWnIkCFyOBy6dOlSuJsDADAp8gkQPhTlAAAAAAAAAINRlAMAAAAAAAAMRlEOAAAAAAAAMBhFOQAAAAAAAMBgFOUAAAAAAAAAg1GUAwAAAAAAAAxGUQ4AAAAAAAAwGEU5AAAAAAAAwGAU5QAAAAAAAACDUZQDAAAAAAAADEZRDgAAAAAAADAYRTkAAAAAAADAYBTlAAAAAAAAAINRlAMAAAAAAAAMRlEOAAAAAAAAMBhFOQAAAAAAAMBg/wd7VdFZf4Z36gAAAABJRU5ErkJggg==\" width=\"1399.1833333333334\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0cae1d743e8042e7915c9f95c59453ce", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, continuous_update=False, description='s1', max=4.0, min=-4.0), Ou…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bb6ccc833ae94df7ab2af3122a4d66fd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=50.0, continuous_update=False, description='E_b', min=0.5, step=4.975)…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def init():\n", + " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n\n", + " s0 = 0\n", + " t0 = 0\n", + " Sig_record = []\n", + " Eps_record = []\n", + " iter_record = []\n", + " t_arr = []\n", + " s_t = []\n", + " Eps_n = np.zeros((len(Eps),), dtype=np.float_)\n", + " \n", + "def get_response_i(s1, margs, n_steps = 60, k_max=20):\n", + " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n\n", + " Eps_k = np.copy(Eps_n)\n", + " t1 = t0+n_steps+1\n", + " ti_arr = np.linspace(t0, t1, n_steps+1 )\n", + " si_t = np.linspace(s0,s1,n_steps+1)\n", + " for s_n1 in si_t:\n", + " lam_k = 0\n", + " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", + " f_k_norm = np.linalg.norm(f_k)\n", + " f_k_trial = f_k[-1]\n", + " k = 0\n", + " while k < k_max:\n", + " if f_k_trial < 0 or f_k_norm < 1e-6:\n", + " Eps_n[...] = Eps_k[...]\n", + " Sig_record.append(Sig_k)\n", + " Eps_record.append(np.copy(Eps_k))\n", + " iter_record.append(k+1)\n", + " break\n", + " dlam = np.linalg.solve(df_k, -f_k)\n", + " lam_k += dlam\n", + " Eps_k = get_Eps_k1(s_n1, Eps_n, lam_k, Eps_k, *margs)\n", + " f_k, df_k, Sig_k = get_f_df(s_n1, Eps_k, *margs)\n", + " f_k_norm = np.linalg.norm(f_k)\n", + " k += 1\n", + " else:\n", + " print('no convergence')\n", + " t_arr = np.hstack([t_arr, ti_arr])\n", + " s_t = np.hstack([s_t, si_t])\n", + " t0 = t1\n", + " s0 = s1\n", + " return\n", + "\n", + "import ipywidgets as ipw\n", + "fig, ((ax1,ax2,ax3)) = plt.subplots(1,3,figsize=(14,4), tight_layout=True)\n", + "ax11 = ax1.twinx()\n", + "ax22 = ax2.twinx()\n", + "ax33 = ax3.twinx()\n", + "axes = ax1, ax11, ax2, ax22, ax3, ax33\n", + "axes = ax1, None, ax2, ax22, ax3, ax33\n", + "def update(s1):\n", + " global Eps_record, Sig_record, iter_record, t_arr, s_t, s0, t0, Eps_n, axes\n", + " global margs\n", + " get_response_i(s1, margs)\n", + " Sig_arr = np.array(Sig_record, dtype=np.float_)\n", + " Eps_arr = np.array(Eps_record, dtype=np.float_)\n", + " iter_arr = np.array(iter_record,dtype=np.int_)\n", + " for ax in axes:\n", + " if ax:\n", + " ax.clear()\n", + " plot_Sig_Eps(t_arr, s_t, Sig_arr, Eps_arr, iter_arr, *axes)\n", + " \n", + "init()\n", + "\n", + "s1_slider = ipw.FloatSlider(value=0,min=-4, max=+4, step=0.1,\n", + " continuous_update=False)\n", + "\n", + "ipw.interact(update, s1 = s1_slider);\n", + "\n", + "def reset(**material_params):\n", + " global margs\n", + " init()\n", + " s1_slider.value = 0\n", + " margs = [material_params[name] for name in py_vars]\n", + "\n", + "n_steps = 20\n", + "margs_sliders = {\n", + " name : ipw.FloatSlider(description=name, value=val, \n", + " min=minval, max=maxval, step=(maxval-minval) / n_steps,\n", + " continuous_update=False)\n", + " for name, val, minval, maxval in [('E_b', 50, 0.5, 100),\n", + " ('gamma', 1, -20, 20),\n", + " ('K', 1, -20, 20),\n", + " ('tau_bar', 1, 0.5, 20)]\n", + "}\n", + "\n", + "ipw.interact(reset, **margs_sliders);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "calc(100% - 180px)", + "left": "10px", + "top": "150px", + "width": "315.333px" + }, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/index.ipynb b/index.ipynb index 4238ac7..c94911e 100644 --- a/index.ipynb +++ b/index.ipynb @@ -29,14 +29,15 @@ "## Unloading, reloading and inelasticity\n", "\n", "- [J0401 - Unloading with multi-linear bond-slip law](bmcs_course/4_1_PO_multilinear_unloading.ipynb) (PO_BS_ML)\n", - "- [J0402 - Plasticity framework](bmcs_course/4_2_BS_EP_SH_IK_analytical.ipynb) (BS_EP_SH_IK_A)\n", - "- [J0403 - Iterative numerical simulation](bmcs_course/4_3_BS_EP_SH_IK_numerical.ipynb) (BS_EP_SH_IK_N)\n", + "- [J0402 - Plasticity framework](bmcs_course/4_2_BS_EP_SH_IK_A.ipynb) (BS_EP_SH_IK_A)\n", + "- [J0403 - Iterative numerical simulation](bmcs_course/4_3_BS_EP_SH_IK_N.ipynb) (BS_EP_SH_IK_N)\n", "- [J0404 - Damage framework](bmcs_course)\n", - "- [J0405 - Iterative numerical simulation](bmcs_course)\n", + "- [J0405 - Iterative numerical simulation](bmcs_course)/4_3_BS_EP_SH_IK_N\n", "\n", - "## Energy dissipation\n", + "# CRACK\n", "\n", - "# CRACK" + "## Energy dissipation\n", + "\n" ] }, { -- GitLab