C $Header: /u/gcmpack/MITgcm/model/src/ini_vertical_grid.F,v 1.14 2005/06/22 00:25:32 jmc Exp $
C $Name: $
#include "CPP_OPTIONS.h"
CBOP
C !ROUTINE: INI_VERTICAL_GRID
C !INTERFACE:
SUBROUTINE INI_VERTICAL_GRID( myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE INI_VERTICAL_GRID
C | o Initialise vertical gridding arrays
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myThid - Number of this instance of INI_DEPTHS
INTEGER myThid
C !LOCAL VARIABLES:
C == Local variables ==
C K :: loop index
C msgBuf :: Informational/error meesage buffer
INTEGER K
CHARACTER*(MAX_LEN_MBUF) msgBuf
CEOP
IF (setCenterDr) THEN
C-- Interface at middle between 2 centers :
C- Check that all thickness are > 0 :
DO K=1,Nr+1
IF (delRc(K).LE.0.) THEN
WRITE(msgBuf,'(A,I4,A,E16.8)')
& 'S/R INI_VERTICAL_GRID: delRc(K=',K,' )=',delRc(K)
CALL PRINT_ERROR( msgBuf , 1)
WRITE(msgBuf,'(A)')
& 'S/R INI_VERTICAL_GRID: Vert. grid spacing MUST BE > 0'
CALL PRINT_ERROR( msgBuf , 1)
STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
ENDIF
ENDDO
C- Calculate depths of centers and interfaces
rF(1) = Ro_SeaLevel
rC(1) = rF(1) + rkSign*delRc(1)
drC(1) = delRc(1)
drF(1) = delRc(1)
DO K=2,Nr
drC(K) = delRc(K)
drF(K-1) = drF(K-1) + 0.5 _d 0*delRc(K)
drF(K) = 0.5 _d 0*delRc(K)
rC(K) = rC(K-1) + rkSign*drC(K)
rF(K) = rF(K-1) + rkSign*drF(K-1)
ENDDO
drF(Nr) = drF(Nr) + delRc(Nr+1)
rF(Nr+1) = rF(Nr) + rkSign*drF(Nr)
ELSE
C-- Center at middle between 2 interfaces :
C- Check that all thickness are > 0 :
DO K=1,Nr
IF (delR(K).LE.0.) THEN
WRITE(msgBuf,'(A,I4,A,E16.8)')
& 'S/R INI_VERTICAL_GRID: delR(K=',K,' )=',delR(K)
CALL PRINT_ERROR( msgBuf , 1)
WRITE(msgBuf,'(A)')
& 'S/R INI_VERTICAL_GRID: Vert. grid spacing MUST BE > 0'
CALL PRINT_ERROR( msgBuf , 1)
STOP 'ABNORMAL END: S/R INI_VERTICAL_GRID'
ENDIF
ENDDO
C- Calculate depths of interfaces and centers
rF(1) = Ro_SeaLevel
DO K=1,Nr
drF(K) = delR(K)
rF(K+1) = rF(K) + rkSign*delR(K)
ENDDO
drC(1) = delR(1) * 0.5 _d 0
rC(1) = rf(1) + rkSign*delR(1) * 0.5 _d 0
DO K=2,Nr
drC(K) = 0.5 _d 0 *(delR(K-1)+delR(K))
rC(K) = rC(K-1) + rkSign*drC(K)
ENDDO
C--
ENDIF
C- Calculate reciprol vertical grid spacing :
DO K=1,Nr
saFac(K) = 1. _d 0
recip_drC(K) = 1. _d 0/drC(K)
recip_drF(K) = 1. _d 0/drF(K)
ENDDO
RETURN
END