110 lines
5.2 KiB
Fortran
Executable File
110 lines
5.2 KiB
Fortran
Executable File
MODULE usrdef_zgr
|
|
!!======================================================================
|
|
!! *** MODULE usrdef_zgr ***
|
|
!!
|
|
!! === ICE_ADV1D case ===
|
|
!!
|
|
!! Ocean domain : user defined vertical coordinate system
|
|
!!======================================================================
|
|
!! History : 4.0 ! 2016-08 (G. Madec, S. Flavoni) Original code
|
|
!!----------------------------------------------------------------------
|
|
|
|
!!----------------------------------------------------------------------
|
|
!! usr_def_zgr : user defined vertical coordinate system (required)
|
|
!!---------------------------------------------------------------------
|
|
USE oce ! ocean variables
|
|
USE usrdef_nam ! User defined : namelist variables
|
|
!
|
|
USE in_out_manager ! I/O manager
|
|
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
|
|
USE lib_mpp ! distributed memory computing library
|
|
|
|
IMPLICIT NONE
|
|
PRIVATE
|
|
|
|
PUBLIC usr_def_zgr ! called by domzgr.F90
|
|
|
|
!!----------------------------------------------------------------------
|
|
!! NEMO/OCE 4.0 , NEMO Consortium (2018)
|
|
!! $Id: usrdef_zgr.F90 10074 2018-08-28 16:15:49Z nicolasmartin $
|
|
!! Software governed by the CeCILL license (see ./LICENSE)
|
|
!!----------------------------------------------------------------------
|
|
CONTAINS
|
|
|
|
SUBROUTINE usr_def_zgr( ld_zco , ld_zps , ld_sco , ld_isfcav, & ! type of vertical coordinate
|
|
& pdept_1d, pdepw_1d, pe3t_1d , pe3w_1d , & ! 1D reference vertical coordinate
|
|
& pdept , pdepw , & ! 3D t & w-points depth
|
|
& pe3t , pe3u , pe3v , pe3f , & ! vertical scale factors
|
|
& pe3w , pe3uw , pe3vw, & ! - - -
|
|
& k_top , k_bot ) ! top & bottom ocean level
|
|
!!---------------------------------------------------------------------
|
|
!! *** ROUTINE usr_def_zgr ***
|
|
!!
|
|
!! ** Purpose : User defined the vertical coordinates
|
|
!!
|
|
!!----------------------------------------------------------------------
|
|
LOGICAL , INTENT(out) :: ld_zco, ld_zps, ld_sco ! vertical coordinate flags
|
|
LOGICAL , INTENT(out) :: ld_isfcav ! under iceshelf cavity flag
|
|
REAL(wp), DIMENSION(:) , INTENT(out) :: pdept_1d, pdepw_1d ! 1D grid-point depth [m]
|
|
REAL(wp), DIMENSION(:) , INTENT(out) :: pe3t_1d , pe3w_1d ! 1D grid-point depth [m]
|
|
REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pdept, pdepw ! grid-point depth [m]
|
|
REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3t , pe3u , pe3v , pe3f ! vertical scale factors [m]
|
|
REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3w , pe3uw, pe3vw ! i-scale factors
|
|
INTEGER , DIMENSION(:,:) , INTENT(out) :: k_top, k_bot ! first & last ocean level
|
|
!
|
|
INTEGER :: jk, k_dz ! dummy indices
|
|
!!----------------------------------------------------------------------
|
|
!
|
|
IF(lwp) WRITE(numout,*)
|
|
IF(lwp) WRITE(numout,*) 'usr_def_zgr : ICE_ADV1D configuration (slab ocean - advection of ice in one direction)'
|
|
IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
|
|
!
|
|
!
|
|
! type of vertical coordinate ==>>> here ICE_ADV1D : slab ocean always
|
|
! ---------------------------
|
|
ld_zco = .TRUE. ! z-full-step coordinate
|
|
ld_zps = .FALSE. ! z-partial-step coordinate
|
|
ld_sco = .FALSE. ! s-coordinate
|
|
ld_isfcav = .FALSE. ! ISF Ice Shelves Flag
|
|
!
|
|
!
|
|
! Build the vertical coordinate system
|
|
! ------------------------------------
|
|
!
|
|
! !== UNmasked meter bathymetry ==!
|
|
!
|
|
!
|
|
k_dz = 1
|
|
DO jk = 1, jpk
|
|
pdepw_1d(jk) = k_dz
|
|
pdept_1d(jk) = k_dz
|
|
pe3w_1d (jk) = k_dz
|
|
pe3t_1d (jk) = k_dz
|
|
END DO
|
|
! !== top masked level bathymetry ==! (all coordinates)
|
|
!
|
|
! no ocean cavities : top ocean level is ONE, except over land
|
|
k_top(:,:) = 1
|
|
!
|
|
! !== z-coordinate ==! (step-like topography)
|
|
! !* bottom ocean compute from the depth of grid-points
|
|
jpkm1 = jpk
|
|
k_bot(:,:) = 1 ! here use k_top as a land mask
|
|
! !* horizontally uniform coordinate (reference z-co everywhere)
|
|
DO jk = 1, jpk
|
|
pdept(:,:,jk) = pdept_1d(jk)
|
|
pdepw(:,:,jk) = pdepw_1d(jk)
|
|
pe3t (:,:,jk) = pe3t_1d (jk)
|
|
pe3u (:,:,jk) = pe3t_1d (jk)
|
|
pe3v (:,:,jk) = pe3t_1d (jk)
|
|
pe3f (:,:,jk) = pe3t_1d (jk)
|
|
pe3w (:,:,jk) = pe3w_1d (jk)
|
|
pe3uw(:,:,jk) = pe3w_1d (jk)
|
|
pe3vw(:,:,jk) = pe3w_1d (jk)
|
|
END DO
|
|
!
|
|
END SUBROUTINE usr_def_zgr
|
|
|
|
!!======================================================================
|
|
END MODULE usrdef_zgr
|