Julia-based toolkit for dynamical simulations of planets and small solar system bodies.
using Pkg
Pkg.add(url="https://github.com/Astroshaper/ThermoPhysicalModeling.jl")
using ThermoPhysicalModeling
You can update the module and run tests as follows.
Pkg.update("ThermoPhysicalModeling")
Pkg.test("ThermoPhysicalModeling")
You can simulate orbital evolution of planets and small bodies under gravity interaction and various perturbations. As for the orbital integrators, you can choose from Euler, leapfrog, 4th-degree Hermite methods (Note that my implementation of the Hermite method is being verified). Thermophysical perturbation on orbital motion of an asteroid, that is, Yarkovsky effect will be implemented.
Orbital calculation of the solar system. The gravity of 8 planets and Pluto are considered.
Based on orbit, spin, and 3-D shape, you can calculate the distribution of the surface temperature on an asteroid. The temperature distribution can be used to calculate the non-gravitational perturbations on its orbital and rotational motion (Yarkovsky and YORP effects, respectively).
- Wavefront OBJ format (*.obj)
- 1-dimensional heat diffusion in depth direction
- Self-shadowing: Local shadows casted by topography
- Self-heating: Re-absorption of scatterd and radiated photons by surrounding facets. Only sigle scattering is implemented.
- Surface roughness (smaller than facets of the shape model)
Distribution of surface temperature on asteroid Ryugu. The color map ranges from 200 to 400 K.
You can calculate the precise gravity field of an irregularly shaped body, based on the constant-density polyhedron method (Werner & Scheeres, 1997).
Distribution of dynamical elevation on asteroid Itokawa. The color map ranges from -25 to 55 m.
Let's visualize a shape model of asteroid Ryugu. Please downlad a Ryugu model from ThermoPhysicalModeling/test/ryugu_test.obj.
using ThermoPhysicalModeling
shapepath = "ryugu_test.obj" # Path to the shape model
shape = Shape(shapepath; scale=1000, find_visible_facets=true)
draw(shape)
# draw(shape, data=:radius) # Radius of each surface facet
# draw(shape; data=:illumination, r̂☉=[1,0,0.]) # Illumination when the Sun is in the direction of r̂☉