Notes on the C programs used to calculate the Ephemerides
For the calculation of the nautical almanac tables, I basically use the
"DE405" ephemerides data published by the
Jet Propulsion Laboratory
and the C version of the "NOVAS" software package available from the
U.S. Naval Observatory.
The Naval Observatory Vector Astrometry Subroutines,
NOVAS, is an integrated package of source-code modules for computing a wide variety
of common astrometric quantities and transformations.
Up to now (June 2012), I have been using version 2.0 of this package.
The current version is 3.1, but due to the recent introduction of new
reference systems, it is not fully "compatible" with the previous version.
The packages can provide, the precise celestial position (apparent, topo-centric or astrometric)
of selected celestial objects (Sun, Moon, planets, stars, ... ) at specified dates and times.
At a lower level, NOVAS also provides general astrometric utility
transformations, such as those for precession, nutation, aberration,
parallax, and the gravitational deflection of light.
The computations are highly precise.
The United States Nautical Almanac Office uses NOVAS in the
production of its sections of The Astronomical Almanac.
NOVAS-C uses, as input, astrometric reference data that is
expressed in the International Astronomical Union (IAU) J2000.0
In particular, NOVAS-C supports data that conforms to the
International Celestial Reference System (ICRS), adopted by the IAU in 1996.
ICRS-compatible data includes the Hipparcos and Tycho Catalogues,
the ACT Reference Catalogue, the International Celestial Reference Frame (ICRF),
the Jet Propulsion Laboratory's DE405 planetary ephemeris,
and Earth orientation measurements from the International Earth Rotation Service (IERS).
The list of ICRS-compatible data of various types is continually
NOVAS-C can also be used with data conforming to the FK5 system.
Effective use of NOVAS-C requires some background in positional
astronomy and some degree of programming experience.
It is highly recommended to read the accompanying documentation before
attempting to use the software package.
Basic Ephemerides "DE405"
The basic ephemerides I used, are taken from the "DE405" ephemerides files
published by the
Jet Propulsion Laboratory.
The "NOVAS" package (see above) comes with a Fortran subroutine "jplint.f", which
should be able to read the DE405 ephemerides and interface with the C routines of the
"NOVAS" software package.
However, I found it difficult to link Fortran code and C code together into
a working project.
Therefore, I wrote my own C version of the "jplint.f" code as a direct interface
to the binary "DE405" ephemerides files.
The basic "DE405"
Ephemerides in ASCII format from 1600AD until 2200AD
can be downloaded in different files from the JPL server.
These "DE405" ephemerides are available in ASCII format, but have to be converted
and merged together in one binary file to make it usable for the "jplint" routines.
For generating this binary ephemerides file I used the
software package of David Hoffman which is also written in C.
The following lines describe how I generated my binary ephemerides file for the
time span 2000 to 2040 using the "convert" and "append" programs of David Hoffman:
The resulting binary file "JPLephemDE405.bin" can be read with my version of "jplint.c" and contains
the Tchebychev coefficients for the time span 2000 to 2040.
Source Codes, Compiler and Platform Configuration
The complete software package I am using - excluding the "DE405" ephemerides -
is available as packed repository.
The package (CN_code.tgz)
- the NOVAS subroutines (package version 2.0)
- the program codes of David Hoffman for generating and manipulating the binary ephemerides file(s)
- my own source codes for generating the Nautical Almanac and related manuals
and comes as a "gzipped-tar-archive" (approx. 850 Kbyte).
It also contains the C sources for generating the PostScript files of the
Sight Reduction Tables, Sextant Correction Tables and Interpolation Tables.
Under Linux/Unix, unzip and unpack the package file with the following procedure:
% gzip -d CN_code.tgz
% tar -xvf CN_code.tar
Or if you have a "gnu" version of "tar" installed it can do both jobs with:
% tar -xvzf CN_code.tgz