Cracks
using MeanFieldHom, TensND
E, ν = 210.0, 0.3
k = E/(3*(1-2ν)); μ = E/(2*(1+ν))
C₀ = TensISO{3}(3k, 2μ)
# Penny-shaped crack — size-independent COD tensor B
pc = PennyCrack(1.0)
B = cod_tensor(pc, C₀)
# Size-independent compliance contribution tensor H = (3/4) n̂ ⊗ˢ B ⊗ˢ n̂
H = compliance_contribution(pc, C₀)
# Dilute compliance correction ΔS from the Budiansky density ε³ᵈ = N a b²
ε³ᵈ = 0.05
ΔS = delta_compliance(pc, H, ε³ᵈ) # = (4π/3) ε³ᵈ H
# Ribbon crack — same pattern, ε²ᵈ = N b² and ΔS = π ε²ᵈ H
r = RibbonCrack(0.5)
H_r = compliance_contribution(r, C₀) # H = (2/π) n̂ ⊗ˢ B ⊗ˢ n̂
ΔS_r = delta_compliance(r, H_r, 0.05)
# Thermal / conductivity — scalar COD b and rank-1 resistivity tensor R
K₀ = TensISO{3}(1.0)
b = cod_tensor(pc, K₀) # scalar
R = compliance_contribution(pc, K₀) # R = (3/4) b (ŵ⊗ŵ)
ΔR = delta_resistivity(pc, R, 0.05) # = (4π/3) ε³ᵈ RCracks with finite interface stiffness (Sevostianov)
A flat crack carrying a spring-like interface elasticity with stiffness tensor $\boldsymbol{K}$ (order 2, $3\times 3$ symmetric — e.g. isotropic with a normal stiffness $K_n$ and a tangential one $K_t$) modifies the COD tensor $\boldsymbol{B}$ via
\[\boldsymbol{B}_{\text{eff}} = \bigl(b\,\boldsymbol{K} + \boldsymbol{B}^{-1}\bigr)^{-1} = \boldsymbol{B}\cdot\bigl(\boldsymbol{1} + b\,\boldsymbol{K}\cdot\boldsymbol{B}\bigr)^{-1},\]
where $b$ is the in-plane half-width, semi_minor(crack). The two limits are the familiar ones: $\boldsymbol{K} = \boldsymbol{0}$ gives a traction-free crack (recovering $\boldsymbol{B}$), and $\boldsymbol{K}\to\infty$ a rigid bond ($\boldsymbol{B}_{\text{eff}}\to\boldsymbol{0}$, i.e. no crack at all).
# Elasticity : iso interface stiffness K = 5·𝟏
B_eff = cod_tensor(pc, C₀; K_interface = TensISO{3}(5.0))
H_eff = compliance_contribution(pc, C₀; K_interface = TensISO{3}(5.0))
# Conductivity (Kapitza scalar interface conductance α)
b_eff = cod_tensor(pc, K₀; α_interface = 1.0)
R_eff = compliance_contribution(pc, K₀; α_interface = 1.0)When building an RVE for a homogenize call, attach the interface data as phase properties so the dispatcher picks them up automatically :
rve = RVE(:M)
add_matrix!(rve, Ellipsoid(1.0), Dict(:C => C₀, :K => K₀))
add_phase!(rve, :CRACK, PennyCrack(1.0),
Dict(:C => C₀,
:K_interface => TensISO{3}(5.0), # elastic interface
:K => K₀,
:α_interface => 1.0); # Kapitza scalar
density = 0.10, symmetrize = :iso)
C_eff = homogenize(rve, MoriTanaka(), :C)
K_eff = homogenize(rve, MoriTanaka(), :K)For SC-type schemes on cracked RVEs use AsymmetricSelfConsistent — the symmetric SelfConsistent form does not handle cracks (its strain-concentration tensor is singular).
For the time-dependent (ALV) version with Rn(t,t') and Rt(t,t') ageing interface kernels, see the Viscoelasticity manual. References: [46], [55].