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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 134 - (show annotations)
Wed Apr 29 15:47:56 2015 UTC (9 years, 1 month ago) by guez
File size: 8415 byte(s)
Sources inside, compilation outside.
1 SUBROUTINE lwvb(kuaer, ktraer, klim, pabcu, padjd, padju, pb, pbint, pbsui, &
2 pbsur, pbtop, pdisd, pdisu, pemis, ppmb, pga, pgb, pgasur, pgbsur, &
3 pgatop, pgbtop, pcts, pfluc)
4 USE dimens_m
5 USE dimphy
6 USE raddim
7 USE radopt
8 USE raddimlw
9 IMPLICIT NONE
10
11 ! -----------------------------------------------------------------------
12 ! PURPOSE.
13 ! --------
14 ! INTRODUCES THE EFFECTS OF THE BOUNDARIES IN THE VERTICAL
15 ! INTEGRATION
16
17 ! METHOD.
18 ! -------
19
20 ! 1. COMPUTES THE ENERGY EXCHANGE WITH TOP AND SURFACE OF THE
21 ! ATMOSPHERE
22 ! 2. COMPUTES THE COOLING-TO-SPACE AND HEATING-FROM-GROUND
23 ! TERMS FOR THE APPROXIMATE COOLING RATE ABOVE 10 HPA
24 ! 3. ADDS UP ALL CONTRIBUTIONS TO GET THE CLEAR-SKY FLUXES
25
26 ! REFERENCE.
27 ! ----------
28
29 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
30 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
31
32 ! AUTHOR.
33 ! -------
34 ! JEAN-JACQUES MORCRETTE *ECMWF*
35
36 ! MODIFICATIONS.
37 ! --------------
38 ! ORIGINAL : 89-07-14
39 ! Voigt lines (loop 2413 to 2427) - JJM & PhD - 01/96
40 ! -----------------------------------------------------------------------
41
42 ! * 0.1 ARGUMENTS
43 ! ---------
44
45 INTEGER kuaer, ktraer, klim
46
47 DOUBLE PRECISION pabcu(kdlon, nua, 3*kflev+1) ! ABSORBER AMOUNTS
48 DOUBLE PRECISION padjd(kdlon, kflev+1) ! CONTRIBUTION BY ADJACENT LAYERS
49 DOUBLE PRECISION padju(kdlon, kflev+1) ! CONTRIBUTION BY ADJACENT LAYERS
50 DOUBLE PRECISION pb(kdlon, ninter, kflev+1) ! SPECTRAL HALF-LEVEL PLANCK FUNCTIONS
51 DOUBLE PRECISION pbint(kdlon, kflev+1) ! HALF-LEVEL PLANCK FUNCTIONS
52 DOUBLE PRECISION pbsur(kdlon, ninter) ! SPECTRAL SURFACE PLANCK FUNCTION
53 DOUBLE PRECISION pbsui(kdlon) ! SURFACE PLANCK FUNCTION
54 DOUBLE PRECISION pbtop(kdlon, ninter) ! SPECTRAL T.O.A. PLANCK FUNCTION
55 DOUBLE PRECISION pdisd(kdlon, kflev+1) ! CONTRIBUTION BY DISTANT LAYERS
56 DOUBLE PRECISION pdisu(kdlon, kflev+1) ! CONTRIBUTION BY DISTANT LAYERS
57 DOUBLE PRECISION pemis(kdlon) ! SURFACE EMISSIVITY
58 DOUBLE PRECISION ppmb(kdlon, kflev+1) ! PRESSURE MB
59 DOUBLE PRECISION pga(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
60 DOUBLE PRECISION pgb(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
61 DOUBLE PRECISION pgasur(kdlon, 8, 2) ! SURFACE PADE APPROXIMANTS
62 DOUBLE PRECISION pgbsur(kdlon, 8, 2) ! SURFACE PADE APPROXIMANTS
63 DOUBLE PRECISION pgatop(kdlon, 8, 2) ! T.O.A. PADE APPROXIMANTS
64 DOUBLE PRECISION pgbtop(kdlon, 8, 2) ! T.O.A. PADE APPROXIMANTS
65
66 DOUBLE PRECISION pfluc(kdlon, 2, kflev+1) ! CLEAR-SKY RADIATIVE FLUXES
67 DOUBLE PRECISION pcts(kdlon, kflev) ! COOLING-TO-SPACE TERM
68
69 ! * LOCAL VARIABLES:
70
71 DOUBLE PRECISION zbgnd(kdlon)
72 DOUBLE PRECISION zfd(kdlon)
73 DOUBLE PRECISION zfn10(kdlon)
74 DOUBLE PRECISION zfu(kdlon)
75 DOUBLE PRECISION ztt(kdlon, ntra)
76 DOUBLE PRECISION ztt1(kdlon, ntra)
77 DOUBLE PRECISION ztt2(kdlon, ntra)
78 DOUBLE PRECISION zuu(kdlon, nua)
79 DOUBLE PRECISION zcnsol(kdlon)
80 DOUBLE PRECISION zcntop(kdlon)
81
82 INTEGER jk, jl, ja
83 INTEGER jstra, jstru
84 INTEGER ind1, ind2, ind3, ind4, in, jlim
85 DOUBLE PRECISION zctstr
86 ! -----------------------------------------------------------------------
87
88 ! * 1. INITIALIZATION
89 ! --------------
90
91
92
93 ! * 1.2 INITIALIZE TRANSMISSION FUNCTIONS
94 ! ---------------------------------
95
96
97 DO ja = 1, ntra
98 DO jl = 1, kdlon
99 ztt(jl, ja) = 1.0
100 ztt1(jl, ja) = 1.0
101 ztt2(jl, ja) = 1.0
102 END DO
103 END DO
104
105 DO ja = 1, nua
106 DO jl = 1, kdlon
107 zuu(jl, ja) = 1.0
108 END DO
109 END DO
110
111 ! ------------------------------------------------------------------
112
113 ! * 2. VERTICAL INTEGRATION
114 ! --------------------
115
116
117 ind1 = 0
118 ind3 = 0
119 ind4 = 1
120 ind2 = 1
121
122
123 ! * 2.3 EXCHANGE WITH TOP OF THE ATMOSPHERE
124 ! -----------------------------------
125
126
127 DO jk = 1, kflev
128 in = (jk-1)*ng1p1 + 1
129
130 DO ja = 1, kuaer
131 DO jl = 1, kdlon
132 zuu(jl, ja) = pabcu(jl, ja, in)
133 END DO
134 END DO
135
136
137 CALL lwtt(pgatop(1,1,1), pgbtop(1,1,1), zuu, ztt)
138
139 DO jl = 1, kdlon
140 zcntop(jl) = pbtop(jl, 1)*ztt(jl, 1)*ztt(jl, 10) + &
141 pbtop(jl, 2)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
142 pbtop(jl, 3)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
143 pbtop(jl, 4)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
144 pbtop(jl, 5)*ztt(jl, 3)*ztt(jl, 14) + pbtop(jl, 6)*ztt(jl, 6)*ztt(jl, &
145 15)
146 zfd(jl) = zcntop(jl) - pbint(jl, jk) - pdisd(jl, jk) - padjd(jl, jk)
147 pfluc(jl, 2, jk) = zfd(jl)
148 END DO
149
150 END DO
151
152 jk = kflev + 1
153 in = (jk-1)*ng1p1 + 1
154
155 DO jl = 1, kdlon
156 zcntop(jl) = pbtop(jl, 1) + pbtop(jl, 2) + pbtop(jl, 3) + pbtop(jl, 4) + &
157 pbtop(jl, 5) + pbtop(jl, 6)
158 zfd(jl) = zcntop(jl) - pbint(jl, jk) - pdisd(jl, jk) - padjd(jl, jk)
159 pfluc(jl, 2, jk) = zfd(jl)
160 END DO
161
162 ! * 2.4 COOLING-TO-SPACE OF LAYERS ABOVE 10 HPA
163 ! ---------------------------------------
164
165
166
167 ! * 2.4.1 INITIALIZATION
168 ! --------------
169
170
171 jlim = kflev
172
173 IF (.NOT. levoigt) THEN
174 DO jk = kflev, 1, -1
175 IF (ppmb(1,jk)<10.0) THEN
176 jlim = jk
177 END IF
178 END DO
179 END IF
180 klim = jlim
181
182 IF (.NOT. levoigt) THEN
183 DO ja = 1, ktraer
184 DO jl = 1, kdlon
185 ztt1(jl, ja) = 1.0
186 END DO
187 END DO
188
189 ! * 2.4.2 LOOP OVER LAYERS ABOVE 10 HPA
190 ! -----------------------------
191
192
193 DO jstra = kflev, jlim, -1
194 jstru = (jstra-1)*ng1p1 + 1
195
196 DO ja = 1, kuaer
197 DO jl = 1, kdlon
198 zuu(jl, ja) = pabcu(jl, ja, jstru)
199 END DO
200 END DO
201
202
203 CALL lwtt(pga(1,1,1,jstra), pgb(1,1,1,jstra), zuu, ztt)
204
205 DO jl = 1, kdlon
206 zctstr = (pb(jl,1,jstra)+pb(jl,1,jstra+1))* &
207 (ztt1(jl,1)*ztt1(jl,10)-ztt(jl,1)*ztt(jl,10)) + &
208 (pb(jl,2,jstra)+pb(jl,2,jstra+1))*(ztt1(jl,2)*ztt1(jl,7)*ztt1(jl,11 &
209 )-ztt(jl,2)*ztt(jl,7)*ztt(jl,11)) + (pb(jl,3,jstra)+pb(jl,3,jstra+1 &
210 ))*(ztt1(jl,4)*ztt1(jl,8)*ztt1(jl,12)-ztt(jl,4)*ztt(jl,8)*ztt(jl,12 &
211 )) + (pb(jl,4,jstra)+pb(jl,4,jstra+1))*(ztt1(jl,5)*ztt1(jl,9)*ztt1( &
212 jl,13)-ztt(jl,5)*ztt(jl,9)*ztt(jl,13)) + (pb(jl,5,jstra)+pb(jl,5, &
213 jstra+1))*(ztt1(jl,3)*ztt1(jl,14)-ztt(jl,3)*ztt(jl,14)) + &
214 (pb(jl,6,jstra)+pb(jl,6,jstra+1))*(ztt1(jl,6)*ztt1(jl,15)-ztt(jl,6) &
215 *ztt(jl,15))
216 pcts(jl, jstra) = zctstr*0.5
217 END DO
218 DO ja = 1, ktraer
219 DO jl = 1, kdlon
220 ztt1(jl, ja) = ztt(jl, ja)
221 END DO
222 END DO
223 END DO
224 END IF
225 ! Mise a zero de securite pour PCTS en cas de LEVOIGT
226 IF (levoigt) THEN
227 DO jstra = 1, kflev
228 DO jl = 1, kdlon
229 pcts(jl, jstra) = 0.
230 END DO
231 END DO
232 END IF
233
234
235 ! * 2.5 EXCHANGE WITH LOWER LIMIT
236 ! -------------------------
237
238
239 DO jl = 1, kdlon
240 zbgnd(jl) = pbsui(jl)*pemis(jl) - (1.-pemis(jl))*pfluc(jl, 2, 1) - &
241 pbint(jl, 1)
242 END DO
243
244 jk = 1
245 in = (jk-1)*ng1p1 + 1
246
247 DO jl = 1, kdlon
248 zcnsol(jl) = pbsur(jl, 1) + pbsur(jl, 2) + pbsur(jl, 3) + pbsur(jl, 4) + &
249 pbsur(jl, 5) + pbsur(jl, 6)
250 zcnsol(jl) = zcnsol(jl)*zbgnd(jl)/pbsui(jl)
251 zfu(jl) = zcnsol(jl) + pbint(jl, jk) - pdisu(jl, jk) - padju(jl, jk)
252 pfluc(jl, 1, jk) = zfu(jl)
253 END DO
254
255 DO jk = 2, kflev + 1
256 in = (jk-1)*ng1p1 + 1
257
258
259 DO ja = 1, kuaer
260 DO jl = 1, kdlon
261 zuu(jl, ja) = pabcu(jl, ja, 1) - pabcu(jl, ja, in)
262 END DO
263 END DO
264
265
266 CALL lwtt(pgasur(1,1,1), pgbsur(1,1,1), zuu, ztt)
267
268 DO jl = 1, kdlon
269 zcnsol(jl) = pbsur(jl, 1)*ztt(jl, 1)*ztt(jl, 10) + &
270 pbsur(jl, 2)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
271 pbsur(jl, 3)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
272 pbsur(jl, 4)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
273 pbsur(jl, 5)*ztt(jl, 3)*ztt(jl, 14) + pbsur(jl, 6)*ztt(jl, 6)*ztt(jl, &
274 15)
275 zcnsol(jl) = zcnsol(jl)*zbgnd(jl)/pbsui(jl)
276 zfu(jl) = zcnsol(jl) + pbint(jl, jk) - pdisu(jl, jk) - padju(jl, jk)
277 pfluc(jl, 1, jk) = zfu(jl)
278 END DO
279
280
281 END DO
282
283
284
285 ! * 2.7 CLEAR-SKY FLUXES
286 ! ----------------
287
288
289 IF (.NOT. levoigt) THEN
290 DO jl = 1, kdlon
291 zfn10(jl) = pfluc(jl, 1, jlim) + pfluc(jl, 2, jlim)
292 END DO
293 DO jk = jlim + 1, kflev + 1
294 DO jl = 1, kdlon
295 zfn10(jl) = zfn10(jl) + pcts(jl, jk-1)
296 pfluc(jl, 1, jk) = zfn10(jl)
297 pfluc(jl, 2, jk) = 0.
298 END DO
299 END DO
300 END IF
301
302 ! ------------------------------------------------------------------
303
304 RETURN
305 END SUBROUTINE lwvb

  ViewVC Help
Powered by ViewVC 1.1.21