Back to home page

MITgcm

 
 

    


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

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
1dbaea09ee Chri*0001 #include "CPP_OPTIONS.h"
a74b31ee34 Alis*0002 
9366854e02 Chri*0003 CBOP
                0004 C     !ROUTINE: INI_VERTICAL_GRID
                0005 C     !INTERFACE:
a74b31ee34 Alis*0006       SUBROUTINE INI_VERTICAL_GRID( myThid )
c57655c2bb Jean*0007 
9366854e02 Chri*0008 C     !DESCRIPTION: \bv
                0009 C     *==========================================================*
c57655c2bb Jean*0010 C     | SUBROUTINE INI_VERTICAL_GRID
                0011 C     | o Initialise vertical gridding arrays
9366854e02 Chri*0012 C     *==========================================================*
                0013 C     \ev
a74b31ee34 Alis*0014 
9366854e02 Chri*0015 C     !USES:
                0016       IMPLICIT NONE
a74b31ee34 Alis*0017 C     === Global variables ===
                0018 #include "SIZE.h"
                0019 #include "EEPARAMS.h"
                0020 #include "PARAMS.h"
                0021 #include "GRID.h"
                0022 
9366854e02 Chri*0023 C     !INPUT/OUTPUT PARAMETERS:
a74b31ee34 Alis*0024 C     == Routine arguments ==
c57655c2bb Jean*0025 C     myThid   :: my Thread Id number
a74b31ee34 Alis*0026       INTEGER myThid
                0027 
9366854e02 Chri*0028 C     !LOCAL VARIABLES:
a74b31ee34 Alis*0029 C     == Local variables ==
c57655c2bb Jean*0030 C     k        :: loop index
f15994caab Jean*0031 C     msgBuf   :: Informational/error message buffer
c57655c2bb Jean*0032       INTEGER k
                0033       _RL     tmpRatio, checkRatio1, checkRatio2
c28ce1627a Jean*0034       CHARACTER*(MAX_LEN_MBUF) msgBuf
f15994caab Jean*0035       _RL maxErrC, maxErrF, epsil, tmpError
                0036       _RL rFullDepth, recip_fullDepth
                0037       _RS rSigBndRS, tmpRS
9366854e02 Chri*0038 CEOP
a74b31ee34 Alis*0039 
06bb0cec77 Jean*0040       _BEGIN_MASTER(myThid)
                0041 
4606c28752 Jean*0042       WRITE(msgBuf,'(A,2(A,L5))') 'Enter INI_VERTICAL_GRID:',
                0043      &                            ' setInterFDr=', setInterFDr,
                0044      &                          ' ; setCenterDr=', setCenterDr
                0045       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0046      &                    SQUEEZE_RIGHT, myThid )
                0047 
ad6178a973 Jean*0048 C--   Set factors required for mixing pressure and meters as vertical coordinate.
                0049 C     rkSign is a "sign" parameter which is used where the orientation of the vertical
c57655c2bb Jean*0050 C     coordinate (pressure or meters) relative to the vertical index (k) is important.
                0051 C     rkSign = -1 applies when k and the coordinate are in the opposite sense.
                0052 C     rkSign =  1 applies when k and the coordinate are in the same sense.
ad6178a973 Jean*0053       rkSign       = -1. _d 0
                0054       gravitySign  = -1. _d 0
                0055       IF ( usingPCoords ) THEN
                0056          gravitySign = 1. _d 0
                0057       ENDIF
                0058 
4606c28752 Jean*0059       IF ( .NOT.(setInterFDr.OR.setCenterDr) ) THEN
                0060         WRITE(msgBuf,'(A)')
c57655c2bb Jean*0061      &  'S/R INI_VERTICAL_GRID: neither delR nor delRc are defined'
4606c28752 Jean*0062         CALL PRINT_ERROR( msgBuf, myThid )
                0063         WRITE(msgBuf,'(A)')
c57655c2bb Jean*0064      &  'S/R INI_VERTICAL_GRID: Need at least 1 of the 2 (delR,delRc)'
4606c28752 Jean*0065         CALL PRINT_ERROR( msgBuf, myThid )
                0066         STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
c57655c2bb Jean*0067       ENDIF
c28ce1627a Jean*0068 
c57655c2bb Jean*0069 C---  Set Level r-thickness (drF) and Center r-distances (drC)
4606c28752 Jean*0070 
c57655c2bb Jean*0071       IF (setInterFDr) THEN
                0072 C--   Interface r-distances are defined:
                0073        DO k=1,Nr
