Propagation¶
The following script holds the different high level functions for the different propagators available at poliastro:
| Propagator | Elliptical | Parabolic | Hyperbolic |
| mean_motion | ✓ | ✓ | ✓ |
| kepler | ✓ | ✓ | ✓ |
| 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=1e-11, *, 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 1e-10.
- 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.integratorsmodule. If multiple tofs are provided, the method propagates to the maximum value and calculates the other values via dense output
-
poliastro.twobody.propagation.mean_motion(k, r, v, tofs, **kwargs)¶ Propagates orbit using Cowell’s formulation.
Parameters: Returns: - rr (~astropy.units.Quantity) – Propagated position vectors.
- vv (~astropy.units.Quantity) – Propagated velocity vectors.
-
poliastro.twobody.propagation.kepler(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 fifth-order 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 10e-5 for elliptic case and 10e-13 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 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: 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: 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 mean_motion>, rtol=1e-10, **kwargs)¶ Propagate an orbit some time and return the result.
Parameters: