Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New ellipsoids #180

Merged
merged 30 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
168d1a7
Rename MERCURY to Mercury2015 and update incorrect last digit of GM
MarkWieczorek Apr 1, 2024
1d0b0fe
Add new ellipsoid Mercury2024
MarkWieczorek Apr 1, 2024
44bae66
Rename VENUS to Venus2015
MarkWieczorek Apr 1, 2024
fa8614b
Add Earth EGM96 ellipsoid
MarkWieczorek Apr 1, 2024
d452d17
Rename MOON to Moon2015
MarkWieczorek Apr 1, 2024
bcb1d0f
Rename MARS to Mars2009
MarkWieczorek Apr 1, 2024
22f5767
Rename VESTA and do constant conversions expliticly as original paper…
MarkWieczorek Apr 1, 2024
72faffd
Add Vesta2017_biaxial/triaxial ellipsoids
MarkWieczorek Apr 1, 2024
6a36e46
Add Ceres2018 ellipsoid
MarkWieczorek Apr 1, 2024
8ffa761
Remove Vesta2012_triaxial as it is undocumented in original reference.
Apr 2, 2024
19bbf20
Add Io2024 triaxial ellipsoid
Apr 2, 2024
04b9822
Add Europa2024 hydrostatic triaxial ellipsoid
Apr 2, 2024
dec6073
Add Ganymede2024 triaxial ellipsoid
Apr 2, 2024
818e366
Add Callisto2024 spheroid
Apr 2, 2024
8ad0f0a
Add Enceladus2024 triaxial ellipsoid
Apr 2, 2024
34c1664
Add Titan2024 triaxial ellipsoid
Apr 2, 2024
5629d06
Add Pluto2024 spheroid
Apr 2, 2024
5b27fec
Add Charon2024 spheroid
Apr 2, 2024
c0f0044
Update ellipsoid names in tests
Apr 2, 2024
65e9793
Fix Titan that used incorrect ellispoid class
Apr 2, 2024
c08feee
Add web documentation for new ellipsoids
MarkWieczorek Apr 3, 2024
a520235
more changes to web docs
MarkWieczorek Apr 3, 2024
a7c6470
Turn longitude_semimajor_axis into an optional attribute used to inst…
Apr 8, 2024
4b0d4fe
Add comments attribute to all ellipsoid classes
Apr 9, 2024
75be258
Fix typo in Mercury ellipsoid name
MarkWieczorek Apr 11, 2024
74d4a7f
Merge branch 'comments' into new_ellipsoids
Apr 12, 2024
57edbeb
Merge branch 'triaxial_centrifugal_potential' into new_ellipsoids
Apr 12, 2024
95deebc
Merge comments and semimajor_axis_longitude PRs and update ellipsoids
Apr 12, 2024
c9a3ce0
Fix missing references and broken citations
leouieda Apr 17, 2024
11f6732
Rename VestaTriaxial2017 and fix some references
leouieda Apr 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion boule/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,27 @@
#
# Import functions/classes to make the public API
from ._ellipsoid import Ellipsoid
from ._realizations import GRS80, MARS, MERCURY, MOON, VENUS, VESTA, WGS84
from ._realizations import (
EGM96,
GRS80,
WGS84,
Callisto2024,
Ceres2018,
Charon2024,
Enceladus2024,
Europa2024,
Ganymede2024,
Io2024,
Mars2009,
Mercury2015,
Mercury2024,
Moon2015,
Pluto2024,
Titan2024,
Venus2015,
Vesta2017,
Vesta2017_triaxial,
)
from ._sphere import Sphere
from ._triaxialellipsoid import TriaxialEllipsoid
from ._version import __version__
310 changes: 267 additions & 43 deletions boule/_realizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,57 @@
"""
Ellipsoid and Sphere realizations for the Earth and other planetary bodies.
"""
import numpy as np

from ._ellipsoid import Ellipsoid
from ._sphere import Sphere
from ._triaxialellipsoid import TriaxialEllipsoid

Mercury2015 = Sphere(
name="Mercury2015",
long_name="Mercury spheroid (2015)",
radius=2_439_372,
geocentric_grav_const=22.031839224e12,
angular_velocity=1.2400172589e-6,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
),
)

Mercury2024 = Sphere(
name="Mercury2024",
long_name="Mercury spheroid (2023)",
MarkWieczorek marked this conversation as resolved.
Show resolved Hide resolved
radius=2439472.7,
MarkWieczorek marked this conversation as resolved.
Show resolved Hide resolved
geocentric_grav_const=22031815411154.895,
angular_velocity=1.2400141739494342e-06,
reference=(
"R: Maia, J. (2024). Spherical harmonic models of the shape of "
"Mercury [Data set]. Zenodo. https://doi.org/10.5281/zenodo.10809345; "
"GM, OMEGA: Mazarico, E., et al. (2014), The gravity field, "
"orientation, and ephemeris of Mercury from MESSENGER observations "
"after three years in orbit, J. Geophys. Res. Planets, 119, "
"2417-2436, doi:10.1002/2014JE004675."
),
)

