source: LMDZ.3.3/branches/rel-LF/libf/phylmd/albedo.F @ 492

Last change on this file since 492 was 491, checked in by lmdzadmin, 21 years ago

Correction bug sur fmagic SD
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1c
2c $Header$
3c
4      SUBROUTINE alboc(rjour,rlat,albedo)
5      IMPLICIT none
6c======================================================================
7c Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
8c Date: le 16 mars 1995
9c Objet: Calculer l'albedo sur l'ocean
10c Methode: Integrer numeriquement l'albedo pendant une journee
11c
12c Arguments;
13c rjour (in,R)  : jour dans l'annee (a compter du 1 janvier)
14c rlat (in,R)   : latitude en degre
15c albedo (out,R): albedo obtenu (de 0 a 1)
16c======================================================================
17#include "dimensions.h"
18#include "dimphy.h"
19#include "YOMCST.h"
20c
21      REAL fmagic ! un facteur magique pour regler l'albedo
22ccc      PARAMETER (fmagic=0.7)
23cccIM => a remplacer 
24        PARAMETER (fmagic=1.3)
25c       PARAMETER (fmagic=1.1)
26c       PARAMETER (fmagic=1.0)
27c       PARAMETER (fmagic=0.7)
28      INTEGER npts ! il controle la precision de l'integration
29      PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
30c
31      REAL rlat(klon), rjour, albedo(klon)
32      REAL zdist, zlonsun, zpi, zdeclin
33      REAL rmu,alb, srmu, salb, fauxo, aa, bb
34      INTEGER i, k
35cccIM
36      LOGICAL ancien_albedo
37      PARAMETER(ancien_albedo=.FALSE.)
38c     SAVE albedo
39c
40      IF ( ancien_albedo ) THEN
41c
42      zpi = 4. * ATAN(1.)
43c
44c Calculer la longitude vraie de l'orbite terrestre:
45      CALL orbite(rjour,zlonsun,zdist)
46c
47c Calculer la declinaison du soleil (qui varie entre + et - R_incl):
48      zdeclin = ASIN(SIN(zlonsun*zpi/180.0)*SIN(R_incl*zpi/180.0))
49c
50      DO 999 i=1,klon
51      aa = SIN(rlat(i)*zpi/180.0) * SIN(zdeclin)
52      bb = COS(rlat(i)*zpi/180.0) * COS(zdeclin)
53c
54c Midi local (angle du temps = 0.0):
55      rmu = aa + bb * COS(0.0)
56      rmu = MAX(0.0, rmu)
57      fauxo = (1.47-ACOS(rmu))/.15
58      alb = 0.03+0.630/(1.+fauxo*fauxo)
59      srmu = rmu
60      salb = alb * rmu
61c
62c Faire l'integration numerique de midi a minuit (le facteur 2
63c prend en compte l'autre moitie de la journee):
64      DO k = 1, npts
65         rmu = aa + bb * COS(FLOAT(k)/FLOAT(npts)*zpi)
66         rmu = MAX(0.0, rmu)
67         fauxo = (1.47-ACOS(rmu))/.15
68         alb = 0.03+0.630/(1.+fauxo*fauxo)
69         srmu = srmu + rmu * 2.0
70         salb = salb + alb*rmu * 2.0
71      ENDDO
72      IF (srmu .NE. 0.0) THEN
73         albedo(i) = salb / srmu * fmagic
74      ELSE ! nuit polaire (on peut prendre une valeur quelconque)
75         albedo(i) = fmagic
76      ENDIF
77  999 CONTINUE
78c
79c nouvel albedo
80c
81      ELSE
82c
83      zpi = 4. * ATAN(1.)
84c
85c Calculer la longitude vraie de l'orbite terrestre:
86      CALL orbite(rjour,zlonsun,zdist)
87c
88c Calculer la declinaison du soleil (qui varie entre + et - R_incl):
89      zdeclin = ASIN(SIN(zlonsun*zpi/180.0)*SIN(R_incl*zpi/180.0))
90c
91      DO 1999 i=1,klon
92      aa = SIN(rlat(i)*zpi/180.0) * SIN(zdeclin)
93      bb = COS(rlat(i)*zpi/180.0) * COS(zdeclin)
94c
95c Midi local (angle du temps = 0.0):
96      rmu = aa + bb * COS(0.0)
97      rmu = MAX(0.0, rmu)
98cIM cf. PB  alb = 0.058/(rmu + 0.30)
99c     alb = 0.058/(rmu + 0.30) * 1.5
100      alb = 0.058/(rmu + 0.30) * 1.2
101      srmu = rmu
102      salb = alb * rmu
103c
104c Faire l'integration numerique de midi a minuit (le facteur 2
105c prend en compte l'autre moitie de la journee):
106      DO k = 1, npts
107         rmu = aa + bb * COS(FLOAT(k)/FLOAT(npts)*zpi)
108         rmu = MAX(0.0, rmu)
109cIM cf. PB      alb = 0.058/(rmu + 0.30)
110c        alb = 0.058/(rmu + 0.30) * 1.5
111         alb = 0.058/(rmu + 0.30) * 1.2
112         srmu = srmu + rmu * 2.0
113         salb = salb + alb*rmu * 2.0
114      ENDDO
115      IF (srmu .NE. 0.0) THEN
116         albedo(i) = salb / srmu * fmagic
117      ELSE ! nuit polaire (on peut prendre une valeur quelconque)
118         albedo(i) = fmagic
119      ENDIF
1201999  CONTINUE
121      ENDIF
122      RETURN
123      END
124c=====================================================================
125      SUBROUTINE alboc_cd(rmu0,albedo)
126      IMPLICIT none
127c======================================================================
128c Auteur(s): Z.X. Li (LMD/CNRS)
129c date: 19940624
130c Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
131c Formule due a Larson and Barkstrom (1977) Proc. of the symposium
132C on radiation in the atmosphere, 19-28 August 1976, science Press,
133C 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
134c
135c Arguments
136c rmu0    (in): cosinus de l'angle solaire zenithal
137c albedo (out): albedo de surface de l'ocean
138c======================================================================
139#include "dimensions.h"
140#include "dimphy.h"
141      REAL rmu0(klon), albedo(klon)
142c
143      REAL fmagic ! un facteur magique pour regler l'albedo
144ccc      PARAMETER (fmagic=0.7)
145cccIM => a remplacer 
146        PARAMETER (fmagic=1.3)
147c       PARAMETER (fmagic=1.1)
148c       PARAMETER (fmagic=1.0)
149c       PARAMETER (fmagic=0.7)
150c
151      REAL fauxo
152      INTEGER i
153cccIM
154      LOGICAL ancien_albedo
155      PARAMETER(ancien_albedo=.FALSE.)
156c     SAVE albedo
157c
158      IF ( ancien_albedo ) THEN
159c
160      DO i = 1, klon
161c
162         rmu0(i) = MAX(rmu0(i),0.0)
163c
164         fauxo = ( 1.47 - ACOS( rmu0(i) ) )/0.15
165         albedo(i) = fmagic*( .03 + .630/( 1. + fauxo*fauxo))
166         albedo(i) = MAX(MIN(albedo(i),0.60),0.04)
167      ENDDO
168c
169c nouvel albedo
170c
171      ELSE
172c
173      DO i = 1, klon
174         rmu0(i) = MAX(rmu0(i),0.0)
175cIM cf. PB      albedo(i) = 0.058/(rmu0(i) + 0.30)
176c        albedo(i) = 0.058/(rmu0(i) + 0.30) * 1.5
177c        albedo(i) = 0.058/(rmu0(i) + 0.30) * 1.2
178         albedo(i) = fmagic*0.058/(rmu0(i) + 0.30) * 1.2
179         albedo(i) = MAX(MIN(albedo(i),0.60),0.04)
180      ENDDO
181c
182      ENDIF
183c
184      RETURN
185      END
186c========================================================================
Note: See TracBrowser for help on using the repository browser.