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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21