4606c28752 Jean*0074          drF(k) = delR(k)
c57655c2bb Jean*0075        ENDDO
c28ce1627a Jean*0076 C-    Check that all thickness are > 0 :
c57655c2bb Jean*0077        DO k=1,Nr
4606c28752 Jean*0078         IF (delR(k).LE.0.) THEN
                0079          WRITE(msgBuf,'(A,I4,A,E16.8)')
c57655c2bb Jean*0080      &  'S/R INI_VERTICAL_GRID: delR(k=',k,' )=',delR(k)
4606c28752 Jean*0081          CALL PRINT_ERROR( msgBuf, myThid )
                0082          WRITE(msgBuf,'(A)')
c28ce1627a Jean*0083      &  'S/R INI_VERTICAL_GRID: Vert. grid spacing MUST BE > 0'
4606c28752 Jean*0084          CALL PRINT_ERROR( msgBuf, myThid )
                0085          STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
                0086         ENDIF
c28ce1627a Jean*0087        ENDDO
                0088       ELSE
c57655c2bb Jean*0089 C--   Interface r-distances undefined:
                0090 C     assume Interface at middle between 2 Center
                0091        drF(1) = delRc(1)
                0092        DO k=2,Nr
0e48383ebf Jean*0093 c        drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1)
                0094 c        drF( k ) = 0.5 _d 0 *delRc(k)
                0095 C- note: change the order to prevent some compilers to produce wrong code
                0096 C        when trying to optimise this loop :
4606c28752 Jean*0097          drF( k ) = 0.5 _d 0 *delRc(k)
0e48383ebf Jean*0098          drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1)
c57655c2bb Jean*0099        ENDDO
                0100        drF(Nr) = delRc(Nr+1) + drF(Nr)
                0101       ENDIF
c28ce1627a Jean*0102 
c57655c2bb Jean*0103       IF (setCenterDr) THEN
                0104 C--   Cell Center r-distances are defined:
700c03e4bf Jean*0105        DO k=1,Nr+1
c57655c2bb Jean*0106          drC(k) = delRc(k)
                0107        ENDDO
c28ce1627a Jean*0108 C-    Check that all thickness are > 0 :
c57655c2bb Jean*0109        DO k=1,Nr+1
                0110         IF (delRc(k).LE.0.) THEN
c28ce1627a Jean*0111          WRITE(msgBuf,'(A,I4,A,E16.8)')
c57655c2bb Jean*0112      &  'S/R INI_VERTICAL_GRID: delRc(k=',k,' )=',delRc(k)
                0113          CALL PRINT_ERROR( msgBuf, myThid )
c28ce1627a Jean*0114          WRITE(msgBuf,'(A)')
                0115      &  'S/R INI_VERTICAL_GRID: Vert. grid spacing MUST BE > 0'
c57655c2bb Jean*0116          CALL PRINT_ERROR( msgBuf, myThid )
c28ce1627a Jean*0117          STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
                0118         ENDIF
                0119        ENDDO
c57655c2bb Jean*0120       ELSE
                0121 C--   Cell Center r-distances undefined:
                0122 C     assume Center at middle between 2 Interfaces
                0123        drC(1)  = 0.5 _d 0 *delR(1)
                0124        DO k=2,Nr
                0125          drC(k) = 0.5 _d 0 *(delR(k-1)+delR(k))
                0126        ENDDO
