/[lmdze]/trunk/Sources/phylmd/Interface_surf/alboc.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/Interface_surf/alboc.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/phylmd/Interface_surf/alboc.f revision 130 by guez, Tue Feb 24 15:43:51 2015 UTC trunk/Sources/phylmd/Interface_surf/alboc.f revision 154 by guez, Tue Jul 7 17:49:23 2015 UTC
# Line 8  contains Line 8  contains
8    
9      ! From LMDZ4/libf/phylmd/albedo.F, version 1.2 2005/02/07 15:00:52      ! From LMDZ4/libf/phylmd/albedo.F, version 1.2 2005/02/07 15:00:52
10    
11      ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)      ! Author: Z. X. Li (LMD/CNRS) (adaptation du GCM du LMD)
12      ! Date: le 16 mars 1995      ! Date : 16 mars 1995
13      ! Objet: Calculer l'albedo sur l'ocean      ! Objet : Calculer l'alb\'edo sur l'oc\'ean
14      ! Methode: Integrer numeriquement l'albedo pendant une journee      ! M\'ethode: int\'egrer num\'eriquement l'alb\'edo pendant une journ\'ee
15    
16      USE dimphy, only: klon      use nr_util, only: pi
     USE yomcst, only: r_incl  
17      USE orbite_m, ONLY: orbite      USE orbite_m, ONLY: orbite
18        USE yomcst, only: r_incl
19    
20      ! Arguments;      integer, intent(in):: jour ! jour dans l'annee (a compter du 1 janvier)
21      ! jour (in) : jour dans l'annee (a compter du 1 janvier)      REAL, intent(in):: rlat(:) ! latitude en degre
22      ! rlat (in, R) : latitude en degre      real, intent(out):: albedo(:) ! albedo obtenu (de 0 a 1)
     ! albedo (out, R): albedo obtenu (de 0 a 1)  
   
     REAL fmagic ! un facteur magique pour regler l'albedo  
     ! cc PARAMETER (fmagic=0.7)  
     ! ccIM => a remplacer  
     ! PARAMETER (fmagic=1.32)  
     PARAMETER (fmagic=1.0)  
     ! PARAMETER (fmagic=0.7)  
     INTEGER npts ! il controle la precision de l'integration  
     PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes  
   
     integer jour  
     REAL rlat(klon), albedo(klon)  
     REAL zdist, zlonsun, zpi, zdeclin  
     REAL rmu, alb, srmu, salb, fauxo, aa, bb  
     INTEGER i, k  
     ! ccIM  
     LOGICAL ancien_albedo  
     PARAMETER (ancien_albedo=.FALSE.)  
     ! SAVE albedo  
   
     IF (ancien_albedo) THEN  
   
        zpi = 4.*atan(1.)  
   
        ! Calculer la longitude vraie de l'orbite terrestre:  
        CALL orbite(real(jour), zlonsun, zdist)  
   
        ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):  
        zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))  
23    
24         DO i = 1, klon      ! Local:
           aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)  
           bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)  
25    
26            ! Midi local (angle du temps = 0.0):      REAL, PARAMETER:: fmagic=1. ! un facteur magique pour regler l'albedo
           rmu = aa + bb*cos(0.0)  
           rmu = max(0.0, rmu)  
           fauxo = (1.47-acos(rmu))/.15  
           alb = 0.03 + 0.630/(1.+fauxo*fauxo)  
           srmu = rmu  
           salb = alb*rmu  
   
           ! Faire l'integration numerique de midi a minuit (le facteur 2  
           ! prend en compte l'autre moitie de la journee):  
           DO k = 1, npts  
              rmu = aa + bb*cos(float(k)/float(npts)*zpi)  
              rmu = max(0.0, rmu)  
              fauxo = (1.47-acos(rmu))/.15  
              alb = 0.03 + 0.630/(1.+fauxo*fauxo)  
              srmu = srmu + rmu*2.0  
              salb = salb + alb*rmu*2.0  
           END DO  
           IF (srmu/=0.0) THEN  
              albedo(i) = salb/srmu*fmagic  
           ELSE ! nuit polaire (on peut prendre une valeur quelconque)  
              albedo(i) = fmagic  
           END IF  
        END DO  
