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 fifth-order |
|
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. |
Attributes¶
- poliastro.twobody.propagation.cowell(k, r, v, tofs, rtol=1e-11, *, 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 1e-11.
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 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.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=farnocchia, rtol=1e-10, **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¶