Skip to main content

Theoretical Solar Irradiance

Dr. Stavros Keppas, 07/06/2023

Calculating the theoretical solar irradiance

The theoretical diurnal solar irradiance varies with the latitude, the day (of the year) and the time during the day. It can be calculated through the calculations described below (Mikulović et al., 2015). This methodology has been developed in order to be applied on data of 1-minute temporal resolution. The input variables are displayed in Table 1, while the required for calculations constants are shown in Table 2.

Table 1 - Input variables and their format/units

VariableFormat and Units
Latitudedecimal in °, e.g., 40.52° (use 2 decimals)
Longitudedecimal in °, e.g., 15.25° (use 2 decimals)
DateYYYY-MM-DD, e.g., 2022-08-01
DT (Local Hour - GMT)In hours
Local HourInteger between 0-23
Local MinuteInteger between 0-59
Julian Daye.g., 25/2 is the day 56

Table 2 - Constants that are used in the calculations

Constant VariableValue
Solar Constant (σ)1367 W m−2
Reflective Coefficient0.2 (for ordinary ground or grass)

The Julian day can be calculated using the datetime module in python and the following commands:

fmt='%Y-%m-%d'
sdtdate = datetime.strptime(date, fmt)
sdtdate = sdtdate.timetuple()
local_day = sdtdate.tm_yday

Then, a series of calculations for the last 30-minutes in a 1-minute time interval to obtain the theoretical solar irradiance. Firstly, we calculate the Sky Diffusion factor (SDF):

SDF=0.095+0.04sin(360dtotyear(dJulian100)π180)(1)SDF = 0.095 + 0.04 \cdot \sin\left(\frac{360}{d_{totyear}} \cdot (d_{Julian} - 100) \cdot \frac{\pi}{180}\right) \tag{1}

Where dtotyeard_{totyear} is the total number of days of the current year (365 for a typical year or 366 for a leap year) and dJuliand_{Julian} the Julian day (see Table 1).

Next, through the Equation of Time (EoT) we calculate the deviation between the solar time and the time shown by a typical clock:

EoT=9.87sin(2b)7.53cos(b)1.5sin(b)(2)EoT = 9.87 \cdot \sin(2b) - 7.53 \cdot \cos(b) - 1.5 \cdot \sin(b) \tag{2}

Where

b=360dtotyear1(dJulian81)π180b = \frac{360}{d_{totyear} - 1} \cdot (d_{Julian} - 81) \cdot \frac{\pi}{180}

The angle δ\delta between the equator and the line drawn from the centre of the sun to the centre of the Earth can be obtained by the following equation:

δ=23.45sin ⁣(360dtotyear(dJulian81)π180)(3)\delta = 23.45 \cdot \sin\!\left(\frac{360}{d_{totyear}} \cdot (d_{Julian} - 81) \cdot \frac{\pi}{180}\right) \tag{3}

We also need to know the local time at which the sun is at the zenith (thus the local time of the solar noon) SN:

SN=(1260)4(LonLSTM)EoT60(4)SN = \frac{(12 \cdot 60) - 4 \cdot (Lon - LSTM) - EoT}{60} \tag{4}

Where Lon is the longitude of the region and LSTM the local meridian calculated as:

LSTM=15DTLSTM = 15 \cdot DT

(for DT and EoT see Table 1).

Then, we calculate the angle that the Earth must or has rotated so the sun is directly above the meridian of the region:

HRA=15(SNLT)(5)HRA = 15 \cdot (SN - LT) \tag{5}

Where LT is the local time in decimal format, calculated as:

LT=local_hour+local_minute60LT = local\_hour + \frac{local\_minute}{60}

Next, we can now calculate the altitude (SA) of the sun from the horizon:

SA=180πarcsin(cos(Latπ180)cos(δπ180)cos(HRAπ180)+sin(Latπ180)sin(δπ180))(6)SA = \frac{180}{\pi} \cdot \arcsin\Big( \cos\Big(\frac{Lat \cdot \pi}{180}\Big) \cdot \cos\Big(\frac{\delta \cdot \pi}{180}\Big) \cdot \cos\Big(\frac{HRA \cdot \pi}{180}\Big) + \sin\Big(\frac{Lat \cdot \pi}{180}\Big) \cdot \sin\Big(\frac{\delta \cdot \pi}{180}\Big) \Big) \tag{6}

Where Lat is the latitude and Lon is the longitude of the region.

The Extraterrestrial Solar Insolation (IO), which is the solar radiation that hits the top of the atmosphere, is given by:

