dayLength, noon, dawn, dusk
DayLength is calculated from the combination of latitude [0°..90°] and day number [1..365] (no account for leap years). Noon is set to 12.00 minus the time equation, however, for the benefit of comparability of models, the time equation in CSR's Sun is forced to zero. Dusk and dawn equal noon +/- half the day length.
The declination of the sun is the angle between the rays of the Sun and the plane of the Earth's equator. At the solstices, the declination reaches its maximum value of 23°26'. At the moment of each equinox, the center of the sun appears to pass through the celestial equator, and the declination is 0°.
The solar altitude is the apparent angle between the horizon and the sun. It depends on the latitude, the declination and the time of the day.
|sine of solar altitude|
hourangle = self.RADperHOUR * (time + self.equation - 12.) return (sin(self.declination) * sin(self.latitude) + cos(self.declination) * cos(self.latitude) * cos(hourangle))
atmospheric transmission factor
def getAtmosphericTransmissionFactor(self, measuredGlobalRadiation, time = NOON): """ Use measured global radiation to determine the atmospheric transmission factor. @param measuredGlobalRadiation: global radiation at the top of the canopy (J/m2.day) @return: fraction transmitted """ AVRAD = measuredGlobalRadiation SINB = self.sineOfSolarAltitude(time) ATMTR = (AVRAD * (1. + 0.4 * SINB)) / (self.solarConstant * self._DSINBE) return ATMTR
fraction diffuse light
The fraction of scattered light within the total radiation can be calculated in a SIMPLE way, following the straight line models by Goudriaan & Van Laar (1994: p. 32), of by curvilinear models. Of both types paramitrizations exist for daily and hourly calculations. The former (daily) mode is chosen when the time-parameter is left to default:
The PAR is linear with global radiation and a sine function taking into account the solar altitude:
SINB = self.sineOfSolarAltitude(time) PARTOT = 0.5*measuredGlobalRadiation * SINB*(1.+0.4*SINB)/self._DSINBE return max(0.0, PARTOT)
An important internal variable used in several of the sun's functions is the Daily integral of sine of solar height corrected for lower transmission at low elevation, in ancestorial models consequently called DSINBE. For it's calculation, the module SASTRO.F90 from Oryza2 (Van Kraalingen, 1996) has been incorporated. This module is by and by identical to ASTRO.FOR of earlier models, but can deal with the situation where declination + latitude surpasses 90°.
DSINBE integrates the solar altitude over a day and thus may be at odds with the independently calculated solar altitude. However, the diference should be minor.