[3331] | 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 |
---|