From c3fc8367ddad96b71ff56dfa52537b1eaea2671b Mon Sep 17 00:00:00 2001 From: rch <rostislav.chudoba@rwth-aachen.de> Date: Wed, 16 Jun 2021 13:34:13 +0200 Subject: [PATCH] minor issues --- index.ipynb | 7 +- tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb | 146 ++----- .../6_3_localized_energy_dissipation.ipynb | 8 +- tour7_cracking/7_1_bending3pt_2d.ipynb | 399 +++++++++++------- 4 files changed, 293 insertions(+), 267 deletions(-) diff --git a/index.ipynb b/index.ipynb index 5d0eb7a..6608f20 100644 --- a/index.ipynb +++ b/index.ipynb @@ -280,7 +280,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 6.3 Localization and fracture energy [in production]\n", + "### 6.3 Localization and fracture energy\n", "\n", "Application of the local energy evaluation scheme to the pullout simulation with softening behavior provides us a clear interpretation of fracture energy</br> \n", "[Localization and fracture energy](tour6_energy/6_3_localized_energy_dissipation.ipynb#top)\n" @@ -301,7 +301,8 @@ "<a id=\"tour7\"></a>\n", "## **Tour 7:** Bending and crack propagation\n", "\n", - "- 7.1 Notched beam, fracture energy\n", + "### 7.1 Notched beam to characterize a tensile crack propagation\n", + "\n", "- 7.2 Simulation using damage model\n", "- 7.3 Mesh sensitivity due to localization\n", "- 7.4 Regularization techniques to stabilize the simulation" @@ -344,7 +345,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.8" }, "toc": { "base_numbering": 1, diff --git a/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb b/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb index 2d92e9c..6ad03fd 100644 --- a/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb +++ b/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb @@ -2154,6 +2154,7 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/latex": [ "$\\displaystyle \\begin{cases} \\frac{s \\tau_{1}}{s_{1}} & \\text{for}\\: s \\leq s_{1} \\\\\\tau_{1} + \\frac{\\left(s - s_{1}\\right) \\left(- \\tau_{1} + \\tau_{2}\\right)}{- s_{1} + s_{2}} & \\text{for}\\: s \\leq s_{2} \\\\\\tau_{2} & \\text{otherwise} \\end{cases}$" ], @@ -2207,6 +2208,7 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/latex": [ "$\\displaystyle \\begin{cases} \\frac{\\tau_{1}}{s_{1}} & \\text{for}\\: s \\leq s_{1} \\\\\\frac{- \\tau_{1} + \\tau_{2}}{- s_{1} + s_{2}} & \\text{for}\\: s \\leq s_{2} \\\\0 & \\text{otherwise} \\end{cases}$" ], @@ -2317,7 +2319,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 16, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2327,7 +2329,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f4f6f1b8af54c16843180aff533b3f9", + "model_id": "5483e9a1ac424e069833fef696395873", "version_major": 2, "version_minor": 0 }, @@ -2447,13 +2449,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a61764820b3448da73d9e1c08bb5f44", + "model_id": "def54999e9ab44d9a8304036849011bf", "version_major": 2, "version_minor": 0 }, @@ -2522,7 +2524,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 23, "metadata": { "slideshow": { "slide_type": "slide" @@ -2547,7 +2549,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -2570,7 +2572,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -2589,13 +2591,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5c1976a451784b4f8e5af5db6ed57403", + "model_id": "5ab6003c61d64aff8cf261a20d25f45b", "version_major": 2, "version_minor": 0 }, @@ -2608,6 +2610,7 @@ } ], "source": [ + "po_rilem.run()\n", "po_rilem.interact()" ] }, @@ -2646,13 +2649,13 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a7718bee9d3493f9bf3101fcb475ab0", + "model_id": "7b9ae791bfc64a6980c3aed83360420b", "version_major": 2, "version_minor": 0 }, @@ -2671,6 +2674,19 @@ "calculate d=16 mm, L=10d\n", "calculate d=28 mm, L=3d\n" ] + }, + { + "ename": "TypeError", + "evalue": "cannot unpack non-iterable AxesSubplot object", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-27-efa9a6e3b430>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mpo_rilem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0mpo_rilem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_Pw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'green'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0mpo_rilem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaterial_model_\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max_bond_slip\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;31m# The code sequence can be certainly shortened by using the loop.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/PycharmProjects/bmcs_utils/bmcs_utils/model.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self, axes)\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;34m\"\"\"Alias to update plot - to be overloaded by subclasses\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 39\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mupdate_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/PycharmProjects/bmcs_ibvpy/ibvpy/tmodel/mats1D5/vmats1D5_bondslip1D.py\u001b[0m in \u001b[0;36mupdate_plot\u001b[0;34m(self, axes)\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mupdate_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 32\u001b[0;31m \u001b[0max_tau\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max_d_tau\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 33\u001b[0m \u001b[0ms_max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ms_max\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0mn_s\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: cannot unpack non-iterable AxesSubplot object" + ] } ], "source": [ @@ -2729,24 +2745,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a875449013c541e3a852283a85e15187", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, (ax, ax_bond_slip) = plt.subplots(1,2, figsize=(8,3), tight_layout=True)\n", "fig.canvas.header_visible = False\n", @@ -2887,24 +2888,9 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAASCAYAAADPNlfiAAACYUlEQVR4nNXWWYiOYRQH8N8wQiOEkAtCoiiRCyJLSiQuyJ01S0IiylIylCKypUiKcKXkQrYYYuRCWUOSZZgLM2PPWtaL5/n0zuv9zHzDzfzr65zvnOc5z/9ZzjlvUWlpqcaGJgm9PebgGB7iM97hMmanxuZQgZ95flUFctmEMlTGtV/jBtZGbr9RnNCnYDee4wKeoRMmYR/GxTE/U4u9w/YMEh8KJL0U13EWNSjBYJRiXtQr06QfYCJO4EfCvhpXMTlu4Ghqsbcx8L+iNb5k2DdEDquwgNpXfh7HU4QJ17wn6iP/A7l8yCIMR6LslTMU5xmYxtcov2X4mmMquuIjbuMSvtczdl2YEOXtnKE+pIsxPeqnM/ydcShle4JZuFggQViOVmiDQRgmEN6YJFQXNqIfTuJMyrcf5biL9+iBRULinMIQ3GoA6U6J/6cxEy9yhqwylsRiLMN9TMvwrxNyoRqfcAfzsRUtNSxBO6MoyknCQdzAwPqQXogduIdRQt2sL3KJO7yAOWlUCz1jjFCnD+Yc+UgvwS7h5EYpvFHURFlS4LwsPBUOri86kE16BbbhpkC4JmNMXRgS5eMGzM1Clyi/8yfpNULiXcNovPxLoL5ol2HvJtwSHM7w90QfNEvY+ghvOI0mQnPpiCt4Q+3qMQPrhd2UC0mYRgUORH0KVgot/4lQPXpiPFoI1WZLRoyyuLHuMR6MxWahvj/CK6GCjBASsQpzcwGSpLtH2VR401m4mCB9Ab0xQHgOJUJLvyzU7UP+/E7Jh3PYi6Hoj7ZCo3oQ4+yUKARFjf3TtNGgUZL+BUL+ip276565AAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle 25.3$" - ], - "text/plain": [ - "25.3" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "p_b = 100 # [mm]\n", "t_f = 0.11 # [mm]\n", @@ -2951,24 +2937,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b608835b221846389eed5fe0ebad309f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "po_cfrp = PullOutModel1D(n_e_x=300, w_max=1.5) # mm \n", "po_cfrp.geometry.L_x=100 # mm\n", @@ -2992,24 +2963,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADoAAAASCAYAAAAKRM1zAAADaUlEQVR4nOXXW4hWVRQH8N+YUsPUzJShQ0TpDJkgUUmlYRiViBhFFEIPDZFQhJFd8KEL4YwgFKWUXagQLe2hIoggKjKToqKnCrGbMc2EUaNdRWsSU3tY+zi74zkzX/PY/OFjnbP22pd1Of+1v6aenh7jARNK7w9hK3ZhCL/iU6zE5Ir5TViKj7EPfyb75ThuDOc5HRvwAw5gAI/i5Br7ARyp+Q3mhhNLE+/CJ9iCPWjBXPTglvS8K7N/Ht3J9iX8gQV4DPOxJG3aCLrwEabgNXyFi3AHFmEefqmYt1cEo4z9+UvZ0Vb8VTFpNe7DvViWdNcIJ/vTgX5O+kl4GdfhRjxX6daxeEo4uRyPZ/q1IgGrcWvFvN9FIkZEuXSrnCQODmdlumuTXGPYSTiIB9Lz7aMdIKETC0UpPlkaWykqpVtU2JhQzmgdrkpye6brSPLbCvtCNxvtIuoj4fIk38bh0tg+fCgCMVdwSI7jcQPOEAHZjvdxKDeqc3QFTkQbLsAlaYEHM5sii9Mr5ndmzzMFWY2Es5PcWTP+jXB0hmMd7cDmkq4fN+G9QlEu3QIrRMncKZx8K230U2bzepJ345RMPxG92XsdY+ZoS3JvzXihby/pN+IK4WwLzsEzmIY3cW5hWOdoh2gdHeJb7BRtY3Zm82JarAtf4FnBfp9hscgCpRIaI5qSLDN4L97FbtHadgjCWotmGUnVOVpgN14V2ZyMTdnYYVwtsj8oyGIpvhdVULSCPQ04UmSsrWa8tWQ3Gp5Ocn6haJSMvhNZOw+nGv4+/xasu6Zk35xsh/B5A+t/neSMmvGC7eu+4TKK4B5l6dEymuO0JBspxW6cINrSwQbstyW5sOJMJ4nLwpDRSa3AxUke7Qj5ojMNt4wcE0SzniJuLr9lY60V9hcKdt6PVRXjXWmvSZmuT7SWabitZN8rMrNJtI8Cs/ybBAuciSfS8wuFMi/dRXhY9KA+8Y1NxaWCjAZxc2nRLSLSO0S/myWI6IAgsaoeuzUdZrq4IBRYJgK5TjDpl5iDy0TJ3l9aZwnuEdXQn/bvwpWimt7AI1WOviOYc56g5XYRwZ2iT60Tl/wcr+B60bCbxWV8vcjogP+GPtGzV4mgL8aPad/eir23if57vijVFnEx+SCdd7OMpZvG69+0/y3GjaP/AKn6xBbka1OWAAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle 39.05$" - ], - "text/plain": [ - "39.05" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f_t = 3550 # CFRP sheet strength in [MPa] - see the table above\n", "f_t * t_f * p_b / 1000 # breaking force of the sheet 100 x 100 mm in [kN]" @@ -3044,35 +3000,9 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4f5271fb4124431f9d7979a35c0fbabb", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "evaluating pullout curve for L 5\n", - "evaluating pullout curve for L 10\n", - "evaluating pullout curve for L 50\n", - "evaluating pullout curve for L 100\n", - "evaluating pullout curve for L 200\n" - ] - } - ], + "outputs": [], "source": [ "fig, (ax, ax_bond_slip) = plt.subplots(1,2, figsize=(10,4), tight_layout=True)\n", "fig.canvas.header_visible = False\n", @@ -3141,7 +3071,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.8" }, "toc": { "base_numbering": 1, diff --git a/tour6_energy/6_3_localized_energy_dissipation.ipynb b/tour6_energy/6_3_localized_energy_dissipation.ipynb index 0f3bb12..b6cdfc7 100644 --- a/tour6_energy/6_3_localized_energy_dissipation.ipynb +++ b/tour6_energy/6_3_localized_energy_dissipation.ipynb @@ -246,7 +246,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8bc97b6764834c199a1e50d65207907e", + "model_id": "8e4d3116f22b45d0a599ac0d0862c181", "version_major": 2, "version_minor": 0 }, @@ -271,7 +271,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "31f39ca22bf941dfb37a2c1fef6a5208", + "model_id": "0d14959e36ad4d15b69f11cef352f7d3", "version_major": 2, "version_minor": 0 }, @@ -434,14 +434,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "a8acac48-f466-473c-8de9-fef4187d3b81", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "42f6fec2662046e4ad3f31f50b997e23", + "model_id": "9c762b72a49342a0b187626bc2978a31", "version_major": 2, "version_minor": 0 }, diff --git a/tour7_cracking/7_1_bending3pt_2d.ipynb b/tour7_cracking/7_1_bending3pt_2d.ipynb index ed3e1af..504b2c4 100644 --- a/tour7_cracking/7_1_bending3pt_2d.ipynb +++ b/tour7_cracking/7_1_bending3pt_2d.ipynb @@ -8,6 +8,14 @@ "# **7.1 Propagation of a straight crack**" ] }, + { + "cell_type": "markdown", + "id": "1c5177ac-cfcd-4fba-965c-fea4ddb87881", + "metadata": {}, + "source": [ + "[still under construction]" + ] + }, { "cell_type": "markdown", "id": "0465afaf-c8d1-4604-a9bd-3bd91bb67ca4", @@ -77,39 +85,31 @@ ] }, { - "cell_type": "code", - "execution_count": 1, - "id": "83e0cf34-4db1-41bf-ac41-7840d0ba44f1", + "cell_type": "markdown", + "id": "969cea85-7c46-4444-8847-d793f565bc43", "metadata": {}, - "outputs": [], "source": [ - "%matplotlib widget\n", - "from bmcs_bending.bending3pt_2d import BendingTestModel\n", - "from ibvpy.tmodel.mats2D import MATS2DScalarDamage" + "# **Boundary value problem and its FE discretization**" ] }, { "cell_type": "markdown", - "id": "d93e03f8-4d44-4316-b8db-c160517b8430", + "id": "780cfe67-6a6f-435d-afce-dbb2bc491e76", "metadata": {}, "source": [ - "\\begin{align}\n", - "\\sigma_{ab} = (1 - \\omega(\\kappa(\\varepsilon_{cd}))) D_{abcd}^\\mathrm{el} \\varepsilon_{cd}\n", - "\\end{align}" + "# **Material model**" ] }, { - "cell_type": "markdown", - "id": "d6ab78b9-00d0-4a8d-803a-111b10e920b4", + "cell_type": "code", + "execution_count": 1, + "id": "83e0cf34-4db1-41bf-ac41-7840d0ba44f1", "metadata": {}, + "outputs": [], "source": [ - "\\begin{align}\n", - "D_{abcd} &= \\dfrac{\\mathrm{d} \\sigma_{ab}}{\\mathrm{d}\\varepsilon_{cd}} \\\\\n", - "& =\n", - "\\left(1 - \\omega(\\kappa(\\varepsilon_{cd}))\\right) D_{abcd}^\\mathrm{el} -\n", - "\\dfrac{\\mathrm{d} \\omega}{\\mathrm{d}\\kappa}\n", - "\\dfrac{\\partial \\kappa}{\\partial\\varepsilon_{cd}} D_{abcd}^\\mathrm{el} \\, \\varepsilon_{cd} \\, \\theta_\\mathrm{alg,stiff}\n", - "\\end{align}" + "%matplotlib widget\n", + "from bmcs_bending.bending3pt_2d import BendingTestModel\n", + "from ibvpy.tmodel.mats2D import MATS2DScalarDamage" ] }, { @@ -120,18 +120,26 @@ "outputs": [], "source": [ "bt = BendingTestModel(material_model='scalar damage', \n", - " n_e_x=8, n_e_y=16, w_max=-2, k_max=500)\n", + " n_e_x=6, n_e_y=16, w_max=-2, k_max=500)\n", "E = 30000\n", "f_ct = 3.3\n", "kappa_0 = f_ct / E\n", - "bt.time_line.step=0.01\n", + "bt.time_line.step=0.03\n", "bt.history.warp_factor=100\n", "bt.cross_section.trait_set(b=50)\n", "bt.geometry.trait_set(L=2000, H=200, a=100, L_c=1)\n", - "bt.material_model_.trait_set(E = E, nu = 0.0)\n", + "bt.material_model_.trait_set(E = E, nu = 0.0) # note nu = 0.0 to avoid compressive failure\n", "bt.material_model_.omega_fn = 'exp-slope'\n", "bt.material_model_.omega_fn_.trait_set(kappa_0=kappa_0, kappa_f=0.0336)\n", - "bt.material_model_.trait_set(D_alg=1, eps_max=0.1);" + "bt.material_model_.trait_set(D_alg=1, eps_max=1);" + ] + }, + { + "cell_type": "markdown", + "id": "7541585c-f32d-4954-acfd-d81432fdfd29", + "metadata": {}, + "source": [ + "## Strain norm" ] }, { @@ -163,29 +171,49 @@ "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e669d03631514d1fb9ab422741bcf0cc", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "'Rankine strain norm'" + "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…" ] }, - "execution_count": 3, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "bt.material_model_.strain_norm_.name" + "bt.material_model_.strain_norm = 'Rankine'\n", + "bt.material_model_.strain_norm_.interact()" + ] + }, + { + "cell_type": "markdown", + "id": "db2febf3-5dbb-4199-bf91-495614a79d4d", + "metadata": {}, + "source": [ + "Further strain norms can be chosen from the options\n", + " - Rankine strain norm\n", + " - Masars strain norm\n", + " - Energy norm\n", + " \n", + "These norms can have to be combined with an elastic threshold to distinguish the elastic and inelastic domains.\n", + "\n", + "Inspect the visual representation of the equivalent strain measure by changing the selector in the material model app. (It is necessary to select the respective tree node to render the visualization of the currently selected option.)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 4, "id": "8dd4a96a-e8b6-4cbc-9f71-bdf0f680b35d", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "646b3de8d3bd46feace3aedd0e19b92a", + "model_id": "8d5e86e3c1fc4401a6842fbbe9006618", "version_major": 2, "version_minor": 0 }, @@ -201,9 +229,82 @@ "bt.material_model_.interact()" ] }, + { + "cell_type": "markdown", + "id": "d5e41956-14c6-4ad1-ac42-c4b8b66b15fc", + "metadata": {}, + "source": [ + "## The importance of algorithmic stiffness" + ] + }, + { + "cell_type": "markdown", + "id": "382aac37-21a3-4c94-b245-48e353f576d3", + "metadata": {}, + "source": [ + "The rate of convergence strongly depends on the quality of prediction of the stress state for the next step. The parameter `D_alg` can be used ton control the calculation by choosing between the secant and algorithmic, tangential stiffness. Derivation of the material stiffness might appear tedious at the first sight but in fact, it only requires the evaluation of the chain derivatives involved in the constitutive law. " + ] + }, + { + "cell_type": "markdown", + "id": "d06b9560-012b-40ce-918a-7f93c60dbc97", + "metadata": {}, + "source": [ + "Let us exemplify the derivation of the algorithmic material stiffness on the example of the isotropic damage model. In contrast to the version presented in notebook [5.1]() for the bond-slip law, we are applying the damage model to a 2D continuum described by the strain and stress tensor tensors $\\boldsymbol{\\varepsilon} = \\varepsilon_{ab}$ \n", + "and $\\boldsymbol{\\sigma} = \\sigma_{ab}$, where letter indexes $a,b,c,d = [1,2]$ enumerate the orthogonal directions of the cartesian coordinate system. For example, $\\varepsilon_{11} = \\varepsilon_{xx}$. Then the stress-strain relation prescribed by the damage model is given as " + ] + }, + { + "cell_type": "markdown", + "id": "d93e03f8-4d44-4316-b8db-c160517b8430", + "metadata": {}, + "source": [ + "\\begin{align}\n", + "\\sigma_{ab} = (1 - \\omega(\\kappa(\\varepsilon_{cd}))) D_{abcd}^\\mathrm{el} \\varepsilon_{cd}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "id": "0db20967-ba8d-426e-a1f8-dfbf6780fc45", + "metadata": {}, + "source": [ + "where $\\kappa(\\varepsilon_{cd})$ represents the equivalent strain described above, and $\\omega(\\kappa)$ represents the particular damage function. The algorithmic stiffness is derived as the derivative of the above stress tensor with respect to a strain tensor. This means that every stress component must be differentiated with respect to every strain component. The result of this expression is a rank 4 tensor $D_{abcd}$ describing the instantaneous stiffness of a material point undergoing damage. The resulting expression delivers the material stiffness in the following form" + ] + }, + { + "cell_type": "markdown", + "id": "d6ab78b9-00d0-4a8d-803a-111b10e920b4", + "metadata": {}, + "source": [ + "\\begin{align}\n", + "D_{abcd} &= \\dfrac{\\mathrm{d} \\sigma_{ab}}{\\mathrm{d}\\varepsilon_{cd}} \\\\\n", + "& =\n", + "\\left(1 - \\omega(\\kappa(\\varepsilon_{cd}))\\right) D_{abcd}^\\mathrm{el} -\n", + "\\dfrac{\\mathrm{d} \\omega}{\\mathrm{d}\\kappa}\n", + "\\dfrac{\\partial \\kappa}{\\partial\\varepsilon_{cd}} D_{abcd}^\\mathrm{el} \\, \\varepsilon_{cd} \\, \\theta_\\mathrm{alg,stiff}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "id": "4795a44a-a0cd-41cf-a55f-32be19e84454", + "metadata": {}, + "source": [ + "The parameter `D_alg` is denoted here as $\\theta_{\\mathrm{alg,stiff}}$ and is provided as an input parameter in the material model. By setting this parameter to zero, the second term in the above expression is canceled. Then, only the secant stiffness is available. The importance of the algorithmic stiffness can be studied in the simulation of the bending test. The default value $\\theta_\\mathrm{alg,stiff} = 1$ is activating the algorithmic stiffness. By setting $\\theta_\\mathrm{alg,stiff} = 0$ one can see the strong reduction of the performance." + ] + }, + { + "cell_type": "markdown", + "id": "a33174d1-fd84-4ca9-924c-a500ee83f47f", + "metadata": {}, + "source": [ + "However, in some situation, for example when simulating simultaneous crack propagation in reinforced specimens the tangential stiffness might induce divergence. The reason for such behavior is the fact that the bond stress can rapidly change the sign. In these situations, advanced control strategies are required." + ] + }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "2a956afb-0425-4318-9335-628675151680", "metadata": {}, "outputs": [], @@ -213,14 +314,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 6, "id": "bf30823c-3ed8-4e8b-a84c-23cc25c8e094", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a322979830d64577b94c200698fd32d3", + "model_id": "5a4f3a0f856d4f7cb1834e91b8bc84ce", "version_major": 2, "version_minor": 0 }, @@ -257,7 +358,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 7, "id": "752906fd-2a8a-44ec-b77c-9e3a496f9c0f", "metadata": { "tags": [] @@ -269,7 +370,7 @@ "5000.0" ] }, - "execution_count": 28, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -289,17 +390,17 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 8, "id": "ec96f0ce-0f91-4d3a-8d59-d3cedb3a9f9c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.10508670091190059" + "0.1092317778327407" ] }, - "execution_count": 29, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -318,17 +419,17 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 9, "id": "8265609d-ed22-4240-a1ac-22bd025137a8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "525.4335045595029" + "546.1588891637035" ] }, - "execution_count": 30, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -348,23 +449,12 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 11, "id": "e5e6854c-6ec7-43a7-b4bc-d6a725af6b79", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "377.64457017857245" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "bt.hist['energy'].G_t[-1]" + "#bt.hist['energy'].G_t[-1]" ] }, { @@ -386,17 +476,18 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 12, "id": "fd5696fa-725e-4c7b-bac8-f263bdf532d3", "metadata": {}, "outputs": [], "source": [ - "Fw_dict = {}" + "Fw_dict = {}\n", + "G_dict = {}" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 13, "id": "c83a2693-4fbe-4ce8-a3eb-0a281430f1b7", "metadata": {}, "outputs": [ @@ -404,40 +495,47 @@ "name": "stdout", "output_type": "stream", "text": [ - "L_c 0.5\n", - "\n", - "not converging for 0.5\n", - "L_c 1\n", - "L_c 2\n", - "L_c 4\n" + "calculating F-w and G for crack band L_c = 1 [mm]\n", + "calculating F-w and G for crack band L_c = 2 [mm]\n", + "calculating F-w and G for crack band L_c = 4 [mm]\n" ] } ], "source": [ - "L_c_list = [0.5, 1, 2, 4]\n", + "L_c_list = [1, 2, 4]\n", "for L_c in L_c_list:\n", " if Fw_dict.get(L_c):\n", " continue\n", - " print('L_c', L_c)\n", + " print('calculating F-w and G for crack band L_c = %g [mm]' % L_c)\n", " bt.geometry.L_c = L_c\n", " bt.reset()\n", " try: \n", " bt.run()\n", " except StopIteration:\n", - " print('not converging for', L_c)\n", - " Fw_dict[L_c] = bt.hist['Fw'].Fw" + " print('simulation interupted due to slow convergence', L_c)\n", + " Fw_dict[L_c] = bt.hist['Fw'].Fw\n", + " G_dict[L_c] = bt.hist['energy'].G_t[-1]" + ] + }, + { + "cell_type": "markdown", + "id": "6bdc3565-8107-4459-81ca-653b7c179da0", + "metadata": {}, + "source": [ + "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/view.png\" alt=\"Run\" width=\"40\" height=\"40\">\n", + " <b>... let us put the results into a diagram</b> </div>" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 14, "id": "cf30a1f8-7eae-4aa4-8101-fe8337c6cba8", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a0c7daa2bd4e4073812abadd09739e1e", + "model_id": "ce75fbdb25374f38a4a3256cf8a6cf79", "version_major": 2, "version_minor": 0 }, @@ -447,130 +545,127 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "<matplotlib.legend.Legend at 0x7ff52059da60>" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "import matplotlib.pylab as plt\n", - "fig, ax = plt.subplots(1,1)\n", + "fig, (ax, ax_G) = plt.subplots(1,2, figsize=(8,3), tight_layout=True)\n", "fig.canvas.header_visible=False\n", "for L_c, (F, w) in Fw_dict.items():\n", " ax.plot(-w,-F,label='L_c = %g' % L_c)\n", "ax.legend()\n", - "ax.set_ylabel(r'$F$')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a34f8596-23be-4a6a-bb88-ae0c851d4104", - "metadata": {}, - "outputs": [], - "source": [ - "import sympy as sp" + "ax.set_xlabel(r'$w$ [mm]');\n", + "ax.set_ylabel(r'$F$ [N]');\n", + "G_list = [G_dict[L_c] for L_c in L_c_list]\n", + "ax_G.plot(L_c_list, G_list, marker='H')\n", + "ax_G.set_xlabel(r'$L_\\mathrm{c}$ [mm]')\n", + "ax_G.set_ylabel(r'$G_\\mathrm{total}$ [kJ]');" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "cd940d2c-99aa-4c97-b973-aabab76bc777", - "metadata": {}, - "outputs": [], - "source": [ - "eps, D = sp.symbols(r'\\varepsilon, D')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32656538-f9d7-498f-993a-36ad88c2998f", + "cell_type": "markdown", + "id": "68f2a220-525a-4fc1-9209-eee1a98dd276", "metadata": {}, - "outputs": [], "source": [ - "eps2 = sp.sqrt(D * eps**2)\n", - "eps2" + "# **How to make the results mesh independent?**" ] }, { "cell_type": "markdown", - "id": "e9f08de9-0aaa-4ae3-8c0a-3d35a7d98d30", + "id": "83a6019b-7909-499c-8050-b2748563d382", "metadata": {}, "source": [ - "$$\n", - "(D \\varepsilon^2)^{-\\frac{1}{2}} \\cdot 2 D \\varepsilon\n", - "= \n", - "D^{-\\frac{1}{2}} \\varepsilon^{-1}\\cdot 2 D \\varepsilon\n", - "$$" + "The finite element codes solve this problem by adjusting the slope of the softening branch to keep the energy dissipation within a crack band invariant for a changed size of an element. This is the most common technique used in commercial finite element codes." ] }, { "cell_type": "markdown", - "id": "cf16c894-7de4-4409-b5e2-3161aafcefe4", + "id": "f4a93e45-ad34-4485-bf75-b7e7a46150ee", "metadata": {}, "source": [ - "$$\n", - "\\dfrac{1}{2 \\sqrt{D \\varepsilon^2}} \\cdot 2 D \\varepsilon = \\dfrac{D\\varepsilon}{\\sqrt{D \\varepsilon^2}}\n", - "$$" + "Let us demonstrate the concept of mesh-adjusted softening response on the running example." ] }, { "cell_type": "code", - "execution_count": null, - "id": "8f01a1d4-a63d-48bb-84bc-f0f14e5a206f", + "execution_count": 20, + "id": "0e49628e-0d75-4a92-a1e9-74386de668fc", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "calculating F-w and G for crack band L_c = 1 [mm]\n", + "G_f 0.1092317778327407\n", + "calculating F-w and G for crack band L_c = 2 [mm]\n", + "G_f 0.053795255499048136\n", + "calculating F-w and G for crack band L_c = 4 [mm]\n", + "G_f 0.02608239216637152\n" + ] + } + ], "source": [ - "a = sp.symbols('a')\n", - "(sp.sqrt(a).diff(a) * (D*eps**2).diff(eps)).subs(a, D*eps**2)" + "Fw_reg_dict = {}\n", + "G_reg_dict = {}\n", + "L_c_list = [1, 2, 4]\n", + "kappa_f = 0.0336\n", + "for L_c in L_c_list:\n", + " if Fw_reg_dict.get(L_c):\n", + " continue\n", + " print('calculating F-w and G for crack band L_c = %g [mm]' % L_c)\n", + " bt.reset()\n", + " bt.geometry.L_c = L_c\n", + " bt.material_model_.omega_fn_.kappa_f = kappa_f / L_c #### REGULARIZATION ####\n", + " print('G_f', bt.material_model_.G_f)\n", + " try: \n", + " bt.run()\n", + " except StopIteration:\n", + " print('simulation interupted due to slow convergence', L_c)\n", + " Fw_reg_dict[L_c] = bt.hist['Fw'].Fw\n", + " G_reg_dict[L_c] = bt.hist['energy'].G_t[-1]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "0c8b38f7-407a-4910-9328-d07f444c1d5a", - "metadata": {}, - "outputs": [], - "source": [ - "eps2.diff(eps)" - ] - }, - { - "cell_type": "markdown", - "id": "90a5f095-b384-4a86-97bd-2752518c2081", + "execution_count": 21, + "id": "bc7eb155-af93-45db-b1c8-7237afbffb1f", "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f773de20d27e4bc08073683588a5913e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "$$\n", - "\\kappa = \\sqrt{ \\varepsilon_{ab} D_{abcd} \\varepsilon_{cd}} \n", - "$$" + "import matplotlib.pylab as plt\n", + "fig, (ax, ax_G) = plt.subplots(1,2, figsize=(8,3), tight_layout=True)\n", + "fig.canvas.header_visible=False\n", + "for L_c, (F, w) in Fw_reg_dict.items():\n", + " ax.plot(-w,-F,label='L_c = %g' % L_c)\n", + "ax.legend()\n", + "ax.set_xlabel(r'$w$ [mm]');\n", + "ax.set_ylabel(r'$F$ [N]');\n", + "G_list = [G_reg_dict[L_c] for L_c in L_c_list]\n", + "ax_G.plot(L_c_list, G_list, marker='H')\n", + "ax_G.set_xlabel(r'$L_\\mathrm{c}$ [mm]')\n", + "ax_G.set_ylabel(r'$G_\\mathrm{total}$ [kJ]');" ] }, { "cell_type": "markdown", - "id": "939af17a-2f68-4e3b-8150-0e239bfad745", + "id": "eea93b93-7e10-49f8-8537-d90b5c042463", "metadata": {}, - "source": [ - "$$\n", - "\\dfrac{\\partial \\kappa}{\\partial \\varepsilon_{cd}}\n", - "=\n", - "\\dfrac{1}{\\kappa} D_{abcd} \\varepsilon_{cd} \n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0dff0fb6-5d1b-4caa-874f-556ad1d1e0c1", - "metadata": {}, - "outputs": [], "source": [] } ], -- GitLab