MICROMECHANICS TO FOURIER MICROELASTICITY

Derive the energy.
Find the driving force.

Begin with Eshelby’s inclusion thought experiment and Mura’s eigenstrain method, then extend the construction to Khachaturyan’s arbitrary coherent multiphase microstructure.

Inclusion construction   Elastic energy   Variational derivative   Julia + NumPy

THE GEDANKEN CONSTRUCTION

Why an eigenstrain produces elastic energy.

Cut an inclusion-shaped region from a stress-free matrix and let it transform freely by \(\varepsilon^0\). It no longer fits its original hole. Restoring it to the cavity requires elastic loading; welding it to the matrix enforces coherence; releasing the auxiliary tractions lets the joined body relax to mechanical equilibrium. The residual elastic strain is therefore \(\varepsilon^{\mathrm{el}}=\varepsilon-\varepsilon^0\), not the transformation strain itself.

Eshelby inclusion thought experiment Five stages show a region cut from a matrix, transformed freely, elastically strained to fit, welded into the matrix, and relaxed to its equilibrium elastic field. 01CUT Select a region 02TRANSFORM FREELY Apply eigenstrain ε⁰ 03STRAIN TO FIT Auxiliary tractions 04WELD Enforce coherence 05RELAX Mechanical equilibrium
Eshelby’s construction makes the source of stress visible. The free transformation is described by eigenstrain. Elastic strain appears when the transformed region must fit coherently inside the matrix.
\[\text{cut}\;\longrightarrow\;\text{stress-free transformation}\;\longrightarrow\;\text{restore}\;\longrightarrow\;\text{weld}\;\longrightarrow\;\text{elastic relaxation}\]

Eshelby solves this construction for an ellipsoidal inclusion. Mura’s eigenstrain formalism generalizes the source of internal stress. Khachaturyan replaces a single idealized inclusion by shape functions or continuous fields describing arbitrary numbers, shapes and variants, and evaluates their collective relaxation in Fourier space.

Conventions before calculation.

The derivation assumes linear elasticity, homogeneous stiffness \(C_{ijkl}\), periodic fields and zero applied mean stress. Let \(\boldsymbol c=(c_1,\ldots,c_{N_c})\) collect the composition fields and \(\boldsymbol\eta=(\eta_1,\ldots,\eta_{N_\eta})\) collect the structural order parameters. We expand their general eigenstrain map in \(P\) tensorial contributions:

\[\varepsilon^0_{ij}(\mathbf r)=\mathcal E_{ij}(\boldsymbol c,\boldsymbol\eta,\ldots)=\sum_{p=1}^{P}\theta_p(\boldsymbol c,\boldsymbol\eta,\ldots)\,\varepsilon^{0(p)}_{ij}.\]

Each \(\theta_p\) may depend on several composition and order-parameter fields. The derivation below acts on the \(P\) scalar interpolation fields and therefore does not require one particular phase-field parameterization. The mean strain relaxes to \(\langle\varepsilon^0_{ij}\rangle\). The elastic energy is therefore determined by the fluctuating interpolation fields

\[\Delta\theta_p(\mathbf r)=\theta_p(\mathbf r)-\langle\theta_p\rangle.\]

Our Fourier-transform convention is

\[\widetilde{\theta}_p(\mathbf k)=\int_{\mathbb R^d}\theta_p(\mathbf r)e^{-i\mathbf k\cdot\mathbf r}\,d^d r,\qquad \theta_p(\mathbf r)=\int_{\mathbb R^d}\widetilde{\theta}_p(\mathbf k)e^{i\mathbf k\cdot\mathbf r}\,\frac{d^d k}{(2\pi)^d}.\]

The derivation is written for spatial dimension \(d\), so the same notation covers two- and three-dimensional implementations. A prime on a Fourier integral, \(\int^{\prime}\), excludes the zero mode \(\mathbf k=\mathbf 0\).

References for the derivation: J. D. Eshelby’s 1957 ellipsoidal-inclusion solution; T. Mura’s eigenstrain formulation in Micromechanics of Defects in Solids; and A. G. Khachaturyan, Theory of Structural Transformations in Solids, Chapter 7, especially §7.2, “Strain Energy of Multiphase Alloys,” and §7.3, “Strain-Induced Interactions between Coherent New Phase Inclusions.” A detailed multivariant development appears in Saswata Bhattacharyya, Evolution of Multivariant Microstructures with Anisotropic Misfit: A Phase Field Study, Appendices A and B. The homogeneous-stiffness derivation on this page is distinct from the later inhomogeneous spectral iteration developed in our CICP paper.

ELASTIC-ENERGY DERIVATION

From mechanical equilibrium to \(B_{pq}\).

Step 1: Mean and periodic strain.

