# 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 ✓ NOT IMPLEMENTED ✓ markley ✓ x x pimienta ✓ ✓ NOT IMPLEMENTED gooding ✓ NOT IMPLEMENTED NOT IMPLEMENTED danby ✓ x ✓ cowell ✓ ✓ ✓

## Module Contents¶

### Functions¶

 cowell(k, r, v, tofs, rtol=1e-11, *, events=None, f=func_twobody) Propagates orbit using Cowell’s formulation. farnocchia(k, r, v, tofs, **kwargs) Propagates orbit. vallado(k, r, v, tofs, numiter=350, **kwargs) Propagates Keplerian orbit. _kepler(k, r0, v0, tof, *, numiter) mikkola(k, r, v, tofs, rtol=None) Solves Kepler Equation by a cubic approximation. This method is valid markley(k, r, v, tofs, rtol=None) Elliptical Kepler Equation solver based on a fifth-order pimienta(k, r, v, tofs, rtol=None) Kepler solver for both elliptic and parabolic orbits based on a 15th gooding(k, r, v, tofs, numiter=150, rtol=1e-08) Solves the Elliptic Kepler Equation with a cubic convergence and danby(k, r, v, tofs, rtol=1e-08) Kepler solver for both elliptic and parabolic orbits based on Danby’s propagate(orbit, time_of_flight, *, method=farnocchia, rtol=1e-10, **kwargs) Propagate an orbit some time and return the result.
poliastro.twobody.propagation.cowell(k, r, v, tofs, rtol=1e-11, *, events=None, f=func_twobody)

Propagates orbit using Cowell’s formulation.

Parameters
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float, optional) – Maximum relative error permitted, default to 1e-10.

• 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 Keplerian-only 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 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
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

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
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• numiter (int, optional) – Maximum number of iterations, default to 35.

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
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float) – This method does not require of tolerance since it is non iterative.

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 fifth-order refinement of the solution of a cubic equation.

Parameters
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float) – This method does not require of tolerance since it is non iterative.

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 10e-5 for elliptic case and 10e-13 in the hyperbolic regime.

Parameters
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float) – This method does not require of tolerance since it is non iterative.

Returns

• rr (~astropy.units.Quantity) – Propagated position vectors.

• vv (~astropy.units.Quantity) – Propagated velocity vectors.

Note

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

poliastro.twobody.propagation.gooding(k, r, v, tofs, numiter=150, rtol=1e-08)

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.

Parameters
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float) – This method does not require of tolerance since it is non iterative.

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=1e-08)

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

Parameters
• k () – Standard gravitational parameter of the attractor.

• r () – Position vector.

• v () – Velocity vector.

• tofs () – Array of times to propagate.

• rtol (float) – Relative error for accuracy of the method.

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=1e-10, **kwargs)

Propagate an orbit some time and return the result.

Parameters
• orbit () – Orbit object to propagate.

• time_of_flight () – Time of propagation.

• method (callable, optional) – Propagation method, default to farnocchia.

• rtol (float, optional) – Relative tolerance, default to 1e-10.

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