Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:41:59 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
5280ebf5f3 Ed H*0001 #include "MNC_OPTIONS.h"
                0002       
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
                0005 C     !ROUTINE: MNC_CW_INIT
                0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE MNC_CW_INIT( 
                0009      I     sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr, 
                0010      I     myThid )
                0011 
                0012 C     !DESCRIPTION:
                0013 C     Create the pre-defined grid types and variable types.
                0014 
                0015 C     The grid type is a character string that encodes the presence and
                0016 C     types associated with the four possible dimensions.  The character
                0017 C     string follows the format
                0018 C     \begin{center}
                0019 C       \texttt{H0\_H1\_H2\_\_V\_\_T}
                0020 C     \end{center}
                0021 C     where the terms \textit{H0}, \textit{H1}, \textit{H2}, \textit{V},
                0022 C     \textit{T} can be almost any combination of the following:
                0023 C     \begin{center}
                0024 C       \begin{tabular}[h]{|ccc|c|c|}\hline
                0025 C         \multicolumn{3}{|c|}{Horizontal} & Vertical & Time \\
                0026 C         \textit{H0}: location & \textit{H1}: dimensions & \textit{H2}: halo 
                0027 C               & \textit{V}: location & \textit{T}: level  \\\hline
                0028 C         \texttt{-} & xy & Hn & \texttt{-} & \texttt{-} \\
                0029 C         U  &  x  &  Hy  &  i  &  t  \\
                0030 C         V  &  y  &      &  c  &     \\
                0031 C         Cen  &   &      &     &     \\
                0032 C         Cor  &   &      &     &     \\\hline
                0033 C       \end{tabular}
                0034 C     \end{center}
                0035 
                0036 
                0037 C     !USES:
                0038       implicit none
07155994b8 Mart*0039 #include "MNC_COMMON.h"
5280ebf5f3 Ed H*0040 #include "EEPARAMS.h"
                0041 
                0042 C     !INPUT PARAMETERS:
                0043       integer myThid
                0044       integer sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr
                0045 CEOP
                0046 
                0047 C     !LOCAL VARIABLES:
                0048       integer CW_MAX_LOC
2cc3b69a26 Ed H*0049       parameter ( CW_MAX_LOC = 6 )
5280ebf5f3 Ed H*0050       integer i, ihorz,ihsub,ivert,itime,ihalo, is,ih, n,ntot
                0051       integer ndim, ncomb, nvch
                0052       character*(MNC_MAX_CHAR) name
                0053       character*(MNC_MAX_CHAR) dn(CW_MAX_LOC)
                0054       character*(5) horz_dat(CW_MAX_LOC), hsub_dat(CW_MAX_LOC),
                0055      &     vert_dat(CW_MAX_LOC), time_dat(CW_MAX_LOC), 
                0056      &     halo_dat(CW_MAX_LOC)
                0057       integer dim(CW_MAX_LOC), ib(CW_MAX_LOC), ie(CW_MAX_LOC)
                0058 
                0059 C     Functions
                0060       integer ILNBLNK
                0061       external ILNBLNK
                0062 
                0063 C     ......12345....12345....12345....12345....12345...
                0064       data horz_dat /
2cc3b69a26 Ed H*0065      &     '-    ', 'U    ', 'V    ', 'Cen  ', 'Cor  ', '     '  /
5280ebf5f3 Ed H*0066       data hsub_dat /
2cc3b69a26 Ed H*0067      &     'xy   ', 'x    ', 'y    ', '-    ', '     ', '     '  /
5280ebf5f3 Ed H*0068       data halo_dat /
2cc3b69a26 Ed H*0069      &     'Hn   ', 'Hy   ', '--   ', '     ', '     ', '     '  /
5280ebf5f3 Ed H*0070       data vert_dat /
2cc3b69a26 Ed H*0071      &     '-    ', 'C    ', 'I    ', 'L    ', 'U    ', 'S    '  /
5280ebf5f3 Ed H*0072       data time_dat /
2cc3b69a26 Ed H*0073      &     '-    ', 't    ', '     ', '     ', '     ', '     '  /
5280ebf5f3 Ed H*0074 
d77e828db7 Ed H*0075 C     Create the types
5280ebf5f3 Ed H*0076       ncomb = 0
                0077       DO ihorz = 1,5
                0078         DO is = 1,3
                0079           DO ih = 1,2
                0080             
                0081 C           Loop just ONCE if the Horiz component is "-"
                0082             ihsub = is
                0083             ihalo = ih
                0084             IF (ihorz .EQ. 1) THEN
                0085               IF ((is .EQ. 1) .AND. (ih .EQ. 1)) THEN
                0086                 ihsub = 4
                0087                 ihalo = 3
                0088               ELSE
                0089                 GOTO 10
                0090               ENDIF
                0091             ENDIF
                0092             
