Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • nemo/nemo
  • sparonuz/nemo
  • hatfield/nemo
  • extdevs/nemo
4 results
Show changes
Showing
with 86 additions and 421 deletions
MODULE usrdef_sbc
!!======================================================================
!! *** MODULE usrdef_sbc ***
!!
!! === ISOMIP configuration ===
!!
!! User defined : surface forcing of a user configuration
!!======================================================================
!! History : 4.0 ! 2016-03 (S. Flavoni, G. Madec) user defined interface
!! ! 2017-02 (P. Mathiot, S. Flavoni) adapt code to ISOMIP case
!!----------------------------------------------------------------------
!!----------------------------------------------------------------------
!! usr_def_sbc : user defined surface bounday conditions in ISOMIP case
!!----------------------------------------------------------------------
USE oce ! ocean dynamics and tracers
USE dom_oce ! ocean space and time domain
USE sbc_oce ! Surface boundary condition: ocean fields
USE sbc_ice ! Surface boundary condition: ice fields
USE phycst ! physical constants
!
USE in_out_manager ! I/O manager
USE lib_mpp ! distribued memory computing library
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
IMPLICIT NONE
PRIVATE
PUBLIC usrdef_sbc_oce ! routine called in sbcmod module
PUBLIC usrdef_sbc_ice_tau ! routine called by icestp.F90 for ice dynamics
PUBLIC usrdef_sbc_ice_flx ! routine called by icestp.F90 for ice thermo
!!----------------------------------------------------------------------
!! NEMO/OCE 4.0 , NEMO Consortium (2018)
!! $Id: usrdef_sbc.F90 12377 2020-02-12 14:39:06Z acc $
!! Software governed by the CeCILL license (see ./LICENSE)
!!----------------------------------------------------------------------
CONTAINS
SUBROUTINE usrdef_sbc_oce( kt, Kbb )
!!---------------------------------------------------------------------
!! *** ROUTINE usr_def_sbc ***
!!
!! ** Purpose : provide at each time-step the surface boundary
!! condition, i.e. the momentum, heat and freshwater fluxes.
!!
!! ** Method : all 0 fields, for ISOMIP case
!! CAUTION : never mask the surface stress field !
!!
!! ** Action : - set to ZERO all the ocean surface boundary condition, i.e.
!! utau, vtau, taum, wndm, qns, qsr, emp, sfx
!!
!!----------------------------------------------------------------------
INTEGER, INTENT(in) :: kt ! ocean time step
INTEGER, INTENT(in) :: Kbb ! ocean time index
!!---------------------------------------------------------------------
!
IF( kt == nit000 ) THEN
!
IF(lwp) WRITE(numout,*)' usr_sbc : ISOMIP case: NO surface forcing'
IF(lwp) WRITE(numout,*)' ~~~~~~~~~~~ utau = vtau = taum = wndm = qns = qsr = emp = sfx = 0'
!
utau(:,:) = 0._wp
vtau(:,:) = 0._wp
taum(:,:) = 0._wp
wndm(:,:) = 0._wp
!
emp (:,:) = 0._wp
sfx (:,:) = 0._wp
qns (:,:) = 0._wp
qsr (:,:) = 0._wp
!
ENDIF
!
END SUBROUTINE usrdef_sbc_oce
SUBROUTINE usrdef_sbc_ice_tau( kt )
INTEGER, INTENT(in) :: kt ! ocean time step
END SUBROUTINE usrdef_sbc_ice_tau
SUBROUTINE usrdef_sbc_ice_flx( kt, phs, phi )
INTEGER, INTENT(in) :: kt ! ocean time step
REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phs ! snow thickness
REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phi ! ice thickness
END SUBROUTINE usrdef_sbc_ice_flx
!!======================================================================
END MODULE usrdef_sbc
MODULE usrdef_zgr
!!======================================================================
!! *** MODULE usrdef_zgr ***
!!
!! === ISOMIP case ===
!!
!! user defined : vertical coordinate system of a user configuration
!!======================================================================
!! History : 4.0 ! 2016-08 (G. Madec, S. Flavoni) Original code
!! ! 2017-02 (P. Mathiot, S. Flavoni) Adapt code to ISOMIP case
!!----------------------------------------------------------------------
!!----------------------------------------------------------------------
!! usr_def_zgr : user defined vertical coordinate system (required)
!! zgr_z1d : reference 1D z-coordinate
!!---------------------------------------------------------------------
USE oce ! ocean variables
USE dom_oce , ONLY: mj0 , mj1 ! ocean space and time domain
USE dom_oce , ONLY: glamt , gphit ! ocean space and time domain
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
USE timing ! Timing
IMPLICIT NONE
PRIVATE
PUBLIC usr_def_zgr ! called by domzgr.F90
!! * Substitutions
# include "do_loop_substitute.h90"
!!----------------------------------------------------------------------
!! NEMO/OCE 4.0 , NEMO Consortium (2018)
!! $Id: usrdef_zgr.F90 13295 2020-07-10 18:24:21Z acc $
!! 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(in ) :: ld_zco, ld_zps, ld_sco ! vertical coordinate flags ( read in namusr_def )
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 :: ji , jj, jk ! dummy indices
INTEGER :: ij0, ij1 ! dummy indices
INTEGER :: ik ! local integers
REAL(wp) :: zfact, z1_jpkm1 ! local scalar
REAL(wp) :: ze3min, zdepth ! local scalar
REAL(wp), DIMENSION(jpi,jpj) :: zht , zhu ! bottom depth
REAL(wp), DIMENSION(jpi,jpj) :: zhisf, zhisfu ! top depth
!!----------------------------------------------------------------------
!
IF(lwp) WRITE(numout,*)
IF(lwp) WRITE(numout,*) 'usr_def_zgr : ISOMIP configuration (z(ps)- or s-coordinate closed box ocean without cavities)'
IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
!
!
! type of vertical coordinate
! ---------------------------
! set in usrdef_nam.F90 by reading the namusr_def namelist except for ISF
ld_isfcav = .TRUE. ! ISF Ice Shelves Flag
!
!
! Build the vertical coordinate system
! ------------------------------------
!
! !== isfdraft ==!
!
zht (:,:) = rbathy
zhisf(:,:) = 200._wp
ij0 = 1 ; ij1 = 40+nn_hls
DO jj = mj0(ij0), mj1(ij1)
zhisf(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp
END DO
!
CALL zgr_z1d( pdept_1d, pdepw_1d, pe3t_1d , pe3w_1d ) ! Reference z-coordinate system
!
! !== top masked level bathymetry ==! (all coordinates)
!
IF ( ld_zps ) THEN !== zps-coordinate ==! (partial bottom-steps)
!
ze3min = 0.1_wp * rn_e3
IF(lwp) WRITE(numout,*) ' minimum thickness of the partial cells = 10 % of e3 = ', ze3min
!
! !* bottom ocean compute from the depth of grid-points
k_bot(:,:) = jpkm1
DO jk = jpkm1, 1, -1
WHERE( zht(:,:) < pdepw_1d(jk) + ze3min ) k_bot(:,:) = jk-1
END DO
! !* top ocean compute from the depth of grid-points
k_top(:,:) = 1 !
DO jk = 2, jpkm1
zdepth = pdepw_1d(jk+1) - ze3min
WHERE( zhisf(:,:) > 0.0 .AND. zhisf(:,:) >= zdepth ) k_top(:,:) = (jk + 1)
END DO
!
! !* vertical coordinate system
DO jk = 1, jpk ! initialization to the reference z-coordinate
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
! top scale factors and depth at T- and W-points
DO_2D( 1, 1, 1, 1 )
ik = k_top(ji,jj)
IF ( ik > 2 ) THEN
! pdeptw at the interface
pdepw(ji,jj,ik ) = MAX( zhisf(ji,jj) , pdepw(ji,jj,ik) )
! e3t in both side of the interface
pe3t (ji,jj,ik ) = pdepw(ji,jj,ik+1) - pdepw(ji,jj,ik)
! pdept in both side of the interface (from previous e3t)
pdept(ji,jj,ik ) = pdepw(ji,jj,ik ) + pe3t (ji,jj,ik ) * 0.5_wp
pdept(ji,jj,ik-1) = pdepw(ji,jj,ik ) - pe3t (ji,jj,ik ) * 0.5_wp
! pe3w on both side of the interface
pe3w (ji,jj,ik+1) = pdept(ji,jj,ik+1) - pdept(ji,jj,ik )
pe3w (ji,jj,ik ) = pdept(ji,jj,ik ) - pdept(ji,jj,ik-1)
! e3t into the ice shelf
pe3t (ji,jj,ik-1) = pdepw(ji,jj,ik ) - pdepw(ji,jj,ik-1)
pe3w (ji,jj,ik-1) = pdept(ji,jj,ik-1) - pdept(ji,jj,ik-2)
END IF
END_2D
! bottom scale factors and depth at T- and W-points
DO_2D( 1, 1, 1, 1 )
ik = k_bot(ji,jj)
pdepw(ji,jj,ik+1) = MIN( zht(ji,jj) , pdepw_1d(ik+1) )
pe3t (ji,jj,ik ) = pdepw(ji,jj,ik+1) - pdepw(ji,jj,ik)
pe3t (ji,jj,ik+1) = pe3t (ji,jj,ik )
!
pdept(ji,jj,ik ) = pdepw(ji,jj,ik ) + pe3t (ji,jj,ik ) * 0.5_wp
pdept(ji,jj,ik+1) = pdepw(ji,jj,ik+1) + pe3t (ji,jj,ik+1) * 0.5_wp
pe3w (ji,jj,ik+1) = pdept(ji,jj,ik+1) - pdept(ji,jj,ik)
END_2D
! ! bottom scale factors and depth at U-, V-, UW and VW-points
pe3u (:,:,:) = pe3t(:,:,:)
pe3uw(:,:,:) = pe3w(:,:,:)
DO_3D( 0, 0, 0, 0, 1, jpk )
! ! Computed as the minimum of neighbooring scale factors
pe3v (ji,jj,jk) = MIN( pe3t(ji,jj,jk), pe3t(ji,jj+1,jk) )
pe3vw(ji,jj,jk) = MIN( pe3w(ji,jj,jk), pe3w(ji,jj+1,jk) )
pe3f (ji,jj,jk) = pe3v(ji,jj,jk)
END_3D
CALL lbc_lnk( 'usrdef_zgr', pe3v , 'V', 1._wp ) ; CALL lbc_lnk( 'usrdef_zgr', pe3vw, 'V', 1._wp )
CALL lbc_lnk( 'usrdef_zgr', pe3f , 'F', 1._wp )
DO jk = 1, jpk
! set to z-scale factor if zero (i.e. along closed boundaries) because of lbclnk
WHERE( pe3u (:,:,jk) == 0._wp ) pe3u (:,:,jk) = pe3t_1d(jk)
WHERE( pe3v (:,:,jk) == 0._wp ) pe3v (:,:,jk) = pe3t_1d(jk)
WHERE( pe3f (:,:,jk) == 0._wp ) pe3f (:,:,jk) = pe3t_1d(jk)
WHERE( pe3uw(:,:,jk) == 0._wp ) pe3uw(:,:,jk) = pe3w_1d(jk)
WHERE( pe3vw(:,:,jk) == 0._wp ) pe3vw(:,:,jk) = pe3w_1d(jk)
END DO
!
ENDIF
!
END SUBROUTINE usr_def_zgr
SUBROUTINE zgr_z1d( pdept_1d, pdepw_1d, pe3t_1d , pe3w_1d ) ! 1D reference vertical coordinate
!!----------------------------------------------------------------------
!! *** ROUTINE zgr_z1d ***
!!
!! ** Purpose : set the depth of model levels and the resulting
!! vertical scale factors.
!!
!! ** Method : 1D z-coordinate system (use in all type of coordinate)
!! The depth of model levels is set from dep(k), an analytical function:
!! w-level: depw_1d = dep(k)
!! t-level: dept_1d = dep(k+0.5)
!! The scale factors are the discrete derivative of the depth:
!! e3w_1d(jk) = dk[ dept_1d ]
!! e3t_1d(jk) = dk[ depw_1d ]
!!
!! === Here constant vertical resolution ===
!!
!! ** Action : - pdept_1d, pdepw_1d : depth of T- and W-point (m)
!! - pe3t_1d , pe3w_1d : scale factors at T- and W-levels (m)
!!----------------------------------------------------------------------
REAL(wp), DIMENSION(:), INTENT(out) :: pdept_1d, pdepw_1d ! 1D grid-point depth [m]
REAL(wp), DIMENSION(:), INTENT(out) :: pe3t_1d , pe3w_1d ! 1D vertical scale factors [m]
!
INTEGER :: jk ! dummy loop indices
REAL(wp) :: zt, zw ! local scalar
!!----------------------------------------------------------------------
!
IF(lwp) THEN ! Parameter print
WRITE(numout,*)
WRITE(numout,*) ' zgr_z1d : Reference vertical z-coordinates: uniform dz = ', rn_e3
WRITE(numout,*) ' ~~~~~~~'
ENDIF
!
! Reference z-coordinate (depth - scale factor at T- and W-points) ! Madec & Imbard 1996 function
! ----------------------
DO jk = 1, jpk
zw = REAL( jk , wp )
zt = REAL( jk , wp ) + 0.5_wp
pdepw_1d(jk) = rn_e3 * REAL( jk-1 , wp )
pdept_1d(jk) = rn_e3 * ( REAL( jk-1 , wp ) + 0.5_wp )
pe3w_1d (jk) = rn_e3
pe3t_1d (jk) = rn_e3
END DO
!
IF(lwp) THEN ! control print
WRITE(numout,*)
WRITE(numout,*) ' Reference 1D z-coordinate depth and scale factors:'
WRITE(numout, "(9x,' level gdept_1d gdepw_1d e3t_1d e3w_1d ')" )
WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, pdept_1d(jk), pdepw_1d(jk), pe3t_1d(jk), pe3w_1d(jk), jk = 1, jpk )
ENDIF
!
END SUBROUTINE zgr_z1d
!!======================================================================
END MODULE usrdef_zgr
bld::tool::fppkeys key_xios
......@@ -75,14 +75,14 @@ CONTAINS
zfact = rn_dx * 1.e-3 ! conversion in km
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
! ! longitude (west coast at lon=0°)
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig0(ji)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig0(ji)-1 , wp ) )
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig(ji,0)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig(ji,0)-1 , wp ) )
plamv(ji,jj) = plamt(ji,jj)
plamf(ji,jj) = plamu(ji,jj)
! ! latitude (south coast at lat= 0°)
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg0(jj)-1 , wp ) )
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg(jj,0)-1 , wp ) )
pphiu(ji,jj) = pphit(ji,jj)
pphiv(ji,jj) = zfact * ( REAL( mjg0(jj)-1 , wp ) )
pphiv(ji,jj) = zfact * ( REAL( mjg(jj,0)-1 , wp ) )
pphif(ji,jj) = pphiv(ji,jj)
END_2D
!
......
......@@ -75,14 +75,14 @@ CONTAINS
zfact = rn_dx * 1.e-3 ! conversion in km
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
! ! longitude (west coast at lon=0°)
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig0(ji)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig0(ji)-1 , wp ) )
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig(ji,0)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig(ji,0)-1 , wp ) )
plamv(ji,jj) = plamt(ji,jj)
plamf(ji,jj) = plamu(ji,jj)
! ! latitude (south coast at lat= 0°)
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg0(jj)-1 , wp ) )
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg(jj,0)-1 , wp ) )
pphiu(ji,jj) = pphit(ji,jj)
pphiv(ji,jj) = zfact * ( REAL( mjg0(jj)-1 , wp ) )
pphiv(ji,jj) = zfact * ( REAL( mjg(jj,0)-1 , wp ) )
pphif(ji,jj) = pphiv(ji,jj)
END_2D
!
......
......@@ -14,8 +14,7 @@ MODULE usrdef_zgr
!! zgr_z1d : reference 1D z-coordinate
!!---------------------------------------------------------------------
USE oce ! ocean variables
USE dom_oce , ONLY: mi0, mi1 ! ocean space and time domain
USE dom_oce , ONLY: glamt ! ocean space and time domain
USE dom_oce ! ocean space and time domain
USE usrdef_nam ! User defined : namelist variables
!
USE in_out_manager ! I/O manager
......@@ -94,10 +93,10 @@ CONTAINS
END_2D
CALL lbc_lnk( 'usrdef_zgr', zhu, 'U', 1. ) ! boundary condition: this mask the surrouding grid-points
! ! ==>>> set by hand non-zero value on first/last columns & rows
DO ji = mi0(1), mi1(1) ! first row of global domain only
DO ji = mi0(1,nn_hls), mi1(1,nn_hls) ! first row of global domain only
zhu(ji,2) = zht(ji,2)
END DO
DO ji = mi0(jpiglo), mi1(jpiglo) ! last row of global domain only
DO ji = mi0(jpiglo,nn_hls), mi1(jpiglo,nn_hls) ! last row of global domain only
zhu(ji,2) = zht(ji,2)
END DO
zhu(:,1) = zhu(:,2)
......
......@@ -152,13 +152,13 @@ CONTAINS
& sf(jp_slp)%fnow(:,:,1), sf(jp_qlw)%fnow(:,:,1), &
& sf(jp_prec)%fnow(:,:,1), sf(jp_snow)%fnow(:,:,1) )
!
IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )
IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( kt, picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )
IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist )
! ! compute conduction flux and surface temperature (as in Jules surface module)
IF( ln_cndflx .AND. .NOT.ln_cndemulate ) &
& CALL blk_ice_qcn ( ln_virtual_itd, t_su, t_bo, h_s, h_i )
CASE ( jp_purecpl ) !--- coupled formulation
CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )
CALL sbc_cpl_ice_flx( kt, picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )
IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist )
END SELECT
......
......@@ -74,8 +74,8 @@ CONTAINS
IF( nstop > 0 .AND. ngrdstop > -1 ) RETURN ! stpctl was already called by a child grid
!
ll_wrtstp = ( MOD( kt-nit000, sn_cfctl%ptimincr ) == 0 ) .OR. ( kt == nitend )
ll_colruns = ll_wrtstp .AND. sn_cfctl%l_runstat .AND. jpnij > 1
ll_wrtruns = ( ll_colruns .OR. jpnij == 1 ) .AND. lwm
ll_colruns = sn_cfctl%l_runstat .AND. ll_wrtstp .AND. jpnij > 1
ll_wrtruns = sn_cfctl%l_runstat .AND. ll_wrtstp .AND. lwm
!
IF( kt == nit000 ) THEN
!
......@@ -121,8 +121,8 @@ CONTAINS
!
ll_0oce = .NOT. ANY( llmsk(:,:) ) ! no ocean point in the inner domain?
!
zmax(1) = MAXVAL( taum(:,:) , mask = llmsk ) ! max wind stress module
zmax(2) = MAXVAL( ABS( qns(:,:) ), mask = llmsk ) ! max non-solar heat flux
zmax(1) = MAXVAL( taum(:,:) , mask = llmsk(A2D(0)) ) ! max wind stress module
zmax(2) = MAXVAL( ABS( qns(:,:) ), mask = llmsk(A2D(0)) ) ! max non-solar heat flux
zmax(3) = MAXVAL( ABS( emp(:,:) ), mask = llmsk ) ! max E-P
zmax(jpvar+1) = REAL( nstop, wp ) ! stop indicator
!
......@@ -178,7 +178,7 @@ CONTAINS
iloc(1:2,2) = MAXLOC( ABS( qns(:,:) ), mask = llmsk )
iloc(1:2,3) = MINLOC( ABS( emp(:,:) ), mask = llmsk )
DO ji = 1, jptst ! local domain indices ==> global domain indices, excluding halos
iloc(1:2,ji) = (/ mig0(iloc(1,ji)), mjg0(iloc(2,ji)) /)
iloc(1:2,ji) = (/ mig(iloc(1,ji),0), mjg(iloc(2,ji),0) /)
END DO
iareamin(:) = narea ; iareamax(:) = narea ; iareasum(:) = 1 ! this is local information
ENDIF
......
......@@ -13,7 +13,6 @@ MODULE usrdef_hgr
!!----------------------------------------------------------------------
!! usr_def_hgr : initialize the horizontal mesh
!!----------------------------------------------------------------------
USE dom_oce , ONLY: nimpp, njmpp ! ocean space and time domain
USE c1d , ONLY: rn_lon1d, rn_lat1d ! ocean lon/lat define by namelist
USE par_oce ! ocean space and time domain
USE phycst ! physical constants
......
......@@ -14,7 +14,6 @@ MODULE usrdef_nam
!! usr_def_nam : read user defined namelist and set global domain size
!! usr_def_hgr : initialize the horizontal mesh
!!----------------------------------------------------------------------
USE dom_oce , ONLY: nimpp, njmpp ! ocean space and time domain
USE par_oce ! ocean space and time domain
USE phycst ! physical constants
!
......
......@@ -27,6 +27,8 @@
<field field_ref="sKE" name="sKE" operation = "instant" />
<field field_ref="ssh" name="sossheig" operation = "instant" />
<field field_ref="wetdep" name="hswe_wd" operation = "instant" />
<field field_ref="utau" name="sozotaux" operation = "instant" />
<field field_ref="vtau" name="sometauy" operation = "instant" />
</file>
<file id="file2" name_suffix="_grid_U" description="ocean U grid variables" >
......@@ -34,7 +36,6 @@
<field field_ref="e3u_0" name="e3u_0" operation = "instant" />
<field field_ref="hu" name="hu" operation = "instant" />
<field field_ref="ssu" name="ssu" operation = "instant" />
<field field_ref="utau" name="sozotaux" operation = "instant" />
</file>
<file id="file3" name_suffix="_grid_V" description="ocean V grid variables" >
......@@ -42,7 +43,6 @@
<field field_ref="e3v_0" name="e3v_0" operation = "instant" />
<field field_ref="hv" name="hv" operation = "instant" />
<field field_ref="ssv" name="ssv" operation = "instant" />
<field field_ref="vtau" name="sometauy" operation = "instant" />
</file>
<file id="file5" name_suffix="_grid_F" description="ocean F grid variables" >
......
......@@ -68,22 +68,22 @@ CONTAINS
!
IF(lwp) WRITE(numout,*) ' Gibraltar '
ij0 = 101 ; ij1 = 101 ! Gibraltar strait : partial slip (pfmsk=0.5)
ii0 = 139 ; ii1 = 140 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.5_wp
ii0 = 139 ; ii1 = 140 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 0.5_wp
ij0 = 102 ; ij1 = 102
ii0 = 139 ; ii1 = 140 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.5_wp
ii0 = 139 ; ii1 = 140 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 0.5_wp
!
IF(lwp) WRITE(numout,*) ' Bab el Mandeb '
ij0 = 87 ; ij1 = 88 ! Bab el Mandeb : partial slip (pfmsk=1)
ii0 = 160 ; ii1 = 160 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 1._wp
ii0 = 160 ; ii1 = 160 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 1._wp
ij0 = 88 ; ij1 = 88
ii0 = 159 ; ii1 = 159 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 1._wp
ii0 = 159 ; ii1 = 159 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 1._wp
!
! We keep this as an example but it is instable in this case
!IF(lwp) WRITE(numout,*) ' Danish straits '
! ij0 = 115 ; ij1 = 115 ! Danish straits : strong slip (pfmsk > 2)
! ii0 = 145 ; ii1 = 146 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp
! ii0 = 145 ; ii1 = 146 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 4._wp
! ij0 = 116 ; ij1 = 116
! ii0 = 145 ; ii1 = 146 ; pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp
! ii0 = 145 ; ii1 = 146 ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls) , mj0(ij0,nn_hls):mj1(ij1,nn_hls) , 1:jpk ) = 4._wp
!
CASE( 1 ) ! R1 case
IF(lwp) WRITE(numout,*)
......@@ -99,35 +99,35 @@ CONTAINS
IF(lwp) WRITE(numout,*) ' orca_r1: increase friction near the following straits : '
IF(lwp) WRITE(numout,*) ' Gibraltar '
ii0 = 282 ; ii1 = 283 ! Gibraltar Strait
ij0 = 241 - isrow ; ij1 = 241 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp
ij0 = 241 - isrow ; ij1 = 241 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 2._wp
!
IF(lwp) WRITE(numout,*) ' Bhosporus '
ii0 = 314 ; ii1 = 315 ! Bhosporus Strait
ij0 = 248 - isrow ; ij1 = 248 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp
ij0 = 248 - isrow ; ij1 = 248 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 2._wp
!
IF(lwp) WRITE(numout,*) ' Makassar (Top) '
ii0 = 48 ; ii1 = 48 ! Makassar Strait (Top)
ij0 = 189 - isrow ; ij1 = 190 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp
ij0 = 189 - isrow ; ij1 = 190 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 3._wp
!
IF(lwp) WRITE(numout,*) ' Lombok '
ii0 = 44 ; ii1 = 44 ! Lombok Strait
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 2._wp
!
IF(lwp) WRITE(numout,*) ' Ombai '
ii0 = 53 ; ii1 = 53 ! Ombai Strait
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 2._wp
!
IF(lwp) WRITE(numout,*) ' Timor Passage '
ii0 = 56 ; ii1 = 56 ! Timor Passage
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp
ij0 = 164 - isrow ; ij1 = 165 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 2._wp
!
IF(lwp) WRITE(numout,*) ' West Halmahera '
ii0 = 58 ; ii1 = 58 ! West Halmahera Strait
ij0 = 181 - isrow ; ij1 = 182 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp
ij0 = 181 - isrow ; ij1 = 182 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 3._wp
!
IF(lwp) WRITE(numout,*) ' East Halmahera '
ii0 = 55 ; ii1 = 55 ! East Halmahera Strait
ij0 = 181 - isrow ; ij1 = 182 - isrow ; pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp
ij0 = 181 - isrow ; ij1 = 182 - isrow ; pfmsk( mi0(ii0,nn_hls):mi1(ii1,nn_hls),mj0(ij0,nn_hls):mj1(ij1,nn_hls),1:jpk ) = 3._wp
!
CASE DEFAULT
IF(lwp) WRITE(numout,*)
......
......@@ -14,7 +14,6 @@ MODULE usrdef_nam
!! usr_def_nam : read user defined namelist and set global domain size
!! usr_def_hgr : initialize the horizontal mesh
!!----------------------------------------------------------------------
USE dom_oce , ONLY: nimpp, njmpp ! ocean space and time domain
USE par_oce ! ocean space and time domain
USE phycst ! physical constants
!
......
......@@ -61,7 +61,7 @@ CONTAINS
REAL(wp) :: ztauu, ztauv ! wind intensity projeted
REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3
REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient
REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables
REAL(wp) :: zmod, zcoef ! temporary variables
!!---------------------------------------------------------------------
! ---------------------------- !
......@@ -86,22 +86,19 @@ CONTAINS
ztauu = REAL( rn_tau, wp ) * COS( rn_theta * rad ) ! N.m-2
ztauv = - REAL( rn_tau, wp ) * SIN( rn_theta * rad ) ! N.m-2
zcoef = 1. / ( zrhoa * zcdrag )
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
! length of the domain : 2000km x 2000km
utau(ji,jj) = - ztauu * COS( rpi * gphiu(ji,jj) / 2000000._wp)
vtau(ji,jj) = - ztauv * COS( rpi * gphiv(ji,jj) / 2000000._wp)
utau(ji,jj) = - ztauu * COS( rpi * gphit(ji,jj) / 2000000._wp)
vtau(ji,jj) = - ztauv * COS( rpi * gphit(ji,jj) / 2000000._wp)
END_2D
! module of wind stress and wind speed at T-point
zcoef = 1. / ( zrhoa * zcdrag )
DO_2D( 0, 0, 0, 0 )
ztx = utau(ji-1,jj ) + utau(ji,jj)
zty = vtau(ji ,jj-1) + vtau(ji,jj)
zmod = 0.5 * SQRT( ztx * ztx + zty * zty )
taum(ji,jj) = zmod
zmod = SQRT( utau(ji,jj) * utau(ji,jj) + vtau(ji,jj) * vtau(ji,jj) )
taum(ji,jj) = zmod
wndm(ji,jj) = SQRT( zmod * zcoef )
END_2D
CALL lbc_lnk( 'usrdef_sbc', taum(:,:), 'T', 1. , wndm(:,:), 'T', 1. )
!
END SUBROUTINE usrdef_sbc_oce
......
......@@ -88,8 +88,8 @@ CONTAINS
#endif
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
zti = REAL( mig0(ji)-ii0, wp ) ! =0 at i=ii0 in the global grid without halos
ztj = REAL( mjg0(jj)-ij0, wp ) ! =0 at i=ij0 in the global grid without halos
zti = REAL( mig(ji,0)-ii0, wp ) ! =0 at i=ii0 in the global grid without halos
ztj = REAL( mjg(jj,0)-ij0, wp ) ! =0 at i=ij0 in the global grid without halos
plamt(ji,jj) = rn_dx * zti
plamu(ji,jj) = rn_dx * ( zti + 0.5_wp )
......
......@@ -93,8 +93,8 @@ CONTAINS
ENDIF
#endif
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
zti = REAL( mig0(ji)-1, wp ) ! start at i=0 in the global grid without halos
ztj = REAL( mjg0(jj)-1, wp ) ! start at j=0 in the global grid without halos
zti = REAL( mig(ji,0)-1, wp ) ! start at i=0 in the global grid without halos
ztj = REAL( mjg(jj,0)-1, wp ) ! start at j=0 in the global grid without halos
plamt(ji,jj) = roffsetx + rn_dx * 1.e-3 * ( zti - 0.5_wp )
plamu(ji,jj) = roffsetx + rn_dx * 1.e-3 * zti
......
......@@ -69,16 +69,16 @@
<field field_ref="qt" name="sohefldo" />
<field field_ref="mldr10_1" name="somxl010" />
<field field_ref="mldkz5" name="somixhgt" />
<field field_ref="utau" name="sozotaux" />
<field field_ref="vtau" name="sometauy" />
</file>
<file id="file2" name_suffix="_grid_U" description="ocean U grid variables" >
<field field_ref="uoce" name="vozocrtx" />
<field field_ref="utau" name="sozotaux" />
</file>
<file id="file3" name_suffix="_grid_V" description="ocean V grid variables" >
<field field_ref="voce" name="vomecrty" />
<field field_ref="vtau" name="sometauy" />
</file>
<file id="file4" name_suffix="_grid_W" description="ocean W grid variables" >
......
......@@ -75,14 +75,14 @@ CONTAINS
zfact = rn_dx * 1.e-3 ! conversion in km
DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
! ! longitude (west coast at lon=0°)
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig0(ji)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig0(ji)-1 , wp ) )
plamt(ji,jj) = zfact * ( - 0.5 + REAL( mig(ji,0)-1 , wp ) )
plamu(ji,jj) = zfact * ( REAL( mig(ji,0)-1 , wp ) )
plamv(ji,jj) = plamt(ji,jj)
plamf(ji,jj) = plamu(ji,jj)
! ! latitude (south coast at lat= 0°)
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg0(jj)-1 , wp ) )
pphit(ji,jj) = zfact * ( - 0.5 + REAL( mjg(jj,0)-1 , wp ) )
pphiu(ji,jj) = pphit(ji,jj)
pphiv(ji,jj) = zfact * ( REAL( mjg0(jj)-1 , wp ) )
pphiv(ji,jj) = zfact * ( REAL( mjg(jj,0)-1 , wp ) )
pphif(ji,jj) = pphiv(ji,jj)
END_2D
!
......
......@@ -13,8 +13,7 @@ MODULE usrdef_istate
!!----------------------------------------------------------------------
!! usr_def_istate : initial state in Temperature and salinity
!!----------------------------------------------------------------------
USE par_oce ! ocean space and time domain
USE dom_oce , ONLY : mi0, mig, mjg, glamt, gphit, ht_0
USE dom_oce ! ocean space and time domain
USE phycst ! physical constants
USE wet_dry ! Wetting and drying
!
......@@ -44,7 +43,7 @@ CONTAINS
!! ** Purpose : Initialization of the dynamics and tracers
!! Here WAD_TEST_CASES configuration
!!
q !! ** Method : - set temprature field
!! ** Method : - set temprature field
!! - set salinity field
!!----------------------------------------------------------------------
REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pdept ! depth of t-point [m]
......@@ -116,7 +115,7 @@ q !! ** Method : - set temprature field
IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel with gaussian ridge'
IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
!
DO ji = mi0(jpiglo/2), mi0(jpiglo)
DO ji = mi0(jpiglo/2,nn_hls), mi1(jpiglo,nn_hls)
pts(ji,:,:,jp_sal) = 30._wp
END DO
!
......@@ -230,7 +229,7 @@ q !! ** Method : - set temprature field
pssh(ji,:) = ( -2.5_wp + 5.5_wp*(50._wp-glamt(ji,1))/50._wp)*ptmask(ji,:,1)
END DO
!
DO ji = mi0(jpiglo/2), mi0(jpiglo)
DO ji = mi0(jpiglo/2,nn_hls), mi1(jpiglo,nn_hls)
pssh(ji,:) = -0.1*ptmask(ji,:,1)
END DO
!
......
......@@ -14,7 +14,7 @@ MODULE usrdef_zgr
!! zgr_z : reference 1D z-coordinate
!!---------------------------------------------------------------------
USE oce ! ocean variables
USE dom_oce , ONLY: ht_0, mi0, mi1, mj0, mj1, glamt, gphit ! ocean space and time domain
USE dom_oce ! ocean space and time domain
USE usrdef_nam ! User defined : namelist variables
USE wet_dry , ONLY: rn_wdmin1, rn_wdmin2, rn_wdld ! Wetting and drying
!
......@@ -101,10 +101,10 @@ CONTAINS
zi = MIN((glamt(ji,1) - 10.0)/40.0, 1.0 )
zht(ji,:) = MAX(zbathy*zi, -2.0)
END DO
zht(mi0(1):mi1(1),:) = -4._wp
zht(mi0(jpiglo):mi1(jpiglo),:) = -4._wp
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
! ! ====================
CASE ( 2, 3, 8 ) ! WAD 2 or 3 configuration
! ! ====================
......@@ -117,11 +117,11 @@ CONTAINS
zi = MAX(1.0-((glamt(ji,1)-25.0)**2)/484.0, -0.3 )
zht(ji,:) = MAX(zbathy*zi, -2.0)
END DO
zht(mi0(1):mi1(1),:) = -4._wp
zht(mi0(jpiglo):mi1(jpiglo),:) = -4._wp
zht(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = -4._wp
IF( nn_cfg /= 8 ) THEN
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
ENDIF
! ! ====================
CASE ( 4 ) ! WAD 4 configuration
......@@ -138,10 +138,10 @@ CONTAINS
zht(ji,jj) = MAX(zbathy*zi*zj, -2.0)
END DO
END DO
zht(mi0(1):mi1(1),:) = -4._wp
zht(mi0(jpiglo):mi1(jpiglo),:) = -4._wp
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(mi0(1 ,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
! ! ===========================
CASE ( 5 ) ! WAD 5 configuration
! ! ====================
......@@ -168,10 +168,10 @@ CONTAINS
ENDIF
END DO
! ! ===========================
zht(mi0(1):mi1(1),:) = -4._wp
zht(mi0(jpiglo):mi1(jpiglo),:) = -4._wp
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
! ! ===========================
CASE ( 6 ) ! WAD 6 configuration
! ! ====================
......@@ -185,10 +185,10 @@ CONTAINS
zj = 1.075*MAX(EXP(-1.0*((glamt(ji,1)-25.0)**2)/32.0) , 0.0 )
zht(ji,:) = MAX(zbathy*(zi-zj), -2.0)
END DO
zht(mi0(1):mi1(1),:) = -4._wp
zht(mi0(jpiglo):mi1(jpiglo),:) = -4._wp
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
! ! ===========================
CASE ( 7 ) ! WAD 7 configuration
! ! ====================
......@@ -215,9 +215,9 @@ CONTAINS
ENDIF
END DO
! ! ===========================
zht(mi0(1):mi1(1),:) = -4._wp
zht(:,mj0(1):mj1(1)) = -4._wp
zht(:,mj0(jpjglo):mj1(jpjglo)) = -4._wp
zht(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = -4._wp
zht(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = -4._wp
zht(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = -4._wp
CASE DEFAULT
! ! ===========================
WRITE(ctmp1,*) 'WAD test with a ', nn_cfg,' option is not coded'
......@@ -234,10 +234,10 @@ CONTAINS
END_2D
CALL lbc_lnk( 'usrdef_zgr', zhu, 'U', 1. ) ! boundary condition: this mask the surrounding grid-points
! ! ==>>> set by hand non-zero value on first/last columns & rows
DO ji = mi0(1), mi1(1) ! first row of global domain only
DO ji = mi0( 1,nn_hls), mi1( 1,nn_hls) ! first row of global domain only
zhu(ji,:) = zht(1,:)
END DO
DO ji = mi0(jpiglo), mi1(jpiglo) ! last row of global domain only
DO ji = mi0(jpiglo,nn_hls), mi1(jpiglo,nn_hls) ! last row of global domain only
zhu(ji,:) = zht(jpi,:)
END DO
! at v-point: averaging zht
......@@ -246,10 +246,10 @@ CONTAINS
zhv(ji,jj) = 0.5_wp * ( zht(ji,jj) + zht(ji,jj+1) )
END_2D
CALL lbc_lnk( 'usrdef_zgr', zhv, 'V', 1. ) ! boundary condition: this mask the surrounding grid-points
DO jj = mj0(1), mj1(1) ! first row of global domain only
DO jj = mj0( 1,nn_hls), mj1( 1,nn_hls) ! first row of global domain only
zhv(:,jj) = zht(:,jj)
END DO
DO jj = mj0(jpjglo), mj1(jpjglo) ! last row of global domain only
DO jj = mj0(jpjglo,nn_hls), mj1(jpjglo,nn_hls) ! last row of global domain only
zhv(:,jj) = zht(:,jj)
END DO
!
......@@ -261,10 +261,10 @@ CONTAINS
! no ocean cavities : top ocean level is ONE, except over land
! the ocean basin surrounnded by land (1+nn_hls grid-points) set through lbc_lnk call
z2d(:,:) = 1._wp ! surface ocean is the 1st level
z2d(mi0(1):mi1(1),:) = 0._wp
z2d(mi0(jpiglo):mi1(jpiglo),:) = 0._wp
z2d(:,mj0(1):mj1(1)) = 0._wp
z2d(:,mj0(jpjglo):mj1(jpjglo)) = 0._wp
z2d(mi0( 1,nn_hls):mi1( 1,nn_hls),:) = 0._wp
z2d(mi0(jpiglo,nn_hls):mi1(jpiglo,nn_hls),:) = 0._wp
z2d(:,mj0( 1,nn_hls):mj1( 1,nn_hls)) = 0._wp
z2d(:,mj0(jpjglo,nn_hls):mj1(jpjglo,nn_hls)) = 0._wp
CALL lbc_lnk( 'usrdef_zgr', z2d, 'T', 1. ) ! closed basin, see userdef_nam.F90
k_top(:,:) = NINT( z2d(:,:) )
......