adam_core.dynamics.lambert module

Implementation of Lambert’s problem using Izzo’s method.

This implementation follows the algorithm described in: Izzo, D. (2015). Revisiting Lambert’s problem. Celestial Mechanics and Dynamical Astronomy, 121(1), 1-15.

Credits: Based on poliastro implementation by Juan Luis Cano Rodríguez and lamberthub by Jorge Martinez

adam_core.dynamics.lambert.izzo_lambert(r1: Array, r2: Array, tof: float, mu: float = 0.00029591220828411956, M: int = 0, prograde: bool = True, low_path: bool = True, maxiter: int = 35, atol: float = 1e-10, rtol: float = 1e-10) Tuple[Array, Array][source]

Solves Lambert’s problem using Izzo’s devised algorithm.

Parameters:
  • r1 (jnp.ndarray) – Initial position vector.

  • r2 (jnp.ndarray) – Final position vector.

  • tof (float) – Time of flight.

  • mu (float) – Gravitational parameter, equivalent to GM of attractor body.

  • M (int) – Number of revolutions. Must be equal or greater than 0.

  • prograde (bool) – If True, specifies prograde motion. Otherwise, retrograde motion is imposed.

  • low_path (bool) – If two solutions are available, it selects between high or low path.

  • maxiter (int) – Maximum number of iterations.

  • atol (float) – Absolute tolerance.

  • rtol (float) – Relative tolerance.

Returns:

  • v1 (jnp.ndarray) – Initial velocity vector.

  • v2 (jnp.ndarray) – Final velocity vector.

adam_core.dynamics.lambert.solve_lambert(r1: ndarray | Array, r2: ndarray | Array, tof: ndarray | float, mu: float = 0.00029591220828411956, prograde: bool = True, max_iter: int = 35, tol: float = 1e-10) Tuple[ndarray, ndarray][source]

Solve Lambert’s problem for multiple initial and final positions and times of flight.

This implementation uses Izzo’s method which is robust and handles all orbit types.

Parameters:
  • r1 (array_like (N, 3)) – Initial position vectors in au.

  • r2 (array_like (N, 3)) – Final position vectors in au.

  • tof (array_like (N) or float) – Times of flight in days.

  • mu (float, optional) – Gravitational parameter (GM) of the attracting body in units of au³/day².

  • prograde (bool, optional) – If True, assume prograde motion. If False, assume retrograde motion.

  • max_iter (int, optional) – Maximum number of iterations for convergence.

  • tol (float, optional) – Convergence tolerance.

Returns:

  • v1 (ndarray (N, 3)) – Initial velocity vectors in au/day with origin at the attractor

  • v2 (ndarray (N, 3)) – Final velocity vectors in au/day with origin at the attractor

adam_core.dynamics.lambert.calculate_c3(v1: ndarray | Array, body_v: ndarray | Array) ndarray[tuple[Any, ...], dtype[float64]][source]

Calculate the C3 of a spacecraft given its velocity relative to a body.

Parameters:
  • v1 (array_like (N, 3)) – Velocity of the spacecraft in au/d.

  • body_v (array_like (N, 3)) – Velocity of the body in au/d.

Returns:

c3 – C3 of the spacecraft in au^2/d^2.

Return type:

array_like (N)