GCC Code Coverage Report


Directory: ./
File: rad/setup_trans.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 60 0.0%
Branches: 0 88 0.0%

Line Branch Exec Source
1 SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KLOEN,LDLINEAR_GRID,LDSPLIT,&
2 &KAPSETS,KTMAX,KRESOL)
3
4 !**** *SETUP_TRANS* - Setup transform package for specific resolution
5
6 ! Purpose.
7 ! --------
8 ! To setup for making spectral transforms. Each call to this routine
9 ! creates a new resolution up to a maximum of NMAX_RESOL set up in
10 ! SETUP_TRANS0. You need to call SETUP_TRANS0 before this routine can
11 ! be called.
12
13 !** Interface.
14 ! ----------
15 ! CALL SETUP_TRANS(...)
16
17 ! Explicit arguments : KLOEN,LDLINEAR_GRID,LDSPLIT,KAPSETS are optional arguments
18 ! --------------------
19 ! KSMAX - spectral truncation required
20 ! KDGL - number of Gaussian latitudes
21 ! KLOEN(:) - number of points on each Gaussian latitude [2*KDGL]
22 ! LDSPLIT - true if split latitudes in grid-point space [false]
23 ! LDLINEAR_GRID - true if linear grid
24 ! KAPSETS - Number of apple sets in the distribution [0]
25 ! KTMAX - truncation order for tendencies?
26 ! KRESOL - the resolution identifier
27
28 ! KSMAX,KDGL,KTMAX and KLOEN are GLOBAL variables desribing the resolution
29 ! in spectral and grid-point space
30
31 ! LDSPLIT and KAPSETS describe the distribution among processors of
32 ! grid-point data and has no relevance if you are using a single processor
33
34 ! Method.
35 ! -------
36
37 ! Externals. SET_RESOL - set resolution
38 ! ---------- SETUP_DIMS - setup distribution independent dimensions
39 ! SUMP_TRANS_PRELEG - first part of setup of distr. environment
40 ! SULEG - Compute Legandre polonomial and Gaussian
41 ! Latitudes and Weights
42 ! SETUP_GEOM - Compute arrays related to grid-point geometry
43 ! SUMP_TRANS - Second part of setup of distributed environment
44 ! SUFFT - setup for FFT
45
46 ! Author.
47 ! -------
48 ! Mats Hamrud *ECMWF*
49
50 ! Modifications.
51 ! --------------
52 ! Original : 00-03-03
53
54 ! ------------------------------------------------------------------
55
56 USE PARKIND1 ,ONLY : JPIM ,JPRB
57
58 !ifndef INTERFACE
59
60 USE TPM_GEN
61 USE TPM_DIM
62 USE TPM_DISTR
63 USE TPM_GEOMETRY
64 USE TPM_FIELDS
65 USE TPM_FFT
66
67 USE SET_RESOL_MOD
68 USE SETUP_DIMS_MOD
69 USE SUMP_TRANS_MOD
70 USE SUMP_TRANS_PRELEG_MOD
71 USE SULEG_MOD
72 USE SETUP_GEOM_MOD
73 USE SUFFT_MOD
74 USE ABORT_TRANS_MOD
75 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
76
77 !endif INTERFACE
78
79 IMPLICIT NONE
80
81 ! Dummy arguments
82
83 INTEGER(KIND=JPIM) ,INTENT(IN) :: KSMAX,KDGL
84 INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KLOEN(:)
85 LOGICAL ,OPTIONAL,INTENT(IN) :: LDLINEAR_GRID
86 LOGICAL ,OPTIONAL,INTENT(IN) :: LDSPLIT
87 INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KAPSETS
88 INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KTMAX
89 INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(OUT):: KRESOL
90
91 !ifndef INTERFACE
92
93 ! Local variables
94 INTEGER(KIND=JPIM) :: JGL
95
96 LOGICAL :: LLP1,LLP2
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
98
99 ! ------------------------------------------------------------------
100
101 IF (LHOOK) CALL DR_HOOK('SETUP_TRANS',0,ZHOOK_HANDLE)
102
103 IF(MSETUP0 /= 1) THEN
104 CALL ABORT_TRANS('SETUP_TRANS: SETUP_TRANS0 HAS TO BE CALLED BEFORE SETUP_TRANS')
105 ENDIF
106 LLP1 = NPRINTLEV>0
107 LLP2 = NPRINTLEV>1
108 IF(LLP1) WRITE(NOUT,*) '=== ENTER ROUTINE SETUP_TRANS ==='
109
110 ! Allocate resolution dependent structures
111 IF(.NOT. ALLOCATED(DIM_RESOL)) THEN
112 NDEF_RESOL = 1
113 ALLOCATE(DIM_RESOL(NMAX_RESOL))
114 ALLOCATE(FIELDS_RESOL(NMAX_RESOL))
115 ALLOCATE(GEOM_RESOL(NMAX_RESOL))
116 ALLOCATE(DISTR_RESOL(NMAX_RESOL))
117 ALLOCATE(FFT_RESOL(NMAX_RESOL))
118 ELSE
119 NDEF_RESOL = NDEF_RESOL+1
120 IF(NDEF_RESOL > NMAX_RESOL) THEN
121 CALL ABORT_TRANS('SETUP_TRANS:NDEF_RESOL > NMAX_RESOL')
122 ENDIF
123 ENDIF
124
125 IF (PRESENT(KRESOL)) THEN
126 KRESOL=NDEF_RESOL
127 ENDIF
128
129 ! Point at structures due to be initialized
130 CALL SET_RESOL(NDEF_RESOL)
131
132 IF(LLP1) WRITE(NOUT,*) '=== DEFINING RESOLUTION ',NCUR_RESOL
133
134
135
136 ! Defaults for optional arguments
137
138
139 G%LREDUCED_GRID = .FALSE.
140 G%LINEAR_GRID = .FALSE.
141 D%LSPLIT = .FALSE.
142 D%NAPSETS = 0
143
144 ! NON-OPTIONAL ARGUMENTS
145 R%NSMAX = KSMAX
146 R%NDGL = KDGL
147 R%NDLON = 2*KDGL
148
149 IF (KDGL <= 0 .OR. MOD(KDGL,2) /= 0) THEN
150 CALL ABORT_TRANS ('SETUP_TRANS: KDGL IS NOT A POSITIVE, EVEN NUMBER')
151 ENDIF
152
153 ! Optional arguments
154
155 ALLOCATE(G%NLOEN(R%NDGL))
156 IF(LLP2)WRITE(NOUT,9) 'NLOEN ',SIZE(G%NLOEN ),SHAPE(G%NLOEN )
157 IF(PRESENT(KLOEN)) THEN
158 DO JGL=1,R%NDGL
159 IF(KLOEN(JGL) /= R%NDLON) THEN
160 G%LREDUCED_GRID = .TRUE.
161 EXIT
162 ENDIF
163 ENDDO
164 ENDIF
165
166 IF (G%LREDUCED_GRID) THEN
167 G%NLOEN(:) = KLOEN(1:R%NDGL)
168 ELSE
169 G%NLOEN(:) = R%NDLON
170 ENDIF
171
172 IF(PRESENT(LDSPLIT)) THEN
173 D%LSPLIT = LDSPLIT
174 ENDIF
175
176 IF(PRESENT(KAPSETS)) THEN
177 D%NAPSETS = KAPSETS
178 ENDIF
179
180 IF(PRESENT(KTMAX)) THEN
181 R%NTMAX = KTMAX
182 ELSE
183 R%NTMAX = R%NSMAX
184 ENDIF
185 IF(R%NTMAX /= R%NSMAX) THEN
186 !This SHOULD work but I don't know how to test it /MH
187 CALL ABORT_TRANS('SETUP_TRANS:R%NTMAX /= R%NSMAX HAS NOT BEEN VALIDATED')
188 ENDIF
189 !Temporary?
190 IF(PRESENT(LDLINEAR_GRID)) THEN
191 G%LINEAR_GRID = LDLINEAR_GRID
192 ELSEIF(R%NSMAX > (R%NDLON+3)/3) THEN
193 G%LINEAR_GRID = .TRUE.
194 ENDIF
195
196 ! Setup resolution dependent structures
197 ! -------------------------------------
198
199 ! Setup distribution independent dimensions
200 CALL SETUP_DIMS
201
202 ! First part of setup of distributed environment
203 CALL SUMP_TRANS_PRELEG
204
205 ! Compute Legandre polonomial and Gaussian Latitudes and Weights
206 CALL SULEG
207
208 !CALL GSTATS(1802,0) MPL 2.12.08
209 ! Compute arrays related to grid-point geometry
210 CALL SETUP_GEOM
211
212 ! Second part of setup of distributed environment
213 CALL SUMP_TRANS
214
215 ! Initialize Fast Fourier Transform package
216 CALL SUFFT
217 !CALL GSTATS(1802,1) MPL 2.12.08
218
219
220 IF (LHOOK) CALL DR_HOOK('SETUP_TRANS',1,ZHOOK_HANDLE)
221 ! ------------------------------------------------------------------
222 9 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8)
223
224 !endif INTERFACE
225
226 END SUBROUTINE SETUP_TRANS
227
228
229