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