IO=σ(1+0.034cos(360dJuliandtotyearπ180))(7)IO = \sigma \cdot \Big( 1 + 0.034 \cdot \cos\Big(\frac{360 \cdot d_{Julian}}{d_{totyear}} \cdot \frac{\pi}{180}\Big) \Big) \tag{7}

Where σ is the solar constant (see Table 1).

The Apparent Extraterrestrial Solar Insolation (A), then, is given by the following formula:

A=1160+75sin(360dtotyear(dJulian275)π180)(7)A = 1160 + 75 \cdot \sin\Big( \frac{360}{d_{totyear}} (d_{Julian} - 275) \cdot \frac{\pi}{180} \Big) \tag{7}

In order to simulate the average clarity of the atmosphere, we need to estimate its optical depth (OD):

OD=0.174+0.035sin(360dtotyear(dJulian100)π180)(8)OD = 0.174 + 0.035 \cdot \sin\Big( \frac{360}{d_{totyear}} (d_{Julian} - 100) \cdot \frac{\pi}{180} \Big) \tag{8}

However, we also need the Air Mass Ratio (AMR), which is a measure indicating the distance that the solar ray travels within the atmosphere:

AMR=1sin(SAπ180)(9)AMR = \Bigg| \frac{1}{\sin\Big(\frac{SA \cdot \pi}{180}\Big)} \Bigg| \tag{9}

We should also consider that the light sensor is a horizontally-aligned surface. In this case, the angle of incidence (AoI) is:

AoI=sin(SAπ180)cos(0)(10)AoI = \sin\Big(\frac{SA \cdot \pi}{180}\Big) \cdot \cos(0) \tag{10}

Then, we are finally able to estimate the clear sky irradiance at Earth’s surface that hits a surface facing directly to the sun (IB), the irradiance that reaches the horizontally-aligned surface (IBC) and the irradiance reaching the surface after diffusion (IDC):

IB=Ae(1)ODAMR(If SA = 0, IB = 0)(11)IB = A \cdot e^{(-1) \cdot OD \cdot AMR} \quad \text{(If SA = 0, IB = 0)} \tag{11} IBC=IBAoI(12)IBC = IB \cdot AoI \tag{12} IDC=SDFIB(13)IDC = SDF \cdot IB \tag{13}

Eventually, the total radiation (IC) that hits the light sensor is considered to be the summation of IBC and IDC:

IC=IBC+IDC(in W m<sup>−2</sup>)(14)IC = IBC + IDC \quad \text{(in W m<sup>−2</sup>)} \tag{14}

In order to apply a more realistic approach that is closer to the observed solar radiation, we used monthly constants suggested by the Nijegorodov Model (Nijegorodov, 1996; Ahmad and Tiwari, 2011) (Table 3).

Table 3 - Monthly constants for correcting theoretical solar radiation as suggested by Nijegorodov (1996).

MonthJanFebMarAprMayJunJulAugSepOctNovDec
a116311511142114611521157115811521150115611671169
b0.1770.1740.1700.1650.1620.1600.1590.1640.1670.1720.1740.177
c0.1140.1120.1100.1050.1010.0980.1000.1030.1070.1110.1130.115

Then, cos(θz) (θz is the solar zenith angle) is given by:

cos(θz)=sin(lat)sin(δ)+cos(lat)cos(δ)cos(HRA)(15)\cos(\theta_z) = \sin(\text{lat}) \cdot \sin(\delta) + \cos(\text{lat}) \cdot \cos(\delta) \cdot \cos(\text{HRA}) \tag{15}

In order to avoid any weird values (when solar angle is around the sunrise or sunset time) in the latter calculations:

cos(θz)=0.1whencos(θz)<0.001\cos(\theta_z) = 0.1 \quad \text{when} \quad \cos(\theta_z) < 0.001

Then, IBC is calculated from the following relationship instead of (12) (therefore (10) should not be used as well):

IBCNM=Aexp(Bcos(θz))(16)IBC_{NM} = A \cdot \exp \left( \frac{-B}{\cos(\theta_z)} \right) \tag{16}

Where A and B are given in Table 3.

Next, IDC is corrected as:

IDCNM=CIDC(17)IDC_{NM} = C \cdot IDC \tag{17}

Where C are given in Table 3.

Finally, replacing (14), we use IBCNMIBC_{NM} and IDCNMIDC_{NM} in the following equation to calculate IC:

IC=IBCNMcos(θz)+IDC(18)IC = IBC_{NM} \cdot \cos(\theta_z) + IDC \tag{18}

Note that IC<0IC < 0 should be replaced by 0W/m20 \, W/m^2.