/[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

revision 124 by guez, Thu Dec 18 17:30:24 2014 UTC revision 125 by guez, Fri Feb 6 15:00:28 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(rjour, 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)      ! rjour (in, R) : 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      REAL rlat(klon), rjour, albedo(klon)
35        REAL zdist, zlonsun, zpi, zdeclin
36      zpi = 4.*atan(1.)      REAL rmu, alb, srmu, salb, fauxo, aa, bb
37        INTEGER i, k
38      ! Calculer la longitude vraie de l'orbite terrestre:      ! ccIM
39      CALL orbite(rjour, zlonsun, zdist)      LOGICAL ancien_albedo
40        PARAMETER (ancien_albedo=.FALSE.)
41      ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):      ! SAVE albedo
42      zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))  
43        IF (ancien_albedo) THEN
44      DO i = 1, klon  
45        aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)         zpi = 4.*atan(1.)
46        bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)  
47           ! Calculer la longitude vraie de l'orbite terrestre:
48        ! Midi local (angle du temps = 0.0):         CALL orbite(rjour, zlonsun, zdist)
49        rmu = aa + bb*cos(0.0)  
50        rmu = max(0.0, rmu)         ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
51        fauxo = (1.47-acos(rmu))/.15         zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
52        alb = 0.03 + 0.630/(1.+fauxo*fauxo)  
53        srmu = rmu         DO i = 1, klon
54        salb = alb*rmu            aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
55              bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
56        ! Faire l'integration numerique de midi a minuit (le facteur 2  
57        ! prend en compte l'autre moitie de la journee):            ! Midi local (angle du temps = 0.0):
58        DO k = 1, npts            rmu = aa + bb*cos(0.0)
59          rmu = aa + bb*cos(float(k)/float(npts)*zpi)            rmu = max(0.0, rmu)
60          rmu = max(0.0, rmu)            fauxo = (1.47-acos(rmu))/.15
61          fauxo = (1.47-acos(rmu))/.15            alb = 0.03 + 0.630/(1.+fauxo*fauxo)
62          alb = 0.03 + 0.630/(1.+fauxo*fauxo)            srmu = rmu
63          srmu = srmu + rmu*2.0            salb = alb*rmu
64          salb = salb + alb*rmu*2.0  
65        END DO            ! Faire l'integration numerique de midi a minuit (le facteur 2
66        IF (srmu/=0.0) THEN            ! prend en compte l'autre moitie de la journee):
67          albedo(i) = salb/srmu*fmagic            DO k = 1, npts
68        ELSE ! nuit polaire (on peut prendre une valeur quelconque)               rmu = aa + bb*cos(float(k)/float(npts)*zpi)
69          albedo(i) = fmagic               rmu = max(0.0, rmu)
70        END IF               fauxo = (1.47-acos(rmu))/.15
71      END DO               alb = 0.03 + 0.630/(1.+fauxo*fauxo)
72                 srmu = srmu + rmu*2.0
73      ! nouvel albedo               salb = salb + alb*rmu*2.0
74              END DO
75    ELSE            IF (srmu/=0.0) THEN
76                 albedo(i) = salb/srmu*fmagic
77      zpi = 4.*atan(1.)            ELSE ! nuit polaire (on peut prendre une valeur quelconque)
78                 albedo(i) = fmagic
79      ! Calculer la longitude vraie de l'orbite terrestre:            END IF
80      CALL orbite(rjour, zlonsun, zdist)         END DO
81    
82      ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):         ! nouvel albedo
83      zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))  
84        ELSE
85      DO i = 1, klon  
86        aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)         zpi = 4.*atan(1.)
87        bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)  
88           ! Calculer la longitude vraie de l'orbite terrestre:
89        ! Midi local (angle du temps = 0.0):         CALL orbite(rjour, zlonsun, zdist)
90        rmu = aa + bb*cos(0.0)  
91        rmu = max(0.0, rmu)         ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
92        ! IM cf. PB  alb = 0.058/(rmu + 0.30)         zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
93        ! alb = 0.058/(rmu + 0.30) * 1.5  
94        alb = 0.058/(rmu+0.30)*1.2         DO i = 1, klon
95        ! alb = 0.058/(rmu + 0.30) * 1.3            aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
96        srmu = rmu            bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
97        salb = alb*rmu  
98              ! Midi local (angle du temps = 0.0):
99        ! Faire l'integration numerique de midi a minuit (le facteur 2            rmu = aa + bb*cos(0.0)
100        ! prend en compte l'autre moitie de la journee):            rmu = max(0.0, rmu)
101        DO k = 1, npts            ! IM cf. PB alb = 0.058/(rmu + 0.30)
102          rmu = aa + bb*cos(float(k)/float(npts)*zpi)            ! alb = 0.058/(rmu + 0.30) * 1.5
103          rmu = max(0.0, rmu)            alb = 0.058/(rmu+0.30)*1.2
104          ! IM cf. PB      alb = 0.058/(rmu + 0.30)            ! alb = 0.058/(rmu + 0.30) * 1.3
105          ! alb = 0.058/(rmu + 0.30) * 1.5            srmu = rmu
106          alb = 0.058/(rmu+0.30)*1.2            salb = alb*rmu
107          ! alb = 0.058/(rmu + 0.30) * 1.3  
108          srmu = srmu + rmu*2.0            ! Faire l'integration numerique de midi a minuit (le facteur 2
109          salb = salb + alb*rmu*2.0            ! prend en compte l'autre moitie de la journee):
110        END DO            DO k = 1, npts
111        IF (srmu/=0.0) THEN               rmu = aa + bb*cos(float(k)/float(npts)*zpi)
112          albedo(i) = salb/srmu*fmagic               rmu = max(0.0, rmu)
113        ELSE ! nuit polaire (on peut prendre une valeur quelconque)               ! IM cf. PB alb = 0.058/(rmu + 0.30)
114          albedo(i) = fmagic               ! alb = 0.058/(rmu + 0.30) * 1.5
115        END IF               alb = 0.058/(rmu+0.30)*1.2
116      END DO               ! alb = 0.058/(rmu + 0.30) * 1.3
117    END IF               srmu = srmu + rmu*2.0
118    RETURN               salb = salb + alb*rmu*2.0
119  END SUBROUTINE alboc            END DO
120              IF (srmu/=0.0) THEN
121                 albedo(i) = salb/srmu*fmagic
122              ELSE ! nuit polaire (on peut prendre une valeur quelconque)
123                 albedo(i) = fmagic
124              END IF
125           END DO
126        END IF
127    
128      END SUBROUTINE alboc
129    
130    end module alboc_m

Legend:
Removed from v.124  
changed lines
  Added in v.125

  ViewVC Help
Powered by ViewVC 1.1.21