Localization and contribution tensors
MeanFieldHom exposes the four dilute localization tensors of the Eshelby problem, together with the size-independent stiffness and compliance contribution tensors of Kachanov–Sevostianov.
Pivot formula
For an inclusion I of stiffness $\mathbb C_1$ embedded in an infinite matrix of stiffness $\mathbb C_0$, the strain–strain localization tensor is
\[\mathbb A_{\varepsilon\varepsilon} = \bigl[\,\mathbb I + \mathbb P(\mathrm I, \mathbb C_0) : (\mathbb C_1 - \mathbb C_0)\,\bigr]^{-1},\]
where $\mathbb P$ is the Hill polarization tensor (hill_tensor) and $\mathbb I$ is the symmetric identity 4-tensor. The three other localization tensors follow algebraically:
\[\mathbb A_{\sigma\varepsilon} = \mathbb C_1 : \mathbb A_{\varepsilon\varepsilon},\qquad \mathbb A_{\varepsilon\sigma} = \mathbb A_{\varepsilon\varepsilon} : \mathbb S_0,\qquad \mathbb A_{\sigma\sigma} = \mathbb C_1 : \mathbb A_{\varepsilon\varepsilon} : \mathbb S_0,\]
with $\mathbb S_0 = \mathbb C_0^{-1}$. The four functions exposed by MeanFieldHom are:
| Function | Return value |
|---|---|
strain_strain_loc(incl, C₁, C₀) | $\mathbb A_{\varepsilon\varepsilon}$ |
stress_strain_loc(incl, C₁, C₀) | $\mathbb A_{\sigma\varepsilon}$ |
strain_stress_loc(incl, C₁, C₀) | $\mathbb A_{\varepsilon\sigma}$ |
stress_stress_loc(incl, C₁, C₀) | $\mathbb A_{\sigma\sigma}$ |
Contribution tensors
The stiffness contribution tensor (Kachanov–Sevostianov 2018) is
\[\mathbb N = (\mathbb C_1 - \mathbb C_0) : \mathbb A_{\varepsilon\varepsilon},\]
and its dilute-scheme volume average is
\[\Delta\mathbb C_\mathrm{eff} = f \,\mathbb N,\]
for a dilute family of volume fraction $f$. The dual compliance contribution tensor is
\[\mathbb H = (\mathbb S_1 - \mathbb S_0) : \mathbb A_{\sigma\sigma},\qquad \Delta\mathbb S_\mathrm{eff} = f\,\mathbb H.\]
Functions: stiffness_contribution, compliance_contribution, with density helpers delta_stiffness and delta_compliance.
Cracks (Kachanov convention)
For flat cracks the Budiansky density convention is used instead of a volume fraction. The same entry points apply, with the density $\varepsilon$ replacing $f$:
compliance_contribution(crack, C₀)returns the size-independentH = (3/4) n̂ ⊗ˢ B ⊗ˢ n̂(elliptic) or(2/π) n̂ ⊗ˢ B ⊗ˢ n̂(ribbon);stiffness_contribution(crack, C₀)returnsN = -C₀ : H : C₀(first order, provided for API symmetry);delta_compliance(crack, H, ε)anddelta_stiffness(crack, N, ε)apply the appropriate(4π/3)orπgeometric prefactor.
Conductivity (2nd-order transport)
Every routine above has a 2-tensor analog, triggered by dispatch on ::AbstractTens{2,3} matrices:
| Elasticity | Conductivity |
|---|---|
strain_strain_loc | gradient_gradient_loc |
stress_strain_loc | flux_gradient_loc |
strain_stress_loc | gradient_flux_loc |
stress_stress_loc | flux_flux_loc |
stiffness_contribution | conductivity_contribution |
compliance_contribution (ellipsoid) | resistivity_contribution |
delta_stiffness | delta_conductivity |
delta_compliance (ellipsoid) | delta_resistivity |
Type-genericity
All four localization and both contribution tensors are generic in the element type; the only requirement is that hill_tensor supports it.
Extending to user-defined inclusions
A concrete subtype of AbstractInclusion inherits the four localization and the contribution tensors as soon as it provides hill_tensor. When $\mathbb P$ has no convenient closed form (e.g. LayeredSphere), override strain_strain_loc instead — the rest is derived algebraically.
See the developer guide Adding a new inclusion for a step-by-step recipe.