I’ve been playing with the NAIF’s SPICE library for some time (CSPICE in particular). In order to obtain the state vector of an asteroid from its osculating elements, I’m calling the “conics_c” function. I have to provide the extended set of conics elements where the 8th of them is a GM parameter (presumably of the primary body). In backwards in order to obtain the osculating elements for an asteroid from its state vector by calling the “oscltx_c” function, I have to provide the GM parameter of the primary body as well. For the record, I’m working with the “ECLIPJ200” reference frame and “Solar System Barycenter” (SSB) as an observer. So far, so good.

Unfortunately the data that I was getting back didn’t match the data given by Horizons system. At some point I realized my mistake. I was providing the SUN's barycenter GM parameter instead of the SSB’s GM (plus the needed set of GMs for the heaviest asteroids perhaps?). While I was digging around through different kernels in order to find what I needed, I noticed something strange.

When you request an Ephemeris data of Type “ELEMENTS” with Center SSB (500@0) from Horizon’s system, inside the result set there is a parameter called “Keplerian GM” with a value of:

Keplerian GM    : 1.3289051881323761E+11 km^3/s^2 

When I replaced my variables with this particular instance of SSB’s GM, everything fell into place.

Then I start looking how I can obtain that value from the data provided with the kernels from JPL.

It turns out that the most recently updated source of the GM parameters for all the planets, moons, planetary systems, sun and major asteroids could be obtained from a file named gm_Horizons.pck (by the time I'm writing this, its last modified date was pointing to the date of “10/01/2020 09:15”).

Unfortunately no sum of those parameters gives the same value as the one mentioned in the Horizon’s result set. If I sum all the GMS for the Barycenter of the Planetary system + the Sun + the asteroids (which are 17 in counts by the way) I’m getting for the SSB:

BODY1_GM + ... + BODY10_GM + BODY2000001_GM + ... + BODY2000704_GM (found inside gm_Horizons.pck) 
= Keplerian GM #1  : 1.3289051872300468e+11 km^3/s^2

Then I tried with the sum of the barycenter of the Sun + all the planets and their moons + the asteroids. I’m getting for the SSB:

BODY10_GM + BODY199_GM + ... + BODY905_GM + BODY2000001_GM + ... + BODY2000704_GM  
= Keplerian GM #2  : 1.3289051879295906e+11 km^3/s^2

As you can see both values differ from the Keplerian GM given inside the Horizon’s results.

So my question is: how did they calculate that “Keplerian GM” value and what am I doing wrong?

Any help is appreciated. Thanks.

P.S. These are the rest of the kernels I was using for this case:


1 Answer 1


Here's some info about that value of "Keplerian GM", $\mathrm{1.3289051881323761E+11 \, km^3/s^2}$, from https://ssd.jpl.nasa.gov/?horizons_news

November 01, 2018:
The mass-parameter used to compute solar-system barycentric orbital elements (the system GM given in the output header) includes the main-belt mass but does NOT include the Kuiper Belt mass.

There's some more relevant info in the PDF The Planetary and Lunar Ephemerides, DE430 and DE431 by William M. Folkner et al:

Perturbations from 343 asteroids have been included in the dynamical model. The asteroid orbits were iteratively integrated with the positions of the planets, the Sun, and the Moon.

The set of 343 asteroids is identical to the set used in DE421. The set represents 90 percent of the total mass of the main belt and contains the asteroids with the most significant effects on the orbit of Mars in terms of perturbation amplitude and frequency [7].

For DE421, a limited number of individual asteroid mass parameters were estimated, with the rest of the asteroid mass parameters determined by dividing them into three taxonomic classes, estimating a constant density for each class, and using volumes estimated from Infrared Astronomical Satellite (IRAS) observations [8].

For DE430, we estimated the mass parameter for each asteroid individually subject to a priori values and uncertainties for volume and density derived from the Wide-field Infrared Survey Explorer (WISE) and the Supplemental IRAS Minor Planet Survey (SIMPS) [9,10].

There are probably further relevant details in that 81 page document.

So (if I'm reading these things correctly), the Horizons SSB GM quoted above includes a good estimate of the main asteroid belt mass, with the most significant 343 asteroids modelled as individual bodies.

FWIW, the discrepancy between that SSB GM value and your Keplerian GM #2, $\mathrm{1.3289051879295906E+11 \, km^3/s^2}$ is only $\approx\mathrm{20.27855 \, km^3/s^2}$, which corresponds to a mass of $\approx \mathrm{3.0384356E20 \, kg}$, which is about 20% heavier than Vesta, or 50% heavier than Pallas. That's not huge, but it does represent a noticeable percentage of the total main belt mass. Here's an asteroid mass chart from Wikipedia:

Masses of the main belt asteroids

DE440 / 441 does incorporate Kuiper Belt Object (mass). From The JPL Planetary and Lunar Ephemerides DE440 and DE441, Park et al (2021):

Perturbations from 30 individual Kuiper belt objects (KBOs) and a circular ring representing the rest of the Kuiper belt, modeled as 36 point masses with an equal mass located at 44 au, have been added to the model (Pitjeva & Pitjev 2018).

That document contains a handy table of GM values for the Sun, Moon, planets, and a couple of asteroids. FWIW, its GM for the Sun (estimated from DE440) is $\mathrm{132712440041.279419 \, km^3/s^2}$

And in the Horizons news file:

April 12, 2021

Due to the addition of KBO mass in DE440/441, the SSB has shifted about 100 km, so SPK file users should use a planetary ephemeris consistent with their small-body SPK files.

  • $\begingroup$ Thank you @PM 2Ring for you explanation. That's a good starting point especially chapter II.B. It will be even better if I could access the latest "The JPL Planetary and Lunar Ephemerides DE440 and DE441" available without having institutional account. It seams what I need text is to find correct kernels from NAIF's server. $\endgroup$ Commented Mar 7, 2021 at 21:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.