zephyrus.diagnostics
diagnostics
diagnostics.py
Regime diagnostics reported beside every dispatch verdict.
Author: Mara Attia
q_net_over_qc(eps, F_xuv, R_xuv, r_sonic, r_base, M_p, m_mean, sigma_c, gamma=1.0, kn_m=1.0)
Transonic energy criterion of Johnson et al. (2013, ApJL 768, L4).
Their Eq. (10) critical power for sustaining a transonic outflow,
Q_c = 4 pi r_* (gamma / (c_c sigma_c Kn_m)) sqrt(2 U(r_*) / m)
U(r_0) with c_c = sqrt(2) and U(r) = G M m / r, against the
intercepted, efficiency-degraded XUV power
Q_net = eps pi R_XUV^2 F_XUV. A ratio well below 1 says the heating
cannot drive the flow transonic regardless of what a rate formula
returns. All SI.
Source code in src/zephyrus/diagnostics.py
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
guo_triple(M_p, R_p, T_eq, mu_kg, M_star, a, e, lambda_exo)
The (lambda_exo, lambda, lambda*) regime triple of Guo (2024).
Guo (2024, Nat. Astron. 8, 920) classifies escape regimes with the Jeans
parameter at the planetary radius and its Roche-corrected companion
lambda* = lambda K(xi); reporting the triple beside the exobase
value lets a reader translate the dispatch verdict into that taxonomy.
The orbital distance is taken at periapsis for consistency with the
tidal factor elsewhere in the package (a distinction that vanishes on
circular orbits).
Source code in src/zephyrus/diagnostics.py
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | |
erkaev_tc(M_p, R_p, r_exo, R_hill)
Tidally corrected critical exobase temperature, in K.
Erkaev et al. (2007, Eq. 23): the exobase temperature above which the
thermosphere blows off, T_c = T_Jup (M_p / M_Jup)(R_Jup / R_p)
K(x_Rl / x) / x with x = r_exo / R_p, x_Rl = R_Hill / R_p,
and their Jupiter normalization 1.45e5 K. Returns 0 when the exobase
reaches the Roche lobe (the barrier is gone).
Source code in src/zephyrus/diagnostics.py
120 121 122 123 124 125 126 127 128 129 130 131 132 133 | |
along_profile_fluid_check(profile, M_p, r_sonic, kn_threshold=1.0)
Fluid condition along the profile up to the sonic surface.
Owen & Jackson (2012, MNRAS 425, 2931) require the fluid condition to hold everywhere below the sonic surface, not only at it. The check walks the supplied profile levels below the sonic radius and records the worst local Knudsen number (Maxwell mean free path over the local scale height); the truncation at the profile top is declared, because the sonic point normally lies above the modeled atmosphere.
Source code in src/zephyrus/diagnostics.py
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | |
self_consistency_screen(reservoirs, mdot, age)
Static-snapshot screen: depletion timescale against the snapshot age.
A dispatched rate that would empty the supplied reservoirs in less than
the system age flags the snapshot as inconsistent with its own history
(the atmosphere could not have survived to be observed in this state).
Reports evaluated: False when age or reservoirs are absent.
Source code in src/zephyrus/diagnostics.py
171 172 173 174 175 176 177 178 179 180 181 182 | |
potential_screens(M_p, R_p)
Threshold-potential screens, log10(-phi) in cgs (erg/g).
Reports where the configuration sits against the Caldiroli et al. (2022) efficiency-collapse band and the Salz et al. (2016) screen separating wind-forming from hydrostatically stable thermospheres (see the module constants for what each threshold means and for the hydrogen-dominated scope of the second).
Source code in src/zephyrus/diagnostics.py
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | |
rate_floor_screen(mdot)
Numerical-content screen: the rate against one proton per Julian year.
A regime label attached to a rate below the floor is decided by the
ordering of two numerically empty numbers. Reporting only: the module
never applies the floor, because what counts as negligible belongs to
the caller, and clearing it does not make a rate matter (for that, use
:func:self_consistency_screen).
Source code in src/zephyrus/diagnostics.py
185 186 187 188 189 190 191 192 193 194 | |