source: lmdz_wrf/trunk/WRFV3/lmdz/albedo.F90 @ 1939

Last change on this file since 1939 was 1, checked in by lfita, 10 years ago
  • -- --- Opening of the WRF+LMDZ coupling repository --- -- -

WRF: version v3.3
LMDZ: version v1818

More details in:

File size: 5.7 KB
Line 
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!IM 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!IM 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
1261999  CONTINUE
127      ENDIF
128      RETURN
129      END SUBROUTINE alboc
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!IM: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 SUBROUTINE alboc_cd
191!c========================================================================
Note: See TracBrowser for help on using the repository browser.