LMDZ
olwvd.F90
Go to the documentation of this file.
1 SUBROUTINE olwvd ( KIDIA,KFDIA,KLON,KLEV, KTRAER &
2  & , pabcu,pdbdt &
3  & , pga,pgb &
4  & , pcntrb,pdisd,pdisu )
5 !
6 !**** *LWVD* - L.W., VERTICAL INTEGRATION, DISTANT LAYERS
7 !
8 ! PURPOSE.
9 ! --------
10 ! CARRIES OUT THE VERTICAL INTEGRATION ON THE DISTANT LAYERS
11 !
12 !** INTERFACE.
13 ! ----------
14 !
15 ! EXPLICIT ARGUMENTS :
16 ! --------------------
17 ! ==== INPUTS ===
18 ! PABCU : (KLON,NUA,3*KLEV+1); ABSORBER AMOUNTS
19 ! PDBDT : (KLON,KLEV) ; LAYER PLANCK FUNCTION GRADIENT
20 ! PGA, PGB ; PADE APPROXIMANTS
21 ! ==== OUTPUTS ===
22 ! PDIS.. : (KLON,KLEV+1) ; CONTRIBUTION BY DISTANT LAYERS
23 ! PCNTRB : (KLON,KLEV+1,KLEV+1); ENERGY EXCHANGE MATRIX
24 !
25 ! IMPLICIT ARGUMENTS : NONE
26 ! --------------------
27 !
28 ! METHOD.
29 ! -------
30 !
31 ! 1. PERFORMS THE VERTICAL INTEGRATION CORRESPONDING TO THE
32 ! CONTRIBUTIONS OF THE DISTANT LAYERS USING TRAPEZOIDAL RULE
33 !
34 ! EXTERNALS.
35 ! ----------
36 !
37 ! *LWTT*
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 !
53 !-----------------------------------------------------------------------
54 
55 #include "tsmbkind.h"
56 
57 USE yoeolw , ONLY : nisp ,nipd ,ntra ,nua ,ng1p1
58 
59 
60 IMPLICIT NONE
61 
62 
63 ! DUMMY INTEGER SCALARS
64 integer_m :: kfdia
65 integer_m :: kidia
66 integer_m :: klev
67 integer_m :: klon
68 integer_m :: ktraer
69 
70 !-----------------------------------------------------------------------
71 !
72 !* 0.1 ARGUMENTS
73 ! ---------
74 !
75 !
76 real_b :: pabcu(klon,nua,3*klev+1) &
77  & , pdbdt(klon,nisp,klev) &
78  & , pga(klon,8,2,klev) , pgb(klon,8,2,klev)
79 !
80 real_b :: pcntrb(klon,klev+1,klev+1) &
81  & , pdisd(klon,klev+1), pdisu(klon,klev+1)
82 !
83 !-----------------------------------------------------------------------
84 !
85 !* 0.2 LOCAL ARRAYS
86 ! ------------
87 !
88 integer_m :: itx(klon)
89 !
90 real_b :: zglayd(klon),zglayu(klon) &
91  & , ztt(klon,ntra), ztt1(klon,ntra), ztt2(klon,ntra)
92 !
93 
94 ! LOCAL INTEGER SCALARS
95 integer_m :: ijkl, ikd1, ikd2, ikj, ikjp1, ikm1, ikn,&
96  &ikp1, iku1, iku2, itt, ja, jk, jkj, jl, jlk, &
97  &ind1, ind2, ind3, ind4
98 
99 ! LOCAL REAL SCALARS
100 real_b :: zww, zww1, zww2, zww3, zww4, zww5, zww6, zdzxdg, zdzxmg
101 
102 !-----------------------------------------------------------------------
103 !
104 !* 1. INITIALIZATION
105 ! --------------
106 !
107 !* 1.1 INITIALIZE LAYER CONTRIBUTIONS
108 ! ------------------------------
109 !
110 DO jk = 1, klev+1
111  DO jl = kidia,kfdia
112  pdisd(jl,jk) = 0.
113  pdisu(jl,jk) = 0.
114  END DO
115 END DO
116 !
117 !* 1.2 INITIALIZE TRANSMISSION FUNCTIONS
118 ! ---------------------------------
119 !
120 DO ja = 1, ntra
121  DO jl = kidia,kfdia
122  ztt(jl,ja) = 1.0
123  ztt1(jl,ja) = 1.0
124  ztt2(jl,ja) = 1.0
125  END DO
126 END DO
127 !
128 ! ------------------------------------------------------------------
129 !
130 !* 2. VERTICAL INTEGRATION
131 ! --------------------
132 !
133 ind1=0
134 ind3=0
135 ind4=1
136 ind2=1
137 !
138 !
139 !* 2.2 CONTRIBUTION FROM DISTANT LAYERS
140 ! ---------------------------------
141 !
142 !
143 !* 2.2.1 DISTANT AND ABOVE LAYERS
144 ! ------------------------
145 !
146 !
147 !* 2.2.2 FIRST UPPER LEVEL
148 ! -----------------
149 !
150 DO jk = 1 , klev-1
151  ikp1=jk+1
152  ikn=(jk-1)*ng1p1+1
153  ikd1= jk *ng1p1+1
154 !
155  CALL lwttm( kidia,kfdia,klon &
156  & , pga(1,1,1,jk), pgb(1,1,1,jk) &
157  & , pabcu(1,1,ikn),pabcu(1,1,ikd1),ztt1 )
158 !
159 !
160 !
161 !* 2.2.3 HIGHER UP
162 ! ---------
163 !
164  itt=1
165  DO jkj=ikp1,klev
166  IF(itt.EQ.1) THEN
167  itt=2
168  ELSE
169  itt=1
170  ENDIF
171  ikjp1=jkj+1
172  ikd2= jkj *ng1p1+1
173 !
174  IF(itt.EQ.1) THEN
175  CALL lwttm( kidia,kfdia,klon &
176  & , pga(1,1,1,jkj),pgb(1,1,1,jkj) &
177  & , pabcu(1,1,ikn),pabcu(1,1,ikd2),ztt1 )
178  ELSE
179  CALL lwttm( kidia,kfdia,klon &
180  & , pga(1,1,1,jkj),pgb(1,1,1,jkj) &
181  & , pabcu(1,1,ikn),pabcu(1,1,ikd2),ztt2 )
182  ENDIF
183 !
184  DO ja = 1, ktraer
185  DO jl = kidia,kfdia
186  ztt(jl,ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5
187  END DO
188  END DO
189 !
190  DO jl = kidia,kfdia
191  zww=pdbdt(jl,1,jkj)*ztt(jl,1) *ztt(jl,10) &
192  & +pdbdt(jl,2,jkj)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11) &
193  & +pdbdt(jl,3,jkj)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12) &
194  & +pdbdt(jl,4,jkj)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13) &
195  & +pdbdt(jl,5,jkj)*ztt(jl,3) *ztt(jl,14) &
196  & +pdbdt(jl,6,jkj)*ztt(jl,6) *ztt(jl,15)
197  zglayd(jl)=zww
198  zdzxdg=zglayd(jl)
199  pdisd(jl,jk)=pdisd(jl,jk)+zdzxdg
200  pcntrb(jl,jk,ikjp1)=zdzxdg
201  END DO
202 !
203 !
204  END DO
205 END DO
206 !
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 !
221  CALL lwttm( 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 !
227 !* 2.2.6 DOWN BELOW
228 ! ----------
229 !
230  itt=1
231  DO jlk=1,ikj
232  IF(itt.EQ.1) THEN
233  itt=2
234  ELSE
235  itt=1
236  ENDIF
237  ijkl=ikm1-jlk
238  iku2=(ijkl-1)*ng1p1+1
239 !
240 !
241  IF(itt.EQ.1) THEN
242  CALL lwttm( kidia,kfdia,klon &
243  & , pga(1,1,1,ijkl),pgb(1,1,1,ijkl) &
244  & , pabcu(1,1,iku2),pabcu(1,1,ikn),ztt1)
245  ELSE
246  CALL lwttm( kidia,kfdia,klon &
247  & , pga(1,1,1,ijkl),pgb(1,1,1,ijkl) &
248  & , pabcu(1,1,iku2),pabcu(1,1,ikn),ztt2)
249  ENDIF
250 !
251  DO ja = 1, ktraer
252  DO jl = kidia,kfdia
253  ztt(jl,ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5
254  END DO
255  END DO
256 !
257  DO jl = kidia,kfdia
258  zww=pdbdt(jl,1,ijkl)*ztt(jl,1) *ztt(jl,10) &
259  & +pdbdt(jl,2,ijkl)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11) &
260  & +pdbdt(jl,3,ijkl)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12) &
261  & +pdbdt(jl,4,ijkl)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13) &
262  & +pdbdt(jl,5,ijkl)*ztt(jl,3) *ztt(jl,14) &
263  & +pdbdt(jl,6,ijkl)*ztt(jl,6) *ztt(jl,15)
264  zglayu(jl)=zww
265  zdzxmg=zglayu(jl)
266  pdisu(jl,jk)=pdisu(jl,jk)+zdzxmg
267  pcntrb(jl,jk,ijkl)=zdzxmg
268  END DO
269 !
270 !
271  END DO
272 END DO
273 !
274 RETURN
275 END SUBROUTINE olwvd
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 olwvd(KIDIA, KFDIA, KLON, KLEV, KTRAER, PABCU, PDBDT, PGA, PGB, PCNTRB, PDISD, PDISU)
Definition: olwvd.F90:5
subroutine lwttm(KIDIA, KFDIA, KLON, PGA, PGB, PUU1, PUU2, PTT)
Definition: lwttm.F90:3
Definition: yoeolw.F90:1