Venus2015 = Sphere(
name="Venus2015",
long_name="Venus spheroid (2015)",
radius=6_051_878,
geocentric_grav_const=324.858592e12,
angular_velocity=-299.24e-9,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
),
)

WGS84 = Ellipsoid(
name="WGS84",
long_name="World Geodetic System 1984",
long_name="World Geodetic System (1984)",
semimajor_axis=6378137,
flattening=1 / 298.257223563,
geocentric_grav_const=3986004.418e8,
Expand All @@ -27,7 +71,7 @@

GRS80 = Ellipsoid(
name="GRS80",
long_name="Geodetic Reference System 1980",
long_name="Geodetic Reference System (1980)",
semimajor_axis=6378137,
flattening=1 / 298.257222101,
geocentric_grav_const=3986005.0e8,
Expand All @@ -38,10 +82,36 @@
),
)

EGM96 = Ellipsoid(
name="EGM96",
long_name="Earth Gravitational Model (1996)",
semimajor_axis=6378136.3,
flattening=1 / 0.298256415099e3,
geocentric_grav_const=3986004.415e8,
angular_velocity=7292115e-11,
reference=(
"Lemoine, F. G., et al. (1998). The Development of the Joint NASA "
"GSFC and the National Imagery and Mapping Agency (NIMA) Geopotential "
"Model EGM96. NASA Goddard Space Flight Center, NASA/TP 1998-206861."
),
)

MARS = Ellipsoid(
name="MARS",
long_name="Mars Ellipsoid",
Moon2015 = Sphere(
name="Moon2015",
long_name="Moon spheroid (2015)",
radius=1_737_151,
geocentric_grav_const=4.90280007e12,
angular_velocity=2.6617073e-6,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
),
)

Mars2009 = Ellipsoid(
name="Mars2009",
long_name="Mars ellipsoid (2009)",
semimajor_axis=3_395_428,
flattening=(3_395_428 - 3_377_678) / 3_395_428,
geocentric_grav_const=42828.372e9,
Expand All @@ -54,56 +124,210 @@
),
)

VENUS = Sphere(
name="VENUS",
long_name="Venus Spheroid",
radius=6_051_878,
geocentric_grav_const=324.858592e12,
angular_velocity=-299.24e-9,
Vesta2017 = Ellipsoid(
name="Vesta2017",
long_name="Vesta reference ellipsoid (2017)",
semimajor_axis=278_556,
flattening=(278_556 - 229_921) / 278_556,
geocentric_grav_const=17.288e9,
angular_velocity=3.267e-4,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
"Karimi, R., Azmoudeh Ardalan, A., & Vasheghani Farahani, S. (2017). "
"The size, shape and orientation of the asteroid Vesta based on data "
"from the Dawn mission. Earth and Planetary Science Letters, 475, "
"71–82. https://doi.org/10.1016/j.epsl.2017.07.033"
),
)

MOON = Sphere(
name="MOON",
long_name="Moon Spheroid",
radius=1_737_151,
geocentric_grav_const=4.90280007e12,
angular_velocity=2.6617073e-6,
Vesta2017_triaxial = TriaxialEllipsoid(
# Note that this triaxial reference ellipsoid is rotated in longitude
# by 8.29 E with respect to the Vesta coordinate system.
name="Vesta2017_triaxial",
long_name="Vesta triaxial reference ellipsoid (2017)",
semimajor_axis=280_413,
semimedium_axis=274_572,
semiminor_axis=231_253,
geocentric_grav_const=17.288e9,
angular_velocity=3.267e-4,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
"Karimi, R., Azmoudeh Ardalan, A., & Vasheghani Farahani, S. (2017). "
"The size, shape and orientation of the asteroid Vesta based on data "
"from the Dawn mission. Earth and Planetary Science Letters, 475, "
"71–82. https://doi.org/10.1016/j.epsl.2017.07.033"
),
)

