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 |
---|