New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 6140 for trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2015-12-21T12:35:23+01:00 (8 years ago)
Author:
timgraham
Message:

Merge of branches/2015/dev_merge_2015 back into trunk. Merge excludes NEMOGCM/TOOLS/OBSTOOLS/ for now due to issues with the change of file type. Will sort these manually with further commits.

Branch merged as follows:
In the working copy of branch ran:
svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk@HEAD
Small conflicts due to bug fixes applied to trunk since the dev_merge_2015 was copied. Bug fixes were applied to the branch as well so these were easy to resolve.
Branch committed at this stage

In working copy run:
svn switch svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk
to switch working copy

Run:
svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_merge_2015
to merge the branch into the trunk and then commit - no conflicts at this stage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r5836 r6140  
    22   !!============================================================================== 
    33   !!                       ***  MODULE domzgr   *** 
    4    !! Ocean initialization : domain initialization 
     4   !! Ocean domain : definition of the vertical coordinate system 
    55   !!============================================================================== 
    66   !! History :  OPA  ! 1995-12  (G. Madec)  Original code : s vertical coordinate 
     
    3838   USE closea            ! closed seas 
    3939   USE c1d               ! 1D vertical configuration 
     40   ! 
    4041   USE in_out_manager    ! I/O manager 
    4142   USE iom               ! I/O library 
     
    7374 
    7475  !! * Substitutions 
    75 #  include "domzgr_substitute.h90" 
    7676#  include "vectopt_loop_substitute.h90" 
    7777   !!---------------------------------------------------------------------- 
     
    102102      INTEGER ::   ios 
    103103      ! 
    104       NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 
     104      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav, ln_linssh 
    105105      !!---------------------------------------------------------------------- 
    106106      ! 
     
    120120         WRITE(numout,*) 'dom_zgr : vertical coordinate' 
    121121         WRITE(numout,*) '~~~~~~~' 
    122          WRITE(numout,*) '          Namelist namzgr : set vertical coordinate' 
    123          WRITE(numout,*) '             z-coordinate - full steps      ln_zco    = ', ln_zco 
    124          WRITE(numout,*) '             z-coordinate - partial steps   ln_zps    = ', ln_zps 
    125          WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
    126          WRITE(numout,*) '             ice shelf cavities             ln_isfcav = ', ln_isfcav 
     122         WRITE(numout,*) '   Namelist namzgr : set vertical coordinate' 
     123         WRITE(numout,*) '      z-coordinate - full steps      ln_zco    = ', ln_zco 
     124         WRITE(numout,*) '      z-coordinate - partial steps   ln_zps    = ', ln_zps 
     125         WRITE(numout,*) '      s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
     126         WRITE(numout,*) '      ice shelf cavities             ln_isfcav = ', ln_isfcav 
     127         WRITE(numout,*) '      linear free surface            ln_linssh = ', ln_linssh 
    127128      ENDIF 
     129 
     130      IF( ln_linssh .AND. lwp) WRITE(numout,*) '   linear free surface: the vertical mesh does not change in time' 
    128131 
    129132      ioptio = 0                       ! Check Vertical coordinate options 
     
    155158      ! 
    156159      IF( nprint == 1 .AND. lwp )   THEN 
    157          WRITE(numout,*) ' MIN val mbathy ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
     160         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    158161         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    159             &                   ' w ',   MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gdep3w_0(:,:,:) ) 
    160          WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0(:,:,:) ), ' f ', MINVAL( e3f_0(:,:,:) ),  & 
    161             &                   ' u ',   MINVAL( e3u_0(:,:,:) ), ' u ', MINVAL( e3v_0(:,:,:) ),  & 
    162             &                   ' uw',   MINVAL( e3uw_0(:,:,:)), ' vw', MINVAL( e3vw_0(:,:,:)),   & 
    163             &                   ' w ',   MINVAL( e3w_0(:,:,:) ) 
     162            &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gde3w_0(:,:,:) ) 
     163         WRITE(numout,*) ' MIN val e3    t ', MINVAL(   e3t_0(:,:,:) ), ' f ', MINVAL(  e3f_0(:,:,:) ),  & 
     164            &                          ' u ', MINVAL(   e3u_0(:,:,:) ), ' u ', MINVAL(  e3v_0(:,:,:) ),  & 
     165            &                          ' uw', MINVAL(  e3uw_0(:,:,:) ), ' vw', MINVAL( e3vw_0(:,:,:)),   & 
     166            &                          ' w ', MINVAL(  e3w_0(:,:,:) ) 
    164167 
    165168         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    166             &                   ' w ',   MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gdep3w_0(:,:,:) ) 
    167          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0(:,:,:) ), ' f ', MAXVAL( e3f_0(:,:,:) ),  & 
    168             &                   ' u ',   MAXVAL( e3u_0(:,:,:) ), ' u ', MAXVAL( e3v_0(:,:,:) ),  & 
    169             &                   ' uw',   MAXVAL( e3uw_0(:,:,:)), ' vw', MAXVAL( e3vw_0(:,:,:)),   & 
    170             &                   ' w ',   MAXVAL( e3w_0(:,:,:) ) 
     169            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gde3w_0(:,:,:) ) 
     170         WRITE(numout,*) ' MAX val e3    t ', MAXVAL(   e3t_0(:,:,:) ), ' f ', MAXVAL(  e3f_0(:,:,:) ),  & 
     171            &                          ' u ', MAXVAL(   e3u_0(:,:,:) ), ' u ', MAXVAL(  e3v_0(:,:,:) ),  & 
     172            &                          ' uw', MAXVAL(  e3uw_0(:,:,:) ), ' vw', MAXVAL(  e3vw_0(:,:,:) ),  & 
     173            &                          ' w ', MAXVAL(  e3w_0(:,:,:) ) 
    171174      ENDIF 
    172175      ! 
     
    379382      !!              - bathy : meter bathymetry (in meters) 
    380383      !!---------------------------------------------------------------------- 
    381       INTEGER  ::   ji, jj, jl, jk            ! dummy loop indices 
     384      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    382385      INTEGER  ::   inum                      ! temporary logical unit 
    383386      INTEGER  ::   ierror                    ! error flag 
     
    541544               CALL iom_close( inum ) 
    542545               WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
     546 
     547               ! set grounded point to 0  
     548               ! (a treshold could be set here if needed, or set it offline based on the grounded fraction) 
     549               WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin ) 
     550                  misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
     551                  mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     552               END WHERE 
    543553            END IF 
    544554            !        
     
    578588      !                        
    579589      IF ( .not. ln_sco ) THEN                                !==  set a minimum depth  ==! 
    580          ! patch to avoid case bathy = ice shelf draft and bathy between 0 and zhmin 
    581          IF ( ln_isfcav ) THEN 
    582             WHERE (bathy == risfdep) 
    583                bathy   = 0.0_wp ; risfdep = 0.0_wp 
    584             END WHERE 
    585          END IF 
    586          ! end patch 
    587590         IF( rn_hmin < 0._wp ) THEN    ;   ik = - INT( rn_hmin )                                      ! from a nb of level 
    588591         ELSE                          ;   ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 )  ! from a depth 
     
    674677      !!              - update bathy : meter bathymetry (in meters) 
    675678      !!---------------------------------------------------------------------- 
    676       !! 
    677679      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    678680      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    679681      REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
    680  
    681682      !!---------------------------------------------------------------------- 
    682683      ! 
     
    775776         IF(lwp) WRITE(numout,*) ' you can decrease jpk to ', ikmax+1 
    776777      ENDIF 
    777  
    778       IF( lwp .AND. nprint == 1 ) THEN      ! control print 
    779          WRITE(numout,*) 
    780          WRITE(numout,*) ' bathymetric field :   number of non-zero T-levels ' 
    781          WRITE(numout,*) ' ------------------' 
    782          CALL prihin( mbathy, jpi, jpj, 1, jpi, 1, 1, jpj, 1, 3, numout ) 
    783          WRITE(numout,*) 
    784       ENDIF 
    785778      ! 
    786779      CALL wrk_dealloc( jpi, jpj, zbathy ) 
     
    803796      !!                                     (min value = 1 over land) 
    804797      !!---------------------------------------------------------------------- 
    805       !! 
    806798      INTEGER ::   ji, jj   ! dummy loop indices 
    807799      REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
     
    835827   END SUBROUTINE zgr_bot_level 
    836828 
    837       SUBROUTINE zgr_top_level 
    838       !!---------------------------------------------------------------------- 
    839       !!                    ***  ROUTINE zgr_bot_level  *** 
     829 
     830   SUBROUTINE zgr_top_level 
     831      !!---------------------------------------------------------------------- 
     832      !!                    ***  ROUTINE zgr_top_level  *** 
    840833      !! 
    841834      !! ** Purpose :   defines the vertical index of ocean top (mik. arrays) 
     
    847840      !!                                     (min value = 1) 
    848841      !!---------------------------------------------------------------------- 
    849       !! 
    850842      INTEGER ::   ji, jj   ! dummy loop indices 
    851843      REAL(wp), POINTER, DIMENSION(:,:) ::  zmik 
     
    881873   END SUBROUTINE zgr_top_level 
    882874 
     875 
    883876   SUBROUTINE zgr_zco 
    884877      !!---------------------------------------------------------------------- 
    885878      !!                  ***  ROUTINE zgr_zco  *** 
    886879      !! 
    887       !! ** Purpose :   define the z-coordinate system 
     880      !! ** Purpose :   define the reference z-coordinate system 
    888881      !! 
    889882      !! ** Method  :   set 3D coord. arrays to reference 1D array  
     
    895888      ! 
    896889      DO jk = 1, jpk 
    897          gdept_0 (:,:,jk) = gdept_1d(jk) 
    898          gdepw_0 (:,:,jk) = gdepw_1d(jk) 
    899          gdep3w_0(:,:,jk) = gdepw_1d(jk) 
    900          e3t_0   (:,:,jk) = e3t_1d  (jk) 
    901          e3u_0   (:,:,jk) = e3t_1d  (jk) 
    902          e3v_0   (:,:,jk) = e3t_1d  (jk) 
    903          e3f_0   (:,:,jk) = e3t_1d  (jk) 
    904          e3w_0   (:,:,jk) = e3w_1d  (jk) 
    905          e3uw_0  (:,:,jk) = e3w_1d  (jk) 
    906          e3vw_0  (:,:,jk) = e3w_1d  (jk) 
     890         gdept_0(:,:,jk) = gdept_1d(jk) 
     891         gdepw_0(:,:,jk) = gdepw_1d(jk) 
     892         gde3w_0(:,:,jk) = gdepw_1d(jk) 
     893         e3t_0  (:,:,jk) = e3t_1d  (jk) 
     894         e3u_0  (:,:,jk) = e3t_1d  (jk) 
     895         e3v_0  (:,:,jk) = e3t_1d  (jk) 
     896         e3f_0  (:,:,jk) = e3t_1d  (jk) 
     897         e3w_0  (:,:,jk) = e3w_1d  (jk) 
     898         e3uw_0 (:,:,jk) = e3w_1d  (jk) 
     899         e3vw_0 (:,:,jk) = e3w_1d  (jk) 
    907900      END DO 
    908901      ! 
     
    917910      !!                      
    918911      !! ** Purpose :   the depth and vertical scale factor in partial step 
    919       !!      z-coordinate case 
     912      !!              reference z-coordinate case 
    920913      !! 
    921914      !! ** Method  :   Partial steps : computes the 3D vertical scale factors 
     
    957950      !!  Reference :   Pacanowsky & Gnanadesikan 1997, Mon. Wea. Rev., 126, 3248-3270. 
    958951      !!---------------------------------------------------------------------- 
    959       !! 
    960952      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
    961953      INTEGER  ::   ik, it, ikb, ikt ! temporary integers 
    962       LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    963954      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    964955      REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
    965       REAL(wp) ::   zmax             ! Maximum depth 
    966956      REAL(wp) ::   zdiff            ! temporary scalar 
    967       REAL(wp) ::   zrefdep          ! temporary scalar 
     957      REAL(wp) ::   zmax             ! temporary scalar 
    968958      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
    969959      !!--------------------------------------------------------------------- 
     
    971961      IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
    972962      ! 
    973       CALL wrk_alloc( jpi, jpj, jpk, zprt ) 
     963      CALL wrk_alloc( jpi,jpj,jpk,  zprt ) 
    974964      ! 
    975965      IF(lwp) WRITE(numout,*) 
     
    977967      IF(lwp) WRITE(numout,*) '    ~~~~~~~ ' 
    978968      IF(lwp) WRITE(numout,*) '              mbathy is recomputed : bathy_level file is NOT used' 
    979  
    980       ll_print = .FALSE.                   ! Local variable for debugging 
    981        
    982       IF(lwp .AND. ll_print) THEN          ! control print of the ocean depth 
    983          WRITE(numout,*) 
    984          WRITE(numout,*) 'dom_zgr_zps:  bathy (in hundred of meters)' 
    985          CALL prihre( bathy, jpi, jpj, 1,jpi, 1, 1, jpj, 1, 1.e-2, numout ) 
    986       ENDIF 
    987  
    988969 
    989970      ! bathymetry in level (from bathy_meter) 
     
    1004985      END DO 
    1005986 
    1006       IF ( ln_isfcav ) CALL zgr_isf 
    1007  
    1008987      ! Scale factors and depth at T- and W-points 
    1009988      DO jk = 1, jpk                        ! intitialization to the reference z-coordinate 
     
    1013992         e3w_0  (:,:,jk) = e3w_1d  (jk) 
    1014993      END DO 
     994       
     995      ! Bathy, iceshelf draft, scale factor and depth at T- and W- points in case of isf 
     996      IF ( ln_isfcav ) CALL zgr_isf 
     997 
     998      ! Scale factors and depth at T- and W-points 
     999      IF ( .NOT. ln_isfcav ) THEN 
     1000         DO jj = 1, jpj 
     1001            DO ji = 1, jpi 
     1002               ik = mbathy(ji,jj) 
     1003               IF( ik > 0 ) THEN               ! ocean point only 
     1004                  ! max ocean level case 
     1005                  IF( ik == jpkm1 ) THEN 
     1006                     zdepwp = bathy(ji,jj) 
     1007                     ze3tp  = bathy(ji,jj) - gdepw_1d(ik) 
     1008                     ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) ) 
     1009                     e3t_0(ji,jj,ik  ) = ze3tp 
     1010                     e3t_0(ji,jj,ik+1) = ze3tp 
     1011                     e3w_0(ji,jj,ik  ) = ze3wp 
     1012                     e3w_0(ji,jj,ik+1) = ze3tp 
     1013                     gdepw_0(ji,jj,ik+1) = zdepwp 
     1014                     gdept_0(ji,jj,ik  ) = gdept_1d(ik-1) + ze3wp 
     1015                     gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp 
     1016                     ! 
     1017                  ELSE                         ! standard case 
     1018                     IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN  ;   gdepw_0(ji,jj,ik+1) = bathy(ji,jj) 
     1019                     ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
     1020                     ENDIF 
     1021   !gm Bug?  check the gdepw_1d 
     1022                     !       ... on ik 
     1023                     gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) )   & 
     1024                        &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
     1025                        &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
     1026                     e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
     1027                        &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
     1028                     e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
     1029                        &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
     1030                     !       ... on ik+1 
     1031                     e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     1032                     e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     1033                     gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
     1034                  ENDIF 
     1035               ENDIF 
     1036            END DO 
     1037         END DO 
     1038         ! 
     1039         it = 0 
     1040         DO jj = 1, jpj 
     1041            DO ji = 1, jpi 
     1042               ik = mbathy(ji,jj) 
     1043               IF( ik > 0 ) THEN               ! ocean point only 
     1044                  e3tp (ji,jj) = e3t_0(ji,jj,ik) 
     1045                  e3wp (ji,jj) = e3w_0(ji,jj,ik) 
     1046                  ! test 
     1047                  zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik  ) 
     1048                  IF( zdiff <= 0._wp .AND. lwp ) THEN  
     1049                     it = it + 1 
     1050                     WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj 
     1051                     WRITE(numout,*) ' bathy = ', bathy(ji,jj) 
     1052                     WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 
     1053                     WRITE(numout,*) ' e3tp    = ', e3t_0  (ji,jj,ik), ' e3wp    = ', e3w_0  (ji,jj,ik  ) 
     1054                  ENDIF 
     1055               ENDIF 
     1056            END DO 
     1057         END DO 
     1058      END IF 
     1059      ! 
     1060      ! Scale factors and depth at U-, V-, UW and VW-points 
     1061      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     1062         e3u_0 (:,:,jk) = e3t_1d(jk) 
     1063         e3v_0 (:,:,jk) = e3t_1d(jk) 
     1064         e3uw_0(:,:,jk) = e3w_1d(jk) 
     1065         e3vw_0(:,:,jk) = e3w_1d(jk) 
     1066      END DO 
     1067 
     1068      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
     1069         DO jj = 1, jpjm1 
     1070            DO ji = 1, fs_jpim1   ! vector opt. 
     1071               e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
     1072               e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
     1073               e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
     1074               e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
     1075            END DO 
     1076         END DO 
     1077      END DO 
     1078      IF ( ln_isfcav ) THEN 
     1079      ! (ISF) define e3uw (adapted for 2 cells in the water column) 
     1080         DO jj = 2, jpjm1  
     1081            DO ji = 2, fs_jpim1   ! vector opt.  
     1082               ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj)) 
     1083               ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj)) 
     1084               IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) & 
     1085                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) ) 
     1086               ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1)) 
     1087               ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1)) 
     1088               IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) & 
     1089                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) ) 
     1090            END DO 
     1091         END DO 
     1092      END IF 
     1093 
     1094      CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     1095      CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
     1096      ! 
     1097 
     1098      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1099         WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
     1100         WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
     1101         WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
     1102         WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
     1103      END DO 
     1104       
     1105      ! Scale factor at F-point 
     1106      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     1107         e3f_0(:,:,jk) = e3t_1d(jk) 
     1108      END DO 
     1109      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
     1110         DO jj = 1, jpjm1 
     1111            DO ji = 1, fs_jpim1   ! vector opt. 
     1112               e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
     1113            END DO 
     1114         END DO 
     1115      END DO 
     1116      CALL lbc_lnk( e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
     1117      ! 
     1118      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1119         WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
     1120      END DO 
     1121!!gm  bug ? :  must be a do loop with mj0,mj1 
    10151122      !  
     1123      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
     1124      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
     1125      e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
     1126      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
     1127      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
     1128 
     1129      ! Control of the sign 
     1130      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
     1131      IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
     1132      IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
     1133      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
     1134      
     1135      ! Compute gde3w_0 (vertical sum of e3w) 
     1136      IF ( ln_isfcav ) THEN ! if cavity 
     1137         WHERE( misfdep == 0 )   misfdep = 1 
     1138         DO jj = 1,jpj 
     1139            DO ji = 1,jpi 
     1140               gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
     1141               DO jk = 2, misfdep(ji,jj) 
     1142                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1143               END DO 
     1144               IF( misfdep(ji,jj) >= 2 )   gde3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 
     1145               DO jk = misfdep(ji,jj) + 1, jpk 
     1146                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1147               END DO 
     1148            END DO 
     1149         END DO 
     1150      ELSE ! no cavity 
     1151         gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
     1152         DO jk = 2, jpk 
     1153            gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
     1154         END DO 
     1155      END IF 
     1156      ! 
     1157      CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
     1158      ! 
     1159      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
     1160      ! 
     1161   END SUBROUTINE zgr_zps 
     1162 
     1163 
     1164   SUBROUTINE zgr_isf 
     1165      !!---------------------------------------------------------------------- 
     1166      !!                    ***  ROUTINE zgr_isf  *** 
     1167      !!    
     1168      !! ** Purpose :   check the bathymetry in levels 
     1169      !!    
     1170      !! ** Method  :   THe water column have to contained at least 2 cells 
     1171      !!                Bathymetry and isfdraft are modified (dig/close) to respect 
     1172      !!                this criterion. 
     1173      !!    
     1174      !! ** Action  : - test compatibility between isfdraft and bathy  
     1175      !!              - bathy and isfdraft are modified 
     1176      !!---------------------------------------------------------------------- 
     1177      INTEGER  ::   ji, jj, jl, jk       ! dummy loop indices 
     1178      INTEGER  ::   ik, it               ! temporary integers 
     1179      INTEGER  ::   icompt, ibtest       ! (ISF) 
     1180      INTEGER  ::   ibtestim1, ibtestip1 ! (ISF) 
     1181      INTEGER  ::   ibtestjm1, ibtestjp1 ! (ISF) 
     1182      REAL(wp) ::   zdepth           ! Ajusted ocean depth to avoid too small e3t 
     1183      REAL(wp) ::   zmax             ! Maximum and minimum depth 
     1184      REAL(wp) ::   zbathydiff       ! isf temporary scalar 
     1185      REAL(wp) ::   zrisfdepdiff     ! isf temporary scalar 
     1186      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
     1187      REAL(wp) ::   zdepwp           ! Ajusted ocean depth to avoid too small e3t 
     1188      REAL(wp) ::   zdiff            ! temporary scalar 
     1189      REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
     1190      INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
     1191      !!--------------------------------------------------------------------- 
     1192      ! 
     1193      IF( nn_timing == 1 )   CALL timing_start('zgr_isf') 
     1194      ! 
     1195      CALL wrk_alloc( jpi,jpj,   zbathy, zmask, zrisfdep) 
     1196      CALL wrk_alloc( jpi,jpj,   zmisfdep, zmbathy ) 
     1197 
     1198      ! (ISF) compute misfdep 
     1199      WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
     1200      ELSEWHERE                      ;                         misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
     1201      END WHERE   
     1202 
     1203      ! Compute misfdep for ocean points (i.e. first wet level)  
     1204      ! find the first ocean level such that the first level thickness  
     1205      ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
     1206      ! e3t_0 is the reference level thickness  
     1207      DO jk = 2, jpkm1  
     1208         zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
     1209         WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
     1210      END DO  
     1211      WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) ) 
     1212         risfdep(:,:) = 0. ; misfdep(:,:) = 1 
     1213      END WHERE 
     1214 
     1215      ! remove very shallow ice shelf (less than ~ 10m if 75L) 
     1216      WHERE (risfdep(:,:) <= 10._wp .AND. misfdep(:,:) > 1) 
     1217         misfdep = 0; risfdep = 0.0_wp; 
     1218         mbathy  = 0; bathy   = 0.0_wp; 
     1219      END WHERE 
     1220      WHERE (bathy(:,:) <= 30.0_wp .AND. gphit < -60._wp) 
     1221         misfdep = 0; risfdep = 0.0_wp; 
     1222         mbathy  = 0; bathy   = 0.0_wp; 
     1223      END WHERE 
     1224  
     1225! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation 
     1226      icompt = 0  
     1227! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
     1228      DO jl = 1, 10      
     1229         ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments) 
     1230         WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin) 
     1231            misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
     1232            mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     1233         END WHERE 
     1234         WHERE (mbathy(:,:) <= 0)  
     1235            misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
     1236            mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
     1237         END WHERE 
     1238         IF( lk_mpp ) THEN 
     1239            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1240            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1241            misfdep(:,:) = INT( zbathy(:,:) ) 
     1242 
     1243            CALL lbc_lnk( risfdep,'T', 1. ) 
     1244            CALL lbc_lnk( bathy,  'T', 1. ) 
     1245 
     1246            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1247            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1248            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1249         ENDIF 
     1250         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
     1251            misfdep( 1 ,:) = misfdep(jpim1,:)            ! local domain is cyclic east-west  
     1252            misfdep(jpi,:) = misfdep(  2  ,:)  
     1253            mbathy( 1 ,:)  = mbathy(jpim1,:)             ! local domain is cyclic east-west 
     1254            mbathy(jpi,:)  = mbathy(  2  ,:) 
     1255         ENDIF 
     1256 
     1257         ! split last cell if possible (only where water column is 2 cell or less) 
     1258         ! if coupled to ice sheet, we do not modify the bathymetry (can be discuss). 
     1259         IF ( .NOT. ln_iscpl) THEN 
     1260            DO jk = jpkm1, 1, -1 
     1261               zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1262               WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
     1263                  mbathy(:,:) = jk 
     1264                  bathy(:,:)  = zmax 
     1265               END WHERE 
     1266            END DO 
     1267         END IF 
     1268  
     1269         ! split top cell if possible (only where water column is 2 cell or less) 
     1270         DO jk = 2, jpkm1 
     1271            zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1272            WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
     1273               misfdep(:,:) = jk 
     1274               risfdep(:,:) = zmax 
     1275            END WHERE 
     1276         END DO 
     1277 
     1278  
     1279 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
     1280         DO jj = 1, jpj 
     1281            DO ji = 1, jpi 
     1282               ! find the minimum change option: 
     1283               ! test bathy 
     1284               IF (risfdep(ji,jj) > 1) THEN 
     1285                  IF ( .NOT. ln_iscpl ) THEN 
     1286                     zbathydiff  =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
     1287                         &            + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1288                     zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
     1289                         &            - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1290                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
     1291                        IF (zbathydiff <= zrisfdepdiff) THEN 
     1292                           bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
     1293                           mbathy(ji,jj)= mbathy(ji,jj) + 1 
     1294                        ELSE 
     1295                           risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
     1296                           misfdep(ji,jj) = misfdep(ji,jj) - 1 
     1297                        END IF 
     1298                     ENDIF 
     1299                  ELSE 
     1300                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
     1301                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
     1302                        misfdep(ji,jj) = misfdep(ji,jj) - 1 
     1303                     END IF 
     1304                  END IF 
     1305               END IF 
     1306            END DO 
     1307         END DO 
     1308  
     1309         ! At least 2 levels for water thickness at T, U, and V point. 
     1310         DO jj = 1, jpj 
     1311            DO ji = 1, jpi 
     1312               ! find the minimum change option: 
     1313               ! test bathy 
     1314               IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1315                  IF ( .NOT. ln_iscpl ) THEN  
     1316                     zbathydiff  =ABS(bathy(ji,jj)   - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1317                         &                             + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1318                     zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj)  ) &  
     1319                         &                             - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1320                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1321                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1322                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1323                     ELSE 
     1324                        misfdep(ji,jj)= misfdep(ji,jj) - 1 
     1325                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
     1326                     END IF 
     1327                  ELSE 
     1328                     misfdep(ji,jj)= misfdep(ji,jj) - 1 
     1329                     risfdep(ji,jj)= gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
     1330                  END IF 
     1331               ENDIF 
     1332            END DO 
     1333         END DO 
     1334  
     1335 ! point V mbathy(ji,jj) == misfdep(ji,jj+1)  
     1336         DO jj = 1, jpjm1 
     1337            DO ji = 1, jpim1 
     1338               IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1339                  IF ( .NOT. ln_iscpl ) THEN  
     1340                     zbathydiff  =ABS(bathy(ji,jj    ) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1341                          &                              + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
     1342                     zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) & 
     1343                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
     1344                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1345                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1346                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
     1347                     ELSE 
     1348                        misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
     1349                        risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
     1350                     END IF 
     1351                  ELSE 
     1352                     misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
     1353                     risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
     1354                  END IF 
     1355               ENDIF 
     1356            END DO 
     1357         END DO 
     1358  
     1359         IF( lk_mpp ) THEN 
     1360            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1361            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1362            misfdep(:,:) = INT( zbathy(:,:) ) 
     1363 
     1364            CALL lbc_lnk( risfdep,'T', 1. ) 
     1365            CALL lbc_lnk( bathy,  'T', 1. ) 
     1366 
     1367            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1368            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1369            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1370         ENDIF 
     1371 ! point V misdep(ji,jj) == mbathy(ji,jj+1)  
     1372         DO jj = 1, jpjm1 
     1373            DO ji = 1, jpim1 
     1374               IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN 
     1375                  IF ( .NOT. ln_iscpl ) THEN  
     1376                     zbathydiff  =ABS(  bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) & 
     1377                           &                             + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
     1378                     zrisfdepdiff=ABS(risfdep(ji,jj  ) - ( gdepw_1d(misfdep(ji,jj  )  ) & 
     1379                           &                             - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
     1380                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1381                        mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
     1382                        bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
     1383                     ELSE 
     1384                        misfdep(ji,jj)   = misfdep(ji,jj) - 1 
     1385                        risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
     1386                     END IF 
     1387                  ELSE 
     1388                     misfdep(ji,jj)   = misfdep(ji,jj) - 1 
     1389                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
     1390                  END IF 
     1391               ENDIF 
     1392            END DO 
     1393         END DO 
     1394  
     1395  
     1396         IF( lk_mpp ) THEN  
     1397            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1398            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1399            misfdep(:,:) = INT( zbathy(:,:) ) 
     1400 
     1401            CALL lbc_lnk( risfdep,'T', 1. ) 
     1402            CALL lbc_lnk( bathy,  'T', 1. ) 
     1403 
     1404            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1405            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1406            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1407         ENDIF  
     1408  
     1409 ! point U mbathy(ji,jj) == misfdep(ji,jj+1)  
     1410         DO jj = 1, jpjm1 
     1411            DO ji = 1, jpim1 
     1412               IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1413                  IF ( .NOT. ln_iscpl ) THEN  
     1414                  zbathydiff  =ABS(  bathy(ji  ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1415                       &                              + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
     1416                  zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) & 
     1417                       &                              - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
     1418                  IF (zbathydiff <= zrisfdepdiff) THEN 
     1419                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1420                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1421                  ELSE 
     1422                     misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
     1423                     risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
     1424                  END IF 
     1425                  ELSE 
     1426                     misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
     1427                     risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
     1428                  ENDIF 
     1429               ENDIF 
     1430            ENDDO 
     1431         ENDDO 
     1432  
     1433         IF( lk_mpp ) THEN  
     1434            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1435            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1436            misfdep(:,:) = INT( zbathy(:,:) ) 
     1437 
     1438            CALL lbc_lnk( risfdep,'T', 1. ) 
     1439            CALL lbc_lnk( bathy,  'T', 1. ) 
     1440 
     1441            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1442            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1443            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1444         ENDIF  
     1445  
     1446 ! point U misfdep(ji,jj) == bathy(ji,jj+1)  
     1447         DO jj = 1, jpjm1 
     1448            DO ji = 1, jpim1 
     1449               IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1450                  IF ( .NOT. ln_iscpl ) THEN  
     1451                     zbathydiff  =ABS(  bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) & 
     1452                          &                              + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
     1453                     zrisfdepdiff=ABS(risfdep(ji  ,jj) - ( gdepw_1d(misfdep(ji  ,jj)  ) & 
     1454                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
     1455                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1456                        mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
     1457                        bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
     1458                     ELSE 
     1459                        misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
     1460                        risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
     1461                     END IF 
     1462                  ELSE 
     1463                     misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
     1464                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
     1465                  ENDIF 
     1466               ENDIF 
     1467            ENDDO 
     1468         ENDDO 
     1469  
     1470         IF( lk_mpp ) THEN 
     1471            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1472            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1473            misfdep(:,:) = INT( zbathy(:,:) ) 
     1474 
     1475            CALL lbc_lnk( risfdep,'T', 1. ) 
     1476            CALL lbc_lnk( bathy,  'T', 1. ) 
     1477 
     1478            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1479            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1480            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1481         ENDIF 
     1482      END DO 
     1483      ! end dig bathy/ice shelf to be compatible 
     1484      ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
     1485      DO jl = 1,20 
     1486  
     1487 ! remove single point "bay" on isf coast line in the ice shelf draft' 
     1488         DO jk = 2, jpk 
     1489            WHERE (misfdep==0) misfdep=jpk 
     1490            zmask=0._wp 
     1491            WHERE (misfdep <= jk) zmask=1 
     1492            DO jj = 2, jpjm1 
     1493               DO ji = 2, jpim1 
     1494                  IF (misfdep(ji,jj) == jk) THEN 
     1495                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1496                     IF (ibtest <= 1) THEN 
     1497                        risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
     1498                        IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk 
     1499                     END IF 
     1500                  END IF 
     1501               END DO 
     1502            END DO 
     1503         END DO 
     1504         WHERE (misfdep==jpk) 
     1505             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
     1506         END WHERE 
     1507         IF( lk_mpp ) THEN 
     1508            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1509            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1510            misfdep(:,:) = INT( zbathy(:,:) ) 
     1511 
     1512            CALL lbc_lnk( risfdep,'T', 1. ) 
     1513            CALL lbc_lnk( bathy,  'T', 1. ) 
     1514 
     1515            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1516            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1517            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1518         ENDIF 
     1519  
     1520 ! remove single point "bay" on bathy coast line beneath an ice shelf' 
     1521         DO jk = jpk,1,-1 
     1522            zmask=0._wp 
     1523            WHERE (mbathy >= jk ) zmask=1 
     1524            DO jj = 2, jpjm1 
     1525               DO ji = 2, jpim1 
     1526                  IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN 
     1527                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1528                     IF (ibtest <= 1) THEN 
     1529                        bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
     1530                        IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 0 
     1531                     END IF 
     1532                  END IF 
     1533               END DO 
     1534            END DO 
     1535         END DO 
     1536         WHERE (mbathy==0) 
     1537             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
     1538         END WHERE 
     1539         IF( lk_mpp ) THEN 
     1540            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1541            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1542            misfdep(:,:) = INT( zbathy(:,:) ) 
     1543 
     1544            CALL lbc_lnk( risfdep,'T', 1. ) 
     1545            CALL lbc_lnk( bathy,  'T', 1. ) 
     1546 
     1547            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1548            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1549            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1550         ENDIF 
     1551  
     1552 ! fill hole in ice shelf 
     1553         zmisfdep = misfdep 
     1554         zrisfdep = risfdep 
     1555         WHERE (zmisfdep <= 1._wp) zmisfdep=jpk 
     1556         DO jj = 2, jpjm1 
     1557            DO ji = 2, jpim1 
     1558               ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
     1559               ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
     1560               IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj  ) ) ibtestim1 = jpk 
     1561               IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj  ) ) ibtestip1 = jpk 
     1562               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj-1) ) ibtestjm1 = jpk 
     1563               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj+1) ) ibtestjp1 = jpk 
     1564               ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1565               IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN 
     1566                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
     1567               END IF 
     1568               IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN 
     1569                  misfdep(ji,jj) = ibtest 
     1570                  risfdep(ji,jj) = gdepw_1d(ibtest) 
     1571               ENDIF 
     1572            ENDDO 
     1573         ENDDO 
     1574  
     1575         IF( lk_mpp ) THEN  
     1576            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1577            CALL lbc_lnk( zbathy,  'T', 1. )  
     1578            misfdep(:,:) = INT( zbathy(:,:) )  
     1579 
     1580            CALL lbc_lnk( risfdep, 'T', 1. )  
     1581            CALL lbc_lnk( bathy,   'T', 1. ) 
     1582 
     1583            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1584            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1585            mbathy(:,:) = INT( zbathy(:,:) ) 
     1586         ENDIF  
     1587 ! 
     1588 !! fill hole in bathymetry 
     1589         zmbathy (:,:)=mbathy (:,:) 
     1590         DO jj = 2, jpjm1 
     1591            DO ji = 2, jpim1 
     1592               ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
     1593               ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
     1594               IF( zmbathy(ji,jj) <  misfdep(ji-1,jj  ) ) ibtestim1 = 0 
     1595               IF( zmbathy(ji,jj) <  misfdep(ji+1,jj  ) ) ibtestip1 = 0 
     1596               IF( zmbathy(ji,jj) <  misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
     1597               IF( zmbathy(ji,jj) <  misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
     1598               ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1599               IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN 
     1600                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
     1601               END IF 
     1602               IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN 
     1603                  mbathy(ji,jj) = ibtest 
     1604                  bathy(ji,jj)  = gdepw_1d(ibtest+1)  
     1605               ENDIF 
     1606            END DO 
     1607         END DO 
     1608         IF( lk_mpp ) THEN  
     1609            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1610            CALL lbc_lnk( zbathy,  'T', 1. )  
     1611            misfdep(:,:) = INT( zbathy(:,:) )  
     1612 
     1613            CALL lbc_lnk( risfdep, 'T', 1. )  
     1614            CALL lbc_lnk( bathy,   'T', 1. ) 
     1615 
     1616            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1617            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1618            mbathy(:,:) = INT( zbathy(:,:) ) 
     1619         ENDIF  
     1620 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1621         DO jj = 1, jpjm1 
     1622            DO ji = 1, jpim1 
     1623               IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
     1624                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1625               END IF 
     1626            END DO 
     1627         END DO 
     1628         IF( lk_mpp ) THEN  
     1629            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1630            CALL lbc_lnk( zbathy,  'T', 1. )  
     1631            misfdep(:,:) = INT( zbathy(:,:) )  
     1632 
     1633            CALL lbc_lnk( risfdep, 'T', 1. )  
     1634            CALL lbc_lnk( bathy,   'T', 1. ) 
     1635 
     1636            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1637            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1638            mbathy(:,:) = INT( zbathy(:,:) ) 
     1639         ENDIF  
     1640 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1641         DO jj = 1, jpjm1 
     1642            DO ji = 1, jpim1 
     1643               IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
     1644                  mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
     1645               END IF 
     1646            END DO 
     1647         END DO 
     1648         IF( lk_mpp ) THEN  
     1649            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1650            CALL lbc_lnk( zbathy, 'T', 1. )  
     1651            misfdep(:,:) = INT( zbathy(:,:) )  
     1652 
     1653            CALL lbc_lnk( risfdep,'T', 1. )  
     1654            CALL lbc_lnk( bathy,  'T', 1. ) 
     1655 
     1656            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1657            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1658            mbathy(:,:) = INT( zbathy(:,:) ) 
     1659         ENDIF  
     1660 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1661         DO jj = 1, jpjm1 
     1662            DO ji = 1, jpi 
     1663               IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
     1664                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1665               END IF 
     1666            END DO 
     1667         END DO 
     1668         IF( lk_mpp ) THEN  
     1669            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1670            CALL lbc_lnk( zbathy, 'T', 1. )  
     1671            misfdep(:,:) = INT( zbathy(:,:) )  
     1672 
     1673            CALL lbc_lnk( risfdep,'T', 1. )  
     1674            CALL lbc_lnk( bathy,  'T', 1. ) 
     1675 
     1676            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1677            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1678            mbathy(:,:) = INT( zbathy(:,:) ) 
     1679         ENDIF  
     1680 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1681         DO jj = 1, jpjm1 
     1682            DO ji = 1, jpi 
     1683               IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
     1684                  mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ; 
     1685               END IF 
     1686            END DO 
     1687         END DO 
     1688         IF( lk_mpp ) THEN  
     1689            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1690            CALL lbc_lnk( zbathy, 'T', 1. )  
     1691            misfdep(:,:) = INT( zbathy(:,:) )  
     1692 
     1693            CALL lbc_lnk( risfdep,'T', 1. )  
     1694            CALL lbc_lnk( bathy,  'T', 1. ) 
     1695 
     1696            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1697            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1698            mbathy(:,:) = INT( zbathy(:,:) ) 
     1699         ENDIF  
     1700 ! if not compatible after all check, mask T 
     1701         DO jj = 1, jpj 
     1702            DO ji = 1, jpi 
     1703               IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
     1704                  misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
     1705               END IF 
     1706            END DO 
     1707         END DO 
     1708  
     1709         WHERE (mbathy(:,:) == 1) 
     1710            mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
     1711         END WHERE 
     1712      END DO  
     1713! end check compatibility ice shelf/bathy 
     1714      ! remove very shallow ice shelf (less than ~ 10m if 75L) 
     1715      WHERE (risfdep(:,:) <= 10._wp) 
     1716         misfdep = 1; risfdep = 0.0_wp; 
     1717      END WHERE 
     1718 
     1719      IF( icompt == 0 ) THEN  
     1720         IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
     1721      ELSE  
     1722         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
     1723      ENDIF  
     1724 
     1725      ! compute scale factor and depth at T- and W- points 
    10161726      DO jj = 1, jpj 
    10171727         DO ji = 1, jpi 
     
    10351745                  ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    10361746                  ENDIF 
     1747      !            gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    10371748!gm Bug?  check the gdepw_1d 
    10381749                  !       ... on ik 
     
    10401751                     &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
    10411752                     &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
    1042                   e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
    1043                      &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
    1044                   e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
    1045                      &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
     1753                  e3t_0  (ji,jj,ik  ) = gdepw_0(ji,jj,ik+1) - gdepw_1d(ik  ) 
     1754                  e3w_0  (ji,jj,ik  ) = gdept_0(ji,jj,ik  ) - gdept_1d(ik-1) 
    10461755                  !       ... on ik+1 
    10471756                  e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    10481757                  e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    1049                   gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    10501758               ENDIF 
    10511759            ENDIF 
     
    10731781      END DO 
    10741782      ! 
    1075       IF ( ln_isfcav ) THEN 
    10761783      ! (ISF) Definition of e3t, u, v, w for ISF case 
    1077          DO jj = 1, jpj  
    1078             DO ji = 1, jpi  
    1079                ik = misfdep(ji,jj)  
    1080                IF( ik > 1 ) THEN               ! ice shelf point only  
    1081                   IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
    1082                   gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
     1784      DO jj = 1, jpj  
     1785         DO ji = 1, jpi  
     1786            ik = misfdep(ji,jj)  
     1787            IF( ik > 1 ) THEN               ! ice shelf point only  
     1788               IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
     1789               gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
    10831790!gm Bug?  check the gdepw_0  
    1084                !       ... on ik  
    1085                   gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
    1086                      &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
    1087                      &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
    1088                   e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
    1089                   e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
    1090  
    1091                   IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
    1092                      e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
    1093                   ENDIF  
    1094                !       ... on ik / ik-1  
    1095                   e3w_0  (ji,jj,ik  ) = 2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
    1096                   e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
     1791            !       ... on ik  
     1792               gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
     1793                  &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
     1794                  &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
     1795               e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
     1796               e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
     1797 
     1798               IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
     1799                  e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
     1800               ENDIF  
     1801            !       ... on ik / ik-1  
     1802               e3w_0  (ji,jj,ik  ) = e3t_0  (ji,jj,ik) !2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
     1803               e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
    10971804! The next line isn't required and doesn't affect results - included for consistency with bathymetry code  
    1098                   gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 
     1805               gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 
     1806            ENDIF  
     1807         END DO  
     1808      END DO  
     1809    
     1810      it = 0  
     1811      DO jj = 1, jpj  
     1812         DO ji = 1, jpi  
     1813            ik = misfdep(ji,jj)  
     1814            IF( ik > 1 ) THEN               ! ice shelf point only  
     1815               e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
     1816               e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
     1817            ! test  
     1818               zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
     1819               IF( zdiff <= 0. .AND. lwp ) THEN   
     1820                  it = it + 1  
     1821                  WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
     1822                  WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
     1823                  WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
     1824                  WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
    10991825               ENDIF  
    1100             END DO  
     1826            ENDIF  
    11011827         END DO  
    1102       !  
    1103          it = 0  
    1104          DO jj = 1, jpj  
    1105             DO ji = 1, jpi  
    1106                ik = misfdep(ji,jj)  
    1107                IF( ik > 1 ) THEN               ! ice shelf point only  
    1108                   e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
    1109                   e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
    1110                ! test  
    1111                   zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
    1112                   IF( zdiff <= 0. .AND. lwp ) THEN   
    1113                      it = it + 1  
    1114                      WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
    1115                      WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
    1116                      WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
    1117                      WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
    1118                   ENDIF  
    1119                ENDIF  
    1120             END DO  
    1121          END DO  
    1122       END IF 
    1123       ! END (ISF) 
    1124  
    1125       ! Scale factors and depth at U-, V-, UW and VW-points 
    1126       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1127          e3u_0 (:,:,jk) = e3t_1d(jk) 
    1128          e3v_0 (:,:,jk) = e3t_1d(jk) 
    1129          e3uw_0(:,:,jk) = e3w_1d(jk) 
    1130          e3vw_0(:,:,jk) = e3w_1d(jk) 
    1131       END DO 
    1132       DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
    1133          DO jj = 1, jpjm1 
    1134             DO ji = 1, fs_jpim1   ! vector opt. 
    1135                e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
    1136                e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
    1137                e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
    1138                e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
    1139             END DO 
    1140          END DO 
    1141       END DO 
    1142       IF ( ln_isfcav ) THEN 
    1143       ! (ISF) define e3uw (adapted for 2 cells in the water column) 
    1144          DO jj = 2, jpjm1  
    1145             DO ji = 2, fs_jpim1   ! vector opt.  
    1146                ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj)) 
    1147                ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj)) 
    1148                IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) & 
    1149                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) ) 
    1150                ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1)) 
    1151                ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1)) 
    1152                IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) & 
    1153                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) ) 
    1154             END DO 
    1155          END DO 
    1156       END IF 
    1157  
    1158       CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
    1159       CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    1160       ! 
    1161       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1162          WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
    1163          WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
    1164          WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
    1165          WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
    1166       END DO 
    1167        
    1168       ! Scale factor at F-point 
    1169       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1170          e3f_0(:,:,jk) = e3t_1d(jk) 
    1171       END DO 
    1172       DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
    1173          DO jj = 1, jpjm1 
    1174             DO ji = 1, fs_jpim1   ! vector opt. 
    1175                e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
    1176             END DO 
    1177          END DO 
    1178       END DO 
    1179       CALL lbc_lnk( e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
    1180       ! 
    1181       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1182          WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
    1183       END DO 
    1184 !!gm  bug ? :  must be a do loop with mj0,mj1 
    1185       !  
    1186       e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
    1187       e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
    1188       e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
    1189       e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
    1190       e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
    1191  
    1192       ! Control of the sign 
    1193       IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
    1194       IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
    1195       IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
    1196       IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
    1197       
    1198       ! Compute gdep3w_0 (vertical sum of e3w) 
    1199       IF ( ln_isfcav ) THEN ! if cavity 
    1200          WHERE (misfdep == 0) misfdep = 1 
    1201          DO jj = 1,jpj 
    1202             DO ji = 1,jpi 
    1203                gdep3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
    1204                DO jk = 2, misfdep(ji,jj) 
    1205                   gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1206                END DO 
    1207                IF (misfdep(ji,jj) .GE. 2) gdep3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 
    1208                DO jk = misfdep(ji,jj) + 1, jpk 
    1209                   gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1210                END DO 
    1211             END DO 
    1212          END DO 
    1213       ELSE ! no cavity 
    1214          gdep3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    1215          DO jk = 2, jpk 
    1216             gdep3w_0(:,:,jk) = gdep3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
    1217          END DO 
    1218       END IF 
    1219       !                                               ! ================= ! 
    1220       IF(lwp .AND. ll_print) THEN                     !   Control print   ! 
    1221          !                                            ! ================= ! 
    1222          DO jj = 1,jpj 
    1223             DO ji = 1, jpi 
    1224                ik = MAX( mbathy(ji,jj), 1 ) 
    1225                zprt(ji,jj,1) = e3t_0   (ji,jj,ik) 
    1226                zprt(ji,jj,2) = e3w_0   (ji,jj,ik) 
    1227                zprt(ji,jj,3) = e3u_0   (ji,jj,ik) 
    1228                zprt(ji,jj,4) = e3v_0   (ji,jj,ik) 
    1229                zprt(ji,jj,5) = e3f_0   (ji,jj,ik) 
    1230                zprt(ji,jj,6) = gdep3w_0(ji,jj,ik) 
    1231             END DO 
    1232          END DO 
    1233          WRITE(numout,*) 
    1234          WRITE(numout,*) 'domzgr e3t(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1235          WRITE(numout,*) 
    1236          WRITE(numout,*) 'domzgr e3w(mbathy)'      ;   CALL prihre(zprt(:,:,2),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1237          WRITE(numout,*) 
    1238          WRITE(numout,*) 'domzgr e3u(mbathy)'      ;   CALL prihre(zprt(:,:,3),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1239          WRITE(numout,*) 
    1240          WRITE(numout,*) 'domzgr e3v(mbathy)'      ;   CALL prihre(zprt(:,:,4),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1241          WRITE(numout,*) 
    1242          WRITE(numout,*) 'domzgr e3f(mbathy)'      ;   CALL prihre(zprt(:,:,5),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1243          WRITE(numout,*) 
    1244          WRITE(numout,*) 'domzgr gdep3w(mbathy)'   ;   CALL prihre(zprt(:,:,6),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1245       ENDIF   
    1246       ! 
    1247       CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 
    1248       ! 
    1249       IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    1250       ! 
    1251    END SUBROUTINE zgr_zps 
    1252  
    1253    SUBROUTINE zgr_isf 
    1254       !!---------------------------------------------------------------------- 
    1255       !!                    ***  ROUTINE zgr_isf  *** 
    1256       !!    
    1257       !! ** Purpose :   check the bathymetry in levels 
    1258       !!    
    1259       !! ** Method  :   THe water column have to contained at least 2 cells 
    1260       !!                Bathymetry and isfdraft are modified (dig/close) to respect 
    1261       !!                this criterion. 
    1262       !!                  
    1263       !!    
    1264       !! ** Action  : - test compatibility between isfdraft and bathy  
    1265       !!              - bathy and isfdraft are modified 
    1266       !!---------------------------------------------------------------------- 
    1267       !!    
    1268       INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    1269       INTEGER  ::   ik, it           ! temporary integers 
    1270       INTEGER  ::   id, jd, nprocd 
    1271       INTEGER  ::   icompt, ibtest, ibtestim1, ibtestip1, ibtestjm1, ibtestjp1   ! (ISF) 
    1272       LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    1273       REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    1274       REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
    1275       REAL(wp) ::   zmax, zmin       ! Maximum and minimum depth 
    1276       REAL(wp) ::   zdiff            ! temporary scalar 
    1277       REAL(wp) ::   zrefdep          ! temporary scalar 
    1278       REAL(wp) ::   zbathydiff, zrisfdepdiff  ! isf temporary scalar 
    1279       REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
    1280       INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
    1281       !!--------------------------------------------------------------------- 
    1282       ! 
    1283       IF( nn_timing == 1 )  CALL timing_start('zgr_isf') 
    1284       ! 
    1285       CALL wrk_alloc( jpi, jpj, zbathy, zmask, zrisfdep) 
    1286       CALL wrk_alloc( jpi, jpj, zmisfdep, zmbathy ) 
    1287  
    1288  
    1289       ! (ISF) compute misfdep 
    1290       WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) .NE. 0) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
    1291       ELSEWHERE                      ;                          misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
    1292       END WHERE   
    1293  
    1294       ! Compute misfdep for ocean points (i.e. first wet level)  
    1295       ! find the first ocean level such that the first level thickness  
    1296       ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
    1297       ! e3t_0 is the reference level thickness  
    1298       DO jk = 2, jpkm1  
    1299          zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
    1300          WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
    13011828      END DO  
    1302       WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) .GT. 0._wp) 
    1303          risfdep(:,:) = 0. ; misfdep(:,:) = 1 
    1304       END WHERE 
    1305   
    1306 ! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation 
    1307       icompt = 0  
    1308 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
    1309       DO jl = 1, 10      
    1310          WHERE (bathy(:,:) .EQ. risfdep(:,:) ) 
    1311             misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    1312             mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
    1313          END WHERE 
    1314          WHERE (mbathy(:,:) <= 0)  
    1315             misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
    1316             mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
    1317          ENDWHERE 
    1318          IF( lk_mpp ) THEN 
    1319             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1320             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1321             misfdep(:,:) = INT( zbathy(:,:) ) 
    1322             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1323             CALL lbc_lnk( bathy, 'T', 1. ) 
    1324             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1325             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1326             mbathy(:,:) = INT( zbathy(:,:) ) 
    1327          ENDIF 
    1328          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
    1329             misfdep( 1 ,:) = misfdep(jpim1,:)           ! local domain is cyclic east-west  
    1330             misfdep(jpi,:) = misfdep(  2  ,:)  
    1331          ENDIF 
    1332  
    1333          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
    1334             mbathy( 1 ,:) = mbathy(jpim1,:)             ! local domain is cyclic east-west 
    1335             mbathy(jpi,:) = mbathy(  2  ,:) 
    1336          ENDIF 
    1337  
    1338          ! split last cell if possible (only where water column is 2 cell or less) 
    1339          DO jk = jpkm1, 1, -1 
    1340             zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1341             WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
    1342                mbathy(:,:) = jk 
    1343                bathy(:,:)  = zmax 
    1344             END WHERE 
    1345          END DO 
    1346   
    1347          ! split top cell if possible (only where water column is 2 cell or less) 
    1348          DO jk = 2, jpkm1 
    1349             zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1350             WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
    1351                misfdep(:,:) = jk 
    1352                risfdep(:,:) = zmax 
    1353             END WHERE 
    1354          END DO 
    1355  
    1356   
    1357  ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
    1358          DO jj = 1, jpj 
    1359             DO ji = 1, jpi 
    1360                ! find the minimum change option: 
    1361                ! test bathy 
    1362                IF (risfdep(ji,jj) .GT. 1) THEN 
    1363                zbathydiff =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
    1364                  &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1365                zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
    1366                  &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1367   
    1368                   IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 
    1369                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1370                         bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
    1371                         mbathy(ji,jj)= mbathy(ji,jj) + 1 
    1372                      ELSE 
    1373                         risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
    1374                         misfdep(ji,jj) = misfdep(ji,jj) - 1 
    1375                      END IF 
    1376                   END IF 
    1377                END IF 
    1378             END DO 
    1379          END DO 
    1380   
    1381           ! At least 2 levels for water thickness at T, U, and V point. 
    1382          DO jj = 1, jpj 
    1383             DO ji = 1, jpi 
    1384                ! find the minimum change option: 
    1385                ! test bathy 
    1386                IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1387                   zbathydiff  =ABS(bathy(ji,jj)  - (gdepw_1d(mbathy (ji,jj)+1)& 
    1388                     & + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1389                   zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  )  & 
    1390                     & - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1391                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1392                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1393                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1394                   ELSE 
    1395                      misfdep(ji,jj)= misfdep(ji,jj) - 1 
    1396                      risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
    1397                   END IF 
    1398                ENDIF 
    1399             END DO 
    1400          END DO 
    1401   
    1402  ! point V mbathy(ji,jj) EQ misfdep(ji,jj+1)  
    1403          DO jj = 1, jpjm1 
    1404             DO ji = 1, jpim1 
    1405                IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1406                   zbathydiff =ABS(bathy(ji,jj    ) - (gdepw_1d(mbathy (ji,jj)+1)   & 
    1407                     &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
    1408                   zrisfdepdiff=ABS(risfdep(ji,jj+1) - (gdepw_1d(misfdep(ji,jj+1))  & 
    1409                     &  - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
    1410                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1411                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1412                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) & 
    1413                    &    + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
    1414                   ELSE 
    1415                      misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
    1416                      risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) & 
    1417                    &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
    1418                   END IF 
    1419                ENDIF 
    1420             END DO 
    1421          END DO 
    1422   
    1423          IF( lk_mpp ) THEN 
    1424             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1425             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1426             misfdep(:,:) = INT( zbathy(:,:) ) 
    1427             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1428             CALL lbc_lnk( bathy, 'T', 1. ) 
    1429             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1430             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1431             mbathy(:,:) = INT( zbathy(:,:) ) 
    1432          ENDIF 
    1433  ! point V misdep(ji,jj) EQ mbathy(ji,jj+1)  
    1434          DO jj = 1, jpjm1 
    1435             DO ji = 1, jpim1 
    1436                IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1437                   zbathydiff =ABS(  bathy(ji,jj+1) - (gdepw_1d(mbathy (ji,jj+1)+1) & 
    1438                    &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
    1439                   zrisfdepdiff=ABS(risfdep(ji,jj  ) - (gdepw_1d(misfdep(ji,jj  )  )  & 
    1440                    &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
    1441                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1442                      mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
    1443                      bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
    1444                   ELSE 
    1445                      misfdep(ji,jj)   = misfdep(ji,jj) - 1 
    1446                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
    1447                   END IF 
    1448                ENDIF 
    1449             END DO 
    1450          END DO 
    1451   
    1452   
    1453          IF( lk_mpp ) THEN  
    1454             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1455             CALL lbc_lnk( zbathy, 'T', 1. )  
    1456             misfdep(:,:) = INT( zbathy(:,:) )  
    1457             CALL lbc_lnk( risfdep, 'T', 1. )  
    1458             CALL lbc_lnk( bathy, 'T', 1. ) 
    1459             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1460             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1461             mbathy(:,:) = INT( zbathy(:,:) ) 
    1462          ENDIF  
    1463   
    1464  ! point U mbathy(ji,jj) EQ misfdep(ji,jj+1)  
    1465          DO jj = 1, jpjm1 
    1466             DO ji = 1, jpim1 
    1467                IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1468                   zbathydiff =ABS(  bathy(ji  ,jj) - (gdepw_1d(mbathy (ji,jj)+1) & 
    1469                     &   + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
    1470                   zrisfdepdiff=ABS(risfdep(ji+1,jj) - (gdepw_1d(misfdep(ji+1,jj)) & 
    1471                     &  - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
    1472                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1473                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1474                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1475                   ELSE 
    1476                      misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
    1477                      risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
    1478                   END IF 
    1479                ENDIF 
    1480             ENDDO 
    1481          ENDDO 
    1482   
    1483          IF( lk_mpp ) THEN  
    1484             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1485             CALL lbc_lnk( zbathy, 'T', 1. )  
    1486             misfdep(:,:) = INT( zbathy(:,:) )  
    1487             CALL lbc_lnk( risfdep, 'T', 1. )  
    1488             CALL lbc_lnk( bathy, 'T', 1. ) 
    1489             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1490             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1491             mbathy(:,:) = INT( zbathy(:,:) ) 
    1492          ENDIF  
    1493   
    1494  ! point U misfdep(ji,jj) EQ bathy(ji,jj+1)  
    1495          DO jj = 1, jpjm1 
    1496             DO ji = 1, jpim1 
    1497                IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1498                   zbathydiff =ABS(  bathy(ji+1,jj) - (gdepw_1d(mbathy (ji+1,jj)+1) & 
    1499                       &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
    1500                   zrisfdepdiff=ABS(risfdep(ji  ,jj) - (gdepw_1d(misfdep(ji  ,jj)  )  & 
    1501                       &  - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
    1502                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1503                      mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
    1504                      bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  )  & 
    1505                       &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
    1506                   ELSE 
    1507                      misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
    1508                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) & 
    1509                       &   - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
    1510                   END IF 
    1511                ENDIF 
    1512             ENDDO 
    1513          ENDDO 
    1514   
    1515          IF( lk_mpp ) THEN 
    1516             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1517             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1518             misfdep(:,:) = INT( zbathy(:,:) ) 
    1519             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1520             CALL lbc_lnk( bathy, 'T', 1. ) 
    1521             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1522             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1523             mbathy(:,:) = INT( zbathy(:,:) ) 
    1524          ENDIF 
    1525       END DO 
    1526       ! end dig bathy/ice shelf to be compatible 
    1527       ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
    1528       DO jl = 1,20 
    1529   
    1530  ! remove single point "bay" on isf coast line in the ice shelf draft' 
    1531          DO jk = 2, jpk 
    1532             WHERE (misfdep==0) misfdep=jpk 
    1533             zmask=0 
    1534             WHERE (misfdep .LE. jk) zmask=1 
    1535             DO jj = 2, jpjm1 
    1536                DO ji = 2, jpim1 
    1537                   IF (misfdep(ji,jj) .EQ. jk) THEN 
    1538                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1539                      IF (ibtest .LE. 1) THEN 
    1540                         risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
    1541                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) misfdep(ji,jj) = jpk 
    1542                      END IF 
    1543                   END IF 
    1544                END DO 
    1545             END DO 
    1546          END DO 
    1547          WHERE (misfdep==jpk) 
    1548              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
    1549          END WHERE 
    1550          IF( lk_mpp ) THEN 
    1551             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1552             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1553             misfdep(:,:) = INT( zbathy(:,:) ) 
    1554             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1555             CALL lbc_lnk( bathy, 'T', 1. ) 
    1556             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1557             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1558             mbathy(:,:) = INT( zbathy(:,:) ) 
    1559          ENDIF 
    1560   
    1561  ! remove single point "bay" on bathy coast line beneath an ice shelf' 
    1562          DO jk = jpk,1,-1 
    1563             zmask=0 
    1564             WHERE (mbathy .GE. jk ) zmask=1 
    1565             DO jj = 2, jpjm1 
    1566                DO ji = 2, jpim1 
    1567                   IF (mbathy(ji,jj) .EQ. jk .AND. misfdep(ji,jj) .GE. 2) THEN 
    1568                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1569                      IF (ibtest .LE. 1) THEN 
    1570                         bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
    1571                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) mbathy(ji,jj) = 0 
    1572                      END IF 
    1573                   END IF 
    1574                END DO 
    1575             END DO 
    1576          END DO 
    1577          WHERE (mbathy==0) 
    1578              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
    1579          END WHERE 
    1580          IF( lk_mpp ) THEN 
    1581             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1582             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1583             misfdep(:,:) = INT( zbathy(:,:) ) 
    1584             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1585             CALL lbc_lnk( bathy, 'T', 1. ) 
    1586             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1587             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1588             mbathy(:,:) = INT( zbathy(:,:) ) 
    1589          ENDIF 
    1590   
    1591  ! fill hole in ice shelf 
    1592          zmisfdep = misfdep 
    1593          zrisfdep = risfdep 
    1594          WHERE (zmisfdep .LE. 1) zmisfdep=jpk 
    1595          DO jj = 2, jpjm1 
    1596             DO ji = 2, jpim1 
    1597                ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
    1598                ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
    1599                IF( zmisfdep(ji,jj) .GE. mbathy(ji-1,jj  ) ) ibtestim1 = jpk!MAX(0, mbathy(ji-1,jj  ) - 1) 
    1600                IF( zmisfdep(ji,jj) .GE. mbathy(ji+1,jj  ) ) ibtestip1 = jpk!MAX(0, mbathy(ji+1,jj  ) - 1) 
    1601                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj-1) ) ibtestjm1 = jpk!MAX(0, mbathy(ji  ,jj-1) - 1) 
    1602                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj+1) ) ibtestjp1 = jpk!MAX(0, mbathy(ji  ,jj+1) - 1) 
    1603                ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1604                IF( ibtest == jpk .AND. misfdep(ji,jj) .GE. 2) THEN 
    1605                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
    1606                END IF 
    1607                IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) .GE. 2) THEN 
    1608                   misfdep(ji,jj) = ibtest 
    1609                   risfdep(ji,jj) = gdepw_1d(ibtest) 
    1610                ENDIF 
    1611             ENDDO 
    1612          ENDDO 
    1613   
    1614          IF( lk_mpp ) THEN  
    1615             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1616             CALL lbc_lnk( zbathy, 'T', 1. )  
    1617             misfdep(:,:) = INT( zbathy(:,:) )  
    1618             CALL lbc_lnk( risfdep, 'T', 1. )  
    1619             CALL lbc_lnk( bathy, 'T', 1. ) 
    1620             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1621             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1622             mbathy(:,:) = INT( zbathy(:,:) ) 
    1623          ENDIF  
    1624  ! 
    1625  !! fill hole in bathymetry 
    1626          zmbathy (:,:)=mbathy (:,:) 
    1627          DO jj = 2, jpjm1 
    1628             DO ji = 2, jpim1 
    1629                ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
    1630                ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
    1631                IF( zmbathy(ji,jj) .LT. misfdep(ji-1,jj  ) ) ibtestim1 = 0!MIN(jpk-1, misfdep(ji-1,jj  ) + 1) 
    1632                IF( zmbathy(ji,jj) .LT. misfdep(ji+1,jj  ) ) ibtestip1 = 0 
    1633                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
    1634                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
    1635                ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1636                IF( ibtest == 0 .AND. misfdep(ji,jj) .GE. 2) THEN 
    1637                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
    1638                END IF 
    1639                IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) .GE. 2) THEN 
    1640                   mbathy(ji,jj) = ibtest 
    1641                   bathy(ji,jj)  = gdepw_1d(ibtest+1)  
    1642                ENDIF 
    1643             END DO 
    1644          END DO 
    1645          IF( lk_mpp ) THEN  
    1646             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1647             CALL lbc_lnk( zbathy, 'T', 1. )  
    1648             misfdep(:,:) = INT( zbathy(:,:) )  
    1649             CALL lbc_lnk( risfdep, 'T', 1. )  
    1650             CALL lbc_lnk( bathy, 'T', 1. ) 
    1651             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1652             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1653             mbathy(:,:) = INT( zbathy(:,:) ) 
    1654          ENDIF  
    1655  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1656          DO jj = 1, jpjm1 
    1657             DO ji = 1, jpim1 
    1658                IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
    1659                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1660                END IF 
    1661             END DO 
    1662          END DO 
    1663          IF( lk_mpp ) THEN  
    1664             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1665             CALL lbc_lnk( zbathy, 'T', 1. )  
    1666             misfdep(:,:) = INT( zbathy(:,:) )  
    1667             CALL lbc_lnk( risfdep, 'T', 1. )  
    1668             CALL lbc_lnk( bathy, 'T', 1. ) 
    1669             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1670             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1671             mbathy(:,:) = INT( zbathy(:,:) ) 
    1672          ENDIF  
    1673  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1674          DO jj = 1, jpjm1 
    1675             DO ji = 1, jpim1 
    1676                IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
    1677                   mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
    1678                END IF 
    1679             END DO 
    1680          END DO 
    1681          IF( lk_mpp ) THEN  
    1682             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1683             CALL lbc_lnk( zbathy, 'T', 1. )  
    1684             misfdep(:,:) = INT( zbathy(:,:) )  
    1685             CALL lbc_lnk( risfdep, 'T', 1. )  
    1686             CALL lbc_lnk( bathy, 'T', 1. ) 
    1687             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1688             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1689             mbathy(:,:) = INT( zbathy(:,:) ) 
    1690          ENDIF  
    1691  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1692          DO jj = 1, jpjm1 
    1693             DO ji = 1, jpi 
    1694                IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
    1695                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1696                END IF 
    1697             END DO 
    1698          END DO 
    1699          IF( lk_mpp ) THEN  
    1700             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1701             CALL lbc_lnk( zbathy, 'T', 1. )  
    1702             misfdep(:,:) = INT( zbathy(:,:) )  
    1703             CALL lbc_lnk( risfdep, 'T', 1. )  
    1704             CALL lbc_lnk( bathy, 'T', 1. ) 
    1705             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1706             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1707             mbathy(:,:) = INT( zbathy(:,:) ) 
    1708          ENDIF  
    1709  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1710          DO jj = 1, jpjm1 
    1711             DO ji = 1, jpi 
    1712                IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
    1713                   mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1)   = gdepw_1d(mbathy(ji,jj+1)+1) ; 
    1714                END IF 
    1715             END DO 
    1716          END DO 
    1717          IF( lk_mpp ) THEN  
    1718             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1719             CALL lbc_lnk( zbathy, 'T', 1. )  
    1720             misfdep(:,:) = INT( zbathy(:,:) )  
    1721             CALL lbc_lnk( risfdep, 'T', 1. )  
    1722             CALL lbc_lnk( bathy, 'T', 1. ) 
    1723             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1724             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1725             mbathy(:,:) = INT( zbathy(:,:) ) 
    1726          ENDIF  
    1727  ! if not compatible after all check, mask T 
    1728          DO jj = 1, jpj 
    1729             DO ji = 1, jpi 
    1730                IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
    1731                   misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
    1732                END IF 
    1733             END DO 
    1734          END DO 
    1735   
    1736          WHERE (mbathy(:,:) == 1) 
    1737             mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
    1738          END WHERE 
    1739       END DO  
    1740 ! end check compatibility ice shelf/bathy 
    1741       ! remove very shallow ice shelf (less than ~ 10m if 75L) 
    1742       WHERE (misfdep(:,:) <= 5) 
    1743          misfdep = 1; risfdep = 0.0_wp; 
    1744       END WHERE 
    1745  
    1746       IF( icompt == 0 ) THEN  
    1747          IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
    1748       ELSE  
    1749          IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
    1750       ENDIF  
    17511829 
    17521830      CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
    17531831      CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 
    1754  
    1755       IF( nn_timing == 1 )  CALL timing_stop('zgr_isf') 
    1756        
    1757    END SUBROUTINE 
     1832      ! 
     1833      IF( nn_timing == 1 )   CALL timing_stop('zgr_isf') 
     1834      !       
     1835   END SUBROUTINE zgr_isf 
     1836 
    17581837 
    17591838   SUBROUTINE zgr_sco 
     
    18011880      !! 
    18021881      !!---------------------------------------------------------------------- 
    1803       ! 
    18041882      INTEGER  ::   ji, jj, jk, jl           ! dummy loop argument 
    18051883      INTEGER  ::   iip1, ijp1, iim1, ijm1   ! temporary integers 
     
    18101888      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
    18111889      REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
    1812  
     1890      !! 
    18131891      NAMELIST/namzgr_sco/ln_s_sh94, ln_s_sf12, ln_sigcrit, rn_sbot_min, rn_sbot_max, rn_hc, rn_rmax,rn_theta, & 
    1814                            rn_thetb, rn_bb, rn_alpha, rn_efold, rn_zs, rn_zb_a, rn_zb_b 
     1892         &                rn_thetb, rn_bb, rn_alpha, rn_efold, rn_zs, rn_zb_a, rn_zb_b 
    18151893     !!---------------------------------------------------------------------- 
    18161894      ! 
    18171895      IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
    18181896      ! 
    1819       CALL wrk_alloc( jpi, jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
     1897      CALL wrk_alloc( jpi,jpj,  zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    18201898      ! 
    18211899      REWIND( numnam_ref )              ! Namelist namzgr_sco in reference namelist : Sigma-stretching parameters 
     
    18761954      DO jj = 1, jpj 
    18771955         DO ji = 1, jpi 
    1878            IF( bathy(ji,jj) == 0._wp ) THEN 
    1879              iip1 = MIN( ji+1, jpi ) 
    1880              ijp1 = MIN( jj+1, jpj ) 
    1881              iim1 = MAX( ji-1, 1 ) 
    1882              ijm1 = MAX( jj-1, 1 ) 
    1883              IF( (bathy(iip1,jj) + bathy(iim1,jj) + bathy(ji,ijp1) + bathy(ji,ijm1) +              & 
    1884         &         bathy(iip1,ijp1) + bathy(iim1,ijm1) + bathy(iip1,ijp1) + bathy(iim1,ijm1)) > 0._wp ) THEN 
    1885                zenv(ji,jj) = rn_sbot_min 
    1886              ENDIF 
     1956            IF( bathy(ji,jj) == 0._wp ) THEN 
     1957               iip1 = MIN( ji+1, jpi ) 
     1958               ijp1 = MIN( jj+1, jpj ) 
     1959               iim1 = MAX( ji-1, 1 ) 
     1960               ijm1 = MAX( jj-1, 1 ) 
     1961!!gm BUG fix see ticket #1617 
     1962               IF( ( + bathy(iim1,ijm1) + bathy(ji,ijp1) + bathy(iip1,ijp1)            & 
     1963                  &  + bathy(iim1,jj  )                  + bathy(iip1,jj  )            & 
     1964                  &  + bathy(iim1,ijm1) + bathy(ji,ijm1) + bathy(iip1,ijp1)  ) > 0._wp )   zenv(ji,jj) = rn_sbot_min 
     1965!!gm 
     1966!!gm               IF( ( bathy(iip1,jj  ) + bathy(iim1,jj  ) + bathy(ji,ijp1  ) + bathy(ji,ijm1) +         & 
     1967!!gm                  &  bathy(iip1,ijp1) + bathy(iim1,ijm1) + bathy(iip1,ijp1) + bathy(iim1,ijm1)) > 0._wp ) THEN 
     1968!!gm               zenv(ji,jj) = rn_sbot_min 
     1969!!gm             ENDIF 
     1970!!gm end 
    18871971           ENDIF 
    18881972         END DO 
     
    19752059      ENDIF 
    19762060      ! 
    1977       IF(lwp) THEN                             ! Control print 
    1978          WRITE(numout,*) 
    1979          WRITE(numout,*) ' domzgr: hbatt field; ocean depth in meters' 
    1980          WRITE(numout,*) 
    1981          CALL prihre( hbatt(1,1), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 0._wp, numout ) 
    1982          IF( nprint == 1 )   THEN         
    1983             WRITE(numout,*) ' bathy  MAX ', MAXVAL( bathy(:,:) ), ' MIN ', MINVAL( bathy(:,:) ) 
    1984             WRITE(numout,*) ' hbatt  MAX ', MAXVAL( hbatt(:,:) ), ' MIN ', MINVAL( hbatt(:,:) ) 
    1985          ENDIF 
    1986       ENDIF 
    1987  
    19882061      !                                        ! ============================== 
    19892062      !                                        !   hbatu, hbatv, hbatf fields 
     
    20802153      CALL lbc_lnk( e3uw_0, 'U', 1._wp ) 
    20812154      CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    2082  
    2083       fsdepw(:,:,:) = gdepw_0 (:,:,:) 
    2084       fsde3w(:,:,:) = gdep3w_0(:,:,:) 
    2085       ! 
    2086       where (e3t_0   (:,:,:).eq.0.0)  e3t_0(:,:,:) = 1.0 
    2087       where (e3u_0   (:,:,:).eq.0.0)  e3u_0(:,:,:) = 1.0 
    2088       where (e3v_0   (:,:,:).eq.0.0)  e3v_0(:,:,:) = 1.0 
    2089       where (e3f_0   (:,:,:).eq.0.0)  e3f_0(:,:,:) = 1.0 
    2090       where (e3w_0   (:,:,:).eq.0.0)  e3w_0(:,:,:) = 1.0 
    2091       where (e3uw_0  (:,:,:).eq.0.0)  e3uw_0(:,:,:) = 1.0 
    2092       where (e3vw_0  (:,:,:).eq.0.0)  e3vw_0(:,:,:) = 1.0 
     2155      ! 
     2156      WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
     2157      WHERE( e3u_0 (:,:,:) == 0._wp )   e3u_0 (:,:,:) = 1._wp 
     2158      WHERE( e3v_0 (:,:,:) == 0._wp )   e3v_0 (:,:,:) = 1._wp 
     2159      WHERE( e3f_0 (:,:,:) == 0._wp )   e3f_0 (:,:,:) = 1._wp 
     2160      WHERE( e3w_0 (:,:,:) == 0._wp )   e3w_0 (:,:,:) = 1._wp 
     2161      WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
     2162      WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    20932163 
    20942164#if defined key_agrif 
    2095       ! Ensure meaningful vertical scale factors in ghost lines/columns 
    2096       IF( .NOT. Agrif_Root() ) THEN 
    2097          !   
    2098          IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    2099             e3u_0(1,:,:) = e3u_0(2,:,:) 
    2100          ENDIF 
    2101          ! 
    2102          IF((nbondi ==  1).OR.(nbondi == 2)) THEN 
    2103             e3u_0(nlci-1,:,:) = e3u_0(nlci-2,:,:) 
    2104          ENDIF 
    2105          ! 
    2106          IF((nbondj == -1).OR.(nbondj == 2)) THEN 
    2107             e3v_0(:,1,:) = e3v_0(:,2,:) 
    2108          ENDIF 
    2109          ! 
    2110          IF((nbondj ==  1).OR.(nbondj == 2)) THEN 
    2111             e3v_0(:,nlcj-1,:) = e3v_0(:,nlcj-2,:) 
    2112          ENDIF 
    2113          ! 
    2114       ENDIF 
     2165      IF( .NOT. Agrif_Root() ) THEN    ! Ensure meaningful vertical scale factors in ghost lines/columns 
     2166         IF( nbondi == -1 .OR. nbondi == 2 )   e3u_0(  1   ,  :   ,:) = e3u_0(  2   ,  :   ,:) 
     2167         IF( nbondi ==  1 .OR. nbondi == 2 )   e3u_0(nlci-1,  :   ,:) = e3u_0(nlci-2,  :   ,:) 
     2168         IF( nbondj == -1 .OR. nbondj == 2 )   e3v_0(  :   ,  1   ,:) = e3v_0(  :   ,  2   ,:) 
     2169         IF( nbondj ==  1 .OR. nbondj == 2 )   e3v_0(  :   ,nlcj-1,:) = e3v_0(  :   ,nlcj-2,:) 
     2170       ENDIF 
    21152171#endif 
    21162172 
    2117       fsdept(:,:,:) = gdept_0 (:,:,:) 
    2118       fsdepw(:,:,:) = gdepw_0 (:,:,:) 
    2119       fsde3w(:,:,:) = gdep3w_0(:,:,:) 
    2120       fse3t (:,:,:) = e3t_0   (:,:,:) 
    2121       fse3u (:,:,:) = e3u_0   (:,:,:) 
    2122       fse3v (:,:,:) = e3v_0   (:,:,:) 
    2123       fse3f (:,:,:) = e3f_0   (:,:,:) 
    2124       fse3w (:,:,:) = e3w_0   (:,:,:) 
    2125       fse3uw(:,:,:) = e3uw_0  (:,:,:) 
    2126       fse3vw(:,:,:) = e3vw_0  (:,:,:) 
     2173!!gm   I don't like that HERE we are supposed to set the reference coordinate (i.e. _0 arrays) 
     2174!!gm   and only that !!!!! 
     2175!!gm   THIS should be removed from here ! 
     2176      gdept_n(:,:,:) = gdept_0(:,:,:) 
     2177      gdepw_n(:,:,:) = gdepw_0(:,:,:) 
     2178      gde3w_n(:,:,:) = gde3w_0(:,:,:) 
     2179      e3t_n  (:,:,:) = e3t_0  (:,:,:) 
     2180      e3u_n  (:,:,:) = e3u_0  (:,:,:) 
     2181      e3v_n  (:,:,:) = e3v_0  (:,:,:) 
     2182      e3f_n  (:,:,:) = e3f_0  (:,:,:) 
     2183      e3w_n  (:,:,:) = e3w_0  (:,:,:) 
     2184      e3uw_n (:,:,:) = e3uw_0 (:,:,:) 
     2185      e3vw_n (:,:,:) = e3vw_0 (:,:,:) 
     2186!!gm and obviously in the following, use the _0 arrays until the end of this subroutine 
     2187!! gm end 
    21272188!! 
    21282189      ! HYBRID :  
     
    21302191         DO ji = 1, jpi 
    21312192            DO jk = 1, jpkm1 
    2132                IF( scobot(ji,jj) >= fsdept(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
    2133             END DO 
    2134             IF( scobot(ji,jj) == 0._wp               )   mbathy(ji,jj) = 0 
     2193               IF( scobot(ji,jj) >= gdept_n(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
     2194            END DO 
     2195            IF( scobot(ji,jj) == 0._wp                )   mbathy(ji,jj) = 0 
    21352196         END DO 
    21362197      END DO 
     
    21412202         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:)    ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    21422203         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    2143             &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gdep3w_0(:,:,:) ) 
    2144          WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0   (:,:,:) ),   & 
    2145             &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0   (:,:,:) ),   & 
    2146             &                          ' uw', MINVAL( e3uw_0 (:,:,:) ), ' vw'  , MINVAL( e3vw_0  (:,:,:) ),   & 
     2204            &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gde3w_0(:,:,:) ) 
     2205         WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0  (:,:,:) ),   & 
     2206            &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0  (:,:,:) ),   & 
     2207            &                          ' uw', MINVAL( e3uw_0 (:,:,:) ), ' vw'  , MINVAL( e3vw_0 (:,:,:) ),   & 
    21472208            &                          ' w ', MINVAL( e3w_0  (:,:,:) ) 
    21482209 
    21492210         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    2150             &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gdep3w_0(:,:,:) ) 
    2151          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0   (:,:,:) ),   & 
    2152             &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0   (:,:,:) ),   & 
    2153             &                          ' uw', MAXVAL( e3uw_0 (:,:,:) ), ' vw'  , MAXVAL( e3vw_0  (:,:,:) ),   & 
     2211            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gde3w_0(:,:,:) ) 
     2212         WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0  (:,:,:) ),   & 
     2213            &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0  (:,:,:) ),   & 
     2214            &                          ' uw', MAXVAL( e3uw_0 (:,:,:) ), ' vw'  , MAXVAL( e3vw_0 (:,:,:) ),   & 
    21542215            &                          ' w ', MAXVAL( e3w_0  (:,:,:) ) 
    21552216      ENDIF 
     
    21832244         END DO 
    21842245      ENDIF 
    2185  
    2186 !================================================================================ 
    2187 ! check the coordinate makes sense 
    2188 !================================================================================ 
     2246      ! 
     2247      !================================================================================ 
     2248      ! check the coordinate makes sense 
     2249      !================================================================================ 
    21892250      DO ji = 1, jpi 
    21902251         DO jj = 1, jpj 
    2191  
     2252            ! 
    21922253            IF( hbatt(ji,jj) > 0._wp) THEN 
    21932254               DO jk = 1, mbathy(ji,jj) 
    21942255                 ! check coordinate is monotonically increasing 
    2195                  IF (fse3w(ji,jj,jk) <= 0._wp .OR. fse3t(ji,jj,jk) <= 0._wp ) THEN 
     2256                 IF (e3w_n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN 
    21962257                    WRITE(ctmp1,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    21972258                    WRITE(numout,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2198                     WRITE(numout,*) 'e3w',fse3w(ji,jj,:) 
    2199                     WRITE(numout,*) 'e3t',fse3t(ji,jj,:) 
     2259                    WRITE(numout,*) 'e3w',e3w_n(ji,jj,:) 
     2260                    WRITE(numout,*) 'e3t',e3t_n(ji,jj,:) 
    22002261                    CALL ctl_stop( ctmp1 ) 
    22012262                 ENDIF 
    22022263                 ! and check it has never gone negative 
    2203                  IF( fsdepw(ji,jj,jk) < 0._wp .OR. fsdept(ji,jj,jk) < 0._wp ) THEN 
     2264                 IF( gdepw_n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN 
    22042265                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw or gdept =< 0  at point (i,j,k)= ', ji, jj, jk 
    22052266                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw   or gdept   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2206                     WRITE(numout,*) 'gdepw',fsdepw(ji,jj,:) 
    2207                     WRITE(numout,*) 'gdept',fsdept(ji,jj,:) 
     2267                    WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
     2268                    WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
    22082269                    CALL ctl_stop( ctmp1 ) 
    22092270                 ENDIF 
    22102271                 ! and check it never exceeds the total depth 
    2211                  IF( fsdepw(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2272                 IF( gdepw_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    22122273                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    22132274                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2214                     WRITE(numout,*) 'gdepw',fsdepw(ji,jj,:) 
     2275                    WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
    22152276                    CALL ctl_stop( ctmp1 ) 
    22162277                 ENDIF 
    22172278               END DO 
    2218  
     2279               ! 
    22192280               DO jk = 1, mbathy(ji,jj)-1 
    22202281                 ! and check it never exceeds the total depth 
    2221                 IF( fsdept(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2282                IF( gdept_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    22222283                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    22232284                    WRITE(numout,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2224                     WRITE(numout,*) 'gdept',fsdept(ji,jj,:) 
     2285                    WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
    22252286                    CALL ctl_stop( ctmp1 ) 
    22262287                 ENDIF 
    22272288               END DO 
    2228  
    22292289            ENDIF 
    2230  
    22312290         END DO 
    22322291      END DO 
     
    22382297   END SUBROUTINE zgr_sco 
    22392298 
    2240 !!====================================================================== 
     2299 
    22412300   SUBROUTINE s_sh94() 
    2242  
    22432301      !!---------------------------------------------------------------------- 
    22442302      !!                  ***  ROUTINE s_sh94  *** 
     
    22512309      !! Reference : Song and Haidvogel 1994.  
    22522310      !!---------------------------------------------------------------------- 
    2253       ! 
    22542311      INTEGER  ::   ji, jj, jk           ! dummy loop argument 
    22552312      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
     
    22572314      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    22582315      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2259  
    2260       CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2261       CALL wrk_alloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2316      !!---------------------------------------------------------------------- 
     2317 
     2318      CALL wrk_alloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2319      CALL wrk_alloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    22622320 
    22632321      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     
    22652323      z_esigtu3 = 0._wp   ;   z_esigtv3 = 0._wp   ;   z_esigtf3 = 0._wp 
    22662324      z_esigwu3 = 0._wp   ;   z_esigwv3 = 0._wp 
    2267  
     2325      ! 
    22682326      DO ji = 1, jpi 
    22692327         DO jj = 1, jpj 
    2270  
     2328            ! 
    22712329            IF( hbatt(ji,jj) > rn_hc ) THEN    !deep water, stretched sigma 
    22722330               DO jk = 1, jpk 
     
    22972355               zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    22982356               zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    2299                gdept_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
    2300                gdepw_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
    2301                gdep3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
     2357               gdept_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
     2358               gdepw_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
     2359               gde3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
    23022360            END DO 
    23032361           ! 
     
    23312389        END DO 
    23322390      END DO 
    2333  
    2334       CALL wrk_dealloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2335       CALL wrk_dealloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2336  
     2391      ! 
     2392      CALL wrk_dealloc( jpi,jpj,jpk,  z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2393      CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2394      ! 
    23372395   END SUBROUTINE s_sh94 
    23382396 
     2397 
    23392398   SUBROUTINE s_sf12 
    2340  
    23412399      !!---------------------------------------------------------------------- 
    23422400      !!                  ***  ROUTINE s_sf12 ***  
     
    23542412      !! Reference : Siddorn and Furner 2012 (submitted Ocean modelling). 
    23552413      !!---------------------------------------------------------------------- 
    2356       ! 
    23572414      INTEGER  ::   ji, jj, jk           ! dummy loop argument 
    23582415      REAL(wp) ::   zsmth               ! smoothing around critical depth 
     
    23612418      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    23622419      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2363  
     2420      !!---------------------------------------------------------------------- 
    23642421      ! 
    23652422      CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     
    24252482 
    24262483          DO jk = 1, jpk 
    2427              gdept_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
    2428              gdepw_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
    2429              gdep3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
     2484             gdept_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
     2485             gdepw_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
     2486             gde3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
    24302487          END DO 
    24312488 
     
    24542511             e3f_0(ji,jj,jk)=(scosrf(ji,jj)+hbatf(ji,jj))*z_esigtf3(ji,jj,jk) 
    24552512             ! 
    2456              e3w_0(ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
     2513             e3w_0 (ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
    24572514             e3uw_0(ji,jj,jk)=hbatu(ji,jj)*z_esigwu3(ji,jj,jk) 
    24582515             e3vw_0(ji,jj,jk)=hbatv(ji,jj)*z_esigwv3(ji,jj,jk) 
     
    24672524      CALL lbc_lnk(e3uw_0,'T',1.) ; CALL lbc_lnk(e3vw_0,'T',1.) 
    24682525      ! 
    2469       !                                               ! ============= 
    2470  
    2471       CALL wrk_dealloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2472       CALL wrk_dealloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2473  
     2526      CALL wrk_dealloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2527      CALL wrk_dealloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2528      ! 
    24742529   END SUBROUTINE s_sf12 
    24752530 
     2531 
    24762532   SUBROUTINE s_tanh() 
    2477  
    24782533      !!---------------------------------------------------------------------- 
    24792534      !!                  ***  ROUTINE s_tanh***  
     
    24852540      !! Reference : Madec, Lott, Delecluse and Crepon, 1996. JPO, 26, 1393-1408. 
    24862541      !!---------------------------------------------------------------------- 
    2487  
    2488       INTEGER  ::   ji, jj, jk           ! dummy loop argument 
     2542      INTEGER  ::   ji, jj, jk       ! dummy loop argument 
    24892543      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
    2490  
    24912544      REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 
    24922545      REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw 
    2493  
    2494       CALL wrk_alloc( jpk, z_gsigw, z_gsigt, z_gsi3w                                      ) 
    2495       CALL wrk_alloc( jpk, z_esigt, z_esigw                                               ) 
     2546      !!---------------------------------------------------------------------- 
     2547 
     2548      CALL wrk_alloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
     2549      CALL wrk_alloc( jpk,   z_esigt, z_esigw ) 
    24962550 
    24972551      z_gsigw  = 0._wp   ;   z_gsigt  = 0._wp   ;   z_gsi3w  = 0._wp 
     
    25232577         zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    25242578         zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    2525          gdept_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
    2526          gdepw_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
    2527          gdep3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
     2579         gdept_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
     2580         gdepw_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
     2581         gde3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
    25282582      END DO 
    25292583!!gm: e3uw, e3vw can be suppressed  (modif in dynzdf, dynzdf_iso, zdfbfr) (save 2 3D arrays) 
     
    25422596         END DO 
    25432597      END DO 
    2544  
    2545       CALL wrk_dealloc( jpk, z_gsigw, z_gsigt, z_gsi3w                                      ) 
    2546       CALL wrk_dealloc( jpk, z_esigt, z_esigw                                               ) 
    2547  
     2598      ! 
     2599      CALL wrk_dealloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
     2600      CALL wrk_dealloc( jpk,   z_esigt, z_esigw          ) 
     2601      ! 
    25482602   END SUBROUTINE s_tanh 
     2603 
    25492604 
    25502605   FUNCTION fssig( pk ) RESULT( pf ) 
     
    26182673      REAL(wp), INTENT(in   ) ::   pk1(jpk)       ! continuous "k" coordinate 
    26192674      REAL(wp)                ::   p_gamma(jpk)   ! stretched coordinate 
    2620       REAL(wp), INTENT(in   ) ::   pzb           ! Bottom box depth 
    2621       REAL(wp), INTENT(in   ) ::   pzs           ! surface box depth 
    2622       REAL(wp), INTENT(in   ) ::   psmth       ! Smoothing parameter 
    2623       REAL(wp)                ::   za1,za2,za3    ! local variables 
    2624       REAL(wp)                ::   zn1,zn2        ! local variables 
    2625       REAL(wp)                ::   za,zb,zx       ! local variables 
    2626       integer                 ::   jk 
    2627       !!---------------------------------------------------------------------- 
    2628       ! 
    2629  
    2630       zn1  =  1./(jpk-1.) 
    2631       zn2  =  1. -  zn1 
    2632  
     2675      REAL(wp), INTENT(in   ) ::   pzb            ! Bottom box depth 
     2676      REAL(wp), INTENT(in   ) ::   pzs            ! surface box depth 
     2677      REAL(wp), INTENT(in   ) ::   psmth          ! Smoothing parameter 
     2678      ! 
     2679      INTEGER  ::   jk             ! dummy loop index 
     2680      REAL(wp) ::   za1,za2,za3    ! local scalar 
     2681      REAL(wp) ::   zn1,zn2        !   -      -  
     2682      REAL(wp) ::   za,zb,zx       !   -      -  
     2683      !!---------------------------------------------------------------------- 
     2684      ! 
     2685      zn1  =  1._wp / REAL( jpkm1, wp ) 
     2686      zn2  =  1._wp -  zn1 
     2687      ! 
    26332688      za1 = (rn_alpha+2.0_wp)*zn1**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn1**(rn_alpha+2.0_wp)  
    26342689      za2 = (rn_alpha+2.0_wp)*zn2**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn2**(rn_alpha+2.0_wp) 
    26352690      za3 = (zn2**3.0_wp - za2)/( zn1**3.0_wp - za1) 
    2636       
     2691      ! 
    26372692      za = pzb - za3*(pzs-za1)-za2 
    26382693      za = za/( zn2-0.5_wp*(za2+zn2**2.0_wp) - za3*(zn1-0.5_wp*(za1+zn1**2.0_wp) ) ) 
    26392694      zb = (pzs - za1 - za*( zn1-0.5_wp*(za1+zn1**2.0_wp ) ) ) / (zn1**3.0_wp - za1) 
    26402695      zx = 1.0_wp-za/2.0_wp-zb 
    2641   
     2696      ! 
    26422697      DO jk = 1, jpk 
    2643         p_gamma(jk) = za*(pk1(jk)*(1.0_wp-pk1(jk)/2.0_wp))+zb*pk1(jk)**3.0_wp +  & 
    2644                     & zx*( (rn_alpha+2.0_wp)*pk1(jk)**(rn_alpha+1.0_wp)- & 
    2645                     &      (rn_alpha+1.0_wp)*pk1(jk)**(rn_alpha+2.0_wp) ) 
     2698         p_gamma(jk) = za*(pk1(jk)*(1.0_wp-pk1(jk)/2.0_wp))+zb*pk1(jk)**3.0_wp +  & 
     2699            &          zx*( (rn_alpha+2.0_wp)*pk1(jk)**(rn_alpha+1.0_wp)- & 
     2700            &               (rn_alpha+1.0_wp)*pk1(jk)**(rn_alpha+2.0_wp) ) 
    26462701        p_gamma(jk) = p_gamma(jk)*psmth+pk1(jk)*(1.0_wp-psmth) 
    2647       ENDDO  
    2648  
     2702      END DO 
    26492703      ! 
    26502704   END FUNCTION fgamma 
Note: See TracChangeset for help on using the changeset viewer.