Acoustic and Hill tensors
From the stiffness
the integrand of every Hill polarization tensor and the kernel of stress-intensity-factor integrals on crack fronts.
The point of this tutorial is that the construction is written once and runs unchanged on an isotropic and on a transversely isotropic stiffness — the structured types of The Walpole basis doing the work. Background: [13], [8].
using TensND
using LinearAlgebra
using SymPySetting up
The direction
Cartesian = coorsys_cartesian(symbols("x y z", real = true))
𝐞₁, 𝐞₂, 𝐞₃ = unitvec(Cartesian)
Spherical = coorsys_spherical((symbols("θ ϕ", real = true)..., symbols("ξ", positive = true)))
θ, ϕ, ξ = getcoords(Spherical)
𝐞ᶿ, 𝐞ᵠ, 𝐞ʳ = unitvec(Spherical)
𝕀, 𝕁, 𝕂 = iso_projectors(Val(3), Val(Sym))
𝟏 = tens_Id2(Val(3), Val(Sym))
𝛏 = getOM(Spherical)The isotropic case
With
λ = symbols("λ", real = true)
μ = symbols("μ", positive = true)
ℂ = 3λ * 𝕁 + 2μ * 𝕀
𝐊 = 𝛏 ⋅ ℂ ⋅ 𝛏The acoustic tensor is transversely isotropic about
tsimplify(𝐊)The Green operator and the Hill-type kernel:
ℾ = 𝛏 ⊗ˢ 𝐊^(-1) ⊗ˢ 𝛏
𝚲 = tsimplify(ℂ ⊡ ℾ ⊡ ℂ)It must reproduce the closed form
𝚲₂ = tsimplify(
λ^2 / (λ + 2μ) * 𝟏 ⊗ 𝟏
+ 2λ * μ / (λ + 2μ) * (𝟏 ⊗ 𝐞ʳ ⊗ 𝐞ʳ + 𝐞ʳ ⊗ 𝐞ʳ ⊗ 𝟏)
+ 4μ * (𝐞ʳ ⊗ˢ 𝟏 ⊗ˢ 𝐞ʳ - (λ + μ) / (λ + 2μ) * 𝐞ʳ ⊗ 𝐞ʳ ⊗ 𝐞ʳ ⊗ 𝐞ʳ)
)
pprint(tsimplify(𝚲 - 𝚲₂), Spherical)0Identically zero.
The transversely isotropic case
The same three lines, with a stiffness built by tens_TI instead. Nothing in the construction changes: ⋅, inv and ⊡ dispatch on the structured type.
This replaces a legacy hand-rolled Walpole basis
An earlier research script re-defined the Walpole tensors and the TI constructors locally. Everything it needed is now in the library — walpole_basis, tens_TI, tens_TI_eng, tens_TI_Hoenig — so the local definitions are gone.
C₁₁₁₁, C₁₁₂₂, C₁₁₃₃, C₃₃₃₃, C₂₃₂₃ = symbols("C₁₁₁₁ C₁₁₂₂ C₁₁₃₃ C₃₃₃₃ C₂₃₂₃", positive = true)
n = 𝐞₃
ℂᵗⁱ = tens_TI(C₁₁₁₁, C₁₁₂₂, C₁₁₃₃, C₃₃₃₃, C₂₃₂₃, [Sym(0), Sym(0), Sym(1)])
typeof(ℂᵗⁱ), get_ℓ(ℂᵗⁱ)(TensTI{4, Sym{PyCall.PyObject}, 5}, (C₃₃₃₃, C₁₁₁₁ + C₁₁₂₂, sqrt(2)*C₁₁₃₃, sqrt(2)*C₁₁₃₃, C₁₁₁₁ - C₁₁₂₂, 2*C₂₃₂₃))The acoustic tensor along the symmetry axis. Taking
𝐊ᵃˣ = tsimplify(𝐞₃ ⋅ ℂᵗⁱ ⋅ 𝐞₃)
get_array(𝐊ᵃˣ)In the isotropy plane,
𝐊ᵗ = tsimplify(𝐞₁ ⋅ ℂᵗⁱ ⋅ 𝐞₁)
get_array(𝐊ᵗ)The two coincide only when the material is isotropic. Substituting the isotropic relations
iso_subs = Dict(
C₁₁₁₁ => λ + 2μ, C₃₃₃₃ => λ + 2μ,
C₁₁₂₂ => λ, C₁₁₃₃ => λ, C₂₃₂₃ => μ,
)
(tsimplify(subs.(get_array(𝐊ᵃˣ), iso_subs...)), tsimplify(subs.(get_array(𝐊ᵗ), iso_subs...)))(Sym{PyCall.PyObject}[μ 0 0; 0 μ 0; 0 0 λ + 2*μ], Sym{PyCall.PyObject}[λ + 2*μ 0 0; 0 μ 0; 0 0 μ])The Green operator for the TI medium
Along the symmetry axis the acoustic tensor is diagonal, so its inverse is immediate and
ℾᵗⁱ = 𝐞₃ ⊗ˢ inv(𝐊ᵃˣ) ⊗ˢ 𝐞₃
𝚲ᵗⁱ = tsimplify(ℂᵗⁱ ⊡ ℾᵗⁱ ⊡ ℂᵗⁱ)
get_array(𝚲ᵗⁱ)[3, 3, 3, 3]The
Checking against the isotropic limit
Substituting the isotropic moduli into the TI result must reproduce the isotropic
Λᵗⁱ_iso = tsimplify(subs.(get_array(𝚲ᵗⁱ), iso_subs...))
Λ_iso_axis = tsimplify(subs.(get_array(𝚲₂), θ => Sym(0), ϕ => Sym(0)))
tsimplify(Λᵗⁱ_iso - Λ_iso_axis)Zero: the transversely isotropic construction degenerates correctly.
This page was generated using Literate.jl.