--- trunk/phylmd/zenang.f 2014/12/18 17:30:24 118 +++ trunk/Sources/phylmd/zenang.f 2015/04/29 15:47:56 134 @@ -6,11 +6,6 @@ SUBROUTINE zenang(longi, gmtime, pdtrad, mu0, frac) - USE dimphy, ONLY: klon - USE yomcst, ONLY: r_incl - USE phyetat0_m, ONLY: rlat, rlon - use nr_util, only: assert, pi - ! Author: O. Boucher (LMD/CNRS), d'après les routines "zenith" et ! "angle" de Z.X. Li @@ -18,11 +13,17 @@ ! septembre 1996 ! Calcule les valeurs moyennes du cos de l'angle zénithal et - ! l'ensoleillement moyen entre "gmtime" et "gmtime+pdtrad" + ! l'ensoleillement moyen entre "gmtime" et "gmtime + pdtrad" ! connaissant la déclinaison, la latitude et la longitude. ! Différent de la routine "angle" en ce sens que "zenang" fournit - ! des moyennes de "mu0" et non des valeurs instantanées. Du coup - ! "frac" prend toutes les valeurs entre 0 et 1. + ! des moyennes de "mu0" et non des valeurs instantanées. Du coup + ! "frac" prend toutes les valeurs entre 0 et 1. Cf. Capderou (2003 + ! 784, equation 9.11). + + USE dimphy, ONLY: klon + USE yomcst, ONLY: r_incl + USE phyetat0_m, ONLY: rlat, rlon + use nr_util, only: assert, pi, twopi REAL, INTENT(IN):: longi ! longitude vraie de la terre dans son plan solaire à partir de @@ -41,8 +42,6 @@ INTEGER i REAL gmtime1, gmtime2 - REAL deux_pi - REAL omega1, omega2 ! temps 1 et 2 exprimés en radians avec 0 à midi REAL omega ! heure en rad du coucher de soleil @@ -56,8 +55,6 @@ !---------------------------------------------------------------------- if (present(frac)) call assert((/size(mu0), size(frac)/) == klon, "zenang") - - deux_pi = 2*pi lat_sun = asin(sin(longi * pi / 180.) * sin(r_incl * pi / 180.)) ! Capderou (2003 784, equation 4.49) @@ -78,13 +75,13 @@ END IF omega1 = gmtime1 + rlon(i)*86400.0/360.0 - omega1 = omega1/86400.0*deux_pi - omega1 = mod(omega1+deux_pi, deux_pi) + omega1 = omega1/86400.0*twopi + omega1 = mod(omega1+twopi, twopi) omega1 = omega1 - pi omega2 = gmtime2 + rlon(i)*86400.0/360.0 - omega2 = omega2/86400.0*deux_pi - omega2 = mod(omega2+deux_pi, deux_pi) + omega2 = omega2/86400.0*twopi + omega2 = mod(omega2+twopi, twopi) omega2 = omega2 - pi IF (omega1<=omega2) THEN @@ -111,8 +108,8 @@ omegadeb = max(-omega, omega1) omegafin = omega zfrac1 = omegafin - omegadeb - z1_mu = sin(latr)*sin(lat_sun) + cos(latr)*cos(lat_sun)*(sin( & - omegafin)-sin(omegadeb))/(omegafin-omegadeb) + z1_mu = sin(latr) * sin(lat_sun) + cos(latr) * cos(lat_sun) & + * (sin(omegafin) - sin(omegadeb)) / (omegafin - omegadeb) END IF ! entre -pi et omega2 IF (omega2<=-omega) THEN ! nuit @@ -122,12 +119,11 @@ omegadeb = -omega omegafin = min(omega, omega2) zfrac2 = omegafin - omegadeb - z2_mu = sin(latr)*sin(lat_sun) + cos(latr)*cos(lat_sun)*(sin( & - omegafin)-sin(omegadeb))/(omegafin-omegadeb) - + z2_mu = sin(latr) * sin(lat_sun) + cos(latr) * cos(lat_sun) & + * (sin(omegafin) - sin(omegadeb)) / (omegafin - omegadeb) END IF ! moyenne - IF (present(frac)) frac(i) = (zfrac1+zfrac2)/ (omega2+deux_pi-omega1) + IF (present(frac)) frac(i) = (zfrac1+zfrac2)/ (omega2+twopi-omega1) mu0(i) = (zfrac1*z1_mu+zfrac2*z2_mu)/max(zfrac1+zfrac2, 1.E-10) END IF END DO