LMDZ
olwvb.F90
Go to the documentation of this file.
1 SUBROUTINE olwvb ( KIDIA,KFDIA,KLON,KLEV,KUAER &
2  & , pabcu,padjd,padju,pb,pbint,pbsui,pbsur,pbtop &
3  & , pdisd,pdisu,pemis &
4  & , pga,pgb,pgasur,pgbsur,pgatop,pgbtop &
5  & , pfluc )
6 !
7 !**** *LWVB* - L.W., VERTICAL INTEGRATION, EXCHANGE WITH BOUNDARIES
8 !
9 ! PURPOSE.
10 ! --------
11 ! INTRODUCES THE EFFECTS OF THE BOUNDARIES IN THE VERTICAL
12 ! INTEGRATION
13 !
14 !** INTERFACE.
15 ! ----------
16 !
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! ==== INPUTS ===
20 ! PABCU : (KLON,NUA,3*KLEV+1); ABSORBER AMOUNTS
21 ! PADJ.. : (KLON,KLEV+1) ; CONTRIBUTION BY ADJACENT LAYERS
22 ! PB : (KLON,NISP,KLEV+1); SPECTRAL HALF-LEVEL PLANCK FUNCTIONS
23 ! PBINT : (KLON,KLEV+1) ; HALF-LEVEL PLANCK FUNCTIONS
24 ! PBSUI : (KLON) ; SURFACE PLANCK FUNCTION
25 ! PBSUR : (KLON,NISP) ; SPECTRAL SURFACE PLANCK FUNCTION
26 ! PBTOP : (KLON,NISP) ; SPECTRAL T.O.A. PLANCK FUNCTION
27 ! PDIS.. : (KLON,KLEV+1) ; CONTRIBUTION BY DISTANT LAYERS
28 ! PEMIS : (KLON) ; SURFACE EMISSIVITY
29 ! PGA, PGB ; PADE APPROXIMANTS
30 ! PGASUR, PGBSUR ; SURFACE PADE APPROXIMANTS
31 ! PGATOP, PGBTOP ; T.O.A. PADE APPROXIMANTS
32 ! ==== OUTPUTS ===
33 ! PFLUC(KLON,2,KLEV) ; RADIATIVE FLUXES CLEAR-SKY:
34 ! 1 ==> UPWARD FLUX TOTAL
35 !
36 ! IMPLICIT ARGUMENTS : NONE
37 ! --------------------
38 !
39 ! METHOD.
40 ! -------
41 !
42 ! 1. COMPUTES THE ENERGY EXCHANGE WITH TOP AND SURFACE OF THE
43 ! ATMOSPHERE
44 ! 2. COMPUTES THE COOLING-TO-SPACE AND HEATING-FROM-GROUND
45 ! TERMS FOR THE APPROXIMATE COOLING RATE ABOVE 10 HPA
46 ! 3. ADDS UP ALL CONTRIBUTIONS TO GET THE CLEAR-SKY FLUXES
47 !
48 ! EXTERNALS.
49 ! ----------
50 !
51 ! *LWTT*
52 !
53 ! REFERENCE.
54 ! ----------
55 !
56 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
57 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
58 !
59 ! AUTHOR.
60 ! -------
61 ! JEAN-JACQUES MORCRETTE *ECMWF*
62 !
63 ! MODIFICATIONS.
64 ! --------------
65 ! ORIGINAL : 89-07-14
66 !-----------------------------------------------------------------------
67 
68 #include "tsmbkind.h"
69 
70 USE yoeolw , ONLY : nisp ,nipd ,ntra ,nua ,ng1p1
71 
72 
73 IMPLICIT NONE
74 
75 
76 ! DUMMY INTEGER SCALARS
77 integer_m :: kfdia
78 integer_m :: kidia
79 integer_m :: klev
80 integer_m :: klon
81 integer_m :: kuaer
82 
83 
84 !-----------------------------------------------------------------------
85 !
86 !* 0.1 ARGUMENTS
87 ! ---------
88 !
89 !
90 real_b :: pabcu(klon,nua,3*klev+1) &
91  & , padjd(klon,klev+1), padju(klon,klev+1) &
92  & , pb(klon,nisp,klev+1), pbint(klon,klev+1) &
93  & , pbsur(klon,nisp), pbsui(klon), pbtop(klon,nisp) &
94  & , pdisd(klon,klev+1), pdisu(klon,klev+1) &
95  & , pemis(klon) &
96  & , pga(klon,8,2,klev), pgb(klon,8,2,klev) &
97  & , pgasur(klon,8,2), pgbsur(klon,8,2) &
98  & , pgatop(klon,8,2), pgbtop(klon,8,2)
99 !
100 real_b :: pfluc(klon,2,klev+1)
101 !
102 !-----------------------------------------------------------------------
103 !
104 !* 0.2 LOCAL ARRAYS
105 ! ------------
106 !
107 integer_m :: itx(klon)
108 !
109 real_b :: zbgnd(klon), zfd(klon), zfdn(klon,klev+1) &
110  & , zfn10(klon), zfu(klon), zfup(klon,klev+1) &
111  & , ztt(klon,ntra), ztt1(klon,ntra), ztt2(klon,ntra) &
112  & , zuu(klon,nua) , zcnsol(klon), zcntop(klon)
113 !
114 
115 ! LOCAL INTEGER SCALARS
116 integer_m :: in, ja, jk, jl, ind1, ind2, ind3, ind4, jlim
117 
118 ! LOCAL REAL SCALARS
119 real_b :: zcntop1, zcntop2, zcntop3, zcntop4, zcntop5, zcntop6
120 
121 !-----------------------------------------------------------------------
122 !
123 !* 1. INITIALIZATION
124 ! --------------
125 !
126 !
127 !* 1.2 INITIALIZE TRANSMISSION FUNCTIONS
128 ! ---------------------------------
129 !
130 DO ja=1,ntra
131  DO jl=kidia,kfdia
132  ztt(jl,ja)=1.0
133  ztt1(jl,ja)=1.0
134  ztt2(jl,ja)=1.0
135  END DO
136 END DO
137 !
138 DO ja=1,nua
139  DO jl=kidia,kfdia
140  zuu(jl,ja)=1.0
141  END DO
142 END DO
143 !
144 ! ------------------------------------------------------------------
145 !
146 !* 2. VERTICAL INTEGRATION
147 ! --------------------
148 !
149 ind1=0
150 ind3=0
151 ind4=1
152 ind2=1
153 !
154 !
155 !* 2.3 EXCHANGE WITH TOP OF THE ATMOSPHERE
156 ! -----------------------------------
157 !
158 DO jk = 1 , klev
159  in=(jk-1)*ng1p1+1
160 !
161  DO ja=1,kuaer
162  DO jl=kidia,kfdia
163  zuu(jl,ja)=pabcu(jl,ja,in)
164  END DO
165  END DO
166 !
167 !
168  CALL lwtt ( kidia,kfdia,klon &
169  & , pgatop(1,1,1), pgbtop(1,1,1), zuu, ztt )
170 !
171  DO jl = kidia,kfdia
172  zcntop(jl)=pbtop(jl,1)*ztt(jl,1) *ztt(jl,10) &
173  & +pbtop(jl,2)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11) &
174  & +pbtop(jl,3)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12) &
175  & +pbtop(jl,4)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13) &
176  & +pbtop(jl,5)*ztt(jl,3) *ztt(jl,14) &
177  & +pbtop(jl,6)*ztt(jl,6) *ztt(jl,15)
178  zfd(jl)=zcntop(jl)-pbint(jl,jk)-pdisd(jl,jk)-padjd(jl,jk)
179  zfdn(jl,jk)=zfd(jl)
180  pfluc(jl,2,jk)=zfd(jl)
181  END DO
182 !
183 END DO
184 !
185 jk = klev+1
186 in=(jk-1)*ng1p1+1
187 !
188 DO jl = kidia,kfdia
189  zcntop(jl)= pbtop(jl,1) &
190  & + pbtop(jl,2) &
191  & + pbtop(jl,3) &
192  & + pbtop(jl,4) &
193  & + pbtop(jl,5) &
194  & + pbtop(jl,6)
195  zfd(jl)=zcntop(jl)-pbint(jl,jk)-pdisd(jl,jk)-padjd(jl,jk)
196  zfdn(jl,jk)=zfd(jl)
197  pfluc(jl,2,jk)=zfd(jl)
198 END DO
199 !
200 !* 2.4 COOLING-TO-SPACE OF LAYERS ABOVE 10 HPA
201 ! ---------------------------------------
202 !
203 !
204 !* 2.4.1 INITIALIZATION
205 ! --------------
206 !
207 !
208 !* 2.5 EXCHANGE WITH LOWER LIMIT
209 ! -------------------------
210 !
211 DO jl = kidia,kfdia
212  zbgnd(jl)=pbsui(jl)*pemis(jl)-(1.-pemis(jl)) &
213  & *pfluc(jl,2,1)-pbint(jl,1)
214 END DO
215 !
216 jk = 1
217 in=(jk-1)*ng1p1+1
218 !
219 DO jl = kidia,kfdia
220  zcnsol(jl)=pbsur(jl,1) &
221  & +pbsur(jl,2) &
222  & +pbsur(jl,3) &
223  & +pbsur(jl,4) &
224  & +pbsur(jl,5) &
225  & +pbsur(jl,6)
226  zcnsol(jl)=zcnsol(jl)*zbgnd(jl)/pbsui(jl)
227  zfu(jl)=zcnsol(jl)+pbint(jl,jk)-pdisu(jl,jk)-padju(jl,jk)
228  zfup(jl,jk)=zfu(jl)
229  pfluc(jl,1,jk)=zfu(jl)
230 END DO
231 !
232 DO jk = 2 , klev+1
233  in=(jk-1)*ng1p1+1
234 !
235 !
236  DO ja=1,kuaer
237  DO jl=kidia,kfdia
238  zuu(jl,ja)=pabcu(jl,ja,1)-pabcu(jl,ja,in)
239  END DO
240  END DO
241 !
242 !
243  CALL lwtt ( kidia,kfdia,klon &
244  & , pgasur(1,1,1), pgbsur(1,1,1), zuu, ztt )
245 !
246  DO jl = kidia,kfdia
247  zcnsol(jl)=pbsur(jl,1)*ztt(jl,1) *ztt(jl,10) &
248  & +pbsur(jl,2)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11) &
249  & +pbsur(jl,3)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12) &
250  & +pbsur(jl,4)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13) &
251  & +pbsur(jl,5)*ztt(jl,3) *ztt(jl,14) &
252  & +pbsur(jl,6)*ztt(jl,6) *ztt(jl,15)
253  zcnsol(jl)=zcnsol(jl)*zbgnd(jl)/pbsui(jl)
254  zfu(jl)=zcnsol(jl)+pbint(jl,jk)-pdisu(jl,jk)-padju(jl,jk)
255  zfup(jl,jk)=zfu(jl)
256  pfluc(jl,1,jk)=zfu(jl)
257  END DO
258 !
259 !
260 END DO
261 !
262 !
263 !
264 !* 2.7 CLEAR-SKY FLUXES
265 ! ----------------
266 !
267 DO jk = 1 , klev+1
268  DO jl = kidia,kfdia
269  pfluc(jl,1,jk) = zfup(jl,jk)
270  pfluc(jl,2,jk) = zfdn(jl,jk)
271  END DO
272 END DO
273 !
274 ! ------------------------------------------------------------------
275 !
276 RETURN
277 END SUBROUTINE olwvb
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer, save klev
Definition: dimphy.F90:7
integer, save kfdia
Definition: dimphy.F90:5
subroutine olwvb(KIDIA, KFDIA, KLON, KLEV, KUAER, PABCU, PADJD, PADJU, PB, PBINT, PBSUI, PBSUR, PBTOP, PDISD, PDISU, PEMIS, PGA, PGB, PGASUR, PGBSUR, PGATOP, PGBTOP, PFLUC)
Definition: olwvb.F90:6
subroutine lwtt(KIDIA, KFDIA, KLON, PGA, PGB, PUU, PTT)
Definition: lwtt.F90:3
Definition: yoeolw.F90:1