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 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
58 !-----------------------------------------------------------------------
59 
60 USE parkind1 ,ONLY : jpim ,jprb
61 USE yomhook ,ONLY : lhook, dr_hook
62 
63 USE yoelw , ONLY : nsil ,nipd ,ntra ,nua ,&
64  & ng1 ,ng1p1 ,wg1
65 
66 IMPLICIT NONE
67 
68 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
69 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
70 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
71 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
72 INTEGER(KIND=JPIM),INTENT(IN) :: KUAER
73 REAL(KIND=JPRB) ,INTENT(IN) :: PABCU(klon,nua,3*klev+1)
74 REAL(KIND=JPRB) ,INTENT(IN) :: PDBSL(klon,nsil,klev*2)
75 REAL(KIND=JPRB) ,INTENT(IN) :: PGA(klon,nipd,2,klev)
76 REAL(KIND=JPRB) ,INTENT(IN) :: PGB(klon,nipd,2,klev)
77 REAL(KIND=JPRB) ,INTENT(OUT) :: PADJD(klon,klev+1)
78 REAL(KIND=JPRB) ,INTENT(OUT) :: PADJU(klon,klev+1)
79 REAL(KIND=JPRB) ,INTENT(OUT) :: PCNTRB(klon,klev+1,klev+1)
80 REAL(KIND=JPRB) ,INTENT(OUT) :: PDBDT(klon,nsil,klev)
81 REAL(KIND=JPRB) ,INTENT(INOUT) :: PDWFSU(klon,nsil)
82 !-----------------------------------------------------------------------
83 
84 !* 0.1 ARGUMENTS
85 ! ---------
86 
87 !-----------------------------------------------------------------------
88 
89 ! ------------
90 
91 REAL(KIND=JPRB) :: ZTT(klon,ntra), ZTT1(klon,ntra), ZTT2(klon,ntra), ZUU(klon,nua)
92 
93 INTEGER(KIND=JPIM) :: IBS, IDD, IM12, IMU, IND, INU, IXD, IXU,&
94  & JA, JG, JK, JK1, JK2, JL, JNU
95 
96 REAL(KIND=JPRB) :: ZWTR, ZWTR1, ZWTR2, ZWTR3, ZWTR4, ZWTR5, ZWTR6
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
98 
99 #include "lwtt.intfb.h"
100 
101 !-----------------------------------------------------------------------
102 
103 !* 1. INITIALIZATION
104 ! --------------
105 
106 !* 1.1 INITIALIZE LAYER CONTRIBUTIONS
107 ! ------------------------------
108 
109 IF (lhook) CALL dr_hook('LWVN',0,zhook_handle)
110 DO jk = 1 , klev+1
111  DO jl = kidia,kfdia
112  padjd(jl,jk) = 0.0_jprb
113  padju(jl,jk) = 0.0_jprb
114  ENDDO
115 ENDDO
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_jprb
123  ztt1(jl,ja) = 1.0_jprb
124  ztt2(jl,ja) = 1.0_jprb
125  ENDDO
126 ENDDO
127 
128 DO ja = 1 , nua
129  DO jl = kidia,kfdia
130  zuu(jl,ja) = 0.0_jprb
131  ENDDO
132 ENDDO
133 
134 ! ------------------------------------------------------------------
135 
136 !* 2. VERTICAL INTEGRATION
137 ! --------------------
138 
139 !* 2.1 CONTRIBUTION FROM ADJACENT LAYERS
140 ! ---------------------------------
141 
142 DO jk = 1 , klev
143 
144 !* 2.1.1 DOWNWARD LAYERS
145 ! ---------------
146 
147  im12 = 2 * (jk - 1)
148  ind = (jk - 1) * ng1p1 + 1
149  ixd = ind
150  inu = jk * ng1p1 + 1
151  ixu = ind
152 
153  DO jg = 1 , ng1
154  ibs = im12 + jg
155  idd = ixd + jg
156 
157  DO ja = 1 , kuaer
158  DO jl = kidia,kfdia
159  zuu(jl,ja) = pabcu(jl,ja,ind) - pabcu(jl,ja,idd)
160  ENDDO
161  ENDDO
162 
163  CALL lwtt &
164  & ( kidia , kfdia , klon,&
165  & pga(1,1,1,jk), pgb(1,1,1,jk),&
166  & zuu , ztt &
167  & )
168 
169  DO jl = kidia,kfdia
170  zwtr1=pdbsl(jl,1,ibs)*ztt(jl,1) *ztt(jl,10)
171  zwtr2=pdbsl(jl,2,ibs)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)
172  zwtr3=pdbsl(jl,3,ibs)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)
173  zwtr4=pdbsl(jl,4,ibs)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)
174  zwtr5=pdbsl(jl,5,ibs)*ztt(jl,3) *ztt(jl,14)
175  zwtr6=pdbsl(jl,6,ibs)*ztt(jl,6) *ztt(jl,15)
176  zwtr=zwtr1+zwtr2+zwtr3+zwtr4+zwtr5+zwtr6
177  padjd(jl,jk) = padjd(jl,jk) + zwtr * wg1(jg)
178  IF (jk == 1) THEN
179  pdwfsu(jl,1)=pdwfsu(jl,1)+wg1(jg)*zwtr1
180  pdwfsu(jl,2)=pdwfsu(jl,2)+wg1(jg)*zwtr2
181  pdwfsu(jl,3)=pdwfsu(jl,3)+wg1(jg)*zwtr3
182  pdwfsu(jl,4)=pdwfsu(jl,4)+wg1(jg)*zwtr4
183  pdwfsu(jl,5)=pdwfsu(jl,5)+wg1(jg)*zwtr5
184  pdwfsu(jl,6)=pdwfsu(jl,6)+wg1(jg)*zwtr6
185  ENDIF
186  ENDDO
187 
188 !* 2.1.2 UPWARD LAYERS
189 ! -------------
190 
191  imu = ixu + jg
192  DO ja = 1 , kuaer
193  DO jl = kidia,kfdia
194  zuu(jl,ja) = pabcu(jl,ja,imu) - pabcu(jl,ja,inu)
195  ENDDO
196  ENDDO
197 
198  CALL lwtt &
199  & ( kidia , kfdia , klon,&
200  & pga(1,1,1,jk), pgb(1,1,1,jk),&
201  & zuu , ztt &
202  & )
203 
204  DO jl = kidia,kfdia
205  zwtr=pdbsl(jl,1,ibs)*ztt(jl,1) *ztt(jl,10)&
206  & +pdbsl(jl,2,ibs)*ztt(jl,2)*ztt(jl,7)*ztt(jl,11)&
207  & +pdbsl(jl,3,ibs)*ztt(jl,4)*ztt(jl,8)*ztt(jl,12)&
208  & +pdbsl(jl,4,ibs)*ztt(jl,5)*ztt(jl,9)*ztt(jl,13)&
209  & +pdbsl(jl,5,ibs)*ztt(jl,3) *ztt(jl,14)&
210  & +pdbsl(jl,6,ibs)*ztt(jl,6) *ztt(jl,15)
211  padju(jl,jk+1) = padju(jl,jk+1) + zwtr * wg1(jg)
212  ENDDO
213 
214  ENDDO
215 
216  DO jl = kidia,kfdia
217  pcntrb(jl,jk,jk+1) = padjd(jl,jk)
218  pcntrb(jl,jk+1,jk) = padju(jl,jk+1)
219  pcntrb(jl,jk ,jk) = 0.0_jprb
220  ENDDO
221 
222 ENDDO
223 
224 DO jk = 1 , klev
225  jk2 = 2 * jk
226  jk1 = jk2 - 1
227 
228  DO jnu = 1 , nsil
229  DO jl = kidia,kfdia
230  pdbdt(jl,jnu,jk) = pdbsl(jl,jnu,jk1) + pdbsl(jl,jnu,jk2)
231  ENDDO
232  ENDDO
233 ENDDO
234 
235 !-----------------------------------------------------------------------
236 
237 IF (lhook) CALL dr_hook('LWVN',1,zhook_handle)
238 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
integer, parameter jprb
Definition: parkind1.F90:31
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
logical lhook
Definition: yomhook.F90:12
subroutine lwtt(KIDIA, KFDIA, KLON, PGA, PGB, PUU, PTT)
Definition: lwtt.F90:3
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer(kind=jpim) ng1p1
Definition: yoelw.F90:21
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) ntra
Definition: yoelw.F90:18