Skip to content

ytliu0/ElpMpp02

Repository files navigation

ELP/MPP02 Lunar Ephemeris: C++ Implementation

ELP/MPP02 is a semi-analytic solution for the lunar motion developed by J. Chapront and G. Francou in 2002. It is an improvement of the ELP2000-82B lunar theory.

Source paper: The lunar theory ELP revisited. Introduction of new planetary perturbations by J. Chapront and G. Francou, Astronomy and Astrophysics, v.404, p.735-742 (2003) See also references to ELP2000-82B theory in the paper.

The authors provide data files, a FORTRAN code and a pdf documentation on this ftp site. ELP/MPP02 theory provides two sets of parameters adjusted to fit either the lunar laser ranging (LLR) observation data or JPL's DE405/DE406 ephemerides.

I have written C++ functions to compute the lunar positions based on the information on that ftp site. The full ELP/MPP02 theory contains series involving 35901 terms. High accuracy of lunar positions may not be necessary for some applications. It is therefore useful to create a truncated series to speed up computation. I have written routines that create a truncated series using 4 parameters. I also wrote a function to estimate the accuracy of the truncated series.

JavaScript is convenient for HTML-based applications, such as my local star charts and equatorial star charts pages. I wrote C++ routines that generate JavaScript functions to compute a truncated ELP/MPP02 series.

The following is a summary of the files in this package. See this pdf file for documentation.

  • index.html: HTML page of this README document.
  • 14 data files: elp_main.long, elp_main.lat, elp_main.dist, elp_pert.longT0, elp_pert.longT1, elp_pert.longT2, elp_pert.longT3, elp_pert.latT0, elp_pert.latT1, elp_pert.latT2, elp_pert.distT0, elp_pert.distT1, elp_pert.distT2, elp_pert.distT3. These data files are generated from the data files on the ftp site mentioned above. They are stored in a format more convenient for C++ implementation.
  • ElpMpp02.h: Contains functions that compute the lunar positions using both sets of parameters fitted to LLR and DE405/DE406. This is basically a C++ version of the FORTRAN code. The file example.cpp provides an example of using this code.
  • ElpMpp_trim.h: Contains functions that generate a truncated version of the ELP/MPP02 series. A C++ file and 14 data files will be created by the code to implement the truncated series. It also contains a function that estimates the accuracy of the truncated series by performing a Monte Carlo simulation. The file example_usingElpMpp_trim.cpp provides an example of using this code.
  • ElpMpp_JavaScript.h: Contains routines that generate JavaScript functions to compute a truncated ELP/MPP02 series. Two javascript files will be created by this code. They contain exactly the same functions, but one is human-readable and the other is a minified version (for production run). No data files will be generated. Terms in the ELP/MPP02 series are written explicitly in the JavaScript code.
  • ElpMpp02.html: A web-based JavaScript calculator that computes the lunar positions by ELP/MPP02 using both sets of parameters fitted to LLR and DE405/DE406. This is essentially a JavaScript version of the FORTRAN code. It is intended for code test.
  • ElpMpp02_aux.js, ElpMpp02LLR_min.js, ElpMpp02DE_min.js: Contain JavaScript functions used by ElpMpp02.html. ElpMpp02LLR_min.js and ElpMpp02DE_min.js are generated by ElpMpp_JavaScript.h to compute the (untruncated) ELP/MPP02 series using parameters fitted to LLR and DE405/DE406. ElpMpp02_aux.js contains auxiliary functions to manage the activities on ElpMpp02.html.
  • ElpMpp02.css: Style file used by this html file and ElpMpp02.html.