Global Earth climate energy budget

This is a concise tutorial/introduction to Earth Energy Budget in the context of atmospheric sciences. The main objective is to understand the role of the Sun radiation and the atmosphere in the current Earth surface global mean temperature. At the end of the tutorial, there is a Haskell code to perform the calculations/estimations described here.

Short tutorial about Global Earth energy budget

In our daily life we experiment that the Sun is warming the Earth surface or, more precisely, the radiation that comes from the Sun is providing energy to the Earth Surface, and actually the Earth climate system. We also know that the light can be absorbed but also reflected, therefore to better understand the role of the energy flux from the Sun in the Earth we need some additional information. The figure shown below on the left illustrates how is the distribution of solar energy in the Earth. We realise that about 30% is reflected back to the space. Usually, to represent this fact it is defined the albedo of the earth (from the space) as 0.3 (which means that a fraction of 0.3 of arriving energy is reflected back to the space), an important fact that will be used later on. A summary of the main parameters used in this tutorial is in the table on the right.


(Creative Commons from Wikipedia)

System Parameter Value
Earth Albedo 0.3 (approx.)
Earth Mean radius 6371.0 km
Earth Surface Temp. 14 C / 287.15 K
Sun-Earth Distance 149598023 km
Sun Mean Radius 696340 km
Sun Photosphere Temp. 5772 K
Sun Solar Constant 1368 W/m2
Physical Cte Stefan Boltzmann 5.67e-8 W/m2/K4

Estimation of Earth Surface Temperature

A first step when we consider to understand/introduce the energy budget is to estimate the energy that arrives from the Sun to the Earth in the form of radiation, as the Sun radiation is the most important source of energy arriving to the Earth.

To calculate this energy, first we can estimate the emitted radiative energy flux of the Sun, which is well approximated by the energy flux emitted by a black-body with a temperature of 5772 K, which is the approximate Sun surface temperature (photosphere, see Table above). The black-body energy flux emitted can be calculated using the Stefan-Boltzmann Law,

$$f_{BB}(T)=\sigma T^{4}$$

where \(\sigma=5.670374419\cdot 10^{−8}\, W m^{−2} K^{−4}\) is known as Stefan–Boltzmann constant (or Stefan constant as there is other Boltzmann constant very important in statistical physics).

However, because \(f_{BB}\) is the energy flux (power per unit of area), then the total power emitted by the Sun is \(P_{sun}=f_{BB}\cdot A_{sun}\), where \(A_{sun}=4\pi R_{sun}^{2}\) is the total surface of the Sun and \(R_{sun}=69634000\,m\) it the radius. Now the Earth is at 1 astronomic unit of distance from Sun (approx.) which is the distance travelled by the light in about 8 min 30 seg. In meters, it is 149597870700 m. Furthermore, the disk of the Earth is \(\pi R_{earth}^{2}\) and it is the area that intercepts the Sun radiant energy flux. Therefore, the total power that arrives to Earth can be estimated as:

$$S_{sun}=f_{BB}\cdot A_{sun}\frac{1}{4\pi R_{ua}^{2}}\simeq 1370 Wm^{-2}$$

Which is called solar constant, as is formally defined as the measured flux density mean solar electromagnetic radiation (total solar irradiance) per unit area at the Earth surface. Note that this power should be distributed in the full sphere, so the power per square meter is \(S_{sun}/4\).

Exercise: By looking for the distance of Sun to Mars and Venus. Would you be able to calculate the solar constants for these planets?

Now using the Stefan-Boltzmann Law, and the fact that the Earth's surface albedo is 0.3, we can estimate the surface temperature of the Earth: \(T_{EarthSurface}^{4}=\sigma^{-1}S_{sun}(1-0.3)/4\), and the value is \(T_{EarthSurface}=254.8\,K\), so reasonable in a broader sense (for example, compared to Sun surface temperature) but a bit cooler than actual temperature indicated in the table, therefore we are not including something important to have a reasonable estimation.

Note: Here we are using \(f_{BB}(T)\) without any spectral dependence, this is consistent with the Stefan-Boltzmann Law. But the original Planck Function \(B(\nu, T)\) has a functional dependence in the frequency of radiation, however (for frecuencies from 0 to \(\inf\)) this function can be integrated and we recover the Stefan-Boltzmann law. Actually, by measuring the spectral dependence of the incomming solar radiation at the top of the atmosphere, we can see a shape similar to the one of a black-body (with slight differences in the UV range). However, if we would perform an measurement over the Earth surface of the spectral dependence of the incomming solar radiation, the functional shape was not the black-body Planck Function for \(T=5772 K\). It would be a now a non-monotonic function which local minima where we expect absorption bands of gases in the atmosphere (GHGs and H2O). This is remembering us that we did not considered the atmosphere of the Earth in our previous estimation of mean global surface temperature.

Improving our estimation

We have seen that our first calculation of surface temperature of the Earth has not been accurate. It is logical as we did not introduce the atmosphere in the calculation. An improvement is possible by just adding a layer representing the atmosphere.

Remember that before we had a surface albedo and the solar constant. It was assumed that the energy arriving from the sun in the short-wave spectrum (UV and Visible) is returned by the earth surface in the long-wave infrared spectrum, and we applied energy conservation (a black-body with the typical sun surface temperature is mostly emitting in UV, VIS and NIR, but a black body with the temperature of Earth surface is mostly emitting in the IR).

