Compute accurate Moon positions using the semi-analytical lunar solution ELP2000/MPP02 by Chapront & Francou (2003) in Python.
This package can be installed using pip install elp-mpp02
. You will need to manually download the six data
files ELP_MAIN/PERT.S1/2/3
from
ftp://cyrano-se.obspm.fr/pub/2_lunar_solutions/2_elpmpp02
and save them in a directory of your choice.
You can import the package as follows:
from elp_mpp02 import mpp02 as mpp
Then, make sure you define the directory where the data files are located (if not in the current dir).
For the subdir data/
of the current directory, do:
mpp.dataDir = 'data' # Set the dir where the ELP_*.S* data files can be found
Choose whether to run the code in LLR (mode=0
; default) or DE405 (mode=1
; 'historical') mode, select a
Julian day and compute the Moon position for that instance:
mode = 1 # Historical mode
jd = 2451545
lon,lat,dist = mpp.compute_lbr(jd, mode)
print('jd =',jd, ': lon =',lon,'rad, lat =',lat, 'rad, dist =',dist,'km.')
The result should be
jd = 2451545 : lon = -2.385534575256455 rad, lat = 0.09024868423130429 rad, dist = 402448.6385830673 km
The ecliptical longitude and latitude are expressed in radians, the distance is in kilometres. The
coordinates are valid for the mean equinox of J2000. Note that on the first call, the constants must be
initialised and the data files need to be read, which can take ~10s. If mode
is changed between calls, the
data must be reinitialised.
- Copyright: 2019-2025 Marc van der Sluys, Department of Physics, Utrecht University and Nikhef (institute for high-energy physics and gravitational waves), Amsterdam (NL)
- Contact: https://marc.vandersluys.nl
- Website: Github, PyPI
- Licence: EUPL 1.2
- Thanks to A. Vähäkangas for bug reports!
- Chapront & Francou (2003)
- FTP data files — in case FTP urls don't work in Markdown: ftp://cyrano-se.obspm.fr/pub/2_lunar_solutions/2_elpmpp02
- This Python code is adapted from the Fortran implementation in libTheSky