LMDZ
lwvn.F90
Go to the documentation of this file.
1 SUBROUTINE lwvn &
2  &( kidia, kfdia, klon , klev , kuaer &
3  &, pabcu, pdbsl, pga , pgb &
4  &, padjd, padju, pcntrb, pdbdt, pdwfsu &
5  &)
6 
7 !**** *LWVN* - L.W., VERTICAL INTEGRATION, NEARBY LAYERS
8 
9 ! PURPOSE.
10 ! --------
11 ! CARRIES OUT THE VERTICAL INTEGRATION ON NEARBY LAYERS
12 ! TO GIVE LONGWAVE FLUXES OR RADIANCES
13 
14 !** INTERFACE.
15 ! ----------
16 
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! ==== INPUTS ===
20 ! PABCU : (KLON,NUA,3*KLEV+1) ; ABSORBER AMOUNTS
21 ! PDBSL : (KLON,KLEV*2) ; SUB-LAYER PLANCK FUNCTION GRADIENT
22 ! PGA, PGB ; PADE APPROXIMANTS
23 ! ==== OUTPUTS ===
24 ! PADJ.. : (KLON,KLEV+1) ; CONTRIBUTION OF ADJACENT LAYERS
25 ! PCNTRB : (KLON,KLEV+1,KLEV+1); CLEAR-SKY ENERGY EXCHANGE MATRIX
26 ! PDBDT : (KLON,NUA,KLEV) ; LAYER PLANCK FUNCTION GRADIENT
27 ! PDWFSU : (KLON,NSIL) ; SPECTRAL DOWNWARD FLUX AT SURFACE
28 
29 ! IMPLICIT ARGUMENTS : NONE
30 ! --------------------
31 
32 ! METHOD.
33 ! -------
34 
35 ! 1. PERFORMS THE VERTICAL INTEGRATION CORRESPONDING TO THE
36 ! CONTRIBUTIONS OF THE ADJACENT LAYERS USING A GAUSSIAN QUADRATURE
37 
38 ! EXTERNALS.
39 ! ----------
40 
41 ! *LWTT*
42 
43 ! REFERENCE.
44 ! ----------
45 
46 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
47 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
48 
49 ! AUTHOR.
50 ! -------
51 ! JEAN-JACQUES MORCRETTE *ECMWF*
52 
53 ! MODIFICATIONS.
54 ! --------------
55 ! ORIGINAL : 89-07-14
56 ! JJ Morcrette 97-04-18 Revised Continuum + Surf.Emissiv.
57 !-----------------------------------------------------------------------
58 
59 #include "tsmbkind.h"
60 
61 USE yoelw , ONLY : nsil ,nipd ,ntra ,nua ,&
62  &ng1 ,ng1p1 ,wg1
63 
64 
65 IMPLICIT NONE
66 
67 
68 ! DUMMY INTEGER SCALARS
69 integer_m :: kfdia
70 integer_m :: kidia
71 integer_m :: klev
72 integer_m :: klon
73 integer_m :: kuaer
74 
75 
76 
77 !-----------------------------------------------------------------------
78 
79 !* 0.1 ARGUMENTS
80 ! ---------
81 
82 
83 real_b :: pabcu(klon,nua,3*klev+1)&
84  &, pdbsl(klon,nsil,klev*2)&
85  &, pga(klon,nipd,2,klev) , pgb(klon,nipd,2,klev)
86 
87 real_b :: padjd(klon,klev+1) , padju(klon,klev+1)&
88  &, pcntrb(klon,klev+1,klev+1)&
89  &, pdbdt(klon,nsil,klev) , pdwfsu(klon,nsil)
90 
91 !-----------------------------------------------------------------------
92 
93 !* 0.2 LOCAL ARRAYS
94 ! ------------
95 
96 real_b :: ztt(klon,ntra), ztt1(klon,ntra), ztt2(klon,ntra), zuu(klon,nua)
97 
98 ! LOCAL INTEGER SCALARS
99 integer_m :: ibs, idd, im12, imu, ind, inu, ixd, ixu,&
100  &ja, jg, jk, jk1, jk2, jl, jnu
101 
102 ! LOCAL REAL SCALARS
103 real_b :: zwtr, zwtr1, zwtr2, zwtr3, zwtr4, zwtr5, zwtr6
104 
105 
106 !-----------------------------------------------------------------------
107 
108 !* 1. INITIALIZATION
109 ! --------------
110 
111 !* 1.1 INITIALIZE LAYER CONTRIBUTIONS
112 ! ------------------------------
113 
114 DO jk = 1 , klev+1
115  DO jl = kidia,kfdia
116  padjd(jl,jk) = _zero_
117  padju(jl,jk) = _zero_
118  ENDDO
119 ENDDO
120 
121 !* 1.2 INITIALIZE TRANSMISSION FUNCTIONS
122 ! ---------------------------------
123 
124 DO ja = 1 , ntra
125  DO jl = kidia,kfdia
126  ztt(jl,ja) = _one_
127  ztt1(jl,ja) = _one_
128  ztt2(jl,ja) = _one_
129  ENDDO
130 ENDDO
131 
132 DO ja = 1 , nua
133  DO jl = kidia,kfdia
134  zuu(jl,ja) = _zero_
135  ENDDO
136 ENDDO
137 
138 ! ------------------------------------------------------------------
139 
140 !* 2. VERTICAL INTEGRATION
141 ! --------------------
142 
143 
144 !* 2.1 CONTRIBUTION FROM ADJACENT LAYERS
145 ! ---------------------------------
146 
147 DO jk = 1 , klev
148 
149 !* 2.1.1 DOWNWARD LAYERS
150 ! ---------------
151 
152  im12 = 2 * (jk - 1)
153  ind = (jk - 1) * ng1p1 + 1
154  ixd = ind
155  inu = jk * ng1p1 + 1
156  ixu = ind
157 
158  DO jg = 1 , ng1
159  ibs = im12 + jg
160  idd = ixd + jg
161 
162  DO ja = 1 , kuaer
163  DO jl = kidia,kfdia
164  zuu(jl,ja) = pabcu(jl,ja,ind) - pabcu(jl,ja,idd)
165  ENDDO
166  ENDDO
167 
168 
169  CALL lwtt &
170  &( kidia , kfdia , klon &
171  &, pga(1,1,1,jk), pgb(1,1,1,jk)&
172  &, zuu , ztt &
173  &)
174 
175  DO jl = kidia,kfdia
176  zwtr1=pdbsl(jl,1,ibs)*ztt(jl,1) *ztt(jl,10)
177  zwtr2=pdbsl(jl,2,ibs)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)
178  zwtr3=pdbsl(jl,3,ibs)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)
179  zwtr4=pdbsl(jl,4,ibs)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)
180  zwtr5=pdbsl(jl,5,ibs)*ztt(jl,3) *ztt(jl,14)
181  zwtr6=pdbsl(jl,6,ibs)*ztt(jl,6) *ztt(jl,15)
182  zwtr=zwtr1+zwtr2+zwtr3+zwtr4+zwtr5+zwtr6
183  padjd(jl,jk) = padjd(jl,jk) + zwtr * wg1(jg)
184  IF (jk == 1) THEN
185  pdwfsu(jl,1)=pdwfsu(jl,1)+wg1(jg)*zwtr1
186  pdwfsu(jl,2)=pdwfsu(jl,2)+wg1(jg)*zwtr2
187  pdwfsu(jl,3)=pdwfsu(jl,3)+wg1(jg)*zwtr3
188  pdwfsu(jl,4)=pdwfsu(jl,4)+wg1(jg)*zwtr4
189  pdwfsu(jl,5)=pdwfsu(jl,5)+wg1(jg)*zwtr5
190  pdwfsu(jl,6)=pdwfsu(jl,6)+wg1(jg)*zwtr6
191  ENDIF
192  ENDDO
193 
194 !* 2.1.2 UPWARD LAYERS
195 ! -------------
196 
197  imu = ixu + jg
198  DO ja = 1 , kuaer
199  DO jl = kidia,kfdia
200  zuu(jl,ja) = pabcu(jl,ja,imu) - pabcu(jl,ja,inu)
201  ENDDO
202  ENDDO
203 
204 
205  CALL lwtt &
206  &( kidia , kfdia , klon &
207  &, pga(1,1,1,jk), pgb(1,1,1,jk)&
208  &, zuu , ztt &
209  &)
210 
211  DO jl = kidia,kfdia
212  zwtr=pdbsl(jl,1,ibs)*ztt(jl,1) *ztt(jl,10)&
213  &+pdbsl(jl,2,ibs)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)&
214  &+pdbsl(jl,3,ibs)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)&
215  &+pdbsl(jl,4,ibs)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)&
216  &+pdbsl(jl,5,ibs)*ztt(jl,3) *ztt(jl,14)&
217  &+pdbsl(jl,6,ibs)*ztt(jl,6) *ztt(jl,15)
218  padju(jl,jk+1) = padju(jl,jk+1) + zwtr * wg1(jg)
219  ENDDO
220 
221  ENDDO
222 
223  DO jl = kidia,kfdia
224  pcntrb(jl,jk,jk+1) = padjd(jl,jk)
225  pcntrb(jl,jk+1,jk) = padju(jl,jk+1)
226  pcntrb(jl,jk ,jk) = _zero_
227  ENDDO
228 
229 ENDDO
230 
231 DO jk = 1 , klev
232  jk2 = 2 * jk
233  jk1 = jk2 - 1
234 
235  DO jnu = 1 , nsil
236  DO jl = kidia,kfdia
237  pdbdt(jl,jnu,jk) = pdbsl(jl,jnu,jk1) + pdbsl(jl,jnu,jk2)
238  ENDDO
239  ENDDO
240 ENDDO
241 
242 !-----------------------------------------------------------------------
243 
244 RETURN
245 END SUBROUTINE lwvn
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
integer, save kfdia
Definition: dimphy.F90:5
subroutine lwvn(KIDIA, KFDIA, KLON, KLEV, KUAER, PABCU, PDBSL, PGA, PGB, PADJD, PADJU, PCNTRB, PDBDT, PDWFSU)
Definition: lwvn.F90:6
real(kind=jprb), dimension(2) wg1
Definition: yoelw.F90:38
integer(kind=jpim) ng1
Definition: yoelw.F90:20
subroutine lwtt(KIDIA, KFDIA, KLON, PGA, PGB, PUU, PTT)
Definition: lwtt.F90:3
integer(kind=jpim) ng1p1
Definition: yoelw.F90:21
integer(kind=jpim) ntra
Definition: yoelw.F90:18