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