LMDZ
trans_inq.F90
Go to the documentation of this file.
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 
!$Id mode_top_bound COMMON comconstr r
Definition: comconst.h:7
type(fields_type), pointer f
Definition: tpm_fields.F90:23
integer(kind=jpim), public n_regions_ns
type(distr_type), pointer d
Definition: tpm_distr.F90:152
integer, parameter jprb
Definition: parkind1.F90:31
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL ksta
Definition: clesphys.h:23
subroutine trans_inq(KRESOL, KSPEC, KSPEC2, KSPEC2G, KSPEC2MX, KNUMP, KGPTOT, KGPTOTG, KGPTOTMX, KGPTOTL, KMYMS, KASM0, KUMPP, KPOSSP, KPTRMS, KALLMS, KDIM0G, KFRSTLAT, KLSTLAT, KFRSTLOFF, KPTRLAT, KPTRFRSTLAT, KPTRLSTLAT, KPTRFLOFF, KSTA, KONL, KULTPP, KPTRLS, LDSPLITLAT, PMU, PGW, PRPNM, KLEI3, KSPOLEGL, KPMS)
Definition: trans_inq.F90:9
subroutine set_resol(KRESOL)
integer(kind=jpim), public n_regions_ew
integer(kind=jpim) nprtrw
Definition: tpm_distr.F90:14
integer(kind=jpim) nprtrns
Definition: tpm_distr.F90:16
integer, parameter jpim
Definition: parkind1.F90:13
subroutine abort_trans(CDTEXT)