Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:36:56 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
af2e1a21f9 Jean*0001 #include "PACKAGES_CONFIG.h"
f76021331f Jean*0002 #include "CPP_OPTIONS.h"
af2e1a21f9 Jean*0003 #ifdef ALLOW_EXCH2
                0004 # include "W2_OPTIONS.h"
                0005 #endif /* ALLOW_EXCH2 */
f76021331f Jean*0006 
                0007 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0008 CBOP
                0009 C     !ROUTINE: LOAD_GRID_SPACING
                0010 C     !INTERFACE:
                0011       SUBROUTINE LOAD_GRID_SPACING( myThid )
                0012 
                0013 C     !DESCRIPTION:
c57655c2bb Jean*0014 C     load grid-spacing (vector array) delX, delY, delR or delRc from file.
                0015 
f76021331f Jean*0016 C     !USES:
                0017       IMPLICIT NONE
                0018 #include "SIZE.h"
                0019 #include "EEPARAMS.h"
                0020 #include "PARAMS.h"
af2e1a21f9 Jean*0021 #ifdef ALLOW_EXCH2
                0022 # include "W2_EXCH2_SIZE.h"
                0023 # include "W2_EXCH2_TOPOLOGY.h"
                0024 #endif /* ALLOW_EXCH2 */
f15994caab Jean*0025 #include "GRID.h"
af2e1a21f9 Jean*0026 #include "SET_GRID.h"
f76021331f Jean*0027 
                0028 C     !INPUT/OUTPUT PARAMETERS:
c57655c2bb Jean*0029 C     myThid    :: my Thread Id. number
f76021331f Jean*0030       INTEGER myThid
                0031 CEOP
                0032 
95393692ef Jean*0033 C     !FUNCTIONS:
                0034       INTEGER  ILNBLNK
                0035       EXTERNAL ILNBLNK
                0036 
f76021331f Jean*0037 C     !LOCAL VARIABLES:
f15994caab Jean*0038 C     msgBuf    :: Informational/error message buffer
af2e1a21f9 Jean*0039 C     delYsum   :: delY full-domain sum
95393692ef Jean*0040       INTEGER iLen
2c9ae9ba9d Jean*0041       INTEGER i, j, n
af2e1a21f9 Jean*0042       INTEGER gridNx, gridNy
f76021331f Jean*0043       CHARACTER*(MAX_LEN_MBUF) msgBuf
af2e1a21f9 Jean*0044       _RL delYsum
f76021331f Jean*0045 
c57655c2bb Jean*0046 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0047 
af2e1a21f9 Jean*0048 #ifdef ALLOW_EXCH2
                0049       gridNx = exch2_mydNx(1)
                0050       gridNy = exch2_mydNy(1)
                0051 #else /* ALLOW_EXCH2 */
                0052       gridNx = Nx
                0053       gridNy = Ny
                0054 #endif /* ALLOW_EXCH2 */
                0055 
c57655c2bb Jean*0056       _BEGIN_MASTER( myThid )
                0057 
f15994caab Jean*0058 C--   X coordinate
f76021331f Jean*0059       IF ( delXFile .NE. ' ' ) THEN
                0060         iLen = ILNBLNK(delXFile)
af2e1a21f9 Jean*0061         CALL READ_GLVEC_RL( delXFile, ' ', delX, gridNx, 1, myThid )
f76021331f Jean*0062         WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
                0063      &    ' delX loaded from file: ', delXFile(1:iLen)
                0064         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
c57655c2bb Jean*0065      &                      SQUEEZE_RIGHT , myThid )
f76021331f Jean*0066       ENDIF
                0067 
f15994caab Jean*0068 C--   Y coordinate
f76021331f Jean*0069       IF ( delYFile .NE. ' ' ) THEN
                0070         iLen = ILNBLNK(delYFile)
af2e1a21f9 Jean*0071         CALL READ_GLVEC_RL( delYFile, ' ', delY, gridNy, 1, myThid )
f76021331f Jean*0072         WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
                0073      &    ' delY loaded from file: ', delYFile(1:iLen)
                0074         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
c57655c2bb Jean*0075      &                      SQUEEZE_RIGHT , myThid )
                0076       ENDIF
                0077 
f15994caab Jean*0078 C--   vertical coordinate "R"
c57655c2bb Jean*0079       IF ( delRFile .NE. ' ' ) THEN
                0080         iLen = ILNBLNK(delRFile)
95393692ef Jean*0081         CALL READ_GLVEC_RL( delRFile, ' ', delR, Nr, 1, myThid )
c57655c2bb Jean*0082         WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
                0083      &    ' delR loaded from file: ', delRFile(1:iLen)
                0084         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0085      &                      SQUEEZE_RIGHT , myThid )
                0086       ENDIF
                0087 
                0088       IF ( delRcFile .NE. ' ' ) THEN
                0089         iLen = ILNBLNK(delRcFile)
95393692ef Jean*0090         CALL READ_GLVEC_RL( delRcFile, ' ', delRc, Nr+1, 1, myThid )
c57655c2bb Jean*0091         WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
                0092      &    ' delRc loaded from file: ', delRcFile(1:iLen)
                0093         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0094      &                      SQUEEZE_RIGHT , myThid )
