/[lmdze]/trunk/libf/phylmd/newmicro.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/newmicro.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 68 - (show annotations)
Wed Nov 14 16:59:30 2012 UTC (11 years, 6 months ago) by guez
File size: 12503 byte(s)
Split "flincom.f90" into "flinclo.f90", "flinfindcood.f90",
"flininfo.f90" and "flinopen_nozoom.f90", in directory
"IOIPSL/Flincom".

Renamed "etat0_lim" to "ce0l", as in LMDZ.

Split "readsulfate.f" into "readsulfate.f90", "readsulfate_preind.f90"
and "getso4fromfile.f90".

In etat0, renamed variable q3d to q, as in "dynredem1". Replaced calls
to Flicom procedures by calls to NetCDF95.

In leapfrog, added call to writehist.

Extracted ASCII art from "grid_noro" into a file
"grid_noro.txt". Transformed explicit-shape local arrays into
automatic arrays, so that test on values of iim and jjm is no longer
needed. Test on weight:
          IF (weight(ii, jj) /= 0.) THEN
is useless. There is already a test before:
    if (any(weight == 0.)) stop "zero weight in grid_noro"

In "aeropt", replaced duplicated lines with different values of inu by
a loop on inu.

Removed arguments of "conf_phys". Corresponding variables are now
defined in "physiq", in a namelist. In "conf_phys", read a namelist
instead of using getin.

