poliastro.twobody.propagation
¶
The following script holds the different high level functions for the different propagators available at poliastro:
Propagator 
Elliptical 
Parabolic 
Hyperbolic 
farnocchia 
✓ 
✓ 
✓ 
vallado 
✓ 
✓ 
✓ 
mikkola 
✓ 
✓ 
✓ 
markley 
✓ 
x 
x 
pimienta 
✓ 
✓ 
x 
gooding 
✓ 
x 
x 
danby 
✓ 
✓ 
✓ 
cowell 
✓ 
✓ 
✓ 
Module Contents¶
Functions¶

Propagates orbit using Cowell's formulation. 

Propagates orbit. 

Propagates Keplerian orbit. 



Solves Kepler Equation by a cubic approximation. This method is valid 

Elliptical Kepler Equation solver based on a fifthorder 

Kepler solver for both elliptic and parabolic orbits based on a 15th 

Solves the Elliptic Kepler Equation with a cubic convergence and 

Kepler solver for both elliptic and parabolic orbits based on Danby's 

Propagate an orbit some time and return the result. 
 poliastro.twobody.propagation.cowell(k, r, v, tofs, rtol=1e11, *, events=None, f=func_twobody)¶
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, defaults to 1e11.
events (function(t, u(t)), optional) – Passed to solve_ivp: Integration stops when this function returns <= 0., assuming you set events.terminal=True
f (function(t0, u, k), optional) – Objective function, default to Keplerianonly forces.
 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 the solve_ivp method from scipy.integrate using 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.
 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._kepler(k, r0, v0, tof, *, numiter)¶
 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=farnocchia, rtol=1e10, **kwargs)¶
Propagate an orbit some time and return the result.
 Parameters
 Returns
Propagation coordinates.
 Return type
 poliastro.twobody.propagation.ELLIPTIC_PROPAGATORS¶
 poliastro.twobody.propagation.PARABOLIC_PROPAGATORS¶
 poliastro.twobody.propagation.HYPERBOLIC_PROPAGATORS¶
 poliastro.twobody.propagation.ALL_PROPAGATORS¶