Version: dev

McTigueModel

McTigue (1987) finite-sphere model for volcanic surface deformation. Extends the Mogi (1958) point-source model by incorporating higher-order correction terms that account for the finite radius of a spherical deformation source. The correction depends on ε = a/d and improves accuracy for larger ε: within 5% of FE models for ε < 0.59, vs ε < 0.37 for Mogi. Three purely-algebraic equations: R = sqrt(x²+d²) (source-to-surface distance), Ur = (Mogi_Ur) × C (Eq. 3, radial displacement), Uz = (Mogi_Uz) × C (Eq. 4, vertical displacement), where C = 1 + (a/d)³ × [(1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))] is the McTigue finite-sphere correction factor. Migrated from Geodynamics.jl@d680af419676cc576d60b16af0d3dd40c0b23eea src/mogi_mctigue.jl:107 (`McTigueModel` @component).

Domain
geodynamics
Type
model
.esm schema
1.0.0
Source
components/geodynamics/mctigue.esm
Tags
#geodynamics #model #volcanic-deformation #mctigue #mogi #observed-only #algebraic

Description

McTigue (1987) finite-sphere model for volcanic surface deformation. Extends the Mogi (1958) point-source model by incorporating higher-order correction terms that account for the finite radius of a spherical deformation source. The correction depends on ε = a/d and improves accuracy for larger ε: within 5% of FE models for ε < 0.59, vs ε < 0.37 for Mogi. Three purely-algebraic equations: R = sqrt(x²+d²) (source-to-surface distance), Ur = (Mogi_Ur) × C (Eq. 3, radial displacement), Uz = (Mogi_Uz) × C (Eq. 4, vertical displacement), where C = 1 + (a/d)³ × [(1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))] is the McTigue finite-sphere correction factor. Migrated from Geodynamics.jl@d680af419676cc576d60b16af0d3dd40c0b23eea src/mogi_mctigue.jl:107 (McTigueModel @component).

Reference

_source_ref: Geodynamics.jl@d680af419676cc576d60b16af0d3dd40c0b23eea:src/mogi_mctigue.jl:107

Upstream McTigueModel is an MTK @component implementing the McTigue (1987) finite-sphere analytical model for volcanic ground deformation. It declares 6 @parameters (G, ν, ΔP, a, d, x) and 3 time-indexed @variables (R, Ur, Uz), with 3 equations returning System(eqs, t; name). The upstream Julia test confirms length(unknowns(mtkcompile(sys))) == 0 — after structural simplification, all 3 variables are algebraic observed quantities (zero dynamic states).

System kind: all 3 upstream equations are explicit algebraic assignments with no D(.) operator. The dependency chain is strictly forward (R computed first, then Ur and Uz both depend on R), so the system is triangular — no implicit Newton solve is required, and system_kind is left unset (default, zero differential states), exactly as for MogiModel and the sibling observed-only components AnelasticMassContinuity, AtmosphericDiffusion, etc.

Note on migration tracker blocking gap. The tracker lists this bead as gt-ebuq (init_eq/system_kind=nonlinear). Investigation of the upstream source confirms the equations are EXPLICITLY algebraic — no initialization_equations, no guesses, and no implicit coupling. The system_kind=nonlinear label was applied conservatively to the whole Geodynamics group. The Julia test constructs a NonlinearProblem only because MTK compiles all-algebraic Systems to that type internally — not because the equations require iteration. The migration therefore uses the explicit-algebraic path without system_kind, matching MogiModel (components/geodynamics/mogi.esm) exactly.

Note on one_m constant. The upstream declares one_m = 1.0 [unit = u"m"] and writes R ~ (x^2/one_m^2 + d^2/one_m^2)^0.5 * one_m to satisfy DynamicQuantities’ requirement that sqrt arguments be dimensionless. Since ESM has no dimensional quantity tracking in expression trees, one_m is mathematically 1.0 and the equation reduces to R = sqrt(x^2 + d^2) with no loss of precision.

