Celestia/JPL Ephemerides

Using JPL Ephemerides with Celestia
Note: This information does not pertain to versions of Celestia prior to 1.5.0

It is possible to use JPL's DE405/406 ephemerides with Celestia to compute the positions of the planets more accurately than the default VSOP87 theory does. The tradeoff is that since JPL's ephemeris files are essentially large lookup tables, a lot of memory is required to cover the same time span as VSOP87.

First, you need to download the ephemeris files. They are available here:

ftp://ssd.jpl.nasa.gov/pub/eph/planets/unix/de406/

The ones named unxpNNNN.406 are probably of most interest. They contain 300 year blocks of the DE406 ephemeris beginning at year +NNNN. The files name unxmNNNN.406 cover the years prior 1 BCE. Each block is about nine megabytes, so the total size of the entire DE406 is about 180 MB. You don't need to use more than a single block, but if you want more than a 300-year ephemeris, there is a set of tools available on the JPL FTP site. The C tools may be found here:

ftp://ssd.jpl.nasa.gov/pub/eph/planets/C-versions/hoffman/

DE405 is a larger and slightly more precise ephemeris than DE406, but DE406 should be more than accurate enough for most usages. The differences are explained in this document:

ftp://ssd.jpl.nasa.gov/pub/eph/planets/README.txt

To use JPL ephemeris, you need to place in Celestia's data directory and name it 'jpleph.dat'. Then, you should modify the CustomOrbits of the planets defined in solarsys.ssc to use the JPL ephemeris instead of the default VSOP87 orbits. Here are the available CustomOrbit names:

jpl-mercury-sun jpl-venus-sun jpl-earth-sun jpl-mars-sun jpl-jupiter-sun jpl-saturn-sun jpl-uranus-sun jpl-neptune-sun jpl-pluto-sun
 * Heliocentric orbits for the planets

jpl-mercury-ssb jpl-venus-ssb jpl-earth-ssb jpl-mars-ssb jpl-jupiter-ssb jpl-saturn-ssb jpl-uranus-ssb jpl-neptune-ssb jpl-pluto-ssb
 * Planet orbits relative to the solar system barycenter

jpl-emb-sun jpl-emb-ssb
 * Position of the Earth-Moon barycenter relative to Sun and SSB

jpl-earth-emb
 * Position of the Earth relative to the Earth-Moon barycenter

jpl-moon-earth jpl-moon-emb
 * Geocentric and barycentric position of the Moon

jpl-sun-ssb
 * Position of the Sun relative to the SSB

The positions computed for jpl-mars, jpl-jupiter, jpl-saturn, jpl-uranus, jpl-neptune, and jpl-pluto are the barycenters of the systems. Venus and Mercury have no moons, so the barycenters are exactly the center of the planets. Although Mars does have moons, they're so tiny relative to Mars that Horizons appears to treat the Mars system barycenter and the center of Mars as identical. There's a slight inconsistency with jpl-earth: it gives the position of Earth. If you want the Earth-Moon barycenter, then use jpl-emb.

In case you are curious as to how much the positions of the giant planets deviates from their system barycenters, a rough calculation for Uranus and Titania gives ~20km. The mass ratio of the Galilean satellites and Jupiter is similar, though they are further away from Jupiter and will thus displace the barycenter more.

Reference frame
Although the native reference frame of the JPL ephemerides is the Earth mean equator and equinox of J2000.0. Celestia internally transforms these (via a fixed rotation) to the J2000 ecliptic frame. This allows the default VSOP87 orbits to be replaced with JPL orbits by simply changing the CustomOrbit. The sole exception is the Moon. The default reference plane for moons is the plane of the equator of date for the planet that the moon orbits. Thus, when changing the orbit of the Moon to use the JPL ephemeris, the orbit frame must be overridden:

OrbitFrame { EclipticJ2000 { Center "Sol/Earth" } }

Example
There are two ways to switch to using from using VSOP87 series to JPL ephemerides for the planets. You can either directly modify data/solarsys.ssc, or you can create a simple add-on that takes advantage of the Modify disposition for SSC objects. Following is an example that replaces the orbits of the all the solar system's planets and the Moon. Copy and paste this example into a new .ssc file in your extras directory, and the next time you start Celestia, the positions of the planets will be computed from the JPL ephemeris in data/jpleph.dat.

Modify "Mercury" "Sol" {   CustomOrbit "jpl-mercury-sun" }

Modify "Venus" "Sol" {   CustomOrbit "jpl-venus-sun" }

Modify "Earth" "Sol" {   CustomOrbit "jpl-earth-sun" }

Modify "Moon" "Sol/Earth" {   OrbitFrame {       EclipticJ2000 { Center "Sol/Earth" } }   CustomOrbit "jpl-moon-earth" }

Modify "Mars" "Sol" {   CustomOrbit "jpl-mars-sun" }

Modify "Jupiter" "Sol" {   CustomOrbit "jpl-jupiter-sun" }

Modify "Saturn" "Sol" {   CustomOrbit "jpl-saturn-sun" }

Modify "Uranus" "Sol" {   CustomOrbit "jpl-uranus-sun" }

Modify "Neptune" "Sol" {   CustomOrbit "jpl-neptune-sun" }

Modify "Pluto" "Sol" {   CustomOrbit "jpl-pluto-sun" }