700c03e4bf Jean*0127        drC(Nr+1) = 0.5 _d 0 *delR(Nr)
c57655c2bb Jean*0128       ENDIF
c28ce1627a Jean*0129 
c57655c2bb Jean*0130 C---  Set r-position of  interFace (rF) and cell-Center (rC):
2ad79bdf32 Jean*0131 C --  Use top_Pres or seaLev_Z to set vertical axis position:
                0132 C OCN in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(1), @ the top)
                0133 C ATM in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(Nr+1), @ bottom)
                0134 C OCN in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(Nr+1)/g, @ the top)
                0135 C ATM in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(1)/g, @ the bottom)
                0136       IF ( rF(1).EQ.UNSET_RS .AND.
                0137      &     usingZCoords.AND.fluidIsWater ) THEN
                0138         rF(1) = seaLev_Z
                0139       ENDIF
                0140       IF ( rF(1).NE.UNSET_RS ) THEN
                0141         DO k=1,Nr
                0142           rF(k+1) = rF(k) + rkSign*drF(k)
                0143         ENDDO
                0144         rC(1)   = rF(1)   + rkSign*drC(1)
                0145         DO k=2,Nr
                0146           rC(k) = rC(k-1) + rkSign*drC(k)
                0147         ENDDO
                0148 c       IF ( usingPCoords ) THEN
                0149 c         top_Pres = rF(Nr+1)
                0150 c       ELSEIF ( fluidIsWater ) THEN
                0151 c         seaLev_Z = rF(1)
                0152 c       ELSE
                0153 c         seaLev_Z = rF(Nr+1)
                0154 c       ENDIF
                0155       ELSE
                0156         IF ( usingPCoords ) THEN
                0157           rF(Nr+1) = top_Pres
                0158         ELSE
                0159           rF(Nr+1) = seaLev_Z
                0160         ENDIF
                0161         DO k=Nr,1,-1
                0162           rF(k) = rF(k+1) - rkSign*drF(k)
                0163         ENDDO
                0164         rC(Nr) = rF(Nr+1) - rkSign*drC(Nr+1)
                0165         DO k=Nr,2,-1
                0166           rC(k-1) = rC(k) - rkSign*drC(k)
                0167         ENDDO
                0168       ENDIF
c28ce1627a Jean*0169 
c57655c2bb Jean*0170 C---  Check vertical discretization :
                0171       checkRatio2 = 100.
                0172       checkRatio1 = 1. _d 0 / checkRatio2
                0173       DO k=1,Nr
                0174        tmpRatio = 0.
                0175        IF ( (rC(k)-rF(k+1)) .NE. 0. )
                0176      &   tmpRatio = (rF(k)-rC(k)) / (rC(k)-rF(k+1))
                0177        IF ( tmpRatio.LT.checkRatio1 .OR. tmpRatio.GT.checkRatio2 ) THEN
                0178 c       write(0,*) 'drF=',drF
                0179 c       write(0,*) 'drC=',drC
                0180 c       write(0,*) 'rF=',rF
                0181 c       write(0,*) 'rC=',rC
                0182         WRITE(msgBuf,'(A,I4,A,E16.8)')
                0183      &   'S/R INI_VERTICAL_GRID: Invalid relative position, level k=',
                0184      &     k, ' :', tmpRatio
                0185         CALL PRINT_ERROR( msgBuf, myThid )
                0186         WRITE(msgBuf,'(A,1PE14.6,A,2E14.6)')
                0187      &   'S/R INI_VERTICAL_GRID: rC=', rC(k),
                0188      &   ' , rF(k,k+1)=',rF(k),rF(k+1)
                0189         CALL PRINT_ERROR( msgBuf, myThid )
                0190         STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
                0191        ENDIF
                0192       ENDDO
c28ce1627a Jean*0193 
                0194 C-    Calculate reciprol vertical grid spacing :
700c03e4bf Jean*0195       DO k=1,Nr+1
c57655c2bb Jean*0196        recip_drC(k)   = 1. _d 0/drC(k)
700c03e4bf Jean*0197       ENDDO
                0198       DO k=1,Nr
