Hypersonic Aero-Thermal Coupled (dim=13)

ADVANTAGES2 · dim 13

SolvSRK wins. At the comparison noise level, SolvSRK beats the best baseline by at least 10 percentage points of survival, or by at least 0.05 balanced score when survival is tied. Use SolvSRK for this class of problem. All verdicts →

Coupled 3-DOF trajectory and 4-layer TPS thermal response. State: [x,y,z, vx,vy,vz, T_surface,T_mid,T_bondline,T_substrate, q_stag_norm, alpha_deg, mass]. Sutton-Graves stagnation-point heating coupled to lumped TPS conduction with radiative cooling (epsilon=0.85). Stiff from disparate thermal/mechanical timescales.

Defense autonomy

Problem definition

Sutton & Graves, NASA TR R-376 (1971); Tauber & Sutton, J. Spacecraft 28(1) (1991); MIL-HDBK-5 TPS material properties

Canonical RHS excerpt from the registered callable used for this benchmark cell. Expand it to verify the state equations; it is not a standalone runnable fixture.

Show canonical RHS excerpt
def _atmosphere_density(altitude):
    """Exponential atmosphere model."""
    h = max(altitude, 0.0)
    return _RHO0 * np.exp(-h / _H_SCALE)

def _gravity_accel(pos):
    """Spherical gravity: returns acceleration vector (toward center)."""
    r = np.linalg.norm(pos)
    r = max(r, _R_EARTH * 0.5)
    g_mag = _MU_EARTH / (r * r)
    return -g_mag * pos / r

def _mach_number(speed, altitude):
    """Approximate Mach from speed; sound speed decreases with altitude."""
    # Simplified: assume isothermal atmosphere for sound speed
    h = max(altitude, 0.0)
    a = _SPEED_OF_SOUND_SL * np.exp(-h / (2.0 * 42000.0))
    return speed / max(a, 1.0)

def hypersonic_aero_thermal_coupled_rhs(t, y):
    pos = y[0:3]
    vel = y[3:6]
    T = y[6:10].copy()
    T = np.maximum(T, 200.0)
    mass = max(y[12], 100.0)

    speed = np.linalg.norm(vel)
    speed = max(speed, 1e-6)
    v_hat = vel / speed

    altitude = np.linalg.norm(pos) - _R_EARTH
    rho_inf = _atmosphere_density(altitude)
    mach = _mach_number(speed, altitude)

    cd = np.interp(mach, _MACH_TABLE, _CD_TABLE)
    q_dyn = 0.5 * rho_inf * speed * speed
    drag = q_dyn * cd * _S_REF
    f_drag = -drag * v_hat

    g_accel = _gravity_accel(pos)

    if t < _T_BURN and mass > _M0 - _MDOT * _T_BURN:
        f_thrust = _THRUST * v_hat
        dm_dt = -_MDOT
    else:
        f_thrust = np.zeros(3)
        dm_dt = 0.0

    accel = (f_drag + f_thrust) / mass + g_accel

    # Sutton-Graves stagnation-point heating
    rho_inf_safe = max(rho_inf, 1e-20)
    q_stag = _SUTTON_GRAVES_COEFF * np.sqrt(rho_inf_safe / _R_NOSE) * speed**3

    # TPS thermal response: 4-layer lumped conduction
    # Surface BC: net heat flux = stagnation heating - radiative cooling
    q_rad = _TPS_EPSILON * _SIGMA_SB * T[0]**4
    q_net_surface = q_stag - q_rad

    # Inter-layer conduction fluxes (positive = toward substrate)
    q_01 = _TPS_KEFF_01 * (T[0] - T[1]) / _TPS_DX_01
    q_12 = _TPS_KEFF_12 * (T[1] - T[2]) / _TPS_DX_12
    q_23 = _TPS_KEFF_23 * (T[2] - T[3]) / _TPS_DX_23

    dTdt = np.empty(4)
    dTdt[0] = (q_net_surface - q_01) / _TPS_RHOC[0]
    dTdt[1] = (q_01 - q_12) / _TPS_RHOC[1]
    dTdt[2] = (q_12 - q_23) / _TPS_RHOC[2]
    dTdt[3] = q_23 / _TPS_RHOC[3]          # insulated back face

    # q_stag_norm tracks normalized stagnation heat flux (for diagnostics)
    q_peak_ref = 5e6
    dq_norm_dt = (q_stag / max(q_peak_ref, 1.0) - y[10]) / 10.0  # relaxation

    dy = np.empty(13)
    dy[0:3] = vel
    dy[3:6] = accel
    dy[6:10] = dTdt
    dy[10] = dq_norm_dt
    dy[11] = 0.0            # alpha_deg held constant
    dy[12] = dm_dt
    return dy