However, we know that there is an intermediate system, the atmosphere. In a first approximation we can consider the atmosphere a single layer at constant temperature \(T_{a}\), and the atmosphere is in equilibrium with arriving energy from the sun and the emission of the earth 1

  • Energy Balance of the atmosphere with sun-radiation: arriving \(f_{sun}\), emitting \(f_{a}+t_{LW}f_{g}\). Where \(f_{a}\) is the emission of the atmosphere as it has a temperature. \(f_{surf}\) is the emission of the earth surface, for a given temperature \(T_{surf}\), that escape to the space but accounting for a factor \(t_{LW}\) that describe the long-wave absorption of the atmosphere.
  • Energy Balance of the atmosphere with the earth-surface: arrives \(t_{SW}f_{sun}\) where \(t_{SW}\) represents the factor of decrease of sun-radiation after crossing the atmosphere. The surface is emitting \(f_{surf}\), as we know, but also the atmosphere is emitting \(f_{a}\)

So we have a system of two equations:

$$ \begin{align*} f_{sun} & = f_{a} + t_{LW}f_{surf} \\ t_{SW}f_{sun} + f_{g} &= f_{a} \end{align*} $$

which a simple solution for \(f_{surf} = f_{sun}(1+t_{SW})/(1+t_{LW})\), and therefore for \(t_{surf}\) as \(f_{surf}=\sigma t^{4}_{surf}\). With this new method we have a much better estimation of \(T_{EarthSurface}=285.8\,K\), which is much more closer to the actual temperature than before.

Haskell code to perform the calculations

For this tutorial is has been selected Haskell as the function definitions are very close to the mathematics, the reader only has to remember that haskell is not using parenthesis for the arguments, so \(f_{BB}(T)\) is written as fBB T. In general, f(x,y,z) is written as f x y z. The comments are -- for one line, and {- .... -} if we want to comment a block. In the code we are using read to translate the scientific notation to Double, in the interactive REPL of Haskell (ghci) this is not need, but for a compiled code it is better. Eventually it is similar to parse(Float64, "5.67e-7") that we can do in Julia (to give an example). This code has been tested with GHC compiler v8.8.4, no external library is needed beyond Text.Printf used to print floats with format, so if you save the file as ghc energy.hc, you can run as ./energy in any Linux/Unix environment.

import Text.Printf

-- **** Physical Constants ****
--      Note about valid UNICODE -> 
--      letter lowercase, letter uppercase, Number Punctuation, 
--      Symbols are probably forbidden for variable/function names
--      Note also that for variables and parameters we have to introduce them
--      in lowercase as uppercase is reserved for data constructors and types
--      (eventually like the convention in Julia). For this reason temperatures
--      will be represented by t (not T).

σ      = read "5.67e-8" :: Double  -- Stefan-Boltzmann  cte [W m-2 K-4]
rSun   = read "6.957e8" :: Double  -- Radius Sun        [m]
tSun   = 5777.0         :: Double  -- Surf. Temp. Sun   [K]
rEarth = 6378000.0      :: Double  -- Radius Earth      [m]
tEarth = 288.0          :: Double  -- Surf. Temp. Earth [K]
ua     = 149597870700.0 :: Double  -- Astronomic Unit   [m] == Distance Sun-Earth
aEarth = 0.3            :: Double  -- Albedo Earth      [-]

{- | Stefan-Boltzmann Law
  fBB == energy flux black-body [W m-2]
  t   == temperature            [K]
-}
fBB :: Double -> Double
fBB t = σ*t**4
        where
        σ  = read "5.67e-8" :: Double -- [W m-2 K-4]

{- | Model with an atmospheric layer (greenhouse effect)
  fGH == Ground emitted energy flux             [W m-2]
  fsa == Solar constant / 4                     [W m-2] 
  alb == earth surface global albedo            [-]
  tsw == shortwave transmintance of atmosphere  [-]
  tlw == longwave transmitance of atmosphere    [-]
-}
fGH :: Double -> Double -> Double -> Double -> Double
fGH fsa alb tsw tlw = f0 * (1.0+tsw)/(1.0+tlw)
        where
          f0   = fsa*(1.0-alb)

{- | Area Sphere
-}
areaSphere :: Double -> Double
areaSphere r = 4*pi*r**2

{- | Area Disk
-}
areaDisk   :: Double -> Double
areaDisk r = pi*r**2

-- CALCULATIONS
fSun  =  fBB tSun                  -- Emitted energy flux of Sun [W m-2]
ftSun =  fSun * areaSphere rSun    -- Emitted power by Sun       [W]
fSun_ua = ftSun / (areaSphere ua)  -- Energy flux Sun at 1 ua    [W m-2]

fSun_Earth = fSun_ua / 4.0         -- the area of a disk is 1/4 of sphere area,
                                  -- so the power that arrive to earth surface 
                                  -- is 1/4 of f_sun_ua

tEarthBB = ((1.0-aEarth)*fSun_Earth/σ)**(1/4) -- estimation of T earth (without atmosphere)

fEarthATMBB = fGH fSun_Earth 0.3 0.9 0.2

tEarthATMBB = (fEarthATMBB/σ)**(1/4)          -- estimation of T earth with atmosphere. Note
                                              -- is the temperature at the ground/surface.

main :: IO ()
main = do
      putStrLn $ "Energy Flux Sun (density) as BlackBody [Wm-2] = " ++ (printf "%4.3e" fSun)
      putStrLn $ "Total Power emitted by Sun (as BB)     [W]    = " ++ (printf "%4.3e" ftSun)
      putStrLn $ "Energy Flux Sun at 1 ua                [Wm-2] = " ++ (printf "%4.3f" fSun_ua)
      putStrLn $ "Surf. Temp. Earth without atmosphere   [K]    = " ++ (printf "%4.3f" tEarthBB)
      putStrLn $ "Surf. Temp. Earth with atm. layer      [K]    = " ++ (printf "%4.3f" tEarthATMBB)

  1. Using a similar notation to the book An Introduction of Atmospheric Physics (David G. Andrews).