f76021331f Jean*0095       ENDIF
                0096 
f15994caab Jean*0097 C--   hybrid sigma vertical coordinate coefficient
                0098       IF ( hybSigmFile .NE. ' ' ) THEN
                0099         iLen = ILNBLNK(hybSigmFile)
0ad8252b99 Jean*0100         CALL READ_GLVEC_RS( hybSigmFile,' ',aHybSigmF,Nr+1, 1,myThid )
                0101         CALL READ_GLVEC_RS( hybSigmFile,' ',bHybSigmF,Nr+1, 2,myThid )
f15994caab Jean*0102         WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
                0103      &    ' a&b_HybSigmF loaded from file: ', hybSigmFile(1:iLen)
                0104         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0105      &                      SQUEEZE_RIGHT , myThid )
                0106       ENDIF
                0107 
2c9ae9ba9d Jean*0108 C--   Check horizontal grid-spacing
                0109       IF ( .NOT.usingCurvilinearGrid ) THEN
                0110 C Note: To avoid multiple copies of the same code in several horiz.grid
                0111 C       initialisation S/R, check horiz.grid spacing here, after
                0112 C       loading delX,delY (and before calling any of these S/R).
                0113 
                0114 C--   Check delX grid-spacing:
                0115        n = 0
af2e1a21f9 Jean*0116        DO i=1,gridNx
2c9ae9ba9d Jean*0117 C-    check that delX has been set
                0118         IF ( delX(i).EQ.UNSET_RL ) THEN
                0119          n = n+1
                0120          WRITE(msgBuf,'(2A,I5)') 'S/R LOAD_GRID_SPACING:',
                0121      &       ' No value for delX at i =', i
                0122          CALL PRINT_ERROR( msgBuf, myThid )
                0123         ENDIF
                0124 C-    check that delX is > 0
                0125         IF ( delX(i).LE.0. ) THEN
                0126          n = n+1
                0127          WRITE(msgBuf,'(2A,I5,A,1PE16.8,A)') 'S/R LOAD_GRID_SPACING:',
                0128      &       ' delX(i=', i, ')=', delX(i), ' : MUST BE >0'
                0129          CALL PRINT_ERROR( msgBuf, myThid )
                0130         ENDIF
                0131        ENDDO
                0132        IF ( n.GE.1 ) THEN
                0133          WRITE(msgBuf,'(2A,I5,A)') 'S/R LOAD_GRID_SPACING:',
                0134      &       ' found', n, ' invalid delX values'
                0135          CALL PRINT_ERROR( msgBuf, myThid )
                0136          STOP 'ABNORMAL END: S/R LOAD_GRID_SPACING'
                0137        ENDIF
                0138 
                0139 C--   Check delY grid-spacing:
                0140        n = 0
af2e1a21f9 Jean*0141        DO j=1,gridNy
2c9ae9ba9d Jean*0142 C-    check that delY has been set
                0143         IF ( delY(j).EQ.UNSET_RL ) THEN
                0144          n = n+1
                0145          WRITE(msgBuf,'(2A,I5)') 'S/R LOAD_GRID_SPACING:',
                0146      &       ' No value for delY at j =', j
                0147          CALL PRINT_ERROR( msgBuf, myThid )
                0148         ENDIF
                0149 C-    check that delY is > 0
                0150         IF ( delY(j).LE.0. ) THEN
                0151          n = n+1
                0152          WRITE(msgBuf,'(2A,I5,A,1PE16.8,A)') 'S/R LOAD_GRID_SPACING:',
                0153      &       ' delY(j=', j, ')=', delY(j), ' : MUST BE >0'
                0154          CALL PRINT_ERROR( msgBuf, myThid )
                0155         ENDIF
                0156        ENDDO
                0157        IF ( n.GE.1 ) THEN
                0158          WRITE(msgBuf,'(2A,I5,A)') 'S/R LOAD_GRID_SPACING:',
                0159      &       ' found', n, ' invalid delY values'
                0160          CALL PRINT_ERROR( msgBuf, myThid )
                0161          STOP 'ABNORMAL END: S/R LOAD_GRID_SPACING'
                0162        ENDIF
                0163 C--   end of grid-spacing check (not usingCurvilinearGrid)
                0164       ENDIF
                0165 
af2e1a21f9 Jean*0166 C--   Set default (=whole domain) for where relaxation to climatology applies
                0167       IF ( usingCartesianGrid .OR. usingSphericalPolarGrid ) THEN
                0168         delYsum = 0.
                0169         DO j=1,gridNy
                0170           delYsum = delYsum + delY(j)
                0171         ENDDO
                0172         IF ( latBandClimRelax.EQ.UNSET_RL ) THEN
                0173           latBandClimRelax = delYsum*3. _d 0
                0174         ENDIF
                0175       ENDIF
                0176 
c57655c2bb Jean*0177       _END_MASTER(myThid)
f76021331f Jean*0178 C--   Everyone else must wait for the parameters to be loaded
                0179       _BARRIER
                0180 
                0181       RETURN
                0182       END