Layered spheroid — confocal harmonic series
LayeredSpheroid is an
On a sphere an imperfect interface acts on each harmonic degree independently; on a spheroid it couples them. The sphere's
The elastic problem is on its own page
The axisymmetric elastic case is solved in The elastic confocal spheroid, on the same chart and reusing the same Legendre machinery. It was never barred by the method being tied to the scalar Laplace equation — Barthélémy & Bignonnet say the opposite, that they imported the transfer-matrix formalism from elasticity [36], following Hervé & Zaoui [32] and Hervé & Luanco [34].
What genuinely does not carry over is geometric, and it changes the shape of the answer. Concentric spheres are homothetic, so one harmonic degree never talks to another; confocal spheroids are not, and the metric
Confocal spheroidal coordinates
Prolate spheroidal coordinates
with

Confocality is a real constraint, and it has a visible consequence: since
Oblate spheroids (
LayeredSpheroid exploits this directly: the confocal parameter T for a prolate spheroid and Complex{T} for an oblate one, and every downstream routine — Legendre recurrences, coupling integrals, transfer matrices — is written generically over Q <: Number. No branch is ever taken on prolate versus oblate.
The chart, checked rather than quoted
Everything above is Appendix A of [36]. Rather than transcribe it, the block below rebuilds it: TensND ships the prolate spheroidal chart as a symbolic coordinate system, so the metric, the frame and the harmonicity of the series are derived at documentation-build time from the position map alone.
using TensND, SymPy
Spheroidal = coorsys_spheroidal()
ϕ, p, q = getcoords(Spheroidal)
c = symbols("c", positive = true)
getOM(Spheroidal) # the position map (A.1)The Lamé coefficients (χ_ϕ, χ_p, χ_q) come out of the chart, not out of the paper:
Lame(Spheroidal)(c*sqrt(1 - p^2)*sqrt(q^2 - 1), c*sqrt(-p^2 + q^2)/sqrt(1 - p^2), c*sqrt(-p^2 + q^2)/sqrt(q^2 - 1))and they are (A.6). The check compares the squares — SymPy will not recombine
χ = Lame(Spheroidal)
χ_ref = (
c * sqrt(1 - p^2) * sqrt(q^2 - 1),
c * sqrt((q^2 - p^2) / (1 - p^2)),
c * sqrt((q^2 - p^2) / (q^2 - 1)),
)
[simplify(χ[i]^2 - χ_ref[i]^2) for i in 1:3]The volume element (A.7), dΩ = χ_ϕ χ_p χ_q dϕ dp dq = c³ (q² − p²) dϕ dp dq, follows immediately and does reduce:
simplify(prod(χ) - c^3 * (q^2 - p^2))and the orthonormal frame (e_ϕ, e_p, e_q) of (A.6) is the chart's own:
normalized_basis(Spheroidal)Why the series is a series of harmonics
The whole construction rests on one fact: the products
Δ = [
(n, m, simplify(LAPLACE(
sympy.assoc_legendre(n, m, p) * sympy.assoc_legendre(n, m, q) * cos(m * ϕ),
Spheroidal,
)))
for (n, m) in ((1, 0), (2, 0), (3, 0), (1, 1), (2, 1), (3, 1), (2, 2), (3, 2))
]8-element Vector{Tuple{Int64, Int64, SymPyCore.Sym{PyCall.PyObject}}}:
(1, 0, 0)
(2, 0, 0)
(3, 0, 0)
(1, 1, 0)
(2, 1, 0)
(3, 1, 0)
(2, 2, 0)
(3, 2, 0)Orders 0 and 1 are what conduction uses — order 2 is for later
A remote gradient excites only legendre.jl implements exactly those two. legendre.jl is then three seed tables — the stability machinery below is order-generic and comes for free. See the roadmap's checklist.
Boundary value problem
where
| problem | remote gradient | order | degrees |
|---|---|---|---|
| axial | odd only | ||
| transverse | odd only |
An arbitrary remote gradient follows by rotation, the geometry being axisymmetric.
Interface conditions and the coupling matrices
Three interface types are available. Writing
| type | condition | MeanFieldHomogenization | effect on degrees |
|---|---|---|---|
| perfect | PerfectInterface | diagonal | |
| LC (low-conducting) | KapitzaInterface(ρ) | couples all degrees | |
| HC (highly-conducting) | SurfaceConductiveInterface(β) | couples all degrees |
The LC model is the Kapitza thermal contact resistance [38], [39]; the HC model is a highly conducting surface layer [40]. Both are the imperfect-interface models used by [41] and [36].
Sign convention
echoes interf_prop values for the low-conducting case.
The coupling arises because a non-spherical interface mixes harmonic degrees. Four matrices carry it, defined as integrals over the interface [36]:
and similarly coupling_matrices.
Transfer matrices
Truncating at
where
Accumulating spheroid_state_sequence computes, and what local_temperature, local_gradient and local_flux reconstruct pointwise from.
Volume-averaged concentration tensors
For homogenization only two order-2 tensors are needed. They are defined by the volume averages over the whole particle
TensND.TensTI{2,3}.
Remarkably, they depend on the whole layered structure only through the single ratio
The coincidence
These are gradient_gradient_loc and flux_gradient_loc.
Like LayeredSphere, a layered spheroid has no Hill tensor — it is not a homogeneous ellipsoid, so
Equivalent particle
[36] (§4) define the equivalent particle: the homogeneous, perfectly bonded spheroid of the same shape that homogenizes identically. Its conductivity is
with scripts/34_spheroid_equivalent_conductivity.jl.
When every interface is perfect, only degree 1 survives, the coupling matrices drop out, and tens_IA and hill_tensor for a single spheroid. That closed form is used as an exact oracle in test/LayeredSpheroids/test_conductivity.jl.
Numerical precision: quadrature, not the monomial series
The reference implementation of [36] computes
(closed form via mpmath arbitrary precision once
MeanFieldHomogenization integrates the definitions above directly by Gauss quadrature (QuadGK), evaluating
coupling_matrices(q, Nseries; method = :quadrature) # default
coupling_matrices(q, Nseries; method = :series) # BigFloat validation oracleThe integrand is smooth and bounded on Float64 quadrature reaches machine precision for any BigFloat port of the monomial series is kept as an independent oracle (test/LayeredSpheroids/test_coupling.jl, scripts/33_spheroid_series_convergence.jl).
Integration with the schemes
LayeredSpheroid is wired into the schemes exactly like LayeredSphere (see Layered sphere and src/LayeredSpheres/scheme_integration.jl for the elastic and conduction analogues): it declares is_homogeneous_inclusion = false and overrides gradient_gradient_loc, flux_gradient_loc and conductivity_contribution. Every dilute, Mori–Tanaka, self-consistent, Maxwell and differential kernel then routes through the confocal transfer-matrix solution with no change to src/Schemes/.