Articles | Volume 22, issue 3
https://doi.org/10.5194/cp-22-647-2026
https://doi.org/10.5194/cp-22-647-2026
Research article
 | 
27 Mar 2026
Research article |  | 27 Mar 2026

On the computation of several “insolation” quantities relevant to climatology or planetology

Didier Paillard
Abstract

There are many possible “insolation” quantities. When looking for some astronomical forcing, geologists, paleoclimatologists and climate modellers are often limited by the available software or web sites that compute or distribute some specific time series, often with a quite limited documentation. Furthermore, the astronomical forcing has several subtleties that some people might not be aware of, especially the key difficulty of defining a calendar. This paper aims therefore at presenting and documenting a rather complete python library designed to compute many astronomical and insolation quantities relevant to climate: standard ones like for instance daily insolation; less classical ones like integrated insolation over time or over space (or both); but also new quantities that are sometimes discussed in the literature on a qualitative basis, like the semi-precessional forcing at low latitudes, something which involves computing minima and maxima of the solar forcing over the year, a surprising complex endeavour when looking at generic planetary situations with arbitrary eccentricity or obliquity. Overall, the aim is here to provide not only a useful toolbox for scientists, but also a pedagogical introduction of some subtle difficulties for students. This is done using the widely used computer language python so that the code is easy to understand, to reuse or modify for various different contexts.

Share
1 Introduction

The role of orbital parameters on Earth's climate has been discussed since the discovery of glacial cycles in the 19th century. It can be easily shown that the three astronomical parameters relevant for computing the incoming solar radiation are the eccentricity (e) of the Earth's orbit, the tilt or obliquity (ε) of the Earth's axis with respect to the orbital plane, and the climatic precession angle (ϖ), which represents the relative angular position of the seasons with respect to the perihelion (see for instance: Paillard, 2010; Berger et al., 1993). From these three numbers, it is possible to compute many “insolation” quantities, for instance, at different locations, different seasons, integrated over some time or spatial ranges, eventually above some threshold, or when they reach some maximum or minimum value. Indeed, for most paleoclimatic questions, we do not have a full deterministic understanding of the processes involved and it might be relevant to choose one or the other “insolation” quantity as a first approximation of the corresponding full actual astronomical forcing.

The term “insolation” usually refers to the solar irradiance (measured in W m−2), ie. the power received by the Earth, per unit area, at the top of the atmosphere. But we are interested here in many possible different “flavours” of this quantity, through averaging over the day, over some season, over some spatial area, or by taking some specific extrema. In order to avoid confusion, we will use the term “insolation” between quotes in a loose sense, while using much more specific vocabulary and notation when necessary. Depending on the needs, the environments, the preferred platforms or languages of the user, several software packages are available. Below (in Table 1) is a small and not exhaustive list of some possible options to compute easily such insolation quantities.

Table 1A short, non-exhaustive list of available software for insolation computations. The (*) symbol in the “caloric season” column is meant to highlight that the software might not be able to compute the insolation over caloric seasons for all possible orbital configurations (in particular at low-latitudes with multiple maxima) but was designed mostly for the ice age problem (high latitudes and Earth-like parameters) as discussed in the main text (see for instance Fig. 10).

Download Print Version | Download XLSX

Concerning the growth and decay of the large Northern hemisphere ice sheets in the context of Quaternary glaciations, several different suggestions have been put forward (see Paillard, 2015, for a review). Since the 19th century, it was obvious that a global mean insolation was not relevant to climate, and for this reason, astronomers and physicists were not in favour of any astronomical theory of climate. But since the key phenomenon involves ice-sheets at high northern latitude, it was nevertheless suggested that a much more relevant quantity should be some high northern latitude insolation forcing. If earlier attempts were focussed on winter insolation, Milankovitch (1941) emphasized that ice-sheet evolution should be linked mostly to summer temperatures and he therefore advocated the use of some summer high northern latitude insolation forcing. More precisely, he defined the “caloric summer” as being the half-year during which the insolation, for any specific day, is larger that the insolation during the other half, the “caloric winter”. He then computed manually, using series expansions, the corresponding “insolation” quantities at different latitudes over the last 500 kyr. Since the 1970's, a more popular definition of “summer insolation” is the daily insolation at some specific date: either at the summer solstice which is well-defined astronomically or sometimes at mid-july or some other specific date which might critically depend on a choice of a calendar (Berger, 1978a). Still, the use of the averaged insolation over some period of the year has always been considered useful (Loutre et al., 2004). More recently, it was also suggested that computing the sum of incoming solar radiation over some given threshold could be more relevant to the (threshold) phenomenon of ice freezing/melting (Huybers, 2006).

A mistake frequently made by students or non-specialists is to compute the average or integrated insolation over some season, or any other time period, by simply computing the mean of daily insolation values within the interval. In most cases, the result is not what is intended. Indeed, it is critical to account for the varying duration of seasons when the precession parameter changes, something which requires dedicated methods and softwares (see Table 1). This varying speed of the Earth on its orbit corresponds in fact to the actual precessional forcing, since it can be easily demonstrated that the integrated amount of energy received between two orbital location does not depend on precession. A rather similar mistake is to compute, for instance, some northern hemisphere autumnal (September) insolation using the daily insolation values exactly a half-year after the NH-spring (March) equinox, something that is sometimes done implicitly by some software. In both cases, these mistakes arise from the difficulty to define a calendar when the precession parameter is widely different from today. Indeed, the usual implicit choice is to define 21 March as the NH-spring equinox, while the number of days within each astronomical season varies significantly. Astronomers use a less ambiguous vocabulary: they define the “true longitude” of the Earth as being the angular position with respect to the vernal point (NH-spring equinox) and the “mean longitude” of the Earth as the position it would have if the Earth's movement were regular: in other words, “mean longitude” stands for “time of the year”. Obviously climate models are using “time” or “mean longitude” in order to compute their radiative forcing. But when looking at paleoclimatic data, it usually makes more sense to use “true longitude” to better capture some specific orbital configuration.

Computing correctly integrals or averages of insolation, over some season or some time interval, is in fact what Milankovitch used as a definition of “caloric seasons” and it certainly still stands as a quite useful quantity to interpret paleoclimatic changes. But computing correctly spatial averages is also very useful and often disregarded. For instance, in climate models, a usual practice is to use “mid-point” values as a surrogate for average values. This is probably a reasonable approximation when the grid-size is “small enough”, but for lower resolution models, such an approximation can be widely different from the true average, with errors of a few percent (larger than the astronomical changes) or even several tens of percent at some specific locations and time. Instead, the correct integral formulas are quite simple as I will show below and they could be easily implemented in models.

Beyond the question of Quaternary cycles, there are many other climatic questions that are not directly linked to northern hemisphere summer forcing. For instance, at low latitudes the precessional forcing is dominant and power spectra of paleoclimatic records often contain some semi-precessional component. It is very likely that this results from some climatic non-linearity and a corresponding amplification of the first harmonic of the precessional forcing. But it might also be possible, as suggested in some publications, that this semi-precessional component originates directly from the astronomical forcing (McIntyre and Molfino, 1996). It is therefore useful to provide “insolation” time-series showing such a component, the simplest candidate being the minimum or maximum values of daily averaged insolation. Indeed, within the tropics the seasonal insolation variations are small, but there are possibly two maxima and two minima. The largest maxima can occur either close to one equinox or the other, depending on precession. At some low-latitude locations the precessional astronomical forcing therefore induces a semi-precessional “insolation” forcing when looking at extremal values of insolation (Berger et al., 1997). But interestingly, this phenomenon may partly or entirely disappear when obliquity is sufficiently low and eccentricity sufficiently high, as we will demonstrate later in this paper. Besides, computing these extrema is also a step to compute precisely the insolation above some threshold, or over caloric seasons, for all possible astronomical situations. Overall, it turns out that the computation of minima and maxima of daily insolation at some given latitude for any possible value of obliquity and eccentricity is a non-trivial problem that will be fully examined below.

2 Basic concepts and formulas

The software and mathematical formula presented here are quite generic and not restricted to Earth. Still, we are assuming that the rotation of the planet is much faster than its revolution around its star. In other words, we are assuming that the planet does not move on its orbit when computing values for some specific day. This is certainly valid for Earth, but also certainly not valid for planets whose rotation is tidally locked, like for instance Mercury. Using this assumption, a main focus of the paper will be to compute various seasonal insolation quantities for some given configuration of the three astronomical parameters (eccentricity e, obliquity ε, climatic precession angle ϖ).

2.1 Astronomical parameters

The library “astro.py” provides a useful unified interface to several astronomical solutions for the past and future parameters of the Earth: Berger (1978a), Laskar et al. (1993, 2004b, 2011), as well as the one used by Milankovitch in his early publications (1920): Stockwell-Pilgrim (1904). It thus provides the astronomical parameters required to compute the various different flavours of “insolation” described in the following. More specifically, the Berger (1978a) solution is a trigonometric approximation whose validity is quite restricted and should probably not be used beyond about one million years. Just as the Stockwell-Pilgrim (1904) or the Laskar et al. (1993) solutions, it is provided here mostly for historical reasons, in order to illustrate the influence of these various solutions on the results. The current reference solution is the Laskar et al. (2004b) one. It is available from 101 Myr in the past to 21 Myr in the future, though its validity is probably questionable beyond 40 or 50 Myr (see Laskar et al., 2004, 2011). The Laskar et al. (2011) solution provides only eccentricity values and cannot be used for insolation computations.

Orbital parameters of planet Mars are also available through the solutions Laskar et al. (2003, 2004a) and from 21 Myr BP to 10 Myr AP. Indeed, though the paper is mainly focussed on the Earth, the provided libraries can be used on any “fast rotating” planet, and can directly be used to study, for instance, past Martian climates.

2.2 Daily insolation

To discuss seasonality, we need to define the position of the Planet on its orbit: one possibility is to use the angular position, or true longitude λs usually measured from the NH-spring (or march) equinox; the other possibility, discussed in the next paragraph (Sect. 2.3), is to use the time of the year, though this requires some calendar. We will furthermore look at insolation quantities at different latitudes φ. In the following, we will most of the time integrate over the rotation of the Planet, which is measured by the hour angle H (with H=0 corresponding to noon). It can be shown that the instantaneous insolation WI is given by WI=Sar2cosz, where S is the solar constant (approximately 1365 W m−2 for the Earth), a is the Earth's orbit semi-major axis, r the Earth-Sun distance, and z is the solar zenith angle (angle between the Sun and the vertical). This can be written as (see for instance Berger, 1978a):

(1) W I = S a r 2 sin φ sin δ + cos φ cos δ cos H

where δ is the declination of the Sun, given by sin δ=sin εsin λ.

More precisely, the instantaneous insolation WI is given by Eq. (1) only if it is positive, i.e. when the Sun is above the horizon. By solving WI=0 or cos z=0, we get the hour angle h of sunrise or sunset: cosh=-tanφtanδ when it exists, which means when -1tanφtanδ1. Otherwise, we have h=0 during the polar night and h=π during the polar day.

