source: LMDZ5/trunk/libf/phylmd/albedo.F90 @ 2346

Last change on this file since 2346 was 2346, checked in by Ehouarn Millour, 9 years ago

Physics/dynamics separation:

  • remove all references to dimensions.h from physics. nbp_lon (==iim) , nbp_lat (==jjm+1) and nbp_lev (==llm) from mod_grid_phy_lmdz should be used instead.
  • added module regular_lonlat_mod in phy_common to store information about the global (lon-lat) grid cell boundaries and centers.

EM

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1! $Id: albedo.F90 2346 2015-08-21 15:13:46Z emillour $
2module albedo
3
4  IMPLICIT NONE
5
6contains
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
175end module albedo
Note: See TracBrowser for help on using the repository browser.