$$ \newcommand{\C}{{\mathbb{{C}}}} \newcommand{\R}{{\mathbb{{R}}}} \newcommand{\Q}{{\mathbb{{Q}}}} \newcommand{\Z}{{\mathbb{{Z}}}} \newcommand{\N}{{\mathbb{{N}}}} \newcommand{\uu}[1]{{\boldsymbol{{#1}}}} \newcommand{\uuuu}[1]{{\symbb{{#1}}}} \newcommand{\uv}[1]{{\underline{{#1}}}} \newcommand{\ve}[1]{{\uv{{e}}_{{#1}}}} \newcommand{\x}{{\uv{{x}}}} \newcommand{\n}{{\uv{{n}}}} \newcommand{\eps}{{\uu{{\varepsilon}}}} \newcommand{\E}{{\uu{{E}}}} \newcommand{\sig}{{\uu{{\sigma}}}} \newcommand{\Sig}{{\uu{{\Sigma}}}} \newcommand{\cod}{{\uv{{\symscr{b}}}}} \newcommand{\trans}[1]{{{}^{t}{#1}}} \newcommand{\sotimes}{{\stackrel{s}{\otimes}}} \newcommand{\sboxtimes}{\stackrel{s}{\boxtimes}} \newcommand{\norm}[1]{{\lVert{{#1}}\rVert}} \newcommand{\ud}{{\,\mathrm{d}}} \newcommand{\mat}{\mathsf} \DeclareMathOperator{\arcosh}{arcosh} \DeclareMathOperator{\divz}{div} \DeclareMathOperator{\divu}{\uv{div}} \DeclareMathOperator{\hess}{hess} \DeclareMathOperator{\gradu}{\uv{grad}} \DeclareMathOperator{\graduu}{\uu{grad}} \DeclareMathOperator{\Mat}{Mat} \DeclareMathOperator{\tr}{tr} \DeclareMathOperator{\ISO}{ISO} \newcommand{\volt}[1]{{#1}^{-1\circ}} \newcommand{\dcirc}{\overset{\circ}{:}} \newcommand{\jump}[1]{\mathopen{[\![}\,#1\,\mathclose{]\!]}} $$

9  Cracks

Important Objectives

This tutorial introduces the crack object in Echoes:

  • the crack density parameterization (Budiansky–O’Connell);
  • the syntax for open cracks and spring-interface cracks;
  • multi-property cracks (simultaneous elasticity and conductivity).
import numpy as np
from echoes import *
import math

np.set_printoptions(precision=8, suppress=True)

Crack density

An elliptical crack is geometrically defined as the limit of a flat ellipsoid whose smallest aspect ratio \(\omega = c/a \to 0\) (see Chapter 6). Because its volume fraction vanishes in this limit, the standard volume fraction is not a useful parameter. Instead, Echoes adopts the Budiansky–O’Connell crack density (Budiansky and O’Connell, 1976):

\[ \varepsilon = n\,a^3 \tag{9.1}\]

where \(n\) is the number density (number of cracks per unit volume) and \(a\) the crack radius. For a family of penny-shaped cracks, the volume fraction is \(\phi = \tfrac{4\pi}{3}\,\omega\,\varepsilon \to 0\) as \(\omega \to 0\), confirming that density (not fraction) is the natural parameter.

For an elliptical crack of semi-axes \(a \geq b \gg c\) (\(\eta = b/a\), \(\omega = c/a \ll 1\)), the generalized crack density is \(\varepsilon = n\,a^2 b = n\,\eta\,a^3\).

Syntax

A crack object is built as:

cr = crack(shape=spheroidal(ω, θ, φ),
           density=ε,
           symmetrize=[ISO],        # optional: isotropic distribution
           prop={"C": tZ4},         # open crack (zero stiffness)
           interf_prop={"C": [kn, kt]})  # spring interface (optional)
  • ω is a small but strictly positive aspect ratio (e.g. \(10^{-3}\)), required for the numerical limit computation of the crack compliance (see Chapter 6).
  • density replaces fraction for crack phases: setting density=ε is equivalent to placing \(n = \varepsilon / a^3\) cracks per unit volume.
  • symmetrize=[ISO] projects the concentration tensor onto the isotropic class, representing a random (isotropic) distribution of crack orientations.
  • symmetrize=[TI, θ, φ] projects the concentration tensor onto the transversely isotropic (TI) class with symmetry axis at polar angle \(\theta\) and azimuthal angle \(\phi\) (defaults: \(\theta=\phi=0\), i.e. axis \(\uv{e}_3\)). This represents a distribution of crack orientations with TI symmetry — for instance, all crack normals lying in the plane perpendicular to the symmetry axis (see Section 14.2 for an example).
NoteOpen crack vs. spring interface
  • Open crack (traction-free faces): prop={"C": tZ4}. This is the default model; the crack faces exert no traction.
  • Spring interface (partially bonded faces): add interf_prop={"C": [kn, kt]} where \(k_n \geq 0\) is the normal spring stiffness and \(k_t \geq 0\) the tangential one. The open crack (\(k_n = k_t = 0\)) and the perfectly bonded interface (\(k_n, k_t \to \infty\)) are the limiting cases. See Section 6.3 for the constitutive law.

The density attribute can be changed after construction:

cr.density = 0.5

Multi-property cracks

A crack object can carry simultaneous elastic and transport properties. For example, a fluid-filled crack with high in-plane conductance:

cr = crack(shape=spheroidal(ω), density=ε,
           prop={"C": tZ4, "K": tensor(Kt, Kt, Kn)})

For the conductivity interface, interf_prop={"K": [Kt1, Kt2, Kn]} sets the conductances along the two tangential axes and the normal axis respectively; for a spheroidal crack, \(K_{t1} = K_{t2} = K_t\) so the call reduces to [Kt, Kt, Kn].

ω = 1.e-3
Cs = stiff_Enu(1., 0.25)

cr = crack(shape=spheroidal(ω), density=0.3,
           prop={"C": tZ4})
print(cr)
Crack | Density=0.3 | Nb per length=0.942478 | Spacing=1.06103 | Volume fraction=0.00125664 |  Radii=[1 1 0.001] |  Angles=[0 0 0]
Parameters for Eshelby calculation=[ DEFAULT ; epsabs=0.0001 ; epsrel=0.0001 ; epsroots=0.0001 ]
 --> Property C
Order 4 ISO tensor | Param(size=2)=[ 0 0 ] | Angles(size=0)=[ ]
[ 0 0 0 0 0 0 
  0 0 0 0 0 0 
  0 0 0 0 0 0 
  0 0 0 0 0 0 
  0 0 0 0 0 0 
  0 0 0 0 0 0 ]
# With spring interface
cr_spr = crack(shape=spheroidal(ω), density=0.3,
               prop={"C": tZ4},
               interf_prop={"C": [5., 2.]})
print(cr_spr)
Crack | Density=0.3 | Nb per length=0.942478 | Spacing=1.06103 | Volume fraction=0.00125664 |  Radii=[1 1 0.001] |  Angles=[0 0 0]
Parameters for Eshelby calculation=[ DEFAULT ; epsabs=0.0001 ; epsrel=0.0001 ; epsroots=0.0001 ]
 --> Property C
Order 4 ISO tensor | Param(size=2)=[ 0.00933333 0.00533333 ] | Angles(size=0)=[ ]
[ 0.00666667 0.00133333 0.00133333 0 0 0 
  0.00133333 0.00666667 0.00133333 0 0 0 
  0.00133333 0.00133333 0.00666667 0 0 0 
  0 0 0 0.00533333 0 0 
  0 0 0 0 0.00533333 0 
  0 0 0 0 0 0.00533333 ]
 --> Interface property C
[ 5 2 ]

\(\,\)