Obtaining the daily averaged insolation WD=12π-hhWIdH is rather straightforward:

(2a) W D = S a r 2 1 / π h sin φ sin δ + cos φ cos δ sinh

In these formulae, the Earth-Sun distance r is given by the polar equation for an ellipse: r=a1-e21+ecosv, with v (the “true anomaly”) being the location of the Earth on its orbit with respect to the perihelion: v=λ-ϖ-π (λ is the location of the Earth on its orbit with respect to the vernal point in a geocentric view, ϖ is the location of the perihelion with respect to the vernal point in an heliocentric view, therefore we need to add a half-turn π to account for the change of referential). This leads to:

(2b) W D = S 1 - e cos λ - ϖ 1 - e 2 2 1 / π h sin φ sin δ + cos φ cos δ sinh

It can be useful to provide a simple formula for h, valid even in polar regions. This can be achieved by defining:

s=max0,1-sin2φ-sin2δ and p=sin φsin δ (with sin δ=sin εsin λ).

Then we always have: h=arccos-ps+p2, with s=0 during the polar day or polar night and s=cosφcosδsinh.

The above formula for WD becomes:

(2c) W D = S 1 - e cos λ - ϖ 1 - e 2 2 1 π p arccos - p s + p 2 + s

The daily insolation WD is therefore the product of the solar constant S, with a factor linked to the Earth-Sun distance involving the eccentricity e and the Earth's location with respect to the perihelion (λϖ), and with a third “geometric” term depending on φ and δ, in an entirely symmetric fashion, corresponding to the averaged zenith angle 〈cos z. More precisely, this last term is:

1πparccos-ps+p2+s=12π-hhcoszdH=hπcosz

In other words, the daily insolation can be written as WD=Sar2hπcosz, where we clearly see that the “geometric” term depends both on the average height of the Sun above the horizon 〈cos z and also on relative day length hπ. The astronomical parameters (e, ε, ϖ) have different roles in the daily insolation: obliquity (ε) influences only this last geometric term hπcosz while eccentricity and precession (e, ϖ) intervene only through the distance factor ar2.

2.3 Calendar

As mentioned in the introduction, the definition of a calendar can be a source of difficulties. Indeed, our usual calendar is designed to follow the seasonal cycle and it seems natural to us that equinoxes occur near the 21 March and 21 September, and solstices near the 21 June and 21 December. But this approximately applies only for our current astronomical setting, with a slightly shorter winter (DJF = 90.25 d) and a slightly longer summer (JJA = 92 d) or 186.5 d between March equinox and September equinox, but 178.5 d between the September and March ones. This corresponds to Earth's perihelion being currently reached in winter (the Earth's movement being then faster), as well as to a rather small difference in season durations, in accordance with the current small eccentricity. But we should remind that we have two different ways to account for the seasonal move of the Earth on its orbit: either its true angular position – i.e. the “true longitude” λ already introduced in the preceding section – or the elapsed time from some reference position (usually arbitrarily taken as the NH-spring location) – i.e. the “mean longitude” L. Obviously, applying our current calendar to very different orbital configuration can lead to some serious misinterpretations and it is therefore critical to understand this key difficulty.

Applying Kepler's 2nd law, it is rather simple to translate the true angular position (true longitude λ) into the time needed to reach it (mean longitude). This conversion can be obtained more easily when measuring time and angle from the perihelion. The true angular position is then called the “true anomaly” v as already introduced above (with v=λ-ϖ-π) and the “time” from this perihelion position is called the “mean anomaly” M=2πT(t-tPer) measured in radians, with T=1 year. To be very precise, T should be one anomalistic year, i.e. the (averaged) time for the planet to travel from perihelion to perihelion. But for the Earth, the difference with our civil year (based on the tropical year) is very small. Kepler's 2nd law states that the line joining Earth and Sun sweeps equal areas of space during equal time. This can be written as:

r2dvdt=2πTa21-e2

Using the equation of the ellipse r=a1-e21+ecosv, we get:

a21-e22dv1+ecosv2=2πTa21-e2dt

Using the change of variables tanE2=1-e1+etanv2, we finally obtain the famous Kepler equation:

(3) E - e sin E = M

where E is traditionally called the “eccentric anomaly”.

To summarize, knowing the true longitude λ, we also know v and therefore also E. The corresponding mean anomaly, or “time” M (measured from the perihelion) is then directly given by Eq. (3). The mean longitude L (from the NH-spring equinox) can also be obtained by applying the same procedure to λ0=0 to obtain the mean anomaly of the reference point M0=-2πTtPer, the mean longitude being finally the difference between these two mean anomalies L=M-M0. More generally, we can compute in this way the time L2-L1=M2-M1 needed to move from one orbital position λ1 to another one λ2. The length of seasons may itself be a quantity of interest for paleoclimatic studies, as discussed in Berger et al. (2024). In the library, this corresponds to the routine “length_of_season”.

The reverse is also true: from the mean longitude L (or true time using a given calendar), we can compute the true longitude λ. First, like before, we need to compute the mean anomaly M0 of the reference point to obtain the mean anomaly M=L+M0, then solve the Kepler equation to get the “eccentric anomaly” E, then use the change of variable to obtain v, and finally deduce λ=v+ϖ+π. This corresponds to the routine “trueLongitude”. For instance, climate models are based on differential equations, which means that they compute climate quantities as functions of elapsed time. Therefore, they need to use some specific calendar to represent “time” within the annual cycle, and then transform this time into a true orbital position λ. This is precisely what this routine is doing.

When computing the daily insolation at some specific “season” or “time of the year”, it is critical to understand the difference between “true longitude” (for example, the astronomical seasons) and “time elapsed since some reference point” (in the way our calendar is built). As shown in Fig. 1, this can make a huge difference. Traditionally, the “reference point” is the NH-spring equinox, which is associated to 21 March. Indeed, march was the first month of the year in the Julian calendar since spring is naturally associated with the beginning of the year. This (often implicit) convention means that the NH-autumn equinox can vary widely around 21 September (usually defined as being about half a year after 21 March), depending on precession.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f01

Figure 1Daily insolation at 65° N for “21 September”: In blue, it corresponds to the true (astronomical) september equinox, ie. true longitude λ=π. In orange, it corresponds to half a year after the reference point of the calendar (conventionally the spring equinox) ie. mean longitude L=π. As shown on this example, it is critical to understand the difference between “true longitude” and “time” (or “mean longitude”), since the amplitude and phase are very different between the two results.

Download

3 Some integrals

3.1 Integrals between true longitudes

The daily insolation can be a good “proxy” for some phenomena, but it seems physically more relevant to integrate this forcing between two orbital locations that can be defined either by their true longitude or by some time interval. For instance, it might be interesting to define a northern hemisphere “summer” forcing by integrating the forcing between the spring and autumnal equinoxes: λSpringλAutumnWDdt. This would give an energy (J m−2) received over a non-constant time interval as explained above. A better option would be to use the associated averaged insolation (W m−2), simply by dividing by the corresponding duration:WS=1(tAutumn-tSpring)λSpringλAutumnWDdt In fact, Milankovitch used another possibility (Milankovitch, 1941; Berger, 1978b), which is to integrate the daily forcing over a fixed given duration, exactly half a year. More precisely, it is possible to find a threshold value such that the insolation exceeds it during half a year (the “caloric summer”) while remaining below it during the other half (the “caloric winter”) and to compute the corresponding integrated insolation over these two periods (J m−2), or equivalently the corresponding averaged insolation WCalS and WCalW (in W m−2) since the duration is by definition a constant (half a year). It is critical to note that WS and WCalS are in fact entirely different quantities as illustrated below on Fig. 2.

Though this definition is quite simple, the precise computation of WCalS is difficult in the generic case, in particular when there are several maxima or minima of insolation during the annual cycle. This will be discussed later on in details in Sects. 4 and 5 below. Still WCalS is most often used in the context of Quaternary climates and ice ages, for Earth-like situations at rather high latitudes. Then, the “caloric summer” is extremely close to the half-year time period centered at the summer solstice as will be shown later (see Fig. 10). For such situations, we can therefore compute a very good approximation of WCalS as WCalSWCalSSol=1T/2λSummer-year/4λSummer+year/4WDdt. Similarly, we can also define the winter counterpart as WCalWWCalWSol=1T/2λWinter-year/4λWinter+year/4WDdt.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f02

Figure 2Averaged NH-summer insolation defined in two different ways. In blue WS the insolation averaged between the march and the September equinoxes (between the true longitudes 0 and π). In orange WCalSSol (a very good approximation of WCalS) the insolation averaged over half a year centered at the summer solstice, ie. the “caloric summer” defined by Milankovitch. The blue curve contains much more precession and is quite similar to the summer solstice daily insolation. The mean “caloric summer” insolation contains relatively more obliquity.

Download

But before providing formulas for these quantities, it is worth emphasizing that the integrals are “time” integrals. It is therefore not correct to add the daily insolation taken at some different positions nor to take the corresponding average. In contrast, it is necessary to perform some specific computation using suitable software packages (see Table 1). In other words, λ1λ2WDdt should not be confused with λ1λ2WDdλ. Indeed, here again it is critical to account for the non-uniform motion of Earth on its orbit since dλ/dt is not constant. We need to use, once more, Kepler's second law r2dvdt=2πTa21-e2. This gives:

J12=λ1λ2WDdt=T2πa21-e2λ1λ2WDr2dλ

With WD=Sar2hπ 〈cos z, this leads to:

J12=λ1λ2WDdt=ST2π21-e2λ1λ2hcoszdλ

Interestingly, for fixed values of (λ1,λ2) we can note that the climatic precession angle (ϖ) has entirely disappeared from this expression, since it is involved only in the term ar2 – but we still have obliquity (ε) in h〈cos z and eccentricity (e) in the denominator. In other words, the amount of energy J12 received between two given true longitude (λ1,λ2) does not depend on precession. For WS=1(tAutumn-tSpring)λSpringλAutumnWDdt, we do recover the precessional forcing, but only thanks to the division by the time interval (tAutumntSpring) since the conversion between true longitude and time depends on precession and eccentricity. In the caloric summer WCalSSol=1T/2λSummer-year/4λSummer+year/4WDdt, the longitudes of the integration interval λSummer-year/4,λSummer+year/4 are not fixed, but depend themselves on precession. These two possible definitions of “summer” lead to significant differences as illustrated on Fig. 2. All these remarks demonstrate how the precessional forcing is intimately linked to the varying speed of Earth on its orbit and Kepler's 2nd law.

We can more generally define:

W12=1(t2-t1)J12=1(t2-t1)λ1λ2WDdt=S(t2-t1)T2π21-e2λ1λ2hcoszdλ=S(t2-t1)T2π21-e2λ1λ2hsinφsinδ+cosφcosδsinhdλ

After some computation, we can express the results using elliptic integrals (e.g. Loutre et al., 2004; Berger et al., 2010):

