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.0, 46.0,&
81 51.0, 56.0, 61.0, 66.0, 71.0, 76.0, 81.0, 86.0, 91.0, 96.0,&
82 101.0, 106.0, 111.0, 116.0, 121.0, 126.0, 131.0, 136.0, 141.0, 146.0,&
83 151.0, 156.0, 161.0, 166.0, 171.0, 176.0, 181.0, 186.0, 191.0, 196.0,&
84 201.0, 206.0, 211.0, 216.0, 221.0, 226.0, 231.0, 236.0, 241.0, 246.0,&
85 251.0, 256.0, 261.0, 266.0, 271.0, 276.0, 281.0, 286.0, 291.0, 296.0,&
86 301.0, 306.0, 311.0, 316.0, 321.0, 326.0, 331.0, 336.0, 341.0, 346.0,&
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.23,-14.19,&
90 -13.85,-13.22,-12.35,-11.26,-10.01, -8.64, -7.18, -5.67, -4.16, -2.69,&
91 -1.29, -0.02, 1.10, 2.05, 2.80, 3.33, 3.63, 3.68, 3.49, 3.09,&
92 2.48, 1.71, 0.79, -0.24, -1.33, -2.41, -3.45, -4.39, -5.20, -5.84,&
93 -6.28, -6.49, -6.44, -6.15, -5.60, -4.82, -3.81, -2.60, -1.19, 0.36,&
94 2.03, 3.76, 5.54, 7.31, 9.04, 10.69, 12.20, 13.53, 14.65, 15.52,&
95 16.12, 16.41, 16.36, 15.95, 15.19, 14.09, 12.67, 10.93, 8.93, 6.70,&
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.57,-12.91,&
99 -11.16, -9.34, -7.46, -5.54, -3.59, -1.62, 0.36, 2.33, 4.28, 6.19,&
100 8.06, 9.88, 11.62, 13.29, 14.87, 16.34, 17.70, 18.94, 20.04, 21.00,&
101 21.81, 22.47, 22.95, 23.28, 23.43, 23.40, 23.21, 22.85, 22.32, 21.63,&
102 20.79, 19.80, 18.67, 17.42, 16.05, 14.57, 13.00, 11.33, 9.60, 7.80,&
103 5.95, 4.06, 2.13, 0.19, -1.75, -3.69, -5.62, -7.51, -9.36,-11.16,&
104 -12.88,-14.53,-16.07,-17.50,-18.81,-19.98,-20.99,-21.85,-22.52,-23.02,&
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(1,5)*tx(5,1)
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(1,5)*tx(5,2)
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(2,5)*tx(5,1)
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(2,5)*tx(5,2)
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)*atx(5,1)
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)*atx(5,2)
196 beta2(1) = y2(1)*atx(1,1)+y2(2)*atx(2,1)+y2(3)*atx(3,1)+y2(4)*atx(4,1)+y2(5)*atx(5,1)
197 beta2(2) = y2(1)*atx(1,2)+y2(2)*atx(2,2)+y2(3)*atx(3,2)+y2(4)*atx(4,2)+y2(5)*atx(5,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)