LMDZ
albedo.F90
Go to the documentation of this file.
1 ! $Id: albedo.F90 2346 2015-08-21 15:13:46Z emillour $
2 module albedo
3 
4  IMPLICIT NONE
5 
6 contains
7 
8  SUBROUTINE alboc(rjour, rlat, albedo)
9  USE dimphy
10  ! ======================================================================
11  ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
12  ! Date: le 16 mars 1995
13  ! Objet: Calculer l'albedo sur l'ocean
14  ! Methode: Integrer numeriquement l'albedo pendant une journee
15 
16  ! Arguments;
17  ! rjour (in,R) : jour dans l'annee (a compter du 1 janvier)
18  ! rlat (in,R) : latitude en degre
19  ! albedo (out,R): albedo obtenu (de 0 a 1)
20  ! ======================================================================
21  include "YOMCST.h"
22  include "clesphys.h"
23 
24  ! fmagic -> clesphys.h/.inc
25  ! REAL fmagic ! un facteur magique pour regler l'albedo
26  ! cc PARAMETER (fmagic=0.7)
27  ! ccIM => a remplacer
28  ! PARAMETER (fmagic=1.32)
29  ! PARAMETER (fmagic=1.0)
30  ! PARAMETER (fmagic=0.7)
31  INTEGER npts ! il controle la precision de l'integration
32  parameter(npts=120) ! 120 correspond a l'interval 6 minutes
33 
34  REAL rlat(klon), rjour, albedo(klon)
35  REAL zdist, zlonsun, zpi, zdeclin
36  REAL rmu, alb, srmu, salb, fauxo, aa, bb
37  INTEGER i, k
38  ! ccIM
39  LOGICAL ancien_albedo
40  parameter(ancien_albedo=.false.)
41  ! SAVE albedo
42 
43  IF (ancien_albedo) THEN
44 
45  zpi = 4.*atan(1.)
46 
47  ! Calculer la longitude vraie de l'orbite terrestre:
48  CALL orbite(rjour, zlonsun, zdist)
49 
50  ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
51  zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
52 
53  DO i = 1, klon
54  aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
55  bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
56 
57  ! Midi local (angle du temps = 0.0):
58  rmu = aa + bb*cos(0.0)
59  rmu = max(0.0, rmu)
60  fauxo = (1.47-acos(rmu))/.15
61  alb = 0.03 + 0.630/(1.+fauxo*fauxo)
62  srmu = rmu
63  salb = alb*rmu
64 
65  ! Faire l'integration numerique de midi a minuit (le facteur 2
66  ! prend en compte l'autre moitie de la journee):
67  DO k = 1, npts
68  rmu = aa + bb*cos(real(k)/real(npts)*zpi)
69  rmu = max(0.0, rmu)
70  fauxo = (1.47-acos(rmu))/.15
71  alb = 0.03 + 0.630/(1.+fauxo*fauxo)
72  srmu = srmu + rmu*2.0
73  salb = salb + alb*rmu*2.0
74  END DO
75  IF (srmu/=0.0) THEN
76  albedo(i) = salb/srmu*fmagic + pmagic
77  ELSE ! nuit polaire (on peut prendre une valeur quelconque)
78  albedo(i) = fmagic
79  END IF
80  END DO
81 
82  ! nouvel albedo
83 
84  ELSE
85 
86  zpi = 4.*atan(1.)
87 
88  ! Calculer la longitude vraie de l'orbite terrestre:
89  CALL orbite(rjour, zlonsun, zdist)
90 
91  ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
92  zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
93 
94  DO i = 1, klon
95  aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
96  bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
97 
98  ! Midi local (angle du temps = 0.0):
99  rmu = aa + bb*cos(0.0)
100  rmu = max(0.0, rmu)
101  ! IM cf. PB alb = 0.058/(rmu + 0.30)
102  ! alb = 0.058/(rmu + 0.30) * 1.5
103  alb = 0.058/(rmu+0.30)*1.2
104  ! alb = 0.058/(rmu + 0.30) * 1.3
105  srmu = rmu
106  salb = alb*rmu
107 
108  ! Faire l'integration numerique de midi a minuit (le facteur 2
109  ! prend en compte l'autre moitie de la journee):
110  DO k = 1, npts
111  rmu = aa + bb*cos(real(k)/real(npts)*zpi)
112  rmu = max(0.0, rmu)
113  ! IM cf. PB alb = 0.058/(rmu + 0.30)
114  ! alb = 0.058/(rmu + 0.30) * 1.5
115  alb = 0.058/(rmu+0.30)*1.2
116  ! alb = 0.058/(rmu + 0.30) * 1.3
117  srmu = srmu + rmu*2.0
118  salb = salb + alb*rmu*2.0
119  END DO
120  IF (srmu/=0.0) THEN
121  albedo(i) = salb/srmu*fmagic + pmagic
122  ELSE ! nuit polaire (on peut prendre une valeur quelconque)
123  albedo(i) = fmagic
124  END IF
125  END DO
126  END IF
127  RETURN
128  END SUBROUTINE alboc
129  ! =====================================================================
130  SUBROUTINE alboc_cd(rmu0, albedo)
131  USE dimphy
132 
133  ! Auteur(s): Z.X. Li (LMD/CNRS)
134  ! date: 19940624
135  ! Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
136  ! Formule due a Larson and Barkstrom (1977) Proc. of the symposium
137  ! on radiation in the atmosphere, 19-28 August 1976, science Press,
138  ! 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
139 
140  ! Arguments
141  ! rmu0 (in): cosinus de l'angle solaire zenithal
142  ! albedo (out): albedo de surface de l'ocean
143  ! ======================================================================
144  include "clesphys.h"
145  REAL, intent(in):: rmu0(klon)
146  real, intent(out):: albedo(klon)
147 
148  ! REAL fmagic ! un facteur magique pour regler l'albedo
149  ! cc PARAMETER (fmagic=0.7)
150  ! ccIM => a remplacer
151  ! PARAMETER (fmagic=1.32)
152  ! PARAMETER (fmagic=1.0)
153  ! PARAMETER (fmagic=0.7)
154 
155  REAL fauxo
156  INTEGER i
157  LOGICAL ancien_albedo
158  parameter(ancien_albedo=.false.)
159 
160  IF (ancien_albedo) THEN
161  DO i = 1, klon
162  fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
163  albedo(i) = fmagic*(.03+.630/(1.+fauxo*fauxo)) + pmagic
164  albedo(i) = max(min(albedo(i),0.60), 0.04)
165  END DO
166  ELSE
167  DO i = 1, klon
168  albedo(i) = fmagic*0.058/(max(rmu0(i), 0.0)+0.30) + pmagic
169  albedo(i) = max(min(albedo(i),0.60), 0.04)
170  END DO
171  END IF
172 
173  END SUBROUTINE alboc_cd
174 
175 end module albedo
integer, save klon
Definition: dimphy.F90:3
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo fmagic
Definition: clesphys.h:23
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
subroutine orbite(xjour, longi, dist)
Definition: orbite.F90:6
subroutine alboc_cd(rmu0, albedo)
Definition: albedo.F90:131
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo pmagic
Definition: clesphys.h:23
Definition: albedo.F90:2
subroutine alboc(rjour, rlat, albedo)
Definition: albedo.F90:9
Definition: dimphy.F90:1