(4) W 12 = S ( t 2 - t 1 ) T 2 π 2 1 - e 2 sin φ sin ε - h cos λ λ 1 λ 2 + cos φ E ( λ , k ) λ 1 λ 2 + sin φ tan φ F ( λ , k ) λ 1 λ 2 - cos 2 ε Π λ , sin 2 ε , k λ 1 λ 2

where k=sinεcosφ and Fλ,k,E(λk), Πλ,sin2ε,k are the elliptic integrals (Legendre notation) of the 1st, 2nd and 3rd kind:

Fλ,k=0λdθ1-k2sin2θEλ,k=0λ1-k2sin2θdθΠλ,n,k=0λdθ1-nsin2θ1-k2sin2θ

But the functions F(λk) and Π(λsin 2εk) are not always well-defined in our domain of interest and it is preferable to compute directly the sum Pλ,sin2ε,k defined by:

Pλ,n,k=Fλ,k-(1-n)Π(λnk)=0λncos2θdθ1-nsin2θ1-k2sin2θ

All these elliptic functions are evaluated using Carlson integrals, using the SciPy library (Virtanen et al., 2020), for efficiency and for larger domains of definitions (in particular when k>1). Finally, the time interval (t2t1) can be computed as explained in the above section (using Δt= length_of_ season(trueLon1, trueLon2, e, pre)). This gives W12 in Eq. (4). The approximation of the “caloric summer” insolation WCalSSol can be obtained similarly by first computing the true longitudes λSummer±year/4 and then using again Eq. (4).

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f03

Figure 3Left: Present-day june solstice daily insolation on a latitude grid with a 10° resolution, using mid-point values (WD in blue) or computing the correct averaged values (WDAB in orange). Middle: The difference WD−〈WDAB can be as high as a few W m−2, comparable to some astronomically induced changes. Right: The relative error WD-WDAB/WDAB can be very high at latitudes near the polar night transition.

Download

3.2 Integrals between latitudes

It can be also sometimes useful to integrate the daily averaged insolation between two different latitudes:

WDab=1sinφb-sinφaφaφbWDcosφdφ

This can of course be done numerically, but there is a strong risk to obtain unreliable values near the discontinuities when sunrise or sunset appear or disappear. Furthermore, the corresponding analytical integrals are not difficult to obtain and are certainly more precise and reliable. I have not found such expressions in the literature and I think it could be useful to use them. This is for instance the case for low-resolution models: indeed, quite generally, models use the “mid-grid point” values instead of a numerical computation as an approximation for the true average. This might lead to quite significant errors, as show on the example below (Fig. 3). More generally, when comparing models that have been run at different resolutions, that are using the same solar forcing but at different “mid-grid points”, it should be emphasized that using simply a “mid-point value” may lead to wrong interpretations, since the actual forcing applied is not the same. Specifically, this might be the case at high latitudes near the polar night limit, like for instance in the context of Quaternary glaciations. Furthermore, the correct integrals or averages are easy to obtain. Concerning the daily insolation, we have:

WDAB=SsinφB-sinφAar2φAφBhπcoszcosφdφ

We can introduce the function g(x,y) through:

gsinδ,sinφ=hπcosz=1πparccos-ps+p2+s

where, as defined in Eq. (2c): s=max0,1-x2-y2; p=xy; x=sin δ; y=sin φ.

Then:

WDAB=SsinφB-sinφAar2φAφBgsinδ,sinφcosφdφWDAB=SsinφB-sinφAar2sinφAsinφBgsinδ,ydy

A primitive of g(x,y) is then h(x,y):

hx,y=0ygx,ydy=x-14+12πarccos-ys+y2+ys-arccos-ps+p2x(1-y2)

which gives the formula:

(5) W D A B = S sin φ B - sin φ A a r 2 h sin δ , sin φ B - h sin δ , sin φ A

We can also similarly obtain rather comparable expressions for the insolation integrated over some specific sun hour angle instead of the whole day: WH1H2=2πH2-H1H1H2WIdH and WH1H2AB=1sinφB-sinφAφAφBWH1H2cosφdφ

The corresponding routines are available in the library “inso.py” as described in Appendix A.

3.3 Integrals between true longitudes and latitudes

For completeness, the library also includes the integral both over latitude and over some seasonal range:

W12AB=1sinφB-sinφAλ1λ2φAφBWDcosφdφdλ

We have:

(6) W 12 A B = 1 sin φ B - sin φ A S 2 π 1 - e 2 T ( t 2 - t 1 ) G λ , φ , ε λ 1 λ 1 φ A φ B

where Gλ,φ,ε is the primitive given by:

