AGI does not use any explicit references for these calculations. However, here is a short summary of the approach utilized as well as the related the pseudocode for its implementation.
Summary:
The repeating ground track orbit is designed such that the orbit completes a whole number of nodal revolutions at a time when the planet-fixed longitude of the ascending node returns to its original value. This is accomplished via the following iterative algorithm.
Variables:
i = inclination
e = eccentricity
a = semimajor axis
n = two-body mean motion
nAnomalistic = perturbed anomalistic mean motion
nNodal = perturbed nodal mean motion
cbRotRate = rotation rate of central body
Re = reference radius of central body
Algorithm:
// Initial Guess
nNodal = desiredRevsPerDay * cbRotRate;
// Compute the change in longitude per revolution
daysToRepeat = INT (revsToRepeat / desiredRevsPerDay)
deltaLong = daysToRepeat * 2 * Pi / revsToRepeat
// Convert nNodal to Semi-major Axis (aNew) based on iterative solution to
// invert Semi-major Axis to Nodal Mean Motion algorithm (see code snippet
// below)
while (fabs(aNew - a) / aNew > tolerance)
a = aNew
// Compute rate of change of RAAN
p = a * (1.0 – e^2) / Re
RAANRate = -1.5 * J2 * nAnomalistic * cos(i) / (p * p)
// Compute the change in RAAN over 1 revolution
deltaRA = 2 * Pi * RAANRate / nNodal
// Compute the needed change in longitude due to nodal
// period and the necessary nodal mean motion
deltaLongNP = deltaLong + deltaRA
// Compute an updated estimate of the nodal mean motion
nNodal = 2 * Pi * cbRotRate / deltaLongNP
// Compute the new semimajor axis length
// Convert nNodal to Semi-major Axis (aNew) based on iterative solution
// to invert Semi-major Axis to Nodal Mean Motion algorithm (see code
// snippet below)
end while
a = aNew
revsPerDay = nNodal / cbRotRate
Semimajor Axis to Nodal Mean Motion (including J2 secular effects):
// Initial Guess
n = sqrt(gm / (a * a * a)
p = a * (1 – e^2) / Re
factor = 1.5 * J2 / (p * p)
// Anomalistic mean motion
nAnomalistic = n - factor * n * sqrt(1 – e^2) * (1.5 * sin(i)^2 - 1.0)
// Nodal mean motion (adds in rotation of periapsis)
nNodal = nAnomalistic - factor * nAnomalistic * (2.5 * sin(i)^2 - 2.0)