source: LMDZ4/trunk/libf/phylmd/albedo.F @ 766

Last change on this file since 766 was 766, checked in by Laurent Fairhead, 17 years ago

Merge entre la version V3_conv et le HEAD
YM, JG, LF

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