\[\begin{aligned}\boldsymbol\epsilon^{\mathrm{el}}&=\boldsymbol\epsilon^{\mathrm{per}}+\mathbf E-\boldsymbol\epsilon^0\\ \mathbf E&=\langle\boldsymbol\epsilon^0\rangle,\quad\langle\boldsymbol\epsilon^{\mathrm{per}}\rangle=0\\F_e&=\frac12\int_V(\boldsymbol\epsilon^{\mathrm{per}}-\Delta\boldsymbol\epsilon^0):\mathbf C:(\boldsymbol\epsilon^{\mathrm{per}}-\Delta\boldsymbol\epsilon^0)\,dV\end{aligned}\]

The mean terms cancel because the mean strain can relax. This cancellation would change under imposed mean strain or other loading conditions.

Follow the six-integral expansion

A term-by-term derivation expands the original expression as Fₑ = I₁ + I₂ + I₃ + I₄ + I₅ + I₆. The periodic-strain/mean-strain term I₂ vanishes. I₄ + I₅ cancel the mean-eigenstrain part of I₆. What remains combines periodic elastic relaxation with the eigenstrain fluctuations. This is why the final integral omits the zero mode.

I₁ contains one half of the relaxation quadratic form, while I₃ contains its negative with no factor of one half. Their sum therefore supplies the negative one-half relaxation contribution in the final kernel.

Step 2: Solve the equilibrium equation mode by mode.

For k ≠ 0, define n = k/|k|, σ⁽ᵖ⁾ = C:ε⁽ᵖ⁾ and the acoustic tensor Q. Let a⁽ᵖ⁾ = σ⁽ᵖ⁾n. Mechanical equilibrium eliminates displacement through the inverse acoustic tensor Ω = Q⁻¹.

\[\begin{aligned}Q_{ik}(\mathbf n)&=C_{ijkl}n_jn_l\\\boldsymbol\Omega&=\mathbf Q^{-1},\qquad\mathbf a^{(p)}=\boldsymbol\sigma^{(p)}\mathbf n\\\widetilde{\mathbf u}(\mathbf k)&=-\frac{i}{|\mathbf k|}\boldsymbol\Omega(\mathbf n)\sum_p\mathbf a^{(p)}(\mathbf n)\Delta\widetilde\theta_p(\mathbf k)\end{aligned}\]

With the Fourier convention above, differentiating displacement multiplies its transform by +ik. The zero mode is handled by the mean-strain condition, not by inverting Q at k = 0.

Step 3: Substitute the relaxed strain into the energy.

\[\begin{aligned}B_{pq}(\mathbf n)&=\boldsymbol\epsilon^{(p)}:\mathbf C:\boldsymbol\epsilon^{(q)}-\mathbf a^{(p)}\cdot\boldsymbol\Omega\cdot\mathbf a^{(q)}\\F_e&=\frac12\sum_{p,q}\int^{\prime}B_{pq}(\mathbf n)\widetilde\theta_p(\mathbf k)\widetilde\theta_q^{\,*}(\mathbf k)\frac{d^d k}{(2\pi)^d}\end{aligned}\]

The first term is the unrelaxed eigenstrain contribution. The second subtracts the energy released by a compatible displacement field. For a stable stiffness tensor, the relaxed quadratic form is nonnegative. Bₚq = Bqₚ and Bₚq(n) = Bₚq(−n).

A full derivation obtains this expression using Parseval’s theorem and cancellation of the mean terms.

VARIATIONAL DERIVATIVE

The variation of both factors.

Varying the quadratic energy produces two terms: one from θ̃ₚ and one from θ̃*q. Real fields obey θ̃*(k) = θ̃(−k). Combining this reality condition with the evenness and symmetry of B makes the two half-contributions equal.

\[\begin{aligned}g_i(\mathbf r)&\equiv\frac{\delta F_e}{\delta\theta_i(\mathbf r)}\\\widetilde g_i(\mathbf k)&=\sum_p B_{ip}(\mathbf n)\widetilde\theta_p(\mathbf k)\\g_i(\mathbf r)&=\mathcal F^{-1}\!\left[\sum_p B_{ip}\widetilde\theta_p\right]\end{aligned}\]

The factor ½ in the energy therefore disappears from its derivative. Here i labels the selected field; p is summed. We write the symmetry explicitly as Bₚᵢ = Bᵢₚ to avoid confusing the free field index with a summation index.

Derivatives for each composition and order-parameter field.

The kernel first gives \(g_p=\delta F_e/\delta\theta_p\). The constitutive eigenstrain map then supplies the chain rule for every underlying field:

