Skip to content
Snippets Groups Projects
Commit f59fdde6 authored by Rostislav Chudoba's avatar Rostislav Chudoba
Browse files

finished 5.1

parent 4f8514d3
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Brittle-Matrix Composite Structures** # **Brittle-Matrix Composite Structures**
Institute of Structural Concrete; @author: Rostislav Chudoba, Abedulgader Baktheer Institute of Structural Concrete; @author: Rostislav Chudoba, Abedulgader Baktheer
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Expedition investigating the BMCS landscape ## Expedition investigating the BMCS landscape
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
| | | | | | | | | |
|-|-|-------|------| |-|-|-------|------|
| ![image-15.png](attachment:image-15.png) | ![image-4.png](fig/reinforcement.png) | ![image-2.png](fig/bond.png) | ![image.png](fig/matrix.png) | | ![image-15.png](attachment:image-15.png) | ![image-4.png](fig/reinforcement.png) | ![image-2.png](fig/bond.png) | ![image.png](fig/matrix.png) |
| ![image-14.png](attachment:image-14.png) | [![image-6.png](fig/pullout.png)](pull_out/pull_out.ipynb) | ![image-7.png](fig/crack_bridge.png)| [![image-8.png](fig/mkappa.png)](mkappa/mkappa.ipynb) | | ![image-14.png](attachment:image-14.png) | [![image-6.png](fig/pullout.png)](pull_out/pull_out.ipynb) | ![image-7.png](fig/crack_bridge.png)| [![image-8.png](fig/mkappa.png)](mkappa/mkappa.ipynb) |
| ![image-13.png](attachment:image-13.png) | [![image-9.png](fig/tension.png)](pull_out/fragmentation.ipynb) | [![image-10.png](fig/bending.png)](bending/bending_3pt.ipynb) | ![image-11.png](fig/compression.png) | | ![image-13.png](attachment:image-13.png) | [![image-9.png](fig/tension.png)](pull_out/fragmentation.ipynb) | [![image-10.png](fig/bending.png)](bending/bending_3pt.ipynb) | ![image-11.png](fig/compression.png) |
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Guided tours provided through BMCS landscape ## Guided tours provided through BMCS landscape
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
| No. | Title | | No. | Title |
|- | - | |- | - |
| **[Tour 1:](#tour1)** | Mixture rule (effective composite stiffness) | | **[Tour 1:](#tour1)** | Mixture rule (effective composite stiffness) |
| **[Tour 2:](#tour2)** | Constant bond (friction, pull-out, crack-bridge, multiple cracking) | | **[Tour 2:](#tour2)** | Constant bond (friction, pull-out, crack-bridge, multiple cracking) |
| **[Tour 3:](#tour3)** | Nonlinear bond (hardening, softening -> failure modes: anchorage, cracing) | | **[Tour 3:](#tour3)** | Nonlinear bond (hardening, softening -> failure modes: anchorage, cracing) |
| **[Tour 4:](#tour4)** | Plastic bond behavior (irreversibility -> energy dissipation) | | **[Tour 4:](#tour4)** | Plastic bond behavior (irreversibility -> energy dissipation) |
| **[Tour 5:](#tour5)** | Damage bond behavior (2D sheet debonding) | | **[Tour 5:](#tour5)** | Damage bond behavior (2D sheet debonding) |
| **[Tour 6:](#tour6)** | Concrete cracking and yielding (bended cross section) | | **[Tour 6:](#tour6)** | Concrete cracking and yielding (bended cross section) |
| **[Tour 7:](#tour7)** | Beam deflection - comparison wth EC2 and Model Code | | **[Tour 7:](#tour7)** | Beam deflection - comparison wth EC2 and Model Code |
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Tools used in the BMCS ## Tools used in the BMCS
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
| Engine and wheels | Further information | | Engine and wheels | Further information |
|-- |---| |-- |---|
| Jupyter notebooks | | | Jupyter notebooks | |
| OpenWebApps | | | OpenWebApps | |
| Elementary syntax of Python language | | | Elementary syntax of Python language | |
| Plotting tools | `matplotlib` | | Plotting tools | `matplotlib` |
| Computer Algebra System | `sympy` | | Computer Algebra System | `sympy` |
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Knowledge and skills developed during the BMCS expedition ## Knowledge and skills developed during the BMCS expedition
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
* Understand nonlinear material behavior, stress-redistribution, objectivity of material laws * Understand nonlinear material behavior, stress-redistribution, objectivity of material laws
* Develop a basic understanding of damage, plasticity, fracture * Develop a basic understanding of damage, plasticity, fracture
* Formulate simplified analytical models capturing material and structural behavior * Formulate simplified analytical models capturing material and structural behavior
* Compare self-developed analytical models with general finite-element models * Compare self-developed analytical models with general finite-element models
* Distinguish model verification, calibration, validation and parametric studies * Distinguish model verification, calibration, validation and parametric studies
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour1"></a> <a id="tour1"></a>
## **Tour 1**: Introduction ## **Tour 1**: Introduction
### 1.1 A roadmap through the BMCS landscape ### 1.1 A roadmap through the BMCS landscape
### 1.2 Introduction to Jupyter Web Apps and notebooks ### 1.2 Introduction to Jupyter Web Apps and notebooks
Not only static slides and videos but also the possibility to interactively put your fingers on the theory in terms of prepared interactive applications is used throughout the course. Not only static slides and videos but also the possibility to interactively put your fingers on the theory in terms of prepared interactive applications is used throughout the course.
<!-- Basic information how to <!-- Basic information how to
use the `jupyter` notebooks are summarized here:</br> use the `jupyter` notebooks are summarized here:</br>
[**Web Apps:** first steps](link) [**Web Apps:** first steps](link)
--> -->
### 1.3 Interactive computational environment ### 1.3 Interactive computational environment
To demonstrate the theory on examples that can be interactively modified, let us consider an elementary case of mixture rule to determine the effective stiffness of an elastic composite </br> To demonstrate the theory on examples that can be interactively modified, let us consider an elementary case of mixture rule to determine the effective stiffness of an elastic composite </br>
[**Mixture rule**: example elastic mixture rule](tour1_intro/1_1_elastic_stiffness_of_the_composite.ipynb#top) [**Mixture rule**: example elastic mixture rule](tour1_intro/1_1_elastic_stiffness_of_the_composite.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour2"></a> <a id="tour2"></a>
## **Tour 2:** Constant bond - pull-out, crack bridge, fragmentation ## **Tour 2:** Constant bond - pull-out, crack bridge, fragmentation
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 2.1 - Pull-out from rigid matrix - test setup and theory ### 2.1 - Pull-out from rigid matrix - test setup and theory
Using the analytical solution of the pullout problem assuming constant bond-slip law, elastic fiber and rigid matrix, we first explore the fundamental relations between the measured pull-out curve of a steel-rebar from the concrete matrix:</br> Using the analytical solution of the pullout problem assuming constant bond-slip law, elastic fiber and rigid matrix, we first explore the fundamental relations between the measured pull-out curve of a steel-rebar from the concrete matrix:</br>
[**Pull-out:** analytical constant-bond model](tour2_constant_bond/2_1_1_PO_observation.ipynb#top) [**Pull-out:** analytical constant-bond model](tour2_constant_bond/2_1_1_PO_observation.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 2.2 - Classification of pullout configurations with constant bond stress ### 2.2 - Classification of pullout configurations with constant bond stress
Include further configurations of a pull-out to show the differences in their behavior, learning the correspondence between the shape of the pull-out curve and the distribution of slip, shear, fiber and matrix strain and stresses depending on a particular configuration, i.e. elastic matrix, short fiber, short matrix and clamped fiber:</br> Include further configurations of a pull-out to show the differences in their behavior, learning the correspondence between the shape of the pull-out curve and the distribution of slip, shear, fiber and matrix strain and stresses depending on a particular configuration, i.e. elastic matrix, short fiber, short matrix and clamped fiber:</br>
[**Pull-out:** extended analytical constant-bond models - short / long / elastic / clamped](tour2_constant_bond/2_2_1_PO_configuration_explorer.ipynb#top) [**Pull-out:** extended analytical constant-bond models - short / long / elastic / clamped](tour2_constant_bond/2_2_1_PO_configuration_explorer.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 2.3 - Multiple cracking - fragmentation ### 2.3 - Multiple cracking - fragmentation
The crack-bridging action of a fiber within a composite loaded in tension is a key to understanding the behavior of brittle-matrix composites. By putting crack bridges in a series, we can directly simulate a tensile test and predict the test response in terms of the stress-strain and crack spacing curves. This helps us to study and understand the relation between reinforcement ratio, bond strength, matrix strenth and the tensile response of the composite: The crack-bridging action of a fiber within a composite loaded in tension is a key to understanding the behavior of brittle-matrix composites. By putting crack bridges in a series, we can directly simulate a tensile test and predict the test response in terms of the stress-strain and crack spacing curves. This helps us to study and understand the relation between reinforcement ratio, bond strength, matrix strenth and the tensile response of the composite:
</br> </br>
[**Multiple cracking:** tensile response of a composite](tour2_constant_bond/fragmentation.ipynb#top) [**Multiple cracking:** tensile response of a composite](tour2_constant_bond/fragmentation.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour3"></a> <a id="tour3"></a>
## **Tour 3:** Non-linear bond-slip law ## **Tour 3:** Non-linear bond-slip law
### 3.1 - Pull-out with softening and hardening bond behavior ### 3.1 - Pull-out with softening and hardening bond behavior
The shape of the bond-slip law is distinguished into hardening and softening leading to a completely different pull-out behavior. A numerical model of the pull-out test is used to monitor and explain the debonding process in two studies for steel and CFRP bond to concrete showing a qualitatively different behavior.</br> The shape of the bond-slip law is distinguished into hardening and softening leading to a completely different pull-out behavior. A numerical model of the pull-out test is used to monitor and explain the debonding process in two studies for steel and CFRP bond to concrete showing a qualitatively different behavior.</br>
[**Pull-out**: with softening and hardening](tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb#top) [**Pull-out**: with softening and hardening](tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb#top)
### 3.2 - Effect of bond length: anchorage versus pull-out failure ### 3.2 - Effect of bond length: anchorage versus pull-out failure
With the developed understanding, we address questions related to design rules: What is the necessary bond length to avoid or to deliberately induce a fiber pull-out or fiber rupture. At which distance from the loaded end can we expect a matrix crack to appear?</br> With the developed understanding, we address questions related to design rules: What is the necessary bond length to avoid or to deliberately induce a fiber pull-out or fiber rupture. At which distance from the loaded end can we expect a matrix crack to appear?</br>
[**Anchorage**: pull-out, fiber rupture, matrix crack](tour3_nonlinear_bond/3_2_anchorage_length.ipynb#top) [**Anchorage**: pull-out, fiber rupture, matrix crack](tour3_nonlinear_bond/3_2_anchorage_length.ipynb#top)
### Related optional support material ### Related optional support material
The numerical vehicles used in the above two trips are provided here in a more detail as a bonus material.</br> The numerical vehicles used in the above two trips are provided here in a more detail as a bonus material.</br>
[**Appendix**: Newton iterative scheme](extras/newton_method.ipynb#top)</br> [**Appendix**: Newton iterative scheme](extras/newton_method.ipynb#top)</br>
[**Appendix**: Nonlinear finite-element solver for 1d pullout](extras/pullout1d.ipynb#top) [**Appendix**: Nonlinear finite-element solver for 1d pullout](extras/pullout1d.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour4"></a> <a id="tour4"></a>
## **Tour 4:** Irreversibility due to yielding ## **Tour 4:** Irreversibility due to yielding
### 4.1 - Unloading and reloading ### 4.1 - Unloading and reloading
Non-linear behavior can be described by nonlinear functions as we did so far. However, Non-linear behavior can be described by nonlinear functions as we did so far. However,
this description cannot capture the irreversible changes within the material structure. this description cannot capture the irreversible changes within the material structure.
To demonstrate this, let us revisit the pull-out tests and consider a loading scenario with unloading and reloading.</br> To demonstrate this, let us revisit the pull-out tests and consider a loading scenario with unloading and reloading.</br>
[Unloading with multi-linear bond-slip law](tour4_plastic_bond/4_1_PO_multilinear_unloading.ipynb#top) [Unloading with multi-linear bond-slip law](tour4_plastic_bond/4_1_PO_multilinear_unloading.ipynb#top)
### 4.2 - The basic concept of plasticity ### 4.2 - The basic concept of plasticity
The first option in describing irreversible changes in a material point is the The first option in describing irreversible changes in a material point is the
plasticity. The stick-slip interface represents the simplest possible plasticity. The stick-slip interface represents the simplest possible
type of plastic behavior that can be conveniently used to explain the key concept type of plastic behavior that can be conveniently used to explain the key concept
behind all material models introducing plastic behavior.</br> behind all material models introducing plastic behavior.</br>
[Ideal, isotropic and kinematic hardening of an interface](tour4_plastic_bond/4_2_BS_EP_SH_I_A.ipynb#top) [Ideal, isotropic and kinematic hardening of an interface](tour4_plastic_bond/4_2_BS_EP_SH_I_A.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### 4.3 - Cyclic pullout test and plastic material behavior ### 4.3 - Cyclic pullout test and plastic material behavior
With the knowledge of the plasticity at a material point level, let us study the effect of unloading and reloading at the level of a structure. In particular, we learn to interpret the meaning of the unloading stiffness at the level of a structure.</br> With the knowledge of the plasticity at a material point level, let us study the effect of unloading and reloading at the level of a structure. In particular, we learn to interpret the meaning of the unloading stiffness at the level of a structure.</br>
[Cyclic pullout of textile fabrics and CFRP sheets](tour4_plastic_bond/4_3_PO_trc_cfrp_cyclic.ipynb#top) [Cyclic pullout of textile fabrics and CFRP sheets](tour4_plastic_bond/4_3_PO_trc_cfrp_cyclic.ipynb#top)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour5"></a>
## **Tour 5:** Irreversibility due to damage ## **Tour 5:** Irreversibility due to damage
### 5.1 Damage initiation, damage evolution, 2D bond behavior ### 5.1 Damage initiation, damage evolution, 2D bond behavior
[Damage initiation, damage evolution, 2D bond behavior](tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb) [Damage initiation, damage evolution, 2D bond behavior](tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb)
### 5.2 Pullout behavior governed by damage ¶ ### 5.2 Pullout behavior governed by damage ¶
[Pull out simulation using damage model](tour5_damage_bond/5_2_PO_cfrp_damage.ipynb) [Pull out simulation using damage model](tour5_damage_bond/5_2_PO_cfrp_damage.ipynb)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgreen;text-align:left"> <img src="icons/rest.png" alt="Step by step" width="40" height="40"> <div style="background-color:lightgreen;text-align:left"> <img src="icons/rest.png" alt="Step by step" width="40" height="40">
&nbsp; &nbsp; <b>Our current location</b> </div> &nbsp; &nbsp; <b>Our current location</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour6"></a>
## **Tour 6:** From debonding to cracking ## **Tour 6:** From debonding to cracking
- 6.1 Crack propagation - 6.1 Crack propagation
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="tour7"></a>
## **Tour 7:** Reinforced bended cross section ## **Tour 7:** Reinforced bended cross section
- 7.1 Beam bending - 7.1 Beam bending
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
......
...@@ -70,13 +70,13 @@ ...@@ -70,13 +70,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 5,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"application/vnd.jupyter.widget-view+json": { "application/vnd.jupyter.widget-view+json": {
"model_id": "aa679c9a134f4afa9e5e06a6d61c16b9", "model_id": "735610fd27ee461aad640614c65a260f",
"version_major": 2, "version_major": 2,
"version_minor": 0 "version_minor": 0
}, },
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
{ {
"data": { "data": {
"application/vnd.jupyter.widget-view+json": { "application/vnd.jupyter.widget-view+json": {
"model_id": "a20f4260c8f54ab59d4d9ad7c2474cca", "model_id": "3c276ea1bffe428b92bf854b313990bd",
"version_major": 2, "version_major": 2,
"version_minor": 0 "version_minor": 0
}, },
...@@ -176,7 +176,7 @@ ...@@ -176,7 +176,7 @@
{ {
"data": { "data": {
"application/vnd.jupyter.widget-view+json": { "application/vnd.jupyter.widget-view+json": {
"model_id": "291aa713915840b5a850713f697d8a43", "model_id": "de56fdd2d67142f2b15e7f6ba2ac28a7",
"version_major": 2, "version_major": 2,
"version_minor": 0 "version_minor": 0
}, },
...@@ -217,13 +217,13 @@ ...@@ -217,13 +217,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 4,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"application/vnd.jupyter.widget-view+json": { "application/vnd.jupyter.widget-view+json": {
"model_id": "922c5f729a8a411eb475c7e346c77815", "model_id": "45fd75c0b31545b0bd41d1a7ef251c5e",
"version_major": 2, "version_major": 2,
"version_minor": 0 "version_minor": 0
}, },
...@@ -300,7 +300,7 @@ ...@@ -300,7 +300,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.8.10" "version": "3.9.1"
}, },
"toc": { "toc": {
"base_numbering": 1, "base_numbering": 1,
......
This diff is collapsed.
...@@ -849,7 +849,7 @@ ...@@ -849,7 +849,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.8.10" "version": "3.9.1"
}, },
"toc": { "toc": {
"base_numbering": 1, "base_numbering": 1,
......
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<a id="top"></a> <a id="top"></a>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **5.1 Interface behavior governed by damage** # **5.1 Interface behavior governed by damage**
<div style="background-color:lightgray;text-align:left"> <img src="../icons/start_flag.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/start_flag.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Starting point</b> </div> &nbsp; &nbsp; <b>Starting point</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Having described the irreversible behavior of the material using the assumption of frictional stress transfer between the material components which induces permanent **plastic** deformation, we move on to the second possibility, where we idealize the irreversible changes in the material structure as a spring break. This idealization is the basis of **damage** models. Having described the irreversible behavior of the material using the assumption of frictional stress transfer between the material components which induces permanent **plastic** deformation, we move on to the second possibility, where we idealize the irreversible changes in the material structure as a spring break. This idealization is the basis of **damage** models.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/destination.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/destination.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Where are we heading</b> </div> &nbsp; &nbsp; <b>Where are we heading</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
**Damage functions:** We are going to define several damage functions which are used in damage models available in finite element codes. Their definition is based on an assumed profile of breakage propagation. We can use different types of damage functions that express the state of material as an amount of broken bindings/micro-springs within a unit volume of the material structure. Even though we explain them using a one-dimensional idealization of the bond behavior, it is important to note, that these functions are directly applicable in two- and three-dimensional finite element models. To document this, we demonstrate that the derived damage functions can be used to model a two-dimensional interface with slip and shear stress defined as a vector. **Damage functions:** We are going to define several damage functions which are used in damage models available in finite element codes. Their definition is based on an assumed profile of breakage propagation. We can use different types of damage functions that express the state of material as an amount of broken bindings/micro-springs within a unit volume of the material structure. Even though we explain them using a one-dimensional idealization of the bond behavior, it is important to note, that these functions are directly applicable in two- and three-dimensional finite element models. To document this, we demonstrate that the derived damage functions can be used to model a two-dimensional interface with slip and shear stress defined as a vector.
**Damage evolution and energy dissipation:** From a longer perspective, we are preparing the grounds for the discussion of energy dissipation associated with irreversible changes within the material structures. Some of the damage functions presented below already employ the concept of dissipated energy within a damaged unit volume of material. They are used as precursors here to motivate the consideration of energy dissipation in the following tours. **Damage evolution and energy dissipation:** From a longer perspective, we are preparing the grounds for the discussion of energy dissipation associated with irreversible changes within the material structures. Some of the damage functions presented below already employ the concept of dissipated energy within a damaged unit volume of material. They are used as precursors here to motivate the consideration of energy dissipation in the following tours.
Summarizing, in the present notebook, we are going to Summarizing, in the present notebook, we are going to
* describe and visualize examples of damage functions in 1D * describe and visualize examples of damage functions in 1D
* show how to use an isotropic damage model to represent * show how to use an isotropic damage model to represent
the material behavior of a 2D interface? the material behavior of a 2D interface
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Motivation: Fiber bundle behavior described using a damage function** # **Motivation and general aspects of damage**
%% Cell type:markdown id: tags:
## Fiber bundle behavior described using a damage function
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To provide a motivation for the damage based description of the material behavior let us consider micrographs of a multi-filament yarn cross section embedded in the concrete matrix. Depending on the type of the yarn, the cross section can consist of 800-50000 carbon/glass/basalt filaments with a diameter ranging between 8-30 $\mu m$. The micrograph below presents a non-penetrated 800 [tex] yarn. The unit [tex] represents the weight in grams per one km of the yarn To provide a motivation for the damage based description of the material behavior let us consider micrographs of a multi-filament yarn cross section embedded in the concrete matrix. Depending on the type of the yarn, the cross section can consist of 800-50000 carbon/glass/basalt filaments with a diameter ranging between 8-30 $\mu m$. The micrograph below presents a non-penetrated 800 [tex] yarn. The unit [tex] represents the weight in grams per one km of the yarn
\begin{align} \begin{align}
[\mathrm{tex}] = [\mathrm{g}/\mathrm{km}] [\mathrm{tex}] = [\mathrm{g}/\mathrm{km}]
\end{align} \end{align}
The yarns can be penetrated by a homogenizing material, most commonly epoxy resin based material. The yarns can be penetrated by a homogenizing material, most commonly epoxy resin based material.
The picture below shows two cross section of a non-penetrated glass yarn. The shapes of the cross section are circular (on the left) and flat (on the right). The picture below shows two cross section of a non-penetrated glass yarn. The shapes of the cross section are circular (on the left) and flat (on the right).
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![image.png](attachment:a9ef9398-627a-441f-896c-1bca024dfffc.png) ![image.png](attachment:a9ef9398-627a-441f-896c-1bca024dfffc.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To describe the load transfer and the failure process of a yarn, the tree-dimensional representation of the structure has been reproduced using slicing technique in collaboration with IMB, ibac and GIA RWTH Aachen. The pictures show significant geometric irregularity both along the length of the yarn and in the direction of the cross-section. To describe the load transfer and the failure process of a yarn, the tree-dimensional representation of the structure has been reproduced using slicing technique in collaboration with IMB, ibac and GIA RWTH Aachen. The pictures show significant geometric irregularity both along the length of the yarn and in the direction of the cross-section.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![yarn3d](../fig/yarn3d.png) ![yarn3d](../fig/yarn3d.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The primary purpose of the reinforcement is to transfer the tensile load. Let us therefore construct an idealization which can be used to describe its tensile response as a result breakage process of the individual elastic filaments. The stress-strain curve measured in a tensile test on a yarn delivers a softening type of response. We use the example of the yarn to describe the relation between tensile stress versus strain as a filament breakage process. However, the same type of idealization applies also for the bond-slip law $\tau(s)$ that can be regarded as an irregular structure of many springs that fail in a sequence. The primary purpose of the reinforcement is to transfer the tensile load. Let us therefore construct an idealization which can be used to describe its tensile response as a result breakage process of the individual elastic filaments. The stress-strain curve measured in a tensile test on a yarn delivers a softening type of response. We use the example of the yarn to describe the relation between tensile stress versus strain as a filament breakage process. However, the same type of idealization applies also for the bond-slip law $\tau(s)$ that can be regarded as an irregular structure of many springs that fail in a sequence.
<a id="sig_eps_damage"></a> <a id="sig_eps_damage"></a>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![image.png](attachment:3b0d0b72-96a7-443b-a9e0-a2e0f129d29f.png) ![image.png](attachment:3b0d0b72-96a7-443b-a9e0-a2e0f129d29f.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Note that the fiber bundle as a system of discrete springs can be applied both Note that the fiber bundle as a system of discrete springs can be applied both
in tension and in shear. The damage function explained below are applicable in in tension and in shear. The damage function explained below are applicable in
both situations. Moreover, they can be used also in two- and three dimensional both situations. Moreover, they can be used also in two- and three dimensional
configurations as well. configurations as well.
![image.png](attachment:image.png) ![image.png](attachment:image.png)
Thus, we can express the tensile response of a yarn as %% Cell type:markdown id: tags:
## Mathematical framework for the definition of damage models
%% Cell type:markdown id: tags:
The tensile response of a yarn can be expressed as
\begin{align} \begin{align}
\sigma &= \psi E_\mathrm{b} s = (1 - \omega) E_\mathrm{b} \varepsilon \sigma &= \psi E_\mathrm{b} s = (1 - \omega) E_\mathrm{b} \varepsilon
\end{align} \end{align}
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
This expression relates the level of stress directly to the fraction of the broken filaments represented by the dimensionless damage variable This expression relates the level of stress directly to the fraction of the broken filaments represented by the dimensionless damage variable
\begin{align} \begin{align}
\omega \in (0,1) \omega \in (0,1)
\end{align} \end{align}
The fraction of unbroken filaments is introduced as a degree of integrity The fraction of unbroken filaments is introduced as a degree of integrity
\begin{align} \begin{align}
\psi = 1 - \omega. \psi = 1 - \omega.
\end{align} \end{align}
The profile of the integrity and damage functions corresponding to the above stress-strain curve has the following shape. The profile of the integrity and damage functions corresponding to the above stress-strain curve has the following shape.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![image.png](attachment:34409f61-779a-4ac8-be74-df92b56f3538.png) ![image.png](attachment:34409f61-779a-4ac8-be74-df92b56f3538.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
In the elastic regime with no damage, the value of $\omega$ remains zero $\omega = 0$. After the breakage of the first filament, it starts to grow up to a complete damage with $\omega = 1$. Having used the fiber bundles as suitable pictures for the motivation of damage by explaining their tensile response, we will return to the bond-slip law $\tau(s)$ in the sequel with the goal to mathematically describe the bond and pullout behavior within the damage framework. In the elastic regime with no damage, the value of $\omega$ remains zero $\omega = 0$. After the breakage of the first filament, it starts to grow up to a complete damage with $\omega = 1$. Having used the fiber bundles as a suitable picture to motivate the damage modeling for tensile response, we will return to the bond-slip law $\tau(s)$ in the sequel with the goal to mathematically describe the bond and pullout behavior within the damage framework.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Mathematical framework for the definition of damage models**
Instead of explicitly prescribing the nonlinear bond slip law as a nonlinear curve let us prescribe Instead of explicitly prescribing the nonlinear bond slip law as a nonlinear curve let us prescribe
a nonlinear curve governing the evolution of stiffness. a nonlinear curve governing the evolution of stiffness.
<a id="damage_general"></a> <a id="damage_general"></a>
\begin{equation} \begin{equation}
\label{EQ:bond_damage_model} \label{EQ:bond_damage_model}
\tau = \left(1 - \omega(\kappa)\right)E_\mathrm{b} \; s \tau = \left(1 - \omega(\kappa)\right)E_\mathrm{b} \; s
\end{equation} \end{equation}
where $\omega(\kappa)$ is the nonlinear damage function and $\kappa$ is the state variable where $\omega(\kappa)$ is the nonlinear damage function and $\kappa$ is the state variable
that is equivalent to maximum slip $s$ (or strain $\varepsilon$) attained during that is equivalent to maximum slip $s$ (or strain $\varepsilon$) attained during
the loading history. The only difference with respect to the models the loading history.
used in Tour 2 is that the bond slip model introduces the
initial bond stiffness $E_\mathrm{b}$ and prescribes its reduction in terms of the
damage function $\omega(\kappa)$.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
**What is the shape of the damage function?** The answer to this question is not unique <div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50">
and depends on the particular type of material. Let us distinguish three ways how to define it &nbsp; &nbsp; <b>Apparent and effective stress</b> </div>
%% Cell type:markdown id: tags:
By rearranging the terms in the [above damage equation](#damage_general) we can introduce the notion of effective stress as
\begin{equation}
\tilde{\tau} = \frac{\tau}{1-\omega} = E_b \; s
\end{equation}
Note that effective stress $\tilde{\tau} \geq \tau$. While the apparent stress is related to the original material area, the effective stress is related to the undamaged material area. In other words, it can be interpreted as the stress acting on the remaining fraction of springs. The effective stress is related to the instantaneous, or still effective, cross section and not to the initial cross sectional area of the unit material zone.
%% Cell type:markdown id: tags:
## How to identify the shape of the damage function?
There are several ways how to justify a particular shape of the damage function.
Let us distinguish three ways in which the damage functions are introduced.
1. **Definition based on an experiment:** Given a measured $\sigma(\epsilon)$ curve, the damage level $\omega$ can be resolved directly by rearranging the [stress-strain equation](#damage_general), i.e. 1. **Definition based on an experiment:** Given a measured $\sigma(\epsilon)$ curve, the damage level $\omega$ can be resolved directly by rearranging the [stress-strain equation](#damage_general), i.e.
\begin{align} \begin{align}
\omega = \left(1 - \dfrac{1}{E_\mathrm{b}} \right) \dfrac{\tau}{s} \omega = \left(1 - \dfrac{1}{E_\mathrm{b}} \right) \dfrac{\tau}{s}
\end{align} \end{align}
or the integrity function or the integrity function
\begin{align} \begin{align}
\psi = \dfrac{\tau}{E_\mathrm{b} s} \psi = \dfrac{\tau}{E_\mathrm{b} s}
\end{align} \end{align}
2. **Definition based on probabilistic density function of fiber strength**: Let us remark, that a the properties of a damage function as a non-decreasing function within a range (0,1) are equal to a cumulative probability density function. This fact provides the possibility to introduce the damage function as an integrated probability density function of a filament strength within the fiber bundle model as indicated in the [stress strain response](#sig_eps_damage). 2. **Definition based on probabilistic density function of fiber strength**: Let us remark, that a the properties of a damage function as a non-decreasing function within a range (0,1) are equal to a cumulative probability density function. This fact provides the possibility to introduce the damage function as an integrated probability density function of a filament strength within the fiber bundle model as indicated in the [stress strain response](#sig_eps_damage).
3. **Definition based on the amount of dissipated energy**: To narrow down the possible shapes of the damage profile, theoretical arguments based on energetic interpretation of the damage process can be used to scale the damage function to a obtain the desired amount of energy dissipation. This aspect will be addressed more in detail in Tour 6 introducing energy dissipation as an effective means of describing the localization and fracture of material exhibiting damage. 3. **Definition based on the amount of dissipated energy**: To narrow down the possible shapes of the damage profile, theoretical arguments based on energetic interpretation of the damage process can be used to scale the damage function to a obtain the desired amount of energy dissipation. This aspect will be addressed more in detail in Tour 6 introducing energy dissipation as an effective means of describing the localization and fracture of material exhibiting damage.
%% Cell type:markdown id: tags:
**Apparent and effective stress:** By rearranging the terms in the [above damage equation](#damage_general) we can introduce the notion of effective stress as
\begin{equation}
\tilde{\tau} = \frac{\tau}{1-\omega} = E_b \; s
\end{equation}
Note that effective stress $\tilde{\tau} \geq \tau$. While the apparent stress is related to the original material area, the effective stress is related to the undamaged material area. In other words, it can be interpreted as the stress acting on the remaining fraction of springs. The effective stress is related to the instantaneous, or still effective, cross section and not to the initial cross sectional area of the unit material zone.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
%matplotlib widget %matplotlib widget
import sympy as sp import sympy as sp
import numpy as np import numpy as np
import matplotlib.pylab as plt import matplotlib.pylab as plt
sp.init_printing() sp.init_printing()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Classification of damage evolution functions** # **Classification of damage evolution functions**
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/classify.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/classify.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Let us sort the damage</b> </div> &nbsp; &nbsp; <b>Let us sort the damage</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Linear damage function ## Linear damage function
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
With the image of a material structure as a fiber-bundle with linear elastic fiber response and brittle failure we can consider a case with linear distribution of fiber breaking strain. This corresponds to the case with equidistant breaking strain or slip of all springs constituting the material structure With the image of a material structure as a fiber-bundle with linear elastic fiber response and brittle failure we can consider a case with linear distribution of fiber breaking strain. This corresponds to the case with equidistant breaking strain or slip of all springs constituting the material structure
<a id="equidistant_breaks"></a> <a id="equidistant_breaks"></a>
$$\Delta s^\mathrm{break} = s_{i+1}^\mathrm{break} - s_i^\mathrm{break} = \mathrm{constant}$$ $$\Delta s^\mathrm{break} = s_{i+1}^\mathrm{break} - s_i^\mathrm{break} = \mathrm{constant}$$
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
In such a case, the damage function would be a piecewise linear function with a value zero until the first fiber break $s_0$, linear profile until the last spring break $s_\mathrm{u}$ and plateau at the level 1 afterwards, i.e. In such a case, the damage function would be a piecewise linear function with a value zero until the first fiber break $s_0$, linear profile until the last spring break $s_\mathrm{u}$ and plateau at the level 1 afterwards, i.e.
<a id='eq:linear_damage'></a> <a id='eq:linear_damage'></a>
\begin{align} \begin{align}
\omega &= \omega &=
\left\{ \left\{
\begin{array}{cl} \begin{array}{cl}
0, & \kappa \leq \kappa_0 \\ 0, & \kappa \leq \kappa_0 \\
\frac{\kappa - \kappa_0}{\kappa_\mathrm{u}-\kappa_0} & \kappa_0 < \kappa \leq \kappa_\mathrm{u} \\ \frac{\kappa - \kappa_0}{\kappa_\mathrm{u}-\kappa_0} & \kappa_0 < \kappa \leq \kappa_\mathrm{u} \\
1, & \mathrm{otherwise} 1, & \mathrm{otherwise}
\end{array} \end{array}
\right. \right.
\end{align} \end{align}
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To see this type of damage function in action, let us import the prepared damage material model component `MATS1D5BondSlipD`. This model provides several damage functions in a polymorphic trait `omega_fn`. Let us select the `linear` damage function and construct an instance of bond-slip model `bs_linear_damage` To see this type of damage function in action, let us import the prepared damage material model component `MATS1D5BondSlipD`. This model provides several damage functions in a polymorphic trait `omega_fn`. Let us select the `linear` damage function and construct an instance of bond-slip model `bs_linear_damage`
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from bmcs_cross_section.pullout import MATS1D5BondSlipD from bmcs_cross_section.pullout import MATS1D5BondSlipD
bs_linear_damage = MATS1D5BondSlipD(omega_fn='linear', s_max=0.05) bs_linear_damage = MATS1D5BondSlipD(omega_fn='linear', s_max=0.05)
bs_linear_damage.omega_fn_ bs_linear_damage.omega_fn_
``` ```
%% Output %% Output
$\displaystyle \begin{cases} 0 & \text{for}\: \kappa < \kappa_{0} \\\frac{\kappa - \kappa_{0}}{- \kappa_{0} + \kappa_{u}} & \text{for}\: \kappa < \kappa_{u} \\1 & \text{otherwise} \end{cases}$ $\displaystyle \begin{cases} 0 & \text{for}\: \kappa < \kappa_{0} \\\frac{\kappa - \kappa_{0}}{- \kappa_{0} + \kappa_{u}} & \text{for}\: \kappa < \kappa_{u} \\1 & \text{otherwise} \end{cases}$
<ibvpy.tmodel.mats_damage_fn.LinearDamageFn at 0x7f4340be90e0> <ibvpy.tmodel.mats_damage_fn.LinearDamageFn at 0x7f4340be90e0>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The last line in the previous cell renders the symbolic definition of the linear damage function to demonstrate that it is identical with the [above specification](#eq:linear_damage). The attribute of the bond-slip model `omega_fn_` can be instantiated as any other model component to verify the shape of the damage function. The last line in the previous cell renders the symbolic definition of the linear damage function to demonstrate that it is identical with the [above specification](#eq:linear_damage). The attribute of the bond-slip model `omega_fn_` can be instantiated as any other model component to verify the shape of the damage function.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_linear_damage.omega_fn_.interact() bs_linear_damage.omega_fn_.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
With the damage function at hand, let us plot the corresponding stress slip function. Let us assume that the loading is monotonically increasing so that we do not need to consider unloading With the damage function at hand, let us plot the corresponding stress slip function. Let us assume that the loading is monotonically increasing so that we do not need to consider unloading
$$ \tau = (1 - \omega(\kappa)) E_\mathrm{b}s$$ $$ \tau = (1 - \omega(\kappa)) E_\mathrm{b}s$$
Apparently, if $\omega(\kappa)$ is linear, then $\tau$ must be quadratic. Let us verify this by rendering the material model `bs_damage_linear` Apparently, if $\omega(\kappa)$ is linear, then $\tau$ must be quadratic. Let us verify this by rendering the material model `bs_damage_linear`
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_linear_damage.interact() bs_linear_damage.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/question_puzzle.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/question_puzzle.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Which kind of material structure would exhibit such response?</b> </div> &nbsp; &nbsp; <b>Which kind of material structure would exhibit such response?</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Using the fiber-bundle analogy, we can design a test which consists of a very large number of fibers Using the fiber-bundle analogy, we can design a test which consists of a very large number of fibers
$i \in 0 \ldots N$. $i \in 0 \ldots N$.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![fiber_bundle](../fig/fiber_bundle.png) ![fiber_bundle](../fig/fiber_bundle.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
All the fibers have the same breaking strain $\bar{\varepsilon}$. All the fibers have the same breaking strain $\bar{\varepsilon}$.
The length of the fibers follows a linear function The length of the fibers follows a linear function
$$ $$
\ell_i = \ell_0 + i \frac{\ell_\mathrm{u} - \ell_0}{N}, \;\;\; i = 0 \ldots N \ell_i = \ell_0 + i \frac{\ell_\mathrm{u} - \ell_0}{N}, \;\;\; i = 0 \ldots N
$$ $$
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Upon loading, the fibers will break at the control displacement given as Upon loading, the fibers will break at the control displacement given as
$$ $$
u^\mathrm{break}_i = \bar{\varepsilon} \ell_i u^\mathrm{break}_i = \bar{\varepsilon} \ell_i
$$ $$
which exhibit the property of equidistant breakage [postulated above](#equidistant_breaks) which exhibit the property of equidistant breakage [postulated above](#equidistant_breaks)
$$\Delta u^\mathrm{break} = u_{i+1}^\mathrm{break} $$\Delta u^\mathrm{break} = u_{i+1}^\mathrm{break}
- u_i^\mathrm{break} = - u_i^\mathrm{break} =
\bar{\varepsilon} \frac{\ell_\mathrm{u} - \ell_0}{N} = \mathrm{constant}$$ \bar{\varepsilon} \frac{\ell_\mathrm{u} - \ell_0}{N} = \mathrm{constant}$$
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Can the damage function be applied also to a breaking strains within a local material structure?</b> </div> &nbsp; &nbsp; <b>Can the damage function be applied also to a breaking strains within a local material structure?</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The fiber length distribution represent an idealization within a unit length The fiber length distribution represent an idealization within a unit length
of the material. Thus, given a nominal length $\ell$ of the fiber bundle, the above reasoning applies of the material. Thus, given a nominal length $\ell$ of the fiber bundle, the above reasoning applies
also for strain which is related to the breaking displacement as also for strain which is related to the breaking displacement as
$$ $$
\varepsilon^\mathrm{break}_i = \frac{u^{\mathrm{break}}_i}{\ell} \varepsilon^\mathrm{break}_i = \frac{u^{\mathrm{break}}_i}{\ell}
$$ $$
The linear damage function has been certainly used to provide a mathematical interpretation using the fiber-bundle analogy. It is certainly not applicable for real problems in the simulation of damage evolution as it occurs in a continuum. Let us therefore extend the idea to more general situations. The linear damage function has been certainly used to provide a mathematical interpretation using the fiber-bundle analogy. It is certainly not applicable for real problems in the simulation of damage evolution as it occurs in a continuum. Let us therefore extend the idea to more general situations.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage function as a cumulative probability density of breaking strain ## Damage function as a cumulative probability density of breaking strain
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The previous example has demonstrated the meaning of the damage function as a distribution of the breaking strains which has been artificially assumed linear. In fact, the linear damage function The previous example has demonstrated the meaning of the damage function as a distribution of the breaking strains which has been artificially assumed linear. In fact, the linear damage function
[specified above](#eq:linear_damage) can regarded as a special type of cumulative density function. [specified above](#eq:linear_damage) can regarded as a special type of cumulative density function.
This brings us to the possibility to capture the breaking strain distribution using an existing This brings us to the possibility to capture the breaking strain distribution using an existing
cumulative probability density function. In particular, we choose the [Weibull distribution](https://en.wikipedia.org/wiki/Weibull_distribution). Before, explaining the reason for this choice cumulative probability density function. In particular, we choose the [Weibull distribution](https://en.wikipedia.org/wiki/Weibull_distribution). Before, explaining the reason for this choice
let us construct another model component `bs_cdf_damage` with `omega_fn` set to `weibull-CDF` let us construct another model component `bs_cdf_damage` with `omega_fn` set to `weibull-CDF`
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_linear_damage = MATS1D5BondSlipD(omega_fn='weibull-CDF', s_max=0.05) bs_linear_damage = MATS1D5BondSlipD(omega_fn='weibull-CDF', s_max=0.05)
bs_linear_damage.omega_fn_ bs_linear_damage.omega_fn_
``` ```
%% Output %% Output
$\displaystyle \begin{cases} 0 & \text{for}\: \kappa < 0 \\1 - e^{- \left(\frac{\kappa}{\lambda}\right)^{m}} & \text{otherwise} \end{cases}$ $\displaystyle \begin{cases} 0 & \text{for}\: \kappa < 0 \\1 - e^{- \left(\frac{\kappa}{\lambda}\right)^{m}} & \text{otherwise} \end{cases}$
<ibvpy.tmodel.mats_damage_fn.WeibullDamageFn at 0x7f43406f8ef0> <ibvpy.tmodel.mats_damage_fn.WeibullDamageFn at 0x7f43406f8ef0>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The variable $\kappa$ represents the state variable, i.e. slip or strain. The variable $\kappa$ represents the state variable, i.e. slip or strain.
The parameters $\lambda$ and $m$ denote the so called scale and shape parameters, respectively. The parameters $\lambda$ and $m$ denote the so called scale and shape parameters, respectively.
Let us demonstrate their role by rendering the model component Let us demonstrate their role by rendering the model component
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_linear_damage.omega_fn_.interact() bs_linear_damage.omega_fn_.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
By interacting with the model component we can observe that the shape parameter $m$ controls the spread of the breaks along the control slip or strain variable and scale parameter $\lambda$ shifts the breaking range horizontally. The corresponding bond slip law then has the form By interacting with the model component we can observe that the shape parameter $m$ controls the spread of the breaks along the control slip or strain variable and scale parameter $\lambda$ shifts the breaking range horizontally. The corresponding bond slip law then has the form
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_linear_damage.interact() bs_linear_damage.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The qualitative shape of the displayed stress-strain curve can be conveniently used to reproduce the experimentally obtained response of a yarn observed in the tensile test. The qualitative shape of the displayed stress-strain curve can be conveniently used to reproduce the experimentally obtained response of a yarn observed in the tensile test.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![carbon_fiber_test](../fig/fiber_bundle_carbon_tensile_test.png) ![carbon_fiber_test](../fig/fiber_bundle_carbon_tensile_test.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Fiber-bundle and test length - Weibull distribution can capture it</b> </div> &nbsp; &nbsp; <b>Fiber-bundle and test length - Weibull distribution can capture it</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The figure shows an example of the stress-strain curves obtained experimentally in tensile tests on carbon yarns with varied test lengths reported by [Sugimoto et al. (2021)](https://link.springer.com/content/pdf/10.1557/s43578-020-00043-y.pdf). The authors use the Weibull strength distribution to interpret the and to scale the obtained fiber strength characteristics between individual yarn lengths. Since the Weibull probability distribution is based on the concept of a weakest link in a chain, it allows for a scaling of strength given a changed length. Indeed, as the figure above shows, the strength of bundles with the lengths 50, 100 and 150 exhibits a negative trend. This corresponds well with the scaling inherently present in the Weibull probability distribution. Simply speaking, the probability of failure increases with the increasing number of links within the chain. The fact that the length of 10 mm has lower strength is related to the technical difficulties involved in the testing of short yarns discussed e.g. by [Rypl et. al (2015)](../papers/yarn_tensile_test_example.pdf) The figure shows an example of the stress-strain curves obtained experimentally in tensile tests on carbon yarns with varied test lengths reported by [Sugimoto et al. (2021)](https://link.springer.com/content/pdf/10.1557/s43578-020-00043-y.pdf). The authors use the Weibull strength distribution to interpret the and to scale the obtained fiber strength characteristics between individual yarn lengths. Since the Weibull probability distribution is based on the concept of a weakest link in a chain, it allows for a scaling of strength given a changed length. Indeed, as the figure above shows, the strength of bundles with the lengths 50, 100 and 150 exhibits a negative trend. This corresponds well with the scaling inherently present in the Weibull probability distribution. Simply speaking, the probability of failure increases with the increasing number of links within the chain. The fact that the length of 10 mm has lower strength is related to the technical difficulties involved in the testing of short yarns discussed e.g. by [Rypl et. al (2015)](../papers/yarn_tensile_test_example.pdf)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/enhancement.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/enhancement.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Generalization - exponential damage function provides flexibility</b> </div> &nbsp; &nbsp; <b>Generalization - exponential damage function provides flexibility</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The probabilistic interpretation of damage evolution has shown that an exponential functions provide a flexible tool to adjust the shape of the non-linear softening branch in the stress-strain response. The probabilistic interpretation of damage evolution has shown that an exponential functions provide a flexible tool to adjust the shape of the non-linear softening branch in the stress-strain response.
This flexibility has been exploited in many finite-element codes by providing several types of damage functions defined in terms of exponential function. This flexibility has been exploited in many finite-element codes by providing several types of damage functions defined in terms of exponential function.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
This can be documented by the fact that the function This can be documented by the fact that the function
\begin{align} \begin{align}
\omega(\kappa) = 1 - \exp(-\kappa) \omega(\kappa) = 1 - \exp(-\kappa)
\end{align} \end{align}
approaches the value 1 for $\kappa \rightarrow \infty$. This function is usually combined with an elastic range $\kappa < \kappa_0$ where the damage is implicitly defined as zero. To demonstrate it, let us define it symbolic form using `sympy` approaches the value 1 for $\kappa \rightarrow \infty$. This function is usually combined with an elastic range $\kappa < \kappa_0$ where the damage is implicitly defined as zero. To demonstrate it, let us define it symbolic form using `sympy`
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
kappa = sp.symbols('kappa') kappa = sp.symbols('kappa')
omega_kappa_ = 1 - sp.exp(-kappa) omega_kappa_ = 1 - sp.exp(-kappa)
omega_kappa_ omega_kappa_
``` ```
%% Output %% Output
$\displaystyle 1 - e^{- \kappa}$ $\displaystyle 1 - e^{- \kappa}$
1 - ℯ 1 - ℯ
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/view.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/view.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>To see the function 'life', let us use the following code</b> </div> &nbsp; &nbsp; <b>To see the function 'life', let us use the following code</b> </div>
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
get_omega_kappa = sp.lambdify(kappa, omega_kappa_) # executable expression get_omega_kappa = sp.lambdify(kappa, omega_kappa_) # executable expression
fig, ax = plt.subplots(1,1,figsize=(7,4), tight_layout=True) # plottable area fig, ax = plt.subplots(1,1,figsize=(7,4), tight_layout=True) # plottable area
fig.canvas.header_visible=False # hide the header fig.canvas.header_visible=False # hide the header
kappa_arr = np.linspace(0.0,5,100) # generate the slip array from in the range (0, 0.5) kappa_arr = np.linspace(0.0,5,100) # generate the slip array from in the range (0, 0.5)
ax.plot(kappa_arr, get_omega_kappa(kappa_arr), linestyle='solid', color='black', label=r'$\omega$') ax.plot(kappa_arr, get_omega_kappa(kappa_arr), linestyle='solid', color='black', label=r'$\omega$')
ax.fill_between(kappa_arr, get_omega_kappa(kappa_arr), color='gray', alpha=0.2) ax.fill_between(kappa_arr, get_omega_kappa(kappa_arr), color='gray', alpha=0.2)
ax.set_ylabel(r'$\omega$'); ax.set_xlabel(r'$\kappa$'); ax.set_ylabel(r'$\omega$'); ax.set_xlabel(r'$\kappa$');
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Thus, the probability density function is only one possible form of the damage function. Let us exemplify three further types of damage function that can be encountered in the finite element codes. Thus, the probability density function is only one possible form of the damage function. Let us exemplify three further types of damage function that can be encountered in the finite element codes.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage function derived from strength and and shape of softening branch ## Damage function derived from strength and and shape of softening branch
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
The first example shows a function which can control the slope damage evolution at the onset of damage $s = s_0$ by a parameter controlling its slope of the softening branch in the stress-strain diagram. It has the form The first example shows a function which can control the slope damage evolution at the onset of damage $s = s_0$ by a parameter controlling its slope of the softening branch in the stress-strain diagram. It has the form
\begin{align} \begin{align}
\omega(\kappa) = 1 - \left[\frac{\kappa_0}{\kappa} \exp \left(- \frac{\kappa - \kappa_0}{\kappa_\mathrm{f} - \kappa_0}\right)\right] \omega(\kappa) = 1 - \left[\frac{\kappa_0}{\kappa} \exp \left(- \frac{\kappa - \kappa_0}{\kappa_\mathrm{f} - \kappa_0}\right)\right]
\end{align} \end{align}
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_exp_slope = MATS1D5BondSlipD(omega_fn='exp-slope', s_max=0.05) bs_exp_slope = MATS1D5BondSlipD(omega_fn='exp-slope', s_max=0.05)
bs_exp_slope.omega_fn_.trait_set(kappa_0=0.01, kappa_f=0.04) bs_exp_slope.omega_fn_.trait_set(kappa_0=0.01, kappa_f=0.04)
bs_exp_slope.omega_fn_ bs_exp_slope.omega_fn_
``` ```
%% Output %% Output
$\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}$ $\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}$
<ibvpy.tmodel.mats_damage_fn.ExpSlopeDamageFn at 0x7f4340528810> <ibvpy.tmodel.mats_damage_fn.ExpSlopeDamageFn at 0x7f4340528810>
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_exp_slope.interact() bs_exp_slope.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/remark.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>When to use this damage format?</b> </div> &nbsp; &nbsp; <b>When to use this damage format?</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
In contrast to the cumulative probability function, the above shown function allows for an explicit specification of strength, i.e. In contrast to the cumulative probability function, the above shown function allows for an explicit specification of strength, i.e.
$$ $$
f_\mathrm{t} = E_\mathrm{b} \kappa_0 f_\mathrm{t} = E_\mathrm{b} \kappa_0
$$ $$
and the brittleness controlled by the $\kappa_f$ which represents the point on the horizontal axes which is intersected by a tangent of the softening branch constructed at the onset of damage, i.e. $s = \kappa_0$. In the present case, the material strength is equivalent to the onset of inelasticity. Such coupling, however, can be too restrictive. Therefore, an example of a more flexible representation of damage is shown in the next section. and the brittleness controlled by the $\kappa_f$ which represents the point on the horizontal axes which is intersected by a tangent of the softening branch constructed at the onset of damage, i.e. $s = \kappa_0$. In the present case, the material strength is equivalent to the onset of inelasticity. Such coupling, however, can be too restrictive. Therefore, an example of a more flexible representation of damage is shown in the next section.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage function used in Abaqus ## Damage function used in Abaqus
The damage function provided in `Abaqus` uses three parameters to control the softening branch. The damage function provided in `Abaqus` uses three parameters to control the softening branch.
\begin{align} \begin{align}
\omega(\tilde{s}) = \frac{\kappa_0}{\kappa}\left[ 1 - \frac{1 - \exp \displaystyle\left(- \alpha \omega(\tilde{s}) = \frac{\kappa_0}{\kappa}\left[ 1 - \frac{1 - \exp \displaystyle\left(- \alpha
\frac{\kappa - \kappa_0}{\kappa_u - \kappa_0}\right)}{1 - \exp(-\alpha)} \right] \frac{\kappa - \kappa_0}{\kappa_u - \kappa_0}\right)}{1 - \exp(-\alpha)} \right]
\end{align} \end{align}
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
This model is available in the catalog of damage function `omega_fn` so that we instantiate it and verify that it is equivalent to the above formula This model is available in the catalog of damage function `omega_fn` so that we instantiate it and verify that it is equivalent to the above formula
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_exp_slope = MATS1D5BondSlipD(omega_fn='abaqus', s_max=0.05) bs_exp_slope = MATS1D5BondSlipD(omega_fn='abaqus', s_max=0.05)
bs_exp_slope.omega_fn_.trait_set(kappa_0=0.01, kappa_u=0.04) bs_exp_slope.omega_fn_.trait_set(kappa_0=0.01, kappa_u=0.04)
bs_exp_slope.omega_fn_ bs_exp_slope.omega_fn_
``` ```
%% Output %% Output
$\displaystyle \begin{cases} 0 & \text{for}\: \kappa \leq \kappa_{0} \\1 - \begin{cases} 1 & \text{for}\: \kappa < \kappa_{0} \\\frac{\kappa_{0} \left(1 - \frac{1 - e^{- \frac{\alpha \left(\kappa - \kappa_{0}\right)}{- \kappa_{0} + \kappa_{u}}}}{1 - e^{- \alpha}}\right)}{\kappa} & \text{for}\: \kappa < \kappa_{u} \\0 & \text{otherwise} \end{cases} & \text{otherwise} \end{cases}$ $\displaystyle \begin{cases} 0 & \text{for}\: \kappa \leq \kappa_{0} \\1 - \begin{cases} 1 & \text{for}\: \kappa < \kappa_{0} \\\frac{\kappa_{0} \left(1 - \frac{1 - e^{- \frac{\alpha \left(\kappa - \kappa_{0}\right)}{- \kappa_{0} + \kappa_{u}}}}{1 - e^{- \alpha}}\right)}{\kappa} & \text{for}\: \kappa < \kappa_{u} \\0 & \text{otherwise} \end{cases} & \text{otherwise} \end{cases}$
<ibvpy.tmodel.mats_damage_fn.AbaqusDamageFn at 0x7f43404c3ea0> <ibvpy.tmodel.mats_damage_fn.AbaqusDamageFn at 0x7f43404c3ea0>
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_exp_slope.interact() bs_exp_slope.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Apparently, the parameter $\kappa_\mathrm{u}$ controls the point of ultimate damage at which the stress=strain curve hits the zero level. A small value of the parameter $\alpha$ renders a linear softening branch. By increasing the value of $\alpha$ a nonlinear softening with steep decay at the onset of damage is obtained. Apparently, the parameter $\kappa_\mathrm{u}$ controls the point of ultimate damage at which the stress=strain curve hits the zero level. A small value of the parameter $\alpha$ renders a linear softening branch. By increasing the value of $\alpha$ a nonlinear softening with steep decay at the onset of damage is obtained.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage function accounting for fracture energy ## Damage function accounting for fracture energy
The last example of the damage function controls the softening branch by prescribing the area below the curve denoted as $G_\mathrm{f}$. This means, a smaller value of $G_\mathrm{f}$ makes the material more brittle, while a larger value increases the ductility The last example of the damage function controls the softening branch by prescribing the area below the curve denoted as $G_\mathrm{f}$. This means, a smaller value of $G_\mathrm{f}$ makes the material more brittle, while a larger value increases the ductility
\begin{align} \begin{align}
\omega(\kappa) = 1 - \displaystyle{\frac{\kappa_0}{\kappa}} \omega(\kappa) = 1 - \displaystyle{\frac{\kappa_0}{\kappa}}
\exp\left(\frac{2 E_\mathrm{b} \kappa_0 ( \kappa - \kappa_0) } \exp\left(\frac{2 E_\mathrm{b} \kappa_0 ( \kappa - \kappa_0) }
{E_\mathrm{b} \kappa^2_0 - 2 G_\mathrm{f}} {E_\mathrm{b} \kappa^2_0 - 2 G_\mathrm{f}}
\right) \right)
\end{align} \end{align}
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_fracture_energy = MATS1D5BondSlipD(omega_fn='fracture-energy', s_max=0.05) bs_fracture_energy = MATS1D5BondSlipD(omega_fn='fracture-energy', s_max=0.05)
bs_fracture_energy.omega_fn_.trait_set(kappa_0=0.01, G_f=1) bs_fracture_energy.omega_fn_.trait_set(kappa_0=0.01, G_f=1)
bs_fracture_energy.omega_fn_ bs_fracture_energy.omega_fn_
``` ```
%% Output %% Output
$\displaystyle 1 - \begin{cases} 1 & \text{for}\: \kappa < \kappa_{0} \\e^{\frac{\left(\kappa - \kappa_{0}\right) \left(\sqrt{E_{b}} \sqrt{- E_{b} \kappa_{0}^{2} + 4 G_{f}} + E_{b} \kappa_{0}\right)}{E_{b} \kappa_{0}^{2} - 2 G_{f}}} & \text{otherwise} \end{cases}$ $\displaystyle 1 - \begin{cases} 1 & \text{for}\: \kappa < \kappa_{0} \\e^{\frac{\left(\kappa - \kappa_{0}\right) \left(\sqrt{E_{b}} \sqrt{- E_{b} \kappa_{0}^{2} + 4 G_{f}} + E_{b} \kappa_{0}\right)}{E_{b} \kappa_{0}^{2} - 2 G_{f}}} & \text{otherwise} \end{cases}$
<ibvpy.tmodel.mats_damage_fn.GfDamageFn at 0x7f434039f450> <ibvpy.tmodel.mats_damage_fn.GfDamageFn at 0x7f434039f450>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Even though the expressions look different, they are equivalent. The implemented version has been rendered using the `sympy` algebra system and can be transformed in to a simpler format given above. Let us test the flexibility of the provided function. Even though the expressions look different, they are equivalent. The implemented version has been rendered using the `sympy` algebra system and can be transformed in to a simpler format given above. Let us test the flexibility of the provided function.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
bs_fracture_energy.interact() bs_fracture_energy.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Note that, for large values of $G_\mathrm{f}$, maximum value of stress can become larger than the stress at the onset of damage, i.e. $\tau(\kappa_0)$. Thus, in contrast to the abacus damage function, material strength is not available as a model parameter. However an algebraic rearrangement identifying the maximum stress and resolving $\kappa_0$ as a function of strength is possible. Note that, for large values of $G_\mathrm{f}$, maximum value of stress can become larger than the stress at the onset of damage, i.e. $\tau(\kappa_0)$. Thus, in contrast to the abacus damage function, material strength is not available as a model parameter. However an algebraic rearrangement identifying the maximum stress and resolving $\kappa_0$ as a function of strength is possible.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/recall.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/recall.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Keep fracture energy in mind, we will revisit it</b> </div> &nbsp; &nbsp; <b>Keep fracture energy in mind, we will revisit it</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
This shape of the damage function introduces physical interpretation into the control of the softening branch. As we will show in Tour 6, the area below the softening stress-strain curve represents the energy dissipated during the loading process within a unit volume of material. This shape of the damage function introduces physical interpretation into the control of the softening branch. As we will show in Tour 6, the area below the softening stress-strain curve represents the energy dissipated during the loading process within a unit volume of material.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Summary and classification of damage evolution functions ## Summary and classification of damage evolution functions
| Name | Symbol | Material parameters | | Name | Symbol | Material parameters |
| :- | :-: | :-: | | :- | :-: | :-: |
| linear damage | $\omega_1(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}$ | | linear damage | $\omega_1(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}$ |
| cumulative probability density | $\omega_2(\kappa)$ | $\lambda, m$| | cumulative probability density | $\omega_2(\kappa)$ | $\lambda, m$|
| softening slope | $\omega_3(\kappa)$ | $\kappa_0, \kappa_\mathrm{f}$ | | softening slope | $\omega_3(\kappa)$ | $\kappa_0, \kappa_\mathrm{f}$ |
| softening slope and curvature | $\omega_4(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}, \alpha$ | | softening slope and curvature | $\omega_4(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}, \alpha$ |
| fracture energy | $\omega_5(\kappa)$ | $\kappa_0, G_\mathrm{f}$ | | fracture energy | $\omega_5(\kappa)$ | $\kappa_0, G_\mathrm{f}$ |
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Sheet interface - damage in 2D** # **Sheet interface - damage in 2D**
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Equivalent measure of strain ## Equivalent measure of strain
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
So far, the scalar variable $\kappa$ could be considered equivalent to the maximum slip attained during the loading history. However, it can be defined also for two and three dimensional problems. To simulate the damage in continuum So far, the scalar variable $\kappa$ could be considered equivalent to the maximum slip attained during the loading history. However, it can be defined also for two and three dimensional problems. To simulate the damage in continuum
problems, an equivalent strain can be defined in terms of strain tensor invariants. To provide a simple example, problems, an equivalent strain can be defined in terms of strain tensor invariants. To provide a simple example,
let us consider the application of the damage framework let us consider the application of the damage framework
for the modeling of two-dimensional interface damage. for the modeling of two-dimensional interface damage.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
![interface](../fig/interface_2d.png) ![interface](../fig/interface_2d.png)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
In this case, equivalent strain can then be defined as the distance from the undeformed configuration with zero slip $s_x, s_y = [0,0]$ In this case, equivalent strain can then be defined as the distance from the undeformed configuration with zero slip $s_x, s_y = [0,0]$
\begin{align} \begin{align}
\kappa = \sqrt{ s^2_x(\theta) + s_y^2(\theta) } \kappa = \sqrt{ s^2_x(\theta) + s_y^2(\theta) }
\end{align} \end{align}
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
s_x, s_y = sp.symbols('s_x, s_y') s_x, s_y = sp.symbols('s_x, s_y')
kappa_ = sp.sqrt( s_x**2 + s_y**2 ) kappa_ = sp.sqrt( s_x**2 + s_y**2 )
kappa_ kappa_
``` ```
%% Output %% Output
$\displaystyle \sqrt{s_{x}^{2} + s_{y}^{2}}$ $\displaystyle \sqrt{s_{x}^{2} + s_{y}^{2}}$
____________ ____________
╱ 2 2 ╱ 2 2
╲╱ sₓ + s_y ╲╱ sₓ + s_y
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Thus, the elastic domain is represented by a circle with the radius $\kappa_0$ in $s_x$ and $s_y$ plane. Thus, the elastic domain is represented by a circle with the radius $\kappa_0$ in $s_x$ and $s_y$ plane.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
get_kappa = sp.lambdify( (s_x, s_y), kappa_, 'numpy' ) get_kappa = sp.lambdify( (s_x, s_y), kappa_, 'numpy' )
phi = np.linspace(0, 2*np.pi, 500) phi = np.linspace(0, 2*np.pi, 500)
sx, sy = np.sin(phi), np.cos(phi) sx, sy = np.sin(phi), np.cos(phi)
fig, ax = plt.subplots(1,1, figsize=(4,4), tight_layout=True) fig, ax = plt.subplots(1,1, figsize=(4,4), tight_layout=True)
fig.canvas.header_visible = False fig.canvas.header_visible = False
ax.plot(sx,sy,label=r'$\kappa_0 = 1$') ax.plot(sx,sy,label=r'$\kappa_0 = 1$')
ax.fill(sx,sy, color='gray', alpha=0.2) ax.fill(sx,sy, color='gray', alpha=0.2)
ax.set_xlabel(r'$s_x$'); ax.set_ylabel(r'$s_y$'); ax.set_xlabel(r'$s_x$'); ax.set_ylabel(r'$s_y$');
ax.set_aspect('equal'); ax.legend(); ax.set_aspect('equal'); ax.legend();
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/alternative.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/alternative.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Other examples of equivalent strain definition</b> </div> &nbsp; &nbsp; <b>Other examples of equivalent strain definition</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To show the flexibility of the the inelastic domain specification using the To show the flexibility of the the inelastic domain specification using the
equivalent measure let us provide two more examples which are used equivalent measure let us provide two more examples which are used
to define a tensile elastic limit for brittle materials. to define a tensile elastic limit for brittle materials.
Given a strain and stress tensors $\boldsymbol{\varepsilon}$ and $\boldsymbol{\sigma}$, Given a strain and stress tensors $\boldsymbol{\varepsilon}$ and $\boldsymbol{\sigma}$,
the elastic limit can be introduced using the maximum the elastic limit can be introduced using the maximum
principal tensile stress $\sigma_i$ and divide it by the $E$ modulus as follows. principal tensile stress $\sigma_i$ and divide it by the $E$ modulus as follows.
\begin{equation}\label{eq:rankine_eq} \begin{equation}\label{eq:rankine_eq}
\kappa = \frac{1}{E} \mathrm{max}(\sigma_i), \qquad i=1,2,3 \kappa = \frac{1}{E} \mathrm{max}(\sigma_i), \qquad i=1,2,3
\end{equation} \end{equation}
The principal stresses $\sigma_i$ are obtained as the eigenvalues of the stress tensor $\boldsymbol{\sigma}$. The principal stresses $\sigma_i$ are obtained as the eigenvalues of the stress tensor $\boldsymbol{\sigma}$.
Another option is to define a norm of the strain tensor expressed as follows Another option is to define a norm of the strain tensor expressed as follows
\begin{equation}\label{eq:mazars_eq} \begin{equation}\label{eq:mazars_eq}
\kappa = ||\langle \kappa = ||\langle
{\boldsymbol{\varepsilon}} {\boldsymbol{\varepsilon}}
\rangle || = \sqrt{\langle \boldsymbol{\varepsilon} \rangle : \langle \boldsymbol{\varepsilon} \rangle} = \sqrt{ {\langle \varepsilon_1\rangle}^2 + {\langle\varepsilon_2 \rangle}^2 + {\langle\varepsilon_3 \rangle}^2} \rangle || = \sqrt{\langle \boldsymbol{\varepsilon} \rangle : \langle \boldsymbol{\varepsilon} \rangle} = \sqrt{ {\langle \varepsilon_1\rangle}^2 + {\langle\varepsilon_2 \rangle}^2 + {\langle\varepsilon_3 \rangle}^2}
\end{equation} \end{equation}
In this expression, the McAuley brackets $\langle . \rangle$ means the positive part of (.), e.g. $\langle x \rangle = (x+|x|)/2$. And $\varepsilon_1, \varepsilon_2, \varepsilon_3$ are the principal strains. In this expression, the McAuley brackets $\langle . \rangle$ means the positive part of (.), e.g. $\langle x \rangle = (x+|x|)/2$. And $\varepsilon_1, \varepsilon_2, \varepsilon_3$ are the principal strains.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Reversibility threshold function ## Reversibility threshold function
While plastic models introduce the definition of elastic domain by defining a threshold criterion for the values of stress variables, in damage models, the elastic domain is delimited using an equivalent strain measure $\kappa$. While plastic models introduce the definition of elastic domain by defining a threshold criterion for the values of stress variables, in damage models, the elastic domain is delimited using an equivalent strain measure $\kappa$.
\begin{align} \begin{align}
f := \kappa - \kappa_0 \le 0 f := \kappa - \kappa_0 \le 0
\end{align} \end{align}
This condition is also referred to as **damage initiation criterion** or loading function in the literature. This condition is also referred to as **damage initiation criterion** or loading function in the literature.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## How to treat unloading and reloading? ## How to treat unloading and reloading?
While in plastic model, the consistency has been used to derive the evolution equations and to distinguish unloading from loading steps, in damage models the unloading and reloading is distinguished automatically using the following criterion: While in plastic model, the consistency has been used to derive the evolution equations and to distinguish unloading from loading steps, in damage models the unloading and reloading is distinguished automatically using the following criterion:
\begin{align} \begin{align}
\kappa(t) = \max_{\theta < t} \kappa(\theta) = \max_{\theta < t} \sqrt{ s^2_x(\theta) + s_y^2(\theta) } \kappa(t) = \max_{\theta < t} \kappa(\theta) = \max_{\theta < t} \sqrt{ s^2_x(\theta) + s_y^2(\theta) }
\end{align} \end{align}
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
This expression means that the equivalent strain $\kappa$ can grow only if the new value at time $t$ is larger than any other value of $\kappa$ attained during the previous time stepping $\theta < t$. This expression means that the equivalent strain $\kappa$ can grow only if the new value at time $t$ is larger than any other value of $\kappa$ attained during the previous time stepping $\theta < t$.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Constitutive law between slip and bond stress vectors ## Constitutive law between slip and bond stress vectors
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To return to the case of an interface damage, we need to relate the slip vector components to the stress vector components. To return to the case of an interface damage, we need to relate the slip vector components to the stress vector components.
\begin{align} \begin{align}
\tau_x &= (1 - \omega(\kappa)) \, E_b \, s_x \\ \tau_x &= (1 - \omega(\kappa)) \, E_b \, s_x \\
\tau_y &= (1 - \omega(\kappa)) \, E_b \, s_y \tau_y &= (1 - \omega(\kappa)) \, E_b \, s_y
\end{align} \end{align}
This kind of definition introduces **isotropic damage**. It uses a single damage variable for both slip directions: This kind of definition introduces **isotropic damage**. It uses a single damage variable for both slip directions:
> **<font color="brown"> As a consequence, damage increment caused in direction $x$ directly affects the behavior in direction $y$** > **<font color="brown"> As a consequence, damage increment caused in direction $x$ directly affects the behavior in direction $y$**
</font> </font>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/view.png" alt="Previous trip" width="50" height="50"> <div style="background-color:lightgray;text-align:left"> <img src="../icons/view.png" alt="Previous trip" width="50" height="50">
&nbsp; &nbsp; <b>Let see how does the isotropic damage evolves in a single point</b> </div> &nbsp; &nbsp; <b>Let see how does the isotropic damage evolves in a single point</b> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
To visualize the response of a material point with two control slip vector components $s_x, s_y$ and two stress vector components $\tau_x, \tau_y$ in a 3D diagram, we will plot the loading histories in the space $\left[s_x, s_y, \sqrt{\tau_x^2 + \tau_y^2}\right]$. The vertical axis represents the norm of the stress vector. We will make use of an interactive model component `damage_2d_explorer`. To visualize the response of a material point with two control slip vector components $s_x, s_y$ and two stress vector components $\tau_x, \tau_y$ in a 3D diagram, we will plot the loading histories in the space $\left[s_x, s_y, \sqrt{\tau_x^2 + \tau_y^2}\right]$. The vertical axis represents the norm of the stress vector. We will make use of an interactive model component `damage_2d_explorer`.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
import damage2d_explorer as de import damage2d_explorer as de
bs = MATS1D5BondSlipD(omega_fn='fracture-energy', s_max=0.05) bs = MATS1D5BondSlipD(omega_fn='fracture-energy', s_max=0.05)
bs.omega_fn_.trait_set(G_f=10, kappa_0=0.001) bs.omega_fn_.trait_set(G_f=10, kappa_0=0.001)
explore = de.Explore(bs=bs, s_min=-0.1, s_max=0.1) explore = de.Explore(bs=bs, s_min=-0.1, s_max=0.1)
explore.interact() explore.interact()
``` ```
%% Output %% Output
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# **Characterization of damage models** # **Characterization of damage models**
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Main properties ## Main properties
* Independent definition of **elastic domain** using equivalent strain measure and **damage evolution** using damage function * Independent definition of **elastic domain** using equivalent strain measure and **damage evolution** using damage function
* The definitions of equivalent strain defining the inelastic domain and damage function can be arbitrarily combined * The definitions of equivalent strain defining the inelastic domain and damage function can be arbitrarily combined
* **Isotropic damage** - affects all loading directions equally * **Isotropic damage** - affects all loading directions equally
* At any state in history, radial unloading returns back to origin with zero stress * At any state in history, radial unloading returns back to origin with zero stress
* Suitable to model brittle fracture * Suitable to model brittle fracture
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage versus plasticity in view of algorithmic treatment ## Damage versus plasticity in view of algorithmic treatment
Recall that for models based on plasticity, return mapping was necessary to return back to an admissible state. Recall that for models based on plasticity, return mapping was necessary to return back to an admissible state.
In case of damage models, the relation between strain and stress can be introduced as an explicit function. In case of damage models, the relation between strain and stress can be introduced as an explicit function.
This means that <font color="blue"> no return-mapping</font> is necessary. Given a strain increment, This means that <font color="blue"> no return-mapping</font> is necessary. Given a strain increment,
the corresponding stress can be directly evaluated. the corresponding stress can be directly evaluated.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Damage versus multi-linear models in view of algorithmic treatment ## Damage versus multi-linear models in view of algorithmic treatment
Recall that the multi-linear models of the bond behavior also allowed for an explicit evaluation without return-mapping. The question might arise: What is the added value of a damage model compared to multi-linear elastic models? They both can represent the non-linear response of a monotonically loaded pullout test. The reason is twofold Recall that the multi-linear models of the bond behavior also allowed for an explicit evaluation without return-mapping. The question might arise: What is the added value of a damage model compared to multi-linear elastic models? They both can represent the non-linear response of a monotonically loaded pullout test. The reason is twofold
1. Damage model can distinguish unloading/reloading by remembering the measure of maximum strain $\kappa$ attained during history as demonstrated in the example below. 1. Damage model can distinguish unloading/reloading by remembering the measure of maximum strain $\kappa$ attained during history as demonstrated in the example below.
2. Damage model can introduce inelasticity in 2D and 3D material models. Multilinear laws are only limited to one-dimensional model. This aspect of damage models is shown in the example of an interface damage model below. 2. Damage model can introduce inelasticity in 2D and 3D material models. Multilinear laws are only limited to one-dimensional model. This aspect of damage models is shown in the example of an interface damage model below.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Open questions # Open questions
* How is the damage model embedded in a FE simulation * How is the damage model embedded in a FE simulation
* As a material subroutine returning the stress and stiffness for a given slip/strain and $\kappa_n$ * As a material subroutine returning the stress and stiffness for a given slip/strain and $\kappa_n$
* What is the instantaneous stiffness at control time $t$? needed in FE simulation * What is the instantaneous stiffness at control time $t$? needed in FE simulation
* Secant stiffness is available directly as $\psi E_b$ * Secant stiffness is available directly as $\psi E_b$
* Consistent algorithmic stiffness can be calculated as $\left. \frac{\partial \tau}{\partial s} \right|_t$ * Consistent algorithmic stiffness can be calculated as $\left. \frac{\partial \tau}{\partial s} \right|_t$
* Can the damage model represent cracking? * Can the damage model represent cracking?
* Yes but we need to talk about energy first * Yes but we need to talk about energy first
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Links to manuals of non-linear FE tools # Links to manuals of non-linear FE tools
This brief introduction of damage modeling is meant as an entry point to reading more thorough documentation, e.g. the parts of software manuals describing damage. This brief introduction of damage modeling is meant as an entry point to reading more thorough documentation, e.g. the parts of software manuals describing damage.
- [ABAQUS Manual: available damage functions](https://classes.engineering.wustl.edu/2009/spring/mase5513/abaqus/docs/v6.5/books/usb/default.htm?startat=pt04ch11s06abm39.html) - [ABAQUS Manual: available damage functions](https://classes.engineering.wustl.edu/2009/spring/mase5513/abaqus/docs/v6.5/books/usb/default.htm?startat=pt04ch11s06abm39.html)
- [ATENA Manual: Stress-strain relations for concrete (Pages 18-21)](https://www.cervenka.cz/assets/files/atena-pdf/ATENA_Theory.pdf) - [ATENA Manual: Stress-strain relations for concrete (Pages 18-21)](https://www.cervenka.cz/assets/files/atena-pdf/ATENA_Theory.pdf)
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<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"> <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">
&nbsp; <a href="../tour4_plastic_bond/4_3_PO_trc_cfrp_cyclic.ipynb#top">4.3: Cyclic pullout of textile fabrics and CFRP sheets</a> &nbsp; <a href="../tour4_plastic_bond/4_3_PO_trc_cfrp_cyclic.ipynb#top">4.3: Cyclic pullout of textile fabrics and CFRP sheets</a>
</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;"> </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;">
<a href="../tour5_damage_bond/5_2_PO_cfrp_damage.ipynb#top">5.2 Pullout behavior governed by damage</a>&nbsp; <img src="../icons/next.png" alt="Previous trip" width="50" height="50"> </div> <a href="../tour5_damage_bond/5_2_PO_cfrp_damage.ipynb#top">5.2 Pullout behavior governed by damage</a>&nbsp; <img src="../icons/next.png" alt="Previous trip" width="50" height="50"> </div>
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment