5 SUBROUTINE orbite(xjour,longi,dist)
18 REAL xjour, longi, dist
23 REAL pir,xl,xllp,xee,xse,xlam,dlamm,anm,ranm,anv,ranv
25 pir = 4.0*atan(1.0) / 180.0
30 xlam = (r_ecc/2.0+r_ecc*xee/8.0)*(1.0+xse)*sin(xllp)
31 . - xee/4.0*(0.5+xse)*sin(2.0*xllp)
32 . + r_ecc*xee/8.0*(1.0/3.0+xse)*sin(3.0*xllp)
34 dlamm=xlam+(xjour-81.0)
38 ranv=ranm+(2.0*r_ecc-xee/4.0)*sin(ranm)
39 . +5.0/4.0*r_ecc*r_ecc*sin(2.0*ranm)
40 . +13.0/12.0*xee*sin(3.0*ranm)
45 dist = (1-r_ecc*r_ecc)
46 . /(1+r_ecc*cos(pir*(longi-(r_peri+180.0))))
50 SUBROUTINE angle(longi, lati, frac, muzero)
70 REAL lati(klon),
frac(klon), muzero(klon)
72 REAL lat, omega, lon_sun, lat_sun
76 pi_local = 4.0 * atan(1.0)
77 incl=r_incl * pi_local / 180.
79 lon_sun = longi * pi_local / 180.0
80 lat_sun = asin(sin(lon_sun)*sin(incl) )
83 lat = lati(
i) * pi_local / 180.0
85 IF ( lat .GE. (pi_local/2.+lat_sun)
86 . .OR. lat.LE.(-pi_local/2.+lat_sun))
THEN
88 ELSE IF ( lat.GE.(pi_local/2.-lat_sun)
89 . .OR. lat.LE.(-pi_local/2.-lat_sun))
THEN
92 omega = -tan(lat)*tan(lat_sun)
96 frac(
i) = omega / pi_local
98 IF (omega .GT. 0.0)
THEN
99 muzero(
i) = sin(lat)*sin(lat_sun)
100 . + cos(lat)*cos(lat_sun)*sin(omega) / omega
109 SUBROUTINE zenang(longi,gmtime,pdtrad,lat,long,
139 real,
intent(in):: longi, gmtime, pdtrad
140 real lat(klon), long(klon), pmu0(klon),
frac(klon)
143 real gmtime1, gmtime2
144 real pi_local, deux_pi_local, incl
145 real omega1, omega2, omega
149 real omegadeb, omegafin
150 real zfrac1, zfrac2, z1_mu, z2_mu
156 pi_local = 4.0 * atan(1.0)
157 deux_pi_local = 2.0 * pi_local
158 incl=r_incl * pi_local / 180.
160 lon_sun = longi * pi_local / 180.0
161 lat_sun = asin(sin(lon_sun)*sin(incl) )
163 gmtime1=gmtime*86400.
164 gmtime2=gmtime*86400.+pdtrad
168 latr = lat(
i) * pi_local / 180.
186 IF (latr.GE.(pi_local/2.-lat_sun)
187 . .OR. latr.LE.(-pi_local/2.-lat_sun))
THEN
190 IF (latr.LT.(pi_local/2.+lat_sun).AND.
191 . latr.GT.(-pi_local/2.+lat_sun).AND.
192 . latr.LT.(pi_local/2.-lat_sun).AND.
193 . latr.GT.(-pi_local/2.-lat_sun))
THEN
194 omega = -tan(latr)*tan(lat_sun)
198 omega1 = gmtime1 + long(
i)*86400.0/360.0
199 omega1 = omega1 / 86400.0*deux_pi_local
200 omega1 = mod(omega1+deux_pi_local, deux_pi_local)
201 omega1 = omega1 - pi_local
203 omega2 = gmtime2 + long(
i)*86400.0/360.0
204 omega2 = omega2 / 86400.0*deux_pi_local
205 omega2 = mod(omega2+deux_pi_local, deux_pi_local)
206 omega2 = omega2 - pi_local
208 IF (omega1.LE.omega2)
THEN
210 IF (omega2.LE.-omega .OR. omega1.GE.omega
211 . .OR. omega.LT.1e-5)
THEN
215 omegadeb=max(-omega,omega1)
216 omegafin=min(omega,omega2)
217 frac(
i)=(omegafin-omegadeb)/(omega2-omega1)
218 pmu0(
i)=sin(latr)*sin(lat_sun) +
219 . cos(latr)*cos(lat_sun)*
220 . (sin(omegafin)-sin(omegadeb))/
221 . (omegafin-omegadeb)
227 IF (omega1.GE.omega)
THEN
231 omegadeb=max(-omega,omega1)
233 zfrac1=omegafin-omegadeb
234 z1_mu =sin(latr)*sin(lat_sun) +
235 . cos(latr)*cos(lat_sun)*
236 . (sin(omegafin)-sin(omegadeb))/
237 . (omegafin-omegadeb)
240 IF (omega2.LE.-omega)
THEN
245 omegafin=min(omega,omega2)
246 zfrac2=omegafin-omegadeb
247 z2_mu =sin(latr)*sin(lat_sun) +
248 . cos(latr)*cos(lat_sun)*
249 . (sin(omegafin)-sin(omegadeb))/
250 . (omegafin-omegadeb)
254 frac(
i)=(zfrac1+zfrac2)/(omega2+deux_pi_local-omega1)
255 pmu0(
i)=(zfrac1*z1_mu+zfrac2*z2_mu)/max(zfrac1+zfrac2,1.e-10)
263 SUBROUTINE zenith (longi, gmtime, lat, long,
288 REAL lat(klon), long(klon), pmu0(klon), fract(klon)
291 REAL zpi, zpir, omega, zgmtime
292 REAL incl, lat_sun, lon_sun
296 zgmtime=gmtime*86400.
300 lon_sun = longi * zpir
301 lat_sun = asin(sin(lon_sun)*sin(incl) )
313 omega = zgmtime + long(
n)*86400.0/360.0
314 omega = omega / 86400.0 * 2.0 * zpi
315 omega = mod(omega + 2.0 * zpi, 2.0 * zpi)
317 pmu0(
n) = sin(lat(
n)*zpir) * sin(lat_sun)
318 . + cos(lat(
n)*zpir) * cos(lat_sun)
320 pmu0(
n) = max(pmu0(
n), 0.0)
321 IF (pmu0(
n).GT.1.e-6) fract(
n)=1.0