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

inserted video links

parent bbe7ecce
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<a id="top"></a>
%% Cell type:markdown id: tags:
# **5.1 Interface behavior governed by damage**
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=551838)&nbsp;part 1
<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>
%% 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.
%% 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">
&nbsp; &nbsp; <b>Where are we heading</b> </div>
%% 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 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
* describe and visualize examples of damage functions in 1D
* show how to use an isotropic damage model to represent
the material behavior of a 2D interface
%% Cell type:markdown id: tags:
# **Motivation and general aspects of damage**
%% Cell type:markdown id: tags:
## Fiber bundle behavior described using a damage function
%% 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
\begin{align}
[\mathrm{tex}] = [\mathrm{g}/\mathrm{km}]
\end{align}
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).
%% Cell type:markdown id: tags:
![image.png](attachment:a9ef9398-627a-441f-896c-1bca024dfffc.png)
%% 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.
%% Cell type:markdown id: tags:
![yarn3d](../fig/yarn3d.png)
%% 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.
<a id="sig_eps_damage"></a>
%% Cell type:markdown id: tags:
![image.png](attachment:3b0d0b72-96a7-443b-a9e0-a2e0f129d29f.png)
%% Cell type:markdown id: tags:
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
both situations. Moreover, they can be used also in two- and three dimensional
configurations as well.
![image.png](attachment:image.png)
%% 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}
\sigma &= \psi E_\mathrm{b} \varepsilon = (1 - \omega) E_\mathrm{b} \varepsilon
\end{align}
%% 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
\begin{align}
\omega \in (0,1)
\end{align}
The fraction of unbroken filaments is introduced as a degree of integrity
\begin{align}
\psi = 1 - \omega.
\end{align}
The profile of the integrity and damage functions corresponding to the above stress-strain curve has the following shape.
%% Cell type:markdown id: tags:
![image.png](attachment:34409f61-779a-4ac8-be74-df92b56f3538.png)
%% 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 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:
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 id="damage_general"></a>
\begin{equation}
\label{EQ:bond_damage_model}
\tau = \left(1 - \omega(\kappa)\right)E_\mathrm{b} \; s
\end{equation}
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
the loading history.
%% 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">
&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.
\begin{align}
\omega = \left(1 - \dfrac{1}{E_\mathrm{b}} \right) \dfrac{\tau}{s}
\end{align}
or the integrity function
\begin{align}
\psi = \dfrac{\tau}{E_\mathrm{b} s}
\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).
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:code id: tags:
``` python
%matplotlib widget
import sympy as sp
import numpy as np
import matplotlib.pylab as plt
sp.init_printing()
```
%% Cell type:markdown id: tags:
# **Classification of damage evolution functions**
%% Cell type:markdown id: tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=551838)&nbsp;part 2
%% 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">
&nbsp; &nbsp; <b>Let us sort the damage</b> </div>
%% Cell type:markdown id: tags:
## Linear damage function
%% 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
<a id="equidistant_breaks"></a>
$$\Delta s^\mathrm{break} = s_{i+1}^\mathrm{break} - s_i^\mathrm{break} = \mathrm{constant}$$
%% 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.
<a id='eq:linear_damage'></a>
\begin{align}
\omega &=
\left\{
\begin{array}{cl}
0, & \kappa \leq \kappa_0 \\
\frac{\kappa - \kappa_0}{\kappa_\mathrm{u}-\kappa_0} & \kappa_0 < \kappa \leq \kappa_\mathrm{u} \\
1, & \mathrm{otherwise}
\end{array}
\right.
\end{align}
%% 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`
%% Cell type:code id: tags:
``` python
from bmcs_cross_section.pullout import MATS1D5BondSlipD
bs_linear_damage = MATS1D5BondSlipD(omega_fn='linear', s_max=0.05)
bs_linear_damage.omega_fn_
```
%% 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}$
<ibvpy.tmodel.mats_damage_fn.LinearDamageFn at 0x7f37bf1024f0>
%% 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.
%% Cell type:code id: tags:
``` python
bs_linear_damage.omega_fn_.interact()
```
%% Output
%% 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
$$ \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`
%% Cell type:code id: tags:
``` python
bs_linear_damage.interact()
```
%% Output
%% 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">
&nbsp; &nbsp; <b>Which kind of material structure would exhibit such response?</b> </div>
%% Cell type:markdown id: tags:
Using the fiber-bundle analogy, we can design a test which consists of a very large number of fibers
$i \in 0 \ldots N$.
%% Cell type:markdown id: tags:
![fiber_bundle](../fig/fiber_bundle.png)
%% Cell type:markdown id: tags:
All the fibers have the same breaking strain $\bar{\varepsilon}$.
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
$$
%% Cell type:markdown id: tags:
Upon loading, the fibers will break at the control displacement given as
$$
u^\mathrm{break}_i = \bar{\varepsilon} \ell_i
$$
which exhibit the property of equidistant breakage [postulated above](#equidistant_breaks)
$$\Delta u^\mathrm{break} = u_{i+1}^\mathrm{break}
- u_i^\mathrm{break} =
\bar{\varepsilon} \frac{\ell_\mathrm{u} - \ell_0}{N} = \mathrm{constant}$$
%% 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">
&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:
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
also for strain which is related to the breaking displacement as
$$
\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.
%% Cell type:markdown id: tags:
## Damage function as a cumulative probability density of breaking strain
%% 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
[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
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`
%% Cell type:code id: tags:
``` python
bs_linear_damage = MATS1D5BondSlipD(omega_fn='weibull-CDF', s_max=0.05)
bs_linear_damage.omega_fn_
```
%% Output
$\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 0x7f37bea46950>
%% Cell type:markdown id: tags:
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.
Let us demonstrate their role by rendering the model component
%% Cell type:code id: tags:
``` python
bs_linear_damage.omega_fn_.interact()
```
%% Output
%% 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
%% Cell type:code id: tags:
``` python
bs_linear_damage.interact()
```
%% Output
%% 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.
%% Cell type:markdown id: tags:
![carbon_fiber_test](../fig/fiber_bundle_carbon_tensile_test.png)
%% 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">
&nbsp; &nbsp; <b>Fiber-bundle and test length - Weibull distribution can capture it</b> </div>
%% 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)
%% 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">
&nbsp; &nbsp; <b>Generalization - exponential damage function provides flexibility</b> </div>
%% Cell type:markdown id: tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=551838)&nbsp;part 3
%% 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.
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:
This can be documented by the fact that the function
\begin{align}
\omega(\kappa) = 1 - \exp(-\kappa)
\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`
%% Cell type:code id: tags:
``` python
kappa = sp.symbols('kappa')
omega_kappa_ = 1 - sp.exp(-kappa)
omega_kappa_
```
%% Output
$\displaystyle 1 - e^{- \kappa}$
1 - ℯ
%% 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">
&nbsp; &nbsp; <b>To see the function 'life', let us use the following code</b> </div>
%% Cell type:code id: tags:
``` python
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.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)
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.set_ylabel(r'$\omega$'); ax.set_xlabel(r'$\kappa$');
```
%% Output
%% 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.
%% Cell type:markdown id: tags:
<a id="exp_slope"></a>
## Damage function derived from strength and shape of softening branch
%% Cell type:markdown id: tags:
The first example shows a function which can control the slope damage evolution at the onset of damage $\kappa = \kappa_0$ by a parameter controlling its slope of the softening branch in the stress-strain diagram. It has the form
\begin{align}
\omega(\kappa) = 1 - \left[\frac{\kappa_0}{\kappa} \exp \left(- \frac{\kappa - \kappa_0}{\kappa_\mathrm{f} - \kappa_0}\right)\right]
\end{align}
%% Cell type:code id: tags:
``` python
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_
```
%% 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}$
<ibvpy.tmodel.mats_damage_fn.ExpSlopeDamageFn at 0x7f37be726ef0>
%% Cell type:code id: tags:
``` python
bs_exp_slope.interact()
```
%% Output
%% 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">
&nbsp; &nbsp; <b>When to use this damage format?</b> </div>
%% 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.
$$
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.
%% Cell type:markdown id: tags:
## Damage function used in Abaqus
The damage function provided in `Abaqus` uses three parameters to control the softening branch.
\begin{align}
\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]
\end{align}
%% 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
%% Cell type:code id: tags:
``` python
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_
```
%% 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}$
<ibvpy.tmodel.mats_damage_fn.AbaqusDamageFn at 0x7f37be5e3a90>
%% Cell type:code id: tags:
``` python
bs_exp_slope.interact()
```
%% Output
%% 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.
%% Cell type:markdown id: tags:
<a id="omega_fn_G_f"></a>
## 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
\begin{align}
\omega(\kappa) = 1 - \displaystyle{\frac{\kappa_0}{\kappa}}
\exp\left(\frac{2 E_\mathrm{b} \kappa_0 ( \kappa - \kappa_0) }
{E_\mathrm{b} \kappa^2_0 - 2 G_\mathrm{f}}
\right)
\end{align}
%% Cell type:code id: tags:
``` python
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_
```
%% 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}$
<ibvpy.tmodel.mats_damage_fn.GfDamageFn at 0x7f37be70e7c0>
%% 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.
%% Cell type:code id: tags:
``` python
bs_fracture_energy.interact()
```
%% Output
%% 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.
%% 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">
&nbsp; &nbsp; <b>Keep fracture energy in mind, we will revisit it</b> </div>
%% 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.
%% Cell type:markdown id: tags:
## Summary and classification of damage evolution functions
| Name | Symbol | Material parameters |
| :- | :-: | :-: |
| linear damage | $\omega_1(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}$ |
| cumulative probability density | $\omega_2(\kappa)$ | $\lambda, m$|
| softening slope | $\omega_3(\kappa)$ | $\kappa_0, \kappa_\mathrm{f}$ |
| softening slope and curvature | $\omega_4(\kappa)$ | $\kappa_0, \kappa_\mathrm{u}, \alpha$ |
| fracture energy | $\omega_5(\kappa)$ | $\kappa_0, G_\mathrm{f}$ |
%% Cell type:markdown id: tags:
# **Sheet interface - damage in 2D**
%% Cell type:markdown id: tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=551838)&nbsp;part 4
%% Cell type:markdown id: tags:
<a id="strain_norm"></a>
## Equivalent measure of strain
%% 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
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
for the modeling of two-dimensional interface damage.
%% Cell type:markdown id: tags:
![interface](../fig/interface_2d.png)
%% 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]$
\begin{align}
\kappa = \sqrt{ s^2_x(\theta) + s_y^2(\theta) }
\end{align}
%% Cell type:code id: tags:
``` python
s_x, s_y = sp.symbols('s_x, s_y')
kappa_ = sp.sqrt( s_x**2 + s_y**2 )
kappa_
```
%% Output
$\displaystyle \sqrt{s_{x}^{2} + s_{y}^{2}}$
____________
╱ 2 2
╲╱ sₓ + s_y
%% 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.
%% Cell type:code id: tags:
``` python
get_kappa = sp.lambdify( (s_x, s_y), kappa_, 'numpy' )
phi = np.linspace(0, 2*np.pi, 500)
sx, sy = np.sin(phi), np.cos(phi)
fig, ax = plt.subplots(1,1, figsize=(4,4), tight_layout=True)
fig.canvas.header_visible = False
ax.plot(sx,sy,label=r'$\kappa_0 = 1$')
ax.fill(sx,sy, color='gray', alpha=0.2)
ax.set_xlabel(r'$s_x$'); ax.set_ylabel(r'$s_y$');
ax.set_aspect('equal'); ax.legend();
```
%% Output
%% 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">
&nbsp; &nbsp; <b>Other examples of equivalent strain definition</b> </div>
%% Cell type:markdown id: tags:
To show the flexibility of the the inelastic domain specification using the
equivalent measure let us provide two more examples which are used
to define a tensile elastic limit for brittle materials.
Given a strain and stress tensors $\boldsymbol{\varepsilon}$ and $\boldsymbol{\sigma}$,
the elastic limit can be introduced using the maximum
principal tensile stress $\sigma_i$ and divide it by the $E$ modulus as follows.
\begin{equation}\label{eq:rankine_eq}
\kappa = \frac{1}{E} \mathrm{max}(\sigma_i), \qquad i=1,2,3
\end{equation}
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
\begin{equation}\label{eq:mazars_eq}
\kappa = ||\langle
{\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}
\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.
%% Cell type:markdown id: tags:
## 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$.
\begin{align}
f := \kappa - \kappa_0 \le 0
\end{align}
This condition is also referred to as **damage initiation criterion** or loading function in the literature.
%% Cell type:markdown id: tags:
## 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:
\begin{align}
\kappa(t) = \max_{\theta < t} \kappa(\theta) = \max_{\theta < t} \sqrt{ s^2_x(\theta) + s_y^2(\theta) }
\end{align}
%% 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$.
%% Cell type:markdown id: tags:
## Constitutive law between slip and bond stress vectors
%% 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.
\begin{align}
\tau_x &= (1 - \omega(\kappa)) \, E_b \, s_x \\
\tau_y &= (1 - \omega(\kappa)) \, E_b \, s_y
\end{align}
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>
%% 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">
&nbsp; &nbsp; <b>Let see how does the isotropic damage evolves in a single point</b> </div>
%% 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`.
%% Cell type:code id: tags:
``` python
import damage2d_explorer as de
bs = MATS1D5BondSlipD(omega_fn='fracture-energy', s_max=0.05)
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.interact()
```
%% Output
%% Cell type:markdown id: tags:
# **Characterization of damage models**
%% Cell type:markdown id: tags:
## Main properties
* 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
* **Isotropic damage** - affects all loading directions equally
* At any state in history, radial unloading returns back to origin with zero stress
* Suitable to model brittle fracture
%% Cell type:markdown id: tags:
## 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.
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,
the corresponding stress can be directly evaluated.
%% Cell type:markdown id: tags:
## 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
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.
%% Cell type:markdown id: tags:
# Open questions
* 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$
* What is the instantaneous stiffness at control time $t$? needed in FE simulation
* Secant stiffness is available directly as $\psi E_b$
* Consistent algorithmic stiffness can be calculated as $\left. \frac{\partial \tau}{\partial s} \right|_t$
* Can the damage model represent cracking?
* Yes but we need to talk about energy first
%% Cell type:markdown id: tags:
# 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.
- [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)
%% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/exercise.png" alt="Run" width="50" height="50">
&nbsp; &nbsp; <a href="../exercises/X0501 - Bond-slip law expressed as damage function.pdf"><b>Exercise X0501:</b></a> <b>Bond-slip law expressed as damage function</b>
<a href="https://moodle.rwth-aachen.de/mod/page/view.php?id=551831"><img src="../icons/bmcs_video.png" alt="Run" height="130"></a>
</div>
%% Cell type:markdown id: tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/exercise.png" alt="Run" width="50" height="50">
&nbsp; &nbsp; <a href="../exercises/X0502 - Derive a bond slip law from a given damage function.pdf"><b>Exercise X0502:</b></a> <b>Bond-slip law expressed as damage function</b>
</div>
%% 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">
&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;">
<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:
``` python
```
......
%% Cell type:markdown id:6cce98a8-20dc-4f05-a583-d3112e2f1557 tags:
<a id="top"><a>
# **6.3 Softening and fracture energy**
%% Cell type:markdown id:e975436b-419b-4c36-a1e0-dadd4c5069b5 tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=643794)
%% Cell type:markdown id:0734f03a-ade2-4582-8008-c074822f9c3d tags:
<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>
%% Cell type:markdown id:c91d3f92-c5b8-4904-814f-c5dda3d476c3 tags:
With the knowledge how to evaluate the energy flow within the structural volume introduced in the notebook [6.2](6_2_Energy_released_in_pullout_constant_bond_and_rigid_matrix.ipynb#top) we have a new tool to interpret the
response of a structural element.
%% Cell type:markdown id:c5dcfc4e-9e37-46c7-90c9-3f463b130fc0 tags:
<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>
%% Cell type:markdown id:e8e3d0ac-4094-4992-9a12-e3710f1e0e29 tags:
Based on energetic characterization of the material behavior we can address the key feature of brittle materials, namely the local nature of energy dissipation within a small volume of the structure. We will use the global evaluation of the energy dissipation implemented in the finite-element model to follow its evolution during the loading. This will allow us to relate the dissipated energy to the macroscopically observed change of the specimen, namely to the interface failure. In simple terms, we want to know how much energy is needed to completely damage the whole interface. Knowing this, we can say how much energy is needed to completely damage a unit area of the interface, which represents an important material characteristic of brittle materials, the **fracture energy**.
%% Cell type:markdown id:c5c6a01a-8b65-4a3b-9df2-7f555f0a2baa tags:
**Correspondence between fracture and damage**:
Our goal is to prepare the platform for the general explanation of the correspondence between the theoretical concepts of fracture mechanics, i.e. the energetic characterization of the material disintegration, and between the strain-softening types of models used in the finite element simulation of brittle materials exhibiting cracking.
%% Cell type:markdown id:5a5a5bdb-1069-42ed-aa56-eb4ee5504076 tags:
# **Energetic analysis of the CFRP pullout**
%% Cell type:markdown id:ce984eca-91a4-406b-8770-b0ca89bcf090 tags:
![image.png](attachment:65d5e4b9-f3e8-4b6e-a266-64bfc5744b33.png)
%% Cell type:markdown id:0a398d4d-f122-4619-8af4-8a6bf190d8e3 tags:
**Softening, stress concentration, discontinuity:**
In this Tour we focus on the material behavior exhibiting softening.
This means that the bond slip relation contains a descending branch as was the case e.g. in Examples describing the [CFRP pullout response](../tour5_damage_bond/5_2_PO_cfrp_damage.ipynb).
Such type of material behavior leads to a stress concentration within
a small volume of material. This volume is called a process zone.
In case of debonding, we can observe a propagation of the process zone
through the bond zone in response to an increasing pullout control displacement.
Behind the process zone, a distinguished displacement jump between
the CFRP sheet and matrix develops.
This newly emerged discontinuity does not transfer any stress
and can be regarded as a crack evolving along the interface
due to shear loading. In the framework of fracture mechanics
is referred to as a shear crack, or mode II crack.
%% Cell type:markdown id:bc010fca-f3c1-477b-91cd-86fb11942c31 tags:
![image.png](attachment:ece9fd4e-24c8-4569-8c09-dc5ad328de72.png)
%% Cell type:markdown id:f5a303f2-b0dc-41ef-8716-818aad7ca249 tags:
**Energy dissipation as a material property:**
The characterization of the process zone includes particularly its size and the energy dissipation associated with its propagation through the structure.
Instead of defining the material behavior in terms of the stress-strain relation, we postulate that the size of the process zone and rate of energy dissipated within it remains constant during its propagation through the structure. Thus, we regard it as a material property associated with particular material, objectively characterizing its localization process of damage into a material discontinuity, i.e. crack. As already emphasized, this kind of
description is only possible for materials exhibiting strain-softening that are denoted as brittle or quasi-brittle. Examples of such materials
include concrete, fiber-reinforced concrete and ceramics.
%% Cell type:markdown id:9eaceb52-bc45-4795-ba87-e69403518677 tags:
![image.png](attachment:ee457d34-6445-4014-b398-ed7a3c3c39ff.png)
%% Cell type:markdown id:0e9035cb-8802-4a76-9c27-3da207530f18 tags:
# **Simulation example**
%% Cell type:markdown id:dc4e9fb5-18cc-4080-a56f-87b7cde4b4b3 tags:
To observe the energy dissipation during the propagation of a fracture process zone through a specimen we will first revisit the example of the pullout test with a damage function that introduces softening.
In particular, we will describe the debonding of CFRP sheet from the concrete matrix observed in the test.
%% Cell type:markdown id:0d76c838-aacd-40c4-a614-18e858e3af13 tags:
![image.png](attachment:c3412c42-33e7-4136-938d-d914e8129b7e.png)
%% Cell type:markdown id:2c491324-8628-4aa5-bd6e-36f38095a0cc tags:
**Energy dissipation in finite-element code:** To evaluate the energy dissipation, the `bmcs` finite element solver provides the possibility to numerically integrate the work supply and the stored energy. This corresponds to the the global approach explained using the analytical example in notebook [6.1]() is used which evaluated the difference between supplied and stored energy as
%% Cell type:markdown id:4ce2f7e2-a8f9-485b-b163-ee30648ac245 tags:
$$
G(w) = \mathcal{W}(w) - \mathcal{U}(w) = \int_0^w P(w) \; \mathrm{d}w - \int_\Omega E \boldsymbol{\varepsilon}_\mathrm{el}(w) : \boldsymbol{\varepsilon}_\mathrm{el}(w) \; \mathrm{d}x.
G(w) = \mathcal{W}(w) - \mathcal{U}(w) = \int_0^w P(w) \; \mathrm{d}w - \frac{1}{2} \int_\Omega E \boldsymbol{\varepsilon}_\mathrm{el}(w) : \boldsymbol{\varepsilon}_\mathrm{el}(w) \; \mathrm{d}x.
$$
%% Cell type:markdown id:451676ee-c25a-4dfd-99e7-2e96a3bd756d tags:
In the finite-element implementation, the work supply $\mathcal{W}$ is obtained as a numerical integral of the simulated pullout curve $P(w)$ over the control displacement within the range $(0, w)$, and the stored energy $\mathcal{U}$ is evaluated as a spatial integral over the finite-element discretization.
%% Cell type:markdown id:76efca9a-d8de-468a-a6fe-5a723012ff05 tags:
**Generalization for arbitrary loading histories:** Note that this expression implicitly assumes a monotonically growing control displacement $w$. To allow for cyclic loading scenarios, let us generalize this expression by defining the control displacement as a function $w(t)$ where $t$ represents a monotonically increasing pseudo time. With this extension, arbitrary loading histories can be included. Then, the global energy evaluation reads
%% Cell type:markdown id:448a35f5-c80a-4179-af52-8fce4ea3fe68 tags:
$$
G(t) = \mathcal{W}(t) - \mathcal{U}(t) = \int_0^t P(w(t)) \dfrac{\mathrm{d}w}{\mathrm{d}t} \; \mathrm{d}t - \int_\Omega \sigma(w(t)) \cdot \varepsilon_\mathrm{el}(w(t)) \; \mathrm{d}x.
G(t) = \mathcal{W}(t) - \mathcal{U}(t) = \int_0^t P(w(t)) \dfrac{\mathrm{d}w}{\mathrm{d}t} \; \mathrm{d}t - \frac{1}{2} \int_\Omega \sigma(w(t)) \cdot \varepsilon_\mathrm{el}(w(t)) \; \mathrm{d}x.
$$
%% Cell type:markdown id:69c34c2a-7455-4933-aeef-d785e55e821d tags:
The evaluation of the energy dissipation available in the `PullOutModel1D` for any kind of material model can be readily used to evaluate the energy dissipation during the loading history. To show the profile of the energy dissipation during the debonding process with a bond slip law exhibiting softening behavior, let us again run the preconfigured finite element analysis of the CFRP pullout test. The specification of the
test setup parameters and the bond-slip law has been provided in notebook [3.1](../tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb#cfrp_bond_slip). To demonstrate the energy dissipation using a large interface area, we will use a longer length of bond zone, 500 mm. The perimeter will remain the same, i.e. 100 mm.
%% Cell type:code id:d748bebf-05cb-4b66-bd83-2c63392f6d2f tags:
``` python
%matplotlib widget
import matplotlib.pyplot as plt
import numpy as np
from bmcs_cross_section.pullout import PullOutModel1D
po_cfrp = PullOutModel1D(n_e_x=300, w_max=5) # mm
po_cfrp.geometry.L_x=500 # [mm]
po_cfrp.time_line.step = 0.008
po_cfrp.time_line.step = 0.02
po_cfrp.cross_section.trait_set(A_m=400*200, A_f=100*0.11, P_b=100);
po_cfrp.material_model='damage'
po_cfrp.material_model_.trait_set(E_m=28000, E_f=230000, E_b=250, s_max=.4)
po_cfrp.material_model_.D_alg=1 # use algorithmic stiffness
po_cfrp.material_model_.omega_fn='fracture-energy'
po_cfrp.material_model_.omega_fn_.trait_set(kappa_0=0.0001, G_f=1.19);
```
%% Cell type:markdown id:abfe168d-24f3-4c96-8a76-451e780d40d6 tags:
To inspect the input data given above let us render the material model showing the bond slip law first
%% Cell type:code id:972bfe53-434b-42a8-bf36-6c1b4ba40f99 tags:
``` python
po_cfrp.material_model_.interact()
```
%% Output
%% Cell type:markdown id:70154cee-e023-4374-a498-91700eea5e0c tags:
The simulation can now be started and the results are presented using the rendered model user interface.
%% Cell type:code id:90fd16d0-c569-494a-b5d3-3eddf12fd8b1 tags:
``` python
po_cfrp.run()
po_cfrp.interact()
```
%% Output
%% Cell type:markdown id:68bd9192-675c-46dd-9387-5d59a158313e tags:
The bottom left diagram shows the work supply $\mathcal{W}(t)$ as a black solid line and the stored energy $\mathcal{U}(t)$ as the green line. The difference between the two represents the dissipated energy $G(t)$ during the debonding process. The comparison between the pullout curve and the energy curves reveals
1. that for bond softening, the pullout curve remains at the constant load level during the debonding process,
2. that both the stored and dissipated energy grow during the debonding process.
%% Cell type:markdown id:bf16f412-2313-4339-a6dd-b322092a45a9 tags:
**How much energy was needed to make the interface completely stress free?** The failure of the pullout indicated by the drop down of the pullout curve to zero represents the state at which the whole energy available in the interface has been lost. What followed was the release of the energy stored in the CFRP sheet has been released by unloading, i.e. the green curve dropped to zero. Thus, the total energy $G_\mathrm{total}$ released within the interface layer can be evaluated at the time at which the peak of $\mathcal{U}$ which was reached at
$$
t_\mathrm{argmax} = \mathrm{argmax}(\mathcal{U})
$$
so that
$$
G_\mathrm{total} = \mathcal{W}(t_\mathrm{argmax}) - \mathcal{U}(t_\mathrm{argmax})
$$
%% Cell type:markdown id:22b27dfd-ac75-45bd-b245-250e830a8bff tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/warning.png" alt="Verify" width="50" height="50">
&nbsp; &nbsp; <b>Important: the amount of stored energy prior to failure</b> </div>
%% Cell type:markdown id:9073895c-481f-4f5f-9f09-3595f684359b tags:
**When designing an experiment or a structural members always watch out how much elastic energy is stored in the structure prior to the failure.** Ignoring this can lead to unforeseen, uncontrolled failure event which is not only brittle but may be highly **explosive**.
%% Cell type:markdown id:16ebaf13-63e9-4c9c-bddc-99dd29937675 tags:
# **Quantification and verification of dissipated energy**
%% Cell type:markdown id:a5085968-256f-49a2-b0cd-6d3f537b2dfe tags:
Even though the value of $G_\mathrm{total}$ could be extracted from the graphs presented in the above simulation, let us quantify them by accessing the output data of the simulation. The `history` attribute includes the arrays of stored, supplied and dissipated energy as `W_t`, `U_bar_t`, and `G_t`, respectively. Then, because the geometry was specified in $\mathrm{mm}$, the above formulas deliver the value of $G_\mathrm{total}$ in $\mathrm{[Nmm]}$, corresponding to $\mathrm{[kJ]}$
Even though the value of $G_\mathrm{total}$ could be extracted from the graphs presented in the above simulation, let us quantify them by accessing the output data of the simulation. The `history` attribute includes the arrays of stored, supplied and dissipated energy as `W_t`, `U_bar_t`, and `G_t`, respectively. Then, because the geometry was specified in $\mathrm{mm}$, the above formulas deliver the value of $G_\mathrm{total}$ in $\mathrm{[Nmm]}$
%% Cell type:code id:72850a59-de99-44c5-aa9d-382b6f3f9a80 tags:
``` python
t_idx = np.argmax(po_cfrp.history.U_bar_t)
G_total = po_cfrp.hist.G_t[t_idx]
G_total = po_cfrp.history.G_t[t_idx]
G_total # Nmm
```
%% Output
53246.55322083428
52784.20045086269
%% Cell type:markdown id:18dd4f3f-8265-47ed-88d9-15f6ac166984 tags:
Knowing the total energy dissipated within the interface, we can now determine the energy needed to make a unit area of the interface stress free, i.e.
$$
G_\mathrm{F} = \dfrac{G_\mathrm{total}}{A_\mathrm{b}}
$$
The total interface area $A_\mathrm{b} = L_\mathrm{b} P_\mathrm{b}$ is extracted from the model as follows
%% Cell type:code id:c4e3223b-3811-4609-9be5-53807494fd06 tags:
``` python
A_b = (po_cfrp.geometry.L_x * po_cfrp.cross_section.P_b)
A_b # mm^2
```
%% Output
50000.0
%% Cell type:markdown id:f719f572-0f23-49a2-85e6-2e48e6cc1fa6 tags:
Rendering the value of $G_\mathrm{F}$ in $\mathrm{[kJ/mm^2]} = \mathrm{[N/mm]}$
Rendering the value of $G_\mathrm{F}$ in $\mathrm{[J/mm^2]} = \mathrm{[N/mm]}$
%% Cell type:code id:2136fc13-c57f-49ca-8330-a43112e4f8db tags:
``` python
G_F = G_total / A_b
G_F # N/mm
```
%% Output
1.0649310644166856
1.055684009017254
%% Cell type:markdown id:5c53829a-78cc-49dd-ae60-50ab19ba581e tags:
This number is relatively close to the value of $G_\mathrm{f} = 1.19 \; \mathrm{[N/mm]}$, the input parameter of the [damage function introduced in notebook 5.1](../tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb#omega_fn_G_f) describing the deterioration of the interface. This parameter has been introduced as the area below the stress-slip curve which represents the energy to completely damage a unit area of the material so that it is stress free. Thus, the equivalence of $G_\mathrm{F}$ calculated globally by evaluating the structural response and $G_\mathrm{f}$ is intentional and demonstrates the role and purpose of the energy dissipation as a material parameter.
%% Cell type:markdown id:f85b7744-5bc0-47c3-90ed-b4577d7d56b5 tags:
**However, why are they not equal?** The obtained values, i.e. $G_\mathrm{F} = = 1.08 \; \mathrm{[N/mm]}$ and $G_\mathrm{f} = 1.19 \; \mathrm{[N/mm]}$ so that the globally evaluated dissipated energy is smaller than the prescribed fracture energy
**However, why are they not equal?** The obtained values, i.e. $G_\mathrm{F} = 1.05 \; \mathrm{[N/mm]}$ and $G_\mathrm{f} = 1.19 \; \mathrm{[N/mm]}$ so that the globally evaluated dissipated energy is smaller than the prescribed fracture energy
$$
G_\mathrm{F} < G_\mathrm{f}.
$$
The reason for this discrepancy can be explained by looking at the profile of shear flow during the debonding
right before the failure, i.e.
%% Cell type:code id:a8acac48-f466-473c-8de9-fef4187d3b81 tags:
``` python
po_cfrp.history.t_slider = 0.9
po_cfrp.history.interact()
```
%% Output
%% Cell type:markdown id:bdf8a6bd-81ec-4a21-8261-92f899da1945 tags:
Apparently, the last 50-70 mm of the bond zone were still not stress free when the pullout force dropped down so that the part of the area which debonded in a stable way to a zero shear stress was in fact smaller than the total area of the interface $A_\mathrm{b}$. This explains why $G_\mathrm{F}$ is 10% smaller than $G_\mathrm{f}$. The remaining bond length debonded in an unstable way since the elastic energy stored in the fiber initiated its rapid unloading which lead to an immediate debonding of the last 50 mm without increasing the control displacement $w$.
%% Cell type:markdown id:58369969-0dcb-49c1-a233-13a9a93ace16 tags:
As a consequence, we can expect that, **the larger the debonding process zone relative to the bond length, the larger the discrepancy between $G_\mathrm{f}$ and $G_\mathrm{F}$**.
%% Cell type:markdown id:fb27b643-f8c7-4329-ade2-bf290336cf8f tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/question_puzzle.png" alt="Verify" width="50" height="50">
&nbsp; &nbsp; <b>Try to verify this statement by changing the parameters</b> </div>
%% Cell type:markdown id:a4562b9c-8550-4fd7-985c-58705e885a89 tags:
Evaluate the ratio between
$$
\dfrac{G_\mathrm{total}}{G_\mathrm{f} p L_\mathrm{b}} \rightarrow 1 \;\;\; \mathrm{for} \;\;\; L_\mathrm{b} \rightarrow \infty
$$
for several selected values of $L_\mathrm{b}$. Observe that for small $L_\mathrm{b}$ the discrepancy becomes larger.
%% Cell type:markdown id:49e1da03-39e1-4ee1-965a-5a3d64fde477 tags:
<a id="G_F_measured"></a>
# **Experimental identification of fracture energy**
In spite of the observed difference between $G_\mathrm{F}$ and $G_\mathrm{f}$, the described concept of
globally evaluated released energy and its normalization with respect to the observed localized discontinuity represents an efficient characterization procedure delivering an estimate of fracture energy needed to to produce a unit area of a stress free crack or debonding zone. Fracture energy is a fundamental characteristic required for a realistic modeling and assessment of concrete structures. As a consequence, the possibility to evaluate $G_\mathrm{F}$ from the force-displacement curve as an estimate of $G_\mathrm{f}$ is exploited in standardized experimental procedures for the identification of fracture energy.
%% Cell type:markdown id:06fb00a2-0eb2-4604-bb04-e693c0d5b4db tags:
In the studied case of the CFRP sheet pullout, the failure included an unstable release of elastically stored energy $\mathcal{U}$ so that it was necessary to subtract it from the total energy $\mathcal{W}$ at the point of failure. It is possible to design the failure process in such a way that the failure process is stable and can release the stored energy in parallel to the stable process of energy dissipation. In this case, the identification of energy dissipation is even simpler than in the described case. The concept of such a test design will be studied in the next tour addressing the crack propagation through a bended specimen as described in a more detail in notebook [7.2](../tour7_cracking/7_2_fracture_energy_ident.ipynb#rilem_notched_bending_test).
%% Cell type:markdown id:b88d5c74-46b6-4187-886b-fde1c9255dfa tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/exercise.png" alt="Run" width="50" height="50">
&nbsp; &nbsp; <a href="../exercises/X0601 - Energy supply and dissipated energy.pdf"><b>Exercise X0601:</b></a> <b>Energy supply, storage and dissipation</b>
<a href="https://moodle.rwth-aachen.de/mod/page/view.php?id=551850"><img src="../icons/bmcs_video.png" alt="Run" height="130"></a>
</div>
%% Cell type:markdown id:84b90777-bf07-4d74-802b-361c920695bc 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">
&nbsp; <a href="../tour6_energy/6_2_Energy_released_in_pullout_constant_bond_and_rigid_matrix.ipynb#top">6.2 Frictional pullout and energy dissipation</a>
</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="../tour7_cracking/7_1_bending3pt_2d.ipynb#top">7.1 Crack propagation</a>&nbsp; <img src="../icons/next.png" alt="Previous trip" width="50" height="50"> </div>
%% Cell type:code id:e59b6e37-03c1-4db4-be30-6ec6ae84530d tags:
``` python
```
......
This diff is collapsed.
%% Cell type:markdown id:1cdb7314-aaae-4b45-8ab9-20c2e6d6e1cc tags:
<a id="top"></a>
# **7.2 Fracture energy identification and size effect**
%% Cell type:markdown id:5a656ce9-7a20-4f31-82e5-6ed57d4311e8 tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=643791)&nbsp;part 1
%% Cell type:markdown id:55707766-c485-4a3b-a811-cc70b90099e6 tags:
<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>
%% Cell type:markdown id:fbd8eb16-c1c1-4e37-8f24-821c32f463ad tags:
We have learned that fracture energy plays a crucial role in the simulation of structural response of concrete elements. The crucial questions remains, how can it be determined experimentally and what is the consequence of localization within a fracture process zone for structural assessment concepts.
%% Cell type:markdown id:7465bcb5-c7ac-4c62-9a2d-d77555c4ecfc tags:
<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>
%% Cell type:markdown id:0a445732-21ce-4a91-9268-5ac4096fbbbd tags:
The knowledge of the area of a localized of a cracked specimen gives us a chance to determine the value of the total energy and divide it by the area of a crack to obtain the fracture energy. We have used this concept already in the notebook [6.3](../tour6_energy/6_3_localized_energy_dissipation.ipynb#G_F_measured) in the simulation of CFRP debonding. Let us briefly summarize the identification of the fracture energy for used to identify the value of fracture energy characterizing the concrete cracking.
%% Cell type:markdown id:e99690ed-a16f-4a43-aff7-037f57368f42 tags:
<a id="rilem_notched_bending_test"></a>
# **RILEM notched bending test**
%% Cell type:markdown id:658a3c51-bec8-4438-a7b4-89e522125d7c tags:
An isolated tensile crack, mode-I crack, can be initiated using a notched specimen.
Why
The most common configurations used to study the cracking behavior for a tensile
notched
crack denoted as mode I are the wedge splitting test and notched, three-point
three-point
bending
bending test. Both these tests aim at the characterization of the material behavior
test?
in terms of the softening law describing the relation between the tensile stress
transmitted across the localization zone and the corresponding crack opening.
%% Cell type:markdown id:9ca6e083-3611-4543-b4ab-7581d16bb11b tags:
Due to its simplicity, three-point-bending test of a notched concrete specimen has become
a standard (RILEM) to determine the fracture energy $G_\mathrm{F}$ characterizing the cracking behavior of concrete. The test induces a single crack in the notched section
propagating straight upwards from the notch in a stable manner. The energy is
dissipated in a local region in the crack vicinity so that it can be directly ascribed
to the area of emerging crack surface.
%% Cell type:markdown id:cc72aaad-e575-4871-b07b-3857c4c41436 tags:
**Direct evaluation of the fracture energy:** Recalling that we can characterize
the stable process of crack propagation by an amount of energy needed to produce
a unit crack area, i.e. fracture energy $G_\mathrm{F}$ , we can choose a more efficient and
pragmatic approach determining the fracture energy directly from the test without
having to perform numerical calibration. This is the idea behind the standardized
characterization procedure proposed by the RILEM committee.
%% Cell type:markdown id:700fc277-4f6f-4884-9968-e8a5b3da3da2 tags:
![image.png](attachment:2a126bc6-bc46-4a80-a831-c7c4558a709c.png)
%% Cell type:markdown id:11f9b887-8efb-481a-97c9-d914cc22bdbf tags:
Recall that at the
point of failure, the whole energy has been consumed to produce the crack of
surface area
$$
A = B \, (H − a),
$$
where $H$ and $B$ denote the height and width of the beam
and $a$ is the notch depth. Then, assuming uniform dissipation during a stable crack
propagation we can set
%% Cell type:markdown id:a52d4f2e-bddf-4204-8f5c-c2de22262900 tags:
$$
G_\mathrm{F} = \dfrac{W}{B \, (H-a)}
$$
%% Cell type:markdown id:83e3bd8a-ea1d-4354-8862-94919903624d tags:
However, this simple approach would ignore the fact that self-weight of the beam
also induced the initial deflection $w_0$. Neither the self-weight load, nor the corresponding
deflection are included in the experimentally recorded curve. The situation can be illustrated
as follows in the load-deflection diagram.
%% Cell type:markdown id:54583b11-9aa0-42f0-8c8a-b8449f011a88 tags:
![fw_Gf](../fig/F-w-Gf.png)
%% Cell type:markdown id:8a4440c0-88b3-41eb-ae09-f946a9550017 tags:
In the test, only the area $W_1$ is measured. At point $w_0$, the specimen will actually break down because it cannot sustain its own weight. Therefore, the area $W_2$ is hidden. It can only estimated as an area of the rectangle
%% Cell type:markdown id:786ae739-d7c6-4408-8f85-8924e9a52235 tags:
$$
W_2 = F_0 w_0 = M g w_0
$$
where $F_0$ is the dead load given as the product of the weight of the beam between the supports $M$ and the gravity acceleration $g = 9.81 \mathrm{[m/s^2]}$.
%% Cell type:markdown id:fc54e22b-8a59-4969-a78d-96d8c48d093d tags:
Thus, the true fracture energy obtained using the above test can be estimated as estimate
$$
G_\mathrm{F} = \dfrac{W_1 + M g w_0}{B\, (H-a)}
$$
%% Cell type:markdown id:c6e46363-cf9c-41f6-b825-0029c3f24100 tags:
A simple remedy to avoid the effect of self weight is to compensate for the initial deflection by including an extra weight outside of the supports, for example by doubling the beam length.
%% Cell type:markdown id:5ae99fe1-9f58-427b-8f6d-0aab22d4fe42 tags:
![image.png](attachment:5bd0c865-c036-4d9d-92f7-a62913836ebd.png)
%% Cell type:markdown id:140a89d6-d1ec-4c40-b5a8-8ded3314ad7d tags:
A pioneering work showing the systematic experimental approach to the identification of fracture energy has been presented by [Petersson (1982)](https://portal.research.lu.se/portal/files/4705811/1785208.pdf). The report provides a clear explanation of the test parameters, e.g. notch depth, curing conditions, and their influence on the determined value of fracture energy. It served as a basis for the current RILEM standards used for characterization of wide range of concrete materials, including mixtures with short fibers.
%% Cell type:markdown id:39040612-3c39-4199-82fd-8373415ca035 tags:
The discussion above demonstrates an important aim of theoretical research: develop simple characterization procedures that can deliver model parameters even for advanced models. We use the fracture energy $G_\mathrm{F}$ as an example of a successful effort, in which the theoretical development influenced the engineering practice by providing measures for standardization and comparability between various concrete mixtures in view of their quasi-brittleness.
%% Cell type:markdown id:c31d4885-a0c1-47e2-bab3-d669d5a72a0a tags:
# **Size effect**
%% Cell type:markdown id:22ff03a4-f0d8-4488-be03-6cc942340858 tags:
[![title](../fig/bmcs_video.png)](https://moodle.rwth-aachen.de/mod/page/view.php?id=643791)&nbsp;part 2
%% Cell type:markdown id:d2c15296-1bfc-4ade-be72-24afc2e00f12 tags:
With the experimentally determined fracture energy at hand, and with a regularized model presented in we are now able to capture to predict the cracking response of a beam with modified dimensions and loading configuration. Even though that the model has only a limited range of validity, it can be used demonstrate and visualize an important phenomenon included in the behavior of concrete structures which must be considered also in engineering design rules.
%% Cell type:markdown id:cc368b86-39cf-4ae2-a1ce-e7fdac96ab35 tags:
The fact that the material softening leads to strain localization within a small dissipative zone around the propagating crack tip leads to a phenomenon called **size effect**. In simple terms, it states that the response of a structure cannot be simply scaled with its changed dimensions. Let us demonstrate this by performing a parametric study of the notched beam test in which we scale up the length and depth of the beam.
%% Cell type:markdown id:dace10e2-20c2-41f2-a8f5-7ac1dcdab463 tags:
Let us again revisit the simulation of the three-point bending test. We will keep the size of the crack band constant, i.e. $L_\mathrm{cb} = 1~\mathrm{[N/mm]}$. This means that in small and in large specimens, the crack propagation is governed by the same fracture energy.
%% Cell type:code id:9c8e5ecb-835c-4e66-b065-47731b39dfd8 tags:
``` python
%matplotlib widget
from bmcs_bending.bending3pt_2d import BendingTestModel
from ibvpy.tmodel.mats2D import MATS2DScalarDamage
```
%% Cell type:markdown id:9cab7dbf-adf5-4beb-a88c-36eb5d6ed2be tags:
Because we will perform several simulations, let us produce several models which we may consider as virtual specimens. Therefore, a function called `new_bt` is defined to construct an instance of the `BendingTestModel`,
This function has three parameters, `L`, `H`, and `a` representing the beam length, height and notch depth to introduce the scaling of dimensions in the parametric study. All other parameters are defined as constants within the function so that they are kept equal in all simulated specimens.
%% Cell type:code id:b3afc77c-783e-44fe-acd1-e1e9b49f7841 tags:
``` python
def new_bt(L=2000, H=200, a=100):
def new_bt(L, H, a):
E = 30000
f_ct = 3.3
kappa_0 = f_ct / E
bt = BendingTestModel(material_model='scalar damage',
n_e_x=6, n_e_y=16, w_max=-2, k_max=1000)
bt.time_line.step=0.02
bt.history.warp_factor=100
bt.cross_section.trait_set(b=50)
bt.cross_section.trait_set(B=50)
bt.geometry.trait_set(L=L, H=H, a=a, L_cb=1);
bt.material_model_.trait_set(E = E, nu = 0.0) # note nu = 0.0 to avoid compressive failure
bt.material_model_.omega_fn = 'exp-slope'
bt.material_model_.omega_fn_.trait_set(kappa_0=kappa_0, kappa_f=0.0336)
bt.material_model_.trait_set(D_alg=0.95, eps_max=1);
return bt
```
%% Cell type:markdown id:c78c8c7c-04fb-4c76-acc8-6b1dde0f90a3 tags:
The simulated specimens will be collected in a dictionary `bt_dict` with each entry accessible via a key `scale` denoting the multiplier used to scale the dimensions of the beam.
%% Cell type:code id:fc9dd650-71c2-4e76-8fb6-7bc8466558f3 tags:
``` python
bt_dict = {}
```
%% Cell type:markdown id:422009e9-386b-425e-a3d8-5ab58643212b tags:
The reference dimensions are equal to the study performed previously. The scales are defined in the variable `scale_list`.
%% Cell type:code id:1cc2a58f-1799-466f-be57-fdbe9bd765e7 tags:
``` python
import numpy as np
scale_list = [0.5,1,2,4]
L0 = 2000
H0 = 200
B0 = 50
a0 = 50
for scale in scale_list:
print('calculating F-w and G_total for scale = %g' % scale)
bt = new_bt(L=L0*scale, H=H0*scale, a=a0*scale)
try:
bt.run()
except StopIteration:
print('simulation interupted due to slow convergence', scale)
bt_dict[scale] = bt
```
%% Output
calculating F-w and G_total for scale = 0.5
calculating F-w and G_total for scale = 1
calculating F-w and G_total for scale = 2
calculating F-w and G_total for scale = 4
%% Cell type:markdown id:586ab9c5-ac3c-4f23-a397-fa52cc5cca26 tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/view.png" alt="Run" width="40" height="40">
&nbsp; &nbsp; <b>... let us put the results into a diagram</b> </div>
%% Cell type:markdown id:6eb1db8a-f230-4fd5-83e1-2d6c8def2843 tags:
To evaluate the results, we want to collect the load deflection curves from each of the specimen stored in `bt_dict`. At the same time, we shall extract the value of the dissipated energy.
%% Cell type:code id:a3fc049f-480f-4615-ae09-fa3135f5596f tags:
``` python
import numpy as np
import matplotlib.pylab as plt
fig, (ax, ax_G) = plt.subplots(1,2, figsize=(8,3), tight_layout=True)
fig.canvas.header_visible=False
F_w_list = [bt_dict[scale].hist['Fw'].Fw for scale in scale_list ]
for scale, (F, w) in zip(scale_list, F_w_list):
ax.plot(-w,-F,label='scale = %g' % scale)
ax.legend()
ax.set_xlabel(r'$w$ [mm]');
ax.set_ylabel(r'$F$ [N]');
G_list = [bt_dict[scale].hist['energy'].G_t[-1] for scale in scale_list]
U_bar_list = [np.max(bt_dict[scale].hist['energy'].U_bar_t) for scale in scale_list]
ax_G.plot(scale_list, G_list, marker='H', label=r'$G_\mathrm{total}$')
ax_G.plot(scale_list, U_bar_list, color='green', marker='H', label=r'$\mathcal{U}$')
ax_G.set_xlabel(r'$\mathrm{scale}$ [-]')
ax_G.set_ylabel(r'$G_\mathrm{total}$ [kJ]');
ax_G.set_ylim(ymin=0, ymax=1.1 * np.max(G_list));
ax_F = ax_G.twinx()
F_max_list = [np.max(-F) for F, w in F_w_list]
ax_F.plot(scale_list, F_max_list, marker='H', color='orange', label=r'$F_\max$');
ax_F.set_ylabel(r'$F_\max$ [N]');
ax_G.legend(loc=2)
ax_F.legend(loc=4);
```
%% Output
%% Cell type:markdown id:0de95815-5b6e-4f9a-adc8-6a7c58a354b0 tags:
- The total energy dissipation $G_\mathrm{total}$ increases proportionally to the cross sectional area
- The maximum stored energy $\max({\mathcal{U}})$ is increasing non-proportionally to the cross sectional area
- The ultimate load **does not** increase proportionally to the cross sectional area
- Large specimens exhibit more brittle failure than small specimens
%% Cell type:markdown id:8ae3d1c5-4624-41a6-a6fd-2cfa267e263d tags:
A larger amount of energy stored within the elastic parts of the specimen accelerates the failure process. In a post peak regime, it acts as an additional load within the dissipative zones. When we change the size of the specimen, the size of the fracture process zone does not change. However, the material volume which stores energy increases. This means that the ratio between $G_\mathrm{F}$, needed to make a crack of a unit area stress free, and the stored energy driving the unloading process of surrounding elastic material changes. This ratio controls the brittleness of the structural response.
%% Cell type:code id:b3a51580-57c7-4c51-b4a7-17a044450d6a tags:
``` python
bt_dict[2].interact()
```
%% Output
%% Cell type:markdown id:f2378b06-34a0-4cfa-b165-4bffd5c8273c tags:
<div style="background-color:lightgray;text-align:left"> <img src="../icons/exercise.png" alt="Run" width="50" height="50">
&nbsp; &nbsp; <a href="../exercises/X0701_Identification of the fracture energy.pdf"><b>Exercise X0701:</b></a> <b>Evaluation of fracture energy</b>
</div>
%% Cell type:markdown id:af32baab-4840-48ab-896a-baffbc7c6983 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">
&nbsp; <a href="../tour7_cracking/7_1_bending3pt_2d.ipynb#top">7.1 Straight crack propagation</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;">
<a href="../tour8_bending/8_1_reinforced_beam.ipynb#top">8.1 Reinforced beam bending</a>&nbsp; <img src="../icons/next.png" alt="Previous trip" width="50" height="50"> </div>
%% Cell type:code id:83699a75-8f05-425a-9843-453f96c9e543 tags:
``` python
```
......
......@@ -192,7 +192,7 @@ class Viz2DdGdA(Viz2D):
t = self.vis2d.sim.hist.t
G_t = self.vis2d.get_G_t()
a_t = self.vis2d_cb.get_a_t()
b = self.vis2d_cb.sim.cross_section.b
b = self.vis2d_cb.sim.cross_section.B
tck = ip.splrep(a_t * b, G_t, s=0, k=1)
dG_da = ip.splev(a_t, tck, der=1)
......@@ -361,14 +361,14 @@ class CrossSection(BMCSLeafNode):
'''
name = 'cross-section'
b = Float(100.0,
B = Float(100.0,
CS=True,
label='thickness',
auto_set=False, enter_set=True,
desc='cross-section width [mm2]')
ipw_view = View(
Item('b'),
Item('B'),
)
......@@ -588,7 +588,7 @@ class BendingTestModel(TStepBC, Model):
@cached_property
def _get_xdomain(self):
dgrid = XDomainFEGrid(coord_max=(self.geometry.L / 2., self.geometry.H),
integ_factor=self.cross_section.b,
integ_factor=self.cross_section.B,
shape=(self.n_e_x, self.n_e_y),
fets=self.fets_eval)
......
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