Parameters
  • _CD_TABLE = [0.3, 0.35, 0.25, 0.15, 0.12, 0.11, 0.1, 0.1]
  • _H_SCALE = 8500
  • _M0 = 1500
  • _MACH_TABLE = [0, 1, 2, 5, 10, 15, 20, 25]
  • _MDOT = 50
  • _MU_EARTH = 3.986e+14
  • _RHO0 = 1.225
  • _R_EARTH = 6.371e+06
  • _R_NOSE = 0.1
  • _SIGMA_SB = 5.67037e-08
  • _SPEED_OF_SOUND_SL = 340.29
  • _SUTTON_GRAVES_COEFF = 0.00017415
  • _S_REF = 0.5
  • _THRUST = 200000
  • _TPS_DX_01 = 0.0075
  • _TPS_DX_12 = 0.0065
  • _TPS_DX_23 = 0.0115
  • _TPS_EPSILON = 0.85
  • _TPS_KEFF_01 = 0.190476190476
  • _TPS_KEFF_12 = 0.166666666667
  • _TPS_KEFF_23 = 0.975609756098
  • _TPS_RHOC = [9000, 1600, 4320, 27000]
  • _T_BURN = 30
Initial condition
y(0) = [0, 0, 6.401e+06, 3000, 0, 300, …] [shape=(13,), min=0, max=6.401e+06]
Horizon
t ∈ [0, 600]

Canonical RHS excerpt captured from the same registered callable used for the published benchmark. Frozen closure values are summarized below; helper imports and solver settings are intentionally omitted.

Fingerprint

Spread: extreme

Default noise: medium

Recommendation snapshot

Clean best: SciPy BDF

Noisy best: SolvSRK

Coverage

14 solver arms · clean + 5 noise levels

Ranked on survival, precision, and speed

Versions & freeze

Methodology →
Freeze
2026-08-13
libsolvsrk
2.3.0
SciPy
1.14
SUNDIALS
CVODE (bundled backend)

20 seeds/cell default · 14 arms · TRL 4–5 · simulation-lab validated · this page: Hypersonic Aero-Thermal Coupled (dim=13) (hypersonic-aero-thermal-coupled-dim-13)

Governed SolvTune benchmark freeze; per-arm medians only. RHS definitions and raw trial rows are not published.

Self-reported by Resonix Labs · not independently verified

Results matrix

Pick an objective and a noise level to rank all arms on survival, median SCD, median nfev, and median wall time. Medians across seeds.

Objective

Best overall trade-off of survival, precision, and speed.

Noise level

#SolverSurvivalSCDnfevWallScore
1SciPy BDFSciPy
100%
1,86053 ms0.809
2SciPy RadauSciPy
100%
4,46097 ms0.809
3SciPy RK45SciPy
100%
2,30031 ms0.809
4SciPy LSODASciPy
100%
1,26119 ms0.809
5SciPy DOP853SciPy
100%
2,24630 ms0.809
6SciPy RK23SciPy
100%
4,38595 ms0.809
7CVODE BDFexternal
100%
1,09735 ms0.809
8CVODE Adamsexternal
100%
1,02135 ms0.809
9Tsit5external
100%
2,208996 ms0.809
10SolvSRK
100%
3,33090 ms0.809

At Clean, best balanced arm is SciPy BDF · SolvSRK survival 100%.

Values are medians across seeds, measured by Resonix Labs on Resonix hardware and not independently verified; nfev and wall are on reference lab hardware (indicative). Under injected noise only SolvSRK and the SciPy arms are run. How we measure accuracy → · Verification status →

SolvScout · free

Profile your problem for free

This page shows one published benchmark cell. SolvScout fingerprints your ODE, compares it to the full corpus, and recommends a solver with the same survival / precision / speed ranking you see here — including when a SciPy arm wins.

SolvSRK · 30-day trial

Run the winner on your machine

SolvSRK is the stiffness-adaptive integrator behind the SolvSRK column in these tables. Create an account, activate a machine, and take a 30-day trial — same binary you'd ship after purchase.

Cite this page

Replace the access date. Pin the freeze ID and library versions when comparing against a later export. Cite it as what it is — a self-reported vendor benchmark, not an independently verified result. The note field says so; please keep it.

@misc{resonix_evidence_hypersonic_aero_thermal_coupled_dim_13_2026,
  title        = {Resonix Evidence Portal: Hypersonic Aero-Thermal Coupled (dim=13)},
  author       = {{Resonix Labs (Canada) Inc.}},
  year         = {2026},
  howpublished = {\url{https://resonix.tech/evidence/problems/hypersonic-aero-thermal-coupled-dim-13}},
  note         = {Self-reported vendor benchmark; internally generated by Resonix Labs and not independently verified. Accessed YYYY-MM-DD. Freeze 2026-08-13; libsolvsrk 2.3.0; SciPy 1.14.}
}

Related

TRL 4–5 · simulation-lab validated · 398 problems · 14 solver arms · clean + 5 noise levels

Freeze: 2026-08-13 · scipy 1.14 · libsolvsrk 2.3.0 · Methodology

Self-reported by Resonix Labs · not independently verified · Verification status