Propagation¶
The following script holds the different high level functions for the different propagators available at poliastro:
Propagator 
Elliptical 
Parabolic 
Hyperbolic 
farnocchia 
✓ 
✓ 
✓ 
vallado 
✓ 
✓ 
✓ 
mikkola 
✓ 
NOT IMPLEMENTED 
✓ 
markley 
✓ 
x 
x 
pimienta 
✓ 
✓ 
NOT IMPLEMENTED 
gooding 
✓ 
NOT IMPLEMENTED 
NOT IMPLEMENTED 
danby 
✓ 
x 
✓ 
cowell 
✓ 
✓ 
✓ 

poliastro.twobody.propagation.
cowell
(k, r, v, tofs, rtol=1e11, *, events=None, ad=None, **ad_kwargs)¶ Propagates orbit using Cowell’s formulation.
 Parameters
k (Quantity) – Standard gravitational parameter of the attractor.
r (Quantity) – Position vector.
v (Quantity) – Velocity vector.
tofs (Quantity) – Array of times to propagate.
rtol (float, optional) – Maximum relative error permitted, default to 1e10.
events (function(t, u(t)), optional) – passed to solve_ivp: integration stops when this function returns <= 0., assuming you set events.terminal=True
ad (function(t0, u, k), optional) – Non Keplerian acceleration (km/s2), default to None.
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.
 Raises
RuntimeError – If the algorithm didn’t converge.
Note
This method uses a Dormand & Prince method of order 8(5,3) available in the
poliastro.integrators
module. If multiple tofs are provided, the method propagates to the maximum value and calculates the other values via dense output

poliastro.twobody.propagation.
farnocchia
(k, r, v, tofs, **kwargs)¶ Propagates orbit.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.

poliastro.twobody.propagation.
vallado
(k, r, v, tofs, numiter=350, **kwargs)¶ Propagates Keplerian orbit.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.
 Raises
RuntimeError – If the algorithm didn’t converge.
Note
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.

poliastro.twobody.propagation.
mikkola
(k, r, v, tofs, rtol=None)¶ Solves Kepler Equation by a cubic approximation. This method is valid no mater the orbit’s nature.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity)
Note
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

poliastro.twobody.propagation.
markley
(k, r, v, tofs, rtol=None)¶ Elliptical Kepler Equation solver based on a fifthorder refinement of the solution of a cubic equation.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.
Note
This method was originally presented by Markley in his paper Kepler Equation Solver with DOI: https://doi.org/10.1007/BF00691917

poliastro.twobody.propagation.
pimienta
(k, r, v, tofs, rtol=None)¶ Kepler solver for both elliptic and parabolic orbits based on a 15th order polynomial with accuracies around 10e5 for elliptic case and 10e13 in the hyperbolic regime.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.
Note
This algorithm was developed by PimientaPeñ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

poliastro.twobody.propagation.
gooding
(k, r, v, tofs, numiter=150, rtol=1e08)¶ Solves the Elliptic Kepler Equation with a cubic convergence and accuracy better than 10e12 rad is normally achieved. It is not valid for eccentricities equal or greater than 1.0.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity)
Note
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

poliastro.twobody.propagation.
danby
(k, r, v, tofs, rtol=1e08)¶ Kepler solver for both elliptic and parabolic orbits based on Danby’s algorithm.
 Parameters
 Returns
rr (~astropy.units.Quantity) – Propagated position vectors.
vv (~astropy.units.Quantity) – Propagated velocity vectors.
Note
This algorithm was developed by Danby in his paper The solution of Kepler Equation with DOI: https://doi.org/10.1007/BF01686811

poliastro.twobody.propagation.
propagate
(orbit, time_of_flight, *, method=<function farnocchia>, rtol=1e10, **kwargs)¶ Propagate an orbit some time and return the result.
 Parameters
 Returns
Propagation coordinates.
 Return type