From f8bc1826cc6724d2b302d4c29451c28b80f8be0b Mon Sep 17 00:00:00 2001
From: rch <rostislav.chudoba@rwth-aachen.de>
Date: Tue, 22 Jun 2021 18:06:19 +0200
Subject: [PATCH] Tour 7 finished

---
 index.ipynb                                   |  31 +-
 tour2_constant_bond/fragmentation.ipynb       |  40 +-
 tour6_energy/6_1_energy_dissipation.ipynb     |   2 +-
 .../6_3_localized_energy_dissipation.ipynb    | 106 +++-
 tour7_cracking/7_1_bending3pt_2d.ipynb        | 556 ++++++++++++++----
 .../7_2_fracture_energy_ident.ipynb           | 509 ++++++++++++++++
 tour7_cracking/7_3_stable_and_unstable.ipynb  | 221 +++++++
 tour7_cracking/bmcs_bending/bending3pt_2d.py  | 206 +------
 tour7_cracking/bmcs_bending/viz3d_energy.py   |  32 +-
 9 files changed, 1353 insertions(+), 350 deletions(-)
 create mode 100644 tour7_cracking/7_2_fracture_energy_ident.ipynb
 create mode 100644 tour7_cracking/7_3_stable_and_unstable.ipynb

diff --git a/index.ipynb b/index.ipynb
index 87a4a4c..f8039a3 100644
--- a/index.ipynb
+++ b/index.ipynb
@@ -291,22 +291,35 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "<div style=\"background-color:lightgreen;text-align:left\"> <img src=\"icons/rest.png\" alt=\"Step by step\" width=\"40\" height=\"40\">\n",
-    "    &nbsp; &nbsp; <b>Our current location</b> </div>"
+    "<a id=\"tour7\"></a>\n",
+    "## **Tour 7:** Bending and crack propagation\n",
+    "\n",
+    "### 7.1 Notched beam to characterize a tensile crack propagation\n",
+    "\n",
+    "With the possibility to evaluate energy dissipation, we study the crack propagation \n",
+    "in a notched bending test using a finite-element model. This study presents the reasoning behind \n",
+    "the identification of fracture energy using the notched bending test. \n",
+    "At the same time, it illuminates how to correctly reflect the crack localization\n",
+    "in the standard finite-element method.</br> \n",
+    "[Propagation of a straight crack](tour7_cracking/7_1_bending3pt_2d.ipynb#top)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "<a id=\"tour7\"></a>\n",
-    "## **Tour 7:** Bending and crack propagation\n",
+    "### 7.2 Experimental identification of fracture energy and size effect\n",
     "\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"
+    "The explained correspondence between work supplied to the test and the energy dissipation is exploited to design a simple test setup delivering an estimate of the fracture energy as a fundamental characteristic of concrete behavior. The important consequence of localization behavior inducing a so called size effect is presented using a simple parametric study.</br>\n",
+    "[Fracture energy and size effect](tour7_cracking/7_2_fracture_energy_ident.ipynb#top)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgreen;text-align:left\"> <img src=\"icons/rest.png\" alt=\"Step by step\" width=\"40\" height=\"40\">\n",
+    "    &nbsp; &nbsp; <b>Our current location</b> </div>"
    ]
   },
   {
diff --git a/tour2_constant_bond/fragmentation.ipynb b/tour2_constant_bond/fragmentation.ipynb
index 4ccd60a..5f0a3a3 100644
--- a/tour2_constant_bond/fragmentation.ipynb
+++ b/tour2_constant_bond/fragmentation.ipynb
@@ -129,7 +129,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "c5af47fde60c4f92a340c2f0a3644d42",
+       "model_id": "57c3b9b7874c46e3874f6de2175af38a",
        "version_major": 2,
        "version_minor": 0
       },
@@ -396,7 +396,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 2,
    "id": "regulation-bronze",
    "metadata": {},
    "outputs": [],
@@ -419,7 +419,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "id": "stock-interval",
    "metadata": {},
    "outputs": [],
@@ -434,7 +434,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "id": "junior-patrol",
    "metadata": {},
    "outputs": [
@@ -444,7 +444,7 @@
        "31657.472"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -463,7 +463,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "id": "fundamental-bulletin",
    "metadata": {},
    "outputs": [],
@@ -486,14 +486,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "id": "nuclear-firmware",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "6914161dfc624bf68eac45f69dace472",
+       "model_id": "207eef47c0904fe48f812ba2efbdb2a7",
        "version_major": 2,
        "version_minor": 0
       },
@@ -536,7 +536,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "id": "engaged-breast",
    "metadata": {},
    "outputs": [
@@ -546,7 +546,7 @@
        "97.79047929936306"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -571,7 +571,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 8,
    "id": "molecular-french",
    "metadata": {},
    "outputs": [
@@ -581,7 +581,7 @@
        "0.020096"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -603,14 +603,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 9,
    "id": "martial-sense",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "141ef987dec74222897692e0b84e81ab",
+       "model_id": "417e8e82b5674420b3f41203df0058bc",
        "version_major": 2,
        "version_minor": 0
       },
@@ -671,7 +671,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 10,
    "id": "hungry-momentum",
    "metadata": {},
    "outputs": [],
@@ -687,7 +687,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 11,
    "id": "stone-harmony",
    "metadata": {},
    "outputs": [
@@ -697,7 +697,7 @@
        "32771.0843373494"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -714,14 +714,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 12,
    "id": "needed-suspension",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "611b7324607c4e55a531ff8e5d7efd72",
+       "model_id": "76a7324bbf974845b1b3ee9d276bdba5",
        "version_major": 2,
        "version_minor": 0
       },
@@ -818,7 +818,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.10"
+   "version": "3.8.8"
   }
  },
  "nbformat": 4,
diff --git a/tour6_energy/6_1_energy_dissipation.ipynb b/tour6_energy/6_1_energy_dissipation.ipynb
index 01943b4..00a82a0 100644
--- a/tour6_energy/6_1_energy_dissipation.ipynb
+++ b/tour6_energy/6_1_energy_dissipation.ipynb
@@ -287,7 +287,7 @@
    "metadata": {},
    "source": [
     "<div style=\"background-color:lightgray;text-align:left;width:45%;display:inline-table;\"> <img src=\"../icons/previous.png\" alt=\"Previous trip\" width=\"50\" height=\"50\">\n",
-    "    &nbsp; <a href=\"../tour6_energy/6_1_energy_dissipation.ipynb#top\">5.2 Pullout behavior governed by damage</a> \n",
+    "    &nbsp; <a href=\"../tour5_damage_bond/5_2_PO_cfrp_damage.ipynb#top\">5.2 Pullout behavior governed by damage</a> \n",
     "</div><div style=\"background-color:lightgray;text-align:center;width:10%;display:inline-table;\"> <a href=\"#top\"><img src=\"../icons/compass.png\" alt=\"Compass\" width=\"50\" height=\"50\"></a></div><div style=\"background-color:lightgray;text-align:right;width:45%;display:inline-table;\"> \n",
     "    <a href=\"../tour6_energy/6_2_Energy_released_in_pullout_constant_bond_and_rigid_matrix.ipynb#top\">6.2 Frictional pullout and energy dissipation</a>&nbsp; <img src=\"../icons/next.png\" alt=\"Previous trip\" width=\"50\" height=\"50\"> </div> "
    ]
diff --git a/tour6_energy/6_3_localized_energy_dissipation.ipynb b/tour6_energy/6_3_localized_energy_dissipation.ipynb
index 739a8ce..9990040 100644
--- a/tour6_energy/6_3_localized_energy_dissipation.ipynb
+++ b/tour6_energy/6_3_localized_energy_dissipation.ipynb
@@ -237,6 +237,14 @@
     "po_cfrp.material_model_.omega_fn_.trait_set(kappa_0=0.0001, G_f=1.19);"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "abfe168d-24f3-4c96-8a76-451e780d40d6",
+   "metadata": {},
+   "source": [
+    "To inspect the input data given above let us render the material model showing the bond slip law first"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": 2,
@@ -246,7 +254,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "4927efe9475b47b6ba2bdae9ddee5ff5",
+       "model_id": "ce80e4ec167d48b8ab3d08d0e4f162c8",
        "version_major": 2,
        "version_minor": 0
       },
@@ -262,6 +270,14 @@
     "po_cfrp.material_model_.interact()"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "70154cee-e023-4374-a498-91700eea5e0c",
+   "metadata": {},
+   "source": [
+    "The simulation can now be started and the results are presented using the rendered model user interface."
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": 3,
@@ -271,7 +287,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "650358aeee8e41f7a9102854299cae47",
+       "model_id": "2b480b67beea49e5bae9687ba13aa540",
        "version_major": 2,
        "version_minor": 0
       },
@@ -314,17 +330,34 @@
     "$$ "
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "22b27dfd-ac75-45bd-b245-250e830a8bff",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/warning.png\" alt=\"Verify\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; &nbsp; <b>Important: the amount of stored energy prior to failure</b> </div> "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9073895c-481f-4f5f-9f09-3595f684359b",
+   "metadata": {},
+   "source": [
+    "**When designing an experiment or a structural members always watch out how much elastic energy is stored in the structure prior to the failure.** Ignoring this can lead to unforeseen, uncontrolled failure event which is not only brittle but may be highly **explosive**.  "
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "a5085968-256f-49a2-b0cd-6d3f537b2dfe",
    "metadata": {},
    "source": [
-    "Even though this value could be extracted from the graphs presented in the above simulation, let us quantify them by accessing the output data of the simulation. The `history` attribute includes the arrays of stored, supplied and dissipated energy as `W_t`, `U_bar_t`, and `G_t`, respectively. Then, because the geometry was specified in $\\mathrm{mm}$, the above formulas deliver the value of $G_\\mathrm{total}$ in $\\mathrm{[Nmm]}$, corresponding to $\\mathrm{[kJ]}$ "
+    "Even though the value of $G_\\mathrm{total}$ could be extracted from the graphs presented in the above simulation, let us quantify them by accessing the output data of the simulation. The `history` attribute includes the arrays of stored, supplied and dissipated energy as `W_t`, `U_bar_t`, and `G_t`, respectively. Then, because the geometry was specified in $\\mathrm{mm}$, the above formulas deliver the value of $G_\\mathrm{total}$ in $\\mathrm{[Nmm]}$, corresponding to $\\mathrm{[kJ]}$ "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 4,
    "id": "72850a59-de99-44c5-aa9d-382b6f3f9a80",
    "metadata": {},
    "outputs": [
@@ -334,7 +367,7 @@
        "53246.55322083428"
       ]
      },
-     "execution_count": 10,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -359,7 +392,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 5,
    "id": "c4e3223b-3811-4609-9be5-53807494fd06",
    "metadata": {},
    "outputs": [
@@ -369,7 +402,7 @@
        "50000.0"
       ]
      },
