A two-point Green tensor between offset frames
The Green operator
It is also a compact demonstration that tensors carrying different bases can be combined: the position vectors live in two distinct spherical charts and are subtracted after conversion to a common frame.
Theory: Bases and variance, Curvilinear differential calculus.
using TensND
using LinearAlgebra
using SymPy
𝕀, 𝕁, 𝕂 = iso_projectors(Val(3), Val(Sym))
𝟏 = tens_Id2(Val(3), Val(Sym))
E = symbols("E", positive = true)
ν = symbols("ν", real = true)
k = E / (3(1 - 2ν))
μ = E / (2(1 + ν))Two spherical frames
The "field" frame
θ, ϕ, r = symbols("θ", real = true), symbols("ϕ", real = true), symbols("r", positive = true)
S = coorsys_spherical((θ, ϕ, r))
𝐱 = getOM(S)
θ′, ϕ′, r′ = symbols("θ′", real = true), symbols("ϕ′", real = true), symbols("r′", positive = true)
S′ = coorsys_spherical((θ′, ϕ′, r′))
Cartesian = coorsys_cartesian(symbols("x y z", real = true))
𝐞₁, 𝐞₂, 𝐞₃ = unitvec(Cartesian)
R = symbols("R", positive = true)
𝐱′ = getOM(S′) + R * 𝐞₃The separation vector
Both position vectors are expressed in their own chart; subtracting them requires a common frame, which TensND supplies automatically.
Δ𝐱 = 𝐱 - 𝐱′
ρ = tsimplify(norm(Δ𝐱))The distance between the two points, as a function of both sets of spherical coordinates and the offset:
ρThe unit vector along the separation, brought back to the canonical basis:
𝐍 = Δ𝐱 / ρ
𝐧 = tsimplify(change_tens_canon(𝐍))The Green operator
The same closed form as in Elastic Green's functions, with the separation direction
ℾ = 1 / (16PI * μ * (1 - ν) * ρ^3) * (
-3𝕁 + 2(1 - 2ν) * 𝕀 + 3(𝟏 ⊗ 𝐧 ⊗ 𝐧 + 𝐧 ⊗ 𝐧 ⊗ 𝟏)
+ 12ν * 𝐧 ⊗ˢ 𝟏 ⊗ˢ 𝐧 - 15𝐧 ⊗ 𝐧 ⊗ 𝐧 ⊗ 𝐧
)Checks
tsimplify(𝐧 ⋅ 𝐧)On the axis
tsimplify(subs(ρ, θ => Sym(0), θ′ => Sym(0)))and the separation direction becomes
tsimplify(subs(get_array(𝐧)[3], θ => Sym(0), θ′ => Sym(0)))Coincident frames
Setting
ρ_same = tsimplify(subs(ρ, R => Sym(0), θ′ => θ, ϕ′ => ϕ))
tsimplify(ρ_same - abs(r - r′))This page was generated using Literate.jl.