/[lmdze]/trunk/phylmd/nuage.f
ViewVC logotype

Contents of /trunk/phylmd/nuage.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 169 - (show annotations)
Mon Sep 14 17:13:16 2015 UTC (8 years, 8 months ago) by guez
Original Path: trunk/Sources/phylmd/nuage.f
File size: 7327 byte(s)
In inifilr_hemisph, colat0 is necessarily >= 1. / rlamda(iim) (see
notes) so we simplify the definition of jfilt. No need to keep modfrst
values at other latitudes than the current one, and we can have one
loop on latitudes instead of two.

Just encapsulated transp into a module.

1 SUBROUTINE nuage (paprs, pplay, &
2 t, pqlwp, pclc, pcltau, pclemi, &
3 pch, pcl, pcm, pct, pctlwp, &
4 ok_aie, &
5 sulfate, sulfate_pi, &
6 bl95_b0, bl95_b1, &
7 cldtaupi, re, fl)
8 !
9 ! From LMDZ4/libf/phylmd/nuage.F, version 1.1.1.1 2004/05/19 12:53:07
10 !
11 use dimens_m
12 use dimphy
13 use nr_util, only: pi
14 use SUPHEC_M
15 IMPLICIT none
16 !======================================================================
17 ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930910
18 ! Objet: Calculer epaisseur optique et emmissivite des nuages
19 !======================================================================
20 ! Arguments:
21 ! t-------input-R-temperature
22 ! pqlwp---input-R-eau liquide nuageuse dans l'atmosphere (kg/kg)
23 ! pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1)
24 ! ok_aie--input-L-apply aerosol indirect effect or not
25 ! sulfate-input-R-sulfate aerosol mass concentration [um/m^3]
26 ! sulfate_pi-input-R-dito, pre-industrial value
27 ! bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)
28 ! bl95_b1-input-R-a parameter, may be varied for tests ( -"- )
29 !
30 ! cldtaupi-output-R-pre-industrial value of cloud optical thickness,
31 ! needed for the diagnostics of the aerosol indirect
32 ! radiative forcing (see radlwsw)
33 ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
34 ! fl------output-R-Denominator to re, introduced to avoid problems in
35 ! the averaging of the output. fl is the fraction of liquid
36 ! water clouds within a grid cell
37 !
38 ! pcltau--output-R-epaisseur optique des nuages
39 ! pclemi--output-R-emissivite des nuages (0 a 1)
40 !======================================================================
41 !
42 !
43 REAL, intent(in):: paprs(klon,klev+1)
44 real, intent(in):: pplay(klon,klev)
45 REAL, intent(in):: t(klon,klev)
46 !
47 REAL pclc(klon,klev)
48 REAL pqlwp(klon,klev)
49 REAL pcltau(klon,klev), pclemi(klon,klev)
50 !
51 REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
52 !
53 LOGICAL lo
54 !
55 REAL cetahb, cetamb
56 PARAMETER (cetahb = 0.45, cetamb = 0.80)
57 !
58 INTEGER i, k
59 REAL zflwp, zfice
60 !
61 REAL radius, rad_froid, rad_chaud, rad_chau1, rad_chau2
62 PARAMETER (rad_chau1=13.0, rad_chau2=9.0, rad_froid=35.0)
63 !cc PARAMETER (rad_chaud=15.0, rad_froid=35.0)
64 ! sintex initial PARAMETER (rad_chaud=10.0, rad_froid=30.0)
65 REAL coef, coef_froi, coef_chau
66 PARAMETER (coef_chau=0.13, coef_froi=0.09)
67 REAL seuil_neb, t_glace
68 PARAMETER (seuil_neb=0.001, t_glace=273.0-15.0)
69 INTEGER nexpo ! exponentiel pour glace/eau
70 PARAMETER (nexpo=6)
71
72 !jq for the aerosol indirect effect
73 !jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003
74 !jq
75 LOGICAL ok_aie ! Apply AIE or not?
76
77 REAL sulfate(klon, klev) ! sulfate aerosol mass concentration [ug m-3]
78 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3]
79 REAL re(klon, klev) ! cloud droplet effective radius [um]
80 REAL sulfate_pi(klon, klev) ! sulfate aerosol mass concentration [ug m-3] (pre-industrial value)
81 REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value)
82
83 REAL fl(klon, klev) ! xliq * rneb (denominator to re ; fraction of liquid water clouds within the grid cell)
84
85 REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula
86
87 REAL cldtaupi(klon, klev) ! pre-industrial cloud opt thickness for diag
88
89 !cc PARAMETER (nexpo=1)
90 !
91 ! Calculer l'epaisseur optique et l'emmissivite des nuages
92 !
93 DO k = 1, klev
94 DO i = 1, klon
95 rad_chaud = rad_chau1
96 IF (k.LE.3) rad_chaud = rad_chau2
97
98 pclc(i,k) = MAX(pclc(i,k), seuil_neb)
99 zflwp = 1000.*pqlwp(i,k)/RG/pclc(i,k) &
100 *(paprs(i,k)-paprs(i,k+1))
101 zfice = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
102 zfice = MIN(MAX(zfice,0.0),1.0)
103 zfice = zfice**nexpo
104
105 IF (ok_aie) THEN
106 ! Formula "D" of Boucher and Lohmann, Tellus, 1995
107 !
108 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* &
109 log(MAX(sulfate(i,k),1.e-4))/log(10.))*1.e6 !-m-3
110 ! Cloud droplet number concentration (CDNC) is restricted
111 ! to be within [20, 1000 cm^3]
112 !
113 cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k)))
114 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* &
115 log(MAX(sulfate_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
116 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
117 !
118 !
119 ! air density: pplay(i,k) / (RD * zT(i,k))
120 ! factor 1.1: derive effective radius from volume-mean radius
121 ! factor 1000 is the water density
122 ! _chaud means that this is the CDR for liquid water clouds
123 !
124 rad_chaud = &
125 1.1 * ( (pqlwp(i,k) * pplay(i,k) / (RD * T(i,k)) ) &
126 / (4./3. * PI * 1000. * cdnc(i,k)) )**(1./3.)
127 !
128 ! Convert to um. CDR shall be at least 3 um.
129 !
130 rad_chaud = MAX(rad_chaud*1.e6, 3.)
131
132 ! For output diagnostics
133 !
134 ! Cloud droplet effective radius [um]
135 !
136 ! we multiply here with f * xl (fraction of liquid water
137 ! clouds in the grid cell) to avoid problems in the
138 ! averaging of the output.
139 ! In the output of IOIPSL, derive the real cloud droplet
140 ! effective radius as re/fl
141 !
142 fl(i,k) = pclc(i,k)*(1.-zfice)
143 re(i,k) = rad_chaud*fl(i,k)
144
145 ! Pre-industrial cloud opt thickness
146 !
147 ! "radius" is calculated as rad_chaud above (plus the
148 ! ice cloud contribution) but using cdnc_pi instead of
149 ! cdnc.
150 radius = MAX(1.1e6 * ( (pqlwp(i,k)*pplay(i,k)/(RD*T(i,k))) &
151 / (4./3.*PI*1000.*cdnc_pi(i,k)) )**(1./3.), &
152 3.) * (1.-zfice) + rad_froid * zfice
153 cldtaupi(i,k) = 3.0/2.0 * zflwp / radius
154
155 END IF ! ok_aie
156
157 radius = rad_chaud * (1.-zfice) + rad_froid * zfice
158 coef = coef_chau * (1.-zfice) + coef_froi * zfice
159 pcltau(i,k) = 3.0/2.0 * zflwp / radius
160 pclemi(i,k) = 1.0 - EXP( - coef * zflwp)
161 lo = (pclc(i,k) .LE. seuil_neb)
162 IF (lo) pclc(i,k) = 0.0
163 IF (lo) pcltau(i,k) = 0.0
164 IF (lo) pclemi(i,k) = 0.0
165
166 IF (.NOT.ok_aie) cldtaupi(i,k)=pcltau(i,k)
167 END DO
168 END DO
169 !
170 ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
171 !
172 DO i = 1, klon
173 pct(i)=1.0
174 pch(i)=1.0
175 pcm(i) = 1.0
176 pcl(i) = 1.0
177 pctlwp(i) = 0.0
178 END DO
179 !
180 DO k = klev, 1, -1
181 DO i = 1, klon
182 pctlwp(i) = pctlwp(i) &
183 + pqlwp(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
184 pct(i) = pct(i)*(1.0-pclc(i,k))
185 if (pplay(i,k).LE.cetahb*paprs(i,1)) &
186 pch(i) = pch(i)*(1.0-pclc(i,k))
187 if (pplay(i,k).GT.cetahb*paprs(i,1) .AND. &
188 pplay(i,k).LE.cetamb*paprs(i,1)) &
189 pcm(i) = pcm(i)*(1.0-pclc(i,k))
190 if (pplay(i,k).GT.cetamb*paprs(i,1)) &
191 pcl(i) = pcl(i)*(1.0-pclc(i,k))
192 END DO
193 END DO
194 !
195 DO i = 1, klon
196 pct(i)=1.-pct(i)
197 pch(i)=1.-pch(i)
198 pcm(i)=1.-pcm(i)
199 pcl(i)=1.-pcl(i)
200 END DO
201 !
202 END SUBROUTINE nuage

  ViewVC Help
Powered by ViewVC 1.1.21