-     "execution_count": 11,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -389,7 +422,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 6,
    "id": "2136fc13-c57f-49ca-8330-a43112e4f8db",
    "metadata": {},
    "outputs": [
@@ -399,7 +432,7 @@
        "1.0649310644166856"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -441,7 +474,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "7b6d102a847e4cd9bc3f5241ed5df0b4",
+       "model_id": "1677a84c480a4a04b05724789a8617b0",
        "version_major": 2,
        "version_minor": 0
       },
@@ -468,45 +501,64 @@
   },
   {
    "cell_type": "markdown",
-   "id": "9073895c-481f-4f5f-9f09-3595f684359b",
+   "id": "58369969-0dcb-49c1-a233-13a9a93ace16",
    "metadata": {},
    "source": [
-    "**When designing an experiment or a structural members always watch out how much elastic energy is stored in the structure prior to the failure.** Ignoring this can lead to unforeseen, uncontrolled failure event which is not only brittle but may be highly **explosive**.  "
+    "As a consequence, we can expect that, **the larger the debonding process zone relative to the bond length, the larger the discrepancy between $G_\\mathrm{f}$ and $G_\\mathrm{F}$**."
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "49e1da03-39e1-4ee1-965a-5a3d64fde477",
+   "id": "fb27b643-f8c7-4329-ade2-bf290336cf8f",
    "metadata": {},
    "source": [
-    "In spite of the observed difference between $G_\\mathrm{F}$ and $G_\\mathrm{f}$, the described concept of \n",
-    "globally evaluated released energy and its normalization with respect to the observed localized discontinuity  represents an efficient characterization procedure delivering an estimate of fracture energy needed to to produce a unit area of a stress free crack or debonding zone. Fracture energy is a fundamental characteristic required for a realistic modeling and assessment of concrete structures. As a consequence, the possibility to evaluate $G_\\mathrm{F}$ from the force-displacement curve as an estimate of $G_\\mathrm{f}$ is exploited in standardized experimental procedures for the identification of fracture energy."
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/question_puzzle.png\" alt=\"Verify\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; &nbsp; <b>Try to verify this statement by changing the parameters</b> </div> "
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "06fb00a2-0eb2-4604-bb04-e693c0d5b4db",
+   "id": "a4562b9c-8550-4fd7-985c-58705e885a89",
+   "metadata": {},
+   "source": [
+    "Evaluate the ratio between\n",
+    "\n",
+    "$$\n",
+    "\\dfrac{G_\\mathrm{total}}{G_\\mathrm{f} p L_\\mathrm{b}} \\rightarrow 1 \\;\\;\\; \\mathrm{for} \\;\\;\\; L_\\mathrm{b} \\rightarrow \\infty\n",
+    "$$\n",
+    "\n",
+    "for several selected values of $L_\\mathrm{b}$. Observe that for small $L_\\mathrm{b}$ the discrepancy becomes larger."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "49e1da03-39e1-4ee1-965a-5a3d64fde477",
    "metadata": {},
    "source": [
-    "In the studied case of the CFRP sheet pullout, the failure included an unstable release of elastically stored energy $\\mathcal{U}$ so that it was necessary to subtract it from the total energy $\\mathcal{W}$ at the point of failure. It is possible to design the failure process in such a way that the failure process is stable and can release the stored energy in parallel to the stable process of energy dissipation. In this case, the identification of energy dissipation is even simpler than in the described case. The concept of such a test design will be studied in the next tour addressing the crack propagation through a bended specimen. "
+    "<a id=\"G_F_measured\"></a>\n",
+    "# **Experimental identification of fracture energy**\n",
+    "\n",
+    "In spite of the observed difference between $G_\\mathrm{F}$ and $G_\\mathrm{f}$, the described concept of \n",
+    "globally evaluated released energy and its normalization with respect to the observed localized discontinuity  represents an efficient characterization procedure delivering an estimate of fracture energy needed to to produce a unit area of a stress free crack or debonding zone. Fracture energy is a fundamental characteristic required for a realistic modeling and assessment of concrete structures. As a consequence, the possibility to evaluate $G_\\mathrm{F}$ from the force-displacement curve as an estimate of $G_\\mathrm{f}$ is exploited in standardized experimental procedures for the identification of fracture energy."
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "7b870b47-6a78-41ea-8739-0f19d984e273",
+   "id": "06fb00a2-0eb2-4604-bb04-e693c0d5b4db",
    "metadata": {},
    "source": [
-    "# **Studies and exercises**"
+    "In the studied case of the CFRP sheet pullout, the failure included an unstable release of elastically stored energy $\\mathcal{U}$ so that it was necessary to subtract it from the total energy $\\mathcal{W}$ at the point of failure. It is possible to design the failure process in such a way that the failure process is stable and can release the stored energy in parallel to the stable process of energy dissipation. In this case, the identification of energy dissipation is even simpler than in the described case. The concept of such a test design will be studied in the next tour addressing the crack propagation through a bended specimen as described in a more detail in notebook [7.2](../tour7_cracking/7_2_fracture_energy_ident.ipynb#rilem_notched_bending_test). "
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "69377d4e-60e9-4ff8-9844-26ad4037931b",
+   "id": "b88d5c74-46b6-4187-886b-fde1c9255dfa",
    "metadata": {},
    "source": [
-    " - Change the parameter $G_\\mathrm{f}$ in the provided example and verify if it still corresponds well to the globally evaluated dissipated energy. Would the equivalence between $G_\\mathrm{F}$ and $G_\\mathrm{f}$ improve if the value of $G_\\mathrm{f}$ is increased or decreased?\n",
-    " - Show the relation between the process zone and fracture energy. \n",
-    " - Show that the difference between the globally evaluated dissipated energy and the local fracture energy increases the more ductile the response, i.e. the larger the process zone."
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/exercise.png\" alt=\"Run\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; &nbsp; <a href=\"../exercises/X0601 - Energy supply and dissipated energy.pdf\"><b>Exercise X0601:</b></a> <b>Energy supply, storage and dissipation</b> \n",
+    "<a href=\"https://moodle.rwth-aachen.de/mod/page/view.php?id=551850\"><img src=\"../icons/bmcs_video.png\" alt=\"Run\" height=\"130\"></a>\n",
+    "</div>"
    ]
   },
   {
@@ -519,6 +571,14 @@
     "</div><div style=\"background-color:lightgray;text-align:center;width:10%;display:inline-table;\"> <a href=\"#top\"><img src=\"../icons/compass.png\" alt=\"Compass\" width=\"50\" height=\"50\"></a></div><div style=\"background-color:lightgray;text-align:right;width:45%;display:inline-table;\"> \n",
     "    <a href=\"../tour7_cracking/7_1_bending3pt_2d.ipynb#top\">7.1 Crack propagation</a>&nbsp; <img src=\"../icons/next.png\" alt=\"Previous trip\" width=\"50\" height=\"50\"> </div> "
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e59b6e37-03c1-4db4-be30-6ec6ae84530d",
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
diff --git a/tour7_cracking/7_1_bending3pt_2d.ipynb b/tour7_cracking/7_1_bending3pt_2d.ipynb
index bd866e8..6a6424f 100644
--- a/tour7_cracking/7_1_bending3pt_2d.ipynb
+++ b/tour7_cracking/7_1_bending3pt_2d.ipynb
@@ -5,17 +5,10 @@
    "id": "1cdb7314-aaae-4b45-8ab9-20c2e6d6e1cc",
    "metadata": {},
    "source": [
+    "<a id=\"top\"></a>\n",
     "# **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",
@@ -68,7 +61,7 @@
     "\n",
     "Due to its simplicity, three-point-bending test on a notched concrete has become a standard (RILEM) to determine the fracture energy $G_\\mathrm{f}$ characterizing the cracking behavior of concrete. The test induces a single crack in the notched section propagating straight upwards from the notch in a stable manner. The energy is dissipated in a local region in the crack vicinity so that it can be directly ascribed to the area of emerging crack surface. \n",
     "\n",
-    "The numerical simulation of this model can be readily performed using the material model with the damage function derived in previous notebooks. An example of the geometry and boundary conditions of the three-point bending test is provided by the Petersen test series using the following setup."
+    "The numerical simulation of this model can be readily performed using the material model with the damage function derived in previous notebooks. An example of the geometry and boundary conditions of the three-point bending test is provided by the  [Petersson (1982)](https://portal.research.lu.se/portal/files/4705811/1785208.pdf) test series using the following setup."
    ]
   },
   {
@@ -94,22 +87,61 @@
   },
   {
    "cell_type": "markdown",
-   "id": "780cfe67-6a6f-435d-afce-dbb2bc491e76",
+   "id": "1f7c6217-d72e-4777-a276-1ff5f524da43",
    "metadata": {},
    "source": [
-    "# **Material model**"
+    "The numerical model simulating this test is assuming a plain stress described by the stress tensor with the enumeration of spatial dimensions using the index variables $a, b$ = [1,2]\n",
+    "$$\n",
+    "\\sigma_{ab}\n",
+    "= \n",
+    "\\left[\n",
+    "\\begin{array}{cc}\n",
+    "\\sigma_{xx} & \\sigma_{xy} \\\\\n",
+    "\\sigma_{yx} & \\sigma_{yy}\n",
+    "\\end{array}\n",
+    "\\right]\n",
+    "$$  \n",
+    "and $\\sigma_{zz} = \\sigma_{xz} = \\sigma_{yz} = 0$. The finite element discretization in this model applies the symmetry condition at the middle section of the beam. Upon loading loading, the damage will localize\n",
+    "at the tip of the notch and propagate upwards."
+   ]
+  },
+  {
+   "attachments": {
+    "b68d13da-8f97-4a34-bac4-2a9bb271b6c0.png": {
+     "image/png": "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"
+    }
+   },
+   "cell_type": "markdown",
+   "id": "4ec83d99-9cb1-4f2d-813e-bc3c2ae2acdb",
+   "metadata": {},
+   "source": [
+    "![image.png](attachment:b68d13da-8f97-4a34-bac4-2a9bb271b6c0.png)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 1,
-   "id": "83e0cf34-4db1-41bf-ac41-7840d0ba44f1",
+   "id": "39daf48d-335e-44f7-b95c-8ba901a2e974",
    "metadata": {},
    "outputs": [],
    "source": [
     "%matplotlib widget\n",
     "from bmcs_bending.bending3pt_2d import BendingTestModel\n",
-    "from ibvpy.tmodel.mats2D import MATS2DScalarDamage"
+    "from ibvpy.tmodel.mats2D import MATS2DScalarDamage\n",
+    "bt = BendingTestModel(material_model='scalar damage', \n",
+    "                      n_e_x=6, n_e_y=16, w_max=-2, k_max=500)\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_cb=1);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "780cfe67-6a6f-435d-afce-dbb2bc491e76",
+   "metadata": {},
+   "source": [
+    "# **Material model**"
    ]
   },
   {
@@ -119,21 +151,100 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "bt = BendingTestModel(material_model='scalar damage', \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.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) # note nu = 0.0 to avoid compressive failure\n",
+    "bt.material_model_.trait_set(E = E, nu = 0.0); # note nu = 0.0 to avoid compressive failure"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1e94865d-0081-4baa-a0b5-bc0268d82e92",
+   "metadata": {},
+   "source": [
+    "## Damage function"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "49ade73c-3541-43a5-9237-2eee0892056e",
+   "metadata": {},
+   "source": [
+    "The exponential damage function with the two parameters $\\kappa_0$ defining the onset of damage and $\\kappa_\\mathrm{f}$ controlling the slope of the exponential softening branch at the onset of damage is defined as follows.  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "312961a7-2faf-4589-9907-aff2da127200",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\displaystyle \\begin{cases} 0 & \\text{for}\\: \\kappa \\leq \\kappa_{0} \\\\1 - \\frac{\\kappa_{0} e^{\\frac{- \\kappa + \\kappa_{0}}{- \\kappa_{0} + \\kappa_\\mathrm{f}}}}{\\kappa} & \\text{otherwise} \\end{cases}$"
+      ],
+      "text/plain": [
+       "<ibvpy.tmodel.mats_damage_fn.ExpSlopeDamageFn at 0x7fe52ff5d090>"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
     "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_.omega_fn_.trait_set(kappa_0=kappa_0, kappa_f=0.0200)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d696e066-9c01-4d81-8ded-43d718177840",
+   "metadata": {},
+   "source": [
+    "To achieve a fast convergence of the nonlinear simulation, the tangential algorithmic stiffness will be activated by setting the parameter `D_alg = 1`. Note that `D_alg = 0` corresponds to the secant stiffness which requires large number of iterations but can cope with large stress redistribution within the simulated domain. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "76bc7d7b-29cd-4cdf-98c3-0b23b06b808b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "bt.material_model_.trait_set(D_alg=1, eps_max=1);"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "49c01fbc-52ee-419d-b78e-d5905d6fef19",
+   "metadata": {},
+   "source": [
+    "The important feature of the provided damage model is the possibility to evaluate the fracture energy, i.e. the amount of energy to achieve a zero stress state. This value can be accessed as a `G_f` property of the material model."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "ba59dabe-e27f-4d71-a20b-21ffb3877d3d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0.06435413610343986"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "bt.material_model_.G_f"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "7541585c-f32d-4954-acfd-d81432fdfd29",
@@ -148,31 +259,31 @@
    "metadata": {},
    "source": [
     "The scalar damage material model can combine different measures of equivalent strain with a different type of damage function. \n",
-    "The task of the energy norm is to transform the two-dimensional strain tensor \n",
+    "The task of the equivalent strain norm is to transform the two-dimensional strain tensor \n",
     "$$\n",
     "\\varepsilon_{ab}\n",
     "= \n",
     "\\left[\n",
     "\\begin{array}{cc}\n",
-    "\\sigma_{xx} & \\sigma_{xy} \\\\\n",
-    "\\sigma_{yx} & \\sigma_{yy}\n",
+    "\\varepsilon_{xx} & \\varepsilon_{xy} \\\\\n",
+    "\\varepsilon_{yx} & \\varepsilon_{yy}\n",
     "\\end{array}\n",
     "\\right]\n",
     "$$  \n",
-    "to a scalar value $\\kappa$. The energy norms already mentioned in the notebook [5.1](../tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb#strain_norm) play the role of an elastic limit. Their visual inspection\n",
+    "to a scalar value $\\kappa$. The equivalent strain norms already mentioned in the notebook [5.1](../tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb#strain_norm) play the role of an elastic limit. Their visual inspection\n",
     "can be performed using the model component of the material model `MATSScalarDamage`. "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 6,
    "id": "0b3773c1-edc6-4952-a414-a0e5f1e41f91",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "d447f54b896a4597924ccb82c5eb082d",
+       "model_id": "0cab14ecb5954173ae61dee5c134b547",
        "version_major": 2,
        "version_minor": 0
       },
@@ -196,24 +307,24 @@
    "source": [
     "Further strain norms can be chosen from the options\n",
     " - Rankine strain norm\n",
-    " - Masars strain norm\n",
+    " - Masar's 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",
+    "These norms 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": 4,
+   "execution_count": 7,
    "id": "8dd4a96a-e8b6-4cbc-9f71-bdf0f680b35d",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "a0df588d7e6648cb86ac384d03b07b2b",
+       "model_id": "c9ebe53ccea8418cae7f8ea74ccef454",
        "version_major": 2,
        "version_minor": 0
       },
@@ -229,6 +340,41 @@
     "bt.material_model_.interact()"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "58a74adf-61e5-4e1d-859c-f3655491c3f0",
+   "metadata": {},
+   "source": [
+    "The mathematical expression delivering the three provided strain norms look as follows:\n",
+    "\n",
+    "**Masars strain norm:**\n",
+    "$$\n",
+    " \\kappa = \\sqrt{ \\sum_{I=1}^{3} \\left< \\varepsilon_I \\right>^2 } =  \\sqrt{ \\left< \\varepsilon_I \\right>^2\\delta_{II} }\n",
+    "$$\n",
+    "where $\\varepsilon_I$ denotes the principal strains. The second version of the expression uses the index notation with a summation over an index that repeats in a product of two terms (see [Einstein summation rule](https://en.wikipedia.org/wiki/Einstein_notation)). The symbol $\\delta_{II}$ represents an identity mapping called Kronecker delta, with $\\delta_{IJ} = 1$ if $I=J$ and $\\delta_{IJ} = 0$ otherwise.  "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "265a0444-bcae-47bb-87ed-e2d74733f612",
+   "metadata": {},
+   "source": [
+    "**Rankine strain norm:**\n",
+    "$$\n",
+    "\\kappa = \\dfrac{1}{E} \\max_{I=1}^{3} \\sigma_I\n",
+    "$$\n",
+    "where $\\sigma_I$ are the principal values of the stress tensor, i.e. \n",
+    "$$\\sigma_{ab} = D^\\mathrm{el}_{abcd} \\varepsilon_{cd}\n",
+    "$$\n",
+    "\n",
+    "**Energy norm**\n",
+    "$$\n",
+    "\\kappa = \\dfrac{1}{E} \\sqrt{ \\boldsymbol{\\varepsilon} : \\boldsymbol{D}^\\mathrm{el}: \\boldsymbol{\\varepsilon} }\n",
+    " = \\dfrac{1}{E} \\sqrt{ \\varepsilon_{ab} D^\\mathrm{el}_{abcd} \\varepsilon_{cd} }\n",
+    "$$\n",
+    "representing circular or spherical shape of the elastic domain in 2D or 3D, respectively."
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "d5e41956-14c6-4ad1-ac42-c4b8b66b15fc",
@@ -302,16 +448,35 @@
     "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": "markdown",
+   "id": "8c12acf6-65fa-4655-bca6-1248c21b4de4",
+   "metadata": {},
+   "source": [
+    "# **Simulation example**"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 8,
+   "id": "aba5b31e-bdfb-4446-ba3b-bae4f01d91e6",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bt.material_model_.strain_norm='Rankine'\n",
+    "bt.run()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
    "id": "bf30823c-3ed8-4e8b-a84c-23cc25c8e094",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "0c8e0d810fef4d439294ca2fb7e0ed4f",
+       "model_id": "ab40da50556048ae99b7cad542b84720",
        "version_major": 2,
        "version_minor": 0
       },
@@ -324,10 +489,17 @@
     }
    ],
    "source": [
-    "bt.run()\n",
     "bt.interact()"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "383468cb-a8bd-4f47-96f8-c0f9769deb28",
+   "metadata": {},
+   "source": [
+    "## Evaluation of energy dissipation"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "9c3028e4-f16b-4d7c-8020-0fa13fade796",
@@ -343,13 +515,13 @@
     "$$\n",
     "In a notched bending test, the crack band is running from the notch straight through the cross section. Therefore, it is possible to directly calculate the dissipative volume $V_\\mathrm{diss}$ as\n",
     "$$\n",
-    " V_\\mathrm{diss} = (H - a) B L_\\mathrm{c}\n",
+    " V_\\mathrm{diss} = (H - a) B L_\\mathrm{cb}\n",
     "$$"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 10,
    "id": "752906fd-2a8a-44ec-b77c-9e3a496f9c0f",
    "metadata": {
     "tags": []
@@ -361,13 +533,13 @@
        "5000.0"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "V_diss = (bt.geometry.H - bt.geometry.a)*bt.cross_section.b * bt.geometry.L_c\n",
+    "V_diss = (bt.geometry.H - bt.geometry.a)*bt.cross_section.b * bt.geometry.L_cb\n",
     "V_diss"
    ]
   },
@@ -381,17 +553,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 11,
    "id": "ec96f0ce-0f91-4d3a-8d59-d3cedb3a9f9c",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "0.1092317778327407"
+       "0.06435413610343986"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -410,17 +582,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 12,
    "id": "8265609d-ed22-4240-a1ac-22bd025137a8",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "546.1588891637035"
+       "321.7706805171993"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -440,24 +612,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 13,
    "id": "e5e6854c-6ec7-43a7-b4bc-d6a725af6b79",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "323.0090836044084"
+       "282.5506041549446"
       ]
      },
-     "execution_count": 9,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
     "import numpy as np\n",
-    "bt.hist.W_t[-1]-np.max( bt.hist.U_bar_t )"
+    "bt.hist.W_t[-1]"
    ]
   },
   {
@@ -479,7 +651,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 14,
    "id": "fd5696fa-725e-4c7b-bac8-f263bdf532d3",
    "metadata": {},
    "outputs": [],
@@ -490,7 +662,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 15,
    "id": "c83a2693-4fbe-4ce8-a3eb-0a281430f1b7",
    "metadata": {},
    "outputs": [
@@ -498,26 +670,23 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "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"
+      "calculating F-w and G for crack band L_cb = 1 [mm]\n",
+      "calculating F-w and G for crack band L_cb = 2 [mm]\n",
+      "calculating F-w and G for crack band L_cb = 4 [mm]\n"
      ]
     }
    ],
    "source": [
-    "L_c_list = [1, 2, 4]\n",
-    "for L_c in L_c_list:\n",
-    "    if Fw_dict.get(L_c):\n",
+    "L_cb_list = [1, 2, 4]\n",
+    "for L_cb in L_cb_list:\n",
+    "    if Fw_dict.get(L_cb):\n",
     "        continue\n",
-    "    print('calculating F-w and G for crack band L_c = %g [mm]' % L_c)\n",
-    "    bt.geometry.L_c = L_c\n",
+    "    print('calculating F-w and G for crack band L_cb = %g [mm]' % L_cb)\n",
     "    bt.reset()\n",
-    "    try: \n",
-    "        bt.run()\n",
-    "    except StopIteration:\n",
-    "        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]"
+    "    bt.geometry.L_cb = L_cb\n",
+    "    bt.run()\n",
+    "    Fw_dict[L_cb] = bt.hist['Fw'].Fw\n",
+    "    G_dict[L_cb] = bt.hist['energy'].G_t[-1]"
    ]
   },
   {
@@ -531,14 +700,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 16,
    "id": "cf30a1f8-7eae-4aa4-8101-fe8337c6cba8",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "8bbc54db68c24e8183d3e7310d480661",
+       "model_id": "c3fd19d8543041709f891a13fa970a8e",
        "version_major": 2,
        "version_minor": 0
       },
@@ -548,21 +717,51 @@
      },
      "metadata": {},
      "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.0, 1150.9964986034481)"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
     "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_dict.items():\n",
-    "    ax.plot(-w,-F,label='L_c = %g' % L_c)\n",
+    "for L_cb, (F, w) in Fw_dict.items():\n",
+    "    ax.plot(-w,-F,label='L_cb = %g' % L_cb)\n",
     "ax.legend()\n",
     "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",
+    "G_list = [G_dict[L_cb] for L_cb in L_cb_list]\n",
+    "ax_G.plot(L_cb_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]');"
+    "ax_G.set_ylabel(r'$G_\\mathrm{total}$ [kJ]');\n",
+    "ax_G.set_ylim(ymin=0, ymax=1.1 * np.max(G_list))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "21f31d44-8b2c-4d8c-9489-1a7eb97e356c",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/caveat.png\" alt=\"Run\" width=\"40\" height=\"40\">\n",
+    "    &nbsp; &nbsp; <b>... mesh dependent results</b> </div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e8e3d7e5-f4ad-4937-a582-4790ca86b2f0",
+   "metadata": {},
+   "source": [
+    "By changing the element size within the crack band we change the volume of material which dissipates energy. As observed, a larger element size leads to a larger amount of energy dissipation which makes the structural response more ductile. Why does it happen? The displacement approximated within a finite element is continuous function. Using low-order elements, with, e.g. bilinear shape functions, means that the strain within the element is of even lower order, i.e. constant or linear. Therefore, strain cannot localize within a smaller size than the size of the element through which the crack propagates. As a consequence, upon softening, an element exhibits a nearly uniform increasing strain which results in energy dissipation over its whole volume. The obtained results are therefore biased by the mesh size which documents an ill-posed model behavior. \n",
+    "\n",
+    "There are several techniques how to avoid this mesh dependency. The principle idea of these so called regularization methods is to ensure a prescribed amount of energy dissipation upon localization. The most simple technique is sketched and demonstrated in the following parametric study. "
    ]
   },
   {
@@ -581,17 +780,130 @@
     "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": "4a7904f7-2bf8-48db-bf3f-2fb8c598a8ba",
+   "metadata": {},
+   "source": [
+    "The above examples explain that the correspondence between the local value of $G_\\mathrm{f}$ and the total energy $G_\\mathrm{total}$ is established by realizing that energy dissipation is linked with the crack propagation. Indeed, if $G_\\mathrm{f}$ is related to a unit area of the crack surface, the total energy dissipation in the whole test with a localized crack of the area $V_\\mathrm{diss}$ is \n",
+    "obtained as\n",
+    "$$\n",
+    "G_\\mathrm{total} = G_\\mathrm{f} V_\\mathrm{diss}.\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "072277b8-b0c9-41ce-afbf-fe38be9c8ee8",
+   "metadata": {},
+   "source": [
+    "In the above example, the crack was represented by a band of elements with the width specified by the $L_\\mathrm{cb}$ model parameter. Since the crack developed over the whole notched cross section, we can express the dissipative volume as"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7db41e2b-79d2-4b5b-a2d2-6291b3cd7b19",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    " V_\\mathrm{diss} = (H - a) B L_\\mathrm{cb}\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a242081d-0ae5-4d7d-b755-c6e472446d31",
+   "metadata": {},
+   "source": [
+    "To ensure that the amount of dissipated energy for a changed $V_\\mathrm{diss}$ due to different mesh size does not change, we need to correspondingly adjust effective value of dissipated energy in depending on $L_\\mathrm{cb}$. In other words, we need to introduce\n",
+    "$$\n",
+    "G_\\mathrm{f}^{L_\\mathrm{cb}} = \\dfrac{G_\\mathrm{f}}{L_\\mathrm{cb}}\n",
+    "$$\n",
+    "so that the total energy becomes independent on $L_\\mathrm{cb}$\n",
+    "$$\n",
+    " G_\\mathrm{total} = G_\\mathrm{f}^{L_\\mathrm{cb}} (H-a) B L_\\mathrm{cb}\n",
+    " = G_\\mathrm{f} (H-a) B.\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "052c3446-73d5-48ec-9e31-3b640d62e2c7",
+   "metadata": {},
+   "source": [
+    "This scaling must be achieved by adjusting the material parameters of the model depending on the size of the discretization element $L_\\mathrm{cb}$. In present model we use the exponential damage function with the two parameters $\\kappa_0$ and $\\kappa_\\mathrm{f}$ controlling the onset of damage and the slope of the descending branch, respectively. The above specified scaling of energy dissipation can be achieved by scaling the parameter \n",
+    "$$\n",
+    "\\kappa_{\\mathrm{f}}^{L_\\mathrm{cb}} = \\dfrac{\\kappa_{\\mathrm{f}}}{L_\\mathrm{cb}}\n",
+    "\\implies\n",
+    "G_\\mathrm{f}^{L_\\mathrm{cb}} \\approx \\dfrac{G_\\mathrm{f}}{L_\\mathrm{cb}}\n",
+    "$$."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dc7d789f-201b-4a9c-9c12-1793ae7d11e5",
+   "metadata": {},
+   "source": [
+    "To verify, that this scaling correspondingly affects the effective amount of energy dissipation by evaluating the value of $G_{\\mathrm{f}}^{L_\\mathrm{cb}}$ for the values of $L_\\mathrm{cb} = [1,2,3,4]$. These values should lead to the corresponding fractions [$1, \\frac{1}{2}, \\frac{1}{3}, \\frac{1}{4}$] of $G_\\mathrm{f}$. Assuming the reference value $\\kappa_f$ corresponding to the length $L_\\mathrm{cb} = 1$ we obtain"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "ba4e5e08-1bd1-447b-864d-51121cc9fbaa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([1.        , 0.49416785, 0.32557841, 0.24129989])"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "kappa_f = 0.0336 # reference value of kappa for L_cb = 1\n",
+    "kappa_f_range = kappa_f / np.array([1,2,3,4])\n",
+    "G_f_range = []\n",
+    "for kappa_f_ in kappa_f_range:\n",
+    "    bt.material_model_.omega_fn_.kappa_f = kappa_0 + kappa_f_\n",
+    "    G_f_range += [bt.material_model_.G_f]\n",
+    "np.array(G_f_range) / G_f_range[0]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2711a80a-b87e-4739-b4a6-e4608bdf4853",
+   "metadata": {},
+   "source": [
+    "Which roughly correspond to the desired fractions"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "f4a93e45-ad34-4485-bf75-b7e7a46150ee",
    "metadata": {},
    "source": [
-    "Let us demonstrate the concept of mesh-adjusted softening response on the running example."
+    "Let us now apply this scaling by changing a single line in the parametric study. This line is denoted as `REGULARIZATION`."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 18,
+   "id": "3e2fc748-3c89-4e84-af7c-84f3f3f40632",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "Fw_reg_dict = {}\n",
+    "G_reg_dict = {}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
    "id": "0e49628e-0d75-4a92-a1e9-74386de668fc",
    "metadata": {},
    "outputs": [
@@ -599,46 +911,44 @@
      "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"
+      "calculating F-w and G_total for crack band L_cb = 1 [mm]\n",
+      "with scaled effective specific dissipation energy G_f 0.1092317778327407\n",
+      "calculating F-w and G_total for crack band L_cb = 2 [mm]\n",
+      "with scaled effective specific dissipation energy G_f 0.053795255499048136\n",
+      "calculating F-w and G_total for crack band L_cb = 4 [mm]\n",
+      "with scaled effective specific dissipation energy G_f 0.02608239216637152\n"
      ]
     }
    ],
    "source": [
-    "Fw_reg_dict = {}\n",
-    "G_reg_dict = {}\n",
-    "L_c_list = [1, 2, 4]\n",
+    "L_cb_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",
+    "for L_cb in L_cb_list:\n",
+    "    if Fw_reg_dict.get(L_cb):\n",
     "        continue\n",
-    "    print('calculating F-w and G for crack band L_c = %g [mm]' % L_c)\n",
+    "    print('calculating F-w and G_total for crack band L_cb = %g [mm]' % L_cb)\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",
+    "    bt.geometry.L_cb = L_cb\n",
+    "    bt.material_model_.omega_fn_.kappa_f = kappa_f / L_cb #### REGULARIZATION ####\n",
+    "    print('with scaled effective specific dissipation energy 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]"
+    "        print('simulation interupted due to slow convergence', L_cb)\n",
+    "    Fw_reg_dict[L_cb] = bt.hist['Fw'].Fw\n",
+    "    G_reg_dict[L_cb] = bt.hist['energy'].G_t[-1]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 20,
    "id": "bc7eb155-af93-45db-b1c8-7237afbffb1f",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "58058a37fc0e4926b4130214c7ab3f63",
+       "model_id": "fbc99ee74a544befaaf71685bd7f4614",
        "version_major": 2,
        "version_minor": 0
       },
@@ -654,21 +964,67 @@
     "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",
+    "for L_cb, (F, w) in Fw_reg_dict.items():\n",
+    "    ax.plot(-w,-F,label='L_cb = %g' % L_cb)\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]');"
+    "G_list = [G_reg_dict[L_cb] for L_cb in L_cb_list]\n",
+    "ax_G.plot(L_cb_list, G_list, marker='H')\n",
+    "ax_G.set_xlabel(r'$L_\\mathrm{cb}$ [mm]')\n",
+    "ax_G.set_ylabel(r'$G_\\mathrm{total}$ [kJ]');\n",
+    "ax_G.set_ylim(ymin=0, ymax=1.1 * np.max(G_list));"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "eea93b93-7e10-49f8-8537-d90b5c042463",
+   "id": "21c01b03-1871-4979-adb4-6355d4086438",
    "metadata": {},
+   "source": [
+    "Even though the difference in the predicted peak of the load deflection curve shown left is still apparent, the amount of dissipated energy up to the control displacement of $w=2$ mm does not change with the element size any more. Let us remark that the applied scaling of $\\kappa_\\mathrm{f}$ was only approximate. A more sophisticated scaling and a smaller size of load increment would be required to achieve even a better match of the load deflection curves."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d691b328-6926-4ce6-a4e8-6154f7465ed8",
+   "metadata": {},
+   "source": [
+    "The described kind of scaling can be found in the most common finite-element codes. In the present example, the position and profile of the crack was known a-priori. Finite element codes implementing material models with softening behavior must implement a general procedure for the described crack band regularization. This regularization is performed in each material point by including the size of the containing element and the orientation of principle strains to reflect the width of the softening zone correctly.\n",
+    "\n",
+    "The described procedure can be regarded as a _quick fix_. It makes the standard finite-element method applicable to simulation cracking for problems with straight crack evolution, i.e. tensile cracks. It is, however, insufficient for crack propagation with non-negligible shear stress within the localization zone. Indeed, most of the commercially available software based on continuous finite-element approximation of the displacement field cannot correctly predict the shear crack propagation.  Pragmatic solutions, including an additional parameter like a shear retention factor, are provided in some software packages (ATENA). \n",
+    "\n",
+    "More advanced methods address the problem of mesh independence using \n",
+    " - Nonlocal averaging of state variables over a defined size of a process zone\n",
+    " - Gradient methods of damage and plasticity including the gradient of state variables into the constitutive law\n",
+    "\n",
+    "They are mentioned here for completeness and as an optional further reading."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f63aca65-a261-4bb1-b9eb-e605bfff4190",
+   "metadata": {},
+   "source": [
+    "**Note the dimensionality of $G_\\mathrm{f}$:** To be precise, let us note that in contrast to the example shown in notebook [6.3](tour6_energy/6_3_localized_energy_dissipation.ipynb) for the CFRP pullout simulation, the damage function was applied to the bond-slip law, describing the behavior of a unit area of the interface. On the other hand, in the present notebook, we applied the damage function in a two-dimensional constitutive law. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cdc804ad-d583-44ad-9376-be203876faf3",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left;width:45%;display:inline-table;\"> <img src=\"../icons/previous.png\" alt=\"Previous trip\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; <a href=\"../tour6_energy/6_3_localized_energy_dissipation.ipynb#top\">6.3 Softening and fracture energy</a> \n",
+    "</div><div style=\"background-color:lightgray;text-align:center;width:10%;display:inline-table;\"> <a href=\"#top\"><img src=\"../icons/compass.png\" alt=\"Compass\" width=\"50\" height=\"50\"></a></div><div style=\"background-color:lightgray;text-align:right;width:45%;display:inline-table;\"> \n",
+    "    <a href=\"../tour7_cracking/7_2_fracture_energy_ident.ipynb#top\">7.2 Identification of fracture energy</a>&nbsp; <img src=\"../icons/next.png\" alt=\"Previous trip\" width=\"50\" height=\"50\"> </div> "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a8412fb5-e582-4c05-9340-b8c399f67d42",
+   "metadata": {},
+   "outputs": [],
    "source": []
   }
  ],
diff --git a/tour7_cracking/7_2_fracture_energy_ident.ipynb b/tour7_cracking/7_2_fracture_energy_ident.ipynb
new file mode 100644
index 0000000..c12a94f
--- /dev/null
+++ b/tour7_cracking/7_2_fracture_energy_ident.ipynb
@@ -0,0 +1,509 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1cdb7314-aaae-4b45-8ab9-20c2e6d6e1cc",
+   "metadata": {},
+   "source": [
+    "<a id=\"top\"></a>\n",
+    "# **7.2 Fracture energy identification and size effect**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "55707766-c485-4a3b-a811-cc70b90099e6",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/start_flag.png\" alt=\"Previous trip\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; &nbsp; <b>Starting point</b> </div> "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "fbd8eb16-c1c1-4e37-8f24-821c32f463ad",
+   "metadata": {},
+   "source": [
+    "We have learned that fracture energy plays a crucial role in the simulation of structural response of concrete elements. The crucial questions remains, how can it be determined experimentally and what is the consequence of localization within a fracture process zone for structural assessment concepts. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7465bcb5-c7ac-4c62-9a2d-d77555c4ecfc",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/destination.png\" alt=\"Previous trip\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; &nbsp; <b>Where are we heading</b> </div> "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0a445732-21ce-4a91-9268-5ac4096fbbbd",
+   "metadata": {},
+   "source": [
+    "The knowledge of the area of a localized of a cracked specimen gives us a chance to determine the value of the total energy and divide it by the area of a crack to obtain the fracture energy. We have used this concept already in the notebook [6.3](../tour6_energy/6_3_localized_energy_dissipation.ipynb#G_F_measured) in the simulation of CFRP debonding. Let us briefly summarize the identification of the fracture energy for used to identify the value of fracture energy characterizing the concrete cracking.  "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e99690ed-a16f-4a43-aff7-037f57368f42",
+   "metadata": {},
+   "source": [
+    "<a id=\"rilem_notched_bending_test\"></a>\n",
+    "# **RILEM notched bending test**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "658a3c51-bec8-4438-a7b4-89e522125d7c",
+   "metadata": {},
+   "source": [
+    "An isolated tensile crack, mode-I crack, can be initiated using a notched specimen.\n",
+    " Why\n",
+    "The most common configurations used to study the cracking behavior for a tensile\n",
+    " notched\n",
+    "crack denoted as mode I are the wedge splitting test and notched, three-point\n",
+    " three-point\n",
+    "bending\n",
+    "bending test. Both these tests aim at the characterization of the material behavior\n",
+    "test?\n",
+    "in terms of the softening law describing the relation between the tensile stress\n",
+    "transmitted across the localization zone and the corresponding crack opening."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9ca6e083-3611-4543-b4ab-7581d16bb11b",
+   "metadata": {},
+   "source": [
+    "Due to its simplicity, three-point-bending test of a notched concrete specimen has become \n",
+    "a standard (RILEM) to determine the fracture energy $G_\\mathrm{F}$ characterizing the cracking behavior of concrete. The test induces a single crack in the notched section\n",
+    "propagating straight upwards from the notch in a stable manner. The energy is\n",
+    "dissipated in a local region in the crack vicinity so that it can be directly ascribed\n",
+    "to the area of emerging crack surface."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cc72aaad-e575-4871-b07b-3857c4c41436",
+   "metadata": {},
+   "source": [
+    "**Direct evaluation of the fracture energy:** Recalling that we can characterize\n",
+    "the stable process of crack propagation by an amount of energy needed to produce\n",
+    "a unit crack area, i.e. fracture energy $G_\\mathrm{F}$ , we can choose a more efficient and\n",
+    "pragmatic approach determining the fracture energy directly from the test without\n",
+    "having to perform numerical calibration. This is the idea behind the standardized\n",
+    "characterization procedure proposed by the RILEM committee. "
+   ]
+  },
+  {
+   "attachments": {
+    "2a126bc6-bc46-4a80-a831-c7c4558a709c.png": {
+     "image/png": "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"
+    }
+   },
+   "cell_type": "markdown",
+   "id": "700fc277-4f6f-4884-9968-e8a5b3da3da2",
+   "metadata": {},
+   "source": [
+    "![image.png](attachment:2a126bc6-bc46-4a80-a831-c7c4558a709c.png)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "11f9b887-8efb-481a-97c9-d914cc22bdbf",
+   "metadata": {},
+   "source": [
+    "Recall that at the\n",
+    "point of failure, the whole energy has been consumed to produce the crack of \n",
+    "surface area \n",
+    "$$\n",
+    "A = B \\, (H − a),\n",
+    "$$\n",
+    "where $H$ and $B$ denote the height and width of the beam\n",
+    "and $a$ is the notch depth. Then, assuming uniform dissipation during a stable crack\n",
+    "propagation we can set"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a52d4f2e-bddf-4204-8f5c-c2de22262900",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "G_\\mathrm{F} = \\dfrac{W}{B \\, (H-a)}\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "83e3bd8a-ea1d-4354-8862-94919903624d",
+   "metadata": {},
+   "source": [
+    "However, this simple approach would ignore the fact that self-weight of the beam\n",
+    "also induced the initial deflection $w_0$. Neither the self-weight load, nor the corresponding\n",
+    "deflection are included in the experimentally recorded curve. The situation can be  illustrated \n",
+    "as follows in the load-deflection diagram. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "54583b11-9aa0-42f0-8c8a-b8449f011a88",
+   "metadata": {},
+   "source": [
+    "![fw_Gf](../fig/F-w-Gf.png)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8a4440c0-88b3-41eb-ae09-f946a9550017",
+   "metadata": {},
+   "source": [
+    "In the test, only the area $W_1$ is measured. At point $w_0$, the specimen will actually break down because it cannot sustain its own weight. Therefore, the area $W_2$ is hidden. It can only estimated as an area of the rectangle"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "786ae739-d7c6-4408-8f85-8924e9a52235",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "W_2 = F_0 w_0 = M g w_0\n",
+    "$$\n",
+    "where $F_0$ is the dead load given as the product of the weight of the beam between the supports $M$ and the gravity acceleration $g = 9.81 \\mathrm{[m/s^2]}$. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "fc54e22b-8a59-4969-a78d-96d8c48d093d",
+   "metadata": {},
+   "source": [
+    "Thus, the true fracture energy obtained using the above test can be estimated as estimate\n",
+    "$$\n",
+    "G_\\mathrm{F} = \\dfrac{W_1 + M g w_0}{B\\, (H-a)}\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c6e46363-cf9c-41f6-b825-0029c3f24100",
+   "metadata": {},
+   "source": [
+    "A simple remedy to avoid the effect of self weight is to compensate for the initial deflection by including an extra weight outside of the supports, for example by doubling the beam length."
+   ]
+  },
+  {
+   "attachments": {
+    "5bd0c865-c036-4d9d-92f7-a62913836ebd.png": {
+     "image/png": "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"
+    }
+   },
+   "cell_type": "markdown",
+   "id": "5ae99fe1-9f58-427b-8f6d-0aab22d4fe42",
+   "metadata": {},
+   "source": [
+    "![image.png](attachment:5bd0c865-c036-4d9d-92f7-a62913836ebd.png)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "140a89d6-d1ec-4c40-b5a8-8ded3314ad7d",
+   "metadata": {},
+   "source": [
+    "A pioneering work showing the systematic experimental approach to the identification of fracture energy has been presented by [Petersson (1982)](https://portal.research.lu.se/portal/files/4705811/1785208.pdf). The report provides a clear explanation of the test parameters, e.g. notch depth, curing conditions,  and their influence on the determined value of fracture energy. It served as a basis for the current RILEM standards used for characterization of wide range of concrete materials, including mixtures with short fibers. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "39040612-3c39-4199-82fd-8373415ca035",
+   "metadata": {},
+   "source": [
+    "The discussion above demonstrates an important aim of theoretical research: develop simple characterization procedures that can deliver model parameters even for advanced models. We use the fracture energy $G_\\mathrm{F}$ as an example of a successful effort, in which the theoretical development influenced the engineering practice by providing measures for standardization and comparability between various concrete mixtures in view of their quasi-brittleness."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c31d4885-a0c1-47e2-bab3-d669d5a72a0a",
+   "metadata": {},
+   "source": [
+    "# **Size effect** "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d2c15296-1bfc-4ade-be72-24afc2e00f12",
+   "metadata": {},
+   "source": [
+    "With the experimentally determined fracture energy at hand, and with a regularized model presented in we are now able to capture to predict the cracking response of a beam with modified dimensions and loading configuration. Even though that the model has only a limited range of validity, it can be used demonstrate and visualize an important phenomenon included in the behavior of concrete structures which must be considered also in engineering design rules."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cc368b86-39cf-4ae2-a1ce-e7fdac96ab35",
+   "metadata": {},
+   "source": [
+    "The fact that the material softening leads to strain localization within a small dissipative zone around the propagating crack tip leads to a phenomenon called **size effect**. In simple terms, it states that the response of a structure cannot be simply scaled with its changed dimensions. Let us demonstrate this by performing a parametric study of the notched beam test in which we scale up the length and depth of the beam."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dace10e2-20c2-41f2-a8f5-7ac1dcdab463",
+   "metadata": {},
+   "source": [
+    "Let us again revisit the simulation of the three-point bending test. We will keep the size of the crack band constant, i.e. $L_\\mathrm{cb} = 1~\\mathrm{[N/mm]}$. This means that in small and in large specimens, the crack propagation is governed by the same fracture energy. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "9c8e5ecb-835c-4e66-b065-47731b39dfd8",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%matplotlib widget\n",
+    "from bmcs_bending.bending3pt_2d import BendingTestModel\n",
+    "from ibvpy.tmodel.mats2D import MATS2DScalarDamage"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9cab7dbf-adf5-4beb-a88c-36eb5d6ed2be",
+   "metadata": {},
+   "source": [
+    "Because we will perform several simulations, let us produce several models which we may consider as virtual specimens. Therefore, a function called `new_bt` is defined to construct an instance of the `BendingTestModel`,\n",
+    "This function has three parameters, `L`, `H`, and `a` representing the beam length, height and notch depth to introduce the scaling of dimensions in the parametric study. All other parameters are defined as constants within the function so that they are kept equal in all simulated specimens."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "b3afc77c-783e-44fe-acd1-e1e9b49f7841",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def new_bt(L=2000, H=200, a=100):\n",
+    "    E = 30000\n",
+    "    f_ct = 3.3\n",
+    "    kappa_0 = f_ct / E\n",
+    "    bt = BendingTestModel(material_model='scalar damage', \n",
+    "                          n_e_x=6, n_e_y=16, w_max=-2, k_max=1000)\n",
+    "    bt.time_line.step=0.02\n",
+    "    bt.history.warp_factor=100\n",
+    "    bt.cross_section.trait_set(b=50)\n",
+    "    bt.geometry.trait_set(L=L, H=H, a=a, L_cb=1);\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=0.95, eps_max=1);\n",
+    "    return bt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c78c8c7c-04fb-4c76-acc8-6b1dde0f90a3",
+   "metadata": {},
+   "source": [
+    "The simulated specimens will be collected in a dictionary `bt_dict` with each entry accessible via a key `scale` denoting the multiplier used to scale the dimensions of the beam. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "fc9dd650-71c2-4e76-8fb6-7bc8466558f3",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bt_dict = {}"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "422009e9-386b-425e-a3d8-5ab58643212b",
+   "metadata": {},
+   "source": [
+    "The reference dimensions are equal to the study performed previously. The scales are defined in the variable `scale_list`. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "1cc2a58f-1799-466f-be57-fdbe9bd765e7",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "calculating F-w and G_total for scale = 0.5\n",
+      "calculating F-w and G_total for scale = 1\n",
+      "calculating F-w and G_total for scale = 2\n",
+      "calculating F-w and G_total for scale = 4\n"
+     ]
+    }
+   ],
+   "source": [
+    "import numpy as np\n",
+    "scale_list = [0.5,1,2,4]\n",
+    "L0 = 2000\n",
+    "H0 = 200\n",
+    "B0 = 50\n",
+    "a0 = 50\n",
+    "for scale in scale_list:\n",
+    "    print('calculating F-w and G_total for scale = %g' % scale)\n",
+    "    bt = new_bt(L=L0*scale, H=H0*scale, a=a0*scale)\n",
+    "    try: \n",
+    "        bt.run()\n",
+    "    except StopIteration:\n",
+    "        print('simulation interupted due to slow convergence', scale)\n",
+    "    bt_dict[scale] = bt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "586ab9c5-ac3c-4f23-a397-fa52cc5cca26",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left\"> <img src=\"../icons/view.png\" alt=\"Run\" width=\"40\" height=\"40\">\n",
+    "    &nbsp; &nbsp; <b>... let us put the results into a diagram</b> </div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6eb1db8a-f230-4fd5-83e1-2d6c8def2843",
+   "metadata": {},
+   "source": [
+    "To evaluate the results, we want to collect the load deflection curves from each of the specimen stored in `bt_dict`. At the same time, we shall extract the value of the dissipated energy.  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "a3fc049f-480f-4615-ae09-fa3135f5596f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "9adefcfc1089475daac992b80212413a",
+       "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": [
+    "import numpy as np\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",
+    "F_w_list = [bt_dict[scale].hist['Fw'].Fw for scale in scale_list ]\n",
+    "for scale, (F, w) in zip(scale_list, F_w_list):\n",
+    "    ax.plot(-w,-F,label='scale = %g' % scale)\n",
+    "ax.legend()\n",
+    "ax.set_xlabel(r'$w$ [mm]');\n",
+    "ax.set_ylabel(r'$F$ [N]');\n",
+    "G_list = [bt_dict[scale].hist['energy'].G_t[-1] for scale in scale_list]\n",
+    "U_bar_list = [np.max(bt_dict[scale].hist['energy'].U_bar_t) for scale in scale_list]\n",
+    "ax_G.plot(scale_list, G_list, marker='H', label=r'$G_\\mathrm{total}$')\n",
+    "ax_G.plot(scale_list, U_bar_list, color='green', marker='H', label=r'$\\mathcal{U}$')\n",
+    "ax_G.set_xlabel(r'$\\mathrm{scale}$ [-]')\n",
+    "ax_G.set_ylabel(r'$G_\\mathrm{total}$ [kJ]');\n",
+    "ax_G.set_ylim(ymin=0, ymax=1.1 * np.max(G_list));\n",
+    "ax_F = ax_G.twinx()\n",
+    "F_max_list = [np.max(-F) for F, w in F_w_list]\n",
+    "ax_F.plot(scale_list, F_max_list, marker='H', color='orange', label=r'$F_\\max$');\n",
+    "ax_F.set_ylabel(r'$F_\\max$ [N]');\n",
+    "ax_G.legend(loc=2)\n",
+    "ax_F.legend(loc=4);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0de95815-5b6e-4f9a-adc8-6a7c58a354b0",
+   "metadata": {},
+   "source": [
+    " - The total energy dissipation $G_\\mathrm{total}$ increases proportionally to the cross sectional area\n",
+    " - The maximum stored energy $\\max({\\mathcal{U}})$ is increasing non-proportionally to the cross sectional area\n",
+    " - The ultimate load **does not** increase proportionally to the cross sectional area \n",
+    " - Large specimens exhibit more brittle failure than small specimens"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8ae3d1c5-4624-41a6-a6fd-2cfa267e263d",
+   "metadata": {},
+   "source": [
+    "A larger amount of energy stored within the elastic parts of the specimen accelerates the failure process. In a post peak regime, it acts as an additional load within the dissipative zones. When we change the size of the specimen, the size of the fracture process zone does not change. However, the material volume which stores energy increases. This means that the ratio between $G_\\mathrm{F}$, needed to make a crack of a unit area stress free, and the stored energy driving the unloading process of surrounding elastic material changes. This ratio controls the brittleness of the structural response."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "b3a51580-57c7-4c51-b4a7-17a044450d6a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "dfa6230babc64402b44897180f53db18",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "bt_dict[2].interact()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "af32baab-4840-48ab-896a-baffbc7c6983",
+   "metadata": {},
+   "source": [
+    "<div style=\"background-color:lightgray;text-align:left;width:45%;display:inline-table;\"> <img src=\"../icons/previous.png\" alt=\"Previous trip\" width=\"50\" height=\"50\">\n",
+    "    &nbsp; <a href=\"../tour7_cracking/7_1_bending3pt_2d.ipynb#top\">7.1 Straight crack propagation</a> \n",
+    "</div><div style=\"background-color:lightgray;text-align:center;width:10%;display:inline-table;\"> <a href=\"#top\"><img src=\"../icons/compass.png\" alt=\"Compass\" width=\"50\" height=\"50\"></a></div><div style=\"background-color:lightgray;text-align:right;width:45%;display:inline-table;\"> \n",
+    "    <a href=\"../tour8_bending/8_1_reinforced_beam.ipynb#top\">8.1 Reinforced beam bending</a>&nbsp; <img src=\"../icons/next.png\" alt=\"Previous trip\" width=\"50\" height=\"50\"> </div> "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "83699a75-8f05-425a-9843-453f96c9e543",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "bmcs_env",
+   "language": "python",
+   "name": "bmcs_env"
+  },
+  "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.8.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tour7_cracking/7_3_stable_and_unstable.ipynb b/tour7_cracking/7_3_stable_and_unstable.ipynb
new file mode 100644
index 0000000..2e032ea
--- /dev/null
+++ b/tour7_cracking/7_3_stable_and_unstable.ipynb
@@ -0,0 +1,221 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1cdb7314-aaae-4b45-8ab9-20c2e6d6e1cc",
+   "metadata": {},
+   "source": [
+    "# **7.3 Stable and unstable crack growth and energy dissipation**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "952140e5-b250-4e30-bcbf-5d9267719459",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%matplotlib widget\n",
+    "from bmcs_bending.bending3pt_2d import BendingTestModel\n",
+    "from ibvpy.tmodel.mats2D import MATS2DScalarDamage\n",
+    "bt = BendingTestModel(material_model='scalar damage', \n",
+    "                      n_e_x=6, n_e_y=16, w_max=-2, k_max=1000)\n",
+    "E = 30000\n",
+    "scale = 2\n",
+    "f_ct = 3.3\n",
+    "kappa_0 = f_ct / E\n",
+    "bt.time_line.step=0.003\n",
+    "bt.history.warp_factor=100\n",
+    "bt.cross_section.trait_set(b=50)\n",
+    "bt.geometry.trait_set(L=2000*scale, H=200*scale, a=100*scale, L_cb=1)\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.0, eps_max=1);"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "ff441cb8-cd3e-40d8-acf9-1b3cab56d443",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bt.run()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "f13923d3-6fcd-4bfa-abe7-23008b7cebaa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "a82b8771294c429a81918a3753d62df5",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "bt.interact()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "ccc12c94-0aa9-4079-8790-8aa1484b9eae",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%matplotlib widget\n",
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np\n",
+    "from bmcs_cross_section.pullout import PullOutModel1D\n",
+    "po_cfrp = PullOutModel1D(n_e_x=300, w_max=5) # mm \n",
+    "po_cfrp.geometry.L_x=500 # [mm]\n",
+    "po_cfrp.time_line.step = 0.01\n",
+    "po_cfrp.cross_section.trait_set(A_m=400*200, A_f=100*0.11, P_b=100);\n",
+    "po_cfrp.material_model='damage'\n",
+    "po_cfrp.material_model_.trait_set(E_m=28000, E_f=230000, E_b=250, s_max=.4)\n",
+    "po_cfrp.material_model_.D_alg=1 # use algorithmic stiffness\n",
+    "po_cfrp.material_model_.omega_fn='fracture-energy'\n",
+    "po_cfrp.material_model_.omega_fn_.trait_set(kappa_0=0.0001, G_f=1.19);"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "ea8c7314-126a-4eee-9b9a-477580ae5fa8",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "po_cfrp.run()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "41016401-99f8-4a65-805d-15e09ba082a4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "80cbd3d82da544ed8f34e3a3eb7ba873",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "VBox(children=(HBox(children=(VBox(children=(Tree(layout=Layout(align_items='stretch', border='solid 1px black…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "po_cfrp.interact()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b585d7d5-6528-4181-9dc8-de155cf36a90",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6b338054-7c26-4790-b1be-5bb334096bfa",
+   "metadata": {},
+   "source": [
+    "Evaluation of the dissipated energy in a damage model is done as"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4c9866c8-8416-49b0-9121-3a64b2ba65f5",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "\\mathcal{D}_\\omega = \\int_t \\int_\\Omega Y \\dot{\\omega} \\, \\mathrm{d}\\boldsymbol{x}\\, \\mathrm{d}t\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d0e5fa5e-c535-4022-be68-bd4ff95fc5bf",
+   "metadata": {},
+   "source": [
+    "The energy dissipated by a single material point"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "24120566-b292-4112-8e1f-b180dd73cbd7",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "\\mathcal{d}_\\omega = \\int_t  Y \\dot{\\omega} \\, \\mathrm{d}t\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a4f6c37b-ad58-4e88-9c2e-30c9070e64ea",
+   "metadata": {},
+   "source": [
+    "The specific dissipated energy evaluated using the cumulative integral"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4104fcc3-df54-4830-a2c1-26152e7bd0ce",
+   "metadata": {},
+   "source": [
+    "$$\n",
+    "\\mathcal{d}_\\omega = \\int_0^\\omega Y \\mathrm{d} \\omega\n",
+    "$$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f27831a2-1fc3-4f73-aaef-f98d1ffeb0dc",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "bmcs_env",
+   "language": "python",
+   "name": "bmcs_env"
+  },
+  "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.8.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tour7_cracking/bmcs_bending/bending3pt_2d.py b/tour7_cracking/bmcs_bending/bending3pt_2d.py
index 0ee7244..130a802 100755
--- a/tour7_cracking/bmcs_bending/bending3pt_2d.py
+++ b/tour7_cracking/bmcs_bending/bending3pt_2d.py
@@ -5,9 +5,6 @@ Created on 12.01.2016
 @todo: derive the size of the state array.
 '''
 
-import time
-
-import bmcs_utils.api
 from ibvpy.tfunction import MonotonicLoadingScenario, CyclicLoadingScenario
 from ibvpy.api import \
     BCSlice, Hist
@@ -229,24 +226,17 @@ class Viz2DdGdA(Viz2D):
 
 class BendingHistory(Hist, Model):
 
-    vis_record = {'Fw': ForceDisplacement(),
-                  'energy' : Vis2DEnergy(),
-                  'crack_band' : Vis2DCrackBand() }
+    vis_record = tr.Dict
+    def _vis_record_default(self):
+        return {'Fw': ForceDisplacement(),
+                'energy' : Vis2DEnergy(),
+                'crack_band' : Vis2DCrackBand() }
 
     t_slider = Float(0)
     t_max = tr.Property()
     def _get_t_max(self):
         return self.t[-1]
 
-    def get_Fw_t(self):
-        tstep = self.tstep_source
-        record_dofs = tstep.control_bc.dofs
-        U_ti = self.U_t
-        F_ti = self.F_t
-        F = np.sum(F_ti[:, record_dofs], axis=1)
-        w = U_ti[:, record_dofs[0]]
-        return F, w
-
     def plot_Fw(self, ax):
         F_range, w_range = self['Fw'].Fw
 #        F_range, w_range = self.get_Fw_t()
@@ -274,14 +264,17 @@ class BendingHistory(Hist, Model):
              color_U='green', color_W='black'):
         vis_energy = self['energy']
         t = vis_energy.get_t()
-        U_bar_t = vis_energy.U_bar_t
+        U_bar_t = np.array(vis_energy.U_bar_t, dtype=np.float_)
         W_t = vis_energy.get_W_t()
         ax.plot(t, W_t, color=color_W, label=label_W)
         ax.plot(t, U_bar_t, color=color_U, label=label_U)
+        # Energy contribution relevant evaluated using internal variables
+        # G_omega_t = np.array(vis_energy.G_omega_t, dtype=np.float_)
+        # ax.plot(t, U_bar_t+G_omega_t, color='black', linestyle='dashed', label='G_t')
         ax.fill_between(t, W_t, U_bar_t, facecolor='gray', alpha=0.5,
                         label='G(t)')
         ax.fill_between(t, U_bar_t, 0, facecolor=color_U, alpha=0.5,
-                        label='G(t)')
+                        label='U(t)')
         ax.set_ylabel('energy [Nmm]')
         ax.set_xlabel('control displacement [mm]')
         ax.legend()
@@ -397,7 +390,7 @@ class Geometry(BMCSLeafNode):
               label='notch depth',
               auto_set=False, enter_set=True,
               desc='Depth of the notch')
-    L_c = Float(4.0,
+    L_cb = Float(4.0,
                 GEO=True,
                 label='crack band width',
                 auto_set=False, enter_set=True,
@@ -407,7 +400,7 @@ class Geometry(BMCSLeafNode):
         Item('H'),
         Item('L'),
         Item('a'),
-        Item('L_c'),
+        Item('L_cb', latex=r'L_\mathrm{cb}'),
     )
 
 
@@ -600,10 +593,10 @@ class BendingTestModel(TStepBC, Model):
                               fets=self.fets_eval)
 
         L = self.geometry.L / 2.0
-        L_c = self.geometry.L_c
+        L_cb = self.geometry.L_cb
         x_x, x_y = dgrid.mesh.geo_grid.point_x_grid
         L_1 = x_x[1, 0]
-        d_L = L_c - L_1
+        d_L = L_cb - L_1
         x_x[1:, :] += d_L * (L - x_x[1:, :]) / (L - L_1)
         return dgrid
 
@@ -731,174 +724,3 @@ class TensileTestModel(BendingTestModel):
         return BCSlice(slice=self.fe_grid[0, n_e_y, 0, 0],
                        var='u', dims=[1], value=0)
 
-#
-# def run_tension_sdamage(*args, **kw):
-#     bt = TensileTestModel(n_e_x=3, n_e_y=30,
-#                           mats_type='scalar damage')
-#     bt.tloop.k_max = 800
-#     L_c = 5.0
-#     E = 30000.0
-#     f_t = 2.5
-#     G_f = 0.09
-#     bt.mats_type = 'scalar damage'
-#     bt.mats.trait_set(
-#         algorithmic=True,
-#         E=E,
-#         nu=0.2
-#     )
-#     bt.mats.omega_fn.trait_set(
-#         f_t=f_t,
-#         G_f=G_f,
-#         L_s=L_c
-#     )
-#     # print 'Gf', h_b * bt.mats_eval.get_G_f()
-#
-#     bt.w_max = 0.2
-#     bt.time_line.step = 0.01
-#     bt.cross_section.b = 100.
-#     bt.geometry.trait_set(
-#         L=450,
-#         H=110,
-#         a=10,
-#         L_c=L_c
-#     )
-#     bt.loading_scenario.trait_set(loading_type='monotonic')
-#     w = BMCSWindow(sim=bt)
-# #    bt.add_viz2d('F-w', 'load-displacement')
-#
-#     bt.record['Pw'] = PulloutResponse()
-#     bt.record['energy'] = Vis2DEnergy()
-#     bt.record['crack band'] = Vis2DCrackBand()
-#
-#     fw = Viz2DForceDeflection(name='Pw', vis2d=bt.hist['Pw'])
-#     viz2d_energy = Viz2DEnergy(name='dissipation',
-#                                vis2d=bt.hist['energy'])
-#     viz2d_energy_rates = Viz2DEnergyReleasePlot(
-#         name='dissipated energy',
-#         vis2d=bt.hist['energy']
-#     )
-#     w.viz_sheet.viz2d_list.append(fw)
-#     w.viz_sheet.viz2d_list.append(viz2d_energy)
-#     w.viz_sheet.viz2d_list.append(viz2d_energy_rates)
-#     viz2d_cb_strain = Viz2DStrainInCrack(name='strain in crack',
-#                                          vis2d=bt.hist['crack band'])
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_strain)
-#     viz2d_cb_a = Viz2DTA(name='crack length',
-#                          vis2d=bt.hist['crack band'],
-#                          visible=False)
-#     viz2d_cb_dGda = Viz2DdGdA(name='energy release per crack extension',
-#                               vis2d=bt.hist['energy'],
-#                               vis2d_cb=bt.hist['crack band'],
-#                               visible=False)
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_a)
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_dGda)
-#     w.viz_sheet.monitor_chunk_size = 1
-#     return w
-#
-#
-# def run_bending3pt_sdamage(*args, **kw):
-#     bt = BendingTestModel(n_e_x=10, n_e_y=30,
-#                           mats_type='scalar damage'
-#                           #mats_eval_type='microplane damage (eeq)'
-#                           #mats_eval_type='microplane CSD (eeq)'
-#                           #mats_eval_type='microplane CSD (odf)'
-#                           )
-#     bt.tloop.k_max = 800
-#     L_c = 5.0
-#     E = 30000.0
-#     f_t = 2.5
-#     G_f = 0.09
-#     bt.mats_type = 'scalar damage'
-#     bt.mats.trait_set(
-#         algorithmic=False,
-#         E=E,
-#         nu=0.2
-#     )
-#     bt.mats.omega_fn.trait_set(
-#         f_t=f_t,
-#         G_f=G_f,
-#         L_s=L_c
-#     )
-#     # print 'Gf', h_b * bt.mats_eval.get_G_f()
-#
-#     bt.w_max = 0.8
-#     bt.tline.step = 0.02
-#     bt.cross_section.b = 100.
-#     bt.geometry.trait_set(
-#         L=450,
-#         H=110,
-#         a=10,
-#         L_c=L_c
-#     )
-#     bt.loading_scenario.trait_set(loading_type='monotonic')
-#     w = BMCSWindow(sim=bt)
-# #    bt.add_viz2d('F-w', 'load-displacement')
-#
-#     bt.record['Pw'] = PulloutResponse()
-#     bt.record['energy'] = Vis2DEnergy()
-#     bt.record['crack band'] = Vis2DCrackBand()
-#
-#     fw = Viz2DForceDeflection(name='Pw', vis2d=bt.hist['Pw'])
-#     viz2d_energy = Viz2DEnergy(name='dissipation',
-#                                vis2d=bt.hist['energy'])
-#     viz2d_energy_rates = Viz2DEnergyReleasePlot(
-#         name='dissipated energy',
-#         vis2d=bt.hist['energy']
-#     )
-#     w.viz_sheet.viz2d_list.append(fw)
-#     w.viz_sheet.viz2d_list.append(viz2d_energy)
-#     w.viz_sheet.viz2d_list.append(viz2d_energy_rates)
-#     viz2d_cb_strain = Viz2DStrainInCrack(name='strain in crack',
-#                                          vis2d=bt.hist['crack band'])
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_strain)
-#     viz2d_cb_a = Viz2DTA(name='crack length',
-#                          vis2d=bt.hist['crack band'],
-#                          visible=False)
-#     viz2d_cb_dGda = Viz2DdGdA(name='energy release per crack extension',
-#                               vis2d=bt.hist['energy'],
-#                               vis2d_cb=bt.hist['crack band'],
-#                               visible=False)
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_a)
-#     w.viz_sheet.viz2d_list.append(viz2d_cb_dGda)
-#     w.viz_sheet.monitor_chunk_size = 1
-#     return w
-#
-#
-# def run_bending3pt_sdamage_viz2d(*args, **kw):
-#     w = run_bending3pt_sdamage()
-#     w.offline = True
-#     w.run()
-#     w.offline = False
-#     w.configure_traits(*args, **kw)
-#
-#
-# def run_bending3pt_sdamage_viz3d(*args, **kw):
-#     w = run_bending3pt_sdamage()
-# #    w.offline = True
-#     bt = w.sim
-#     bt.tloop.verbose = True
-#     bt.record['damage'] = Vis3DStateField(var='omega')
-#     viz3d_damage = Viz3DScalarField(vis3d=bt.hist['damage'])
-#     w.viz_sheet.add_viz3d(viz3d_damage)
-#     time.sleep(0.1)
-# #    print(bt.tstep.fe_domain[0].tmodel)
-#     w.run()
-#     w.configure_traits(*args, **kw)
-#
-#
-# def run_tension_sdamage_viz3d(*args, **kw):
-#     w = run_tension_sdamage()
-# #    w.offline = True
-#     bt = w.sim
-#     bt.tloop.verbose = True
-#     bt.record['damage'] = Vis3DStateField(var='omega')
-#     viz3d_damage = Viz3DScalarField(vis3d=bt.hist['damage'])
-#     w.viz_sheet.add_viz3d(viz3d_damage)
-#     time.sleep(0.1)
-# #    print(bt.tstep.fe_domain[0].tmodel)
-#     w.run()
-#     w.configure_traits(*args, **kw)
-#
-#
-# if __name__ == '__main__':
-#     run_tension_sdamage_viz3d()
diff --git a/tour7_cracking/bmcs_bending/viz3d_energy.py b/tour7_cracking/bmcs_bending/viz3d_energy.py
index 0bd7732..f6237e4 100755
--- a/tour7_cracking/bmcs_bending/viz3d_energy.py
+++ b/tour7_cracking/bmcs_bending/viz3d_energy.py
@@ -6,7 +6,7 @@ Created on May 30, 2018
 
 from scipy import interpolate as ip
 from ibvpy.view.plot2d import Viz2D, Vis2D
-
+from scipy.integrate import cumtrapz
 import numpy as np
 import traits.api as tr
 
@@ -31,11 +31,13 @@ class ForceDisplacement(Vis2D):
 class Vis2DEnergy(Vis2D):
 
     U_bar_t = tr.List()
+    Y_Em_t = tr.List()
 
     tstep = tr.WeakRef
 
     def setup(self):
         self.U_bar_t = []
+        self.Y_Em_t = []
 
     def update(self):
         tstep = self.tstep
@@ -62,6 +64,12 @@ class Vis2DEnergy(Vis2D):
         )
         self.U_bar_t.append(U_bar)
 
+        Y_Em_t = d / 2.0 * np.einsum(
+            'm,Em,Emab,abcd,Emcd->Em',
+            w_m, det_J_Em, eps_Emab, mats.D_abcd, eps_Emab
+        )
+        self.Y_Em_t.append(Y_Em_t)
+
     def get_t(self):
         return self.tstep.hist.t
 
@@ -71,10 +79,24 @@ class Vis2DEnergy(Vis2D):
 
     def get_W_t(self):
         P, w = self.tstep.hist['Fw'].Fw
-        return [
-            np.trapz(P[:i + 1], w[:i + 1])
-            for i, _ in enumerate(w)
-        ]
+        return cumtrapz(P, w, initial=0)
+
+    G_omega_t = tr.Property
+    def _get_G_omega_t(self):
+        tstep = self.tstep
+        Y_Em_t = np.array(self.Y_Em_t, dtype=np.float_)
+        hist = tstep.hist
+        t = hist.t
+        omega_Em_t = np.array([state[0]['omega'] for state in hist.state_vars])
+        # G_omega_Em_t = cumtrapz(Y_Em_t, omega_Em_t, axis=0, initial = 0)
+        # return np.sum(G_omega_Em_t, axis=(1,2))
+
+        d_omega_Em_t = (
+            (omega_Em_t[1:] - omega_Em_t[:-1]) / (t[1:] - t[:-1])[:,None,None]
+        )
+        dG_omega_t = np.hstack([
+            np.einsum('tEm,tEm->t', Y_Em_t[:-1], d_omega_Em_t), [0]])
+        return cumtrapz(dG_omega_t, t, initial=0)
 
     G_t = tr.Property
 
-- 
GitLab