/[lmdze]/trunk/phylmd/Interface_surf/alboc.f
ViewVC logotype

Contents of /trunk/phylmd/Interface_surf/alboc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 118 - (show annotations)
Thu Dec 18 17:30:24 2014 UTC (9 years, 4 months ago) by guez
File size: 3789 byte(s)
In file grilles_gcm.nc, renamed variable phis to orog, deleted
variable presnivs.

Removed variable bug_ozone from module clesphys.

In procedure ozonecm, moved computation of sint and cost out of the
loops on horizontal position and vertical level. Inverted the order of
the two loops. We can then move all computations from slat to aprim
out of the loop on vertical levels. Created variable slat2, following
LMDZ. Moved the limitation of column-density of ozone in cell at 1e-12
from radlwsw to ozonecm, following LMDZ.

Removed unused arguments u, albsol, rh, cldfra, rneb, diafra, cldliq,
pmflxr, pmflxs, prfl, psfl of phytrac.

In procedure yamada4, for all the arrays, replaced the dimension klon
by ngrid. At the end of the procedure, for the computation of kmn,kn,
kq and q2, changed the upper limit of the loop index from klon to ngrid.

In radlwsw, for the calculation of pozon, removed the factor
paprs(iof+i, 1)/101325, as in LMDZ. In procedure sw, removed the
factor 101325.0/PPSOL(JL), as in LMDZ.

1 SUBROUTINE alboc(rjour, rlat, albedo)
2 ! From LMDZ4/libf/phylmd/albedo.F,v 1.2 2005/02/07 15:00:52
3 USE dimens_m
4 USE dimphy
5 USE yomcst
6 USE orbite_m, ONLY: orbite
7 IMPLICIT NONE
8 ! ======================================================================
9 ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
10 ! Date: le 16 mars 1995
11 ! Objet: Calculer l'albedo sur l'ocean
12 ! Methode: Integrer numeriquement l'albedo pendant une journee
13
14 ! Arguments;
15 ! rjour (in,R) : jour dans l'annee (a compter du 1 janvier)
16 ! rlat (in,R) : latitude en degre
17 ! albedo (out,R): albedo obtenu (de 0 a 1)
18 ! ======================================================================
19
20 REAL fmagic ! un facteur magique pour regler l'albedo
21 ! cc PARAMETER (fmagic=0.7)
22 ! ccIM => a remplacer
23 ! PARAMETER (fmagic=1.32)
24 PARAMETER (fmagic=1.0)
25 ! PARAMETER (fmagic=0.7)
26 INTEGER npts ! il controle la precision de l'integration
27 PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
28
29 REAL rlat(klon), rjour, albedo(klon)
30 REAL zdist, zlonsun, zpi, zdeclin
31 REAL rmu, alb, srmu, salb, fauxo, aa, bb
32 INTEGER i, k
33 ! ccIM
34 LOGICAL ancien_albedo
35 PARAMETER (ancien_albedo=.FALSE.)
36 ! SAVE albedo
37
38 IF (ancien_albedo) THEN
39
40 zpi = 4.*atan(1.)
41
42 ! Calculer la longitude vraie de l'orbite terrestre:
43 CALL orbite(rjour, zlonsun, zdist)
44
45 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
46 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
47
48 DO i = 1, klon
49 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
50 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
51
52 ! Midi local (angle du temps = 0.0):
53 rmu = aa + bb*cos(0.0)
54 rmu = max(0.0, rmu)
55 fauxo = (1.47-acos(rmu))/.15
56 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
57 srmu = rmu
58 salb = alb*rmu
59
60 ! Faire l'integration numerique de midi a minuit (le facteur 2
61 ! prend en compte l'autre moitie de la journee):
62 DO k = 1, npts
63 rmu = aa + bb*cos(float(k)/float(npts)*zpi)
64 rmu = max(0.0, rmu)
65 fauxo = (1.47-acos(rmu))/.15
66 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
67 srmu = srmu + rmu*2.0
68 salb = salb + alb*rmu*2.0
69 END DO
70 IF (srmu/=0.0) THEN
71 albedo(i) = salb/srmu*fmagic
72 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
73 albedo(i) = fmagic
74 END IF
75 END DO
76
77 ! nouvel albedo
78
79 ELSE
80
81 zpi = 4.*atan(1.)
82
83 ! Calculer la longitude vraie de l'orbite terrestre:
84 CALL orbite(rjour, zlonsun, zdist)
85
86 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
87 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
88
89 DO i = 1, klon
90 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
91 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
92
93 ! Midi local (angle du temps = 0.0):
94 rmu = aa + bb*cos(0.0)
95 rmu = max(0.0, rmu)
96 ! IM cf. PB alb = 0.058/(rmu + 0.30)
97 ! alb = 0.058/(rmu + 0.30) * 1.5
98 alb = 0.058/(rmu+0.30)*1.2
99 ! alb = 0.058/(rmu + 0.30) * 1.3
100 srmu = rmu
101 salb = alb*rmu
102
103 ! Faire l'integration numerique de midi a minuit (le facteur 2
104 ! prend en compte l'autre moitie de la journee):
105 DO k = 1, npts
106 rmu = aa + bb*cos(float(k)/float(npts)*zpi)
107 rmu = max(0.0, rmu)
108 ! IM cf. PB alb = 0.058/(rmu + 0.30)
109 ! alb = 0.058/(rmu + 0.30) * 1.5
110 alb = 0.058/(rmu+0.30)*1.2
111 ! alb = 0.058/(rmu + 0.30) * 1.3
112 srmu = srmu + rmu*2.0
113 salb = salb + alb*rmu*2.0
114 END DO
115 IF (srmu/=0.0) THEN
116 albedo(i) = salb/srmu*fmagic
117 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
118 albedo(i) = fmagic
119 END IF
120 END DO
121 END IF
122 RETURN
123 END SUBROUTINE alboc

  ViewVC Help
Powered by ViewVC 1.1.21