c57655c2bb Jean*0199        recip_drF(k)   = 1. _d 0/drF(k)
a74b31ee34 Alis*0200       ENDDO
c28ce1627a Jean*0201 
f15994caab Jean*0202 C---  Hybrid-Sigma vertical coordinate:
                0203       IF ( selectSigmaCoord .EQ. 0 ) THEN
                0204        DO k=1,Nr+1
                0205          aHybSigmF(k) = 0. _d 0
                0206          bHybSigmF(k) = 0. _d 0
                0207          dAHybSigC(k) = 0. _d 0
                0208          dAHybSigC(k) = 0. _d 0
                0209        ENDDO
                0210        DO k=1,Nr
                0211          aHybSigmC(k) = 0. _d 0
                0212          bHybSigmC(k) = 0. _d 0
                0213          dAHybSigF(k) = 0. _d 0
                0214          dAHybSigF(k) = 0. _d 0
                0215        ENDDO
                0216       ELSE
                0217        rFullDepth = rF(1) - rF(Nr+1)
                0218        recip_fullDepth = 0. _d 0
                0219        IF ( rFullDepth.GT.0. ) recip_fullDepth = 1. _d 0 / rFullDepth
                0220        rSigBndRS = rSigmaBnd
                0221        IF ( hybSigmFile.EQ.' ' .AND. rSigmaBnd.EQ.UNSET_RL ) THEN
                0222 C-    Default is pure sigma:
                0223          IF ( usingPCoords ) rSigBndRS = rF(Nr+1)
                0224          IF ( usingZCoords ) rSigBndRS = rF(1)
                0225        ENDIF
                0226 c      IF ( hybSigmFile.EQ.' ' .AND. rSigmaBnd.EQ.UNSET_RL ) THEN
                0227 C-     compute coeff as pure sigma coordinate
                0228 c        DO k=1,Nr+1
                0229 c          aHybSigmF(k) = 0.
                0230 c          bHybSigmF(k) = (rF(k)-rF(Nr+1))*recip_fullDepth
                0231 c        ENDDO
                0232 c        DO k=1,Nr
                0233 c          aHybSigmC(k) = 0.
                0234 c          bHybSigmC(k) = (rC(k)-rF(Nr+1))*recip_fullDepth
                0235 c        ENDDO
                0236 c      ELSEIF ( hybSigmFile.EQ.' ' ) THEN
                0237        IF ( hybSigmFile.EQ.' ' ) THEN
                0238 C--    compute coeff assuming fixed r-coord above rSigmaBnd and pure sigma below
                0239         IF ( usingPCoords .AND. setInterFDr ) THEN
                0240 C-     Alternative method : p = pTop + A*DeltaFullP + B*(eta+Pr_surf - rSigmaBnd)
                0241 c          aHybSigmF(k) = ( MIN(rF(k),rSigmaBnd) - rF(Nr+1) )
                0242 c    &                   *recip_fullDepth
                0243 c          bHybSigmF(k) = ( MAX(rF(k),rSigmaBnd) - rSigmaBnd )
                0244 c    &                   /( rF(1) - rSigmaBnd )
                0245 C-     Standard method : p = pTop + A*DeltaFullP + B*(eta+Ro_surf - pTop)
                0246 C        sigma part goes from 0 @ rSigmaBnd (and above) to 1 @ surface
                0247          DO k=1,Nr+1
                0248 C-     separate the 2 cases:
                0249 c         IF ( rF(k).LE.rSigmaBnd ) THEN
                0250 c          bHybSigmF(k) = 0.
                0251 c          aHybSigmF(k) = ( rF(k) - rF(Nr+1) )*recip_fullDepth
                0252 c         ELSE
                0253 c          bHybSigmF(k) = (rF(k)-rSigmaBnd)/(rF(1)-rSigmaBnd)
                0254 c          aHybSigmF(k) = (1. _d 0 - bHybSigmF(k))
                0255 c    &                  *(rSigmaBnd-rF(Nr+1) )*recip_fullDepth
                0256 c         ENDIF
                0257 C-     unique formula using min fct:
                0258           tmpRS = MIN( rF(k), rSigBndRS )
                0259           bHybSigmF(k) = ( rF(k) - tmpRS )/(rF(1)-rSigBndRS)
                0260           aHybSigmF(k) = (1. _d 0 - bHybSigmF(k))
                0261      &                  *( tmpRS -rF(Nr+1) )*recip_fullDepth
                0262          ENDDO
                0263         ENDIF
                0264         IF ( usingPCoords .AND. setCenterDr ) THEN
                0265          DO k=1,Nr
                0266 C-     separate the 2 cases:
                0267 c         IF ( rC(k).LE.rSigmaBnd ) THEN
                0268 c          bHybSigmC(k) = 0.
                0269 c          aHybSigmC(k) = ( rC(k) - rF(Nr+1) )*recip_fullDepth
                0270 c         ELSE
                0271 c          bHybSigmC(k) = (rC(k)-rSigmaBnd)/(rF(1)-rSigmaBnd)
                0272 c          aHybSigmC(k) = (1. _d 0 - bHybSigmC(k))
                0273 c    &                  *(rSigmaBnd-rF(Nr+1) )*recip_fullDepth
                0274 c         ENDIF
                0275 C-     unique formula using min fct:
                0276           tmpRS = MIN( rC(k), rSigBndRS )
                0277           bHybSigmC(k) = ( rC(k) - tmpRS )/(rF(1)-rSigBndRS)
                0278           aHybSigmC(k) = (1. _d 0 - bHybSigmC(k))
                0279      &                  *( tmpRS -rF(Nr+1) )*recip_fullDepth
                0280          ENDDO
                0281         ENDIF
                0282         IF ( usingZCoords .AND. setInterFDr ) THEN
                0283 C-     Standard method : z = zBot + A*DeltaFullZ + B*(eta+Ro_surf - zBot)
                0284 C        sigma part goes from 1 @ rSigmaBnd (and above) to 0 @ bottom
                0285          DO k=1,Nr+1
                0286 C-     separate the 2 cases:
                0287 c         IF ( rF(k).GE.rSigmaBnd ) THEN
                0288 c          bHybSigmF(k) = 1.
                0289 c          aHybSigmF(k) = ( rF(k)-rF(1) )*recip_fullDepth
                0290 c         ELSE
                0291 c          bHybSigmF(k) = ( rF(k)-rF(Nr+1) )/( rSigmaBnd-rF(Nr+1) )
                0292 c          aHybSigmF(k) = bHybSigmF(k)*(rSigmaBnd-rF(1))*recip_fullDepth
                0293 c         ENDIF
                0294 C-     unique formula using max fct:
                0295           tmpRS = MAX( rF(k), rSigBndRS )
                0296           bHybSigmF(k) = ( rF(k)-rF(Nr+1) )/( tmpRS-rF(Nr+1) )
                0297           aHybSigmF(k) = bHybSigmF(k)*( tmpRS-rF(1) )*recip_fullDepth
                0298          ENDDO
                0299         ENDIF
                0300         IF ( usingZCoords .AND. setCenterDr ) THEN
                0301          DO k=1,Nr
                0302 C-     separate the 2 cases:
                0303 c         IF ( rC(k).GE.rSigmaBnd ) THEN
                0304 c          bHybSigmC(k) = 1.
                0305 c          aHybSigmC(k) = ( rC(k)-rF(1) )*recip_fullDepth
                0306 c         ELSE
                0307 c          bHybSigmC(k) = ( rC(k)-rF(Nr+1) )/( rSigmaBnd-rF(Nr+1) )
                0308 c          aHybSigmC(k) = bHybSigmC(k)*(rSigmaBnd-rF(1))*recip_fullDepth
                0309 c         ENDIF
                0310 C-     unique formula using max fct:
                0311           tmpRS = MAX( rC(k), rSigBndRS )
                0312           bHybSigmC(k) = ( rC(k)-rF(Nr+1) )/( tmpRS-rF(Nr+1) )
                0313           aHybSigmC(k) = bHybSigmC(k)*( tmpRS-rF(1) )*recip_fullDepth
                0314          ENDDO
                0315         ENDIF
                0316        ELSE
                0317 C--    Coeff at interface are read from file
                0318         IF (setCenterDr) THEN
                0319          STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID: Missing Code'
                0320         ENDIF
                0321        ENDIF
                0322 
                0323 C--    Finish setting (if not done) using simple averaging
                0324        IF ( .NOT.setInterFDr ) THEN
                0325 C-     Interface position at the middle between 2 centers
                0326         bHybSigmF(1) = 1. _d 0
                0327         aHybSigmF(1) = 0. _d 0
                0328         bHybSigmF(Nr+1) = 0. _d 0
                0329         aHybSigmF(Nr+1) = 0. _d 0
                0330         DO k=2,Nr
                0331           bHybSigmF(k) = ( bHybSigmC(k) + bHybSigmC(k-1) )*0.5 _d 0
                0332           aHybSigmF(k) = ( aHybSigmC(k) + aHybSigmC(k-1) )*0.5 _d 0
                0333         ENDDO
                0334        ENDIF
                0335        IF ( .NOT.setCenterDr ) THEN
                0336 C-     Center position at the middle between 2 interfaces
                0337         DO k=1,Nr
                0338           bHybSigmC(k) = ( bHybSigmF(k) + bHybSigmF(k+1) )*0.5 _d 0
                0339           aHybSigmC(k) = ( aHybSigmF(k) + aHybSigmF(k+1) )*0.5 _d 0
                0340         ENDDO
                0341        ENDIF
                0342 
                0343 C--    Vertical increment:
                0344        DO k=1,Nr
                0345          dAHybSigF(k) = ( aHybSigmF(k+1) - aHybSigmF(k) )*rkSign
                0346          dBHybSigF(k) = ( bHybSigmF(k+1) - bHybSigmF(k) )*rkSign
                0347        ENDDO
                0348        DO k=2,Nr
                0349          dAHybSigC(k) = ( aHybSigmC(k) - aHybSigmC(k-1) )*rkSign
                0350          dBHybSigC(k) = ( bHybSigmC(k) - bHybSigmC(k-1) )*rkSign
                0351        ENDDO
                0352        dAHybSigC(1) = ( aHybSigmC(1) - aHybSigmF(1) )*rkSign
                0353        dBHybSigC(1) = ( bHybSigmC(1) - bHybSigmF(1) )*rkSign
                0354        dAHybSigC(Nr+1) = ( aHybSigmF(Nr+1) - aHybSigmC(Nr) )*rkSign
                0355        dBHybSigC(Nr+1) = ( bHybSigmF(Nr+1) - bHybSigmC(Nr) )*rkSign
                0356 
                0357 C--   Check for miss-match between vertical discretization :
                0358        maxErrC = 0.
                0359        maxErrF = 0.
                0360        epsil = 1. _d -9
                0361        DO k=1,Nr
                0362          tmpError = ( rC(k)-rF(Nr+1) )*recip_fullDepth
                0363      &            - ( aHybSigmC(k)+bHybSigmC(k) )
                0364          IF ( ABS(tmpError).GT.epsil ) THEN
                0365           IF ( maxErrC.LE.epsil ) THEN
                0366            WRITE(msgBuf,'(2A)') 'S/R INI_VERTICAL_GRID:',
                0367      &      ' rC and Hybrid-Sigma Coeff miss-match'
                0368            CALL PRINT_ERROR( msgBuf, myThid )
                0369           ENDIF
                0370           WRITE(msgBuf,'(A,I4,2(A,1PE14.6),A,1P2E14.6)')
                0371      &     ' k=', k,' , err=', tmpError, ' ; rC=', rC(k),
                0372      &     ' , a & b=', aHybSigmC(k), bHybSigmC(k)
                0373           CALL PRINT_ERROR( msgBuf, myThid )
                0374          ENDIF
                0375          maxErrC = MAX( maxErrC, ABS(tmpError) )
                0376        ENDDO
                0377        DO k=1,Nr+1
                0378          tmpError = ( rF(k)-rF(Nr+1) )*recip_fullDepth
                0379      &            - ( aHybSigmF(k)+bHybSigmF(k) )
                0380          IF ( ABS(tmpError).GT.epsil ) THEN
                0381           IF ( maxErrF.LE.epsil ) THEN
                0382            WRITE(msgBuf,'(2A)') 'S/R INI_VERTICAL_GRID:',
                0383      &      ' rF and Hybrid-Sigma Coeff miss-match'
                0384            CALL PRINT_ERROR( msgBuf, myThid )
                0385           ENDIF
                0386           WRITE(msgBuf,'(A,I4,2(A,1PE14.6),A,1P2E14.6)')
                0387      &     ' k=', k,' , err=', tmpError, ' ; rF=', rF(k),
                0388      &     ' , a & b=', aHybSigmF(k), bHybSigmF(k)
                0389           CALL PRINT_ERROR( msgBuf, myThid )
                0390          ENDIF
                0391          maxErrF = MAX( maxErrF, ABS(tmpError) )
                0392        ENDDO
                0393        WRITE(msgBuf,'(2A,1PE14.6)') 'S/R INI_VERTICAL_GRID:',
                0394      &      ' matching of aHybSigmC & rC :', maxErrC
                0395        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0396      &                     SQUEEZE_RIGHT, myThid )
                0397        WRITE(msgBuf,'(2A,1PE14.6)') 'S/R INI_VERTICAL_GRID:',
                0398      &      ' matching of aHybSigmF & rF :', maxErrF
                0399        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0400      &                     SQUEEZE_RIGHT, myThid )
                0401        IF ( maxErrC.GT.epsil .OR. maxErrF.GT.epsil ) THEN
                0402          WRITE(msgBuf,'(2A)') 'S/R INI_VERTICAL_GRID:',
                0403      &      ' rC,rF and Hybrid-Sigma Coeff miss-match'
                0404          CALL PRINT_ERROR( msgBuf, myThid )
                0405          STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
                0406        ENDIF
                0407 
                0408 C---  End setting-up Hybrid-Sigma vertical coordinate:
                0409       ENDIF
                0410 
06bb0cec77 Jean*0411       _END_MASTER(myThid)
                0412       _BARRIER
                0413 
a74b31ee34 Alis*0414       RETURN
                0415       END