2cc3b69a26 Ed H*0093             DO ivert = 1,6
5280ebf5f3 Ed H*0094               DO itime = 1,2
                0095                 
                0096 C               horiz and hsub
                0097                 name(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
                0098                 n = ILNBLNK(horz_dat(ihorz))
                0099                 name(1:n) = horz_dat(ihorz)(1:n)
                0100                 ntot = n + 1              
                0101                 name(ntot:ntot) = '_'
                0102                 n = ILNBLNK(hsub_dat(ihsub))
                0103                 name((ntot+1):(ntot+n)) = hsub_dat(ihsub)(1:n)
                0104                 ntot = ntot + n
                0105 
                0106 C               halo, vert, and time
                0107                 write(name((ntot+1):(ntot+5)), '(a1,2a2)')
                0108      &               '_', halo_dat(ihalo)(1:2), '__'
                0109                 nvch = ILNBLNK(vert_dat(ivert))
                0110                 n = ntot+6+nvch-1
                0111                 name((ntot+6):(n)) = vert_dat(ivert)(1:nvch)
                0112                 write(name((n+1):(n+3)), '(a2,a1)') 
                0113      &               '__', time_dat(itime)(1:1)
                0114 
                0115                 ndim = 0
                0116                 DO i = 1,CW_MAX_LOC
                0117                   dn(i)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
                0118                   dim(i) = 0
                0119                   ib(i) = 0
                0120                   ie(i) = 0
                0121                 ENDDO
                0122 
                0123 C               Horizontal dimensions
                0124                 IF (halo_dat(ihalo)(1:5) .EQ. 'Hn   ') THEN
                0125 
                0126                   IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
                0127                     ndim = ndim + 1
                0128                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
                0129      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
                0130                       dn(ndim)(1:1) = 'X'
                0131                       dim(ndim) = sNx + 2*OLx
                0132                       ib(ndim)  = OLx + 1
                0133                       ie(ndim)  = OLx + sNx
                0134                     ENDIF
                0135                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
                0136      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
                0137                       dn(ndim)(1:3) = 'Xp1'
                0138                       dim(ndim) = sNx + 2*OLx
                0139                       ib(ndim)  = OLx + 1
                0140                       ie(ndim)  = OLx + sNx + 1
                0141                     ENDIF
                0142                   ENDIF
                0143                   IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
                0144      &                 .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
                0145                     ndim = ndim + 1
                0146                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
                0147      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
                0148                       dn(ndim)(1:1) = 'Y'
                0149                       dim(ndim) = sNy + 2*OLy
                0150                       ib(ndim)  = OLy + 1
                0151                       ie(ndim)  = OLy + sNy
                0152                     ENDIF
                0153                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
                0154      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
                0155                       dn(ndim)(1:3) = 'Yp1'
                0156                       dim(ndim) = sNy + 2*OLy
                0157                       ib(ndim)  = OLy + 1
                0158                       ie(ndim)  = OLy + sNy + 1
                0159                     ENDIF
                0160                   ENDIF
                0161 
                0162                 ELSEIF (halo_dat(ihalo)(1:5) .EQ. 'Hy   ') THEN
                0163 
                0164                   IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
                0165                     ndim = ndim + 1
                0166                     dn(ndim)(1:3) = 'Xwh'
                0167                     dim(ndim) = sNx + 2*OLx
                0168                     ib(ndim)  = 1
                0169                     ie(ndim)  = sNx + 2*OLx
                0170                   ENDIF
                0171                   IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
                0172      &                 .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
                0173                     ndim = ndim + 1
                0174                     dn(ndim)(1:3) = 'Ywh'
                0175                     dim(ndim) = sNy + 2*OLy
                0176                     ib(ndim)  = 1
                0177                     ie(ndim)  = sNy + 2*OLy
                0178                   ENDIF
                0179 
                0180                 ENDIF
                0181 
                0182 C               Vertical dimension
                0183                 IF (vert_dat(ivert)(1:1) .EQ. 'C') THEN
                0184                   ndim = ndim + 1
                0185                   dn(ndim)(1:1) = 'Z'
                0186                   dim(ndim) = Nr
                0187                   ib(ndim)  = 1
                0188                   ie(ndim)  = Nr
                0189                 ENDIF
                0190                 IF (vert_dat(ivert)(1:1) .EQ. 'I') THEN
                0191                   ndim = ndim + 1
                0192                   dn(ndim)(1:3) = 'Zp1'
                0193                   dim(ndim) = Nr + 1
                0194                   ib(ndim)  = 1
                0195                   ie(ndim)  = Nr + 1
                0196                 ENDIF
2cc3b69a26 Ed H*0197                 IF (vert_dat(ivert)(1:1) .EQ. 'L') THEN
                0198                   ndim = ndim + 1
                0199                   dn(ndim)(1:2) = 'Zl'
                0200                   dim(ndim) = Nr
                0201                   ib(ndim)  = 1
                0202                   ie(ndim)  = Nr
                0203                 ENDIF
                0204                 IF (vert_dat(ivert)(1:1) .EQ. 'U') THEN
                0205                   ndim = ndim + 1
                0206                   dn(ndim)(1:2) = 'Zu'
                0207                   dim(ndim) = Nr
                0208                   ib(ndim)  = 1
                0209                   ie(ndim)  = Nr
                0210                 ENDIF
                0211                 IF (vert_dat(ivert)(1:1) .EQ. 'M') THEN
                0212                   ndim = ndim + 1
                0213                   dn(ndim)(1:3) = 'Zm1'
                0214                   dim(ndim) = Nr - 1
                0215                   ib(ndim)  = 1
                0216                   ie(ndim)  = Nr - 1
                0217                 ENDIF
5280ebf5f3 Ed H*0218 
                0219 C               Time dimension
                0220                 IF (time_dat(itime)(1:1) .EQ. 't') THEN
                0221                   ndim = ndim + 1
                0222                   dn(ndim)(1:1) = 'T'
                0223                   dim(ndim) = -1
                0224                   ib(ndim)  = 1
                0225                   ie(ndim)  = 1
                0226                 ENDIF
                0227 
                0228                 IF (ndim .GT. 0) THEN
                0229 #ifdef MNC_DEBUG
                0230                   ncomb = ncomb + 1
                0231                   write(*,'(i4,a3,a15,i3,a3,5i4,a4,5i4,a4,5i4,6a4)')
                0232      &                 ncomb, ' : ', name(1:15), ndim, 
                0233      &                 ' : ', (dim(i), i=1,5), 
                0234      &                 '  | ', (ib(i), i=1,5),
                0235      &                 '  | ', (ie(i), i=1,5),
                0236      &                 '  | ', (dn(i)(1:4), i=1,5)
                0237 #endif
                0238 
                0239                   CALL MNC_CW_ADD_GNAME(name, ndim, 
                0240      &                 dim, dn, ib, ie, myThid)
                0241                 ENDIF
                0242 
                0243               ENDDO
                0244             ENDDO
                0245 
                0246  10         CONTINUE
                0247           ENDDO
                0248         ENDDO
                0249       ENDDO
                0250       
                0251       RETURN
                0252       END
                0253 
                0254 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|