/[lmdze]/trunk/phylmd/Radlwsw/lwvd.f
ViewVC logotype

Contents of /trunk/phylmd/Radlwsw/lwvd.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 265 - (show annotations)
Tue Mar 20 09:35:59 2018 UTC (6 years, 2 months ago) by guez
File size: 6101 byte(s)
Rename module dimens_m to dimensions.
1 module lwvd_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE lwvd(ktraer, pabcu, pdbdt, pga, pgb, pcntrb, pdisd, pdisu)
8 USE dimensions
9 USE dimphy
10 USE raddim
11 USE raddimlw
12
13 ! -----------------------------------------------------------------------
14 ! PURPOSE.
15 ! --------
16 ! CARRIES OUT THE VERTICAL INTEGRATION ON THE DISTANT LAYERS
17
18 ! METHOD.
19 ! -------
20
21 ! 1. PERFORMS THE VERTICAL INTEGRATION CORRESPONDING TO THE
22 ! CONTRIBUTIONS OF THE DISTANT LAYERS USING TRAPEZOIDAL RULE
23
24 ! REFERENCE.
25 ! ----------
26
27 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
28 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
29
30 ! AUTHOR.
31 ! -------
32 ! JEAN-JACQUES MORCRETTE *ECMWF*
33
34 ! MODIFICATIONS.
35 ! --------------
36 ! ORIGINAL : 89-07-14
37 ! -----------------------------------------------------------------------
38 ! * ARGUMENTS:
39
40 INTEGER ktraer
41
42 DOUBLE PRECISION pabcu(kdlon, nua, 3*kflev+1) ! ABSORBER AMOUNTS
43 DOUBLE PRECISION pdbdt(kdlon, ninter, kflev) ! LAYER PLANCK FUNCTION GRADIENT
44 DOUBLE PRECISION pga(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
45 DOUBLE PRECISION pgb(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
46
47 DOUBLE PRECISION pcntrb(kdlon, kflev+1, kflev+1) ! ENERGY EXCHANGE MATRIX
48 DOUBLE PRECISION pdisd(kdlon, kflev+1) ! CONTRIBUTION BY DISTANT LAYERS
49 DOUBLE PRECISION pdisu(kdlon, kflev+1) ! CONTRIBUTION BY DISTANT LAYERS
50
51 ! * LOCAL VARIABLES:
52
53 DOUBLE PRECISION zglayd(kdlon)
54 DOUBLE PRECISION zglayu(kdlon)
55 DOUBLE PRECISION ztt(kdlon, ntra)
56 DOUBLE PRECISION ztt1(kdlon, ntra)
57 DOUBLE PRECISION ztt2(kdlon, ntra)
58
59 INTEGER jl, jk, ja, ikp1, ikn, ikd1, jkj, ikd2
60 INTEGER ikjp1, ikm1, ikj, jlk, iku1, ijkl, iku2
61 INTEGER itt
62 DOUBLE PRECISION zww, zdzxdg, zdzxmg
63
64 ! * 1. INITIALIZATION
65 ! --------------
66
67
68 ! * 1.1 INITIALIZE LAYER CONTRIBUTIONS
69 ! ------------------------------
70
71
72 DO jk = 1, kflev + 1
73 DO jl = 1, kdlon
74 pdisd(jl, jk) = 0.
75 pdisu(jl, jk) = 0.
76 END DO
77 END DO
78
79 ! * 1.2 INITIALIZE TRANSMISSION FUNCTIONS
80 ! ---------------------------------
81
82
83
84 DO ja = 1, ntra
85 DO jl = 1, kdlon
86 ztt(jl, ja) = 1.0
87 ztt1(jl, ja) = 1.0
88 ztt2(jl, ja) = 1.0
89 END DO
90 END DO
91
92 ! ------------------------------------------------------------------
93
94 ! * 2. VERTICAL INTEGRATION
95 ! --------------------
96
97 ! * 2.2 CONTRIBUTION FROM DISTANT LAYERS
98 ! ---------------------------------
99
100
101
102 ! * 2.2.1 DISTANT AND ABOVE LAYERS
103 ! ------------------------
104
105
106
107
108 ! * 2.2.2 FIRST UPPER LEVEL
109 ! -----------------
110
111
112 DO jk = 1, kflev - 1
113 ikp1 = jk + 1
114 ikn = (jk-1)*ng1p1 + 1
115 ikd1 = jk*ng1p1 + 1
116
117 CALL lwttm(pga(1,1,1,jk), pgb(1,1,1,jk), pabcu(1,1,ikn), pabcu(1,1,ikd1), &
118 ztt1)
119
120
121
122 ! * 2.2.3 HIGHER UP
123 ! ---------
124
125
126 itt = 1
127 DO jkj = ikp1, kflev
128 IF (itt==1) THEN
129 itt = 2
130 ELSE
131 itt = 1
132 END IF
133 ikjp1 = jkj + 1
134 ikd2 = jkj*ng1p1 + 1
135
136 IF (itt==1) THEN
137 CALL lwttm(pga(1,1,1,jkj), pgb(1,1,1,jkj), pabcu(1,1,ikn), &
138 pabcu(1,1,ikd2), ztt1)
139 ELSE
140 CALL lwttm(pga(1,1,1,jkj), pgb(1,1,1,jkj), pabcu(1,1,ikn), &
141 pabcu(1,1,ikd2), ztt2)
142 END IF
143
144 DO ja = 1, ktraer
145 DO jl = 1, kdlon
146 ztt(jl, ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5
147 END DO
148 END DO
149
150 DO jl = 1, kdlon
151 zww = pdbdt(jl, 1, jkj)*ztt(jl, 1)*ztt(jl, 10) + &
152 pdbdt(jl, 2, jkj)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
153 pdbdt(jl, 3, jkj)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
154 pdbdt(jl, 4, jkj)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
155 pdbdt(jl, 5, jkj)*ztt(jl, 3)*ztt(jl, 14) + &
156 pdbdt(jl, 6, jkj)*ztt(jl, 6)*ztt(jl, 15)
157 zglayd(jl) = zww
158 zdzxdg = zglayd(jl)
159 pdisd(jl, jk) = pdisd(jl, jk) + zdzxdg
160 pcntrb(jl, jk, ikjp1) = zdzxdg
161 END DO
162
163
164 END DO
165 END DO
166
167
168 ! * 2.2.4 DISTANT AND BELOW LAYERS
169 ! ------------------------
170
171
172
173
174 ! * 2.2.5 FIRST LOWER LEVEL
175 ! -----------------
176
177
178 DO jk = 3, kflev + 1
179 ikn = (jk-1)*ng1p1 + 1
180 ikm1 = jk - 1
181 ikj = jk - 2
182 iku1 = ikj*ng1p1 + 1
183
184
185 CALL lwttm(pga(1,1,1,ikj), pgb(1,1,1,ikj), pabcu(1,1,iku1), &
186 pabcu(1,1,ikn), ztt1)
187
188
189
190 ! * 2.2.6 DOWN BELOW
191 ! ----------
192
193
194 itt = 1
195 DO jlk = 1, ikj
196 IF (itt==1) THEN
197 itt = 2
198 ELSE
199 itt = 1
200 END IF
201 ijkl = ikm1 - jlk
202 iku2 = (ijkl-1)*ng1p1 + 1
203
204
205 IF (itt==1) THEN
206 CALL lwttm(pga(1,1,1,ijkl), pgb(1,1,1,ijkl), pabcu(1,1,iku2), &
207 pabcu(1,1,ikn), ztt1)
208 ELSE
209 CALL lwttm(pga(1,1,1,ijkl), pgb(1,1,1,ijkl), pabcu(1,1,iku2), &
210 pabcu(1,1,ikn), ztt2)
211 END IF
212
213 DO ja = 1, ktraer
214 DO jl = 1, kdlon
215 ztt(jl, ja) = (ztt1(jl,ja)+ztt2(jl,ja))*0.5
216 END DO
217 END DO
218
219 DO jl = 1, kdlon
220 zww = pdbdt(jl, 1, ijkl)*ztt(jl, 1)*ztt(jl, 10) + &
221 pdbdt(jl, 2, ijkl)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
222 pdbdt(jl, 3, ijkl)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
223 pdbdt(jl, 4, ijkl)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
224 pdbdt(jl, 5, ijkl)*ztt(jl, 3)*ztt(jl, 14) + &
225 pdbdt(jl, 6, ijkl)*ztt(jl, 6)*ztt(jl, 15)
226 zglayu(jl) = zww
227 zdzxmg = zglayu(jl)
228 pdisu(jl, jk) = pdisu(jl, jk) + zdzxmg
229 pcntrb(jl, jk, ijkl) = zdzxmg
230 END DO
231
232
233 END DO
234 END DO
235
236 RETURN
237 END SUBROUTINE lwvd
238
239 end module lwvd_m

  ViewVC Help
Powered by ViewVC 1.1.21