Contact times, magnitude and position angles from Besselian elements
- The whole reduction is eight formulas. Project the observer onto the fundamental planefundamental planeThe plane through the Earth's centre perpendicular to the axis of the Moon's shadow. Its x axis lies in the equator pointing east, its y axis points north, and the shadow's cross-section on it is an exact circle. as and subtract from the shadow-axis coordinates to get . Shrink the shadow radii to the observer's plane with . Solve for the contacts and for maximum eclipse. The 1961 Explanatory Supplement gives every one of them 1.
- NASA's JavaScript Solar Eclipse Explorer (JSEX) is that method in 1200 lines of GPL code. Its
program.jscomputes with and m, and the hour angle as . It iterates each contact with a Newton step until the correction is below h, and reports P, V, altitude, azimuth, magnitude, obscuration and duration 2. - Magnitude has two branches. In the penumbra it is , the fraction of the solar diameter covered. Inside the umbra or antumbra it is , the ratio of the apparent diameters. NASA tables and every code read here switch branches at 1 3.
- Obscuration is a lens area, never a linear function of magnitude. With the solar radius as unit and the lunar radius, where , , are the angles of the triangle formed by the two centres and an intersection point 1. A 0.5 magnitude with equal radii hides about 39 per cent of the disc.
- The position angle of a contact is at the contact instant, measured eastward from the north point, with the sign of reversed for the interior contacts of a total eclipse because . The 1961 Supplement writes this angle . The vertex angle is with the parallactic angle 1 4.
- The direct numerical alternative needs no auxiliary angles. Tabulate at equal time steps and inverse-interpolate its zero. The 1992 Explanatory Supplement recommends it as simpler and free of the constant-velocity assumption 5.
- Nothing in this reduction knows about the lunar limb, refraction or the solar radius choice. Those enter through the elements (, the solar radius in , ) and through post-corrections described in corrections-and-code.md.
The question. Given a published set of Besselian elements for one eclipse and an observer's geodetic latitude, longitude and height, what is the exact sequence of formulas for the site? The outputs wanted are the times of the four contacts and of maximum eclipse, the magnitude, the obscuration, the position and vertex angles of each contact, the Sun's altitude and azimuth, and the duration of totality or annularity. Which constants does each formulation fix, and where do the published implementations differ from the almanac text?
The pipeline for one observer
Given Besselian elements as polynomials in about in Terrestrial Time (TT)Terrestrial Time (TT)The uniform time scale of the ephemerides and of the Besselian elements, equal to TAI + 32.184 s. Older eclipse tables call it TDT, TD or Ephemeris Time (ET). Elements are computed in TT and converted to UT1 with ΔT before any Earth rotation is applied., the they were computed with, and an observer :
- Observer constants. and from the geodetic latitude, the spheroid and the height 1.
- Hour angle. with west longitude positive 1.
- Fundamental-plane position. , , and their rates , 1.
- Relative coordinates. , , their rates, , , and the observer's-plane radii , 1.
- Maximum eclipse. Iterate to convergence 2.
- Eclipse type at the site. None if . Partial if . Central if , total when and annular when 2.
- Contacts. Roots of for C1 and C4 and of for C2 and C3, by the auxiliary-angle Newton step or by bracketing and inverse interpolation 1 5.
- Magnitude. in the penumbra, inside the umbra or antumbra 1 3.
- Obscuration. Lens area with , , or for annular and 1 for total 1.
- Position angles. At each contact with the sign reversed for the interior contacts of a total eclipse, and with 1.
- Altitude and azimuth from , , . Flag or replace contacts below the horizon by sunrise or sunset 2.
- Duration , and UT by subtracting from every time 1.
- Corrections, reported separately: solar radius, limb profile at C2 and C3, current , height, refraction flag. Their sizes are in corrections and code 6.
The rest of this note is those steps with their symbols, constants and the JSEX code.
The observer on the fundamental plane
Geocentric coordinates of the site
The 1961 Explanatory Supplement, section 9D, starts from the geodetic latitude , the longitude and the height above the spheroid 1:
Here is the geocentric distance in units of the Earth's equatorial radius and is the geocentric latitude. The 1961 text uses and converts height in metres to Earth radii with the factor , that is the Hayford radius 6378388 m. A footnote replaces both from 1968 with and per metre, the IAU 1964 radius 6378160 m 1. The choice of spheroid moves by parts in , which is below the level at which contact times change by a tenth of a second.
The NASA JavaScript Solar Eclipse Explorer uses the reduced-latitude form instead, in readform() 2:
tmp = Math.atan(0.99664719*Math.tan(obsvconst[0]))
obsvconst[4] = 0.99664719*Math.sin(tmp) + (obsvconst[2]/6378140.0)*Math.sin(obsvconst[0])
obsvconst[5] = Math.cos(tmp) + (obsvconst[2]/6378140.0*Math.cos(obsvconst[0]))
so that with and the height in metres,
The constant is the IAU 1976 polar-to-equatorial ratio and 6378140 m the IAU 1976 equatorial radius. Both forms are the same ellipsoid geometry. Height enters along the local normal in both. The Eclipse-Engine code uses the and form with and a 6378.1366 km radius 7. Stellarium takes the rectangular geocentric coordinates of the site from its own Earth model and divides by the equatorial radius 8.
Hour angle, longitude and
Besselian elements are tabulated against Terrestrial (formerly Ephemeris) Time, and is the Greenwich hour angle of the shadow axis at that time scale. The observer's longitude is a Universal Time quantity, so the Supplement converts it to an ephemeris longitudeephemeris longitudeAn observer's longitude shifted by so that it can be combined with the shadow-axis hour angle , which is tabulated against Terrestrial Time rather than Universal Time.: "The longitude must be converted to the ephemeris longitude by increasing it by , the sidereal equivalent of " 1. The local hour angle of the axis is then
with west longitude positive and expressed as an angle at 15 arcseconds per second.
The JSEX code is the same statement in radians per second 2:
circumstances[16] = circumstances[7] - obsvconst[1] - (elements[index+5] / 13713.44)
where elements[index+5] is in seconds from the element table and , that is one over rad s. Eclipse-Engine writes the same term as 1.002738 * delta_t_s * 15 / 3600 * D2R 7. Stellarium omits the term because it evaluates from Greenwich apparent sidereal time at the UT of the requested instant, so is already inside its elements 8. The JSEX element files carry per eclipse. Each eclipse is 28 numbers: the JD and hour of in TDT, the validity window, in seconds, then the polynomial coefficients of and (cubic), , , and (quadratic), and and 9.
The coordinates , , and their hourly variations
With the declination of the shadow axis 1:
and the hourly variations, with and the hourly rates of and in radians:
The Supplement adds that " is not needed" in most cases and that "if predictions to the nearest second are acceptable, the terms and may be omitted" 1. JSEX keeps the term in deta and never forms 2. The elements "must always be interpolated to the time assumed in the calculation", which the polynomial form makes automatic 1.
Shadow radii at the observer's plane
The tabulated and are the penumbral and umbral radii on the fundamental plane. The observer sits at height above it along the axis, so the radii there are
where and are the half-angles of the penumbral and umbral cones. JSEX stores these as l1' and l2' in slots 28 and 29 2. Stellarium writes L1 = L1 - zeta * tf1 8. is negative when the observer is inside the umbral cone beyond its vertex, the total case, and positive in the antumbral, annular case 1.
Two identities that every code read here relies on follow from the cone geometry: is the apparent solar radius and the apparent lunar radius, both in Earth radii projected on the observer's plane. Eclipse-Engine sets rSun = (gm.L1 + gm.L2) / 2, rMoon = (gm.L1 - gm.L2) / 2 7, and the SR123 simulator does the same 10.
Greatest phase and the contacts
The relative coordinates
Define 1
with and positive. is the distance from the observer to the shadow axis in the observer's plane and the relative speed in Earth radii per hour. The 1992 Supplement phrases the whole problem as "an observer sees an eclipse as two disks of fixed size, one crossing the other in a straight line at constant speed" 5.
Maximum eclipse
Greatest phase is when is a maximum. Because varies very slowly, this is when is a minimum, . With and the velocities held constant over ,
in hours 1. JSEX getmid() starts at and repeats tmp = (u*a + v*b)/n2; t -= tmp until h or 50 iterations, re-evaluating everything at each step 2. Eclipse-Engine instead scans a 4 hour window at 4000 steps and golden-sections the magnitude 7.
Penumbral contacts (first and fourth)
At beginning or end of the partial phase . Substituting , gives the quadratic
The Supplement solves it through an auxiliary angle. Setting
the solution is
"The term is the correction that would be applied to to give the time of greatest phase ... the term thus represents approximately the semi-duration of the partial phase which must be subtracted to obtain the time of beginning, or added to obtain the time of end. In other words, must be taken as negative for the beginning and positive for the end, since is always positive" 1. is the perpendicular distance from the observer to the relative path of the axis, so means the site is never in the penumbra.
Umbral contacts (second and third) and the sign rules
The umbral contacts use in the same formula:
"Because is negative for total eclipses and positive for annular eclipses, must be taken as positive for the beginning of the total phase and the end of the annular phase, and as negative for the end of the total phase and the beginning of the annular phase. The semi-duration of the umbral phase is given by " 1. A second approximation from the improved times is recommended, and is subtracted at the end to convert to Universal Time.
JSEX encodes exactly this. In c2c3iterate() the sign is for C2 and for C3 and is reversed when mid[29] < 0, that is when . The loop body is 2:
n = Math.sqrt(circumstances[30])
tmp = circumstances[26]*circumstances[25] - circumstances[24]*circumstances[27]
tmp = tmp / n / circumstances[29]
tmp = sign * Math.sqrt(1.0 - tmp*tmp) * circumstances[29] / n
tmp = (circumstances[24]*circumstances[26] + circumstances[25]*circumstances[27]) / circumstances[30] - tmp
circumstances[1] = circumstances[1] - tmp
The first tmp is , the second is , and the update is , a Newton step on the contact condition with the velocities re-evaluated each pass. The initial guesses come from the mid-eclipse solution: c2[1] = mid[1] - tmp and c3[1] = mid[1] + tmp for the annular case and the reverse when . Convergence is to h, about 4 ms, in at most 50 passes. Stellarium's localSolarEclipse returns the same increment in one line, dt = (L * cfi / sqrt(udot*udot + vdot*vdot)) - (u*udot + v*vdot)/n2 with cfi = contact * sqrt(1 - (delta/L)^2) 8.
Is the site inside the umbra?
The site sees a central phase when, at greatest phase, . It is total when and annular when . JSEX getall() tests if ((mid[36] < mid[29]) || (mid[36] < -mid[29])) and then sets the type from the sign of mid[29] 2. Eclipse-Engine solves the inner contacts on and notes why the absolute value matters: "L2 is negative inside an umbra and POSITIVE inside an antumbra, so the m + L2 form that holds for a total eclipse has no root for an annular one" 7. A partial eclipse at the site requires only at greatest phase, which JSEX expresses as a positive magnitude.
The direct numerical alternative
Both Supplements offer a second method. "Times and position angles of contacts may be obtained by direct numerical solution of the equation . For four, or more, times at equal intervals surrounding the phase required, a small table is made of the quantities , , , . The time of contact is then found, by the standard techniques of inverse interpolation" 1. The 1992 edition prefers it: "There are methods for finding the times of these phenomena by successive iteration, using approximations and auxiliary angles. However, it is simpler to tabulate , , ... and also the discriminant . When the discriminant goes to zero, inverse interpolation gives the time of the local contact" 5. Its advantages listed in 1961 are "no auxiliary formulae and angles; ... no theoretical approximations are necessary (there is no need to assume that , and are constant)" 1. Eclipse-Engine is the code that follows this route. It brackets sign changes of and on a grid and bisects. It names contacts "by which way the curve crosses zero, never by the order the roots came out", so that a window containing only a last contact is not mislabelled as a first one 7.
Magnitude
The Supplement's definition: "The magnitude of the eclipse is by definition the fraction of the solar diameter covered by the Moon at the time of greatest phase, expressed in units of the solar diameter" 1. Two cases follow from the figure of the two cones cut by the observer's plane.
An observer in the penumbra at distance from the axis:
An observer inside the umbra or antumbra sees the whole lunar disc projected on the Sun:
and "identical results are obtained for a total eclipse, provided it is noted that in the latter case " 1. The 1992 edition adds: "Note also that this is the diameter of the lunar disk in units of the diameter of the solar disk" 5. NASA's local circumstances tables state the same convention: "For umbral eclipses (both annular and total), the eclipse magnitude is identical to the topocentric ratio of the Moon's and Sun's apparent diameters" 3.
JSEX computes both and switches at the end of getall() 2:
mid[36] = Math.sqrt(mid[24]*mid[24] + mid[25]*mid[25]) // m
mid[37] = (mid[28] - mid[36]) / (mid[28] + mid[29]) // magnitude, penumbral form
mid[38] = (mid[28] - mid[29]) / (mid[28] + mid[29]) // moon/sun ratio
...
if ((mid[39] == 2) || (mid[39] == 3)) { mid[37] = mid[38] } // umbral: ratio
continues smoothly into at in the total case, since there only when . In the annular case at second contact and throughout, so the reported "magnitude" of an annular eclipse is the diameter ratio, below one. Swiss Ephemeris reports both numbers, attr[0] the diameter fraction and attr[8] "magnitude acc. to NASA; = attr[0] for partial and attr[1] for annular and total eclipses" 11.
Obscuration
"In the reduction of certain types of eclipse observations, it is necessary to evaluate the fraction of the surface of the solar disk obscured by the Moon" 1. With the solar radius as the unit, the lunar radius is
the centre separation is , and the triangle formed by the two centres (Moon), (Sun) and one intersection point of the two circles has angles
with and . The obscured fraction is
"During the annular phase, is equal to , while it is equal to unity in the case of the total phase" 1. The derivation is two circular segments: , and the half-chord collapses the second bracket to . JSEX getcoverage() is a transcription 2:
c = Math.acos((mid[28]*mid[28] + mid[29]*mid[29] - 2.0*mid[36]*mid[36]) / (mid[28]*mid[28] - mid[29]*mid[29]))
b = Math.acos((mid[28]*mid[29] + mid[36]*mid[36])/mid[36]/(mid[28]+mid[29]))
a = Math.PI - b - c
c = ((mid[38]*mid[38]*a + b) - mid[38]*Math.sin(c))/Math.PI
with the annular branch c = mid[38]*mid[38] and clamps at 0 and 1.
The same area written for two discs of angular radii and at separation , the form used by the topocentric codes, is
which is Eclipse-Engine's obscuration(sep, rs, rm) 7 and, with the square root written as , Swiss Ephemeris' sc1 + sc2 12. In terms of magnitude and the radius ratio the separation is . With that substitution solareclipses.com writes obscuration as a function of and alone, building on the image-analysis derivation of Sridhar and others and correcting a sign error in it 13 14.
Obscuration is smaller than magnitude through the partial phase because the covered region is a lens, not a rectangle. Espenak's glossary keeps the two apart: magnitude "is strictly a ratio of diameters and should not be confused with eclipse obscuration, which is a measure of the Sun's surface area occulted by the Moon" 15. The 1992 Supplement opens its section with "Magnitude is commonly confused with obscuration" 5.
Position angle and vertex angle
This note writes the position angle of a contact , as NASA's tables do. The 1961 Supplement writes the same angle , and the quotations below keep its letter.
At a contact the point of tangency lies on the line of centres, so 1
"where the appropriate value of is used. The angle is the position angle of the point of contact, measured eastwards from the north point of the solar limb. The quadrant of is determined by noting that has the sign of , except for the contacts of the total phase for which has the opposite sign to since is negative for total eclipses" 1. JSEX applies the sign through a multiplier 2:
if ((mid[39] == 3) && ((circumstances[0] == -1) || (circumstances[0] == 1))) contacttype = -1.0
circumstances[31] = Math.atan2(contacttype*circumstances[24], contacttype*circumstances[25])
The Supplement also gives with , useful when only one approximation has been made, and the 1992 edition restates the angle as the direction of the vector because "the projected shadow is a reflection of what the observer sees in the sky" 5. NASA's local circumstances tables define and as "measured counter-clockwise (i.e., eastward) from the north and zenith points, respectively" 3.
The vertex angle subtracts the parallactic angle Cparallactic angle CThe angle at the Sun between the direction to the celestial pole and the direction to the zenith, in fundamental-plane coordinates. It converts north-referenced to zenith-referenced position angles. :
" having the same algebraic sign as " 1. The same relation appears in the differential-correction section as for the contacts at semi-duration from maximum 1. Chauvenet's formulation, as transmitted by Buchanan, is equation (385) with from , , , , where is the Sun's declination 4. JSEX computes as the parallactic angle from the altitude 2:
circumstances[33] = Math.asin(coslat * circumstances[17] / Math.cos(circumstances[32]))
if (circumstances[20] < 0.0) { circumstances[33] = Math.PI - circumstances[33] }
circumstances[34] = circumstances[31] - circumstances[33]
that is , placed in the second quadrant when , and . Jubier's calculator reports as an o'clock value and notes that this differs from the NASA bulletins, where is counter-clockwise in degrees 16.
Altitude, azimuth and visibility
The direction of the shadow axis is the direction to the Sun to within the solar parallax, so the Sun's altitude and azimuth follow from , and . JSEX 2:
with from north through east via atan2. Stellarium uses directly, the same expression in fundamental-plane terms 8. JSEX marks an event as below the horizon when rad, that is , the comment calling it a "crude correction for refraction (and for consistency's sake)", and it prints such altitudes as 0 2. The header comment records what a real refraction treatment would need: "correcting for refraction will involve creating a 'virtual' altitude for each contact, and hence a different value of rho and O' for each contact" 2.
When a contact falls below the horizon but maximum is above it, JSEX replaces the contact by sunrise or sunset. getsunriset() iterates at most three times on
and the row is flagged (r) or (s) 2 17. The bit pattern of which of C1, C2, mid, C3, C4 are above the horizon selects one of ten handled cases, and the code admits "There are other patterns, but those are the only ones we're covering!" 2.
Duration and time output
Duration of the central phase is in hours, printed as minutes and seconds after adding h so that the floor rounds to the nearest 0.1 s. If C2 or C3 is below the horizon the duration is measured from maximum instead 2. The Supplement's semi-duration gives the same number in one evaluation when the velocities are constant 1.
Times come out in hours of TDT relative to . JSEX converts to local time as t + t0 - tz - (deltaT - 0.5)/3600, subtracting and half a second so that the truncating formatter rounds to the nearest second 2. Every other time in the table is rounded the same way.
What the JSEX program does, in order
For one eclipse and one site, calculatefor() runs getall() 2:
readform()builds the observer constants: , , height, time zone, , .getmid()iterates from , each pass callingtimelocdependent()which evaluates the polynomials and their derivatives (timedependent()), then , , , , , , , , , , , and .midobservational()computes , altitude, , , azimuth, visibility, then , magnitude and the diameter ratio.- If the magnitude is positive,
getc1c4()seeds C1 and C4 at and iterates each withc1c4iterate(). - If ,
getc2c3()seeds and iterates C2 and C3 with the sign rule for , and sets the type to total or annular.observational()is then run for every contact. - The horizon pattern is examined and sunrise or sunset substituted where a contact is below the horizon.
- For central eclipses the magnitude is replaced by the diameter ratio.
getcoverage()computes obscuration,getduration()the central duration.
The code carries no limb profile, no refraction beyond the threshold, no centre-of-figure offset and no choice of or solar radius. Those are frozen inside the element files, the values of the Five Millennium Canon, NASA/TP-2006-214141, with its 18.
Chauvenet and Meeus
Chauvenet's chapter X is a transformation of Bessel's method with the same fundamental-plane quantities. Buchanan's 1904 exposition of it gives the angles of position as and (equations 276 to 279). It also keeps the old expression of magnitude in "digits", twelfths of the solar diameter, and says it becomes the modern fraction "by omitting the constant 12" 4. The USNO reference list still names Chauvenet volume 1 chapter X and Green (1985) chapter 18 as the treatments of Bessel's formulation 19.
Meeus's "Elements of Solar Eclipses 1951-2200" (1989) is the source the calculator authors cite. Jubier credits it and "Astronomical Algorithms" as having "provided the algorithms for this page" 16, and The Photographer's Ephemeris bases its local circumstances on it together with the 2013 Explanatory Supplement 20. Bill Gray's review describes its heart as "a discussion of the use of Besselian elements" that "contained everything I needed to know to implement eclipse/occultation computations", with no treatment of how to generate the elements 21. The book was not obtained for this note. "Astronomical Algorithms" chapter 54 was not obtained either. As far as this project has established, that chapter derives , and the magnitude at greatest eclipse from the lunar phase theory and does not carry the observer-level reduction. That is why the USNO list and the calculator authors point to "Elements" for site-level work 19 22. Confirming that from the text itself is an open question below.
Sources compared
| Source | Formulation | Observer model | Contact solver | What it has that the others do not |
|---|---|---|---|---|
| Explanatory Supplement 1961, 9D 1 | Closed formulas with auxiliary angle | , , in Earth radii, then | , second approximation | Differential corrections ; three worked examples; ionosphere heights |
| Explanatory Supplement 1992, 8.36 5 | Vector restatement | Same | Inverse interpolation on recommended | Explicit warning list: ephemeris consistency, rotation, centre of figure, limb, refraction |
| Chauvenet via Buchanan 4 | Bessel's method transformed | Same quantities | Successive approximation | form, from , auxiliaries, magnitude in digits |
| NASA JSEX program.js 2 | 1961 formulas | , 6378140 m | Newton iteration to h | Sunrise/sunset substitution, obscuration, (r)/(s) flags, full source |
| Stellarium AstroCalc 8 | 1961 formulas | Site rectangular coordinates from its Earth model | Same increment, elements computed on the fly | No published elements needed; and , Sun 696000 km |
| Eclipse-Engine 7 | 1961 coordinates, numerical contacts | , , 6378.1366 km | Grid plus bisection, golden section for maximum | Root naming by crossing direction; lens obscuration in , |
What a developer should do
Implement the 1961 Explanatory Supplement section 9D formulas exactly as quoted above and test against program.js, which is GPL and self-contained 1 2. Use the NASA element files as the first test data because their is embedded and the JSEX output for any city is published, so a match to the second is a full regression test 18 17. Solve the contacts by the direct root-finding of the 1992 edition rather than the auxiliary angle, because it makes no constant-velocity assumption and handles windows containing a single contact cleanly 5 7. Report magnitude in NASA's two branches and obscuration from the lens area, and label the branch. Compute from with the total-eclipse sign reversal and from the parallactic angle . Keep every time in TT internally and subtract once at output. Read the 1961 text first, then the 1992 section 8.36, then the JSEX code.
What this changes
Nothing in the global-circumstances pipeline. The local reduction consumes the same elements and the same . It adds one requirement upstream: the element generator must publish , and with the elements, because , and cannot be formed without them.
Open questions
- Obtain "Elements of Solar Eclipses 1951-2200" (Meeus 1989) and record its local-circumstances chapter formula by formula, in particular whether it uses the auxiliary angle or direct root finding and which spheroid constants it fixes 23.
- Obtain "Astronomical Algorithms" chapter 54 and confirm from the text that it stops at , and greatest-eclipse magnitude and refers site-level work to "Elements" 22.
- Obtain the 2013 Explanatory Supplement chapter 11 and note whether section 8.36 of 1992 was carried over unchanged, including the inverse-interpolation recommendation 24.
- Obtain the Sky and Telescope BASIC listing
solarecl.bas(Sinnott's "Astronomical Computing" column), which the search index describes as "Local circumstances of a solar eclipse". The download returned a Cloudflare challenge and the Wayback copy an error page. - Retrieve the Wayback snapshot of Chris O'Byrne's original "Eclipse Calculator" (chris.obyrne.com/Eclipses/calculator.html). The live host now serves a parking page and the 2016 snapshot fetched contains only site assets.
References
- 1peer-reviewed Explanatory Supplement to the Astronomical Ephemeris and the American Ephemeris and Nautical Almanac (1961), section 9D "Solar eclipses: local circumstances", pp. 241-249 Official almanac chapter. Read from the archive.org OCR text (var/downloads/es1961_djvu.txt, lines 40694-41460). Gives the observer coordinates, hourly variations, greatest phase, contact-time solution with the auxiliary angle psi, position angles Q and V, magnitude, degree of obscuration and the differential corrections for longitude, latitude, height and Delta T.
- 2primary Chris O'Byrne and Fred Espenak, "Javascript Solar Eclipse Explorer", program.js (NASA GSFC, 2007, GPL) Read in full (var/downloads/jsex_program.js, 1200 lines). The reference implementation of the Explanatory Supplement local-circumstances method in code: observer constants, time-dependent and time-and-location-dependent circumstances, Newton iteration for mid eclipse and the four contacts, P, V, altitude, azimuth, magnitude, obscuration and sunrise/sunset handling.
- 3primary Fred Espenak and Jay Anderson, NASA TP 1999-209484 "Total Solar Eclipse of 2001 June 21", section "Local Circumstances Tables" Read. Defines P and V as measured counter-clockwise from the north and zenith points, states that for umbral eclipses the magnitude equals the topocentric ratio of diameters, that refraction, centre of figure and limb profile are not applied, and that elevation matters only near the umbral limits with the Sun below about 10 degrees.
- 4survey Roland Buchanan, "The Mathematical Theory of Eclipses according to Chauvenet's Transformation of Bessel's Method" (1904) Read from the archive.org OCR text (var/downloads/buchanan_djvu.txt). Gives Chauvenet's formulae for the angle of position Q = N + psi, the angle from the vertex V = Q - C (equations 276-279 and 380-385) and the old "digits" magnitude. Used as the accessible statement of Chauvenet's formulation.
- 5peer-reviewed Explanatory Supplement to the Astronomical Almanac (Seidelmann ed., 1992), chapter 8, section 8.36 "Local circumstances" Official almanac chapter. Read from the archive.org OCR text (var/downloads/es1992_djvu.txt, lines 47555-47720). Restates the 1961 method in vector form, recommends inverse interpolation on u2+v2-L^2, and gives the magnitude and obscuration derivations (8.3621 to 8.3623).
- 6primary Fred Espenak, NASA GSFC, "The Lunar Limb Profile and Eclipse Predictions" Read. Watts corrections bring predictions to better than 0.5 s, uncorrected times can be off by 2 to 3 s and more near the path limits, Kaguya and LRO data reach about 0.2 s.
- 7company R. Herrera Alegría, "Eclipse-Engine" (eclipseradar.com engine), js/besselian.js README and js/besselian.js read (var/downloads/eclipse_engine_besselian.js). Observer from the geodetic latitude with N = 1/sqrt(1 - e^2 sin^2), height in units of 6378.1366 km, hour angle mu + lambda - 1.002738 Delta T, two-circle lens obscuration, NASA two-branch magnitude, golden-section for maximum and bisection for contacts on m - L1 and m - |L2|.
- 8company Stellarium, src/gui/AstroCalcDialog.cpp, function localSolarEclipse Read (var/downloads/stellarium_AstroCalcDialog.cpp, lines 3379-3445). Observer-level circumstances from the on-the-fly elements: xi, eta, zeta, u, v, the auxiliary angle, the time correction dt = L cos(psi)/n - (u u' + v v')/n^2, magnitude and altitude.
- 9primary NASA GSFC, JSEX element file SE2001.js Read the header (var/downloads/jsex_SE2001.js). Each eclipse is 28 numbers: JD of t0, t0 in hours TDT, tmin, tmax, Delta T twice, then the x, y, d, mu, L1, L2 polynomial coefficients and tan f1, tan f2.
- 10company SR123, "eclipse-2026" interactive simulator, eclipse.js README and eclipse.js read (var/downloads/sr123_eclipse.js). NASA elements for 2026 August 12 with Delta T = 71.4 s, rho sin/cos phi' with 0.99664719 and no height, lens-area obscuration, NASA two-branch magnitude. Cross-checked against NASA and timeanddate by its author.
- 11company Astrodienst, "Swiss Ephemeris Programming Interface", sections on swe_sol_eclipse_how and swe_sol_eclipse_when_loc Read. Documents attr[0] fraction of diameter, attr[1] ratio of diameters, attr[2] obscuration, attr[8] NASA-style magnitude, and tret[0..6] maximum, contacts one to four, sunrise and sunset.
- 12company Swiss Ephemeris, swecl.c (functions eclipse_how, eclipse_when_loc, swe_sol_eclipse_how, swe_sol_eclipse_when_loc) Read (var/downloads/swecl.c). Direct topocentric implementation: DSUN = 1392000 km, DMOON = 3476.3 km, angular separation from unit vectors, two-circle lens obscuration, rmoon scaled by 0.99916 for second and third contacts, bracketing search with find_zero.
- 13unsourced solareclipses.com, "Solar Eclipse Magnitude and Obscuration: classic derivation" Read. Closed form for obscuration from the magnitude M and radius ratio r with b = r + 1 - 2M, correcting a sign error in Sridhar et al.
- 14preprint Sarrvesh Seethapuram Sridhar, S. Pradeep Sundar, I. Kenny Jackson and P. Kannan, "Detection and Analysis of Solar Eclipse", Proc. SPIE 8285 (2011), arXiv:1206.1437 Abstract read. Image-analysis derivation of magnitude and obscuration from eclipse photographs.
- 15company Fred Espenak, "Glossary of Solar Eclipse Terms" (EclipseWise) Read. Definitions of eclipse magnitude, eclipse obscuration and the four contacts.
- 16company Xavier Jubier, "Solar Eclipse Calculator and Diagram Instructions" (v1.0.6, 2007) Read (curl, var/downloads/jubier_calc_instr.html; the host refused the fetch tool). Defines P, V as o'clock, LC limb correction applied to C2 and C3, umbral depth, says refraction is not modelled, limb corrections change C2/C3 by a few seconds, extrapolated Delta T good to better than 0.5 s, and credits Meeus (Elements, Astronomical Algorithms) and Espenak for elements and limb data.
- 17company Fred Espenak, "Key to JavaScript Solar Eclipse Explorer" (EclipseWise) Read. Defines the output columns: magnitude as fraction of diameter, obscuration as fraction of area, (r) and (s) flags for events in progress at sunrise or sunset, duration of the central phase.
- 18primary NASA GSFC, "JavaScript Solar Eclipse Explorer" index page Read. States authorship (O'Byrne, McCann, Espenak), that the Besselian elements and Delta T are those of the Five Millennium Canon, and the -1499 to +3000 validity limit set by Delta T uncertainty.
- 19primary USNO Astronomical Applications Department, "Eclipse Reference List" Read. Lists Chauvenet vol. 1 ch. X, Green (1985) ch. 18, the 3rd edition Explanatory Supplement ch. 11 and Meeus as the references for eclipse computation.
- 20company Crookneck Consulting, "Technical Note: Solar Eclipse Functionality" (The Photographer's Ephemeris) Read. Method from Meeus Elements, the Astronomical Almanac 2023 and the 3rd edition Explanatory Supplement; Espenak's NASA elements; Delta T from Meeus Table 10.A, USNO deltat.data and deltat.preds and the NASA polynomial; smooth Moon with limb effects "typically a few seconds, up to about 15 s"; refraction applied to altitude with circular limbs; SRTM/ASTER elevation.
- 21trade Bill Gray, "Books about celestial mechanics and astronomical calculations" (Project Pluto) Read. States that the heart of "Elements of Solar Eclipses" is the use of Besselian elements, that it contained everything needed to implement eclipse and occultation computations, and that it does not discuss generating the elements.
- 22survey Jean Meeus, "Astronomical Algorithms", 2nd edition (Willmann-Bell, 1998), chapter 54 "Eclipses" Not read for this note. Chapter 54 gives gamma, u and the magnitude of a partial eclipse at greatest eclipse from the lunar phase theory. It does not give the observer-level Besselian reduction. Photo Ephemeris cites its Table 10.A for Delta T before 2006.
- 23survey Jean Meeus, "Elements of Solar Eclipses 1951-2200" (Willmann-Bell, 1989) Not read. The book's local-circumstances chapter is known here only through Jubier's acknowledgement that it supplied the algorithms of his calculator, Photo Ephemeris' method statement, and Bill Gray's review. Its formulation is the Explanatory Supplement one.
- 24primary Explanatory Supplement to the Astronomical Almanac, 3rd edition (Urban and Seidelmann eds., 2013), chapter 11 "Eclipses of the Sun and Moon" Not read. Cited only through the USNO eclipse reference list, which describes chapter 11 as an update of the 1992 eclipse chapter.