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

Contents of /trunk/phylmd/Radlwsw/lwvn.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: 5356 byte(s)
Rename module dimens_m to dimensions.
1 module lwvn_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE lwvn(kuaer, pabcu, pdbsl, pga, pgb, padjd, padju, pcntrb, pdbdt)
8 USE dimensions
9 USE dimphy
10 USE raddim
11 USE raddimlw
12 ! -----------------------------------------------------------------------
13 ! PURPOSE.
14 ! --------
15 ! CARRIES OUT THE VERTICAL INTEGRATION ON NEARBY LAYERS
16 ! TO GIVE LONGWAVE FLUXES OR RADIANCES
17
18 ! METHOD.
19 ! -------
20
21 ! 1. PERFORMS THE VERTICAL INTEGRATION CORRESPONDING TO THE
22 ! CONTRIBUTIONS OF THE ADJACENT LAYERS USING A GAUSSIAN QUADRATURE
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
39 ! * ARGUMENTS:
40
41 INTEGER kuaer
42
43 DOUBLE PRECISION pabcu(kdlon, nua, 3*kflev+1) ! ABSORBER AMOUNTS
44 DOUBLE PRECISION pdbsl(kdlon, ninter, kflev*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT
45 DOUBLE PRECISION pga(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
46 DOUBLE PRECISION pgb(kdlon, 8, 2, kflev) ! PADE APPROXIMANTS
47
48 DOUBLE PRECISION padjd(kdlon, kflev+1) ! CONTRIBUTION OF ADJACENT LAYERS
49 DOUBLE PRECISION padju(kdlon, kflev+1) ! CONTRIBUTION OF ADJACENT LAYERS
50 DOUBLE PRECISION pcntrb(kdlon, kflev+1, kflev+1) ! CLEAR-SKY ENERGY EXCHANGE MATRIX
51 DOUBLE PRECISION pdbdt(kdlon, ninter, kflev) ! LAYER PLANCK FUNCTION GRADIENT
52
53 ! * LOCAL ARRAYS:
54
55 DOUBLE PRECISION zglayd(kdlon)
56 DOUBLE PRECISION zglayu(kdlon)
57 DOUBLE PRECISION ztt(kdlon, ntra)
58 DOUBLE PRECISION zuu(kdlon, nua)
59
60 INTEGER jk, jl, ja, im12, ind, inu, ixu, jg
61 INTEGER ixd, ibs, idd, imu, jk1, jk2, jnu
62 DOUBLE PRECISION zwtr
63
64 ! * Data Block:
65
66 DOUBLE PRECISION wg1(2)
67 SAVE wg1
68 DATA (wg1(jk), jk=1, 2)/1d0, 1d0/
69 ! -----------------------------------------------------------------------
70
71 ! * 1. INITIALIZATION
72 ! --------------
73
74
75 ! * 1.1 INITIALIZE LAYER CONTRIBUTIONS
76 ! ------------------------------
77
78
79 DO jk = 1, kflev + 1
80 DO jl = 1, kdlon
81 padjd(jl, jk) = 0.
82 padju(jl, jk) = 0.
83 END DO
84 END DO
85
86 ! * 1.2 INITIALIZE TRANSMISSION FUNCTIONS
87 ! ---------------------------------
88
89
90 DO ja = 1, ntra
91 DO jl = 1, kdlon
92 ztt(jl, ja) = 1.0
93 END DO
94 END DO
95
96 DO ja = 1, nua
97 DO jl = 1, kdlon
98 zuu(jl, ja) = 0.
99 END DO
100 END DO
101
102 ! ------------------------------------------------------------------
103
104 ! * 2. VERTICAL INTEGRATION
105 ! --------------------
106
107
108
109 ! * 2.1 CONTRIBUTION FROM ADJACENT LAYERS
110 ! ---------------------------------
111
112
113 DO jk = 1, kflev
114
115 ! * 2.1.1 DOWNWARD LAYERS
116 ! ---------------
117
118
119 im12 = 2*(jk-1)
120 ind = (jk-1)*ng1p1 + 1
121 ixd = ind
122 inu = jk*ng1p1 + 1
123 ixu = ind
124
125 DO jl = 1, kdlon
126 zglayd(jl) = 0.
127 zglayu(jl) = 0.
128 END DO
129
130 DO jg = 1, ng1
131 ibs = im12 + jg
132 idd = ixd + jg
133 DO ja = 1, kuaer
134 DO jl = 1, kdlon
135 zuu(jl, ja) = pabcu(jl, ja, ind) - pabcu(jl, ja, idd)
136 END DO
137 END DO
138
139
140 CALL lwtt(pga(1,1,1,jk), pgb(1,1,1,jk), zuu, ztt)
141
142 DO jl = 1, kdlon
143 zwtr = pdbsl(jl, 1, ibs)*ztt(jl, 1)*ztt(jl, 10) + &
144 pdbsl(jl, 2, ibs)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
145 pdbsl(jl, 3, ibs)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
146 pdbsl(jl, 4, ibs)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
147 pdbsl(jl, 5, ibs)*ztt(jl, 3)*ztt(jl, 14) + &
148 pdbsl(jl, 6, ibs)*ztt(jl, 6)*ztt(jl, 15)
149 zglayd(jl) = zglayd(jl) + zwtr*wg1(jg)
150 END DO
151
152 ! * 2.1.2 DOWNWARD LAYERS
153 ! ---------------
154
155
156 imu = ixu + jg
157 DO ja = 1, kuaer
158 DO jl = 1, kdlon
159 zuu(jl, ja) = pabcu(jl, ja, imu) - pabcu(jl, ja, inu)
160 END DO
161 END DO
162
163
164 CALL lwtt(pga(1,1,1,jk), pgb(1,1,1,jk), zuu, ztt)
165
166 DO jl = 1, kdlon
167 zwtr = pdbsl(jl, 1, ibs)*ztt(jl, 1)*ztt(jl, 10) + &
168 pdbsl(jl, 2, ibs)*ztt(jl, 2)*ztt(jl, 7)*ztt(jl, 11) + &
169 pdbsl(jl, 3, ibs)*ztt(jl, 4)*ztt(jl, 8)*ztt(jl, 12) + &
170 pdbsl(jl, 4, ibs)*ztt(jl, 5)*ztt(jl, 9)*ztt(jl, 13) + &
171 pdbsl(jl, 5, ibs)*ztt(jl, 3)*ztt(jl, 14) + &
172 pdbsl(jl, 6, ibs)*ztt(jl, 6)*ztt(jl, 15)
173 zglayu(jl) = zglayu(jl) + zwtr*wg1(jg)
174 END DO
175
176 END DO
177
178 DO jl = 1, kdlon
179 padjd(jl, jk) = zglayd(jl)
180 pcntrb(jl, jk, jk+1) = zglayd(jl)
181 padju(jl, jk+1) = zglayu(jl)
182 pcntrb(jl, jk+1, jk) = zglayu(jl)
183 pcntrb(jl, jk, jk) = 0.0
184 END DO
185 END DO
186
187 DO jk = 1, kflev
188 jk2 = 2*jk
189 jk1 = jk2 - 1
190 DO jnu = 1, ninter
191 DO jl = 1, kdlon
192 pdbdt(jl, jnu, jk) = pdbsl(jl, jnu, jk1) + pdbsl(jl, jnu, jk2)
193 END DO
194 END DO
195 END DO
196
197 END SUBROUTINE lwvn
198
199 end module lwvn_m

  ViewVC Help
Powered by ViewVC 1.1.21