MERCURY = Sphere(
name="MERCURY",
long_name="Mercury Spheroid",
radius=2_439_372,
geocentric_grav_const=22.031839221e12,
angular_velocity=1.2400172589e-6,
Ceres2018 = Ellipsoid(
name="Ceres2018",
long_name="Ceres ellipsoid (2018)",
semimajor_axis=482_100,
flattening=(482_100 - 445.94) / 482_100,
geocentric_grav_const=62629053612.1,
angular_velocity=1.9234038694078873e-4,
reference=(
"Wieczorek, MA (2015). 10.05 - Gravity and Topography of the Terrestrial "
"Planets, Treatise of Geophysics (Second Edition); Elsevier. "
"doi:10.1016/B978-0-444-53802-4.00169-X"
"A, F: Park, R. S., et al. (2019). High-resolution shape model of "
"Ceres from stereophotoclinometry using Dawn Imaging Data. Icarus, "
"319, 812–827. https://doi.org/10.1016/j.icarus.2018.10.024; "
"GM, OMEGA: Konopliv, A. S., et al. (2018). The Ceres gravity field, "
"spin pole, rotation period and orbit from the Dawn radiometric "
"tracking and optical data. Icarus, 299, 411–429. "
"https://doi.org/10.1016/j.icarus.2017.08.005"
),
)

Io2024 = TriaxialEllipsoid(
# Best-fit equilibrium shape of Thomas et al. 1998. Their best fit
# ellipsoid shape differs by less than 300 m for each axis.
name="Io2024",
long_name="Io equilibrium triaxial ellipsoid (2024)",
semimajor_axis=1_829_700,
semimedium_axis=1_819_200,
semiminor_axis=1_815_800,
geocentric_grav_const=5959.91e9,
angular_velocity=2 * np.pi / (1.762732 * 24 * 60 * 60),
reference=(
"A, B, C: Thomas, P. C., et al. (1998). The Shape of Io from Galileo "
"Limb Measurements. Icarus, 135(1), 175–180. "
"https://doi.org/10.1006/icar.1998.5987; "
"GM: Anderson, J. D., et al. (2001). Io's gravity field and interior "
"structure. J. Geophys. Res., 106, 32963–32969. "
"https://doi.org/10.1029/2000JE001367; "
"OMEGA: R. A. Jacobson (2021), The Orbits of the Regular Jovian "
"Satellites and the Orientation of the Pole of Jupiter, personal "
"communication to Horizons/NAIF. Accessed via JPL Solar System "
"Dynamics, https://ssd.jpl.nasa.gov, JUP365."
),
)

Europa2024 = TriaxialEllipsoid(
# Nominal hydrostatic ellipsoid
name="Europa2024",
long_name="Europa equilibrium triaxial ellipsoid (2024)",
semimajor_axis=1_562_600,
semimedium_axis=1_560_100,
semiminor_axis=1_559_300,
geocentric_grav_const=3202.72e9,
angular_velocity=2 * np.pi / (3.525463 * 24 * 60 * 60),
reference=(
"A, B, C: Nimmo, F., et al. (2007). The global shape of Europa: "
"Constraints on lateral shell thickness variations. Icarus, 191(1), "
"183–192. https://doi.org/10.1016/j.icarus.2007.04.021"
"https://doi.org/10.1006/icar.1998.5987; "
"GM: Anderson, J. D., et al. (1998). Europa's differentiated internal "
"structure: Inferences from four Galileo encounters. Science, 281, "
"2019–2022. https://doi.org/10.1126/science.281.5385.2019; "
"OMEGA: R. A. Jacobson (2021), The Orbits of the Regular Jovian "
"Satellites and the Orientation of the Pole of Jupiter, personal "
"communication to Horizons/NAIF. Accessed via JPL Solar System "
"Dynamics, https://ssd.jpl.nasa.gov, JUP365."
),
)

Ganymede2024 = TriaxialEllipsoid(
# Equilibrium ellipsoid III
name="Ganymede2024",
long_name="Ganymede equilibrium triaxial ellipsoid (2024)",
semimajor_axis=2_634_770,
semimedium_axis=2_632_380,
semiminor_axis=2_631_590,
geocentric_grav_const=9.8878041807018262e12,
angular_velocity=2 * np.pi / (7.155588 * 24 * 60 * 60),
reference=(
"A, B, C: Zubarev, A., et al. (2015). New Ganymede control point "
"network and global shape model. Planetary and Space Science, 117, "
"246–249. https://doi.org/10.1016/j.pss.2015.06.022; "
"GM: Gomez Casajus, L., et al. (2022). Gravity Field of Ganymede After "
"the Juno Extended Mission. Geophysical Research Letters, 49(24), "
"e2022GL099475, doi:10.1029/2022GL099475.; "
"OMEGA: R. A. Jacobson (2021), The Orbits of the Regular Jovian "
"Satellites and the Orientation of the Pole of Jupiter, personal "
"communication to Horizons/NAIF. Accessed via JPL Solar System "
"Dynamics, https://ssd.jpl.nasa.gov, JUP365."
),
)

Callisto2024 = Sphere(
name="Callisto2024",
long_name="Callisto spheroid (2024)",
radius=2_410_300,
geocentric_grav_const=7179.292e9,
angular_velocity=2 * np.pi / (16.690440 * 24 * 60 * 60),
reference=(
"R, GM: Anderson, J. D., et al. (2001). Shape, mean radius, gravity "
"field, and interior structure of Callisto. Icarus, 153(1), 157–161. "
"https://doi.org/10.1006/icar.2001.6664; "
"OMEGA: Satellites and the Orientation of the Pole of Jupiter, "
"personal communication to Horizons/NAIF. Accessed via JPL Solar "
"System Dynamics, https://ssd.jpl.nasa.gov, JUP365."
),
)

Enceladus2024 = TriaxialEllipsoid(
name="Enceladus2024",
long_name="Enceladus triaxial ellipsoid (2024)",
semimajor_axis=256_140,
semimedium_axis=251_160,
semiminor_axis=248_680,
geocentric_grav_const=7.210443e9,
angular_velocity=262.7318870466 * 2.0 * np.pi / 360.0 / (24.0 * 60.0 * 60.0),
reference=(
"Park, R. S., et al. (2024). The Global Shape, Gravity Field, and "
"Libration of Enceladus. Journal of Geophysical Research: Planets, "
"129(1), e2023JE008054. https://doi.org/10.1029/2023JE008054"
),
)

Titan2024 = TriaxialEllipsoid(
# Ellispoid fit to data (not from spherical harmonic coefficients)
name="Titan2024",
long_name="Titan triaxial ellipsoid (2024)",
semimajor_axis=2_575_164,
semimedium_axis=2_574_720,
semiminor_axis=2_574_314,
geocentric_grav_const=8978.1383e9,
angular_velocity=2 * np.pi / (15.945448 * 24 * 60 * 60),
reference=(
"A, B, C: Corlies, P., et al. (2017). Titan’s Topography and Shape at "
"the End of the Cassini Mission. Geophysical Research Letters, 44(23), "
"11,754-11,761. https://doi.org/10.1002/2017GL075518; "
"GM: Durante, D., et al. (2019). Titan’s gravity field and interior "
"structure after Cassini. Icarus, 326, 123–132. "
"https://doi.org/10.1016/j.icarus.2019.03.003; "
"OMEGA: Jacobson, R. (2022). The Orbits of the Main Saturnian "
"Satellites, the Saturnian System Gravity Field, and the Orientation "
"of Saturn's Pole. The Astronomical Journal, 164, 199. "
"https://doi.org/10.3847/1538-3881/ac90c9"
),
)

Pluto2024 = Sphere(
name="Pluto2024",
long_name="Pluto spheroid (2024)",
radius=1_188_300,
geocentric_grav_const=869.6e9,
angular_velocity=1.1385591834674098e-05,
reference=(
"R: Nimmo, et al. (2017). Mean radius and shape of Pluto and Charon "
"from New Horizons images. Icarus, 287, 12–29. "
"https://doi.org/10.1016/j.icarus.2016.06.027; "
"GM, OMEGA: Brozović, M., et al. (2015). The orbits and masses of "
"satellites of Pluto. Icarus, 246, 317–329. "
"https://doi.org/10.1016/j.icarus.2014.03.015; "
),
)

VESTA = TriaxialEllipsoid(
name="VESTA",
long_name="Vesta Triaxial Ellipsoid",
semimajor_axis=286_300,
semimedium_axis=278_600,
semiminor_axis=223_200,
geocentric_grav_const=1.729094e10,
angular_velocity=326.71050958367e-6,
Charon2024 = Sphere(
name="Charon2024",
long_name="Charon spheroid (2024)",
radius=606_000,
geocentric_grav_const=105.88e9,
angular_velocity=1.1385591834674098e-055,
reference=(
"Russell, C. T., Raymond, C. A., Coradini, A., McSween, H. Y., Zuber, "
"M. T., Nathues, A., et al. (2012). Dawn at Vesta: Testing the "
"Protoplanetary Paradigm. Science. doi:10.1126/science.1219381"
"R: Nimmo, et al. (2017). Mean radius and shape of Pluto and Charon "
"from New Horizons images. Icarus, 287, 12–29. "
"https://doi.org/10.1016/j.icarus.2016.06.027; "
"GM, OMEGA: Brozović, M., et al. (2015). The orbits and masses of "
"satellites of Pluto. Icarus, 246, 317–329. "
"https://doi.org/10.1016/j.icarus.2014.03.015; "
),
)
4 changes: 2 additions & 2 deletions boule/tests/test_ellipsoid.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
import numpy.testing as npt
import pytest

from .. import GRS80, MARS, WGS84, Ellipsoid
from .. import GRS80, WGS84, Ellipsoid, Mars2009
from .utils import normal_gravity_surface

ELLIPSOIDS = [WGS84, GRS80, MARS]
ELLIPSOIDS = [WGS84, GRS80, Mars2009]
ELLIPSOID_NAMES = [e.name for e in ELLIPSOIDS]


Expand Down
Loading
Loading