Chapter 4
Eclipse seasons
In the earlier chapters we learned to find both solar and lunar eclipses within an interval of our own choosing.
| eclipse | condition |
|---|---|
| partial solar eclipse | |
| central solar eclipse | |
| penumbral eclipse | |
| partial lunar eclipse | |
| total lunar eclipse |
Other ways of stating the conditions
In the age of computing on paper especially, other conditions were used as eclipse criteria: faster ones, and sometimes less exact.
In the situation of figure 1.5, the criteria could be set at the moment of new moon both for the Moon’s height in the vertical direction (the ecliptic latitude) and for the Sun’s distance from the node in the horizontal direction (the segment SN).
Because the inclination of the orbit and the semidiameters and vary a little over time, limits of that kind are not quite exact, unlike the limits above.
These quantities can still be given limits that say when an eclipse is certain and when it is possible. The older edition of the Explanatory Supplement (1961) gives the limits in the vertical direction: a solar eclipse is possible when and certain when .
Espenak gives limits for the Sun’s horizontal distance for solar eclipses ( and ) and for lunar eclipses ( and ).
These horizontal distances are convenient if the eclipse seasons introduced below are to be marked on a calendar.
Let us now combine these calculations for the year 2039.
Code for finding the eclipses of 2039
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(2039, 1, 1), ts.utc(2040, 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, ph in zip(t, phase):
if ph not in (0, 2): # new and full moons only
continue
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)
if ph == 0: # new moon: chapter 2's limits
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 solar'
else:
verdict = 'total solar' if s_m > s_s else 'annular solar'
else: # full moon: chapter 3's limits
pi_1 = 0.998340 * pi_m
f_1 = 1.02 * (pi_1 + pi_s + s_s)
f_2 = 1.02 * (pi_1 + pi_s - s_s)
if sigma < f_2 - s_m:
verdict = 'total lunar'
elif sigma < f_2 + s_m:
verdict = 'partial lunar'
elif sigma < f_1 + s_m:
verdict = 'penumbral lunar'
else:
verdict = '-'
print(f"{ti.utc_strftime('%Y-%m-%d')} {verdict}") | date | result |
|---|---|
| 2039-01-10 | — |
| 2039-01-24 | — |
| 2039-02-09 | — |
| 2039-02-23 | — |
| 2039-03-10 | — |
| 2039-03-24 | — |
| 2039-04-09 | — |
| 2039-04-23 | — |
| 2039-05-08 | — |
| 2039-05-23 | — |
| 2039-06-06 | partial lunar eclipse |
| 2039-06-21 | annular solar eclipse |
| 2039-07-06 | — |
| 2039-07-21 | — |
| 2039-08-04 | — |
| 2039-08-19 | — |
| 2039-09-02 | — |
| 2039-09-18 | — |
| 2039-10-02 | — |
| 2039-10-17 | — |
| 2039-10-31 | — |
| 2039-11-16 | — |
| 2039-11-30 | partial lunar eclipse |
| 2039-12-15 | total solar eclipse |
| 2039-12-30 | — |
Listing the new and full moons together reveals that the eclipses come in some kind of pairs, or more generally in groups, and that the groups recur about every half year. These are eclipse seasons, and they occur at the times when the Sun crosses the descending or the ascending node of the Moon’s orbit along the ecliptic.
By the table above, those crossings should happen roughly in June and December. Let us check by computing when the Sun changes sides with respect to the plane of the Moon’s orbit.
Code for computing the times of the node passages
from numpy import cross
from skyfield import almanac
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
ts = load.timescale()
eph = load('de440s.bsp')
earth, sun, moon = eph['earth'], eph['sun'], eph['moon']
def sun_south_of_orbit(t):
"""Is the Sun on the south side of the plane of the Moon's orbit?"""
r, v = (moon - earth).at(t).frame_xyz_and_velocity(ecliptic_frame)
h = cross(r.km, v.km_per_s, axis=0) # normal to the plane of the orbit
s = earth.at(t).observe(sun).apparent().frame_xyz(ecliptic_frame).km
return (s * h).sum(axis=0) < 0
sun_south_of_orbit.step_days = 5 # the Sun needs half a year between nodes
t, south = almanac.find_discrete(ts.utc(2039, 1, 1), ts.utc(2040, 1, 1),
sun_south_of_orbit)
for ti, s in zip(t, south):
# the Sun passes to the south side at the ascending node
print(f"{ti.utc_strftime('%Y-%m-%d %H:%M')} "
f"{'ascending' if s else 'descending'}") | date | node |
|---|---|
| 2039-06-13 03:32 | ascending |
| 2039-12-05 06:34 | descending |
Let us also see what the situation looks like in practice.
The orbital planes of the Earth and the Moon in 2039. The sizes of the bodies and the radius and tilt of the Moon’s orbit have been enlarged considerably to make them visible, but every direction angle is true. The dashed lines between the eclipse directions are the directions in which the Sun crosses the plane of the Moon’s orbit.
Let us set the year’s eclipses out more compactly, on a timeline.
The new and full moons of 2039 and the eclipses they produce, on a timeline. The widths of the eclipse seasons are marked below the timeline as well. They were determined by computing the Sun’s distance from the node. Within the inner interval an eclipse is certain, within the outer one it is possible. The upper bars are for solar eclipses, the lower ones for lunar.
And what does this kind of presentation look like over several successive years?
Eclipse seasons 2020–2060, one year to a row.
Several interesting things can be seen in this figure. Because the Sun moves counterclockwise against the stars while the nodes of the Moon’s orbit turn clockwise, a little less than a year passes (about 347 days on average) before the Sun reaches the same node again. The corresponding eclipse season therefore comes about 19 days earlier than it did the year before. Depending on how an eclipse season falls relative to the turn of the year, a calendar year can hold either two or three of them. Successive eclipse seasons come on average 173 days apart.
A single eclipse season can hold either 2 or 3 eclipses. Every season has at least one solar and one lunar eclipse. A third one, if there is one, can be of either kind, depending on which kind fell right at the start of the season.
Short, long and more irregular variations in the orbits of the bodies, together with the boundaries of calendar years that are fairly arbitrary as far as eclipses go, make the statistics of eclipses somewhat complicated.
Studying eclipse seasons over a very long span, one could generate endless amounts of statistics, interesting and uninteresting alike. Nobody would have the patience to read a list of trivia dozens of pages long. So let us wait for a few more chapters before taking that up!
Here, though, are some of the more important statistics per calendar year:
- There are at least 4 and at most 7 eclipses
- There are at least 2 solar eclipses, and very rarely as many as 5
- There are at most 2 total solar eclipses, but up to 3 total and annular ones together
- In about a third of the years there is no total solar eclipse
- In about a fifth of the years the Moon reaches no deeper than the penumbra
4.1 Other periods
Studying eclipses turns up plenty of other periods, some famous, some less well known. Long ago, in the age before ephemerides, these periods were what future eclipses were predicted with. The most famous of them is the Saros, which repeats about every 18 years.
Saros and the other periods like it deserve a chapter or two of their own. Before taking them up, though, it is worth learning modern prediction from a rather more concrete angle.
So far we have dealt with when an eclipse of some kind can happen somewhere on the Earth. In the next chapters we really begin calculating what an eclipse looks like at a given location on the Earth, and where one would have to travel to see it as, say, total.