Non-Gravitational Support¶
This note captures the current source-format audit and the design used for
non-gravitational parameter support in adam_core.
Source Matrix¶
SBDB¶
Non-gravitational parameters are provided in
orbit.model_pars.Observed parameter names in local fixtures include
A1,A2,A3,DT,ALN,NK,NM,R0,AMRAT, andRHO.orbit.covariance.labelsmay extend beyond the six orbital elements to include solved non-grav parameters.Representative local fixtures:
99942_phys.json,67P_phys.json,81P_phys.json,101955_phys.json,2022OB5_phys.json.
NEOCC¶
Non-gravitational metadata is provided by
LSPandNGRrecords in OEF files.Local fixtures include both 6D orbital solutions and 7D solutions with a Yarkovsky parameter in the non-grav vector.
Representative local fixtures:
99942.ke0,99942.ke1,101955.ke0,101955.ke1.The local OEF examples document the Yarkovsky parameter in units of
1E-10 au/day^2.
MPCQ¶
mpcqversions with non-grav support expose orbit-sidea1,a2, anda3columns onMPCOrbits, andMPCOrbits.orbits()maps those values intoadam_core.Orbits.non_gravitational_parametersusing the canonicalA1/A2/A3fields.This handoff requires a companion
mpcqrelease; older versions do not carry the columns.
Canonical Schema¶
adam_core.orbits.NonGravitationalParameters stores the Marsden-style
accelerations plus the fixed g(r) model constants:
source: provenance of the solution (for example"SBDB","NEOCC","MPCQ").A1,A2,A3in au / d^2 – the fitted accelerations. Their uncertainties live in the extended coordinate covariance.ALN,NK,NM,NN,R0(R0 in au) – the Marsden g(r) constants. These are fixed per solution (sources report them without uncertainties and they never appear in solution covariances), so they are stored as plain values and are NOT covariance dimensions; they select the force law the propagator must apply. Null constants mean the standard asteroid convention g(r) = (1 au / r)^2. SBDB lists constants only when they differ from the classic Marsden (1973) comet standard, so the importer fills unlisted constants with the standard values on any solution with fitted accelerations.
Fitted source parameters outside this set (DT, AMRAT, RHO) are
not stored: importers drop their values and marginalize their covariance
dimensions out, logging a warning. Note this makes DT-fit comet solutions an
approximation (the asymmetric-outgassing time offset is not representable and
ASSIST implements no equivalent force).
Extended Coordinate Covariance¶
Uncertainties for the non-gravitational parameters live in the coordinate
covariance itself, which is the single source of truth for solution
uncertainty. CoordinateCovariances rows hold either the familiar 6x6
coordinate covariance or a 9x9 matrix over the fixed basis
(coordinates, A1, A2, A3) — the orbital state plus the non-gravitational
parameters, including their cross-covariances. Parameters that were not
estimated carry zero rows/columns (held fixed); rows without a
non-gravitational solution store only the 6x6 block.
CoordinateCovariances.to_matrix()returns the (leading) 6x6 coordinate block, so existing consumers are unaffected.to_full_matrix()returns the(N, 9, 9)matrices with NaN trailing dimensions where no non-gravitational block is present, andnongrav_block_mask()reports which rows carry the block.transform_coordinates(and the coordinate classes’to_cartesian/from_cartesian) transform the full matrix alongside representation and frame changes: the coordinate block is transformed with the coordinate Jacobian while the non-gravitational dimensions (and their cross-covariances) are carried through an identity block. No separate covariance transform entry point is needed.VariantOrbits.createjointly samples the full 9-dimensional state for orbits whose covariance carries the non-gravitational block (sampling is done in a whitened basis so the ~1e-26-scale non-grav variances are not lost to numerical truncation), andcollapse/collapse_by_object_idrebuild the full matrix from the variants.The SBDB and NEOCC importers build the 9x9 covariance in their native element basis (cometary and Keplerian respectively), converted to canonical units, and the ordinary coordinate transform carries it to Cartesian.
Current limits:
NEOCC non-grav solutions are decoded only for the Yarkovsky model (
AMRAT/A2); theAMRATdimension is marginalized out with a warning and other models are degraded to value-free rows with a warning.Near-parabolic orbits (e close to 1, e.g. C/2022 E3) currently convert to wildly wrong Cartesian states through the pre-existing cometary-to-Cartesian defect tracked in issue #210. Until that is fixed, element-based SBDB/NEOCC imports of such objects cannot be propagated meaningfully: the non-gravitational force model itself is validated against JPL Horizons from Cartesian starting states (see the adam-assist regression suite), so parity claims for hyperbolic comets are bounded to that force-integration path, not the element-conversion path.
Two-Body Note¶
propagate_2body does not model non-gravitational accelerations.
It rejects orbits that carry non-zero non-gravitational parameter values
instead of silently propagating them with a gravity-only model. For orbits
whose parameters are zero-valued but carry a non-gravitational covariance
block, the covariance is propagated with the 2-body state-transition
Jacobian and the non-gravitational block is carried through as dynamically
inert — consistent with the 2-body force model.
ASSIST Boundary¶
adam_assist versions with non-grav support handle propagation when the
usable estimated non-gravitational parameters are limited to Marsden-style
A1, A2, and A3. This requires a companion adam_assist
release; adam_core itself only carries the parameters through its
Propagator interface (propagators that do not declare
supports_non_gravitational_forces log a warning when handed orbits with
non-zero parameter values or a non-gravitational covariance block).
Real regression coverage includes SBDB
99942end-to-end propagation, a NEOCC99942parsing-to-ASSIST handoff check, and (in adam-assist) frozen JPL Horizons trajectory regressions for all three supported g(r) laws – inverse-square (99942), standard comet Marsden (C/2022 E3), and a custom tuple (1I/’Oumuamua) – accurate to tens–hundreds of metres over +/- 300 days against km-to-million-km gravity-only controls.