61 subroutine zensun(day,time,lat,lon,pi,sun_zenith,sun_azimuth)
64 use kinds,
only: r_kind,i_kind
68 integer(i_kind),
intent(in):: day
69 real(r_kind),
intent(in) :: pi,time,lat,lon
73 real(r_kind) y(5),y2(5),x(2,5),Tx(5,2),xTx(2,2),aTx(5,2),det
74 real(r_kind) tt,eqtime,decang,latsun,lonsun
75 real(r_kind) nday(74),eqt(74),dec(74)
76 real(r_kind) beta(2), beta2(2), a(2,2)
77 real(r_kind) t0,t1,p0,p1,zz,xx,yy
78 real(r_kind),
intent(out) :: sun_zenith,sun_azimuth
80 data nday/1.0, 6.0, 11.0, 16.0, 21.0, 26.0, 31.0, 36.0, 41.
81 51.0, 56.0, 61.0, 66.0, 71.0, 76.0, 81.0, 86.0, 91.
82 101.0, 106.0, 111.0, 116.0, 121.0, 126.0, 131.0, 136.0, 141
83 151.0, 156.0, 161.0, 166.0, 171.0, 176.0, 181.0, 186.0, 191
84 201.0, 206.0, 211.0, 216.0, 221.0, 226.0, 231.0, 236.0, 241
85 251.0, 256.0, 261.0, 266.0, 271.0, 276.0, 281.0, 286.0, 291
86 301.0, 306.0, 311.0, 316.0, 321.0, 326.0, 331.0, 336.0, 341
87 351.0, 356.0, 361.0, 366.0/
89 data eqt/ -3.23, -5.49, -7.60, -9.48,-11.09,-12.39,-13.34,-13.95,-14.
90 -13.85,-13.22,-12.35,-11.26,-10.01, -8.64, -7.18, -5.67, -4.
91 -1.29, -0.02, 1.10, 2.05, 2.80, 3.33, 3.63, 3.68, 3.
92 2.48, 1.71, 0.79, -0.24, -1.33, -2.41, -3.45, -4.39, -5.
93 -6.28, -6.49, -6.44, -6.15, -5.60, -4.82, -3.81, -2.60, -1.
94 2.03, 3.76, 5.54, 7.31, 9.04, 10.69, 12.20, 13.53, 14.
95 16.12, 16.41, 16.36, 15.95, 15.19, 14.09, 12.67, 10.93, 8.
96 4.32, 1.86, -0.62, -3.23/
98 data dec/ -23.06,-22.57,-21.91,-21.06,-20.05,-18.88,-17.57,-16.13,-14.
99 -11.16, -9.34, -7.46, -5.54, -3.59, -1.62, 0.36, 2.33, 4.
100 8.06, 9.88, 11.62, 13.29, 14.87, 16.34, 17.70, 18.94, 20.
101 21.81, 22.47, 22.95, 23.28, 23.43, 23.40, 23.21, 22.85, 22.
102 20.79, 19.80, 18.67, 17.42, 16.05, 14.57, 13.00, 11.33, 9.
103 5.95, 4.06, 2.13, 0.19, -1.75, -3.69, -5.62, -7.51, -9.
104 -12.88,-14.53,-16.07,-17.50,-18.81,-19.98,-20.99,-21.85,-22.
105 -23.33,-23.44,-23.35,-23.06/
111 tt= mod(real((int(day)+time/24.-1.)),365.25) +1.
114 if ((tt >= nday(di)) .and. (tt <= nday(di+1)))
exit
121 if ((di >= 3) .and. (di <= 72))
then
122 y(:) = eqt(di-2:di+2)
123 y2(:) = dec(di-2:di+2)
125 x(2,:) = nday(di-2:di+2)**3
129 y(2:5) = eqt(di-1:di+2)
131 y2(2:5) = dec(di-1:di+2)
134 x(2,2:5) = (365.+nday(di-1:di+2))**3
138 y(3:5) = eqt(di:di+2)
140 y2(3:5) = dec(di:di+2)
142 x(2,1:2) = nday(72:73)**3
143 x(2,3:5) = (365.+nday(di:di+2))**3
146 y(1:4) = eqt(di-2:di+1)
148 y2(1:4) = dec(di-2:di+1)
151 x(2,1:4) = nday(di-2:di+1)**3
152 x(2,5) = (365.+nday(2))**3
155 y(1:3) = eqt(di-2:di)
157 y2(1:3) = dec(di-2:di)
160 x(2,1:3) = nday(di-2:di)**3
161 x(2,4:5) = (365.+nday(2:3))**3
168 xtx(1,1)=x(1,1)*tx(1,1)+x(1,2)*tx(2,1)+x(1,3)*tx(3,1)+x(1,4)*tx(4,1)+x
169 xtx(1,2)=x(1,1)*tx(1,2)+x(1,2)*tx(2,2)+x(1,3)*tx(3,2)+x(1,4)*tx(4,2)+x
170 xtx(2,1)=x(2,1)*tx(1,1)+x(2,2)*tx(2,1)+x(2,3)*tx(3,1)+x(2,4)*tx(4,1)+x
171 xtx(2,2)=x(2,1)*tx(1,2)+x(2,2)*tx(2,2)+x(2,3)*tx(3,2)+x(2,4)*tx(4,2)+x
173 det = xtx(1,1)*xtx(2,2) - xtx(1,2)*xtx(2,1)
174 a(1,1) = xtx(2,2)/det
175 a(1,2) = -xtx(1,2)/det
176 a(2,1) = -xtx(2,1)/det
177 a(2,2) = xtx(1,1)/det
180 atx(1,1)=tx(1,1)*a(1,1)+tx(1,2)*a(2,1)
181 atx(2,1)=tx(2,1)*a(1,1)+tx(2,2)*a(2,1)
182 atx(3,1)=tx(3,1)*a(1,1)+tx(3,2)*a(2,1)
183 atx(4,1)=tx(4,1)*a(1,1)+tx(4,2)*a(2,1)
184 atx(5,1)=tx(5,1)*a(1,1)+tx(5,2)*a(2,1)
185 atx(1,2)=tx(1,1)*a(1,2)+tx(1,2)*a(2,2)
186 atx(2,2)=tx(2,1)*a(1,2)+tx(2,2)*a(2,2)
187 atx(3,2)=tx(3,1)*a(1,2)+tx(3,2)*a(2,2)
188 atx(4,2)=tx(4,1)*a(1,2)+tx(4,2)*a(2,2)
189 atx(5,2)=tx(5,1)*a(1,2)+tx(5,2)*a(2,2)
192 beta(1) = y(1)*atx(1,1)+y(2)*atx(2,1)+y(3)*atx(3,1)+y(4)*atx(4,1)+y(5)
193 beta(2) = y(1)*atx(1,2)+y(2)*atx(2,2)+y(3)*atx(3,2)+y(4)*atx(4,2)+y(5)
196 beta2(1) = y2(1)*atx(1,1)+y2(2)*atx(2,1)+y2(3)*atx(3,1)+y2(4)*atx(4,1)
197 beta2(2) = y2(1)*atx(1,2)+y2(2)*atx(2,2)+y2(3)*atx(3,2)+y2(4)*atx(4,2)
201 if ((di < 3) .or. (di > 72)) tt = tt + 365.
203 eqtime=(beta(1) + beta(2)*tt**3)/60.
204 decang=beta2(1) + beta2(2)*tt**3
210 lonsun=-15.*(ut-12.+eqtime)
213 t1=(90.-latsun)*pi/180.
218 zz=cos(t0)*cos(t1)+sin(t0)*sin(t1)*cos(p1-p0)
220 xx=sin(t1)*sin(p1-p0)
221 yy=sin(t0)*cos(t1)-cos(t0)*sin(t1)*cos(p1-p0)
223 sun_zenith=90-acos(zz)/(pi/180)
224 sun_azimuth=atan2(xx,yy)/(pi/180)