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$.


Function Documentation

Obliqua.run_solid1d_equil_relax — Function
run_solid1d_relax(omega, rho, radius, gravity, visc, shear, bulk, R, m_core, ρ_core, μ_core, κ_core; dr_min=300, dr_max=3000, n=2, m=2, core="liquid", optimize_scales=false, patch=false)

Use 1D solid tides model with relaxation method to calculate kn Lovenumbers, and compute 1D heating profile from strain tensor. This method includes inertia effects, but is more computationally expensive.

Arguments

  • omega::prec : Forcing frequency range.
  • rho::Array{prec,1} : Density profile of the planet.
  • radius::Array{prec,1} : Radial positions of layers, from core to surface.
  • gravity::Array{prec,1} : Gravity profile of the planet.
  • visc::Array{prec,1} : Viscosity profile of the planet.
  • shear::Array{precc,1} : Complex shear modulus profile of the planet.
  • bulk::Array{precc,1} : Complex bulk modulus profile of the planet.
  • R::prec : Planet radius.
  • m_core::prec : Core mass.
  • ρ_core::prec : Core density.
  • μ_core::precc : Core shear modulus.
  • κ_core::precc : Core bulk modulus.

Keyword Arguments

  • dr_min::Int=300 : Minimum layer thickness in m.
  • dr_max::Int=3000 : Maximum layer thickness in m.
  • n::Int=2 : Power of the radial factor (goes with (r/a)^{n}, since r<<a only n=2 contributes significantly).
  • m::Int=2 : Harmonic of the true anomaly. m=2 corresponds to the semidiurnal tide, m=1 diurnal tide.
  • core::String="liquid" : Core state, either "liquid", "solid", or "inertial".
  • optimize_scales::Bool=false : Whether to optimize non-dimensionalization scales.
  • patch::Bool=false : Whether to insert an infinitesimal solid shell around the core. This patches an issue where y2 and y4 become decoupled and cause the solution to diverge in fluid layers.

Returns

  • kn_T::ComplexF64 : Complex Tidal kn Lovenumber.
  • kn_L::ComplexF64 : Complex Load kn Lovenumber.
source