Back to home page

MITgcm

 
 

    


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

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
e88bb90518 Ed H*0001 #include "LAND_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
                0005 C     !ROUTINE: LAND_MNC_INIT
                0006 
                0007 C     !INTERFACE:
                0008       SUBROUTINE LAND_MNC_INIT( 
                0009      I     sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nland_lev, 
                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 C     !USES:
                0037       implicit none
                0038 #ifdef ALLOW_MNC
51f3863fef Mart*0039 #include "MNC_COMMON.h"
e88bb90518 Ed H*0040 #endif  /*  ALLOW_MNC  */
                0041 #include "EEPARAMS.h"
                0042 
                0043 C     !INPUT PARAMETERS:
                0044       integer myThid
                0045       integer sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy
                0046       integer Nland_lev
                0047 CEOP
                0048 
                0049 #ifdef ALLOW_MNC
                0050 
                0051 C     !LOCAL VARIABLES:
                0052       integer CW_MAX_LOC
                0053       parameter ( CW_MAX_LOC = 5 )
                0054       integer i, ihorz,ihsub,ivert,itime,ihalo, is,ih, n,ntot
                0055       integer ndim, ncomb, nvch
                0056       character*(MNC_MAX_CHAR) name
                0057       character*(MNC_MAX_CHAR) dn(CW_MAX_LOC)
                0058       character*(5) horz_dat(CW_MAX_LOC), hsub_dat(CW_MAX_LOC),
                0059      &     vert_dat(CW_MAX_LOC), time_dat(CW_MAX_LOC), 
                0060      &     halo_dat(CW_MAX_LOC)
                0061       integer dim(CW_MAX_LOC), ib(CW_MAX_LOC), ie(CW_MAX_LOC)
                0062 
                0063 C     Functions
                0064       integer ILNBLNK
                0065       external ILNBLNK
                0066 
                0067 C     ......12345....12345....12345....12345....12345...
                0068       data horz_dat /
                0069      &     '-    ', 'U    ', 'V    ', 'Cen  ', 'Cor  '  /
                0070       data hsub_dat /
                0071      &     'xy   ', 'x    ', 'y    ', '-    ', '     '  /
                0072       data halo_dat /
                0073      &     'Hn   ', 'Hy   ', '--   ', '     ', '     '  /
                0074       data vert_dat /
                0075      &     'Zland', '     ', '     ', '     ', '     '  /
                0076       data time_dat /
                0077      &     '-    ', 't    ', '     ', '     ', '     '  /
                0078 
                0079 
                0080       ncomb = 0
                0081       DO ihorz = 1,5
                0082         DO is = 1,3
                0083           DO ih = 1,2
                0084             
                0085 C           Loop just ONCE if the Horiz component is "-"
                0086             ihsub = is
                0087             ihalo = ih
                0088             IF (ihorz .EQ. 1) THEN
                0089               IF ((is .EQ. 1) .AND. (ih .EQ. 1)) THEN
                0090                 ihsub = 4
                0091                 ihalo = 3
                0092               ELSE
                0093                 GOTO 10
                0094               ENDIF
                0095             ENDIF
                0096             
                0097             DO ivert = 1,1
                0098               DO itime = 1,2
                0099                 
                0100 C               horiz and hsub
                0101                 name(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
                0102                 n = ILNBLNK(horz_dat(ihorz))
                0103                 name(1:n) = horz_dat(ihorz)(1:n)
                0104                 ntot = n + 1              
                0105                 name(ntot:ntot) = '_'
                0106                 n = ILNBLNK(hsub_dat(ihsub))
                0107                 name((ntot+1):(ntot+n)) = hsub_dat(ihsub)(1:n)
                0108                 ntot = ntot + n
                0109 
                0110 C               halo, vert, and time
                0111                 write(name((ntot+1):(ntot+5)), '(a1,2a2)')
                0112      &               '_', halo_dat(ihalo)(1:2), '__'
                0113                 nvch = ILNBLNK(vert_dat(ivert))
                0114                 n = ntot+6+nvch-1
                0115                 name((ntot+6):(n)) = vert_dat(ivert)(1:nvch)
                0116                 write(name((n+1):(n+3)), '(a2,a1)') 
                0117      &               '__', time_dat(itime)(1:1)
                0118 
                0119                 ndim = 0
                0120                 DO i = 1,CW_MAX_LOC
                0121                   dn(i)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
                0122                   dim(i) = 0
                0123                   ib(i) = 0
                0124                   ie(i) = 0
                0125                 ENDDO
                0126 
                0127 C               Horizontal dimensions
                0128                 IF (halo_dat(ihalo)(1:5) .EQ. 'Hn   ') THEN
                0129 
                0130                   IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
                0131                     ndim = ndim + 1
                0132                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
                0133      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
                0134                       dn(ndim)(1:1) = 'X'
                0135                       dim(ndim) = sNx + 2*OLx
                0136                       ib(ndim)  = OLx + 1
                0137                       ie(ndim)  = OLx + sNx
                0138                     ENDIF
                0139                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
                0140      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
                0141                       dn(ndim)(1:3) = 'Xp1'
                0142                       dim(ndim) = sNx + 2*OLx
                0143                       ib(ndim)  = OLx + 1
                0144                       ie(ndim)  = OLx + sNx + 1
                0145                     ENDIF
                0146                   ENDIF
                0147                   IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
                0148      &                 .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
                0149                     ndim = ndim + 1
                0150                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
                0151      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
                0152                       dn(ndim)(1:1) = 'Y'
                0153                       dim(ndim) = sNy + 2*OLy
                0154                       ib(ndim)  = OLy + 1
                0155                       ie(ndim)  = OLy + sNy
                0156                     ENDIF
                0157                     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
                0158      &                   .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
                0159                       dn(ndim)(1:3) = 'Yp1'
                0160                       dim(ndim) = sNy + 2*OLy
                0161                       ib(ndim)  = OLy + 1
                0162                       ie(ndim)  = OLy + sNy + 1
                0163                     ENDIF
                0164                   ENDIF
                0165 
                0166                 ELSEIF (halo_dat(ihalo)(1:5) .EQ. 'Hy   ') THEN
                0167 
                0168                   IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
                0169                     ndim = ndim + 1
                0170                     dn(ndim)(1:3) = 'Xwh'
                0171                     dim(ndim) = sNx + 2*OLx
                0172                     ib(ndim)  = 1
                0173                     ie(ndim)  = sNx + 2*OLx
                0174                   ENDIF
                0175                   IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
                0176      &                 .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
                0177                     ndim = ndim + 1
                0178                     dn(ndim)(1:3) = 'Ywh'
                0179                     dim(ndim) = sNy + 2*OLy
                0180                     ib(ndim)  = 1
                0181                     ie(ndim)  = sNy + 2*OLy
                0182                   ENDIF
                0183 
                0184                 ENDIF
                0185 
                0186 C               Vertical dimension
                0187                 IF (vert_dat(ivert)(1:5) .EQ. 'Zland') THEN
                0188                   ndim = ndim + 1
                0189                   dn(ndim)(1:5) = 'Zland'
                0190                   dim(ndim) = Nland_lev
                0191                   ib(ndim)  = 1
                0192                   ie(ndim)  = Nland_lev
                0193                 ENDIF
                0194 
                0195 C               Time dimension
                0196                 IF ( (time_dat(itime)(1:1) .EQ. 't')
                0197      &               .and. (ndim .ne. 0) ) THEN
                0198                   ndim = ndim + 1
                0199                   dn(ndim)(1:1) = 'T'
                0200                   dim(ndim) = -1
                0201                   ib(ndim)  = 1
                0202                   ie(ndim)  = 1
                0203                 ENDIF
                0204 
                0205                 IF (ndim .GT. 0) THEN
                0206 
                0207                   CALL MNC_CW_ADD_GNAME(name, ndim, 
                0208      &                 dim, dn, ib, ie, myThid)
                0209 
                0210                 ENDIF
                0211 
                0212               ENDDO
                0213             ENDDO
                0214 
                0215  10         CONTINUE
                0216           ENDDO
                0217         ENDDO
                0218       ENDDO
                0219 
cf701ea57b Ed H*0220 C     Now add the variable definitions
                0221       CALL MNC_CW_ADD_VNAME(
                0222      &     'land_groundT','Cen_xy_Hn__Zland__t',4,5,myThid)
                0223       CALL MNC_CW_ADD_VATTR_TEXT('land_groundT','units','---',myThid)
                0224 
                0225       CALL MNC_CW_ADD_VNAME(
                0226      &     'land_enthalp','Cen_xy_Hn__Zland__t',4,5,myThid)
                0227       CALL MNC_CW_ADD_VATTR_TEXT('land_enthalp','units','---',myThid)
                0228 
                0229       CALL MNC_CW_ADD_VNAME(
                0230      &     'land_groundW','Cen_xy_Hn__Zland__t',4,5,myThid)
                0231       CALL MNC_CW_ADD_VATTR_TEXT('land_groundW','units','---',myThid)
                0232 
                0233       CALL MNC_CW_ADD_VNAME('land_skinT','Cen_xy_Hn__-__t',3,4,myThid)
                0234       CALL MNC_CW_ADD_VATTR_TEXT('land_skinT','units','---',myThid)
                0235       CALL MNC_CW_ADD_VNAME('land_hSnow','Cen_xy_Hn__-__t',3,4,myThid)
                0236       CALL MNC_CW_ADD_VATTR_TEXT('land_hSnow','units','---',myThid)
                0237       CALL MNC_CW_ADD_VNAME('land_snAge','Cen_xy_Hn__-__t',3,4,myThid)
                0238       CALL MNC_CW_ADD_VATTR_TEXT('land_snAge','units','---',myThid)
                0239       CALL MNC_CW_ADD_VNAME('land_RunOff','Cen_xy_Hn__-__t',3,4,myThid)
                0240       CALL MNC_CW_ADD_VATTR_TEXT('land_RunOff','units','---',myThid)
                0241       CALL MNC_CW_ADD_VNAME('land_enRnOf','Cen_xy_Hn__-__t',3,4,myThid)
                0242       CALL MNC_CW_ADD_VATTR_TEXT('land_enRnOf','units','---',myThid)
                0243 
                0244       CALL MNC_CW_ADD_VNAME('land_HeatFx','Cen_xy_Hn__-__t',3,4,myThid)
                0245       CALL MNC_CW_ADD_VATTR_TEXT('land_HeatFx','units','---',myThid)
                0246       CALL MNC_CW_ADD_VNAME('land_frWaFx','Cen_xy_Hn__-__t',3,4,myThid)
                0247       CALL MNC_CW_ADD_VATTR_TEXT('land_frWaFx','units','---',myThid)
                0248       CALL MNC_CW_ADD_VNAME('land_EnWaFx','Cen_xy_Hn__-__t',3,4,myThid)
                0249       CALL MNC_CW_ADD_VATTR_TEXT('land_EnWaFx','units','---',myThid)
                0250 
e88bb90518 Ed H*0251 #endif  /*  ALLOW_MNC  */
                0252       
                0253       RETURN
                0254       END
                0255 
                0256 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|