Reference (3)
Solid-Phase (Equilibrium) - solid1d-equil-relax
Like solid1d-relax, the solid1d-equil-relax model avoids shooting-method complications by solving a global relaxation system in one pass. The key structural difference is that it propagates a reduced two-component state vector rather than the full six-component elastic solution. The governing matrix get_A! (following Saito 1974, Eq. 18) depends only on density, gravity, and degree $n$ — shear modulus $\mu$ and bulk modulus $K$ never enter it — so this model captures the gravitational-potential response of a body deforming in hydrostatic (equilibrium-tide) balance, rather than solving the coupled elastic stress-displacement system.
Numerical Formulation
The problem statement retains the same form as the elastic case, but with a $2\times2$ system matrix in place of the $6\times6$ one:
\[\frac{d\pmb{y}_{n,m}(r)}{dr} = \pmb{A}_n(r)\, \pmb{y}_{n,m}(r)\]
with
\[\pmb{A}(r) = \begin{pmatrix} \dfrac{4\pi G \rho}{g} - \dfrac{n+1}{r} & 1 \\[6pt] \dfrac{2(n-1)}{r}\dfrac{4\pi G \rho}{g} & \dfrac{n-1}{r} - \dfrac{4\pi G \rho}{g} \end{pmatrix}\]
Discretizing with the same second-order (trapezoidal) finite-difference scheme as before gives the identical relaxation form:
\[\pmb{C}_n \pmb{y}_n + \pmb{D}_{n+1}\pmb{y}_{n+1} = \pmb{0}, \qquad \pmb{C}_n = \pmb{I}_2 + \frac{\Delta r}{2}\pmb{A}_n, \quad \pmb{D}_{n+1} = -\pmb{I}_2 + \frac{\Delta r}{2}\pmb{A}_{n+1}\]
Because the elastic degrees of freedom drop out, $\pmb{y}$ carries only two entries instead of six.
Boundary Conditions as Constraints
Lower Boundary (Core)
At the core boundary, get_core_bc! builds a $1\times2$ constraint row $B_1$ so that
\[B_1\, \pmb{y}(r_C^+) = 0\]
Rather than hand-deriving this row, it is obtained numerically as the left null space of the matrix $I_c$ of admissible interior solutions returned by get_Ic. Currently only the liquid-core case is implemented, with the single regular solution
\[I_c = \begin{pmatrix} r^n \\ 2(n-1)r^{n-1} \end{pmatrix}\]
"solid" and "inertial" core types are declared in the interface but raise an error if selected, so the constraint construction is presently liquid-core-only. An optional patch keyword can insert an infinitesimally thin solid shell just above the core (via placeholder $\mu$, $K$ values) to work around a known $y_2$–$y_4$ decoupling instability in fluid layers — though since $\mu, K$ do not appear in $\pmb{A}$, this patch's effect on the reduced system is limited to whatever downstream consumers of $\mu, K$ exist outside this reduced ODE.
Upper Boundary (Surface)
At the surface, get_surface_bc! is called twice — once for the tidal-forcing case and once for the load-forcing case — each returning its own $1\times2$ matrix $B_N$ and right-hand side $b$, together with directly-evaluated surface values $y_2$ and $y_6$ (obtained from a separate analytic relation rather than from the propagated 2-vector). The reduced system is then solved for the potential-related pair, and the classical surface relation
\[y_1 = \frac{y_2}{g\rho} + \frac{y_5}{g}\]
is used to recover $y_1$. The full six-component output vector is finally assembled as
\[\pmb{y} = (y_1,\ y_2,\ 0,\ 0,\ y_5,\ y_6)\]
with $y_3 = y_4 = 0$ imposed by construction, since no shear stresses are solved for in this reduced formulation.
The Global System and Henyey Relaxation
The assembled system again has the block-tridiagonal Henyey structure, but with $2\times2$ blocks instead of $6\times6$:
- Core step (
core_boundary): combines $B_1$ with the upper half of $C_1$ to form $S_1$, and initializes $R_1 = -S_1^{-1}Q_1$. - Propagation step (
propagate_solid): for each interior layer, carries forward the "stored" lower half-rows of $C_n$ and $D_{n+1}$ from the previous step to build $P_n$, $S_n$, $Q_n$, then updates
\[X_n = P_n R_{n-1} + S_n, \qquad R_n = -X_n^{-1}Q_n\]
- Surface step (
surface_boundary): applies $B_N$ (separately for the tidal and load cases) in place of the interior $C_N$ upper half, solves $X_N y = b$ for the surface potential pair, and back-fills $y_1$ and the shear-free components.
The recursion logic is otherwise identical to the elastic $6\times6$ solver — only the block dimension changes, since the physics being relaxed is restricted to the potential equation rather than the full stress-displacement-potential system. Both a tidal ($y_t$) and a load ($y_l$) surface solution are produced from a single forward sweep, since the two cases share every $C_n$, $D_{n+1}$ block and differ only in the surface right-hand side $b$.