Directory: | ./ |
---|---|
File: | rad/rrtm_init_140gp.f90 |
Date: | 2022-01-11 19:19:34 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 68 | 68 | 100.0% |
Branches: | 24 | 26 | 92.3% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | !*************************************************************************** | ||
2 | 1 | SUBROUTINE RRTM_INIT_140GP | |
3 | !*************************************************************************** | ||
4 | ! Reformatted for F90 by JJMorcrette, ECMWF, 980714 | ||
5 | |||
6 | ! Parameters | ||
7 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
8 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK | ||
9 | |||
10 | USE PARRRTM , ONLY : JPBAND ,JPG ,JPGPT | ||
11 | USE YOERRTWN , ONLY : NG | ||
12 | USE YOERRTFTR, ONLY : NGC ,NGN ,NGM , WT | ||
13 | ! Output | ||
14 | USE YOERRTBG2, ONLY : CORR1 ,CORR2 | ||
15 | USE YOERRTRWT, ONLY : FREFA ,FREFB ,FREFADF ,FREFBDF ,RWGT | ||
16 | |||
17 | |||
18 | IMPLICIT NONE | ||
19 | REAL(KIND=JPRB) :: Z_WTSM(JPG) | ||
20 | |||
21 | INTEGER(KIND=JPIM) :: I, IBND, IG, IGC, IGCSM, IND, IPR, IPRSM, IPT | ||
22 | |||
23 | REAL(KIND=JPRB) :: Z_FP, Z_RTFP, Z_WTSUM | ||
24 | REAL(KIND=JPRB) :: ZHOOK_HANDLE | ||
25 | |||
26 | INTERFACE | ||
27 | SUBROUTINE RRTM_KGB1 | ||
28 | END SUBROUTINE RRTM_KGB1 | ||
29 | END INTERFACE | ||
30 | INTERFACE | ||
31 | SUBROUTINE RRTM_KGB10 | ||
32 | END SUBROUTINE RRTM_KGB10 | ||
33 | END INTERFACE | ||
34 | INTERFACE | ||
35 | SUBROUTINE RRTM_KGB11 | ||
36 | END SUBROUTINE RRTM_KGB11 | ||
37 | END INTERFACE | ||
38 | INTERFACE | ||
39 | SUBROUTINE RRTM_KGB12 | ||
40 | END SUBROUTINE RRTM_KGB12 | ||
41 | END INTERFACE | ||
42 | INTERFACE | ||
43 | SUBROUTINE RRTM_KGB13 | ||
44 | END SUBROUTINE RRTM_KGB13 | ||
45 | END INTERFACE | ||
46 | INTERFACE | ||
47 | SUBROUTINE RRTM_KGB14 | ||
48 | END SUBROUTINE RRTM_KGB14 | ||
49 | END INTERFACE | ||
50 | INTERFACE | ||
51 | SUBROUTINE RRTM_KGB15 | ||
52 | END SUBROUTINE RRTM_KGB15 | ||
53 | END INTERFACE | ||
54 | INTERFACE | ||
55 | SUBROUTINE RRTM_KGB16 | ||
56 | END SUBROUTINE RRTM_KGB16 | ||
57 | END INTERFACE | ||
58 | INTERFACE | ||
59 | SUBROUTINE RRTM_KGB2 | ||
60 | END SUBROUTINE RRTM_KGB2 | ||
61 | END INTERFACE | ||
62 | INTERFACE | ||
63 | SUBROUTINE RRTM_KGB3 | ||
64 | END SUBROUTINE RRTM_KGB3 | ||
65 | END INTERFACE | ||
66 | INTERFACE | ||
67 | SUBROUTINE RRTM_KGB4 | ||
68 | END SUBROUTINE RRTM_KGB4 | ||
69 | END INTERFACE | ||
70 | INTERFACE | ||
71 | SUBROUTINE RRTM_KGB5 | ||
72 | END SUBROUTINE RRTM_KGB5 | ||
73 | END INTERFACE | ||
74 | INTERFACE | ||
75 | SUBROUTINE RRTM_KGB6 | ||
76 | END SUBROUTINE RRTM_KGB6 | ||
77 | END INTERFACE | ||
78 | INTERFACE | ||
79 | SUBROUTINE RRTM_KGB7 | ||
80 | END SUBROUTINE RRTM_KGB7 | ||
81 | END INTERFACE | ||
82 | INTERFACE | ||
83 | SUBROUTINE RRTM_KGB8 | ||
84 | END SUBROUTINE RRTM_KGB8 | ||
85 | END INTERFACE | ||
86 | INTERFACE | ||
87 | SUBROUTINE RRTM_KGB9 | ||
88 | END SUBROUTINE RRTM_KGB9 | ||
89 | END INTERFACE | ||
90 | |||
91 | INTERFACE | ||
92 | SUBROUTINE RRTM_CMBGB1 | ||
93 | END SUBROUTINE RRTM_CMBGB1 | ||
94 | END INTERFACE | ||
95 | INTERFACE | ||
96 | SUBROUTINE RRTM_CMBGB10 | ||
97 | END SUBROUTINE RRTM_CMBGB10 | ||
98 | END INTERFACE | ||
99 | INTERFACE | ||
100 | SUBROUTINE RRTM_CMBGB11 | ||
101 | END SUBROUTINE RRTM_CMBGB11 | ||
102 | END INTERFACE | ||
103 | INTERFACE | ||
104 | SUBROUTINE RRTM_CMBGB12 | ||
105 | END SUBROUTINE RRTM_CMBGB12 | ||
106 | END INTERFACE | ||
107 | INTERFACE | ||
108 | SUBROUTINE RRTM_CMBGB13 | ||
109 | END SUBROUTINE RRTM_CMBGB13 | ||
110 | END INTERFACE | ||
111 | INTERFACE | ||
112 | SUBROUTINE RRTM_CMBGB14 | ||
113 | END SUBROUTINE RRTM_CMBGB14 | ||
114 | END INTERFACE | ||
115 | INTERFACE | ||
116 | SUBROUTINE RRTM_CMBGB15 | ||
117 | END SUBROUTINE RRTM_CMBGB15 | ||
118 | END INTERFACE | ||
119 | INTERFACE | ||
120 | SUBROUTINE RRTM_CMBGB16 | ||
121 | END SUBROUTINE RRTM_CMBGB16 | ||
122 | END INTERFACE | ||
123 | INTERFACE | ||
124 | SUBROUTINE RRTM_CMBGB2 | ||
125 | END SUBROUTINE RRTM_CMBGB2 | ||
126 | END INTERFACE | ||
127 | INTERFACE | ||
128 | SUBROUTINE RRTM_CMBGB3 | ||
129 | END SUBROUTINE RRTM_CMBGB3 | ||
130 | END INTERFACE | ||
131 | INTERFACE | ||
132 | SUBROUTINE RRTM_CMBGB4 | ||
133 | END SUBROUTINE RRTM_CMBGB4 | ||
134 | END INTERFACE | ||
135 | INTERFACE | ||
136 | SUBROUTINE RRTM_CMBGB5 | ||
137 | END SUBROUTINE RRTM_CMBGB5 | ||
138 | END INTERFACE | ||
139 | INTERFACE | ||
140 | SUBROUTINE RRTM_CMBGB6 | ||
141 | END SUBROUTINE RRTM_CMBGB6 | ||
142 | END INTERFACE | ||
143 | INTERFACE | ||
144 | SUBROUTINE RRTM_CMBGB7 | ||
145 | END SUBROUTINE RRTM_CMBGB7 | ||
146 | END INTERFACE | ||
147 | INTERFACE | ||
148 | SUBROUTINE RRTM_CMBGB8 | ||
149 | END SUBROUTINE RRTM_CMBGB8 | ||
150 | END INTERFACE | ||
151 | INTERFACE | ||
152 | SUBROUTINE RRTM_CMBGB9 | ||
153 | END SUBROUTINE RRTM_CMBGB9 | ||
154 | END INTERFACE | ||
155 | |||
156 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('RRTM_INIT_140GP',0,ZHOOK_HANDLE) |
157 | |||
158 | ! Read the absorption-related coefficients over the 16 x 16 g-points | ||
159 | |||
160 | 1 | CALL RRTM_KGB1 | |
161 | 1 | CALL RRTM_KGB2 | |
162 | 1 | CALL RRTM_KGB3 | |
163 | 1 | CALL RRTM_KGB4 | |
164 | 1 | CALL RRTM_KGB5 | |
165 | 1 | CALL RRTM_KGB6 | |
166 | 1 | CALL RRTM_KGB7 | |
167 | 1 | CALL RRTM_KGB8 | |
168 | 1 | CALL RRTM_KGB9 | |
169 | 1 | CALL RRTM_KGB10 | |
170 | 1 | CALL RRTM_KGB11 | |
171 | 1 | CALL RRTM_KGB12 | |
172 | 1 | CALL RRTM_KGB13 | |
173 | 1 | CALL RRTM_KGB14 | |
174 | 1 | CALL RRTM_KGB15 | |
175 | 1 | CALL RRTM_KGB16 | |
176 | |||
177 | ! Calculate lookup tables for functions needed in routine TAUMOL (TAUGB2) | ||
178 | |||
179 | ! FH 2017/05/03 | ||
180 | ! Ce facteur de correction CORR2 est vraiment bizare parce qu'on | ||
181 | ! impose 1. aux bornes, en I=1 et I=200 mais la fonction | ||
182 | ! CORE=( 1 - sqrt(i/im) ) / ( 1 - i/im ) = 1/ ( 1 + sqrt(i/im)) | ||
183 | ! vaut 1 en i=1 et 1/2 en i=im ... | ||
184 | |||
185 | 1 | CORR1(0) = 1.0_JPRB | |
186 | 1 | CORR1(200) = 1.0_JPRB | |
187 | 1 | CORR2(0) = 1.0_JPRB | |
188 | 1 | CORR2(200) = 1.0_JPRB | |
189 |
2/2✓ Branch 0 taken 199 times.
✓ Branch 1 taken 1 times.
|
200 | DO I = 1,199 |
190 | 199 | Z_FP = 0.005_JPRB*REAL(I) | |
191 | 199 | Z_RTFP = SQRT(Z_FP) | |
192 | 199 | CORR1(I) = Z_RTFP/Z_FP | |
193 | 200 | CORR2(I) = (1.0_JPRB-Z_RTFP)/(1.0_JPRB-Z_FP) | |
194 | ENDDO | ||
195 | |||
196 | ! Perform g-point reduction from 16 per band (256 total points) to | ||
197 | ! a band dependant number (140 total points) for all absorption | ||
198 | ! coefficient input data and Planck fraction input data. | ||
199 | ! Compute relative weighting for new g-point combinations. | ||
200 | |||
201 | IGCSM = 0 | ||
202 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 1 times.
|
17 | DO IBND = 1,JPBAND |
203 | IPRSM = 0 | ||
204 |
2/2✓ Branch 0 taken 14 times.
✓ Branch 1 taken 2 times.
|
17 | IF (NGC(IBND) < 16) THEN |
205 |
2/2✓ Branch 0 taken 108 times.
✓ Branch 1 taken 14 times.
|
122 | DO IGC = 1,NGC(IBND) |
206 | 108 | IGCSM = IGCSM + 1 | |
207 | Z_WTSUM = 0.0_JPRB | ||
208 |
2/2✓ Branch 0 taken 224 times.
✓ Branch 1 taken 108 times.
|
332 | DO IPR = 1, NGN(IGCSM) |
209 | 224 | IPRSM = IPRSM + 1 | |
210 | 332 | Z_WTSUM = Z_WTSUM + WT(IPRSM) | |
211 | ENDDO | ||
212 | 122 | Z_WTSM(IGC) = Z_WTSUM | |
213 | ENDDO | ||
214 |
2/2✓ Branch 0 taken 224 times.
✓ Branch 1 taken 14 times.
|
238 | DO IG = 1,NG(IBND) |
215 | 224 | IND = (IBND-1)*16 + IG | |
216 | 238 | RWGT(IND) = WT(IG)/Z_WTSM(NGM(IND)) | |
217 | ENDDO | ||
218 | ELSE | ||
219 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 32 times.
|
34 | DO IG = 1,NG(IBND) |
220 | 32 | IGCSM = IGCSM + 1 | |
221 | 32 | IND = (IBND-1)*16 + IG | |
222 | 34 | RWGT(IND) = 1.0_JPRB | |
223 | ENDDO | ||
224 | ENDIF | ||
225 | ENDDO | ||
226 | |||
227 | ! Initialize arrays for combined Planck fraction data. | ||
228 | |||
229 |
2/2✓ Branch 0 taken 13 times.
✓ Branch 1 taken 1 times.
|
14 | DO IPT = 1,13 |
230 |
2/2✓ Branch 0 taken 1820 times.
✓ Branch 1 taken 13 times.
|
1834 | DO IPR = 1, JPGPT |
231 | 1820 | FREFA(IPR,IPT) = 0.0_JPRB | |
232 | 1833 | FREFADF(IPR,IPT) = 0.0_JPRB | |
233 | ENDDO | ||
234 | ENDDO | ||
235 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | DO IPT = 1,6 |
236 |
2/2✓ Branch 0 taken 840 times.
✓ Branch 1 taken 6 times.
|
847 | DO IPR = 1, JPGPT |
237 | 840 | FREFB(IPR,IPT) = 0.0_JPRB | |
238 | 846 | FREFBDF(IPR,IPT) = 0.0_JPRB | |
239 | ENDDO | ||
240 | ENDDO | ||
241 | |||
242 | ! Reduce g-points for relevant data in each LW spectral band. | ||
243 | |||
244 | 1 | CALL RRTM_CMBGB1 | |
245 | 1 | CALL RRTM_CMBGB2 | |
246 | 1 | CALL RRTM_CMBGB3 | |
247 | 1 | CALL RRTM_CMBGB4 | |
248 | 1 | CALL RRTM_CMBGB5 | |
249 | 1 | CALL RRTM_CMBGB6 | |
250 | 1 | CALL RRTM_CMBGB7 | |
251 | 1 | CALL RRTM_CMBGB8 | |
252 | 1 | CALL RRTM_CMBGB9 | |
253 | 1 | CALL RRTM_CMBGB10 | |
254 | 1 | CALL RRTM_CMBGB11 | |
255 | 1 | CALL RRTM_CMBGB12 | |
256 | 1 | CALL RRTM_CMBGB13 | |
257 | 1 | CALL RRTM_CMBGB14 | |
258 | 1 | CALL RRTM_CMBGB15 | |
259 | 1 | CALL RRTM_CMBGB16 | |
260 | |||
261 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('RRTM_INIT_140GP',1,ZHOOK_HANDLE) |
262 | 1 | END SUBROUTINE RRTM_INIT_140GP | |
263 |