12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- !
- ! Solar zenith stuff.
- !
- module phys_sza
- implicit none
-
- ! --- in/out ------------------------------
-
- private
-
- public :: cos_sza
-
-
- contains
- ! =======================================================
-
-
- !
- ! Return cos( solar_zenith_angle ) given :
- ! o daynr : januari 1 = 1, ..., december 31 = 365|366
- ! o hour, minutes, seconds
- ! o lon, lat in degrees
- !
- real function cos_sza( daynr, hour, minu, sec, lon, lat )
- use binas, only : pi, deg2rad
-
- ! --- in/out --------------------------------
- integer, intent(in) :: daynr
- integer, intent(in) :: hour, minu, sec
- real, intent(in) :: lon ! deg [-180,180]
- real, intent(in) :: lat ! deg [ -90, 90]
-
- ! --- const ---------------------------------
-
- real, parameter :: piby = pi / 180.0
- real, parameter :: obliq = 23.45 * piby
- ! --- local ---------------------------------
-
- real :: deday, delta
- real :: time
- real :: lonnoon
-
- ! --- begin -------------------------------------
-
- deday = 4.88 + 2.0*pi*real(daynr)/365.0
- delta = asin( sin(obliq) * sin(deday) )
-
- ! seconds after 00:00
- time = hour*3600.0 + minu*60.0 + sec
- ! longitude at which it is noon at current time:
- ! 00:00 pi 180 E
- ! 06:00 pi/2 90 E
- ! 12:00 0 0
- ! 18:00 -pi/2 90 W
- ! 24:00 -pi 180 W
- lonnoon = pi - 2.0*pi * real(time)/86400.0
- ! result:
- cos_sza = sin(delta)*sin(lat*deg2rad) + cos(delta)*cos(lat*deg2rad)*cos(lon*deg2rad-lonnoon)
- end function cos_sza
-
- end module phys_sza
|