27    
28         ! nouvel albedo      INTEGER, PARAMETER:: npts =120
29        ! Contr\^ole la pr\'ecision de l'int\'egration. 120 correspond \`a
30        ! l'intervalle 6 minutes.
31    
32      ELSE      REAL zdist, zlonsun, zdeclin
33        REAL rmu, alb, srmu, salb, aa, bb
34         zpi = 4.*atan(1.)      INTEGER i, k
35    
36         ! Calculer la longitude vraie de l'orbite terrestre:      !----------------------------------------------------------------------
        CALL orbite(real(jour), zlonsun, zdist)  
37    
38         ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):      ! Calculer la longitude vraie de l'orbite terrestre:
39         zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))      CALL orbite(real(jour), zlonsun, zdist)
40    
41         DO i = 1, klon      ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
42            aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)      zdeclin = asin(sin(zlonsun*pi/180.0)*sin(r_incl*pi/180.0))
           bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)  
43    
44            ! Midi local (angle du temps = 0.0):      DO i = 1, size(rlat)
45            rmu = aa + bb*cos(0.0)         aa = sin(rlat(i)*pi/180.0)*sin(zdeclin)
46           bb = cos(rlat(i)*pi/180.0)*cos(zdeclin)
47    
48           ! Midi local (angle du temps = 0.0):
49           rmu = aa + bb*cos(0.0)
50           rmu = max(0.0, rmu)
51           alb = 0.058/(rmu+0.30)*1.2
52           srmu = rmu
53           salb = alb*rmu
54    
55           ! Faire l'integration numerique de midi a minuit (le facteur 2
56           ! prend en compte l'autre moitie de la journee):
57           DO k = 1, npts
58              rmu = aa + bb*cos(float(k)/float(npts)*pi)
59            rmu = max(0.0, rmu)            rmu = max(0.0, rmu)
           ! IM cf. PB alb = 0.058/(rmu + 0.30)  
           ! alb = 0.058/(rmu + 0.30) * 1.5  
60            alb = 0.058/(rmu+0.30)*1.2            alb = 0.058/(rmu+0.30)*1.2
61            ! alb = 0.058/(rmu + 0.30) * 1.3            srmu = srmu + rmu*2.0
62            srmu = rmu            salb = salb + alb*rmu*2.0
           salb = alb*rmu  
   
           ! Faire l'integration numerique de midi a minuit (le facteur 2  
           ! prend en compte l'autre moitie de la journee):  
           DO k = 1, npts  
              rmu = aa + bb*cos(float(k)/float(npts)*zpi)  
              rmu = max(0.0, rmu)  
              ! IM cf. PB alb = 0.058/(rmu + 0.30)  
              ! alb = 0.058/(rmu + 0.30) * 1.5  
              alb = 0.058/(rmu+0.30)*1.2  
              ! alb = 0.058/(rmu + 0.30) * 1.3  
              srmu = srmu + rmu*2.0  
              salb = salb + alb*rmu*2.0  
           END DO  
           IF (srmu/=0.0) THEN  
              albedo(i) = salb/srmu*fmagic  
           ELSE ! nuit polaire (on peut prendre une valeur quelconque)  
              albedo(i) = fmagic  
           END IF  
63         END DO         END DO
64      END IF         IF (srmu/=0.0) THEN
65              albedo(i) = salb/srmu*fmagic
66           ELSE ! nuit polaire (on peut prendre une valeur quelconque)
67              albedo(i) = fmagic
68           END IF
69        END DO
70    
71    END SUBROUTINE alboc    END SUBROUTINE alboc
72    

Legend:
Removed from v.130  
changed lines
  Added in v.154

  ViewVC Help
Powered by ViewVC 1.1.21