poliastro2.core.actions.propagate

Description

This subpackage implements various orbit propagation algorithms. It contains different numerical methods for propagating orbits under various assumptions.

Modules

  • cowell: Implementation of the Cowell propagation method.

  • danby: Danby’s propagation method.

  • enums: Enumerations for propagation options.

  • farnocchia: Farnocchia propagation routine.

  • gooding: Gooding’s method for orbit propagation.

  • markley: Markley’s propagation technique.

  • mikkola: Mikkola’s method.

  • pimienta: Pimienta’s propagation routines.

  • recseries: Recursive series propagation.

  • vallado: Propagation method based on Vallad’s work.

  • _compat: Compatibility routines.

Propagators capabilities available at poliastro2:

Propagator

Elliptical

Parabolic

Hyperbolic

farnocchia

vallado

mikkola

markley

x

x

pimienta

x

gooding

x

x

danby

cowell

recseries

x

x

class poliastro2.core.actions.propagate.CowellPropagator(rtol=1e-11, events=None, f=CPUDispatcher(<function func_twobody>))

Propagates orbit using Cowell’s formulation.

Notes

This method uses the Dormand & Prince integration method of order 8(5,3) (DOP853). If multiple tofs are provided, the method propagates to the maximum value (unless a terminal event is defined) and calculates the other values via dense output.

kind = 7
propagate(state, tof)
propagate_many(state, tofs)
class poliastro2.core.actions.propagate.DanbyPropagator

Kepler solver for both elliptic and parabolic orbits based on Danby’s algorithm.

Notes

This algorithm was developed by Danby in his paper The solution of Kepler Equation with DOI: https://doi.org/10.1007/BF01686811

kind = 5
propagate(state, tof)
class poliastro2.core.actions.propagate.FarnocchiaPropagator

Propagates orbit using Farnocchia’s method.

Notes

This method takes initial \(\vec{r}, \vec{v}\), calculates classical orbit parameters, increases mean anomaly and performs inverse transformation to get final \(\vec{r}, \vec{v}\) The logic is based on formulae (4), (6) and (7) from http://dx.doi.org/10.1007/s10569-013-9476-9

kind = 7
propagate(state, tof)
propagate_many(state, tofs)
class poliastro2.core.actions.propagate.GoodingPropagator

Propagate the orbit using the Gooding method.

The Gooding method solves the Elliptic Kepler Equation with a cubic convergence, and accuracy better than 10e-12 rad is normally achieved. It is not valid for eccentricities equal or greater than 1.0.

Notes

This method was developed by Gooding and Odell in their paper The hyperbolic Kepler equation (and the elliptic equation revisited) with DOI: https://doi.org/10.1007/BF01235540

kind = 1
propagate(state, tof)
class poliastro2.core.actions.propagate.MarkleyPropagator

Elliptical Kepler Equation solver based on a fifth-order refinement of the solution of a cubic equation.

Notes

This method was originally presented by Markley in his paper Kepler Equation Solver with DOI: https://doi.org/10.1007/BF00691917

kind = 1
propagate(state, tof)
class poliastro2.core.actions.propagate.MikkolaPropagator

Solves Kepler Equation by a cubic approximation.

Notes

This method was derived by Seppo Mikola in his paper A Cubic Approximation For Kepler’s Equation with DOI: https://doi.org/10.1007/BF01235850

kind = 5
propagate(state, tof)
class poliastro2.core.actions.propagate.PimientaPropagator

Kepler solver for elliptic orbits based on a 15th order polynomial with accuracies around 10e-5 for elliptic case and 10e-13 in the hyperbolic regime.

Notes

This algorithm was developed by Pimienta-Peñalver and John L. Crassidis in their paper Accurate Kepler Equation solver without trascendental function evaluations. Original paper is on Buffalo’s UBIR repository: http://hdl.handle.net/10477/50522

kind = 1
propagate(state, tof)
class poliastro2.core.actions.propagate.RecseriesPropagator(method='rtol', order=8, numiter=100, rtol=1e-08)

Kepler solver for elliptical orbits with recursive series approximation method.

The order of the series is a user defined parameter.

Notes

This algorithm uses series discussed in the paper Recursive solution to Kepler’s problem for elliptical orbits - application in robust Newton-Raphson and co-planar closest approach estimation with DOI: http://dx.doi.org/10.13140/RG.2.2.18578.58563/1

kind = 1
propagate(state, tof)
class poliastro2.core.actions.propagate.ValladoPropagator(numiter=350)

Propagates Keplerian orbit using Vallado’s method.

Notes

This algorithm is based on Vallado implementation, and does basic Newton iteration on the Kepler equation written using universal variables. Battin claims his algorithm uses the same amount of memory but is between 40 % and 85 % faster.

kind = 7
propagate(state, tof)
poliastro2.core.actions.propagate.propagate(*args, **kwargs)

Modules

cowell

danby

enums

farnocchia

gooding

markley

mikkola

pimienta

recseries

vallado