McTigue correction factor. The finite-sphere correction C in Eqs. 3–4 is: C = 1 + ε³ × [(1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))] where ε = a/d. The correction is identical for Ur and Uz — both displacements are scaled by the same factor C relative to the Mogi result. At ν=0.25 and ε=0.25 (Table 1 params: a=1 km, d=4 km), C ≈ 1.005261 (0.5% correction). At ε=0.4 (a=800 m, d=2 km, Kīlauea), C ≈ 1.01552 (1.6% correction). When ε→0, C→1 and McTigue reduces exactly to Mogi.

Parameters (6): G (shear modulus, Pa), ν (Poisson’s ratio, dimensionless), ΔP (source overpressure, Pa), a (source radius, m), d (source depth, m), x (horizontal distance from source, m).

State variables (3): R (source-to-surface distance, m), Ur (horizontal-radial surface displacement, m), Uz (vertical surface displacement, m).

Equation faithfulness. The 3 equations from src/mogi_mctigue.jl:155-178 are preserved in order:

  1. R ~ sqrt(x^2 + d^2)
  2. Ur ~ (a^3 * ΔP * (1-ν) * x / (G * R^3)) * (1 + (a/d)^3 * ((1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν)))) (Eq. 3, Taylor et al.)
  3. Uz ~ (a^3 * ΔP * (1-ν) * d / (G * R^3)) * (1 + (a/d)^3 * ((1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν)))) (Eq. 4, Taylor et al.)

Default values match Table 1 of Taylor et al. (2021): G=4 GPa, ν=0.25, ΔP=2 MPa, a=1 km, d=4 km, x=5 km.

Tolerance rationale. Closed-form algebraic evaluation — no ODE integration, no implicit solve — so there is no integrator error to bound; rel=1e-6 covers float64 round-off in the power/multiply/divide chains._

Parameters

NameUnitsDefaultDescription
GPa4000000000.0Shear modulus (Pa) of the elastic half-space. Controls the stiffness of the medium — a higher G yields smaller displacements for the same overpressure. Upstream MTK @parameter; default 4.0 GPa, the value used in Taylor et al. (2021) Table 1 for Kīlauea volcano rock.
ν10.25Poisson’s ratio (dimensionless) of the elastic half-space. Typical values for crustal rock are 0.25–0.30. Appears as (1−ν) in the displacement formulas and (1+ν) / (−7+5ν) in the McTigue correction term. Upstream MTK @parameter; default 0.25.
ΔPPa2000000.0Source overpressure (Pa) — the excess pressure inside the spherical magma chamber above the far-field lithostatic stress. Positive ΔP (inflation) produces positive outward radial displacement (Ur > 0) and positive vertical uplift (Uz > 0); negative ΔP (deflation) reverses both. Both Ur and Uz scale linearly with ΔP. Upstream MTK @parameter; default 2.0 MPa (Table 1 of Taylor et al. 2021).
am1000.0Source radius (m) — the radius of the spherical magma chamber. Appears in both the Mogi a³ pre-factor and the McTigue correction through ε = a/d. The McTigue model is valid when ε = a/d < 0.59 (Taylor et al. 2021, ~5% FE error); for larger ε, finite-source non-linearity dominates and this analytical approximation degrades. Upstream MTK @parameter; default 1000 m (1 km, Table 1 of Taylor et al. 2021).
dm4000.0Source depth (m) — the depth of the center of the spherical magma chamber below the free surface. Enters the source-to-surface distance R, the Mogi denominator, the McTigue correction term numerator (15d²) and denominator (4R²). Upstream MTK @parameter; default 4000 m (4 km, Table 1 of Taylor et al. 2021).
xm5000.0Horizontal distance from source (m) — the radial distance on the free surface from the point directly above the source center. Enters R and Ur. Upstream MTK @parameter; default 5000 m (5 km, Table 1 evaluation point).

Observed

