LMDZ
lwvd.F90
Go to the documentation of this file.
1 SUBROUTINE lwvd &
2  & ( kidia, kfdia, klon , klev , ktraer,&
3  & pabcu, pdbdt,&
4  & pga , pgb,&
5  & pcntrb, pdisd, pdisu, pdwfsu &
6  & )
7 
8 !**** *LWVD* - L.W., VERTICAL INTEGRATION, DISTANT LAYERS
9 
10 ! PURPOSE.
11 ! --------
12 ! CARRIES OUT THE VERTICAL INTEGRATION ON THE DISTANT LAYERS
13 
14 !** INTERFACE.
15 ! ----------
16 
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! ==== INPUTS ===
20 ! PABCU : (KLON,NUA,3*KLEV+1) ; ABSORBER AMOUNTS
21 ! PDBDT : (KLON,KLEV) ; LAYER PLANCK FUNCTION GRADIENT
22 ! PGA, PGB ; PADE APPROXIMANTS
23 ! ==== OUTPUTS ===
24 ! PCNTRB : (KLON,KLEV+1,KLEV+1); ENERGY EXCHANGE MATRIX
25 ! PDIS.. : (KLON,KLEV+1) ; CONTRIBUTION BY DISTANT LAYERS
26 ! PDWFSU : (KLON,NSIL) ; SPECTRAL DOWNWARD FLUX AT SURFACE
27 
28 ! IMPLICIT ARGUMENTS : NONE
29 ! --------------------
30 
31 ! METHOD.
32 ! -------
33 
34 ! 1. PERFORMS THE VERTICAL INTEGRATION CORRESPONDING TO THE
35 ! CONTRIBUTIONS OF THE DISTANT LAYERS USING TRAPEZOIDAL RULE
36 
37 ! EXTERNALS.
38 ! ----------
39 
40 ! *LWTT*
41 
42 ! REFERENCE.
43 ! ----------
44 
45 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
46 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
47 
48 ! AUTHOR.
49 ! -------
50 ! JEAN-JACQUES MORCRETTE *ECMWF*
51 
52 ! MODIFICATIONS.
53 ! --------------
54 ! ORIGINAL : 89-07-14
55 ! JJ Morcrette 97-04-18 Revised continuum + Surf. Emissiv.
56 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
57 !-----------------------------------------------------------------------
58 
59 USE parkind1 ,ONLY : jpim ,jprb
60 USE yomhook ,ONLY : lhook, dr_hook
61 
62 USE yoelw , ONLY : nsil ,nipd ,ntra ,nua ,ng1p1
63 
64 IMPLICIT NONE
65 
66 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
67 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
68 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
69 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
70 INTEGER(KIND=JPIM),INTENT(IN) :: KTRAER
71 REAL(KIND=JPRB) ,INTENT(IN) :: PABCU(klon,nua,3*klev+1)
72 REAL(KIND=JPRB) ,INTENT(IN) :: PDBDT(klon,nsil,klev)
73 REAL(KIND=JPRB) ,INTENT(IN) :: PGA(klon,nipd,2,klev)
74 REAL(KIND=JPRB) ,INTENT(IN) :: PGB(klon,nipd,2,klev)
75 REAL(KIND=JPRB) ,INTENT(OUT) :: PCNTRB(klon,klev+1,klev+1)
76 REAL(KIND=JPRB) ,INTENT(OUT) :: PDISD(klon,klev+1)
77 REAL(KIND=JPRB) ,INTENT(OUT) :: PDISU(klon,klev+1)
78 REAL(KIND=JPRB) ,INTENT(INOUT) :: PDWFSU(klon,nsil)
79 !-----------------------------------------------------------------------
80 
81 !* 0.1 ARGUMENTS
82 ! ---------
83 
84 !-----------------------------------------------------------------------
85 
86 ! ------------
87 
88 REAL(KIND=JPRB) :: ZTT(klon,ntra), ZTT1(klon,ntra), ZTT2(klon,ntra)
89 
90 INTEGER(KIND=JPIM) :: IJKL, IKD1, IKD2, IKJ, IKJP1, IKM1, IKN,&
91  & IKP1, IKU1, IKU2, ITT, JA, JK, JKJ, JL, JLK
92 
93 REAL(KIND=JPRB) :: ZWW, ZWW1, ZWW2, ZWW3, ZWW4, ZWW5, ZWW6
94 REAL(KIND=JPRB) :: ZHOOK_HANDLE
95 
96 #include "lwttm.intfb.h"
97 
98 !-----------------------------------------------------------------------
99 
100 !* 1. INITIALIZATION
101 ! --------------
102 
103 !* 1.1 INITIALIZE LAYER CONTRIBUTIONS
104 ! ------------------------------
105 
106 IF (lhook) CALL dr_hook('LWVD',0,zhook_handle)
107 DO jk = 1, klev+1
108  DO jl = kidia,kfdia
109  pdisd(jl,jk) = 0.0_jprb
110  pdisu(jl,jk) = 0.0_jprb
111  ENDDO
112 ENDDO
113 
114 !* 1.2 INITIALIZE TRANSMISSION FUNCTIONS
115 ! ---------------------------------
116 
117 DO ja = 1, ntra
118  DO jl = kidia,kfdia
119  ztt(jl,ja) = 1.0_jprb
120  ztt1(jl,ja) = 1.0_jprb
121  ztt2(jl,ja) = 1.0_jprb
122  ENDDO
123 ENDDO
124 
125 ! ------------------------------------------------------------------
126 
127 !* 2. VERTICAL INTEGRATION
128 ! --------------------
129 
130 !* 2.2 CONTRIBUTION FROM DISTANT LAYERS
131 ! ---------------------------------
132 
133 !* 2.2.1 DISTANT AND ABOVE LAYERS
134 ! ------------------------
135 
136 !* 2.2.2 FIRST UPPER LEVEL
137 ! -----------------
138 
139 DO jk = 1 , klev-1
140  ikp1=jk+1
141  ikn=(jk-1)*ng1p1+1
142  ikd1= jk *ng1p1+1
143 
144  CALL lwttm &
145  & ( kidia , kfdia , klon,&
146  & pga(1,1,1,jk) , pgb(1,1,1,jk),&
147  & pabcu(1,1,ikn), pabcu(1,1,ikd1), ztt1 &
148  & )
149 
150 !* 2.2.3 HIGHER UP
151 ! ---------
152 
153  itt=1
154  DO jkj=ikp1,klev
155  IF(itt == 1) THEN
156  itt=2
157  ELSE
158  itt=1
159  ENDIF
160  ikjp1=jkj+1
161  ikd2= jkj *ng1p1+1
162 
163  IF(itt == 1) THEN
164  CALL lwttm &
165  & ( kidia , kfdia , klon,&
166  & pga(1,1,1,jkj), pgb(1,1,1,jkj),&
167  & pabcu(1,1,ikn), pabcu(1,1,ikd2), ztt1 &
168  & )
169 
170  ELSE
171  CALL lwttm &
172  & ( kidia , kfdia , klon,&
173  & pga(1,1,1,jkj), pgb(1,1,1,jkj),&
174  & pabcu(1,1,ikn), pabcu(1,1,ikd2), ztt2 &
175  & )
176 
177  ENDIF
178 
179  DO ja = 1, ktraer
180  DO jl = kidia,kfdia
181  ztt(jl,ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5_jprb
182  ENDDO
183  ENDDO
184 
185  DO jl = kidia,kfdia
186  zww1=pdbdt(jl,1,jkj)*ztt(jl,1) *ztt(jl,10)
187  zww2=pdbdt(jl,2,jkj)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)
188  zww3=pdbdt(jl,3,jkj)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)
189  zww4=pdbdt(jl,4,jkj)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)
190  zww5=pdbdt(jl,5,jkj)*ztt(jl,3) *ztt(jl,14)
191  zww6=pdbdt(jl,6,jkj)*ztt(jl,6) *ztt(jl,15)
192  zww=zww1+zww2+zww3+zww4+zww5+zww6
193  pdisd(jl,jk)=pdisd(jl,jk)+zww
194  pcntrb(jl,jk,ikjp1)=zww
195  IF (jk == 1) THEN
196  pdwfsu(jl,1)=pdwfsu(jl,1)+zww1
197  pdwfsu(jl,2)=pdwfsu(jl,2)+zww2
198  pdwfsu(jl,3)=pdwfsu(jl,3)+zww3
199  pdwfsu(jl,4)=pdwfsu(jl,4)+zww4
200  pdwfsu(jl,5)=pdwfsu(jl,5)+zww5
201  pdwfsu(jl,6)=pdwfsu(jl,6)+zww6
202  ENDIF
203  ENDDO
204 
205  ENDDO
206 ENDDO
207 
208 !* 2.2.4 DISTANT AND BELOW LAYERS
209 ! ------------------------
210 
211 !* 2.2.5 FIRST LOWER LEVEL
212 ! -----------------
213 
214 DO jk=3,klev+1
215  ikn=(jk-1)*ng1p1+1
216  ikm1=jk-1
217  ikj=jk-2
218  iku1= ikj *ng1p1+1
219 
220  CALL lwttm &
221  & ( kidia , kfdia , klon,&
222  & pga(1,1,1,ikj) , pgb(1,1,1,ikj),&
223  & pabcu(1,1,iku1), pabcu(1,1,ikn), ztt1 &
224  & )
225 
226 !* 2.2.6 DOWN BELOW
227 ! ----------
228 
229  itt=1
230  DO jlk=1,ikj
231  IF(itt == 1) THEN
232  itt=2
233  ELSE
234  itt=1
235  ENDIF
236  ijkl=ikm1-jlk
237  iku2=(ijkl-1)*ng1p1+1
238 
239  IF(itt == 1) THEN
240  CALL lwttm &
241  & ( kidia , kfdia , klon,&
242  & pga(1,1,1,ijkl), pgb(1,1,1,ijkl),&
243  & pabcu(1,1,iku2), pabcu(1,1,ikn) , ztt1 &
244  & )
245 
246  ELSE
247  CALL lwttm &
248  & ( kidia , kfdia , klon,&
249  & pga(1,1,1,ijkl), pgb(1,1,1,ijkl),&
250  & pabcu(1,1,iku2), pabcu(1,1,ikn) , ztt2 &
251  & )
252 
253  ENDIF
254 
255  DO ja = 1, ktraer
256  DO jl = kidia,kfdia
257  ztt(jl,ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5_jprb
258  ENDDO
259  ENDDO
260 
261  DO jl = kidia,kfdia
262  zww=pdbdt(jl,1,ijkl)*ztt(jl,1) *ztt(jl,10)&
263  & +pdbdt(jl,2,ijkl)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)&
264  & +pdbdt(jl,3,ijkl)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)&
265  & +pdbdt(jl,4,ijkl)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)&
266  & +pdbdt(jl,5,ijkl)*ztt(jl,3) *ztt(jl,14)&
267  & +pdbdt(jl,6,ijkl)*ztt(jl,6) *ztt(jl,15)
268  pdisu(jl,jk)=pdisu(jl,jk)+zww
269  pcntrb(jl,jk,ijkl)=zww
270  ENDDO
271 
272  ENDDO
273 ENDDO
274 
275 ! ------------------------------------------------------------------
276 
277 IF (lhook) CALL dr_hook('LWVD',1,zhook_handle)
278 END SUBROUTINE lwvd
integer(kind=jpim) nipd
Definition: yoelw.F90:15
Definition: yoelw.F90:1
integer(kind=jpim) nsil
Definition: yoelw.F90:14
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer(kind=jpim) nua
Definition: yoelw.F90:19
integer, save klev
Definition: dimphy.F90:7
subroutine lwvd(KIDIA, KFDIA, KLON, KLEV, KTRAER, PABCU, PDBDT, PGA, PGB, PCNTRB, PDISD, PDISU, PDWFSU)
Definition: lwvd.F90:7
integer, save kfdia
Definition: dimphy.F90:5
integer, parameter jprb
Definition: parkind1.F90:31
logical lhook
Definition: yomhook.F90:12
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer(kind=jpim) ng1p1
Definition: yoelw.F90:21
subroutine lwttm(KIDIA, KFDIA, KLON, PGA, PGB, PUU1, PUU2, PTT)
Definition: lwttm.F90:3
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) ntra
Definition: yoelw.F90:18