Chapter 2
Solar eclipse limits
In the previous chapter we worked out the least geocentric angular separation between the Sun and the Moon. Nobody lives at the centre of the Earth, but the separation computed there is still of use. How small does that angle need to be for a solar eclipse to happen somewhere on the Earth’s surface?
For the original derivation and figures, see Explanatory Supplement section 11.2.4. The figures here try to make that geometry clearer still, and some steps the book passes over are worked through.
We begin with parallax.
The horizontal parallax and the geocentric parallax . The topocentric observer is at .
Geocentric parallax is the angular distance between the topocentric and the geocentric direction to a body, for some observer standing on the Earth’s surface. In other words, it’s how far the apparent position of the body shifts when the observer is not at the centre of the Earth. In figure 2.1 both of those directions are measured against the observer’s zenith . Alternatively, the parallax is the angle between the observer and the Earth’s centre, from the body’s perspective.
From the upper triangle, the zenith distance of the observer converts to the geocentric one
Horizontal parallax is the same thing for an observer who sees the body on the horizon. The two are related:
The derivation, step by step
For the angles at the observer and at the centre in the upper triangle, the law of sines gives
From the lower right triangle, . Putting the two together:
2.1 Partial eclipse
Every solar eclipse is partial at some stage, for those observing it. Here, though, partial means an eclipse in which the Earth passes through the Moon’s penumbra only, and not through the umbra (nor its extension). Take as the limiting case the situation where the penumbra grazes the edge of the Earth. That is the limit between a partial eclipse and no eclipse at all.
The limiting case for a partial eclipse. The axis of the Moon’s shadow misses the Earth, and only the edge of the penumbral cone touches it, at one single point .
Figure 2.2 is marked with the topocentric quantities, the ones observer sees, written with a prime: the apparent radius (semidiameter) of the Sun , the semidiameter of the Moon , and the zenith distances of the Sun and the Moon and . The corresponding geocentric zenith distances are and . The horizontal dashed line in the figure, the edge of the penumbra, is the horizon of the observer . Marked also is , the geocentric angular separation of the Sun and the Moon.
For the topocentric angles:
that is, the Moon stands exactly its own semidiameter above the horizon, and the Sun its own semidiameter below it. The limbs touch each other on the horizon.
For the geocentric angles we now get
The derivation, step by step
Since ,
Next, two small-angle approximations. A topocentric observer is normally nearer the body than a geocentric one, so the apparent radius of the body would be (the augmentation of the radius). With the Moon and the Sun almost on the horizon and far away, however, we set for both.
Second, the apparent radius of each body is only 15 arcminutes, so we set . The same thing put more simply: if the centre of the body (rather than its limb) were on the horizon, , and the parallaxes .
The net effect of both of these on the result () is under 0.1 arcseconds.
Now and likewise for the Sun.
For the geocentric angular separation of the Sun and the Moon we finally get
This was the limiting value, so the condition for a partial eclipse to happen somewhere on the Earth, measured from the centre, comes out as
2.2 Total and annular eclipse
A total eclipse is seen when the observer moves from the penumbra into the cone of the umbra. In an annular eclipse the observer moves into the extension of the umbral cone (the antumbra). These eclipses are called central, if the axis of the shadow cone intersects the Earth.
Let us look at the same kind of limiting cases for these eclipses. The figures now leave out the extra lines, for clarity.
The limiting case between a partial and an annular eclipse.
The limiting case between a partial and a total eclipse.
In the annular limiting case of figure 2.3, the observer is on the point of entering the antumbra. The upper limbs of the Sun and the Moon are on the horizon, with their centres being below the horizon by their semidiameter each.
In the total limiting case of figure 2.4, the observer is on the point of entering the umbra. Now the lower limbs of the Sun and the Moon are on the horizon, with their centres above the horizon, by .
So in the annular case
and in the total case
Whichever the case, the angular separation between the bodies can now be written
Repeating the partial-eclipse derivation for these cases, the absolute value gives us just a single limit for both:
An eclipse can now be classified by the geocentric apparent sizes: if the eclipse is total; if the eclipse is annular.
One special case is worth noting, though. If , particularly when , the eclipse may be hybrid (annular-total): it’s annular at both ends of the track, but turns total in the middle of the Earth, where the observer is nearer the Moon.
As a second special case, in some rare situations an observer near one of the poles may see a total or an annular eclipse even though the axis of the umbra misses the Earth narrowly to the south or to the north. Such an eclipse is a noncentral one.
Finding either of these special cases needs a more careful calculation.
2.3 A worked example
Let us run the previous chapter’s calculation again for the new moons of 2027, this time reading it against these limits.
Code for the limits
from numpy import arctan, cos, degrees
from skyfield import almanac
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
R_EARTH = 6378.1366 # km, IAU equatorial radius
R_SUN = 696000.0
R_MOON = 0.2725076 * R_EARTH # Moon/Earth radius ratio, IAU
ts = load.timescale()
eph = load('de440s.bsp')
earth, sun, moon = eph['earth'], eph['sun'], eph['moon']
t0, t1 = ts.utc(2027, 1, 1), ts.utc(2028, 1, 1)
t, phase = almanac.find_discrete(t0, t1, almanac.moon_phases(eph))
def lonlat(body, ti):
lat, lon, _ = earth.at(ti).observe(body).apparent().frame_latlon(ecliptic_frame)
return lon.degrees, lat.degrees
def wrap(d):
return (d + 180) % 360 - 180
for ti in t[phase == 0]:
a, b = ts.tt_jd(ti.tt - 1 / 1440), ts.tt_jd(ti.tt + 1 / 1440)
ml_a, mb_a = lonlat(moon, a)
ml_b, mb_b = lonlat(moon, b)
sl_a, _ = lonlat(sun, a)
sl_b, _ = lonlat(sun, b)
beta = lonlat(moon, ti)[1]
lam = wrap(ml_b - ml_a) / wrap(sl_b - sl_a)
tan_I = (mb_b - mb_a) / wrap(ml_b - ml_a)
I_ = arctan(lam / (lam - 1) * tan_I)
sigma = abs(beta) * cos(I_)
e = earth.at(ti)
d_sun = e.observe(sun).apparent().distance().km
d_moon = e.observe(moon).apparent().distance().km
s_s = degrees(R_SUN / d_sun)
s_m = degrees(R_MOON / d_moon)
pi_m = degrees(R_EARTH / d_moon)
pi_s = degrees(R_EARTH / d_sun)
partial = s_s + s_m + pi_m - pi_s
central = abs(s_s - s_m + pi_m - pi_s)
if sigma > partial:
verdict = '-'
elif sigma > central:
verdict = 'partial'
else: # the two discs decide the type
verdict = 'total' if s_m > s_s else 'annular'
print(f"{ti.utc_strftime('%Y-%m-%d %H:%M')} {sigma:6.3f}"
f" {partial:6.3f} {central:6.3f} {verdict}") | new moon | partial limit | total/ annular limit | verdict | |
|---|---|---|---|---|
| 2027-01-07 20:24 | 2.862 | 1.412 | 0.923 | — |
| 2027-02-06 15:56 | 0.267 | 1.423 | 0.928 | annular |
| 2027-03-08 09:29 | 2.380 | 1.445 | 0.940 | — |
| 2027-04-06 23:51 | 4.303 | 1.476 | 0.957 | — |
| 2027-05-06 10:59 | 5.006 | 1.509 | 0.975 | — |
| 2027-06-04 19:40 | 4.362 | 1.537 | 0.990 | — |
| 2027-07-04 03:02 | 2.586 | 1.556 | 1.001 | — |
| 2027-08-02 10:05 | 0.145 | 1.561 | 1.004 | total |
| 2027-08-31 17:41 | 2.352 | 1.552 | 1.000 | — |
| 2027-09-30 02:36 | 4.252 | 1.530 | 0.988 | — |
| 2027-10-29 13:37 | 5.002 | 1.499 | 0.971 | — |
| 2027-11-28 03:24 | 4.316 | 1.465 | 0.952 | — |
| 2027-12-27 20:12 | 2.338 | 1.436 | 0.936 | — |
Let us run it once more for 2029, to find partial eclipses.
| new moon | partial limit | total/ annular limit | verdict | |
|---|---|---|---|---|
| 2029-01-14 17:25 | 0.988 | 1.463 | 0.951 | partial |
| 2029-02-13 10:32 | 3.413 | 1.432 | 0.933 | — |
| 2029-03-15 04:19 | 4.809 | 1.412 | 0.921 | — |
| 2029-04-13 21:40 | 4.798 | 1.408 | 0.918 | — |
| 2029-05-13 13:42 | 3.451 | 1.418 | 0.923 | — |
| 2029-06-12 03:51 | 1.198 | 1.441 | 0.935 | partial |
| 2029-07-11 15:51 | 1.350 | 1.473 | 0.954 | partial |
| 2029-08-10 01:56 | 3.550 | 1.508 | 0.974 | — |
| 2029-09-08 10:44 | 4.834 | 1.540 | 0.993 | — |
| 2029-10-07 19:15 | 4.824 | 1.563 | 1.007 | — |
| 2029-11-06 04:24 | 3.458 | 1.569 | 1.011 | — |
| 2029-12-05 14:52 | 1.073 | 1.558 | 1.005 | partial |
Four partial eclipses and not a single central… Perfect occasion for the Solar Eclipse Conference!