NameUnitsDefaultDescription
RmDistance from source center to surface evaluation point (m): R = sqrt(x^2 + d^2). Auxiliary variable computed first in the explicit triangular system; used in both the Mogi pre-factor (R^3) and the McTigue correction (R^2). Upstream MTK @variable with time index; no time derivative present, no initial condition (observed/algebraic).
UrmHorizontal-radial surface displacement (m) due to source overpressure (Eq. 3, Taylor et al. 2021): Ur = a^3 * ΔP * (1−ν) * x / (G * R^3) * C, where C is the McTigue finite-sphere correction. Positive for inflation (ΔP > 0) and outward from the source (x > 0). Larger than the Mogi estimate for ε > 0 (for ν=0.25, correction C > 1). Upstream MTK @variable; observed/algebraic, no time derivative.
UzmVertical surface displacement (m) due to source overpressure (Eq. 4, Taylor et al. 2021): Uz = a^3 * ΔP * (1−ν) * d / (G * R^3) * C, where C is the same McTigue finite-sphere correction as Ur. Positive for inflation (ΔP > 0, uplift). Larger than the Mogi estimate for ε > 0 (for ν=0.25). The Ur/Uz ratio for McTigue is x/d × C_x/C_d — not exactly x/d as in Mogi — because C depends on R and R depends on x. Upstream MTK @variable; observed/algebraic, no time derivative.

Observed expressions

$$ R = \sqrt{x^{2} + d^{2}} $$

Distance from source center to surface evaluation point (m): R = sqrt(x^2 + d^2). Auxiliary variable computed first in the explicit triangular system; used in both the Mogi pre-factor (R^3) and the McTigue correction (R^2). Upstream MTK @variable with time index; no time derivative present, no initial condition (observed/algebraic).

$$ Ur = \frac{a^{3} \cdot ΔP \cdot \left(1 - ν\right) \cdot x}{G \cdot R^{3}} \cdot \left(1 + \frac{a}{d}^{3} \cdot \left(\frac{1 + ν}{2 \cdot \left(-7 + 5 \cdot ν\right)} + \frac{15 \cdot d^{2} \cdot \left(-2 + ν\right)}{4 \cdot R^{2} \cdot \left(-7 + 5 \cdot ν\right)}\right)\right) $$

Horizontal-radial surface displacement (m) due to source overpressure (Eq. 3, Taylor et al. 2021): Ur = a^3 * ΔP * (1−ν) * x / (G * R^3) * C, where C is the McTigue finite-sphere correction. Positive for inflation (ΔP > 0) and outward from the source (x > 0). Larger than the Mogi estimate for ε > 0 (for ν=0.25, correction C > 1). Upstream MTK @variable; observed/algebraic, no time derivative.

$$ Uz = \frac{a^{3} \cdot ΔP \cdot \left(1 - ν\right) \cdot d}{G \cdot R^{3}} \cdot \left(1 + \frac{a}{d}^{3} \cdot \left(\frac{1 + ν}{2 \cdot \left(-7 + 5 \cdot ν\right)} + \frac{15 \cdot d^{2} \cdot \left(-2 + ν\right)}{4 \cdot R^{2} \cdot \left(-7 + 5 \cdot ν\right)}\right)\right) $$

Vertical surface displacement (m) due to source overpressure (Eq. 4, Taylor et al. 2021): Uz = a^3 * ΔP * (1−ν) * d / (G * R^3) * C, where C is the same McTigue finite-sphere correction as Ur. Positive for inflation (ΔP > 0, uplift). Larger than the Mogi estimate for ε > 0 (for ν=0.25). The Ur/Uz ratio for McTigue is x/d × C_x/C_d — not exactly x/d as in Mogi — because C depends on R and R depends on x. Upstream MTK @variable; observed/algebraic, no time derivative.

Analyses

displacement_profile_vs_distance

Horizontal-radial (Ur) and vertical (Uz) surface displacement profiles as a function of horizontal distance x from the source, using Table 1 parameters (G=4 GPa, ν=0.25, ΔP=2 MPa, a=1 km, d=4 km). The McTigue correction shifts the Ur peak slightly inward relative to the Mogi x_crit = d/sqrt(2) ≈ 2.83 km. Both displacements decay to near-zero beyond ~20 km from the source.

Time span: 0.0 → 1.0

Swept over: x

Horizontal-radial displacement Ur (m) vs horizontal distance x (m) from the McTigue model. Peak is slightly inward from the Mogi x_crit = d/sqrt(2) due to the finite-sphere correction.

Vertical displacement Uz (m) vs horizontal distance x (m) from the McTigue model. Maximum directly above the source (x=0), decays monotonically.

correction_growth_with_epsilon

Effect of increasing source radius a (and hence ε = a/d) on the McTigue vertical displacement Uz at the point directly above the source (x=1 m, approximating x=0). As a increases from 500 m to 2500 m (ε from 0.125 to 0.625), the finite-sphere correction amplifies the displacement relative to the Mogi point-source limit. Depth d=4 km, Table 1 elastic parameters.

