GCC Code Coverage Report


Directory: ./
File: rad/trans_inq.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 122 0.0%
Branches: 0 398 0.0%

Line Branch Exec Source
1 SUBROUTINE TRANS_INQ(KRESOL,KSPEC,KSPEC2,KSPEC2G,KSPEC2MX,KNUMP,&
2 &KGPTOT,KGPTOTG,KGPTOTMX,KGPTOTL,&
3 &KMYMS,KASM0,KUMPP,KPOSSP,KPTRMS,KALLMS,KDIM0G,&
4 &KFRSTLAT,KLSTLAT,KFRSTLOFF,KPTRLAT,&
5 &KPTRFRSTLAT,KPTRLSTLAT,KPTRFLOFF,KSTA,KONL,&
6 &KULTPP,KPTRLS,&
7 &LDSPLITLAT,&
8 &PMU,PGW,PRPNM,KLEI3,KSPOLEGL,KPMS)
9
10 !**** *TRANS_INQ* - Extract information from the transform package
11
12 ! Purpose.
13 ! --------
14 ! Interface routine for extracting information from the T.P.
15
16 !** Interface.
17 ! ----------
18 ! CALL TRANS_INQ(...)
19 ! Explicit arguments : All arguments are optional.
20 ! --------------------
21 ! KRESOL - resolution tag for which info is required ,default is the
22 ! first defined resulution (input)
23
24 ! SPECTRAL SPACE
25 ! KSPEC - number of complex spectral coefficients on this PE
26 ! KSPEC2 - 2*KSPEC
27 ! KSPEC2G - global KSPEC2
28 ! KSPEC2MX - maximun KSPEC2 among all PEs
29 ! KNUMP - Number of spectral waves handled by this PE
30 ! KGPTOT - Total number of grid columns on this PE
31 ! KGPTOTG - Total number of grid columns on the Globe
32 ! KGPTOTMX - Maximum number of grid columns on any of the PEs
33 ! KGPTOTL - Number of grid columns one each PE (dimension N_REGIONS_NS:N_REGIONS_EW)
34 ! KMYMS - This PEs spectral zonal wavenumbers
35 ! KASM0 - Address in a spectral array of (m, n=m)
36 ! KUMPP - No. of wave numbers each wave set is responsible for
37 ! KPOSSP - Defines partitioning of global spectral fields among PEs
38 ! KPTRMS - Pointer to the first wave number of a given a-set
39 ! KALLMS - Wave numbers for all wave-set concatenated together
40 ! to give all wave numbers in wave-set order
41 ! KDIM0G - Defines partitioning of global spectral fields among PEs
42
43 ! GRIDPOINT SPACE
44 ! KFRSTLAT - First latitude of each a-set in grid-point space
45 ! KLSTTLAT - Last latitude of each a-set in grid-point space
46 ! KFRSTLOFF - Offset for first lat of own a-set in grid-point space
47 ! KPTRLAT - Pointer to the start of each latitude
48 ! KPTRFRSTLAT - Pointer to the first latitude of each a-set in
49 ! NSTA and NONL arrays
50 ! KPTRLSTLAT - Pointer to the last latitude of each a-set in
51 ! NSTA and NONL arrays
52 ! KPTRFLOFF - Offset for pointer to the first latitude of own a-set
53 ! NSTA and NONL arrays, i.e. nptrfrstlat(myseta)-1
54 ! KSTA - Position of first grid column for the latitudes on a
55 ! processor. The information is available for all processors.
56 ! The b-sets are distinguished by the last dimension of
57 ! nsta().The latitude band for each a-set is addressed by
58 ! nptrfrstlat(jaset),nptrlstlat(jaset), and
59 ! nptrfloff=nptrfrstlat(myseta) on this processors a-set.
60 ! Each split latitude has two entries in nsta(,:) which
61 ! necessitates the rather complex addressing of nsta(,:)
62 ! and the overdimensioning of nsta by N_REGIONS_NS.
63 ! KONL - Number of grid columns for the latitudes on a processor.
64 ! Similar to nsta() in data structure.
65 ! LDSPLITLAT - TRUE if latitude is split in grid point space over
66 ! two a-sets
67
68 ! FOURIER SPACE
69 ! KULTPP - number of latitudes for which each a-set is calculating
70 ! the FFT's.
71 ! KPTRLS - pointer to first global latitude of each a-set for which
72 ! it performs the Fourier calculations
73
74 ! LEGENDRE
75 ! PMU - sin(Gaussian latitudes)
76 ! PGW - Gaussian weights
77 ! PRPNM - Legendre polynomials
78 ! KLEI3 - First dimension of Legendre polynomials
79 ! KSPOLEGL - Second dimension of Legendre polynomials
80 ! KPMS - Adress for legendre polynomial for given M (NSMAX)
81
82 ! Method.
83 ! -------
84
85 ! Externals. SET_RESOL - set resolution
86 ! ----------
87
88 ! Author.
89 ! -------
90 ! Mats Hamrud *ECMWF*
91
92 ! Modifications.
93 ! --------------
94 ! Original : 00-03-03
95 ! M. Hortal : 2001-03-05 Dimensions of the Legendre polynomials
96
97 ! ------------------------------------------------------------------
98
99 USE PARKIND1 ,ONLY : JPIM ,JPRB
100
101 !ifndef INTERFACE
102
103 USE TPM_GEN
104 USE TPM_DIM
105 USE TPM_DISTR
106 USE TPM_GEOMETRY
107 USE TPM_FIELDS
108
109 USE SET_RESOL_MOD
110 USE ABORT_TRANS_MOD
111 USE EQ_REGIONS_MOD
112
113 !endif INTERFACE
114
115 IMPLICIT NONE
116
117 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL
118
119 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC
120 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2
121 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2G
122 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPEC2MX
123 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KNUMP
124 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOT
125 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTG
126 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTMX
127 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KGPTOTL(:,:)
128 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KFRSTLOFF
129 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRFLOFF
130
131 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KMYMS(:)
132 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KASM0(0:)
133 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KUMPP(:)
134 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPOSSP(:)
135 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRMS(:)
136 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KALLMS(:)
137 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KDIM0G(0:)
138 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KFRSTLAT(:)
139 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KLSTLAT(:)
140 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLAT(:)
141 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRFRSTLAT(:)
142 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLSTLAT(:)
143 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSTA(:,:)
144 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KONL(:,:)
145 LOGICAL ,OPTIONAL, INTENT(OUT) :: LDSPLITLAT(:)
146
147 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KULTPP(:)
148 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPTRLS(:)
149
150 REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PMU(:)
151 REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PGW(:)
152 REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PRPNM(:,:)
153 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KLEI3
154 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KSPOLEGL
155 INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(OUT) :: KPMS(0:)
156
157 !ifndef INTERFACE
158
159 INTEGER(KIND=JPIM) :: IU1,IU2
160 ! ------------------------------------------------------------------
161
162
163 ! Set current resolution
164 CALL SET_RESOL(KRESOL)
165
166 IF(PRESENT(KSPEC)) KSPEC = D%NSPEC
167 IF(PRESENT(KSPEC2)) KSPEC2 = D%NSPEC2
168 IF(PRESENT(KSPEC2G)) KSPEC2G = R%NSPEC2_G
169 IF(PRESENT(KSPEC2MX)) KSPEC2MX = D%NSPEC2MX
170 IF(PRESENT(KNUMP)) KNUMP = D%NUMP
171 IF(PRESENT(KGPTOT)) KGPTOT = D%NGPTOT
172 IF(PRESENT(KGPTOTG)) KGPTOTG = D%NGPTOTG
173 IF(PRESENT(KGPTOTMX)) KGPTOTMX = D%NGPTOTMX
174 IF(PRESENT(KFRSTLOFF)) KFRSTLOFF = D%NFRSTLOFF
175 IF(PRESENT(KPTRFLOFF)) KPTRFLOFF = D%NPTRFLOFF
176
177 IF(PRESENT(KGPTOTL)) THEN
178 IF(UBOUND(KGPTOTL,1) < N_REGIONS_NS) THEN
179 CALL ABORT_TRANS('TRANS_INQ: KGPTOTL DIM 1 TOO SMALL')
180 ELSEIF(UBOUND(KGPTOTL,2) < N_REGIONS_EW) THEN
181 CALL ABORT_TRANS('TRANS_INQ: KGPTOTL DIM 2 TOO SMALL')
182 ELSE
183 KGPTOTL(1:N_REGIONS_NS,1:N_REGIONS_EW) = D%NGPTOTL(:,:)
184 ENDIF
185 ENDIF
186
187 IF(PRESENT(KMYMS)) THEN
188 IF(UBOUND(KMYMS,1) < D%NUMP) THEN
189 CALL ABORT_TRANS('TRANS_INQ: KMYMS TOO SMALL')
190 ELSE
191 KMYMS(1:D%NUMP) = D%MYMS(:)
192 ENDIF
193 ENDIF
194
195 IF(PRESENT(KASM0)) THEN
196 IF(UBOUND(KASM0,1) < R%NSMAX) THEN
197 CALL ABORT_TRANS('TRANS_INQ: KASM0 TOO SMALL')
198 ELSE
199 KASM0(0:R%NSMAX) = D%NASM0(:)
200 ENDIF
201 ENDIF
202
203 IF(PRESENT(KUMPP)) THEN
204 IF(UBOUND(KUMPP,1) < NPRTRW) THEN
205 CALL ABORT_TRANS('TRANS_INQ: KUMPP TOO SMALL')
206 ELSE
207 KUMPP(1:NPRTRW) = D%NUMPP(:)
208 ENDIF
209 ENDIF
210
211 IF(PRESENT(KPOSSP)) THEN
212 IF(UBOUND(KPOSSP,1) < NPRTRW+1) THEN
213 CALL ABORT_TRANS('TRANS_INQ: KPOSSP TOO SMALL')
214 ELSE
215 KPOSSP(1:NPRTRW+1) = D%NPOSSP(:)
216 ENDIF
217 ENDIF
218
219 IF(PRESENT(KPTRMS)) THEN
220 IF(UBOUND(KPTRMS,1) < NPRTRW) THEN
221 CALL ABORT_TRANS('TRANS_INQ: KPTRMS TOO SMALL')
222 ELSE
223 KPTRMS(1:NPRTRW) = D%NPTRMS(:)
224 ENDIF
225 ENDIF
226
227 IF(PRESENT(KALLMS)) THEN
228 IF(UBOUND(KALLMS,1) < R%NSMAX+1) THEN
229 CALL ABORT_TRANS('TRANS_INQ: KALLMS TOO SMALL')
230 ELSE
231 KALLMS(1:R%NSMAX+1) = D%NALLMS(:)
232 ENDIF
233 ENDIF
234
235 IF(PRESENT(KDIM0G)) THEN
236 IF(UBOUND(KDIM0G,1) < R%NSMAX) THEN
237 CALL ABORT_TRANS('TRANS_INQ: KDIM0G TOO SMALL')
238 ELSE
239 KDIM0G(0:R%NSMAX) = D%NDIM0G(0:R%NSMAX)
240 ENDIF
241 ENDIF
242
243 IF(PRESENT(KFRSTLAT)) THEN
244 IF(UBOUND(KFRSTLAT,1) < N_REGIONS_NS) THEN
245 CALL ABORT_TRANS('TRANS_INQ: KFRSTLAT TOO SMALL')
246 ELSE
247 KFRSTLAT(1:N_REGIONS_NS) = D%NFRSTLAT(:)
248 ENDIF
249 ENDIF
250
251 IF(PRESENT(KLSTLAT)) THEN
252 IF(UBOUND(KLSTLAT,1) < N_REGIONS_NS) THEN
253 CALL ABORT_TRANS('TRANS_INQ: KLSTLAT TOO SMALL')
254 ELSE
255 KLSTLAT(1:N_REGIONS_NS) = D%NLSTLAT(:)
256 ENDIF
257 ENDIF
258
259 IF(PRESENT(KPTRLAT)) THEN
260 IF(UBOUND(KPTRLAT,1) < R%NDGL) THEN
261 CALL ABORT_TRANS('TRANS_INQ: KPTRLAT TOO SMALL')
262 ELSE
263 KPTRLAT(1:R%NDGL) = D%NPTRLAT(:)
264 ENDIF
265 ENDIF
266
267 IF(PRESENT(KPTRFRSTLAT)) THEN
268 IF(UBOUND(KPTRFRSTLAT,1) < N_REGIONS_NS) THEN
269 CALL ABORT_TRANS('TRANS_INQ: KPTRFRSTLAT TOO SMALL')
270 ELSE
271 KPTRFRSTLAT(1:N_REGIONS_NS) = D%NPTRFRSTLAT(:)
272 ENDIF
273 ENDIF
274
275 IF(PRESENT(KPTRLSTLAT)) THEN
276 IF(UBOUND(KPTRLSTLAT,1) < N_REGIONS_NS) THEN
277 CALL ABORT_TRANS('TRANS_INQ: KPTRLSTLAT TOO SMALL')
278 ELSE
279 KPTRLSTLAT(1:N_REGIONS_NS) = D%NPTRLSTLAT(:)
280 ENDIF
281 ENDIF
282
283 IF(PRESENT(KSTA)) THEN
284 IF(UBOUND(KSTA,1) < R%NDGL+N_REGIONS_NS-1) THEN
285 CALL ABORT_TRANS('TRANS_INQ: KSTA DIM 1 TOO SMALL')
286 ELSEIF(UBOUND(KSTA,2) < N_REGIONS_EW) THEN
287 CALL ABORT_TRANS('TRANS_INQ: KSTA DIM 2 TOO SMALL')
288 ELSE
289 KSTA(1:R%NDGL+N_REGIONS_NS-1,1:N_REGIONS_EW) = D%NSTA(:,:)
290 ENDIF
291 ENDIF
292
293 IF(PRESENT(KONL)) THEN
294 IF(UBOUND(KONL,1) < R%NDGL+N_REGIONS_NS-1) THEN
295 CALL ABORT_TRANS('TRANS_INQ: KONL DIM 1 TOO SMALL')
296 ELSEIF(UBOUND(KONL,2) < N_REGIONS_EW) THEN
297 CALL ABORT_TRANS('TRANS_INQ: KONL DIM 2 TOO SMALL')
298 ELSE
299 KONL(1:R%NDGL+N_REGIONS_NS-1,1:N_REGIONS_EW) = D%NONL(:,:)
300 ENDIF
301 ENDIF
302
303 IF(PRESENT(LDSPLITLAT)) THEN
304 IF(UBOUND(LDSPLITLAT,1) < R%NDGL) THEN
305 CALL ABORT_TRANS('TRANS_INQ: LDSPLITLAT TOO SMALL')
306 ELSE
307 LDSPLITLAT(1:R%NDGL) = D%LSPLITLAT(:)
308 ENDIF
309 ENDIF
310
311 IF(PRESENT(KULTPP)) THEN
312 IF(UBOUND(KULTPP,1) < NPRTRNS) THEN
313 CALL ABORT_TRANS('TRANS_INQ: KULTPP TOO SMALL')
314 ELSE
315 KULTPP(1:NPRTRNS) = D%NULTPP(:)
316 ENDIF
317 ENDIF
318
319 IF(PRESENT(KPTRLS)) THEN
320 IF(UBOUND(KPTRLS,1) < NPRTRNS) THEN
321 CALL ABORT_TRANS('TRANS_INQ: KPTRLS TOO SMALL')
322 ELSE
323 KPTRLS(1:NPRTRNS) = D%NPTRLS(:)
324 ENDIF
325 ENDIF
326
327 IF(PRESENT(PMU)) THEN
328 IF(UBOUND(PMU,1) < R%NDGL) THEN
329 CALL ABORT_TRANS('TRANS_INQ: PMU TOO SMALL')
330 ELSE
331 PMU(1:R%NDGL) = F%RMU
332 ENDIF
333 ENDIF
334
335 IF(PRESENT(PGW)) THEN
336 IF(UBOUND(PGW,1) < R%NDGL) THEN
337 CALL ABORT_TRANS('TRANS_INQ: PGW TOO SMALL')
338 ELSE
339 PGW(1:R%NDGL) = F%RW
340 ENDIF
341 ENDIF
342
343 IF(PRESENT(PRPNM)) THEN
344 IU1 = UBOUND(PRPNM,1)
345 IU2 = UBOUND(PRPNM,2)
346 IF(IU1 < R%NDGNH) THEN
347 CALL ABORT_TRANS('TRANS_INQ:FIRST DIM. OF PRNM TOO SMALL')
348 ELSE
349 IU1 = MIN(IU1,R%NLEI3)
350 IU2 = MIN(IU2,D%NSPOLEGL)
351 PRPNM(1:IU1,1:IU2) = F%RPNM(1:IU1,1:IU2)
352 ENDIF
353 ENDIF
354 IF(PRESENT(KLEI3)) THEN
355 KLEI3=R%NLEI3
356 ENDIF
357 IF(PRESENT(KSPOLEGL)) THEN
358 KSPOLEGL=D%NSPOLEGL
359 ENDIF
360 IF(PRESENT(KPMS)) THEN
361 IF(UBOUND(KPMS,1) < R%NSMAX) THEN
362 CALL ABORT_TRANS('TRANS_INQ: KPMS TOO SMALL')
363 ELSE
364 KPMS(0:R%NSMAX) = D%NPMS(0:R%NSMAX)
365 ENDIF
366 ENDIF
367 ! ------------------------------------------------------------------
368
369 !endif INTERFACE
370
371 END SUBROUTINE TRANS_INQ
372
373
374
375
376
377
378