/[lmdze]/trunk/Sources/phylmd/Radlwsw/lwc.f
ViewVC logotype

Contents of /trunk/Sources/phylmd/Radlwsw/lwc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (show annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 2 months ago) by guez
File size: 9647 byte(s)
Moved variables date0, deltat, datasz_max, ncvar_ids, point, buff_pos,
buffer, regular from module histcom_var to modules where they are
defined.

Removed procedure ioipslmpp, useless for a sequential program.

Added argument datasz_max to histwrite_real (to avoid circular
dependency with histwrite).

Removed useless variables and computations everywhere.

Changed real litteral constants from default kind to double precision
in lwb, lwu, lwvn, sw1s, swtt, swtt1, swu.

Removed unused arguments: paer of sw, sw1s, sw2s, swclr; pcldsw of
sw1s, sw2s; pdsig, prayl of swr; co2_ppm of clmain, clqh; tsol of
transp_lay; nsrf of screenp; kcrit and kknu of gwstress; pstd of
orosetup.

Added output of relative humidity.

1 SUBROUTINE lwc(klim, pcldld, pcldlu, pemis, pfluc, pbint, pbsuin, pcts, &
2 pcntrb, pflux)
3 USE dimens_m
4 USE dimphy
5 USE raddim
6 USE radepsi
7 USE radopt
8 IMPLICIT NONE
9
10 ! PURPOSE.
11 ! --------
12 ! INTRODUCES CLOUD EFFECTS ON LONGWAVE FLUXES OR
13 ! RADIANCES
14
15 ! EXPLICIT ARGUMENTS :
16 ! --------------------
17 ! ==== INPUTS ===
18 ! PBINT : (KDLON,0:KFLEV) ; HALF LEVEL PLANCK FUNCTION
19 ! PBSUIN : (KDLON) ; SURFACE PLANCK FUNCTION
20 ! PCLDLD : (KDLON,KFLEV) ; DOWNWARD EFFECTIVE CLOUD FRACTION
21 ! PCLDLU : (KDLON,KFLEV) ; UPWARD EFFECTIVE CLOUD FRACTION
22 ! PCNTRB : (KDLON,KFLEV+1,KFLEV+1); CLEAR-SKY ENERGY EXCHANGE
23 ! PCTS : (KDLON,KFLEV) ; CLEAR-SKY LAYER COOLING-TO-SPACE
24 ! PEMIS : (KDLON) ; SURFACE EMISSIVITY
25 ! PFLUC
26 ! ==== OUTPUTS ===
27 ! PFLUX(KDLON,2,KFLEV) ; RADIATIVE FLUXES :
28 ! 1 ==> UPWARD FLUX TOTAL
29 ! 2 ==> DOWNWARD FLUX TOTAL
30
31 ! METHOD.
32 ! -------
33
34 ! 1. INITIALIZES ALL FLUXES TO CLEAR-SKY VALUES
35 ! 2. EFFECT OF ONE OVERCAST UNITY EMISSIVITY CLOUD LAYER
36 ! 3. EFFECT OF SEMI-TRANSPARENT, PARTIAL OR MULTI-LAYERED
37 ! CLOUDS
38
39 ! REFERENCE.
40 ! ----------
41
42 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
43 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
44
45 ! AUTHOR.
46 ! -------
47 ! JEAN-JACQUES MORCRETTE *ECMWF*
48
49 ! MODIFICATIONS.
50 ! --------------
51 ! ORIGINAL : 89-07-14
52 ! Voigt lines (loop 231 to 233) - JJM & PhD - 01/96
53 ! -----------------------------------------------------------------------
54 ! * ARGUMENTS:
55 INTEGER klim
56 DOUBLE PRECISION pfluc(kdlon, 2, kflev+1) ! CLEAR-SKY RADIATIVE FLUXES
57 DOUBLE PRECISION pbint(kdlon, kflev+1) ! HALF LEVEL PLANCK FUNCTION
58 DOUBLE PRECISION pbsuin(kdlon) ! SURFACE PLANCK FUNCTION
59 DOUBLE PRECISION pcntrb(kdlon, kflev+1, kflev+1) !CLEAR-SKY ENERGY EXCHANGE
60 DOUBLE PRECISION pcts(kdlon, kflev) ! CLEAR-SKY LAYER COOLING-TO-SPACE
61
62 DOUBLE PRECISION pcldld(kdlon, kflev)
63 DOUBLE PRECISION pcldlu(kdlon, kflev)
64 DOUBLE PRECISION pemis(kdlon)
65
66 DOUBLE PRECISION pflux(kdlon, 2, kflev+1)
67 ! -----------------------------------------------------------------------
68 ! * LOCAL VARIABLES:
69 INTEGER imx(kdlon), imxp(kdlon)
70
71 DOUBLE PRECISION zclear(kdlon), zcloud(kdlon)
72 DOUBLE PRECISION zdnf(kdlon, kflev+1, kflev+1), zfd(kdlon), zfn10(kdlon), &
73 zfu(kdlon), zupf(kdlon, kflev+1, kflev+1)
74 DOUBLE PRECISION zclm(kdlon, kflev+1, kflev+1)
75
76 INTEGER jk, jl, imaxc, imx1, imx2, jkj, jkp1, jkm1
77 INTEGER jk1, jk2, jkc, jkcp1, jcloud
78 DOUBLE PRECISION zcfrac
79 ! ------------------------------------------------------------------
80
81 ! * 1. INITIALIZATION
82 ! --------------
83
84
85 imaxc = 0
86
87 DO jl = 1, kdlon
88 imx(jl) = 0
89 imxp(jl) = 0
90 zcloud(jl) = 0.
91 END DO
92
93 ! * 1.1 SEARCH THE LAYER INDEX OF THE HIGHEST CLOUD
94 ! -------------------------------------------
95
96
97 DO jk = 1, kflev
98 DO jl = 1, kdlon
99 imx1 = imx(jl)
100 imx2 = jk
101 IF (pcldlu(jl,jk)>zepsc) THEN
102 imxp(jl) = imx2
103 ELSE
104 imxp(jl) = imx1
105 END IF
106 imaxc = max(imxp(jl), imaxc)
107 imx(jl) = imxp(jl)
108 END DO
109 END DO
110 ! GM*******
111 imaxc = kflev
112 ! GM*******
113
114 DO jk = 1, kflev + 1
115 DO jl = 1, kdlon
116 pflux(jl, 1, jk) = pfluc(jl, 1, jk)
117 pflux(jl, 2, jk) = pfluc(jl, 2, jk)
118 END DO
119 END DO
120
121 ! ------------------------------------------------------------------
122
123 ! * 2. EFFECT OF CLOUDINESS ON LONGWAVE FLUXES
124 ! ---------------------------------------
125
126 IF (imaxc>0) THEN
127 ! * 2.0 INITIALIZE TO CLEAR-SKY FLUXES
128 ! ------------------------------
129
130
131 DO jk1 = 1, kflev + 1
132 DO jk2 = 1, kflev + 1
133 DO jl = 1, kdlon
134 zupf(jl, jk2, jk1) = pfluc(jl, 1, jk1)
135 zdnf(jl, jk2, jk1) = pfluc(jl, 2, jk1)
136 END DO
137 END DO
138 END DO
139
140 ! * 2.1 FLUXES FOR ONE OVERCAST UNITY EMISSIVITY CLOUD
141 ! ----------------------------------------------
142
143
144 DO jkc = 1, imaxc
145 jcloud = jkc
146 jkcp1 = jcloud + 1
147
148 ! * 2.1.1 ABOVE THE CLOUD
149 ! ---------------
150
151
152 DO jk = jkcp1, kflev + 1
153 jkm1 = jk - 1
154 DO jl = 1, kdlon
155 zfu(jl) = 0.
156 END DO
157 IF (jk>jkcp1) THEN
158 DO jkj = jkcp1, jkm1
159 DO jl = 1, kdlon
160 zfu(jl) = zfu(jl) + pcntrb(jl, jk, jkj)
161 END DO
162 END DO
163 END IF
164
165 DO jl = 1, kdlon
166 zupf(jl, jkcp1, jk) = pbint(jl, jk) - zfu(jl)
167 END DO
168 END DO
169
170 ! * 2.1.2 BELOW THE CLOUD
171 ! ---------------
172
173
174 DO jk = 1, jcloud
175 jkp1 = jk + 1
176 DO jl = 1, kdlon
177 zfd(jl) = 0.
178 END DO
179
180 IF (jk<jcloud) THEN
181 DO jkj = jkp1, jcloud
182 DO jl = 1, kdlon
183 zfd(jl) = zfd(jl) + pcntrb(jl, jk, jkj)
184 END DO
185 END DO
186 END IF
187 DO jl = 1, kdlon
188 zdnf(jl, jkcp1, jk) = -pbint(jl, jk) - zfd(jl)
189 END DO
190 END DO
191
192 END DO
193
194
195 ! * 2.2 CLOUD COVER MATRIX
196 ! ------------------
197
198 ! * ZCLM(JK1,JK2) IS THE OBSCURATION FACTOR BY CLOUD LAYERS BETWEEN
199 ! HALF-LEVELS JK1 AND JK2 AS SEEN FROM JK1
200
201
202 DO jk1 = 1, kflev + 1
203 DO jk2 = 1, kflev + 1
204 DO jl = 1, kdlon
205 zclm(jl, jk1, jk2) = 0.
206 END DO
207 END DO
208 END DO
209
210
211
212 ! * 2.4 CLOUD COVER BELOW THE LEVEL OF CALCULATION
213 ! ------------------------------------------
214
215
216 DO jk1 = 2, kflev + 1
217 DO jl = 1, kdlon
218 zclear(jl) = 1.
219 zcloud(jl) = 0.
220 END DO
221 DO jk = jk1 - 1, 1, -1
222 DO jl = 1, kdlon
223 IF (novlp==1) THEN
224 ! * maximum-random
225 zclear(jl) = zclear(jl)*(1.0-max(pcldlu(jl, &
226 jk),zcloud(jl)))/(1.0-min(zcloud(jl),1.-zepsec))
227 zclm(jl, jk1, jk) = 1.0 - zclear(jl)
228 zcloud(jl) = pcldlu(jl, jk)
229 ELSE IF (novlp==2) THEN
230 ! * maximum
231 zcloud(jl) = max(zcloud(jl), pcldlu(jl,jk))
232 zclm(jl, jk1, jk) = zcloud(jl)
233 ELSE IF (novlp==3) THEN
234 ! * random
235 zclear(jl) = zclear(jl)*(1.0-pcldlu(jl,jk))
236 zcloud(jl) = 1.0 - zclear(jl)
237 zclm(jl, jk1, jk) = zcloud(jl)
238 END IF
239 END DO
240 END DO
241 END DO
242
243
244 ! * 2.5 CLOUD COVER ABOVE THE LEVEL OF CALCULATION
245 ! ------------------------------------------
246
247
248 DO jk1 = 1, kflev
249 DO jl = 1, kdlon
250 zclear(jl) = 1.
251 zcloud(jl) = 0.
252 END DO
253 DO jk = jk1, kflev
254 DO jl = 1, kdlon
255 IF (novlp==1) THEN
256 ! * maximum-random
257 zclear(jl) = zclear(jl)*(1.0-max(pcldld(jl, &
258 jk),zcloud(jl)))/(1.0-min(zcloud(jl),1.-zepsec))
259 zclm(jl, jk1, jk) = 1.0 - zclear(jl)
260 zcloud(jl) = pcldld(jl, jk)
261 ELSE IF (novlp==2) THEN
262 ! * maximum
263 zcloud(jl) = max(zcloud(jl), pcldld(jl,jk))
264 zclm(jl, jk1, jk) = zcloud(jl)
265 ELSE IF (novlp==3) THEN
266 ! * random
267 zclear(jl) = zclear(jl)*(1.0-pcldld(jl,jk))
268 zcloud(jl) = 1.0 - zclear(jl)
269 zclm(jl, jk1, jk) = zcloud(jl)
270 END IF
271 END DO
272 END DO
273 END DO
274
275
276
277 ! * 3. FLUXES FOR PARTIAL/MULTIPLE LAYERED CLOUDINESS
278 ! ----------------------------------------------
279
280
281 ! * 3.1 DOWNWARD FLUXES
282 ! ---------------
283
284
285 DO jl = 1, kdlon
286 pflux(jl, 2, kflev+1) = 0.
287 END DO
288
289 DO jk1 = kflev, 1, -1
290
291 ! * CONTRIBUTION FROM CLEAR-SKY FRACTION
292
293 DO jl = 1, kdlon
294 zfd(jl) = (1.-zclm(jl,jk1,kflev))*zdnf(jl, 1, jk1)
295 END DO
296
297 ! * CONTRIBUTION FROM ADJACENT CLOUD
298
299 DO jl = 1, kdlon
300 zfd(jl) = zfd(jl) + zclm(jl, jk1, jk1)*zdnf(jl, jk1+1, jk1)
301 END DO
302
303 ! * CONTRIBUTION FROM OTHER CLOUDY FRACTIONS
304
305 DO jk = kflev - 1, jk1, -1
306 DO jl = 1, kdlon
307 zcfrac = zclm(jl, jk1, jk+1) - zclm(jl, jk1, jk)
308 zfd(jl) = zfd(jl) + zcfrac*zdnf(jl, jk+2, jk1)
309 END DO
310 END DO
311
312 DO jl = 1, kdlon
313 pflux(jl, 2, jk1) = zfd(jl)
314 END DO
315
316 END DO
317
318
319
320
321 ! * 3.2 UPWARD FLUX AT THE SURFACE
322 ! --------------------------
323
324
325 DO jl = 1, kdlon
326 pflux(jl, 1, 1) = pemis(jl)*pbsuin(jl) - (1.-pemis(jl))*pflux(jl, 2, 1)
327 END DO
328
329
330
331 ! * 3.3 UPWARD FLUXES
332 ! -------------
333
334
335 DO jk1 = 2, kflev + 1
336
337 ! * CONTRIBUTION FROM CLEAR-SKY FRACTION
338
339 DO jl = 1, kdlon
340 zfu(jl) = (1.-zclm(jl,jk1,1))*zupf(jl, 1, jk1)
341 END DO
342
343 ! * CONTRIBUTION FROM ADJACENT CLOUD
344
345 DO jl = 1, kdlon
346 zfu(jl) = zfu(jl) + zclm(jl, jk1, jk1-1)*zupf(jl, jk1, jk1)
347 END DO
348
349 ! * CONTRIBUTION FROM OTHER CLOUDY FRACTIONS
350
351 DO jk = 2, jk1 - 1
352 DO jl = 1, kdlon
353 zcfrac = zclm(jl, jk1, jk-1) - zclm(jl, jk1, jk)
354 zfu(jl) = zfu(jl) + zcfrac*zupf(jl, jk, jk1)
355 END DO
356 END DO
357
358 DO jl = 1, kdlon
359 pflux(jl, 1, jk1) = zfu(jl)
360 END DO
361
362 END DO
363
364
365 END IF
366
367
368 ! * 2.3 END OF CLOUD EFFECT COMPUTATIONS
369
370
371 IF (.NOT. levoigt) THEN
372 DO jl = 1, kdlon
373 zfn10(jl) = pflux(jl, 1, klim) + pflux(jl, 2, klim)
374 END DO
375 DO jk = klim + 1, kflev + 1
376 DO jl = 1, kdlon
377 zfn10(jl) = zfn10(jl) + pcts(jl, jk-1)
378 pflux(jl, 1, jk) = zfn10(jl)
379 pflux(jl, 2, jk) = 0.0
380 END DO
381 END DO
382 END IF
383
384 RETURN
385 END SUBROUTINE lwc

  ViewVC Help
Powered by ViewVC 1.1.21