Time span: 0.0 → 1.0

Swept over: a

Vertical displacement Uz (m) vs source radius a (m), evaluated near x=0 to capture the peak Uz above the source. The super-cubic growth (a^3 × increasing correction C(ε)) is visible.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "notes": "source_ref: Geodynamics.jl@d680af419676cc576d60b16af0d3dd40c0b23eea:src/mogi_mctigue.jl:107\n\nUpstream `McTigueModel` is an MTK `@component` implementing the McTigue (1987) finite-sphere analytical model for volcanic ground deformation. It declares 6 `@parameters` (G, ν, ΔP, a, d, x) and 3 time-indexed `@variables` (R, Ur, Uz), with 3 equations returning `System(eqs, t; name)`. The upstream Julia test confirms `length(unknowns(mtkcompile(sys))) == 0` — after structural simplification, all 3 variables are algebraic observed quantities (zero dynamic states).\n\nSystem kind: all 3 upstream equations are explicit algebraic assignments with no `D(.)` operator. The dependency chain is strictly forward (R computed first, then Ur and Uz both depend on R), so the system is triangular — no implicit Newton solve is required, and `system_kind` is left unset (default, zero differential states), exactly as for MogiModel and the sibling observed-only components AnelasticMassContinuity, AtmosphericDiffusion, etc.\n\nNote on migration tracker blocking gap. The tracker lists this bead as `gt-ebuq (init_eq/system_kind=nonlinear)`. Investigation of the upstream source confirms the equations are EXPLICITLY algebraic — no `initialization_equations`, no `guesses`, and no implicit coupling. The `system_kind=nonlinear` label was applied conservatively to the whole Geodynamics group. The Julia test constructs a `NonlinearProblem` only because MTK compiles all-algebraic `System`s to that type internally — not because the equations require iteration. The migration therefore uses the explicit-algebraic path without `system_kind`, matching MogiModel (components/geodynamics/mogi.esm) exactly.\n\nNote on `one_m` constant. The upstream declares `one_m = 1.0 [unit = u\"m\"]` and writes `R ~ (x^2/one_m^2 + d^2/one_m^2)^0.5 * one_m` to satisfy DynamicQuantities' requirement that sqrt arguments be dimensionless. Since ESM has no dimensional quantity tracking in expression trees, `one_m` is mathematically 1.0 and the equation reduces to `R = sqrt(x^2 + d^2)` with no loss of precision.\n\nMcTigue correction factor. The finite-sphere correction C in Eqs. 3–4 is:\n  C = 1 + ε³ × [(1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))]\nwhere ε = a/d. The correction is identical for Ur and Uz — both displacements are scaled by the same factor C relative to the Mogi result. At ν=0.25 and ε=0.25 (Table 1 params: a=1 km, d=4 km), C ≈ 1.005261 (0.5% correction). At ε=0.4 (a=800 m, d=2 km, Kīlauea), C ≈ 1.01552 (1.6% correction). When ε→0, C→1 and McTigue reduces exactly to Mogi.\n\nParameters (6): G (shear modulus, Pa), ν (Poisson's ratio, dimensionless), ΔP (source overpressure, Pa), a (source radius, m), d (source depth, m), x (horizontal distance from source, m).\n\nState variables (3): R (source-to-surface distance, m), Ur (horizontal-radial surface displacement, m), Uz (vertical surface displacement, m).\n\nEquation faithfulness. The 3 equations from src/mogi_mctigue.jl:155-178 are preserved in order:\n  1. R ~ sqrt(x^2 + d^2)\n  2. Ur ~ (a^3 * ΔP * (1-ν) * x / (G * R^3)) * (1 + (a/d)^3 * ((1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))))  (Eq. 3, Taylor et al.)\n  3. Uz ~ (a^3 * ΔP * (1-ν) * d / (G * R^3)) * (1 + (a/d)^3 * ((1+ν)/(2(−7+5ν)) + 15d²(−2+ν)/(4R²(−7+5ν))))  (Eq. 4, Taylor et al.)\n\nDefault values match Table 1 of Taylor et al. (2021): G=4 GPa, ν=0.25, ΔP=2 MPa, a=1 km, d=4 km, x=5 km.\n\nTolerance rationale. Closed-form algebraic evaluation — no ODE integration, no implicit solve — so there is no integrator error to bound; rel=1e-6 covers float64 round-off in the power/multiply/divide chains."
  },
  "tolerance": {
    "rel": 1e-06
  },
  "variables": {
    "G": {
      "type": "parameter",
      "units": "Pa",
      "default": 4000000000.0,
      "description": "Shear modulus (Pa) of the elastic half-space. Controls the stiffness of the medium — a higher G yields smaller displacements for the same overpressure. Upstream MTK `@parameter`; default 4.0 GPa, the value used in Taylor et al. (2021) Table 1 for Kīlauea volcano rock."
    },
    "ν": {
      "type": "parameter",
      "units": "1",
      "default": 0.25,
      "description": "Poisson's ratio (dimensionless) of the elastic half-space. Typical values for crustal rock are 0.25–0.30. Appears as (1−ν) in the displacement formulas and (1+ν) / (−7+5ν) in the McTigue correction term. Upstream MTK `@parameter`; default 0.25."
    },
    "ΔP": {
      "type": "parameter",
      "units": "Pa",
      "default": 2000000.0,
      "description": "Source overpressure (Pa) — the excess pressure inside the spherical magma chamber above the far-field lithostatic stress. Positive ΔP (inflation) produces positive outward radial displacement (Ur > 0) and positive vertical uplift (Uz > 0); negative ΔP (deflation) reverses both. Both Ur and Uz scale linearly with ΔP. Upstream MTK `@parameter`; default 2.0 MPa (Table 1 of Taylor et al. 2021)."
    },
    "a": {
      "type": "parameter",
      "units": "m",
      "default": 1000.0,
      "description": "Source radius (m) — the radius of the spherical magma chamber. Appears in both the Mogi a³ pre-factor and the McTigue correction through ε = a/d. The McTigue model is valid when ε = a/d < 0.59 (Taylor et al. 2021, ~5% FE error); for larger ε, finite-source non-linearity dominates and this analytical approximation degrades. Upstream MTK `@parameter`; default 1000 m (1 km, Table 1 of Taylor et al. 2021)."
    },
    "d": {
      "type": "parameter",
      "units": "m",
      "default": 4000.0,
      "description": "Source depth (m) — the depth of the center of the spherical magma chamber below the free surface. Enters the source-to-surface distance R, the Mogi denominator, the McTigue correction term numerator (15d²) and denominator (4R²). Upstream MTK `@parameter`; default 4000 m (4 km, Table 1 of Taylor et al. 2021)."
    },
    "x": {
      "type": "parameter",
      "units": "m",
      "default": 5000.0,
      "description": "Horizontal distance from source (m) — the radial distance on the free surface from the point directly above the source center. Enters R and Ur. Upstream MTK `@parameter`; default 5000 m (5 km, Table 1 evaluation point)."
    },
    "R": {
      "type": "unknown",
      "units": "m",
      "description": "Distance from source center to surface evaluation point (m): R = sqrt(x^2 + d^2). Auxiliary variable computed first in the explicit triangular system; used in both the Mogi pre-factor (R^3) and the McTigue correction (R^2). Upstream MTK `@variable` with time index; no time derivative present, no initial condition (observed/algebraic)."
    },
    "Ur": {
      "type": "unknown",
      "units": "m",
      "description": "Horizontal-radial surface displacement (m) due to source overpressure (Eq. 3, Taylor et al. 2021): Ur = a^3 * ΔP * (1−ν) * x / (G * R^3) * C, where C is the McTigue finite-sphere correction. Positive for inflation (ΔP > 0) and outward from the source (x > 0). Larger than the Mogi estimate for ε > 0 (for ν=0.25, correction C > 1). Upstream MTK `@variable`; observed/algebraic, no time derivative."
    },
    "Uz": {
      "type": "unknown",
      "units": "m",
      "description": "Vertical surface displacement (m) due to source overpressure (Eq. 4, Taylor et al. 2021): Uz = a^3 * ΔP * (1−ν) * d / (G * R^3) * C, where C is the same McTigue finite-sphere correction as Ur. Positive for inflation (ΔP > 0, uplift). Larger than the Mogi estimate for ε > 0 (for ν=0.25). The Ur/Uz ratio for McTigue is x/d × C_x/C_d — not exactly x/d as in Mogi — because C depends on R and R depends on x. Upstream MTK `@variable`; observed/algebraic, no time derivative."
    }
  },
  "equations": [
    {
      "lhs": "R",
      "rhs": {
        "op": "sqrt",
        "args": [
          {
            "op": "+",
            "args": [
              {
                "op": "^",
                "args": [
                  "x",
                  2
                ]
              },
              {
                "op": "^",
                "args": [
                  "d",
                  2
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "Ur",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "/",
            "args": [
              {
                "op": "*",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      "a",
                      3
                    ]
                  },
                  "ΔP",
                  {
                    "op": "-",
                    "args": [
                      1,
                      "ν"
                    ]
                  },
                  "x"
                ]
              },
              {
                "op": "*",
                "args": [
                  "G",
                  {
                    "op": "^",
                    "args": [
                      "R",
                      3
                    ]
                  }
                ]
              }
            ]
          },
          {
            "op": "+",
            "args": [
              1,
              {
                "op": "*",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "/",
                        "args": [
                          "a",
                          "d"
                        ]
                      },
                      3
                    ]
                  },
                  {
                    "op": "+",
                    "args": [
                      {
                        "op": "/",
                        "args": [
                          {
                            "op": "+",
                            "args": [
                              1,
                              "ν"
                            ]
                          },
                          {
                            "op": "*",
                            "args": [
                              2,
                              {
                                "op": "+",
                                "args": [
                                  -7,
                                  {
                                    "op": "*",
                                    "args": [
                                      5,
                                      "ν"
                                    ]
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "op": "/",
                        "args": [
                          {
                            "op": "*",
                            "args": [
                              15,
                              {
                                "op": "^",
                                "args": [
                                  "d",
                                  2
                                ]
                              },
                              {
                                "op": "+",
                                "args": [
                                  -2,
                                  "ν"
                                ]
                              }
                            ]
                          },
                          {
                            "op": "*",
                            "args": [
                              4,
                              {
                                "op": "^",
                                "args": [
                                  "R",
                                  2
                                ]
                              },
                              {
                                "op": "+",
                                "args": [
                                  -7,
                                  {
                                    "op": "*",
                                    "args": [
                                      5,
                                      "ν"
                                    ]
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "Uz",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "/",
            "args": [
              {
                "op": "*",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      "a",
                      3
                    ]
                  },
                  "ΔP",
                  {
                    "op": "-",
                    "args": [
                      1,
                      "ν"
                    ]
                  },
                  "d"
                ]
              },
              {
                "op": "*",
                "args": [
                  "G",
                  {
                    "op": "^",
                    "args": [
                      "R",
                      3
                    ]
                  }
                ]
              }
            ]
          },
          {
            "op": "+",
            "args": [
              1,
              {
                "op": "*",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "/",
                        "args": [
                          "a",
                          "d"
                        ]
                      },
                      3
                    ]
                  },
                  {
                    "op": "+",
                    "args": [
                      {
                        "op": "/",
                        "args": [
                          {
                            "op": "+",
                            "args": [
                              1,
                              "ν"
                            ]
                          },
                          {
                            "op": "*",
                            "args": [
                              2,
                              {
                                "op": "+",
                                "args": [
                                  -7,
                                  {
                                    "op": "*",
                                    "args": [
                                      5,
                                      "ν"
                                    ]
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "op": "/",
                        "args": [
                          {
                            "op": "*",
                            "args": [
                              15,
                              {
                                "op": "^",
                                "args": [
                                  "d",
                                  2
                                ]
                              },
                              {
                                "op": "+",
                                "args": [
                                  -2,
                                  "ν"
                                ]
                              }
                            ]
                          },
                          {
                            "op": "*",
                            "args": [
                              4,
                              {
                                "op": "^",
                                "args": [
                                  "R",
                                  2
                                ]
                              },
                              {
                                "op": "+",
                                "args": [
                                  -7,
                                  {
                                    "op": "*",
                                    "args": [
                                      5,
                                      "ν"
                                    ]
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "tests": [
    {
      "id": "table1_correctness",
      "description": "Primary numerical correctness test using Table 1 parameters from Taylor et al. (2021): G=4 GPa, ν=0.25, ΔP=2 MPa, a=1 km, d=4 km, evaluated at x=5 km. Verifies all three state variables (R, Ur, Uz) against precomputed reference values from Eqs. 3–4: R = sqrt(5000²+4000²) = 6403.124..., McTigue correction C ≈ 1.005261, Ur = Mogi_Ur × C ≈ 7.1797e-3 m, Uz = Mogi_Uz × C ≈ 5.7437e-3 m. Reference values from upstream 'McTigue Equation Correctness' test (test/mogi_mctigue_test.jl:116).",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 1000.0,
        "d": 4000.0,
        "x": 5000.0
      },
      "assertions": [
        {
          "variable": "R",
          "time": 0.0,
          "expected": 6403.1242374328485,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": 0.007179665914415501,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 0.0057437327315324,
          "tolerance": {
            "rel": 1e-10
          }
        }
      ]
    },
    {
      "id": "kilauea_deflation_event",
      "description": "Kīlauea June 2007 deflation event (Table 3, Taylor et al. 2021): G=4 GPa, ν=0.25, ΔP=−3.73 MPa (deflation), a=800 m, d=2000 m, x=3000 m. ε=a/d=0.4, McTigue correction C≈1.01552. Negative overpressure (deflation) produces negative radial displacement (inward) and negative vertical displacement (subsidence). McTigue magnitudes are slightly larger than Mogi because C > 1 for ε=0.4. Reference values precomputed from Eqs. 3–4 with Table 3 parameters.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": -3730000.0,
        "a": 800.0,
        "d": 2000.0,
        "x": 3000.0
      },
      "assertions": [
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": -0.023274163748791293,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": -0.015516109165860862,
          "tolerance": {
            "rel": 1e-10
          }
        }
      ]
    },
    {
      "id": "reduces_to_mogi_small_epsilon",
      "description": "When ε = a/d → 0, the McTigue correction → 1 and results should match the Mogi model. Tested with a very small source radius relative to depth: a=10 m, d=10 km → ε=0.001, ε³=1e-9. The correction term is ~8e-10 (negligible at rtol=1e-6). Reference values precomputed from Eqs. 3–4; they are numerically indistinguishable from the Mogi Eqs. 1–2 values at float64 precision. This test reproduces the upstream 'McTigue Reduces to Mogi for Small ε' testitem (test/mogi_mctigue_test.jl:153).",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 10.0,
        "d": 10000.0,
        "x": 5000.0
      },
      "assertions": [
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": 1.34164078757902e-09,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 2.68328157515804e-09,
          "tolerance": {
            "rel": 1e-06
          }
        }
      ]
    },
    {
      "id": "large_epsilon_correction_visible",
      "description": "At ε=a/d=0.5 (a=2000 m, d=4000 m), the McTigue correction C≈1.0421 (4.2% larger than Mogi). Verifies that the finite-sphere correction becomes significant at larger source radii. Reference values precomputed from Eqs. 3–4; correction factor C = 1.0420864262990457 as computed from the formula at ν=0.25, ε=0.5, x=5000 m.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 2000.0,
        "d": 4000.0,
        "x": 5000.0
      },
      "assertions": [
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": 0.05954142344201548,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 0.04763313875361238,
          "tolerance": {
            "rel": 1e-10
          }
        }
      ]
    },
    {
      "id": "sign_convention_positive_dp",
      "description": "Sign convention for positive overpressure (inflation): ΔP > 0 produces positive radial displacement (Ur > 0, outward) at positive x, and positive vertical displacement (Uz > 0, uplift). Same sign convention as Mogi — the McTigue correction is always positive for ν=0.25. Default Table 1 parameters (ΔP=2 MPa, x=5 km). Reference values same as table1_correctness.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 1000.0,
        "d": 4000.0,
        "x": 5000.0
      },
      "assertions": [
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": 0.007179665914415501,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 0.0057437327315324,
          "tolerance": {
            "rel": 1e-10
          }
        }
      ]
    },
    {
      "id": "displacement_linear_in_dp",
      "description": "Displacements scale linearly with overpressure ΔP — the McTigue correction C does not depend on ΔP, so the linearity is inherited from the Mogi pre-factor. Doubling ΔP from 2 MPa to 4 MPa doubles both Ur and Uz exactly. Table 1 geometry (a=1000, d=4000, x=5000).",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 4000000.0,
        "a": 1000.0,
        "d": 4000.0,
        "x": 5000.0
      },
      "assertions": [
        {
          "variable": "Ur",
          "time": 0.0,
          "expected": 0.014359331828831002,
          "tolerance": {
            "rel": 1e-10
          }
        },
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 0.0114874654630648,
          "tolerance": {
            "rel": 1e-10
          }
        }
      ]
    },
    {
      "id": "uz_maximum_near_origin",
      "description": "Uz is maximized directly above the source (x→0). At x≈0, the McTigue correction C→1+ε³×[(1+ν)/(2(−7+5ν))+15d²(−2+ν)/(4d²(−7+5ν))] = 1+ε³×(1+ν)(−2+ν)×... Evaluated at x=0.001 m (near-zero). Reference value Uz≈0.023816 m (≈Mogi value 0.023438 m × correction C≈1.01606 at x≈0). rtol=1e-6 since x=0.001 introduces a negligible deviation from the true x=0 maximum.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 1000.0,
        "d": 4000.0,
        "x": 0.001
      },
      "assertions": [
        {
          "variable": "Uz",
          "time": 0.0,
          "expected": 0.023815652598503174,
          "tolerance": {
            "rel": 1e-06
          }
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "displacement_profile_vs_distance",
      "description": "Horizontal-radial (Ur) and vertical (Uz) surface displacement profiles as a function of horizontal distance x from the source, using Table 1 parameters (G=4 GPa, ν=0.25, ΔP=2 MPa, a=1 km, d=4 km). The McTigue correction shifts the Ur peak slightly inward relative to the Mogi x_crit = d/sqrt(2) ≈ 2.83 km. Both displacements decay to near-zero beyond ~20 km from the source.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameters": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "a": 1000.0,
        "d": 4000.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "x",
            "range": {
              "start": 200.0,
              "stop": 20000.0,
              "count": 100,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "Ur_vs_x",
          "type": "line",
          "description": "Horizontal-radial displacement Ur (m) vs horizontal distance x (m) from the McTigue model. Peak is slightly inward from the Mogi x_crit = d/sqrt(2) due to the finite-sphere correction.",
          "x": {
            "variable": "x",
            "label": "Horizontal distance x (m)"
          },
          "y": {
            "variable": "Ur",
            "label": "Horizontal-radial displacement Ur (m)"
          }
        },
        {
          "id": "Uz_vs_x",
          "type": "line",
          "description": "Vertical displacement Uz (m) vs horizontal distance x (m) from the McTigue model. Maximum directly above the source (x=0), decays monotonically.",
          "x": {
            "variable": "x",
            "label": "Horizontal distance x (m)"
          },
          "y": {
            "variable": "Uz",
            "label": "Vertical displacement Uz (m)"
          }
        }
      ]
    },
    {
      "id": "correction_growth_with_epsilon",
      "description": "Effect of increasing source radius a (and hence ε = a/d) on the McTigue vertical displacement Uz at the point directly above the source (x=1 m, approximating x=0). As a increases from 500 m to 2500 m (ε from 0.125 to 0.625), the finite-sphere correction amplifies the displacement relative to the Mogi point-source limit. Depth d=4 km, Table 1 elastic parameters.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameters": {
        "G": 4000000000.0,
        "ν": 0.25,
        "ΔP": 2000000.0,
        "d": 4000.0,
        "x": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "a",
            "range": {
              "start": 500.0,
              "stop": 2500.0,
              "count": 50,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "Uz_vs_a",
          "type": "line",
          "description": "Vertical displacement Uz (m) vs source radius a (m), evaluated near x=0 to capture the peak Uz above the source. The super-cubic growth (a^3 × increasing correction C(ε)) is visible.",
          "x": {
            "variable": "a",
            "label": "Source radius a (m)"
          },
          "y": {
            "variable": "Uz",
            "label": "Vertical displacement Uz (m)"
          }
        }
      ]
    }
  ]
}