# lamberthub.universal_solvers.gooding

A module hosting all algorithms devised by Gooding

## Module Contents

### Functions

 gooding1990(mu, r1, r2, tof, M=0, prograde=True, low_path=True, maxiter=35, atol=1e-05, rtol=1e-07, full_output=False) Lambert's problem solver using the method proposed by R. H. Gooding in 1990. tlamb(m, q, qsqfm1, x, n) Auxiliary routine for computing the non-dimensional time of flight as xlamb(m, q, qsqfm1, tin, maxiter, atol, rtol) Auxiliary routine for finding the independent variable as function of the vlamb(mu, r1_norm, r2_norm, dtheta, tof, low_path, maxiter, atol, rtol) Auxiliary routine for computing the velocity vector components, both
lamberthub.universal_solvers.gooding.gooding1990(mu, r1, r2, tof, M=0, prograde=True, low_path=True, maxiter=35, atol=1e-05, rtol=1e-07, full_output=False)

Lambert’s problem solver using the method proposed by R. H. Gooding in 1990.

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

• r1 (numpy.array) – Initial position vector.

• r2 (numpy.array) – Final position vector.

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

• 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.

• full_output (bool) – If True, the number of iterations and time per iteration are also returned.

Returns

• v1 (numpy.array) – Initial velocity vector.

• v2 (numpy.array) – Final velocity vector.

• numiter (int) – Number of iterations.

• tpi (float) – Time per iteration in seconds.

Notes

This module holds the Lambert’s problem solver devised by R. H. Gooding in his technical report 1 originally published in 1988. However, the implementation corresponds to the one proposed by the author a couple of years later in his article 2 from 1990. Some improvements to the originally algorithm were also made by Klumpp in his performance comparison 3 between Lamberts problem solvers. Those have been added to this code to prevent failures for particular inputs. The result is a fully working algorithm for both single and multi-revolution orbits.

The code has been kept as close as possible to the original FORTRAN-77 one. However, some statements (like “goto line” ones) have been deprecated as they introduce “spaghetti code”. Since the original implementation imposed a relative tolerance together with the number of iterations, these parameters have been modified so the user can freely choose their values.

References

1

Gooding, R. H. (1988). On the solution of Lambert’s orbital boundary-value problem. ROYAL AEROSPACE ESTABLISHMENT FARNBOROUGH (UNITED KINGDOM).

2

Gooding, R. H. (1990). A procedure for the solution of Lambert’s orbital boundary-value problem. Celestial Mechanics and Dynamical Astronomy, 48(2), 145-165.

3

Klumpp, A. (1999). Performance Comparison of Lambert and Kepler Algorithms, Interoffice Memorandum, JPL.

lamberthub.universal_solvers.gooding.tlamb(m, q, qsqfm1, x, n)

Auxiliary routine for computing the non-dimensional time of flight as function of the number of revolutions, the transfer parameter and the independent variable.

Parameters
• m (float) – Number of revolutions.

• q (float) – The transfer angle parameter.

• qsqfm1 – Equivalent to $$1-q^2$$.

• x (float) – The independent variable.

• n (float) – Number of output parameters to be returned.

Returns

• t (float) – Non-dimensional time evaluated at $$x$$.

• dt (float) – First derivative of the non-dimensional time evaluated at $$x$$.

• d2t (float) – Second derivative of the non-dimensional time evaluated at $$x$$.

• d3t (float) – Third derivative of the non-dimensional time evaluated at $$x$$.

lamberthub.universal_solvers.gooding.xlamb(m, q, qsqfm1, tin, maxiter, atol, rtol)

Auxiliary routine for finding the independent variable as function of the number of revolutions, the transfer angle parameter and the non-dimensional time of flight.

Parameters
• m (float) – Number of revolutions.

• q (float) – The transfer angle parameter.

• qsqfm1 (float) – Equivalent to $$1-q^2$$.

• tin (float) – The actual non-dimensional time of flight.

• maxiter (int) – Maximum number of iterations.

• atol (float) – Desired absolute tolerance.

• rtol (float) – Desired relative tolerance.

Returns

• n_sol (int) – Number of solutions.

• x (float) – First solution.

• xpl (float) – Second solution, if available.

• numiter (int) – Number of iterations.

lamberthub.universal_solvers.gooding.vlamb(mu, r1_norm, r2_norm, dtheta, tof, low_path, maxiter, atol, rtol)

Auxiliary routine for computing the velocity vector components, both radian and tangential ones.

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

• r1_norm (float) – Norm of the initial position vector.

• r2_norm (float) – Norm of the final position vector.

• dtheta (float) – Transfer angle betwen initial and final vectors.

• tof (float) – Time of flight betwen initial and final position vectors.

• 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 $$abs(x_{i+1} - x_{i})$$

• rtol (float) – Relative tolerance $$abs(\frac{x_{i+1}}{x_{i}} - 1)$$

Returns

• n_sol (int) – Number of solutions

• vri (float) – Radial velocity component at the initial position vector.

• vti (float) – Tangential velocity component at the initial position vector.

• vrf (float) – Radial velocity component at the final position vector.

• vtf (float) – Tangential velocity component at the final position vector.

• numiter (int) – Number of iterations required to compute solution.