1 module newmicro_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE newmicro (paprs, pplay,ok_newmicro, t, pqlwp, pclc, pcltau, &
8 pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, &
9 ok_aie, sulfate, sulfate_pi, bl95_b0, bl95_b1, cldtaupi, re, fl)
10
11 ! From LMDZ4/libf/phylmd/newmicro.F, version 1.2 2004/06/03 09:22:43
12
13 use dimens_m
14 use dimphy
15 use SUPHEC_M
16 use nuagecom
17 !======================================================================
18 ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930910
19 ! Objet: Calculer epaisseur optique et emmissivite des nuages
20 !======================================================================
21 ! Arguments:
22 ! t-------input-R-temperature
23 ! pqlwp---input-R-eau liquide nuageuse dans l'atmosphere (kg/kg)
24 ! pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1)
25 !
26 ! ok_aie--input-L-apply aerosol indirect effect or not
27 ! sulfate-input-R-sulfate aerosol mass concentration [um/m^3]
28 ! sulfate_pi-input-R-dito, pre-industrial value
29 ! bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)
30 ! bl95_b1-input-R-a parameter, may be varied for tests ( -"- )
31 !
32 ! cldtaupi-output-R-pre-industrial value of cloud optical thickness,
33 ! needed for the diagnostics of the aerosol indirect
34 ! radiative forcing (see radlwsw)
35 ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
36 ! fl------output-R-Denominator to re, introduced to avoid problems in
37 ! the averaging of the output. fl is the fraction of liquid
38 ! water clouds within a grid cell
39 ! pcltau--output-R-epaisseur optique des nuages
40 ! pclemi--output-R-emissivite des nuages (0 a 1)
41 !======================================================================
42 !
43 !
44 REAL, intent(in):: paprs(klon,klev+1)
45 real, intent(in):: pplay(klon,klev)
46 REAL, intent(in):: t(klon,klev)
47 !
48 REAL pclc(klon,klev)
49 REAL pqlwp(klon,klev)
50 REAL pcltau(klon,klev), pclemi(klon,klev)
51 !
52 REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
53 !
54 LOGICAL lo
55 !
56 REAL cetahb, cetamb
57 PARAMETER (cetahb = 0.45, cetamb = 0.80)
58 !
59 INTEGER i, k
60 !IM: 091003 REAL zflwp, zradef, zfice, zmsac
61 REAL zflwp(klon), zradef, zfice, zmsac
62 !IM: 091003 rajout
63 REAL xflwp(klon), xfiwp(klon)
64 REAL xflwc(klon,klev), xfiwc(klon,klev)
65 !
66 REAL radius, rad_chaud
67 !c PARAMETER (rad_chau1=13.0, rad_chau2=9.0, rad_froid=35.0)
68 !cc PARAMETER (rad_chaud=15.0, rad_froid=35.0)
69 ! sintex initial PARAMETER (rad_chaud=10.0, rad_froid=30.0)
70 REAL coef, coef_froi, coef_chau
71 PARAMETER (coef_chau=0.13, coef_froi=0.09)
72 REAL seuil_neb, t_glace
73 PARAMETER (seuil_neb=0.001, t_glace=273.0-15.0)
74 INTEGER nexpo ! exponentiel pour glace/eau
75 PARAMETER (nexpo=6)
76 !cc PARAMETER (nexpo=1)
77
78 ! -- sb:
79 logical ok_newmicro
80 ! parameter (ok_newmicro=.FALSE.)
81 !IM: 091003 real rel, tc, rei, zfiwp
82 real rel, tc, rei, zfiwp(klon)
83 real k_liq, k_ice0, k_ice, DF
84 parameter (k_liq=0.0903, k_ice0=0.005) ! units=m2/g
85 parameter (DF=1.66) ! diffusivity factor
86 ! sb --
87 !jq for the aerosol indirect effect
88 !jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003
89 !jq
90 LOGICAL ok_aie ! Apply AIE or not?
91 LOGICAL ok_a1lwpdep ! a1 LWP dependent?
92
93 REAL sulfate(klon, klev) ! sulfate aerosol mass concentration [ug m-3]
94 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3]
95 REAL re(klon, klev) ! cloud droplet effective radius [um]
96 REAL sulfate_pi(klon, klev) ! sulfate aerosol mass concentration [ug m-3] (pre-industrial value)
97 REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value)
98 REAL re_pi(klon, klev) ! cloud droplet effective radius [um] (pi value)
99
100 REAL fl(klon, klev) ! xliq * rneb (denominator to re; fraction of liquid water clouds within the grid cell)
101
102 REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula
103
104 REAL cldtaupi(klon, klev) ! pre-industrial cloud opt thickness for diag
105 !jq-end
106 !
107 ! Calculer l'epaisseur optique et l'emmissivite des nuages
108 !
109 !IM inversion des DO
110 DO i = 1, klon
111 xflwp(i)=0.
112 xfiwp(i)=0.
113 DO k = 1, klev
114 !
115 xflwc(i,k)=0.
116 xfiwc(i,k)=0.
117 !
118 rad_chaud = rad_chau1
119 IF (k.LE.3) rad_chaud = rad_chau2
120 pclc(i,k) = MAX(pclc(i,k), seuil_neb)
121 zflwp(i) = 1000.*pqlwp(i,k)/RG/pclc(i,k) &
122 *(paprs(i,k)-paprs(i,k+1))
123 zfice = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
124 zfice = MIN(MAX(zfice,0.0),1.0)
125 zfice = zfice**nexpo
126 radius = rad_chaud * (1.-zfice) + rad_froid * zfice
127 coef = coef_chau * (1.-zfice) + coef_froi * zfice
128 pcltau(i,k) = 3.0/2.0 * zflwp(i) / radius
129 pclemi(i,k) = 1.0 - EXP( - coef * zflwp(i))
130
131 if (ok_newmicro) then
132
133 ! -- liquid/ice cloud water paths:
134
135 zfice = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
136 zfice = MIN(MAX(zfice,0.0),1.0)
137
138 zflwp(i) = 1000.*(1.-zfice)*pqlwp(i,k)/pclc(i,k) &
139 *(paprs(i,k)-paprs(i,k+1))/RG
140 zfiwp(i) = 1000.*zfice*pqlwp(i,k)/pclc(i,k) &
141 *(paprs(i,k)-paprs(i,k+1))/RG
142
143 xflwp(i) = xflwp(i)+ (1.-zfice)*pqlwp(i,k) &
144 *(paprs(i,k)-paprs(i,k+1))/RG
145 xfiwp(i) = xfiwp(i)+ zfice*pqlwp(i,k) &
146 *(paprs(i,k)-paprs(i,k+1))/RG
147
148 !IM Total Liquid/Ice water content
149 xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)
150 xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)
151 !IM In-Cloud Liquid/Ice water content
152 ! xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)/pclc(i,k)
153 ! xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)/pclc(i,k)
154
155 ! -- effective cloud droplet radius (microns):
156
157 ! for liquid water clouds:
158 IF (ok_aie) THEN
159 ! Formula "D" of Boucher and Lohmann, Tellus, 1995
160 !
161 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* &
162 log(MAX(sulfate(i,k),1.e-4))/log(10.))*1.e6 !-m-3
163 ! Cloud droplet number concentration (CDNC) is restricted
164 ! to be within [20, 1000 cm^3]
165 !
166 cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k)))
167 !
168 !
169 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* &
170 log(MAX(sulfate_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
171 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
172 !
173 !
174 ! air density: pplay(i,k) / (RD * zT(i,k))
175 ! factor 1.1: derive effective radius from volume-mean radius
176 ! factor 1000 is the water density
177 ! _chaud means that this is the CDR for liquid water clouds
178 !
179 rad_chaud = &
180 1.1 * ( (pqlwp(i,k) * pplay(i,k) / (RD * T(i,k)) ) &
181 / (4./3. * RPI * 1000. * cdnc(i,k)) )**(1./3.)
182 !
183 ! Convert to um. CDR shall be at least 3 um.
184 !
185 ! rad_chaud = MAX(rad_chaud*1.e6, 3.)
186 rad_chaud = MAX(rad_chaud*1.e6, 5.)
187
188 ! Pre-industrial cloud opt thickness
189 !
190 ! "radius" is calculated as rad_chaud above (plus the
191 ! ice cloud contribution) but using cdnc_pi instead of
192 ! cdnc.
193 radius = &
194 1.1 * ( (pqlwp(i,k) * pplay(i,k) / (RD * T(i,k)) ) &
195 / (4./3. * RPI * 1000. * cdnc_pi(i,k)) )**(1./3.)
196 radius = MAX(radius*1.e6, 5.)
197
198 tc = t(i,k)-273.15
199 rei = 0.71*tc + 61.29
200 if (tc.le.-81.4) rei = 3.5
201 if (zflwp(i).eq.0.) radius = 1.
202 if (zfiwp(i).eq.0. .or. rei.le.0.) rei = 1.
203 cldtaupi(i,k) = 3.0/2.0 * zflwp(i) / radius &
204 + zfiwp(i) * (3.448e-03 + 2.431/rei)
205 ENDIF ! ok_aie
206 ! For output diagnostics
207 !
208 ! Cloud droplet effective radius [um]
209 !
210 ! we multiply here with f * xl (fraction of liquid water
211 ! clouds in the grid cell) to avoid problems in the
212 ! averaging of the output.
213 ! In the output of IOIPSL, derive the real cloud droplet
214 ! effective radius as re/fl
215 !
216 fl(i,k) = pclc(i,k)*(1.-zfice)
217 re(i,k) = rad_chaud*fl(i,k)
218
219 !-jq end
220
221 rel = rad_chaud
222 ! for ice clouds: as a function of the ambiant temperature
223 ! [formula used by Iacobellis and Somerville (2000), with an
224 ! asymptotical value of 3.5 microns at T<-81.4 C added to be
225 ! consistent with observations of Heymsfield et al. 1986]:
226 tc = t(i,k)-273.15
227 rei = 0.71*tc + 61.29
228 if (tc.le.-81.4) rei = 3.5
229
230 ! -- cloud optical thickness :
231
232 ! [for liquid clouds, traditional formula,
233 ! for ice clouds, Ebert & Curry (1992)]
234
235 if (zflwp(i).eq.0.) rel = 1.
236 if (zfiwp(i).eq.0. .or. rei.le.0.) rei = 1.
237 pcltau(i,k) = 3.0/2.0 * ( zflwp(i)/rel ) &
238 + zfiwp(i) * (3.448e-03 + 2.431/rei)
239
240 ! -- cloud infrared emissivity:
241
242 ! [the broadband infrared absorption coefficient is parameterized
243 ! as a function of the effective cld droplet radius]
244
245 ! Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
246 k_ice = k_ice0 + 1.0/rei
247
248 pclemi(i,k) = 1.0 &
249 - EXP( - coef_chau*zflwp(i) - DF*k_ice*zfiwp(i) )
250
251 endif ! ok_newmicro
252
253 lo = (pclc(i,k) .LE. seuil_neb)
254 IF (lo) pclc(i,k) = 0.0
255 IF (lo) pcltau(i,k) = 0.0
256 IF (lo) pclemi(i,k) = 0.0
257
258 IF (lo) cldtaupi(i,k) = 0.0
259 IF (.NOT.ok_aie) cldtaupi(i,k)=pcltau(i,k)
260 ENDDO
261 ENDDO
262 !cc DO k = 1, klev
263 !cc DO i = 1, klon
264 !cc t(i,k) = t(i,k)
265 !cc pclc(i,k) = MAX( 1.e-5 , pclc(i,k) )
266 !cc lo = pclc(i,k) .GT. (2.*1.e-5)
267 !cc zflwp = pqlwp(i,k)*1000.*(paprs(i,k)-paprs(i,k+1))
268 !cc . /(rg*pclc(i,k))
269 !cc zradef = 10.0 + (1.-sigs(k))*45.0
270 !cc pcltau(i,k) = 1.5 * zflwp / zradef
271 !cc zfice=1.0-MIN(MAX((t(i,k)-263.)/(273.-263.),0.0),1.0)
272 !cc zmsac = 0.13*(1.0-zfice) + 0.08*zfice
273 !cc pclemi(i,k) = 1.-EXP(-zmsac*zflwp)
274 !cc if (.NOT.lo) pclc(i,k) = 0.0
275 !cc if (.NOT.lo) pcltau(i,k) = 0.0
276 !cc if (.NOT.lo) pclemi(i,k) = 0.0
277 !cc ENDDO
278 !cc ENDDO
279 !ccccc print*, 'pas de nuage dans le rayonnement'
280 !ccccc DO k = 1, klev
281 !ccccc DO i = 1, klon
282 !ccccc pclc(i,k) = 0.0
283 !ccccc pcltau(i,k) = 0.0
284 !ccccc pclemi(i,k) = 0.0
285 !ccccc ENDDO
286 !ccccc ENDDO
287 !
288 ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
289 !
290 DO i = 1, klon
291 pct(i)=1.0
292 pch(i)=1.0
293 pcm(i) = 1.0
294 pcl(i) = 1.0
295 pctlwp(i) = 0.0
296 ENDDO
297 !
298 DO k = klev, 1, -1
299 DO i = 1, klon
300 pctlwp(i) = pctlwp(i) &
301 + pqlwp(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
302 pct(i) = pct(i)*(1.0-pclc(i,k))
303 if (pplay(i,k).LE.cetahb*paprs(i,1)) &
304 pch(i) = pch(i)*(1.0-pclc(i,k))
305 if (pplay(i,k).GT.cetahb*paprs(i,1) .AND. &
306 pplay(i,k).LE.cetamb*paprs(i,1)) &
307 pcm(i) = pcm(i)*(1.0-pclc(i,k))
308 if (pplay(i,k).GT.cetamb*paprs(i,1)) &
309 pcl(i) = pcl(i)*(1.0-pclc(i,k))
310 ENDDO
311 ENDDO
312 !
313 DO i = 1, klon
314 pct(i)=1.-pct(i)
315 pch(i)=1.-pch(i)
316 pcm(i)=1.-pcm(i)
317 pcl(i)=1.-pcl(i)
318 ENDDO
319
320 END SUBROUTINE newmicro
321
322 end module newmicro_m

  ViewVC Help
Powered by ViewVC 1.1.21