LMDZ
lwu.F90
Go to the documentation of this file.
1 SUBROUTINE lwu &
2  &( kidia, kfdia, klon, klev &
3  &, paer , pcco2, pdp , ppmb, pqof , ptave, pview, pwv &
4  &, pabcu &
5  &)
6 
7 !**** *LWU* - LONGWAVE EFFECTIVE ABSORBER AMOUNTS
8 
9 ! PURPOSE.
10 ! --------
11 ! COMPUTES ABSORBER AMOUNTS INCLUDING PRESSURE AND
12 ! TEMPERATURE EFFECTS
13 
14 !** INTERFACE.
15 ! ----------
16 
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! ==== INPUTS ===
20 ! PAER : (KLON,6,KLEV) ; OPTICAL THICKNESS OF THE AEROSOLS
21 ! PCCO2 : ; CONCENTRATION IN CO2 (PA/PA)
22 ! PDP : (KLON,KLEV) ; LAYER PRESSURE THICKNESS (PA)
23 ! PPMB : (KLON,KLEV+1) ; HALF LEVEL PRESSURE
24 ! PQOF : (KLON,KLEV) ; CONCENTRATION IN OZONE (PA/PA)
25 ! PTAVE : (KLON,KLEV) ; TEMPERATURE
26 ! PWV : (KLON,KLEV) ; SPECIFIC HUMIDITY PA/PA
27 ! PVIEW : (KLON) ; COSECANT OF VIEWING ANGLE
28 ! ==== OUTPUTS ===
29 ! PABCU :(KLON,NUA,3*KLEV+1); EFFECTIVE ABSORBER AMOUNTS
30 
31 ! IMPLICIT ARGUMENTS : NONE
32 ! --------------------
33 
34 ! METHOD.
35 ! -------
36 
37 ! 1. COMPUTES THE PRESSURE AND TEMPERATURE WEIGHTED AMOUNTS OF
38 ! ABSORBERS.
39 
40 ! EXTERNALS.
41 ! ----------
42 
43 ! NONE
44 
45 ! REFERENCE.
46 ! ----------
47 
48 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
49 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
50 
51 ! AUTHOR.
52 ! -------
53 ! JEAN-JACQUES MORCRETTE *ECMWF*
54 
55 ! MODIFICATIONS.
56 ! --------------
57 ! ORIGINAL : 89-07-14
58 ! JJ Morcrette 97-04-18 Revised Continuum + Clean-up
59 
60 !-----------------------------------------------------------------------
61 
62 #include "tsmbkind.h"
63 
64 USE yomcst , ONLY : rg
65 USE yoesw , ONLY : raer
66 USE yoelw , ONLY : nsil ,nua ,ng1 ,ng1p1 ,&
67  &alwt ,blwt ,ro3t ,rt1 ,tref ,&
69 USE yoerdi , ONLY : rch4 ,rn2o ,rcfc11 ,rcfc12
70 USE yoerdu , ONLY : r10e ,repsco ,repscq
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 
82 ! DUMMY REAL SCALARS
83 real_b :: pcco2
84 
85 
86 
87 !-----------------------------------------------------------------------
88 
89 !* 0.1 ARGUMENTS
90 ! ---------
91 
92 real_b :: paer(klon,6,klev), pdp(klon,klev)&
93  &, ppmb(klon,klev+1), pqof(klon,klev)&
94  &, ptave(klon,klev) , pview(klon), pwv(klon,klev)
95 
96 real_b :: pabcu(klon,nua,3*klev+1)
97 
98 !-----------------------------------------------------------------------
99 
100 !* 0.2 LOCAL ARRAYS
101 ! ------------
102 real_b :: zably(klon,7,3*klev+1) , zdpm(klon,3*klev)&
103  &, zduc(klon, 3*klev+1) , zfact(klon)&
104  &, zupm(klon,3*klev)
105 real_b :: zphio(klon),zpsc2(klon) , zpsc3(klon), zpsh1(klon)&
106  &, zpsh2(klon),zpsh3(klon) , zpsh4(klon), zpsh5(klon)&
107  &, zpsh6(klon),zpsio(klon) , ztcon(klon)&
108  &, zphm6(klon),zpsm6(klon) , zphn6(klon), zpsn6(klon)
109 real_b :: zssig(klon,3*klev+1) , ztavi(klon)&
110  &, zuaer(klon,nsil) , zxoz(klon) , zxwv(klon)
111 
112 ! LOCAL INTEGER SCALARS
113 integer_m :: iae1, iae2, iae3, ic, icp1, ig1, ij, ijpn,&
114  &ikip1, ikj, ikjp, ikjpn, ikjr, ikl, ja, jae, &
115  &jk, jki, jkk, jl
116 
117 ! LOCAL REAL SCALARS
118 real_b :: zalup, zcac8, zcah1, zcah2, zcah3, zcah4,&
119  &zcah5, zcah6, zcbc8, zcbh1, zcbh2, zcbh3, &
120  &zcbh4, zcbh5, zcbh6, zdiff, zdpmg, zdpmp0, &
121  &zfppw, ztx, ztx2, zu6, zup, zupmco2, zupmg, &
122  &zupmh2o, zupmo3, zzably
123 
124 
125 !-----------------------------------------------------------------------
126 
127 !* 1. INITIALIZATION
128 ! --------------
129 
130 !-----------------------------------------------------------------------
131 
132 
133 !* 2. PRESSURE OVER GAUSS SUB-LEVELS
134 ! ------------------------------
135 
136 DO jl = kidia,kfdia
137  zssig(jl, 1 ) = ppmb(jl,1) * 100._jprb
138 ENDDO
139 
140 DO jk = 1 , klev
141  ikj=(jk-1)*ng1p1+1
142  ikjr = ikj
143  ikjp = ikj + ng1p1
144  DO jl = kidia,kfdia
145  zssig(jl,ikjp)=ppmb(jl,jk+1)* 100._jprb
146  ENDDO
147  DO ig1=1,ng1
148  ikj=ikj+1
149  DO jl = kidia,kfdia
150  zssig(jl,ikj)= (zssig(jl,ikjr) + zssig(jl,ikjp)) * _half_ &
151  &+ rt1(ig1) * (zssig(jl,ikjp) - zssig(jl,ikjr)) * _half_
152  ENDDO
153  ENDDO
154 ENDDO
155 
156 !-----------------------------------------------------------------------
157 
158 
159 !* 4. PRESSURE THICKNESS AND MEAN PRESSURE OF SUB-LAYERS
160 ! --------------------------------------------------
161 
162 DO jki=1,3*klev
163  ikip1=jki+1
164  DO jl = kidia,kfdia
165  zupm(jl,jki)=(zssig(jl,jki)+zssig(jl,ikip1))*_half_
166  zdpm(jl,jki)=(zssig(jl,jki)-zssig(jl,ikip1))/(10._jprb*rg)
167  ENDDO
168 ENDDO
169 
170 DO jk = 1 , klev
171  ikl = klev+1 - jk
172  DO jl = kidia,kfdia
173  zxwv(jl) = max(pwv(jl,ikl) , repscq )
174  zxoz(jl) = max(pqof(jl,ikl) / pdp(jl,ikl) , repsco )
175  ENDDO
176  ikj=(jk-1)*ng1p1+1
177  ikjpn=ikj+ng1
178  DO jkk=ikj,ikjpn
179  DO jl = kidia,kfdia
180  zdpmg = zdpm(jl,jkk)
181  zdpmp0 = zdpmg / 101325._jprb
182  zupmg = zupm(jl,jkk) * zdpmp0
183  zupmco2 = ( zupm(jl,jkk) + rvgco2 ) * zdpmp0
184  zupmh2o = ( zupm(jl,jkk) + rvgh2o ) * zdpmp0
185  zupmo3 = ( zupm(jl,jkk) + rvgo3 ) * zdpmp0
186  zduc(jl,jkk) = zdpmg
187  zably(jl,6,jkk) = zxoz(jl) * zdpmg
188  zably(jl,7,jkk) = zxoz(jl) * zupmo3
189  zu6 = zxwv(jl) * zupmg
190  zfppw = 1.6078_jprb * zxwv(jl) / (_one_+0.608_jprb*zxwv(jl))
191  zably(jl,1,jkk) = zxwv(jl) * zupmh2o
192  zably(jl,5,jkk) = zu6 * zfppw
193  zably(jl,4,jkk) = zu6 * (_one_-zfppw)
194  zably(jl,3,jkk) = pcco2 * zupmco2
195  zably(jl,2,jkk) = pcco2 * zdpmg
196  ENDDO
197  ENDDO
198 ENDDO
199 
200 !-----------------------------------------------------------------------
201 
202 
203 !* 5. CUMULATIVE ABSORBER AMOUNTS FROM TOP OF ATMOSPHERE
204 ! --------------------------------------------------
205 
206 DO ja = 1, nua
207  DO jl = kidia,kfdia
208  pabcu(jl,ja,3*klev+1) = _zero_
209  ENDDO
210 ENDDO
211 
212 DO jk = 1 , klev
213  ij=(jk-1)*ng1p1+1
214  ijpn=ij+ng1
215  ikl=klev+1-jk
216 
217 
218 !* 5.1 CUMULATIVE AEROSOL AMOUNTS FROM TOP OF ATMOSPHERE
219 ! --------------------------------------------------
220 ! -- NB: 'PAER' AEROSOLS ARE ENTERED FROM TOP TO BOTTOM
221 
222  iae1=3*klev+1-ij
223  iae2=3*klev+1-(ij+1)
224  iae3=3*klev+1-ijpn
225  DO jae=1,6
226  DO jl = kidia,kfdia
227  zuaer(jl,jae) =&
228  &(raer(jae,1)*paer(jl,1,jk)+raer(jae,2)*paer(jl,2,jk)&
229  &+raer(jae,3)*paer(jl,3,jk)+raer(jae,4)*paer(jl,4,jk)&
230  &+raer(jae,5)*paer(jl,5,jk)+raer(jae,6)*paer(jl,5,jk))&
231  &/(zduc(jl,iae1)+zduc(jl,iae2)+zduc(jl,iae3))
232  ENDDO
233  ENDDO
234 
235 
236 
237 !* 5.2 INTRODUCES TEMPERATURE EFFECTS ON ABSORBER AMOUNTS
238 ! --------------------------------------------------
239 
240  DO jl = kidia,kfdia
241  ztavi(jl)=ptave(jl,ikl)
242  zfact(jl)=_one_-ztavi(jl)/296._jprb
243  ztcon(jl)=exp(6.08_jprb*(296._jprb/ztavi(jl)-_one_))
244 ! ZTCON(JL)=EXP(6.08*ZFACT(JL))
245  ztx=ztavi(jl)-tref
246  ztx2=ztx*ztx
247  zzably = zably(jl,1,iae1)+zably(jl,1,iae2)+zably(jl,1,iae3)
248  zup=min( max( _half_*r10e*log( zzably ) + 5._jprb, _zero_), 6.0_jprb)
249  zcah1=alwt(1,1)+zup*(alwt(1,2)+zup*(alwt(1,3)))
250  zcbh1=blwt(1,1)+zup*(blwt(1,2)+zup*(blwt(1,3)))
251  zpsh1(jl)=exp( zcah1 * ztx + zcbh1 * ztx2 )
252  zcah2=alwt(2,1)+zup*(alwt(2,2)+zup*(alwt(2,3)))
253  zcbh2=blwt(2,1)+zup*(blwt(2,2)+zup*(blwt(2,3)))
254  zpsh2(jl)=exp( zcah2 * ztx + zcbh2 * ztx2 )
255  zcah3=alwt(3,1)+zup*(alwt(3,2)+zup*(alwt(3,3)))
256  zcbh3=blwt(3,1)+zup*(blwt(3,2)+zup*(blwt(3,3)))
257  zpsh3(jl)=exp( zcah3 * ztx + zcbh3 * ztx2 )
258  zcah4=alwt(4,1)+zup*(alwt(4,2)+zup*(alwt(4,3)))
259  zcbh4=blwt(4,1)+zup*(blwt(4,2)+zup*(blwt(4,3)))
260  zpsh4(jl)=exp( zcah4 * ztx + zcbh4 * ztx2 )
261  zcah5=alwt(5,1)+zup*(alwt(5,2)+zup*(alwt(5,3)))
262  zcbh5=blwt(5,1)+zup*(blwt(5,2)+zup*(blwt(5,3)))
263  zpsh5(jl)=exp( zcah5 * ztx + zcbh5 * ztx2 )
264  zcah6=alwt(6,1)+zup*(alwt(6,2)+zup*(alwt(6,3)))
265  zcbh6=blwt(6,1)+zup*(blwt(6,2)+zup*(blwt(6,3)))
266  zpsh6(jl)=exp( zcah6 * ztx + zcbh6 * ztx2 )
267  zphm6(jl)=exp(-5.81e-4_jprb * ztx - 1.13e-6_jprb * ztx2 )
268  zpsm6(jl)=exp(-5.57e-4_jprb * ztx - 3.30e-6_jprb * ztx2 )
269  zphn6(jl)=exp(-3.46e-5_jprb * ztx + 2.05e-7_jprb * ztx2 )
270  zpsn6(jl)=exp( 3.70e-3_jprb * ztx - 2.30e-6_jprb * ztx2 )
271  ENDDO
272 
273  DO jl = kidia,kfdia
274  ztavi(jl)=ptave(jl,ikl)
275  ztx=ztavi(jl)-tref
276  ztx2=ztx*ztx
277  zzably = zably(jl,3,iae1)+zably(jl,3,iae2)+zably(jl,3,iae3)
278  zalup = r10e * log( zzably )
279  zup = max( _zero_ , 5.0_jprb + _half_ * zalup )
280  zpsc2(jl) = (ztavi(jl)/tref) ** zup
281  zcac8=alwt(8,1)+zup*(alwt(8,2)+zup*(alwt(8,3)))
282  zcbc8=blwt(8,1)+zup*(blwt(8,2)+zup*(blwt(8,3)))
283  zpsc3(jl)=exp( zcac8 * ztx + zcbc8 * ztx2 )
284  zphio(jl) = exp( ro3t(1) * ztx + ro3t(2) * ztx2)
285  zpsio(jl) = exp( _two_* (ro3t(3)*ztx+ro3t(4)*ztx2))
286  ENDDO
287 
288  DO jkk=ij,ijpn
289  ic=3*klev+1-jkk
290  icp1=ic+1
291  DO jl = kidia,kfdia
292  zdiff = pview(jl)
293 !- H2O continuum
294  pabcu(jl,10,ic)=pabcu(jl,10,icp1)+ zably(jl,4,ic) *zdiff
295  pabcu(jl,11,ic)=pabcu(jl,11,icp1)+ zably(jl,5,ic)*ztcon(jl)*zdiff
296 !- O3
297  pabcu(jl,12,ic)=pabcu(jl,12,icp1)+ zably(jl,6,ic)*zphio(jl)*zdiff
298  pabcu(jl,13,ic)=pabcu(jl,13,icp1)+ zably(jl,7,ic)*zpsio(jl)*zdiff
299 !- CO2
300  pabcu(jl,7,ic)=pabcu(jl,7,icp1)+ zably(jl,3,ic)*zpsc2(jl)*zdiff
301  pabcu(jl,8,ic)=pabcu(jl,8,icp1)+ zably(jl,3,ic)*zpsc3(jl)*zdiff
302  pabcu(jl,9,ic)=pabcu(jl,9,icp1)+ zably(jl,3,ic)*zpsc3(jl)*zdiff
303 !- H2O
304  pabcu(jl,1,ic)=pabcu(jl,1,icp1)+ zably(jl,1,ic)*zpsh1(jl)
305  pabcu(jl,2,ic)=pabcu(jl,2,icp1)+ zably(jl,1,ic)*zpsh2(jl)
306  pabcu(jl,3,ic)=pabcu(jl,3,icp1)+ zably(jl,1,ic)*zpsh5(jl)*zdiff
307  pabcu(jl,4,ic)=pabcu(jl,4,icp1)+ zably(jl,1,ic)*zpsh3(jl)
308  pabcu(jl,5,ic)=pabcu(jl,5,icp1)+ zably(jl,1,ic)*zpsh4(jl)
309  pabcu(jl,6,ic)=pabcu(jl,6,icp1)+ zably(jl,1,ic)*zpsh6(jl)*zdiff
310 !- aerosols
311  pabcu(jl,14,ic)=pabcu(jl,14,icp1)+ zuaer(jl,1) *zduc(jl,ic)*zdiff
312  pabcu(jl,15,ic)=pabcu(jl,15,icp1)+ zuaer(jl,2) *zduc(jl,ic)*zdiff
313  pabcu(jl,16,ic)=pabcu(jl,16,icp1)+ zuaer(jl,3) *zduc(jl,ic)*zdiff
314  pabcu(jl,17,ic)=pabcu(jl,17,icp1)+ zuaer(jl,4) *zduc(jl,ic)*zdiff
315  pabcu(jl,18,ic)=pabcu(jl,18,icp1)+ zuaer(jl,5) *zduc(jl,ic)*zdiff
316 !- CH4
317  pabcu(jl,19,ic)=pabcu(jl,19,icp1)&
318  &+ zably(jl,2,ic)*rch4/pcco2*zphm6(jl)*zdiff
319  pabcu(jl,20,ic)=pabcu(jl,20,icp1)&
320  &+ zably(jl,3,ic)*rch4/pcco2*zpsm6(jl)*zdiff
321 !- N2O
322  pabcu(jl,21,ic)=pabcu(jl,21,icp1)&
323  &+ zably(jl,2,ic)*rn2o/pcco2*zphn6(jl)*zdiff
324  pabcu(jl,22,ic)=pabcu(jl,22,icp1)&
325  &+ zably(jl,3,ic)*rn2o/pcco2*zpsn6(jl)*zdiff
326 !- CFC11
327  pabcu(jl,23,ic)=pabcu(jl,23,icp1)&
328  &+ zably(jl,2,ic)*rcfc11/pcco2 *zdiff
329 !- CFC12
330  pabcu(jl,24,ic)=pabcu(jl,24,icp1)&
331  &+ zably(jl,2,ic)*rcfc12/pcco2 *zdiff
332  ENDDO
333  ENDDO
334 
335 ENDDO
336 ! print *,'END OF LWU'
337 
338 !-----------------------------------------------------------------------
339 
340 RETURN
341 END SUBROUTINE lwu
subroutine lwu(KIDIA, KFDIA, KLON, KLEV, PAER, PCCO2, PDP, PPMB, PQOF, PTAVE, PVIEW, PWV, PABCU)
Definition: lwu.F90:9
INTERFACE SUBROUTINE RRTM_ECRT_140GP pcco2
real(kind=jprb) tref
Definition: yoelw.F90:35
real(kind=jprb), dimension(8, 3) blwt
Definition: yoelw.F90:23
real(kind=jprb) rvgco2
Definition: yoelw.F90:40
Definition: yoesw.F90:1
Definition: yoelw.F90:1
integer(kind=jpim) nsil
Definition: yoelw.F90:14
real(kind=jprb), dimension(6, 6) raer
Definition: yoesw.F90:118
real(kind=jprb) rcfc12
Definition: yoerdi.F90:20
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
real(kind=jprb) rvgo3
Definition: yoelw.F90:42
real(kind=jprb) rcfc11
Definition: yoerdi.F90:19
integer(kind=jpim) nua
Definition: yoelw.F90:19
integer, save klev
Definition: dimphy.F90:7
real(kind=jprb) rg
Definition: yomcst.F90:29
Definition: yoerdi.F90:1
!$Id klon klev DO klon!IM klev DO klon klon nbp_lat DO nbp_lon ij
integer, save kfdia
Definition: dimphy.F90:5
real(kind=jprb) rch4
Definition: yoerdi.F90:16
integer(kind=jpim) ng1
Definition: yoelw.F90:20
real(kind=jprb) rn2o
Definition: yoerdi.F90:17
real(kind=jprb), dimension(4) ro3t
Definition: yoelw.F90:31
real(kind=jprb) r10e
Definition: yoerdu.F90:18
real(kind=jprb) repscq
Definition: yoerdu.F90:22
real(kind=jprb), dimension(8, 3) alwt
Definition: yoelw.F90:22
integer(kind=jpim) ng1p1
Definition: yoelw.F90:21
real(kind=jprb) rvgh2o
Definition: yoelw.F90:41
real(kind=jprb), dimension(2) rt1
Definition: yoelw.F90:33
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
Definition: yomcst.F90:1
Definition: yoerdu.F90:1
real(kind=jprb) repsco
Definition: yoerdu.F90:21