Gλ,φ,ε=12{G0λ,φ,ε+sinφcosφEλ,k-Pλ,sin2ε,k-cos2φsinεπ2-hcosλ+π2sinε1-cosλ

with:

G0λ,φ,ε=0λMaxarctantanφ1-k2sin2θdθ+signφπ2λ-λMaxλMax=minλ,arcsin1k
https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f04

Figure 4Distribution of daily insolation as a function of “season” and latitude (both in radians). The “season” is measured through the true longitude of the Earth, with 0 being the NH-spring equinox. Polar night and day are delimited at high latitudes by a black line. In red, φExt(λ) indicates the location of minima and maxima. The blue dots correspond to the boundary values of the red curve in the polar day and night domains and to the points λM where φExt(λM) is extremal: these points λM (“turning points”) give us the latitudes φM=φExt(λM) beyond which the number of extrema changes. The curve φExt(λ) usually consists of two separate branches: a “polar-day-to-polar-day” branch (H-branch) and a “polar-night-to-polar-night” one (L-branch). Top-left: for present-day values of the orbital parameters. We note that the L-branch of φExt(λ) has two “turning points” λM at low latitudes (blue points), therefore a double maximum insolation near the equator between the corresponding two latitudes φM=φExt(λM). Top-right: when using martian orbital parameters at 10 kyr BP, this low-latitude double maxima disappear for slightly higher eccentricity. For even higher eccentricity (bottom left) and/or obliquity (bottom right) the situation can be more complex, since the L-branch can reach the polar day region and splits into two parts (bottom left) or the curve φExt(λ) may have more minima and maxima (λM,φM) than today (blue points, bottom right). Note that the bottom panels correspond to fictitious planets: insolation is then expressed in percentage of the “solar” or “stellar” constant.

Download

4 Minima and maxima of daily insolation

In the scientific literature, I have not found any systematic mathematical study of the minima and maxima of the daily insolation WD for a generic planet, at a given latitude and for arbitrary astronomical parameters (e, ε, ϖ). Still, extremal values are likely to be useful when discussing climatic implications. A rather straightforward procedure could be to compute numerically the minimum or maximum of WD as a function of λ to get directly the extremum. This may be valid in some specific context, when the number of extrema is known (or assumed known) in advance, but it is likely to fail when we do not know a priori how many maxima and minima there is. This is in particular true at low latitudes where we can shift from one annual maximum (the typical situation at mid-latitudes) to two maxima (the typical situation at the equator). The transition between these two cases depends strongly on the astronomical parameters in a non-trivial way. We can even identify earthly situations (low obliquity, high eccentricity) where the second maximum at the equator disappears. In the generic setting, there are many different possibilities with up to three or more maxima.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f05

Figure 5Classification of the different possibilities for the L-branch (on the left) and for the H-branch (on the right) as a function of eccentricity and cosine of obliquity. Earth's present-day situation is the blue star and its past 100 Myr range is shown as a blue dashed box. Mars' present-day situation is the red star and its past 20 Myr range is represented by the red dashed box. For the L-branch, we can have 0, 1 or 2 critical values (ϖC,λC) in the intervals -π2,π2, corresponding to the different domains named L0, L1 and L2 shown on the figure, separated by colored curves. The L1 domain can itself be separated in 2 sub-domains (L1a, L1b) : in L1a we can have 2 or 4(λM,φM) solutions, while in L1b we can have 2 or 0 such solutions. In L0 there is always 2 solutions for (λM,φM) and in L2 we can also have 2 or 0 such solutions. For the H-branch, the situation is more complex with 14 different cases: we can have 0,1,2,3 or even 4 critical values (ϖC,λC) in the intervals -π2,π2, therefore the names of the domains H0 to H4. Domains H3a and H4b are extremely small, since the blue and orange lines (labelled eHmin1 and eHmax) are almost overlapping (see close-up in Appendix B). In the H0b domain, there is always 2 solutions for (λM,φM) which implies that there is some “hidden” extrema very close to the “polar-day” limit.

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f06

Figure 6Minimum and maximum daily insolation at the equator during the last 500 kyr. There is a clear semi-precessional signal since the maximum switches between times near the march equinox and times near the September equinox and, similarly, the minimum switches between solstices.

Download

To obtain these extrema, the first step is to compute the mathematical derivation of WD with respect to λ.

WDλ=0=WD2esinλ-ϖ1-ecosλ-ϖ+cotλ1-11-sin2εsin2λ1-hcoth

The extrema are therefore given by:

1-hcoth=11-sin2εsin2λ1+2esinλ-ϖ1-ecosλ-ϖtanλ

where the function h1-hcoth is strictly increasing for h between 0 (polar night) and π (polar day) and varies between 0 and infinity. It is therefore possible to define its inverse hINVx:xh,wherex=1-hcoth for any x≥0. Which leads to:

h=hINV11-sin2εsin2λ1+2esinλ-ϖ1-ecosλ-ϖtanλ

But h is defined as cosh=-tanφtanδ=-tanφsinεsinλ1-sin2εsin2λ. We can therefore directly obtain the location of extrema using the equation:

(7a) φ = φ Ext λ , e , ε , ϖ = arctan - 1 - sin 2 ε sin 2 λ sin ε sin λ cos h INV 1 1 - sin 2 ε sin 2 λ 1 + 2 e sin λ - ϖ 1 - e cos λ - ϖ tan λ

plotted as red curves on Fig. 4 below.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f07

Figure 7The semi-precessional signal remains visible up to latitudes of about 10° but disappears for higher latitudes as shown above when looking at the maximum daily insolation at 10 and 15° N.

Download

This is valid only when we have sunrise and sunset (for 0<h<π). Of course, during the polar night (h=0), we are constantly at a minimum (WD=0). The curve φExt(λ,…) will therefore intersect the polar-night domain precisely at λ=π2 and at λ=3π2 (the solstices) with φExt being then the latitude of polar circles. During the polar day (h=π), the maximum (or possibly the extrema, see below) occur when:

(7b) 1 + 2 e sin λ - ϖ 1 - e cos λ - ϖ tan λ = 0

This condition does not depend on latitude (nor on obliquity) and we can rather easily solve it to obtain the true longitude λPolarDay of the extrema for the polar day: this leads to a 4th degree polynomial equation (see Appendix B1) with usually 2 real solutions corresponding to the polar-day maxima in both hemispheres. But for e>1/3, we can also obtain 4 solutions as shown on Fig. 4 (bottom left).

Unfortunately, Eq. (7a) gives us the latitude φExt of minima and maxima of the daily insolation WD as a function of orbital position, or true longitude, λ. But our goal was to do the opposite: for a given latitude, finding the longitude, or time of the year, when the daily insolation WD is extremal. For a given latitude φ, we thus need to solve in λ the Eq. (7a) φ=φExtλ,e,ε,ϖ in order to obtain the longitudes λExt. The key difficulty is, again, to know how many solutions this equation may have, as illustrated on Fig. 4.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f08

Figure 8The maximum insolation at 65° N over the last 500 kyr occurs for true longitudes λExt close to, but not equal to the summer solstice (λ=π2 or 90) as shown on the left. The corresponding insolation difference (right panel) is quite small, but not entirely negligible.

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f09

Figure 9Normalized summer insolations at 65° N defined in various ways. In blue (bottom) the daily summer solstice insolation. In orange, the integrated insolation above 400 W m−2. In green, the caloric summer insolation. In dotted red, the integrated insolation above 350 W m−2. In purple, the integrated insolation above 300 W m−2. In brown, the annual averaged insolation. The integrated insolation above 350 W m−2 is almost identical to the caloric summer insolation (green and dotted-red lines).

Download

For Earth-like astronomical parameters, we can note that φExt as function of λ has two well-separated branches: a first one extending from polar night to polar night, that provides possible multiple extrema at low latitudes (latitudes between the blue dots on this branch) – it is referred to as the L-branch in the following – and a second branch from polar day to polar day – the H-branch –, that appears to generate only one maximum at any given latitude, something which will in fact be proven wrong in the following. Figure 4 also shows that the situation might become much more complex for other astronomical parameters (large eccentricity and/or large obliquity). In order to understand under which criteria these different possibilities may arise, and in order to find all possible extrema, we have performed a systematic study as summarized below.

We note that: φExtλ+π,e,ε,ϖ+π=-φExtλ,e,ε,ϖ. We also have: φExt-λ,e,ε,-ϖ=-φExtλ,e,ε,ϖ. We can thus limit our study to some interval like, for instance, ϖ-π2,π2 and λ0,π2 for the L-branch and ϖπ2,3π2 and λ0,π2 for the H-branch.

To get all roots λExt of Eq. (7a), we need to perform the mathematical derivation of φExtλ,e,ε,ϖ with respect to λ and thus identify λM,φM=(λM,φExtλM,e,ε,ϖ) that satisfy both Eq. (7a) but also λφExtλ,e,ε,ϖ=0, represented by blue dots on the above figures. These points (λM, φM) are called “turning points” in the following. After some computation (see Appendix B2), this leads us to the equation in λ:

(8) 0 = cos 2 ε + cot 2 λ cot 2 h - ( 1 + 2 e 2 e - cos λ - ϖ - e 1 - e cos λ - ϖ - 3 e cos λ - ϖ - e 1 - e cos λ - ϖ 2 1 - e 2 cos 2 ε + cot 2 λ 1 + cot 2 λ 1 1 + tan λ 2 e sin λ - ϖ 1 - e cos λ - ϖ

with h=hINV11-sin2εsin2λ1+2esinλ-ϖ1-ecosλ-ϖtanλ as before.

But solving Eq. (8) might also gives multiple solutions for λM and we need to go another step further and locate the “critical” values λC that correspond to double-roots of Eq. (8). This is done (again) by taking the derivative of Eq. (8) and looking for the values of ϖ for which both Eq. (8) and its derivative can simultaneously be true. Knowing the number of such “critical” values for (ϖC,λC), we can obtain all possible values of λM and therefore all the extrema λExt, for any given situation. This allows us to classify all possible cases, depending on the number of such critical points. These critical points might be located on the 2 solutions branches already identified (details are given in Appendices B2 and B3), either at rather low latitudes (the L-branch) or at latitudes close to the “polar day” region (H-branch). The final results are shown on Fig. 5.

This systematic study is of course not always relevant for the Earth, with a rather low eccentricity (e usually smaller than 0.06) and moderate obliquity (c=cos ε usually larger than 0.9) as show by the dashed-blue box on Fig. 5. We will therefore not provide here a full inspection of all possible cases, though such a detailed discussion would easily follow from our study and the above figures. Concerning the H-branch, a surprise is that there is almost always a “turning point” (λM, φM), with φM located very near the latitude of the polar day and λM very close to the polar day value λPolarDay, even in the present-day situation (domain H0b on Fig. 5). Though it is not visible on the top panels of Fig. 4, we can see on the bottom panels (blue dots) that there is a (λM, φM) just near the polar day values (λPolarDay, φPolarDay). The difference is so small for the Earth's case (much smaller than 1° or 1 d between λM and λPolarDay) that is can certainly be neglected for all practical purpose.

A more relevant application of this study is to investigate the number of minima or maxima at low latitudes. Traditional thinking assumes that such minima or maxima occur near equinoxes and that it is sufficient to look at this two specific periods to discuss the corresponding semi-precessional forcing (Berger et al., 1997). But here again, it was a surprise to find that, concerning the Earth, the double annual insolation maxima can entirely disappear in some cases, even at the equator, when transitioning from domain L0 to L1b (for instance, eccentricity larger than 0.066 and obliquity smaller than 22°): in such situations, when perihelion is close to one equinox (ϖ is close to 0 or 180°) there is only one maximum and one minimum daily insolation whatever the latitude, since the role of the distance to the sun (the combined effect of e and ϖ on daily insolation) becomes larger than the role of obliquity. This situation actually happens frequently for planet Mars as shown on Fig. 4.

Since this systematic study allows us to find, for instance, all maxima at any given latitude and time, we obtain the maximum (the largest maxima) without difficulty. This is particularly useful to illustrate the semi-precessional forcing near the equator, as illustrated on Figs. 6 and 7.

Concerning higher latitudes, it is also worth examining whether the difference between insolation at the maximum and insolation at the summer solstice is significant or not. Indeed, the solstice is almost never strictly coincident with the maximum insolation, except when the perihelion occurs precisely at the solstice (ϖ=π2orϖ=3π2) and it could be argued that, for instance, the maximum insolation at 65° N is climatically more relevant for the ice age problem than the summer solstice one.

It turns out that, concerning the Earth, the difference remains rather small (smaller than 2 or 3 W m−2) compared to about 500 W m−2: the relative difference is smaller than 0.5 % and the difference is strongly modulated by the eccentricity, as shown on Fig. 8. In any case, the python libraries provided here can be used to investigate and discuss these differences.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f10

Figure 10Comparison of WCalS and WCalSSol at high northern latitudes (65° N) and at lower latitudes (15° N). The difference is negligible at 65° N (about 0.01 %) but becomes significant at lower latitudes. The approximation WCalSSol in the context of Quaternary glaciations is therefore very good and much faster to compute, while it might fail in other contexts, like lower latitudes or other planetary settings.

Download

5 Insolation integrated above some threshold and caloric seasons

It was suggested that integrating the daily insolation above some threshold could be used as a relevant forcing when studying glaciations, since melting or freezing are themselves threshold processes (Huybers, 2006). The simplest way to produce the corresponding time series for Quaternary climates is to compute the daily insolation for every day of the year, then select and sum the ones above the chosen threshold. This might not be the most efficient way. Besides, discretizing the year into an integer number of days (360 or 365 d) as in Huybers (2006) (using the sum J=iWi 86 400) is not entirely satisfying. Indeed, the number of days is not an exact integer and furthermore, such a discrete sum will change discontinuously when the threshold is modified continuously. Discretization itself might lead to slight numerical errors.

Overall, it is more direct, more precise and certainly more robust to compute all the true longitudes λT for which the insolation equals the threshold value (if any), and then integrate WD(λ) between them using Eq. (4). Indeed, from the above paragraph, we know how to compute the true longitudes λExt of minima and maxima of the daily insolation at any latitude and for any orbital configuration, as well as the associated extremal values of daily insolation WD(λExt). It is therefore quite straightforward to obtain numerically all the roots of the equation WD(λT)=WThreshold, identify the value(s) λT1 when WD increases above the threshold and the value(s) λT2 when WD decreases below WThreshold and finally integrate between the two JT1T2=λT1λT2WDdt as explained in Sect. 3. This is the strategy used in the routine “integrated_inso_above()” provided in the python library.

As illustrated on Fig. 9, the insolation integrated above some threshold is very similar to the daily summer solstice insolation when the threshold is chosen high enough and gets progressively closer to the annual average when the threshold is decreased. This is quite expected since the integral will cover a larger part of the year when the threshold is lowered. The role of the precessional component is then decreased accordingly up to a complete disappearance for the annual average. Interestingly, for threshold values near 350 W m−2, the result is almost identical to WCalS ≈WCalSSol, ie. the Milankovitch definition of insolation over the caloric summer.

But instead of using a fixed threshold, we can also use the same strategy in order to compute the Milankovitch insolation WCalS (the integral over a “caloric season”) for all possible orbital situations, even when the daily insolation has several maxima during the annual cycle, as this is the case in low latitudes today. As explained in Sect. 3.1, we first need to find the threshold value such that the insolation exceeds it during exactly half a year (the “caloric summer”). Since, for any threshold WThreshold, we can obtain as above the value(s) λT1 and the value(s) λT2 for which WD(λT) crosses it upwards and downwards, we can also compute the associated mean longitudes LλT1 and LλT2, and the corresponding duration(s) LλT2LλT1, and finally sum up all these durations in case there are several such intervals. In other words, it is quite straightforward to define a function f(WThreshold) that computes the time during which the insolation remains above the threshold. By solving fWThreshold=1/2, we get the desired value of WThreshold and the caloric summer mean insolation WCalS can then be computed as the integral above this threshold, using the above procedure.

When comparing WCalS (insolation over the caloric summer) to its approximation WCalSSol (insolation over the half year centered at the solstice) as shown on Fig. 10, we note that the difference is very small for the Earth at high northern latitudes. It is therefore fully acceptable to approximate WCalS with WCalSSol and the approximations used by Milankovitch were in fact quite similar to the ones used here in WCalSSol. Interestingly, the difference (about 0.01 %) is much smaller than the one between maximum insolation and insolation at the solstice, as shown on Fig. 8 (about 0.3 %), an approximation that many people are using without further caution.

6 Some final comments

There are probably countless possible “flavours” of different insolation quantities. Overall, testing the response of simple ice age models to such different possible choices is certainly quite crucial (Leloup and Paillard, 2022). The objective was here to present and rapidly discuss the ones that have been mentioned in the paleoclimate scientific community. Some of the formulas presented in this paper are very classical, while others are new, especially the ones concerning the computation of minima and maxima. The python library is described in more details below in Appendix A. It is designed to experiment easily with these various kinds of “insolations”. Most of these routines were initially written in C++ and embedded in the “AnalySeries” MacOS software (Paillard et al., 1996). The version presented here is written in Python for an easier and wider access. It can be easily installed using the command “pip” (pip install inso). It is now used in the new version “PyAnalySeries” released recently (Hevia-Cruz et al., 2025).

Appendix A: Python library overview

All the formulas discussed in this paper are implemented in python and all the figures shown here can be reproduced with the python file “figures.py”: they can be used as examples for using the python routines. The library itself is organised in 3 different files: “astro.py”, “inso.py”, “minmax_inso.py”.

A1 Library “astro.py”

This library provides a useful uniform interface to different astronomical solutions that have been published. The first step is to choose the desired solution by defining the corresponding object: the reference solution is currently the Laskar et al. (2004b) and it is usually necessary to start with the line:

a=AstroLaskar2004()

Currently, other possibilities are the objects: AstroBerger1978(); AstroLaskar1993_01(); AstroLaskar1993_11(); AstroLaskarMars2003(); AstroLaskarMars2004(); AstroLaskar2010a(); AstroLaskar2010b(); AstroLaskar2010c(); AstroLaskar2010d(); StockwellPilgrim1904(). Other astronomical solutions will be added in future releases.

Time t is expressed in kyrAP (thousands of years after present), which means that t is positive in the future and negative in the past. The user should be aware that the starting time is different for these different solutions: for Laskar's solutions, t is in thousands of years after 2000 AD; for Berger's solution, t is in thousands of years after 1950 AD; for Stockwell's solution, t is in thousands of years after 1850 AD.

This information, as well as the original references, can be easily obtained by calling the “info()” function which is returning a string:

a.info()

For each solution, it is possible to check whether orbital parameters are available for some desired time t using the boolean function:

a.in_range(t)

The “Laskar2004” solution is available in the range 101 MyrBP to 21 MyrAP.

The “Berger1978” or the “StockwellPilgrim1904” solutions are given for historical purpose: they are trigonometric approximations: Berger (1978a) is based on Bretagnon (1974) and Pilgrim (1904) is based on Stockwell (1873). As such, there is no implemented time limit (the function in_range() returns always True), but the validity is probably restricted to about 1 million years in the past or the future for “Berger78” and much less for “StockwellPilgrim1904”.

The “LaskarMars” solutions (available in the range 21 MyrBP to 11 MyrAP) apply to planet Mars, while all the other ones concern planet Earth.

The “Laskar1993_01” and “Laskar1993_11” (available in the range 20 Myr BP to 10 Myr AP) differ in the way the dynamical ellipticity of the Earth is treated, something that affects the computation of precession and obliquity on the million-year time scale. Comparing these two solutions gives some idea of the associated uncertainties.

The “Laskar2010x” solutions (available in the range 249.999 Myr BP to today) only provide the eccentricity and therefore cannot be used to compute the insolations discussed in this paper. It is nevertheless interesting to compare them in order to better understand the range of validity of the eccentricity and to look how they start to diverge beyond about 50 Myr.

For all these solutions (except “Laskar2010x”) we have access to the climatically relevant astronomical parameters (eccentricity e, obliquity ε, climatic precession angle ϖ) at time t through the function:

  •  

    a.eccentricity (t)

  •  

    a.obliquity (t)

  •  

    a.precession_angle (t)

It is also useful to define a “climatic precession parameter” as esin ϖ which is directly given by the function:

  •  

    a.precession_parameter(t)

Angles (obliquity ε and climatic precession angle ϖ) are expressed in radians.

A2 Library “inso.py”

From the astronomical parameters obtained through the above routines, it is then possible to compute the insolation quantities described in the paper. In order to be as generic as possible, the results are always returned in a dimensionless form: the same routines can therefore be applied to any planet. But it is necessary to multiply the result by the corresponding dimensional quantity (for instance the solar constant, the duration of the day or of the year in the preferred units).

To obtain the instantaneous insolation from Eq. (1), for example concerning Earth, at noon, at 45° N, at the summer solstice, 10 kyr BP, we can write:

  •  

    solarCte=1365   # the solar constant in W m−2

  •  

    H=0   # the hour angle: noon = 0

  •  

    lat=45np.pi/180   # the latitude in radians

  •  

    trueLon=90np.pi/180   # the true longitude of the Earth at the summer solstice, in radians

  •  

    t=-10   # 10 thousand year before present

  •  

    ecc = a.eccentricity (t)

  •  

    obl = a.  obliquity (t)

  •  

    pre = a.precession_angle (t)

  •  

    WI = solarCte inso_radians (h, trueLon,  lat,  obl,  ecc,  pre)

In the same way, we can get the daily insolation from Eq. (2):

  •  

    WD = solarCte  inso_ dayly_radians (trueLon,  lat,  obl,  ecc,  pre)

As mentioned in the main text, this quantity depends mainly on two terms: the length of the day between sunrise and sunset (in dimensionless form hπ) and the height of the sun (measured by the averaged cosine of the zenith angle 〈cos z. These two terms can be obtained through:

  •  

    dayLength=24inso_length_of_day (trueLon,lat,obl)    # in hours

  •  

    meanCosZ  =  inso_mean_cosz (trueLon,  lat,  obl)

It can be useful to measure the position of the Earth on its orbit using time (or, in dimensionless form, mean longitude or mean anomaly) instead of true longitude or true anomaly. To perform these conversions, we have the following routines. To solve the Kepler Eq. (3) and compute the eccentric anomaly E, or the true anomaly v, from the mean anomaly M:

  •  

    E= solveKepler (ecc, M)

  •  

    v= trueAnomalie (ecc,  M)

And the converse:

  •  

    M= meanAnomalie (ecc, v)

Or to get the true longitude from the mean longitude:

  •  

    trueLon  =  trueLongitude (meanLon,  ecc,  pre,  refL = 0)

where refL is the reference true longitude, by default equal to the NH-spring equinox (=0).

It is also possible to obtain the time needed to go for one orbital position (true longitude = trueLon1) to the next (trueLon2) using the routine:

  •  

    delta_t  =  365.25  length_of_season (trueLon1,  trueLon2,  ecc,  pre)    # in days

like, for instance, the duration of NH-summer (from NH-summer solstice to HN-automn equinox):

  •  

    summer_duration = 365.25  length_of_season (90 np.pi/180,  180np.pi/180,  ecc,  pre)    # in days

Using these conversions from mean longitude (time) to true longitude, it is possible to compute the daily insolation at some calendar date, which means a given number of days (or mean longitude) measured from a reference true longitude (refL):

  •  

    WD = solarCte inso_ dayly_radians (trueLongitude(meanLon,  ecc,  pre),  lat,  obl,  ecc, pre)

Or, as a shortcut:

  •  

    WD = solarCte  inso_dayly_time_radians (meanLon,  lat,  obl,  ecc,  pre)

(beware that this is NOT what people usually want to do when discussing paleoclimate... see main text).

If we prefer to use the averaged insolation over some part of the annual cycle, between two orbital positions trueLon1 and trueLon2, as in Eq. (4), we can use the routine:

  •  

    W12 = solarCte  inso_ mean_radians (trueLon1,  trueLon2,  lat,  obl,  ecc,  pre)

The result has the same units as the solar constant (usually in W m−2). Of course, if instead we want the integral (in J m−2), we need to multiply by the duration of this interval :

  •  

    J12 = solarCte  inso_ mean_radians (trueLon1,  trueLon2,  lat,  obl,  ecc,  pre) 365.25 24 3600 length_of_season (trueLon1,  trueLon2,  ecc,  pre)

And if we prefer to refer to orbital positions in terms of mean longitude, we can use:

  •  

    WD = solarCte inso_ mean_time_radians (meanLon1,  meanLon2,  lat,  obl,  ecc, pre)

A specific example of this last routine are the approximation of insolation over caloric seasons (as integrals over the half-year centered on the solstices). For the caloric northern hemisphere summer, we have:

  •  

    WcalSSol = solarCte  inso_mean_ time_radians (np.pi/2,  np.pi/2,  lat,  obl,  ecc,  pre,  np.pi/2)

Or, as a shortcut:

  •  

    WcalSSol = solarCte  inso_caloric_summer_NH (lat,  obl,  ecc,  pre)

And similarly for the caloric northern hemisphere winter:

  •  

    WcalSSol = solarCte  inso_caloric_winter_NH (lat,  obl,  ecc, pre)

These approximations are very good in the context of Quaternary glaciations. A more generic and precise algorithm to compute WcalS (WcalW) is provided in the library “minmax_inso.py” described below.

As mentioned in the main text, the daily insolation can also easily be integrated between different latitudes, lat_a and lat_b, as in Eq. (5). This is done with the routine:

  •  

    Wab = solarCte  inso_mean_lat_radians (trueLon,  lat_a,  lat_b,  obl,  ecc,  pre)

And finally, as in Eq. (6), we can integrate both of part of the seasonal cycle between trueLon1 and trueLon2, and also between latitudes lat_a and lat_b. This is implemented as:

  •  

    W12ab = solarCte  inso_mean_lon_lat_radians (trueLon1,  trueLon2,  lat_a,  lat_b,  obl,  ecc,  pre)

If we prefer to integrate insolation only over some part of the day, between sun hour-angles h1 and h2, we can use:

  •  

    JH = 86400    solarCte  inso_radians_integ (h1,  h2,  trueLon,  lat,  obl,  ecc,  pre)    # in J m−2

And the over latitudes lat_a and lat_b:

  •  

    JHab = 86400    solarCte inso_radians_integ2 (h1,  h2,  trueLon,  lat_a,  lat_b,  obl,  ecc,  pre)    # in J m−2

A3 Library “minmax_inso.py”

While many of the routines available in “astro.py” and “inso.py”, as described above, are available in several other software packages or languages, the routines in “minmax_inso.py” are, to my knowledge, entirely new. As described in the main text and in the following annex, the mathematical derivation is rather tricky and cumbersome. There are consequently numerous routines in the code that might not be directly useful to users.

Probably one of the most simple uses of this library is the computation of the largest daily insolation maximum at some given location. For instance, at 5° S this can be obtained through:

  •  

    solarCte = 1365 # the solar constant in W m−2

  •  

    lat =-5  np.pi/180 # the latitude (5° S) in radians

  •  

    Wmax = solarCte  largest_max (lat,  ecc,  obl,  pre)

We can also retrieve the smallest minimum by:

  •  

    Wmin = solarCte  smallest_ min (lat,  ecc,  obl,  pre)

The full list of daily insolation minima and maxima can be obtained through:

  •  

    list = minmax_dayly_inso (lat,  ecc,  obl,  pre)

It is a 2D numpy array with list[i][0] being the true longitude of the extrema (in radians) and list[i][1] being the corresponding value of the routine inso.inso_dayly_radians( list[i][0], lat, obl, ecc, pre).

This array is the concatenation of the two lists corresponding to the L-branch and H-branch, obtained through:

  •  

    L_minmax(lat,  ecc,  obl,  pre)   and H_minmax(lat,  ecc,  obl,  pre)

Another useful routine presented in the main text is the computation of integrals above some threshold. This is obtained through the routine:

  •  

    solarCte = 1365 # the solar constant in W m−2

  •  

    year = 365.25  24  3600 # the duration of the year in seconds

  •  

    thresh = 350/solarCte # the threshold as a dimensionless value

  •  

    JT = solarCte  year   integrated_inso_above (thresh,  lat,  ecc,  obl,  pre) # in J m−2

It is also possible to compute the insolation received during the “caloric seasons” (for example during the caloric summer) in the most generic settings, using the routine:

  •  

    WCalS = solarCte  inso_caloric_summer (lat,  ecc,  obl,  pre) # in W m−2

Most of the other routines in this library are for internal use. They might nevertheless be interesting for people who would like to look in more details at this question of insolation extrema. To compute them, it is necessary to build a list of both the boundaries, either λPolarDay or ±π2, and of the “turning points” λM given by the solutions of Eq. (8): the extrema are then located between two successive values of this list. For respectively the L-branch and the H-branch, we obtain these lists by calling:

  •  

    L_branch(ecc,  obl,  pre)  and H_branch(ecc,  obl,  pre)

The λM values are themselves obtained respectively by:

  •  

    lbd_minmaxL(ecc,  obl,  per, critPoints)  and  lambda_minmaxH(ecc,  obl,  per,  critPoints)

where the variable “critPoints” contains information on the critical λC values and is obtained through the routines

  •  

    lbd_critL(ecc,  c)  and lbd_critH(ecc,  e)

where c= np.cos( obl ).

The library also contains the definition of the boundaries for the different domains illustrated on Fig. 5 as well as several plotting routines useful to examine the mathematical problem, notably:

  •  

    plot_Ldomains() and  plot_Hdomains()

used to draw Figs. 5 or B4, and plot_Hdomains_zoomed() to draw Fig. B9.

The summary plots shown on Fig. 4 are obtained with the routine

  •  

    plot_inso_with_min_max (solarCte,  ecc,  obl,  pre)

Appendix B: Derivation of some formulas

B1 Solving Eq. (7b)

The domain of definition of φExt (shown on Fig. B1) may start or end on the polar-day region at the true longitude λPolarDay corresponding to the Eq. (7b):

1+2esinλ-ϖ1-ecosλ-ϖtanλ=0

Note that λPolarDay depends only on e and ϖ. With x=λ-ϖ, Eq. (7b) is equivalent to:

cotx+ϖ=-2esinx1-ecosxϖ=-x-arccot2esinx1-ecosx+kπϖ=π2-x+arctan2esinx1-ecosx+kπ

this last expression being preferred, since it is continuous everywhere with the standard definition of arctan(), with k being some integer. When the function ϖ(x) defined as above is monotonous, there is a unique inverse function ϖ−1() and therefore two solutions for x: x=ϖ-1(ϖ) and x=ϖ-1(ϖ+π).

The derivative dϖdx=4ecosx+3e2cos2x-(1+6e2)1-ecosx2+4e2sin2x is zero when cosx=-2+7+18e23e, which is possible only when -2+7+18e23e1, ie. when e>13. In other words, ϖ(x) is always decreasing for e<13 and Eq. (7b) has then only two solutions λPolarDay=ϖ+ϖ-1(ϖ) or ϖ+ϖ-1(ϖ+π) corresponding to summer in both hemispheres.

But when e>13 we might have two additional solutions for -xcxxc with:

xc=arccos-2+7+18e23eandϖxc=π2-arccos-2+7+18e23e+arctan2-11-9e2+47+18e25-7+18e2

More precisely, Eq. (7b) is equivalent to:

-2esinx1-ecosx=cosx+ϖsinx+ϖ=cosxcosϖ-sinxsinϖcosxsinϖ+sinxcosϖ

Using cosx=1-t21+t2, sinx=2t1+t2 (with t=tanx2), we have:

1-t2cosϖ-2tsinϖ1-t2sinϖ+2tcosϖ=-4et1+t2-e1-t21-t2cosϖ-2tsinϖ1+t2-e1-t2+4et1-t2sinϖ+2tcosϖ=0

This is a 4th degree polynomial equation in t that can be solved by standard techniques. As explained above, there will be always at least two real roots t1 and t2 and when e>13 and ϖxcϖπ-ϖxc we will also have two additional real roots t3 and t4. For each one, we can compute the corresponding true longitude of the “polar-day” extremum: λPolarDay_i=ϖ+2arctanti. The two first roots are the true longitude of the bounds of the H-branch of φExt(λ) while the eventual two last ones are the intersection of the L-branch with the polar-day limit.

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f11

Figure B1The domains of definition of φExtλ,e,ε,ϖ for the L-branch and H-branch, for two different values of the eccentricity: on the left e=0.2 and on the right e=0.5. For low eccentricity (e<1/3), for a given value of ϖ, the L-branch starts and ends on the polar night with λ=π2(modπ) while the H-branch starts and ends on the polar day regions with λ=λPolarDay the two reals roots of Eq. (7b). For high eccentricity (e>1/3) the L-branch also intersects the polar-day region when ϖ is near π2(modπ) at the two supplementary roots of Eq. (7b) as shown on Fig. 4b.

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f12

Figure B2Implicit solutions of Eq. (B5) for some values of c.

Download

B2 Finding Eq. (8)

Equation (7a) gives us the latitude φExt of the extrema of the daily insolation WD as a function of true longitude λ; in other words, it defines φExtλ,e,ε,ϖ. To obtain the minima and maxima of this curve, we want to compute its derivative and solve λφExtλ,e,ε,ϖ=0 in order to find the corresponding true longitude λM.

First it is useful to introduce some new notation:

c=cosεw=cotλf=2ewsinλ-ϖ1-ecosλ-ϖ

We can check that:

c2+w21+w2=cos2ε+cot2λ1+cot2λ=1-sin2λsin2εsin2λsin2ε=1-c2+w21+w2=1-c21+w2

and then we can write Eq. (7a) in the following way:

(B1) tan 2 φ Ext = c 2 + w 2 1 - c 2 cos 2 h 1 - h cot h = 1 1 + f 1 + w 2 c 2 + w 2
https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f13

Figure B3Left: solutions hSOLc,u=hSOL(cosεcos2λ) of Eq. (B5) for various values of c. Right: the corresponding values of eL(c,cos 2λ) using Eq. (S6). Critical points λC (when they exist) are obtained by solving in λC the equation e=eLcosε,cos2λC for some given (eε).

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f14

Figure B4In the (c=cosε,e) space (top), the regions for which e=eLc,u has 0, 1 or 2 solutions λC (L0, L1, L2) delimited by e=eL1c=1-c23-c2 (orange) and by e=eLMIN(c) (blue), which cross at c,e=35,16 (black dot). The L1 domain is itself divided in 2 parts (L1a, L1b) depending on the relative positions of the critical solutions (cf. next figure). The red stars corresponds to the different situations illustrated in Fig. B5.

Download

We look for λM such that λφExt=0 or equivalently for w such that wtan2φExt=0.

That is:

wtan2φExt=wc2+w21-c2cos2h=2w1-c2cos2h-2c2+w21-c2coshsinhhw=0

or equivalently:

hw=wc2+w2coth

But h is defined also by the 2nd equation of (B1):1-hcoth1+f-1+w2c2+w2=0. We have therefore to compute its derivative and introduce the above new constraint in it, in order to obtain Eq. (8). We have:

(B2a) w 1 + w 2 c 2 + w 2 = - 2 w 1 - c 2 c 2 + w 2 2

w1-hcoth=h1+cot2h-cothhw=h1+cot2h-cothwc2+w2coth=hcoth1+cot2h-cot2hwc2+w2=1-1+f-11+w2c2+w21+cot2h-cot2hwc2+w2=1-1+w2c2+w21+cot2h1+fwc2+w21+fw1-hcoth=1+f1-1+w2c2+w21+cot2h1+fwc2+w2=1+f-1+w2c2+w21+cot2hwc2+w2=1-1+w2c2+w2+f-1+w2c2+w2cot2hwc2+w2

(B2b) = f - 1 + w 2 c 2 + w 2 cot 2 h w c 2 + w 2 - w 1 - c 2 c 2 + w 2 2 1 + f w 1 - h cot h = f - 1 + w 2 c 2 + w 2 cot 2 h w c 2 + w 2 - w 1 - c 2 c 2 + w 2 2

To compute fw it is useful to introduce further new notations:

sinα=1-e2sinλ-ϖ1-ecosλ-ϖandcosα=cosλ-ϖ-e1-ecos(λ-ϖ)

where we can check that:

sin2α+cos2α=1-e2sin2λ-ϖ+cosλ-ϖ-e21-ecos(λ-ϖ)2=1

sinλ-ϖ=1-e2sinα1+ecosαandcosλ-ϖ=cosα+e1+ecosα

This gives us:

wsinα=-11+w211-e2cosα1+ecosαwcosα=11+w211-e2sinα1+ecosαf=2esinαw1-e2fw=-1w22esinα1-e2+1w2e1-e2sinαw=-fw-1w11+w22e1-e2cosα1+ecosα=-1w11+w2f+w2f+2e1-e2cosα+ecos2α

Therefore:

(B2c) 1 - h cot h w 1 + f = - 1 w 1 1 + f 1 c 2 + w 2 f + w 2 f + 2 e cos α + e cos 2 α 1 - e 2

By summing up Eqs. (B2a, b, c), we get:

0=-1w11+f1c2+w2f+w2f+2ecosα+ecos2α1-e2+f-1+w2c2+w2cot2hwc2+w2-w1-c2c2+w22+2w1-c2c2+w220=-11+ff+w2f+2e1-e2cosα+2e21-e2cos2α+f+1-c2c2+w2-1+w2c2+w2cot2hw20=-11+ff+w2f+2ecosα1-e2+6e21-e2cos2α-4e21-e21-sin2α+fw2+1-c2c2+w2w2-1+w2c2+w2w2cot2h0=-11+ff+w2f+w2f2+2ecosα1-e2+6e21-e2cos2α-4e21-e2+fw2+1-c2c2+w2w2-1+w2c2+w2w2cot2h0=-1+w2f-1+2e1-e22e-cosα-3ecos2α1+f+fw2+1-c2c2+w2w2-1+w2c2+w2w2cot2h0=1+2e1-e22e-cosα-3ecos2α1+f-1+1-c2c2+w2w2-1+w2c2+w2w2cot2h0=1+2e1-e22e-cosα-3ecos2α1+f-1+w2c2+w2c2-1+w2c2+w2w2cot2h

In other words, as mentioned in the main text, Eq. (8) reads:

(B3) 0 = c 2 + w 2 cot 2 h - g c 2 + w 2 1 + w 2 1 - h cot h = 1 1 + f 1 + w 2 c 2 + w 2

with g=1+2e1-e22e-cosα-3ecos2α1+f

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f15

Figure B5Examples showing the values of λM (blue lines) as functions of ϖ, with branches delimited by the critical points (ϖCλC) (black dots) for the (c,e) parameters shown as red stars in the previous figure. In the L0 case (middle down panel), there are two extrema λM for every value of ϖ, corresponding the Earth's situation at low latitudes. In the L1b case (right panels), the critical points (ϖCλC) are in the top-left/bottom-right quadrant: there are either two extrema λM for a given value of ϖ, like before, or no such extrema when ϖ is near 0 (or π), more precisely for -ϖC<ϖ<ϖC. In the L1a case (left and middle top panels), the critical points (ϖCλC) are in the top-right/bottom-left quadrant: there are either two or four extrema λM depending on ϖ. In the L2 case (left bottom panel), there are also either two or four extrema λM depending on ϖ with respect to the critical points.

Download

B3 Classifying all possible cases for the minima and maxima

To obtain all values of true longitude λ for minima and maxima at a specific latitude φ, we can solve Eq. (7a) numerically with λ between successive values of λM since there is one and only one such root. But to find all possible values of λM, we also need to solve Eq. (8) numerically, with λM between successive values of λC which are roots of Eq. (8) and of its derivative.

To obtain these critical λC values, in addition to Eq. (B3) we therefore need to solve:

0=wc2+w2cot2h-gc2+w21+w2

We have:

cot2hw=-2coth1+cot2hhw=-21+cot2hwc2+w2cot2hw2cot2hw=2wcot2h1-1+cot2hw2c2+w2=2wc2+w2cot2hc2-w2cot2h

The definition of g gives us:

g1+f-1=2e1-e22e-cosα-3ecos2α=w2f2-2e1-e2cosα+ecos2α

Therefore:

fw=-1w11+w2f+w2f+2e1-e2cosα+ecos2α=-1w11+w2f+w2f+w2f2+1-g1+f=-1w1+f1+w21+w2f-gw11+f=-11+f2fw=1w11+f11+w21+w2f-ggw=-11+f2e1-e21+6ecosαwcosα1+2e1-e22e-cosα-3ecos2α+w11+f=-11+f2e1-e21+6ecosα

11+w2sinα1-e21+ecosα+g1w11+w21+w2f-g=-11+f1+6ecosα1-e21+ecosα11+w2fw+g1w11+w21+w2f-g=-11+f11-e21+7ecosα+6e2cos2α11+w2fw+g1w11+w21+w2f-g=-11+f11-e21-e2cos2α+7ecosα+ecos2α11+w2fw+g1w11+w21+w2f-g=-11+f1+e21-e2sin2α+7e1-e2cosα+ecos2α11+w2fw+g1w11+w21+w2f-g=-11+f4+f2w2+141+w2f2-g1+f11+w2fw4+g1w11+w21+w2f-g

=-11+f18+15f2w2-14g1+f11+w2fw4+g1w11+w21+w2f-gwc2+w21+w2g=+2w1-c21+w22g+c2+w21+w22g1w1+w2f-g-wf41+f18-14g1+f+15f2w2
https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f16

Figure B6Lower boundary h0(c) of the domain of definition of uSOL(c,h).

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f17

Figure B7Top: uSOL(c,h) for various values of c, in the increasing (left) and decreasing (right) ranges of h0(c). Bottom: the corresponding values of the eccentricity eH(c, h) using Eq. (B6). Critical points λC (when they exist) are obtained by solving in h the equation e=eHcosε,h for given (e,c): the number of such points depends on the value of e with respect to the bounds and extrema of these curves.

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f18

Figure B8Left: the end-points of eH(c,h) for h=π (in orange eHc,π=13) and for h=h0(c) (in blue eHc,h0(c)=eH0c). The eH0(c) curve starts at the point {c0S,1}, has a cusp point at {c0R,0}, and ends at the point {1,eH0(1)}. Right : Extrema of the function eH(c,h): the minima eHMin1(c) in blue and eHMin2(c) in green, and the maximum eHMax(c) in orange. The minimum eHMin1(c) (blue) is defined for all values of c and eHMin1(0)=0 and eHMin1(1)≃0.322038. The minimum eHMin2(c) (green) is relevant (smaller than 1) for c>c0Min0.329897 and defined for c<c0R the cusp point of eH0(c). The maximum eHMax(c) is relevant (smaller than 1) for c>c0Max0.338792.

Download

Therefore, we have the equation:

2wc2+w2cot2hc2-w2cot2h=2w1-c21+w22g+c2+w21+w22g1+w2f-gw-wf18-14g1+f+15f2w241+fw2cot2hc2-w2cot2h=w2g1-c2c2+w21+w22+12c2+w21+w22g1+w2f-g

-w2f18-14g1+f+15f2w241+fw2cot2hc2-w2cot2h=w2g1-c2+w21+w2c2+w21+w2+12c2+w21+w22g-g2-w2f18+15f2w241+f+92w2fg

But from Eq. (B3) we also have: w2cot2h=gc2+w21+w2-c2. Therefore:

gc2+w21+w2-c22c2-gc2+w21+w2=w2g1-c2+w21+w2c2+w21+w2+12c2+w21+w22g-g2-w2f18+15f2w241+f+9w22fg3c2gc2+w21+w2-2c4-g2c2+w21+w22=w2g1-c2+w21+w2c2+w21+w2+12c2+w21+w22g-g2-w2f18+15f2w241+f+9w22fg

3c2g1+w2c2+w2-2c4c2+w21+w22-g2=w2g1+w2c2+w2-w2g+12-g2-w2f18+15f2w241+f+1+9w22fg2g3c2-w21+w2c2+w2+2w2g-4c4c2+w21+w22=g2-w2f18+15f2w241+f

+1+9w22fg0=g2+1-23c2-w21+w2c2+w2-2w2+9w22fg+4c4c2+w21+w22-w2f18+15f2w241+f=g2+g3w2-c2(5+8w2)c2+w2+9w22f+4c41+w2c2+w22-w24f1+f18+15w2f2

We finally get the equation satisfied by the critical points λC:

(B4) 0 = g 2 + g 3 w 2 - c 2 ( 5 + 8 w 2 ) c 2 + w 2 + 9 w 2 2 f + 4 c 4 1 + w 2 c 2 + w 2 2 - w 2 4 f 1 + f 18 + 15 w 2 f 2 0 = c 2 + w 2 cot 2 h - g c 2 + w 2 1 + w 2 1 - h cot h = 1 1 + f 1 + w 2 c 2 + w 2

Using again some new notation:

x=1-hcothu=cos2λ=w21+w2;w2=u1-u

We have:

g=1+w2c2+w2c2+w21-xh2f=1x1+w2c2+w2-1cot2h=1-xh2

And we can write Eq. (B4) as an equation only in (u,h,c):

(B5) 0 = 4 u y 2 - 6 h 2 y r - 2 u x - 3 u - 3 h 4 u + c 2 ( 1 - u ) 3 ( u - 6 ) x 3 + s x 2 - 3 r x + 5 u

using:

x=1-hcothy=x1-x2r=2+3uc2+51-c2u2s=3u22+3u-2c22-13u+2u2+9u3+c416+9u1-u2

For a given c=cos ε, as shown on Fig. B2, we note that this Eq. (B5) has two well separated branches: a first branch with h≤2, that can be described by a solution h=hSOL(c,u) and a second one with h>2 (in fact, h>h0M2.21, see below) which is given by a solution u=uSOL(c,h).

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f19

Figure B9On the left, in the (c=cosε,e) space, the 14 regions for which e=eHc,h has 0, 1, 2, 3 or 4 solutions λC. The red stars corresponds to the different situations illustrated in Fig. B10. On the right, a close up around the H4a domain: note that this is the difference eeHMin1(c) and the vertical axis is strongly enlarged since eHMax(c) and eHMin1(c) are extremely close to each other (difference is about 10−4 or 10−5).

Download

https://cp.copernicus.org/articles/22/647/2026/cp-22-647-2026-f20

Figure B10Examples showing the values of λM (blue lines) as functions of ϖ, with branches delimited by the critical points (ϖCλC) (black dots) for the (c,e) parameters shown as red stars in the previous figure. In the H0b case (top left) ie. the Earth situation, there is always an extremal value λM very close to the polar-day limit (pink areas). Other various cases are also illustrated.

Download

These two solution branches uSOL(c,h) and hSOL(c,u) do, in fact, correspond to the H-branch and L-branch mentioned in the main text. But uSOL(c,h) and hSOL(c,u) are still implicit since we are looking for the corresponding functions ϖC(c,e) or λC(c,e). This last step is easily obtained by noting that f, g and w are linked to the eccentricity e in the following way:

cosα+ecos2α=1-e22e1+w2f2-g1+fandsin2α=1-e24e2w2f2cosα+ecos2α+esin2α=1-e22e1+32w2f2-g1+fcosα=-e+1-e22e1+32w2f2-g1+f1=1-e24e2w2f2+-e+1-e22e1+32w2f2-g1+f21=1-e24e2w2f2+e2-2e1-e22e1+32w2f2-g1+f+1-e22e21+32w2f2-g1+f21-e2=1-e2w2f24e2-1+32w2f2-g1+f+1-e24e21+32w2f2-g1+f24e2=w2f2-4e21+32w2f2-g1+f+1-e21+32w2f2-g1+f2e24+41+32w2f2-g1+f+1+32w2f2-g1+f2=w2f2+1+32w2f2-g1+f2

e22+1+32w2f2-g1+f2=w2f2+1+32w2f2-g1+f2e2=w2f2+1+32w2f2-g1+f22+1+32w2f2-g1+f2e2=w2f2+1+32w2f2-g1+f23+32w2f2-g1+f2

Substituting w,f,g as above, we can write e as a function of our variables c,u,h:

(B6) e = e SOL c , u , h = 4 + 4 b 2 + 16 a + 9 a 2 - 4 b ( 2 + 3 a ) 2 b - 3 a - 6 2

with:

a=11-hcoth2u1-u1c21-u+u-(1-hcoth)2b=1(1-hcoth)(1-u)c21-u+ucoth2c21-u+u2

Solutions of Eq. (B5) can therefore be written as:

e=eLc,u=eSOLc,u,hSOL(c,u)for the L-branche=eHc,h=eSOLc,uSOL(c,h),hfor the H-branch.

B3.1 L-branch solution h=hSOL (c,u) or e=eL (c,u)

We have hSOL(c,0)=0 and hSOL(c,1)=π/2 for all values of c. The derivative at u=1 can be obtained through Taylor expansion of Eq. (B5):

hSOLuc,1=10c2-63πwhich vanishes forc=3/5.

Critical values (λC, ωC) are obtained by solving e=eL (cosε, cos2λ) for given astronomical parameters (e,ε). Depending on c, we see on Fig. B3 (right panel) that there is 0, 1 or 2 solutions. The end points are:

λ=π2u=cosλ=0eLc,0=1.λ=0u=cosλ=1eLc,1=eL1c=1-c23-c2.

We remark (cf. Fig. B3, right panel) that eL (c,u) has a minimum when c is small enough (when ε is large enough). This happens when the derivative deL/dλ is negative for λ=0 i.e. c<3/5 (or ε>39,23°). Therefore, for 0<c<3/5 we can compute (numerically) a minimum eLMIN(c).

To summarize, we end-up with three possibilities:

  • if e>eL1c=1-c23-c2, there is only one critical value (λC, ωC).

  • if c<3/5 and 1-c23-c2=eL1c>e>eLMIN(c), we have two critical values (λC1, ωC1), (λC2, ωC2).

Otherwise, there is no critical value.

We have therefore the three domains in the (c= cosε, e) space, noted as L0, L1 and L2, as represented on Fig. B4, with the L1 domain above the eL1c=1-c23-c2 curve; the L2 domain between the eL1(c) and eLMIN(c) and the L0 domain below. From these critical values and Eqs. (8) or (B3), we can compute all the possible λM values between the boundaries and the successive critical λC values.

B3.2 H-branch solution u=uSOL (ch) or e=eH (ch)

We note that uSOL(c,h) is defined only for h near its maximum value π. More precisely, the boundary values for h are given by uSOLc,h0c=uSOLc,π=0 and h0(c) is the non trivial solution of Eq. (B5) with u=0:

0=3c4(1-hcoth)2+21-4c2-cot2h1-hcoth+3

which implicitly gives us h0(c). We note that h0(c) is first decreasing, then increasing, as shown on Fig. B6:

Values at c=0 and 1 are h0(0)≃2.43769961 and h0(1)≃2.89659385 and the minimum of h0(c) is obtained when 1+6hcoth1-cot2h+6cot2h=, which gives c0M≃0.7082284 and h0M=h0c0M2.2137041

For each values (h, uSOL(c,h)), we have the corresponding one for e according to Eq. (B6). We can therefore plot the curves eH(c,h) as below for different values of c. Finally, we get the critical values (λC, ωC) by solving in h the equation e=eH(c,h) for given parameters (e,c).

For the two limit values h0(c) and π, we have u=0 and consequently eH(c,h=πorh0(c))=1-c2(1-hcoth)1-3c2(1-hcoth).

For h=π, we therefore have for all values of c, eH (c,π) =1/3.

For h=h0(c), we obtain the curve eH0(c)=eH(c,h0(c)) represented below. This curve has a cusp point at c0R≃0.597436228, h0(c0R)≃2.24670472895 (eH0(c0R)=0). The value h0(c) is meaningful only when eH0(c)<1, we leads to c>c0S0.389149334. We compute eH0(1)≃0.3151957799.

Besides, between the two end-points h=h0(c) and π, the curve eH(c, h) has possibly up to two minima and one maximum. It seems difficult to determine analytically these extrema. A good strategy is to build a reasonable approximation (interpolation) for a given set of values for c, and to start from these starting points an optimisation routine which would therefore converge more rapidly. This gives the curves below (in blue and green, the minima of eH(c, h): eHMin1(c) and eHMin2(c), and in orange the maximum eHMax(c)).

By combining the two panels of the above figure, we thus obtain Fig. B9 that classify all possible cases for the number of critical points in the different regions of the parameter space (c= cos ε,e), with 14 different regions and up to 4 critical values (λC, ωC).

Code availability

Zenodo: https://doi.org/10.5281/zenodo.15682056 (Paillard, 2025). The package can be easily downloaded and installed through the command line: pip install inso.

Data availability

No data sets were used in this article.

Competing interests

The author has declared that there are no competing interests.

Disclaimer

Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.

Acknowledgements

The author is grateful to the two reviewers Michel Crucifix and Marie-France Loutre and the editor Qiuzhen Yin, as well as Brian Lougheed, whose comments have considerably helped to clarify and also enhance this paper.

Review statement

This paper was edited by Qiuzhen Yin and reviewed by Marie-France Loutre and Michel Crucifix.

References

Berger, A.: Long-term variations of daily insolation and Quaternary climatic change, Journal of the Atmospheric Sciences, 35, 2362–2367, https://doi.org/10.1175/1520-0469(1978)035<2362:LTVODI>2.0.CO;2, 1978a. 

Berger, A.: Long-Term Variations of Caloric Insolation Resulting from the Earth's Orbital Elements, Quaternary Research, 9, 139–16, https://doi.org/10.1016/0033-5894(78)90064-9, 1978b. 

Berger, A., Loutre, M. F., and Tricot, C.: Insolation and Earth's orbital periods, Journal of Geophysical Research, 98, 10341–10362, https://doi.org/10.1029/93JD00222, 1993. 

Berger, A., McIntyre, A., and Loutre, M. F.: Intertropical Latitudes and Precessional and Half-Precessional Cycles, Science, 278, 1476–1477, https://doi.org/10.1126/science.278.5342.1476, 1997. 

Berger, A., Loutre, M. F., and Yin, Q.: Total irradiation during any time interval of the year using elliptic integrals, Quaternary Science Reviews, 29, 1968–1982, https://doi.org/10.1016/j.quascirev.2010.05.007, 2010. 

Berger, A., Yin, Q., and Wu, Z.: Length of astronomical seasons, total and average insolation over seasons, Quaternary Science Reviews, 334, 108620, https://doi.org/10.1016/j.quascirev.2024.108620, 2024. 

Bretagnon, P.: Termes à longues périodes dans le système solaire, Astronomy & Astrophysics, 30, 141–154, 1974. 

Crucifix, M.: Palinsol: a R package to compute Incoming Solar Radiation (insolation) for palaeoclimate studies (v1.0 CRAN), Zenodo, https://doi.org/10.5281/zenodo.14893715, 2023. 

Hevia-Cruz, F., Brockmann, P., Govin, A., Michel, E., and Paillard, D.: Reviving AnalySeries: PyAnalySeries, a modern and collaborative open-source tool for time-series analysis, Past Global Changes Magazine, 33, 74–75, 2025. 

Huybers, P.: Early Pleistocene Glacial Cycles and the Integrated Summer Insolation Forcing, Science, 313, 508–511, https://doi.org/10.1126/science.1125249, 2006. 

Laskar, J., Joutel, F., and Boudin, F.: Orbital, precessional, and insolation quantities for the Earth from 20 Myr to +10 Myr, Astronomy & Astrophysics, 270, 522–533, 1993. 

Laskar, J., Correia, A. C. M., Gastineau, M., Joutel, F., Levrard, B., and Robutel, P.: Long term evolution and chaotic diffusion of the insolation quantities of Mars. Icarus, 170, 343–364, https://doi.org/10.1016/j.icarus.2004.04.005, 2004a. 

Laskar, J., Robutel, P., Joutel, F., Gastineau, M., Correia, A. C. M., and Levrard, B.: A long-term numerical solution for the insolation quantities of the Earth, Astronomy & Astrophysics, 428, 261–285, doi:10.1051-0004-6361:20041335, 2004b. 

Laskar, J., Fienga, A., Gastineau, M., and Manche, H.: La2010: a new orbital solution for the long-term motion of the Earth, Astronomy & Astrophysics, 532, A89, https://doi.org/10.1051/0004-6361/201116836, 2011. 

Leloup, G. and Paillard, D.: Influence of the choice of insolation forcing on the results of a conceptual glacial cycle model, Clim. Past, 18, 547–558, https://doi.org/10.5194/cp-18-547-2022, 2022. 

Lougheed, B.: Orbitalchime, GitHub, https://github.com/bryanlougheed/orbitalchime (last access: 5 March 2026), 2025. 

Loutre, M.-F., Paillard, D., Vimeux, F., and Cortijo, E.: Does mean annual insolation have the potential to change the climate?, Earth and Planetary Science Letters, 221, 1–14, https://doi.org/10.1016/S0012-821X(04)00108-6, 2004. 

McIntyre, A. and Molfino, B.: Forcing of Atlantic Equatorial and Subpolar Millennial Cycles by Precession, Science, 274, 1867, https://doi.org/10.1126/science.274.5294.1867, 1996. 

Milankovitch, M.: Théorie Mathématique des Phénomènes Thermiques Produits par la Radiation Solaire. Académie Yougoslave des Sciences et des Arts de Zagreb, Gauthier Villars, Paris, France, 1920.  

Milankovitch, M.: Canon of insolation and the ice-age problem (Kanon der Erdbestrahlung und seine Andwendung auf das Eiszeitenproblem), Zavod za udzbenike, Beograd, 1941. 

Oliveira, E. D.: Daily INSOLation (DINSOL-v1.0): an intuitive tool for classrooms and specifying solar radiation boundary conditions, Geosci. Model Dev., 16, 2371–2390, https://doi.org/10.5194/gmd-16-2371-2023, 2023. 

Paillard, D.: Climate and the orbital parameters of the Earth, Comptes Rendus Geoscience, 342, 273–285, https://doi.org/10.1016/j.crte.2009.12.006, 2010. 

Paillard, D.: Quaternary glaciations: from observations to theories, Quaternary Science Reviews, 107, 11–24, https://doi.org/10.1016/j.quascirev.2014.10.002, 2015. 

Paillard, D.: dpaillard/Insolation: v1.0 (v1.0), Zenodo [code], https://doi.org/10.5281/zenodo.15682056, 2025. 

Paillard, D. and Brockmann, P.: dpaillard/Insolation: v1.1 (v1.1), Zenodo [code], https://doi.org/10.5281/zenodo.17640396, 2025. 

Paillard, D., Labeyrie, L., and Yiou, P.: Macintosh Program Performs Time-Series Analysis. Eos, Transactions, American Geophysical Union, 77, 379, https://doi.org/10.1029/96EO00259, 1996. 

Pilgrim, L.: Versuch einer rechnerischen Behandlung der Eiszeitalters, Jahresshefte des Vereins für Vaterländische Naturkunde in Württemberg, 60, 26–117, https://www.zobodat.at/pdf/Jh-Ver--vaterl-Naturkunde-Wuerttemberg_60_0026-0117.pdf (last access: 5 March 2026) 1904. 

Stockwell, J. N.: Memoir of the secular variations of the orbits of the eight principal planets: Mercury, Venus, the Earth, Mars, Jupiter, Saturn, Uranus, and Neptune; with tables of the same; together with the obliquity of the ecliptic, and the precession of the equinoxes in both longitude and right ascension. Smithsonian contributions to knowledge, XVIII, Smithsonian Institution publication 232, Smithsonian Institution, Washington, 199 p., 1873. 

Virtanen, P., et al.: SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python, Nature Methods, 17, 261–272, https://doi.org/10.1038/s41592-019-0686-2, 2020. 

Download
Short summary
This paper presents classical and new mathematical formulas to compute various "flavors" of the insolation forcing used to interpret paleoclimatic series, or to simulate climate at different times. It provides a description of the usual concepts while insisting on the difficulties associated with them, like the definition of a calendar. Then it presents novel formulas to compute extrema of insolation for a given latitude. It thus presents a new open-source software package available online.
Share