LMDZ
yomdim.F90
Go to the documentation of this file.
1 MODULE yomdim
2 
3 USE parkind1 ,ONLY : jpim ,jprb
4 
5 IMPLICIT NONE
6 
7 SAVE
8 
9 ! ------------------------------------------------------------------
10 
11 !* Dimensions of model working arrays
12 
13 ! === COLLOCATION GRID OF THE DYNAMICS ========================================
14 
15 ! NDGLG : number of rows of latitudes
16 ! NDGLL : number of rows of latitudes for which this process is
17 ! performing Fourier Space calculations
18 ! NDGNH : number of rows in the northern hemisphere
19 ! NDGSUR : number of additional rows at each pole for horizontal
20 ! interpolations.
21 ! NDGSAG = -NDGSUR+1
22 ! NDGSAL = Local version of NDGSAG.
23 ! NDGSAH = 1-NSLWIDE in DM version.
24 ! NDGSAFPH=1-NFPWIDE in DM version.
25 ! NDGENG = NDGLG+NDGSUR
26 ! NDGENL = Number of latitude rows for which this process has grid
27 ! point calculations to perform.
28 ! NDGENH = NDGENL+NSLWIDE in DM version.
29 ! NDGENFPH=NDGENL+NFPWIDE in DM version.
30 ! NDGUNG : first row of the area of interest in Aladin
31 ! = NDGSAG in the global model
32 ! NDGUXG : last row of the area of interest in Aladin
33 ! = NDGENG in the global model
34 ! NDGUNL : local first row in C+I zone in distributed memory Aladin
35 ! NDGUXL : local last row in C+I zone in distributed memory Aladin
36 ! NDLON : length of a row of latitude near equator
37 ! NDSUR1 : over dimensioning of NDLON for technical reasons (at least 2)
38 ! NDLSUR = NDLON+NDSUR1
39 ! NDLSM = NDLSUR-1
40 ! NDLUNG : first meridian of the area of interest in Aladin
41 ! = 1 in the global model
42 ! NDLUXG : last meridian of the area of interest in Aladin
43 ! = NDLON in the global model
44 ! NDLUNL : local first meridian in C+I zone in distributed memory Aladin
45 ! NDLUXL : local last meridian in C+I zone in distributed memory Aladin
46 ! NPROMA : working dimension for grid-point computations
47 ! NPROMB : working dimension for a 2nd call to DMN physics
48 ! NPROMC : working dimension for a 2nd call to DMN physics
49 ! NPROME : working dimension for ECMWF physics computations
50 ! NPROMM : working dimension for DMN physics computations
51 ! NPROMNH: working dimension for non hydrostatic
52 ! NPROMNH_GWADV: working dimension for non hydrostatic (arrays used only
53 ! when LGWADV=T)
54 ! NPROMP : working dimension for physics computations
55 ! NPROMV : working dimension for variational gridpoint fields
56 ! NPROMVC: working dimension for some additional grid-point arrays
57 ! used only when "lvercor=.T.".
58 ! NGPBLKS: number of grid point NPROMA-blocks.
59 ! LOPTPROMA : .TRUE. NPROMA will be optimised
60 ! : .FALSE. NPROMA will not be optimised (forced by
61 ! : negative NPROMA in namelist)
62 
63 INTEGER(KIND=JPIM) :: ndglg
64 INTEGER(KIND=JPIM) :: ndgll
65 INTEGER(KIND=JPIM) :: ndgnh
66 INTEGER(KIND=JPIM) :: ndgsur
67 INTEGER(KIND=JPIM) :: ndgsag
68 INTEGER(KIND=JPIM) :: ndgsal
69 INTEGER(KIND=JPIM) :: ndgsah
70 INTEGER(KIND=JPIM) :: ndgsafph
71 INTEGER(KIND=JPIM) :: ndgeng
72 INTEGER(KIND=JPIM) :: ndgenl
73 INTEGER(KIND=JPIM) :: ndgenh
74 INTEGER(KIND=JPIM) :: ndgenfph
75 INTEGER(KIND=JPIM) :: ndgung
76 INTEGER(KIND=JPIM) :: ndguxg
77 INTEGER(KIND=JPIM) :: ndgunl
78 INTEGER(KIND=JPIM) :: ndguxl
79 INTEGER(KIND=JPIM) :: ndlon
80 INTEGER(KIND=JPIM) :: ndsur1
81 INTEGER(KIND=JPIM) :: ndlsur
82 INTEGER(KIND=JPIM) :: ndlsm
83 INTEGER(KIND=JPIM) :: ndlung
84 INTEGER(KIND=JPIM) :: ndluxg
85 INTEGER(KIND=JPIM),ALLOCATABLE:: ndlunl(:,:)
86 INTEGER(KIND=JPIM),ALLOCATABLE:: ndluxl(:,:)
87 INTEGER(KIND=JPIM) :: nproma
88 INTEGER(KIND=JPIM) :: npromb
89 INTEGER(KIND=JPIM) :: npromc
90 INTEGER(KIND=JPIM) :: nprome
91 INTEGER(KIND=JPIM) :: npromm
92 INTEGER(KIND=JPIM) :: npromnh
93 INTEGER(KIND=JPIM) :: npromnh_gwadv
94 INTEGER(KIND=JPIM) :: npromp
95 INTEGER(KIND=JPIM) :: npromv
96 INTEGER(KIND=JPIM) :: npromvc
97 INTEGER(KIND=JPIM) :: ngpblks
98 LOGICAL :: loptproma
99 
100 ! === VERTICAL RESOLUTION =====================================================
101 
102 ! NFLEVG : number of levels in grid point space
103 ! NFLEVL : number of levels in Fourier and Legendre space
104 ! NFLEVLMX : maximum NFLEVL among all PEs
105 ! NFLSUR : over dimensioning of NFLEVL for technical reasons, always odd
106 ! NFLSUL : number of additional levels for semi-lagrangian
107 ! NFLSA = 1 -NFLSUL
108 ! NFLEN = NFLEVG+NFLSUL
109 
110 INTEGER(KIND=JPIM) :: nflevl
111 INTEGER(KIND=JPIM) :: nflevlmx
112 INTEGER(KIND=JPIM) :: nflevg
113 INTEGER(KIND=JPIM) :: nflsur
114 INTEGER(KIND=JPIM) :: nflsul
115 INTEGER(KIND=JPIM) :: nflsa
116 INTEGER(KIND=JPIM) :: nflen
117 
118 ! === NUMBER OF FIELDS ========================================================
119 
120 ! NFTHER : number of spectral thermodynamic variables
121 ! NFAUX : number of auxillary variables in t+dt array
122 ! NF3D = number of 3D fields in the state of the model
123 ! NFD2D : number of 2D fields in the dynamics
124 ! NFC2D : number of 2D fields in the boundaries
125 ! NPPM : Number of interpolation methods in post-processing
126 ! NFPPYX : Maximum number of modern dyn.met. post-processed fields
127 ! NFPPYE : as long as SUPP is called after SUDIM/SUALLO,
128 ! NFPPYE = 1, if LMDYPP = .FALSE. (after SUALLO)
129 ! NFPPYE = NFPPYX if LMDYPP = .TRUE., but it could become more flex
130 ! NFGPNH : number of (3D) fields in non hydrostatic gridpoint
131 ! NS3D : number of 3D fields in spectral space
132 ! NS2D : number of 2D fields in spectral space
133 ! NS1D : number of 1D fields in spectral space (for Aladin consistency -CF)
134 ! NSAUX : dimension of auxillary array == NFAUX
135 
136 INTEGER(KIND=JPIM) :: nfther
137 INTEGER(KIND=JPIM) :: nfaux
138 INTEGER(KIND=JPIM) :: nf3d
139 INTEGER(KIND=JPIM) :: nfd2d
140 INTEGER(KIND=JPIM) :: nfc2d
141 INTEGER(KIND=JPIM) :: nppm
142 INTEGER(KIND=JPIM) :: nfppyx
143 INTEGER(KIND=JPIM) :: nfppye
144 INTEGER(KIND=JPIM) :: nfgpnh
145 INTEGER(KIND=JPIM) :: ns3d
146 INTEGER(KIND=JPIM) :: ns2d
147 INTEGER(KIND=JPIM) :: ns1d
148 INTEGER(KIND=JPIM) :: nsaux
149 
150 ! === GRID POINT ARRAYS =======================================================
151 
152 ! LVOR : controls the allocation of vorticity
153 ! LADER : controls the allocation of vor div and derivatives
154 ! LUVDER: controls the allocation of derivatives for u and v
155 ! LSPT : .TRUE. if temperature variable as spectral field
156 
157 LOGICAL :: lvor
158 LOGICAL :: lader
159 LOGICAL :: luvder
160 LOGICAL :: lspt
161 
162 ! === SPECTRAL SPACE ==========================================================
163 
164 ! NSMAX : truncation order
165 ! NMSMAX : truncation order in longitude
166 ! NVARMAX: truncation order in 3d-var distributed direction
167 ! this is a priori longitude, so that nvarmax = nsmax in Arp/IFS
168 ! and nvarmax = nmsmax in Aladin
169 ! NSEFRE : number of degrees of freedom in the spectral space
170 ! NSPECG : number of complex spectral coefficients (global)
171 ! NSPEC2G = 2*NSPECG
172 ! NSPEC : number of complex spectral coefficients (local, i.e. on this PE)
173 ! NSPEC2 = 2*NSPEC
174 ! NSPEC2MX : maximun NSPEC2 among all PEs
175 ! NSMIN : lower troncature for configurations 911 and 912.
176 ! NTCMAX : truncation order for transmission coefficients.
177 ! NMTCMAX: truncation order for transmission coefficients in longitude.
178 ! NCMAX : upper trunc. order for dilatation matrices (used in TRAGEO, fullpos)
179 ! NCPEC : number of complex spectral coefficients for truncation NCMAX (local)
180 ! NCPEC2 : 2*NCPEC, where NCPEC (local)
181 ! NXMAX : truncation order for NMI
182 ! NXPECG : number of complex spectral coefficients for NMI (global)
183 ! NXPEC : number of complex spectral coefficients for NMI (local)
184 ! NTMAX : truncation order for tendencies (on n, m<= NSMAX)
185 ! NTPEC2 : 2*'number of complex spectral coefficients' for tendencies
186 
187 INTEGER(KIND=JPIM) :: nsmax
188 INTEGER(KIND=JPIM) :: nmsmax
189 INTEGER(KIND=JPIM) :: nvarmax
190 INTEGER(KIND=JPIM) :: nsefre
191 INTEGER(KIND=JPIM) :: nspecg
192 INTEGER(KIND=JPIM) :: nspec2g
193 INTEGER(KIND=JPIM) :: nspec
194 INTEGER(KIND=JPIM) :: nspec2
195 INTEGER(KIND=JPIM) :: nspec2mx
196 INTEGER(KIND=JPIM) :: nsmin
197 INTEGER(KIND=JPIM) :: ntcmax
198 INTEGER(KIND=JPIM) :: nmtcmax
199 INTEGER(KIND=JPIM) :: ncmax
200 INTEGER(KIND=JPIM) :: ncpec
201 INTEGER(KIND=JPIM) :: ncpec2
202 INTEGER(KIND=JPIM) :: nxmax
203 INTEGER(KIND=JPIM) :: nxpecg
204 INTEGER(KIND=JPIM) :: nxpec
205 INTEGER(KIND=JPIM) :: ntmax
206 INTEGER(KIND=JPIM) :: ntpec2
207 
208 ! === DISTRIBUTED MEMORY DIMENSIONS ===========================================
209 
210 ! NUMP : Number of spectral waves handled by this processor
211 ! NUMXP : Same as NUMP, but related to NXMAX
212 ! NUMCP : Same as NUMP, but related to NCMAX
213 ! NUMTP : Same as NUMP, but related to NTMAX
214 
215 INTEGER(KIND=JPIM) :: nump
216 INTEGER(KIND=JPIM) :: numxp
217 INTEGER(KIND=JPIM) :: numcp
218 INTEGER(KIND=JPIM) :: numtp
219 
220 ! === OTHER QUANTITIES ========================================================
221 
222 ! NRLEVX: dimension of NVAUTF in YOMGEM.
223 ! NUNDEFLD: index value for unused/undefined fields (default=-9999)
224 ! : should be set to 1 when using compiler subscript checking
225 
226 INTEGER(KIND=JPIM) :: nrlevx
227 INTEGER(KIND=JPIM) :: nundefld
228 
229 ! ------------------------------------------------------------------
230 !$OMP THREADPRIVATE(lader,loptproma,lspt,luvder,lvor,ncmax,ncpec,ncpec2,ndgenfph)
231 !$OMP THREADPRIVATE(ndgeng,ndgenh,ndgenl,ndglg,ndgll,ndgnh,ndgsafph,ndgsag,ndgsah)
232 !$OMP THREADPRIVATE(ndgsal,ndgsur,ndgung,ndgunl,ndguxg,ndguxl,ndlon,ndlsm,ndlsur)
233 !$OMP THREADPRIVATE(ndlung,ndluxg,ndsur1,nf3d,nfaux,nfc2d,nfd2d,nfgpnh,nflen,nflevg)
234 !$OMP THREADPRIVATE(nflevl,nflevlmx,nflsa,nflsul,nflsur,nfppye,nfppyx,nfther,ngpblks)
235 !$OMP THREADPRIVATE(nmsmax,nmtcmax,nppm,nproma,npromb,npromc,nprome,npromm,npromnh)
236 !$OMP THREADPRIVATE(npromnh_gwadv,npromp,npromv,npromvc,nrlevx,ns1d,ns2d,ns3d,nsaux)
237 !$OMP THREADPRIVATE(nsefre,nsmax,nsmin,nspec,nspec2,nspec2g,nspec2mx,nspecg,ntcmax,ntmax)
238 !$OMP THREADPRIVATE(ntpec2,numcp,nump,numtp,numxp,nundefld,nvarmax,nxmax,nxpec,nxpecg)
239 !$OMP THREADPRIVATE(ndlunl,ndluxl)
240 END MODULE yomdim
integer(kind=jpim) ndgsah
Definition: yomdim.F90:69
integer(kind=jpim) nfppye
Definition: yomdim.F90:143
logical loptproma
Definition: yomdim.F90:98
integer(kind=jpim) nundefld
Definition: yomdim.F90:227
integer(kind=jpim) numtp
Definition: yomdim.F90:218
integer(kind=jpim) ndlung
Definition: yomdim.F90:83
integer(kind=jpim) nxpec
Definition: yomdim.F90:204
integer(kind=jpim) nfaux
Definition: yomdim.F90:137
integer(kind=jpim) nmtcmax
Definition: yomdim.F90:198
integer(kind=jpim) nsaux
Definition: yomdim.F90:148
integer(kind=jpim) ncpec
Definition: yomdim.F90:200
integer(kind=jpim) ndguxg
Definition: yomdim.F90:76
integer(kind=jpim) ndgll
Definition: yomdim.F90:64
integer(kind=jpim), dimension(:,:), allocatable ndlunl
Definition: yomdim.F90:85
integer(kind=jpim) nrlevx
Definition: yomdim.F90:226
integer(kind=jpim) nfgpnh
Definition: yomdim.F90:144
integer(kind=jpim) ndgnh
Definition: yomdim.F90:65
integer(kind=jpim) nproma
Definition: yomdim.F90:87
logical lader
Definition: yomdim.F90:158
logical lvor
Definition: yomdim.F90:157
integer(kind=jpim) ndgung
Definition: yomdim.F90:75
logical luvder
Definition: yomdim.F90:159
integer(kind=jpim) nfc2d
Definition: yomdim.F90:140
integer(kind=jpim) ntcmax
Definition: yomdim.F90:197
integer(kind=jpim) ndgsafph
Definition: yomdim.F90:70
integer(kind=jpim) ndgenh
Definition: yomdim.F90:73
integer(kind=jpim) ndluxg
Definition: yomdim.F90:84
integer(kind=jpim) npromc
Definition: yomdim.F90:89
integer(kind=jpim) ndgsal
Definition: yomdim.F90:68
integer(kind=jpim) npromb
Definition: yomdim.F90:88
integer(kind=jpim) ndlon
Definition: yomdim.F90:79
integer(kind=jpim) nflevg
Definition: yomdim.F90:112
integer(kind=jpim) npromv
Definition: yomdim.F90:95
integer(kind=jpim) nf3d
Definition: yomdim.F90:138
integer(kind=jpim) nspec2
Definition: yomdim.F90:194
integer(kind=jpim) nvarmax
Definition: yomdim.F90:189
integer(kind=jpim) nspec
Definition: yomdim.F90:193
integer(kind=jpim) nspecg
Definition: yomdim.F90:191
integer(kind=jpim) nsmax
Definition: yomdim.F90:187
integer(kind=jpim) numxp
Definition: yomdim.F90:216
integer(kind=jpim) ndglg
Definition: yomdim.F90:63
integer, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim) nxpecg
Definition: yomdim.F90:203
integer(kind=jpim) ns3d
Definition: yomdim.F90:145
integer(kind=jpim) ntpec2
Definition: yomdim.F90:206
logical lspt
Definition: yomdim.F90:160
integer(kind=jpim) nflevl
Definition: yomdim.F90:110
integer(kind=jpim) nflen
Definition: yomdim.F90:116
integer(kind=jpim) ndgenl
Definition: yomdim.F90:72
integer(kind=jpim) nfd2d
Definition: yomdim.F90:139
Definition: yomdim.F90:1
integer(kind=jpim) ndgenfph
Definition: yomdim.F90:74
integer(kind=jpim) numcp
Definition: yomdim.F90:217
integer(kind=jpim) ndlsm
Definition: yomdim.F90:82
integer(kind=jpim) nsmin
Definition: yomdim.F90:196
integer(kind=jpim) nfppyx
Definition: yomdim.F90:142
integer(kind=jpim) nmsmax
Definition: yomdim.F90:188
integer(kind=jpim) ndgunl
Definition: yomdim.F90:77
integer(kind=jpim) ntmax
Definition: yomdim.F90:205
integer(kind=jpim) nump
Definition: yomdim.F90:215
integer(kind=jpim) npromp
Definition: yomdim.F90:94
integer(kind=jpim) ns2d
Definition: yomdim.F90:146
integer(kind=jpim) npromm
Definition: yomdim.F90:91
integer(kind=jpim) nflsur
Definition: yomdim.F90:113
integer(kind=jpim) ns1d
Definition: yomdim.F90:147
integer(kind=jpim) ncmax
Definition: yomdim.F90:199
integer(kind=jpim) nxmax
Definition: yomdim.F90:202
integer(kind=jpim) npromnh_gwadv
Definition: yomdim.F90:93
integer(kind=jpim) ndlsur
Definition: yomdim.F90:81
integer(kind=jpim) nspec2mx
Definition: yomdim.F90:195
integer(kind=jpim) nppm
Definition: yomdim.F90:141
integer(kind=jpim) ncpec2
Definition: yomdim.F90:201
integer(kind=jpim) ndguxl
Definition: yomdim.F90:78
integer(kind=jpim) ndgsag
Definition: yomdim.F90:67
integer(kind=jpim) npromvc
Definition: yomdim.F90:96
integer(kind=jpim) nsefre
Definition: yomdim.F90:190
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) nflsul
Definition: yomdim.F90:114
integer(kind=jpim) ngpblks
Definition: yomdim.F90:97
integer(kind=jpim) npromnh
Definition: yomdim.F90:92
integer(kind=jpim) ndgsur
Definition: yomdim.F90:66
integer(kind=jpim) ndsur1
Definition: yomdim.F90:80
integer(kind=jpim) nfther
Definition: yomdim.F90:136
integer(kind=jpim) nprome
Definition: yomdim.F90:90
integer(kind=jpim) ndgeng
Definition: yomdim.F90:71
integer(kind=jpim), dimension(:,:), allocatable ndluxl
Definition: yomdim.F90:86
integer(kind=jpim) nspec2g
Definition: yomdim.F90:192
integer(kind=jpim) nflevlmx
Definition: yomdim.F90:111
integer(kind=jpim) nflsa
Definition: yomdim.F90:115