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

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

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

trunk/phylmd/alboc.f revision 117 by guez, Thu Dec 4 16:48:53 2014 UTC trunk/phylmd/Interface_surf/alboc.f revision 130 by guez, Tue Feb 24 15:43:51 2015 UTC
# Line 1  Line 1 
1  SUBROUTINE alboc(rjour, rlat, albedo)  module alboc_m
2    ! From LMDZ4/libf/phylmd/albedo.F,v 1.2 2005/02/07 15:00:52  
   USE dimens_m  
   USE dimphy  
   USE yomcst  
   USE orbite_m, ONLY: orbite  
3    IMPLICIT NONE    IMPLICIT NONE
4    ! ======================================================================  
5    ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)  contains
6    ! Date: le 16 mars 1995  
7    ! Objet: Calculer l'albedo sur l'ocean    SUBROUTINE alboc(jour, rlat, albedo)
8    ! Methode: Integrer numeriquement l'albedo pendant une journee  
9        ! From LMDZ4/libf/phylmd/albedo.F, version 1.2 2005/02/07 15:00:52
10    ! Arguments;  
11    ! rjour (in,R)  : jour dans l'annee (a compter du 1 janvier)      ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
12    ! rlat (in,R)   : latitude en degre      ! Date: le 16 mars 1995
13    ! albedo (out,R): albedo obtenu (de 0 a 1)      ! Objet: Calculer l'albedo sur l'ocean
14    ! ======================================================================      ! Methode: Integrer numeriquement l'albedo pendant une journee
15    
16    REAL fmagic ! un facteur magique pour regler l'albedo      USE dimphy, only: klon
17    ! cc      PARAMETER (fmagic=0.7)      USE yomcst, only: r_incl
18    ! ccIM => a remplacer      USE orbite_m, ONLY: orbite
19    ! PARAMETER (fmagic=1.32)  
20    PARAMETER (fmagic=1.0)      ! Arguments;
21    ! PARAMETER (fmagic=0.7)      ! jour (in) : jour dans l'annee (a compter du 1 janvier)
22    INTEGER npts ! il controle la precision de l'integration      ! rlat (in, R) : latitude en degre
23    PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes      ! albedo (out, R): albedo obtenu (de 0 a 1)
24    
25    REAL rlat(klon), rjour, albedo(klon)      REAL fmagic ! un facteur magique pour regler l'albedo
26    REAL zdist, zlonsun, zpi, zdeclin      ! cc PARAMETER (fmagic=0.7)
27    REAL rmu, alb, srmu, salb, fauxo, aa, bb      ! ccIM => a remplacer
28    INTEGER i, k      ! PARAMETER (fmagic=1.32)
29    ! ccIM      PARAMETER (fmagic=1.0)
30    LOGICAL ancien_albedo      ! PARAMETER (fmagic=0.7)
31    PARAMETER (ancien_albedo=.FALSE.)      INTEGER npts ! il controle la precision de l'integration
32    ! SAVE albedo      PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
33    
34    IF (ancien_albedo) THEN      integer jour
35        REAL rlat(klon), albedo(klon)
36      zpi = 4.*atan(1.)      REAL zdist, zlonsun, zpi, zdeclin
37        REAL rmu, alb, srmu, salb, fauxo, aa, bb
38      ! Calculer la longitude vraie de l'orbite terrestre:      INTEGER i, k
39      CALL orbite(rjour, zlonsun, zdist)      ! ccIM
40        LOGICAL ancien_albedo
41      ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):      PARAMETER (ancien_albedo=.FALSE.)
42      zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))      ! SAVE albedo
43    
44      DO i = 1, klon      IF (ancien_albedo) THEN
45        aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)  
46        bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)         zpi = 4.*atan(1.)
47    
48        ! Midi local (angle du temps = 0.0):         ! Calculer la longitude vraie de l'orbite terrestre:
49        rmu = aa + bb*cos(0.0)         CALL orbite(real(jour), zlonsun, zdist)
50        rmu = max(0.0, rmu)  
51        fauxo = (1.47-acos(rmu))/.15         ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
52        alb = 0.03 + 0.630/(1.+fauxo*fauxo)         zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
53        srmu = rmu  
54        salb = alb*rmu         DO i = 1, klon
55              aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
56        ! Faire l'integration numerique de midi a minuit (le facteur 2            bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
57        ! prend en compte l'autre moitie de la journee):  
58        DO k = 1, npts            ! Midi local (angle du temps = 0.0):
59          rmu = aa + bb*cos(float(k)/float(npts)*zpi)            rmu = aa + bb*cos(0.0)
60          rmu = max(0.0, rmu)            rmu = max(0.0, rmu)
61          fauxo = (1.47-acos(rmu))/.15            fauxo = (1.47-acos(rmu))/.15
62          alb = 0.03 + 0.630/(1.+fauxo*fauxo)            alb = 0.03 + 0.630/(1.+fauxo*fauxo)
63          srmu = srmu + rmu*2.0            srmu = rmu
64          salb = salb + alb*rmu*2.0            salb = alb*rmu
65        END DO  
66        IF (srmu/=0.0) THEN            ! Faire l'integration numerique de midi a minuit (le facteur 2
67          albedo(i) = salb/srmu*fmagic            ! prend en compte l'autre moitie de la journee):
68        ELSE ! nuit polaire (on peut prendre une valeur quelconque)            DO k = 1, npts
69          albedo(i) = fmagic               rmu = aa + bb*cos(float(k)/float(npts)*zpi)
70        END IF               rmu = max(0.0, rmu)
71      END DO               fauxo = (1.47-acos(rmu))/.15
72                 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
73      ! nouvel albedo               srmu = srmu + rmu*2.0
74                 salb = salb + alb*rmu*2.0
75    ELSE            END DO
76              IF (srmu/=0.0) THEN
77      zpi = 4.*atan(1.)               albedo(i) = salb/srmu*fmagic
78              ELSE ! nuit polaire (on peut prendre une valeur quelconque)
79      ! Calculer la longitude vraie de l'orbite terrestre:               albedo(i) = fmagic
80      CALL orbite(rjour, zlonsun, zdist)            END IF
81           END DO
82      ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):  
83      zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))         ! nouvel albedo
84    
85      DO i = 1, klon      ELSE
86        aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)  
87        bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)         zpi = 4.*atan(1.)
88    
89        ! Midi local (angle du temps = 0.0):         ! Calculer la longitude vraie de l'orbite terrestre:
90        rmu = aa + bb*cos(0.0)         CALL orbite(real(jour), zlonsun, zdist)
91        rmu = max(0.0, rmu)  
92        ! IM cf. PB  alb = 0.058/(rmu + 0.30)         ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
93        ! alb = 0.058/(rmu + 0.30) * 1.5         zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
94        alb = 0.058/(rmu+0.30)*1.2  
95        ! alb = 0.058/(rmu + 0.30) * 1.3         DO i = 1, klon
96        srmu = rmu            aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
97        salb = alb*rmu            bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
98    
99        ! Faire l'integration numerique de midi a minuit (le facteur 2            ! Midi local (angle du temps = 0.0):
100        ! prend en compte l'autre moitie de la journee):            rmu = aa + bb*cos(0.0)
101        DO k = 1, npts            rmu = max(0.0, rmu)
102          rmu = aa + bb*cos(float(k)/float(npts)*zpi)            ! IM cf. PB alb = 0.058/(rmu + 0.30)
103          rmu = max(0.0, rmu)            ! alb = 0.058/(rmu + 0.30) * 1.5
104          ! IM cf. PB      alb = 0.058/(rmu + 0.30)            alb = 0.058/(rmu+0.30)*1.2
105          ! alb = 0.058/(rmu + 0.30) * 1.5            ! alb = 0.058/(rmu + 0.30) * 1.3
106          alb = 0.058/(rmu+0.30)*1.2            srmu = rmu
107          ! alb = 0.058/(rmu + 0.30) * 1.3            salb = alb*rmu
108          srmu = srmu + rmu*2.0  
109          salb = salb + alb*rmu*2.0            ! Faire l'integration numerique de midi a minuit (le facteur 2
110        END DO            ! prend en compte l'autre moitie de la journee):
111        IF (srmu/=0.0) THEN            DO k = 1, npts
112          albedo(i) = salb/srmu*fmagic               rmu = aa + bb*cos(float(k)/float(npts)*zpi)
113        ELSE ! nuit polaire (on peut prendre une valeur quelconque)               rmu = max(0.0, rmu)
114          albedo(i) = fmagic               ! IM cf. PB alb = 0.058/(rmu + 0.30)
115        END IF               ! alb = 0.058/(rmu + 0.30) * 1.5
116      END DO               alb = 0.058/(rmu+0.30)*1.2
117    END IF               ! alb = 0.058/(rmu + 0.30) * 1.3
118    RETURN               srmu = srmu + rmu*2.0
119  END SUBROUTINE alboc               salb = salb + alb*rmu*2.0
120              END DO
121              IF (srmu/=0.0) THEN
122                 albedo(i) = salb/srmu*fmagic
123              ELSE ! nuit polaire (on peut prendre une valeur quelconque)
124                 albedo(i) = fmagic
125              END IF
126           END DO
127        END IF
128    
129      END SUBROUTINE alboc
130    
131    end module alboc_m

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

  ViewVC Help
Powered by ViewVC 1.1.21