\[\begin{aligned}\frac{\delta(F_e/N_v)}{\delta c_a}&=\frac{1}{N_v}\sum_{p=1}^{P}g_p\,\frac{\partial\theta_p}{\partial c_a},\qquad a=1,\ldots,N_c,\\ \frac{\delta(F_e/N_v)}{\delta\eta_b}&=\frac{1}{N_v}\sum_{p=1}^{P}g_p\,\frac{\partial\theta_p}{\partial\eta_b},\qquad b=1,\ldots,N_\eta.\end{aligned}\]

For the specialization \(\theta_1=c\) and \(\theta_{b+1}=\eta_b^2\), these reduce to \(g_1/N_v\) and \(2\eta_b g_{b+1}/N_v\). Nᵥ is optional when the free-energy functional is already per unit volume. Evaluate the derivatives of \(\theta_p\) and multiply by \(g_p\) in real space; multiplying their Fourier transforms pointwise would incorrectly replace a product by a convolution.

The free-energy derivative and the evolution law.

Each composition derivative enters a conserved evolution law, while each structural order-parameter derivative enters a nonconserved evolution law. With cross mobilities allowed,

\[\frac{\partial c_a}{\partial t}=\nabla\!\cdot\!\sum_b M_{ab}\nabla\frac{\delta F}{\delta c_b},\qquad \frac{\partial\eta_a}{\partial t}=-\sum_b L_{ab}\frac{\delta F}{\delta\eta_b}.\]

The expressions above provide only the elastic parts of these derivatives. Chemical and gradient-energy contributions must also be included.

The same calculation in both languages.

Assume \(P\) real interpolation fields and a precomputed real, even, symmetric \(P\times P\) kernel with \(B(\mathbf k=0)=0\). These snippets compute \(g_p=\delta F_e/\delta\theta_p\); they do not choose the constitutive map \(\theta_p(\boldsymbol c,\boldsymbol\eta)\), construct the kernel or advance time. NumPy uses axes (field, x, y); Julia uses (x, y, field).

NumPy: sum over coupled fields, then inverse transform
# theta.shape = (P, nx, ny); B.shape = (P, P, nx, ny)
# Build theta from every composition and order-parameter field.
h = np.fft.fft2(theta, axes=(-2, -1))
g_hat = np.einsum('ipxy,pxy->ixy', B, h)
g = np.fft.ifft2(g_hat, axes=(-2, -1)).real
# Apply the Jacobian of theta(c, eta, ...) in real space:
# dFe_dc[a]   = sum_p g[p] * dtheta_p_dc[a] / Nv
# dFe_deta[b] = sum_p g[p] * dtheta_p_deta[b] / Nv
# Elastic energy, with NumPy's default FFT normalization:
N = theta.shape[-2] * theta.shape[-1]
Fe = 0.5 * dx * dy / N * np.sum((h.conj() * g_hat).real)
Julia: the same kernel contraction and chain rule
# theta: (nx,ny,P); B: (nx,ny,P,P)
# Build theta from every composition and order-parameter field.
h = fft(theta, (1, 2))
g_hat = zeros(ComplexF64, size(h))
P = size(theta, 3)
for i in 1:P, p in 1:P
    g_hat[:,:,i] .+= B[:,:,i,p] .* h[:,:,p]
end
g = real.(ifft(g_hat, (1, 2)))
# Apply the Jacobian of theta(c, eta, ...) pointwise in real space.
N = size(theta,1) * size(theta,2)
Fe = 0.5 * dx * dy / N * sum(real.(conj.(h) .* g_hat))

My numerical check of the energy derivative.

For a small perturbation hᵢ(r), the central difference [Fₑ(θ + ah) − Fₑ(θ − ah)]/(2a) should approach ∫ ∑ᵢ gᵢhᵢ dV. To check the η derivative, perturb η and rebuild θᵢ = ηᵢ² before evaluating each energy. This catches a missing factor of two, an FFT normalization error, or an incorrect field-index contraction.

Run the single-field elastic example ↗

The worked spinodal example has one composition field and a scalar kernel. The general formulas allow any number of coupled composition and order-parameter fields; the four-field model is only one specialization. The single-field example isolates the same numerical idea.

Bitter–Crum & Eshelby.

Understand the assumptions behind shape-independent elastic energy, uniform strain inside ellipsoidal inclusions, and the anisotropic patterns in the worked example.

Explore the theorems and their limits →

An interactive comparison with the derivation.

The Elastic Stress Effects Laboratory implements and tests this framework for the elastic-energy kernel \(B_{pq}\) and driving force. For spatially varying stiffness, the laboratory is checked against Bhattacharyya, Heo, Chang and Chen, Communications in Computational Physics 11 (2012), Eqs. (2.6–2.16), and against Tushar Jogi’s Appendix B.

Open the laboratory → · Read the equation audit

From derivation to a trustworthy solver.

Check kernel symmetry, the isotropic limit, the zero-mode treatment and the energy derivative before interpreting morphology.

← Back to the elasticity formulation