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 12101 for utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domzgr.F90 – NEMO

Ignore:
Timestamp:
2019-12-06T18:45:39+01:00 (4 years ago)
Author:
mathiot
Message:

merge ENHANCE-03_domcfg and ENHANCE-02_ISF_nemo

File:
1 copied

Legend:

Unmodified
Added
Removed
  • utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domzgr.F90

    r12100 r12101  
    1717   !!            3.4  ! 2012-08  (J. Siddorn) added Siddorn and Furner stretching function 
    1818   !!            3.4  ! 2012-12  (R. Bourdalle-Badie and G. Reffray)  modify C1D case   
    19    !!            3.6  ! 2014-11  (P. Mathiot and C. Harris) add ice shelf capabilitye 
     19   !!            3.6  ! 2014-11  (P. Mathiot and C. Harris) add ice shelf capability 
    2020   !!            3.?  ! 2015-11  (H. Liu) Modifications for Wetting/Drying 
    2121   !!---------------------------------------------------------------------- 
     
    3535   !!       fgamma       : Siddorn and Furner 2012 stretching function 
    3636   !!--------------------------------------------------------------------- 
    37    USE oce               ! ocean variables 
    3837   USE dom_oce           ! ocean domain 
    39 !   USE closea            ! closed seas 
    4038   ! 
    4139   USE in_out_manager    ! I/O manager 
     
    4341   USE lbclnk            ! ocean lateral boundary conditions (or mpp link) 
    4442   USE lib_mpp           ! distributed memory computing library 
    45    USE wrk_nemo          ! Memory allocation 
    46    USE timing            ! Timing 
     43   USE lib_fortran 
    4744   USE dombat 
     45   USE domisf 
    4846 
    4947   IMPLICIT NONE 
     
    5149 
    5250   PUBLIC   dom_zgr        ! called by dom_init.F90 
    53  
     51   ! 
    5452   !                              !!* Namelist namzgr_sco * 
    5553   LOGICAL  ::   ln_s_sh94         ! use hybrid s-sig Song and Haidvogel 1994 stretching function fssig1 (ln_sco=T) 
     
    6058   REAL(wp) ::   rn_rmax           ! maximum cut-off r-value allowed (0<rn_rmax<1) 
    6159   REAL(wp) ::   rn_hc             ! Critical depth for transition from sigma to stretched coordinates 
    62    INTEGER , PUBLIC ::   ntopo           !: = 0/1 ,compute/read the bathymetry file 
    63    REAL(wp), PUBLIC ::   e3zps_min       !: miminum thickness for partial steps (meters) 
    64    REAL(wp), PUBLIC ::   e3zps_rat       !: minimum thickness ration for partial steps 
    65    INTEGER, PUBLIC ::   nperio            !: type of lateral boundary condition 
    6660 
    6761   ! Song and Haidvogel 1994 stretching parameters 
     
    121115      !!---------------------------------------------------------------------- 
    122116      ! 
    123   !    IF( nn_timing == 1 )   CALL timing_start('dom_zgr') 
    124117      ! 
    125118      REWIND( numnam_ref )              ! Namelist namzgr in reference namelist : Vertical coordinate 
     
    152145      IF( ioptio /= 1 )   CALL ctl_stop( ' none or several vertical coordinate options used' ) 
    153146      ! 
     147      IF ( ln_isfcav ) CALL zgr_isf_nam 
    154148      ioptio = 0 
    155149      IF ( ln_zco .AND. ln_isfcav ) ioptio = ioptio + 1 
     
    164158      IF( ln_zps      )   CALL zgr_zps          ! Partial step z-coordinate 
    165159      IF( ln_sco      )   CALL zgr_sco          ! s-coordinate or hybrid z-s coordinate 
     160                          CALL zgr_bat_ctl      ! check bathymetry (mbathy) and suppress isolated ocean points 
    166161      ! 
    167162      ! final adjustment of mbathy & check  
    168163      ! ----------------------------------- 
    169       IF( lzoom       )   CALL zgr_bat_zoom     ! correct mbathy in case of zoom subdomain 
    170                           CALL zgr_bat_ctl      ! check bathymetry (mbathy) and suppress isolated ocean points 
    171164                          CALL zgr_bot_level    ! deepest ocean level for t-, u- and v-points 
    172165                          CALL zgr_top_level    ! shallowest ocean level for T-, U-, V- points 
     
    175168         WRITE(numout,*) ' MIN val mbathy  ', MINVAL(  mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    176169         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    177             &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gde3w_0(:,:,:) ) 
     170            &                          ' w ', MINVAL( gdepw_0(:,:,:) ) 
    178171         WRITE(numout,*) ' MIN val e3    t ', MINVAL(   e3t_0(:,:,:) ), ' f ', MINVAL(   e3f_0(:,:,:) ),  & 
    179172            &                          ' u ', MINVAL(   e3u_0(:,:,:) ), ' u ', MINVAL(   e3v_0(:,:,:) ),  & 
     
    182175 
    183176         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    184             &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gde3w_0(:,:,:) ) 
     177            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ) 
    185178         WRITE(numout,*) ' MAX val e3    t ', MAXVAL(   e3t_0(:,:,:) ), ' f ', MAXVAL(   e3f_0(:,:,:) ),  & 
    186179            &                          ' u ', MAXVAL(   e3u_0(:,:,:) ), ' u ', MAXVAL(   e3v_0(:,:,:) ),  & 
     
    188181            &                          ' w ', MAXVAL(   e3w_0(:,:,:) ) 
    189182      ENDIF 
    190       ! 
    191     !  IF( nn_timing == 1 )  CALL timing_stop('dom_zgr') 
    192183      ! 
    193184   END SUBROUTINE dom_zgr 
     
    222213      REAL(wp) ::   za2, zkth2, zacr2      ! Values for optional double tanh function set from parameters  
    223214      !!---------------------------------------------------------------------- 
    224       ! 
    225    !   IF( nn_timing == 1 )  CALL timing_start('zgr_z') 
    226215      ! 
    227216      ! Set variables from parameters 
     
    322311      IF ( ln_isfcav .OR. ln_e3_dep ) THEN      ! e3. = dk[gdep]    
    323312         ! 
    324 !==>>>   need to be like this to compute the pressure gradient with ISF.  
    325 !        If not, level beneath the ISF are not aligned (sum(e3t) /= depth) 
    326 !        define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively 
    327 ! 
    328313         DO jk = 1, jpkm1 
    329314            e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk)  
     
    354339         IF( gdepw_1d(jk) <  0._wp .OR. gdept_1d(jk) <  0._wp )   CALL ctl_stop( 'dom:zgr_z: gdepw_1d or gdept_1d < 0 ' ) 
    355340      END DO 
    356       ! 
    357    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_z') 
    358341      ! 
    359342   END SUBROUTINE zgr_z 
     
    401384      !!---------------------------------------------------------------------- 
    402385      ! 
    403    !   IF( nn_timing == 1 )  CALL timing_start('zgr_bat') 
    404       ! 
    405386      IF(lwp) WRITE(numout,*) 
    406387      IF(lwp) WRITE(numout,*) '    zgr_bat : defines level and meter bathymetry' 
     
    411392         !                                            ! global domain level and meter bathymetry (idta,zdta) 
    412393         ! 
    413          ALLOCATE( idta(jpidta,jpjdta), STAT=ierror ) 
     394         ALLOCATE( idta(jpiglo,jpjglo), STAT=ierror ) 
    414395         IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate idta array' ) 
    415          ALLOCATE( zdta(jpidta,jpjdta), STAT=ierror ) 
     396         ALLOCATE( zdta(jpiglo,jpjglo), STAT=ierror ) 
    416397         IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate zdta array' ) 
    417398         ! 
     
    439420            IF(lwp) WRITE(numout,*) 
    440421            IF(lwp) WRITE(numout,*) '         bathymetry field: flat basin with a bump' 
    441             ii_bump = jpidta / 2                           ! i-index of the bump center 
    442             ij_bump = jpjdta / 2                           ! j-index of the bump center 
     422            ii_bump = jpiglo / 2                           ! i-index of the bump center 
     423            ij_bump = jpjglo / 2                           ! j-index of the bump center 
    443424            r_bump  = 50000._wp                            ! bump radius (meters)        
    444425            h_bump  =  2700._wp                            ! bump height (meters) 
     
    450431            IF(lwp) WRITE(numout,*) '            background ocean depth = ', h_oce  , ' meters' 
    451432            !                                         
    452             DO jj = 1, jpjdta                              ! zdta : 
    453                DO ji = 1, jpidta 
     433            DO jj = 1, jpjglo                              ! zdta : 
     434               DO ji = 1, jpiglo 
    454435                  zi = FLOAT( ji - ii_bump ) * ppe1_m / r_bump 
    455436                  zj = FLOAT( jj - ij_bump ) * ppe2_m / r_bump 
     
    467448            ENDIF 
    468449         ENDIF 
     450         ! 
    469451         !                                            ! set GLOBAL boundary conditions  
    470          !                                            ! Caution : idta on the global domain: use of jperio, not nperio 
    471452         IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 
    472453            idta( :    , 1    ) = -1                ;      zdta( :    , 1    ) = -1._wp 
    473             idta( :    ,jpjdta) =  0                ;      zdta( :    ,jpjdta) =  0._wp 
     454            idta( :    ,jpjglo) =  0                ;      zdta( :    ,jpjglo) =  0._wp 
    474455         ELSEIF( jperio == 2 ) THEN 
    475456            idta( :    , 1    ) = idta( : ,  3  )   ;      zdta( :    , 1    ) = zdta( : ,  3  ) 
    476             idta( :    ,jpjdta) = 0                 ;      zdta( :    ,jpjdta) =  0._wp 
     457            idta( :    ,jpjglo) = 0                 ;      zdta( :    ,jpjglo) =  0._wp 
    477458            idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0._wp 
    478             idta(jpidta, :    ) = 0                 ;      zdta(jpidta, :    ) =  0._wp 
     459            idta(jpiglo, :    ) = 0                 ;      zdta(jpiglo, :    ) =  0._wp 
    479460         ELSE 
    480461            ih = 0                                  ;      zh = 0._wp 
    481462            IF( ln_sco )   ih = jpkm1               ;      IF( ln_sco )   zh = h_oce 
    482463            idta( :    , 1    ) = ih                ;      zdta( :    , 1    ) =  zh 
    483             idta( :    ,jpjdta) = ih                ;      zdta( :    ,jpjdta) =  zh 
     464            idta( :    ,jpjglo) = ih                ;      zdta( :    ,jpjglo) =  zh 
    484465            idta( 1    , :    ) = ih                ;      zdta( 1    , :    ) =  zh 
    485             idta(jpidta, :    ) = ih                ;      zdta(jpidta, :    ) =  zh 
     466            idta(jpiglo, :    ) = ih                ;      zdta(jpiglo, :    ) =  zh 
    486467         ENDIF 
    487468 
     
    497478         risfdep(:,:)=0.e0 
    498479         misfdep(:,:)=1 
    499          ! 
    500          ! (ISF) TODO build ice draft netcdf file for isomip and build the corresponding part of code 
    501          IF( cp_cfg == "isomip" .AND. ln_isfcav ) THEN  
    502             risfdep(:,:)=200.e0  
    503             misfdep(:,:)=1  
    504             ij0 = 1 ; ij1 = 40  
    505             DO jj = mj0(ij0), mj1(ij1)  
    506                risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp  
    507             END DO  
    508             WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp  
    509          !  
    510          ELSEIF ( cp_cfg == "isomip2" .AND. ln_isfcav ) THEN 
    511          !  
    512             risfdep(:,:)=0.e0 
    513             misfdep(:,:)=1 
    514             ij0 = 1 ; ij1 = 40 
    515             DO jj = mj0(ij0), mj1(ij1) 
    516                risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp 
    517             END DO 
    518             WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
    519          END IF 
    520480         ! 
    521481         DEALLOCATE( idta, zdta ) 
     
    591551               CALL iom_get  ( inum, jpdom_data, 'isf_draft', risfdep ) 
    592552               CALL iom_close( inum ) 
    593                WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
    594  
    595                ! set grounded point to 0  
    596                ! (a treshold could be set here if needed, or set it offline based on the grounded fraction) 
    597                WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin ) 
    598                   misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    599                   mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
    600                END WHERE 
    601553            END IF 
    602554            !        
     
    633585      ENDIF 
    634586      ! 
    635     !  IF( nn_closea == 0 )   CALL clo_bat( bathy, mbathy )    !==  NO closed seas or lakes  ==! 
    636       !                        
    637587      IF ( .not. ln_sco ) THEN                                !==  set a minimum depth  ==! 
    638588         IF( rn_hmin < 0._wp ) THEN    ;   ik = - INT( rn_hmin )                                      ! from a nb of level 
    639589         ELSE                          ;   ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 )  ! from a depth 
    640590         ENDIF 
    641          zhmin = gdepw_1d(ik+1)                                                         ! minimum depth = ik+1 w-levels  
     591         zhmin = gdepw_1d(ik+1)                                                        ! minimum depth = ik+1 w-levels  
    642592         WHERE( bathy(:,:) <= 0._wp )   ;   bathy(:,:) = 0._wp                         ! min=0     over the lands 
    643          ELSE WHERE                     ;   bathy(:,:) = MAX(  zhmin , bathy(:,:)  )   ! min=zhmin over the oceans 
     593         ELSE WHERE ( risfdep == 0._wp );   bathy(:,:) = MAX(  zhmin , bathy(:,:)  )   ! min=zhmin over the oceans 
    644594         END WHERE 
    645595         IF(lwp) write(numout,*) 'Minimum ocean depth: ', zhmin, ' minimum number of ocean levels : ', ik 
    646596      ENDIF 
    647597      ! 
    648    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_bat') 
    649       ! 
    650598   END SUBROUTINE zgr_bat 
    651  
    652  
    653    SUBROUTINE zgr_bat_zoom 
    654       !!---------------------------------------------------------------------- 
    655       !!                    ***  ROUTINE zgr_bat_zoom  *** 
    656       !! 
    657       !! ** Purpose : - Close zoom domain boundary if necessary 
    658       !!              - Suppress Med Sea from ORCA R2 and R05 arctic zoom 
    659       !! 
    660       !! ** Method  :  
    661       !! 
    662       !! ** Action  : - update mbathy: level bathymetry (in level index) 
    663       !!---------------------------------------------------------------------- 
    664       INTEGER ::   ii0, ii1, ij0, ij1   ! temporary integers 
    665       !!---------------------------------------------------------------------- 
    666       ! 
    667       IF(lwp) WRITE(numout,*) 
    668       IF(lwp) WRITE(numout,*) '    zgr_bat_zoom : modify the level bathymetry for zoom domain' 
    669       IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~' 
    670       ! 
    671       ! Zoom domain 
    672       ! =========== 
    673       ! 
    674       ! Forced closed boundary if required 
    675       IF( lzoom_s )   mbathy(  : , mj0(jpjzoom):mj1(jpjzoom) )      = 0 
    676       IF( lzoom_w )   mbathy(      mi0(jpizoom):mi1(jpizoom) , :  ) = 0 
    677       IF( lzoom_e )   mbathy(      mi0(jpiglo+jpizoom-1):mi1(jpiglo+jpizoom-1) , :  ) = 0 
    678       IF( lzoom_n )   mbathy(  : , mj0(jpjglo+jpjzoom-1):mj1(jpjglo+jpjzoom-1) )      = 0 
    679       ! 
    680       ! Configuration specific domain modifications 
    681       ! (here, ORCA arctic configuration: suppress Med Sea) 
    682       IF( cp_cfg == "orca" .AND. cp_cfz == "arctic" ) THEN 
    683          SELECT CASE ( jp_cfg ) 
    684          !                                        ! ======================= 
    685          CASE ( 2 )                               !  ORCA_R2 configuration 
    686             !                                     ! ======================= 
    687             IF(lwp) WRITE(numout,*) '                   ORCA R2 arctic zoom: suppress the Med Sea' 
    688             ii0 = 141   ;   ii1 = 162      ! Sea box i,j indices 
    689             ij0 =  98   ;   ij1 = 110 
    690             !                                     ! ======================= 
    691          CASE ( 05 )                              !  ORCA_R05 configuration 
    692             !                                     ! ======================= 
    693             IF(lwp) WRITE(numout,*) '                   ORCA R05 arctic zoom: suppress the Med Sea' 
    694             ii0 = 563   ;   ii1 = 642      ! zero over the Med Sea boxe 
    695             ij0 = 314   ;   ij1 = 370  
    696          END SELECT 
    697          ! 
    698          mbathy( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0   ! zero over the Med Sea boxe 
    699          ! 
    700       ENDIF 
    701       ! 
    702    END SUBROUTINE zgr_bat_zoom 
    703  
    704599 
    705600   SUBROUTINE zgr_bat_ctl 
     
    727622      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    728623      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    729       REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
    730       !!---------------------------------------------------------------------- 
    731       ! 
    732   !    IF( nn_timing == 1 )  CALL timing_start('zgr_bat_ctl') 
    733       ! 
    734       CALL wrk_alloc( jpi, jpj, zbathy ) 
     624      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zbathy 
     625      !!---------------------------------------------------------------------- 
     626      ! 
     627      ALLOCATE(zbathy(jpi,jpj)) 
    735628      ! 
    736629      IF(lwp) WRITE(numout,*) 
     
    743636      icompt = 0 
    744637      DO jl = 1, 2 
    745          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
     638         IF( l_Iperio ) THEN 
    746639            mbathy( 1 ,:) = mbathy(jpim1,:)           ! local domain is cyclic east-west 
    747640            mbathy(jpi,:) = mbathy(  2  ,:) 
    748641         ENDIF 
     642         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     643         CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
     644         mbathy(:,:) = INT( zbathy(:,:) ) 
     645          
    749646         DO jj = 2, jpjm1 
    750647            DO ji = 2, jpim1 
     
    760657         END DO 
    761658      END DO 
    762    !   IF( lk_mpp )   CALL mpp_sum( icompt ) 
     659 
     660      IF( lk_mpp )   CALL mpp_sum( 'domzgr', icompt ) 
    763661      IF( icompt == 0 ) THEN 
    764662         IF(lwp) WRITE(numout,*)'     no isolated ocean grid points' 
     
    766664         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points suppressed' 
    767665      ENDIF 
    768       IF( lk_mpp ) THEN 
    769          zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    770          CALL lbc_lnk( 'toto',zbathy, 'T', 1._wp ) 
    771          mbathy(:,:) = INT( zbathy(:,:) ) 
    772       ENDIF 
     666 
     667      zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     668      CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
     669      mbathy(:,:) = INT( zbathy(:,:) ) 
     670 
    773671      !                                          ! East-west cyclic boundary conditions 
    774       IF( nperio == 0 ) THEN 
    775          IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: nperio = ', nperio 
     672      IF( jperio == 0 ) THEN 
     673         IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: jperio = ', jperio 
    776674         IF( lk_mpp ) THEN 
    777675            IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
     
    790688            ENDIF 
    791689         ENDIF 
    792       ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio ==  6 ) THEN 
    793          IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: nperio = ', nperio 
     690      ELSEIF( l_Iperio ) THEN 
     691         IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: jperio = ', jperio 
    794692         mbathy( 1 ,:) = mbathy(jpim1,:) 
    795693         mbathy(jpi,:) = mbathy(  2  ,:) 
    796       ELSEIF( nperio == 2 ) THEN 
    797          IF(lwp) WRITE(numout,*) '   equatorial boundary conditions on mbathy: nperio = ', nperio 
     694      ELSEIF( jperio == 2 ) THEN 
     695         IF(lwp) WRITE(numout,*) '   equatorial boundary conditions on mbathy: jperio = ', jperio 
    798696      ELSE 
    799697         IF(lwp) WRITE(numout,*) '    e r r o r' 
    800          IF(lwp) WRITE(numout,*) '    parameter , nperio = ', nperio 
     698         IF(lwp) WRITE(numout,*) '    parameter , jperio = ', jperio 
    801699         !         STOP 'dom_mba' 
    802700      ENDIF 
     701 
    803702      !  Boundary condition on mbathy 
    804703      IF( .NOT.lk_mpp ) THEN  
     
    806705         !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
    807706         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    808          CALL lbc_lnk( 'toto',zbathy, 'T', 1._wp ) 
     707         CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
    809708         mbathy(:,:) = INT( zbathy(:,:) ) 
    810709      ENDIF 
     710 
    811711      ! Number of ocean level inferior or equal to jpkm1 
    812       ikmax = 0 
    813       DO jj = 1, jpj 
    814          DO ji = 1, jpi 
    815             ikmax = MAX( ikmax, mbathy(ji,jj) ) 
    816          END DO 
    817       END DO 
    818 !!gm  !!! test to do:   ikmax = MAX( mbathy(:,:) )   ??? 
     712      zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     713      ikmax = glob_max( 'domzgr', zbathy(:,:) ) 
     714 
    819715      IF( ikmax > jpkm1 ) THEN 
    820716         IF(lwp) WRITE(numout,*) ' maximum number of ocean level = ', ikmax,' >  jpk-1' 
     
    825721      ENDIF 
    826722      ! 
    827       CALL wrk_dealloc( jpi, jpj, zbathy ) 
    828       ! 
    829    !!   IF( nn_timing == 1 )  CALL timing_stop('zgr_bat_ctl') 
     723      DEALLOCATE( zbathy ) 
    830724      ! 
    831725   END SUBROUTINE zgr_bat_ctl 
     
    845739      !!---------------------------------------------------------------------- 
    846740      INTEGER ::   ji, jj   ! dummy loop indices 
    847       REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
    848       !!---------------------------------------------------------------------- 
    849       ! 
    850    !   IF( nn_timing == 1 )  CALL timing_start('zgr_bot_level') 
    851       ! 
    852       CALL wrk_alloc( jpi, jpj, zmbk ) 
     741      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zmbk 
     742      !!---------------------------------------------------------------------- 
     743      ! 
     744      ALLOCATE( zmbk(jpi,jpj) ) 
    853745      ! 
    854746      IF(lwp) WRITE(numout,*) 
     
    866758      END DO 
    867759      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
    868       zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk('toto',zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    869       zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk('toto',zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    870       ! 
    871       CALL wrk_dealloc( jpi, jpj, zmbk ) 
    872       ! 
    873    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_bot_level') 
     760      zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     761      zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     762      ! 
     763      DEALLOCATE( zmbk ) 
    874764      ! 
    875765   END SUBROUTINE zgr_bot_level 
     
    889779      !!---------------------------------------------------------------------- 
    890780      INTEGER ::   ji, jj   ! dummy loop indices 
    891       REAL(wp), POINTER, DIMENSION(:,:) ::  zmik 
    892       !!---------------------------------------------------------------------- 
    893       ! 
    894    !   IF( nn_timing == 1 )  CALL timing_start('zgr_top_level') 
    895       ! 
    896       CALL wrk_alloc( jpi, jpj, zmik ) 
     781      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zmik 
     782      !!---------------------------------------------------------------------- 
     783      ! 
     784      ALLOCATE( zmik(jpi,jpj) ) 
    897785      ! 
    898786      IF(lwp) WRITE(numout,*) 
     
    911799 
    912800      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
    913       zmik(:,:) = REAL( miku(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'U',1.)   ;   miku  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    914       zmik(:,:) = REAL( mikv(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'V',1.)   ;   mikv  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    915       zmik(:,:) = REAL( mikf(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'F',1.)   ;   mikf  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    916       ! 
    917       CALL wrk_dealloc( jpi, jpj, zmik ) 
    918       ! 
    919    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_top_level') 
     801      zmik(:,:) = REAL( miku(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'U',1.)   ;   miku  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     802      zmik(:,:) = REAL( mikv(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'V',1.)   ;   mikv  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     803      zmik(:,:) = REAL( mikf(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'F',1.)   ;   mikf  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     804      ! 
     805      DEALLOCATE( zmik ) 
    920806      ! 
    921807   END SUBROUTINE zgr_top_level 
     
    932818      INTEGER  ::   jk 
    933819      !!---------------------------------------------------------------------- 
    934       ! 
    935     !  IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    936820      ! 
    937821      DO jk = 1, jpk 
    938822         gdept_0(:,:,jk) = gdept_1d(jk) 
    939823         gdepw_0(:,:,jk) = gdepw_1d(jk) 
    940          gde3w_0(:,:,jk) = gdepw_1d(jk) 
    941824         e3t_0  (:,:,jk) = e3t_1d  (jk) 
    942825         e3u_0  (:,:,jk) = e3t_1d  (jk) 
     
    947830         e3vw_0 (:,:,jk) = e3w_1d  (jk) 
    948831      END DO 
    949       ! 
    950    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_zco') 
    951832      ! 
    952833   END SUBROUTINE zgr_zco 
     
    1004885      REAL(wp) ::   zdiff            ! temporary scalar 
    1005886      REAL(wp) ::   zmax             ! temporary scalar 
    1006       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
     887      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  zprt 
    1007888      !!--------------------------------------------------------------------- 
    1008889      ! 
    1009    !   IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
    1010       ! 
    1011       CALL wrk_alloc( jpi,jpj,jpk,   zprt ) 
     890      ALLOCATE( zprt(jpi,jpj,jpk) ) 
    1012891      ! 
    1013892      IF(lwp) WRITE(numout,*) 
     
    1015894      IF(lwp) WRITE(numout,*) '    ~~~~~~~ ' 
    1016895      IF(lwp) WRITE(numout,*) '              mbathy is recomputed : bathy_level file is NOT used' 
     896 
     897      ! compute position of the ice shelf grounding line 
     898      ! set bathy and isfdraft to 0 where grounded 
     899      IF ( ln_isfcav ) CALL zgr_isf_zspace 
    1017900 
    1018901      ! bathymetry in level (from bathy_meter) 
     
    1033916      END DO 
    1034917 
     918      ! Check compatibility between bathy and iceshelf draft 
     919      ! insure at least 2 wet level on the vertical under an ice shelf 
     920      ! compute misfdep and adjust isf draft if needed 
     921      IF ( ln_isfcav ) CALL zgr_isf_kspace 
     922 
    1035923      ! Scale factors and depth at T- and W-points 
    1036924      DO jk = 1, jpk                        ! intitialization to the reference z-coordinate 
     
    1041929      END DO 
    1042930       
    1043       ! Bathy, iceshelf draft, scale factor and depth at T- and W- points in case of isf 
    1044       IF ( ln_isfcav ) CALL zgr_isf 
    1045  
    1046931      ! Scale factors and depth at T- and W-points 
    1047       IF ( .NOT. ln_isfcav ) THEN 
    1048          DO jj = 1, jpj 
    1049             DO ji = 1, jpi 
    1050                ik = mbathy(ji,jj) 
    1051                IF( ik > 0 ) THEN               ! ocean point only 
    1052                   ! max ocean level case 
    1053                   IF( ik == jpkm1 ) THEN 
    1054                      zdepwp = bathy(ji,jj) 
    1055                      ze3tp  = bathy(ji,jj) - gdepw_1d(ik) 
    1056                      ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) ) 
    1057                      e3t_0(ji,jj,ik  ) = ze3tp 
    1058                      e3t_0(ji,jj,ik+1) = ze3tp 
    1059                      e3w_0(ji,jj,ik  ) = ze3wp 
    1060                      e3w_0(ji,jj,ik+1) = ze3tp 
    1061                      gdepw_0(ji,jj,ik+1) = zdepwp 
    1062                      gdept_0(ji,jj,ik  ) = gdept_1d(ik-1) + ze3wp 
    1063                      gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp 
    1064                      ! 
    1065                   ELSE                         ! standard case 
    1066                      IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN  ;   gdepw_0(ji,jj,ik+1) = bathy(ji,jj) 
    1067                      ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    1068                      ENDIF 
    1069    !gm Bug?  check the gdepw_1d 
    1070                      !       ... on ik 
    1071                      gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) )   & 
    1072                         &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
    1073                         &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
    1074                      e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
    1075                         &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
    1076                      e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
    1077                         &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
    1078                      !       ... on ik+1 
    1079                      e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    1080                      e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    1081                      gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    1082                   ENDIF 
    1083                ENDIF 
    1084             END DO 
    1085          END DO 
    1086          ! 
    1087          it = 0 
    1088          DO jj = 1, jpj 
    1089             DO ji = 1, jpi 
    1090                ik = mbathy(ji,jj) 
    1091                IF( ik > 0 ) THEN               ! ocean point only 
    1092                   e3tp (ji,jj) = e3t_0(ji,jj,ik) 
    1093                   e3wp (ji,jj) = e3w_0(ji,jj,ik) 
    1094                   ! test 
    1095                   zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik  ) 
    1096                   IF( zdiff <= 0._wp .AND. lwp ) THEN  
    1097                      it = it + 1 
    1098                      WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj 
    1099                      WRITE(numout,*) ' bathy = ', bathy(ji,jj) 
    1100                      WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 
    1101                      WRITE(numout,*) ' e3tp    = ', e3t_0  (ji,jj,ik), ' e3wp    = ', e3w_0  (ji,jj,ik  ) 
    1102                   ENDIF 
    1103                ENDIF 
    1104             END DO 
    1105          END DO 
    1106       END IF 
    1107       ! 
    1108       ! Scale factors and depth at U-, V-, UW and VW-points 
    1109       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1110          e3u_0 (:,:,jk) = e3t_1d(jk) 
    1111          e3v_0 (:,:,jk) = e3t_1d(jk) 
    1112          e3uw_0(:,:,jk) = e3w_1d(jk) 
    1113          e3vw_0(:,:,jk) = e3w_1d(jk) 
    1114       END DO 
    1115  
    1116       DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
    1117          DO jj = 1, jpjm1 
    1118             DO ji = 1, jpim1   ! vector opt. 
    1119                e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
    1120                e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
    1121                e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
    1122                e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
    1123             END DO 
    1124          END DO 
    1125       END DO 
    1126       IF ( ln_isfcav ) THEN 
    1127       ! (ISF) define e3uw (adapted for 2 cells in the water column) 
    1128          DO jj = 2, jpjm1  
    1129             DO ji = 2, jpim1   ! vector opt.  
    1130                ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj)) 
    1131                ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj)) 
    1132                IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) & 
    1133                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) ) 
    1134                ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1)) 
    1135                ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1)) 
    1136                IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) & 
    1137                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) ) 
    1138             END DO 
    1139          END DO 
    1140       END IF 
    1141  
    1142       CALL lbc_lnk('toto', e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk('toto', e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
    1143       CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp ) 
    1144       ! 
    1145  
    1146       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1147          WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
    1148          WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
    1149          WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
    1150          WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
    1151       END DO 
    1152        
    1153       ! Scale factor at F-point 
    1154       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1155          e3f_0(:,:,jk) = e3t_1d(jk) 
    1156       END DO 
    1157       DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
    1158          DO jj = 1, jpjm1 
    1159             DO ji = 1, jpim1   ! vector opt. 
    1160                e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
    1161             END DO 
    1162          END DO 
    1163       END DO 
    1164       CALL lbc_lnk('toto', e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
    1165       ! 
    1166       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1167          WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
    1168       END DO 
    1169 !!gm  bug ? :  must be a do loop with mj0,mj1 
    1170       !  
    1171       e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
    1172       e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
    1173       e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
    1174       e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
    1175       e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
    1176  
    1177       ! Control of the sign 
    1178       IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
    1179       IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
    1180       IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
    1181       IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
    1182       
    1183       ! Compute gde3w_0 (vertical sum of e3w) 
    1184       IF ( ln_isfcav ) THEN ! if cavity 
    1185          WHERE( misfdep == 0 )   misfdep = 1 
    1186          DO jj = 1,jpj 
    1187             DO ji = 1,jpi 
    1188                gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
    1189                DO jk = 2, misfdep(ji,jj) 
    1190                   gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1191                END DO 
    1192                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)) 
    1193                DO jk = misfdep(ji,jj) + 1, jpk 
    1194                   gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1195                END DO 
    1196             END DO 
    1197          END DO 
    1198       ELSE ! no cavity 
    1199          gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    1200          DO jk = 2, jpk 
    1201             gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
    1202          END DO 
    1203       END IF 
    1204       ! 
    1205       CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
    1206       ! 
    1207    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    1208       ! 
    1209    END SUBROUTINE zgr_zps 
    1210  
    1211  
    1212    SUBROUTINE zgr_isf 
    1213       !!---------------------------------------------------------------------- 
    1214       !!                    ***  ROUTINE zgr_isf  *** 
    1215       !!    
    1216       !! ** Purpose :   check the bathymetry in levels 
    1217       !!    
    1218       !! ** Method  :   THe water column have to contained at least 2 cells 
    1219       !!                Bathymetry and isfdraft are modified (dig/close) to respect 
    1220       !!                this criterion. 
    1221       !!    
    1222       !! ** Action  : - test compatibility between isfdraft and bathy  
    1223       !!              - bathy and isfdraft are modified 
    1224       !!---------------------------------------------------------------------- 
    1225       INTEGER  ::   ji, jj, jl, jk       ! dummy loop indices 
    1226       INTEGER  ::   ik, it               ! temporary integers 
    1227       INTEGER  ::   icompt, ibtest       ! (ISF) 
    1228       INTEGER  ::   ibtestim1, ibtestip1 ! (ISF) 
    1229       INTEGER  ::   ibtestjm1, ibtestjp1 ! (ISF) 
    1230       REAL(wp) ::   zdepth           ! Ajusted ocean depth to avoid too small e3t 
    1231       REAL(wp) ::   zmax             ! Maximum and minimum depth 
    1232       REAL(wp) ::   zbathydiff       ! isf temporary scalar 
    1233       REAL(wp) ::   zrisfdepdiff     ! isf temporary scalar 
    1234       REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    1235       REAL(wp) ::   zdepwp           ! Ajusted ocean depth to avoid too small e3t 
    1236       REAL(wp) ::   zdiff            ! temporary scalar 
    1237       REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
    1238       INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
    1239       !!--------------------------------------------------------------------- 
    1240       ! 
    1241   !!    IF( nn_timing == 1 )   CALL timing_start('zgr_isf') 
    1242       ! 
    1243       CALL wrk_alloc( jpi,jpj,   zbathy, zmask, zrisfdep) 
    1244       CALL wrk_alloc( jpi,jpj,   zmisfdep, zmbathy ) 
    1245  
    1246       ! (ISF) compute misfdep 
    1247       WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
    1248       ELSEWHERE                      ;                         misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
    1249       END WHERE   
    1250  
    1251       ! Compute misfdep for ocean points (i.e. first wet level)  
    1252       ! find the first ocean level such that the first level thickness  
    1253       ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
    1254       ! e3t_0 is the reference level thickness  
    1255       DO jk = 2, jpkm1  
    1256          zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
    1257          WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
    1258       END DO  
    1259       WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) ) 
    1260          risfdep(:,:) = 0. ; misfdep(:,:) = 1 
    1261       END WHERE 
    1262  
    1263       ! remove very shallow ice shelf (less than ~ 10m if 75L) 
    1264       WHERE (risfdep(:,:) <= 10._wp .AND. misfdep(:,:) > 1) 
    1265          misfdep = 0; risfdep = 0.0_wp; 
    1266          mbathy  = 0; bathy   = 0.0_wp; 
    1267       END WHERE 
    1268       WHERE (bathy(:,:) <= 30.0_wp .AND. gphit < -60._wp) 
    1269          misfdep = 0; risfdep = 0.0_wp; 
    1270          mbathy  = 0; bathy   = 0.0_wp; 
    1271       END WHERE 
    1272   
    1273 ! 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 
    1274       icompt = 0  
    1275 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
    1276       DO jl = 1, 10      
    1277          ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments) 
    1278          WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin) 
    1279             misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    1280             mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
    1281          END WHERE 
    1282          WHERE (mbathy(:,:) <= 0)  
    1283             misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
    1284             mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
    1285          END WHERE 
    1286          IF( lk_mpp ) THEN 
    1287             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1288             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1289             misfdep(:,:) = INT( zbathy(:,:) ) 
    1290  
    1291             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1292             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1293  
    1294             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1295             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1296             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1297          ENDIF 
    1298          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
    1299             misfdep( 1 ,:) = misfdep(jpim1,:)            ! local domain is cyclic east-west  
    1300             misfdep(jpi,:) = misfdep(  2  ,:)  
    1301             mbathy( 1 ,:)  = mbathy(jpim1,:)             ! local domain is cyclic east-west 
    1302             mbathy(jpi,:)  = mbathy(  2  ,:) 
    1303          ENDIF 
    1304  
    1305          ! split last cell if possible (only where water column is 2 cell or less) 
    1306          ! if coupled to ice sheet, we do not modify the bathymetry (can be discuss). 
    1307          IF ( .NOT. ln_iscpl) THEN 
    1308             DO jk = jpkm1, 1, -1 
    1309                zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1310                WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
    1311                   mbathy(:,:) = jk 
    1312                   bathy(:,:)  = zmax 
    1313                END WHERE 
    1314             END DO 
    1315          END IF 
    1316   
    1317          ! split top cell if possible (only where water column is 2 cell or less) 
    1318          DO jk = 2, jpkm1 
    1319             zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1320             WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
    1321                misfdep(:,:) = jk 
    1322                risfdep(:,:) = zmax 
    1323             END WHERE 
    1324          END DO 
    1325  
    1326   
    1327  ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
    1328          DO jj = 1, jpj 
    1329             DO ji = 1, jpi 
    1330                ! find the minimum change option: 
    1331                ! test bathy 
    1332                IF (risfdep(ji,jj) > 1) THEN 
    1333                   IF ( .NOT. ln_iscpl ) THEN 
    1334                      zbathydiff  =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
    1335                          &            + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1336                      zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
    1337                          &            - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1338                      IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
    1339                         IF (zbathydiff <= zrisfdepdiff) THEN 
    1340                            bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
    1341                            mbathy(ji,jj)= mbathy(ji,jj) + 1 
    1342                         ELSE 
    1343                            risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
    1344                            misfdep(ji,jj) = misfdep(ji,jj) - 1 
    1345                         END IF 
    1346                      ENDIF 
    1347                   ELSE 
    1348                      IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
    1349                         risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
    1350                         misfdep(ji,jj) = misfdep(ji,jj) - 1 
    1351                      END IF 
    1352                   END IF 
    1353                END IF 
    1354             END DO 
    1355          END DO 
    1356   
    1357          ! At least 2 levels for water thickness at T, U, and V point. 
    1358          DO jj = 1, jpj 
    1359             DO ji = 1, jpi 
    1360                ! find the minimum change option: 
    1361                ! test bathy 
    1362                IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    1363                   IF ( .NOT. ln_iscpl ) THEN  
    1364                      zbathydiff  =ABS(bathy(ji,jj)   - ( gdepw_1d(mbathy (ji,jj)+1) & 
    1365                          &                             + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1366                      zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj)  ) &  
    1367                          &                             - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1368                      IF (zbathydiff <= zrisfdepdiff) THEN 
    1369                         mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1370                         bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1371                      ELSE 
    1372                         misfdep(ji,jj)= misfdep(ji,jj) - 1 
    1373                         risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
    1374                      END IF 
    1375                   ELSE 
    1376                      misfdep(ji,jj)= misfdep(ji,jj) - 1 
    1377                      risfdep(ji,jj)= gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
    1378                   END IF 
    1379                ENDIF 
    1380             END DO 
    1381          END DO 
    1382   
    1383  ! point V mbathy(ji,jj) == misfdep(ji,jj+1)  
    1384          DO jj = 1, jpjm1 
    1385             DO ji = 1, jpim1 
    1386                IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    1387                   IF ( .NOT. ln_iscpl ) THEN  
    1388                      zbathydiff  =ABS(bathy(ji,jj    ) - ( gdepw_1d(mbathy (ji,jj)+1) & 
    1389                           &                              + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
    1390                      zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) & 
    1391                           &                              - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
    1392                      IF (zbathydiff <= zrisfdepdiff) THEN 
    1393                         mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1394                         bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
    1395                      ELSE 
    1396                         misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
    1397                         risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
    1398                      END IF 
    1399                   ELSE 
    1400                      misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
    1401                      risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
    1402                   END IF 
    1403                ENDIF 
    1404             END DO 
    1405          END DO 
    1406   
    1407          IF( lk_mpp ) THEN 
    1408             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1409             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1410             misfdep(:,:) = INT( zbathy(:,:) ) 
    1411  
    1412             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1413             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1414  
    1415             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1416             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1417             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1418          ENDIF 
    1419  ! point V misdep(ji,jj) == mbathy(ji,jj+1)  
    1420          DO jj = 1, jpjm1 
    1421             DO ji = 1, jpim1 
    1422                IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN 
    1423                   IF ( .NOT. ln_iscpl ) THEN  
    1424                      zbathydiff  =ABS(  bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) & 
    1425                            &                             + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
    1426                      zrisfdepdiff=ABS(risfdep(ji,jj  ) - ( gdepw_1d(misfdep(ji,jj  )  ) & 
    1427                            &                             - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
    1428                      IF (zbathydiff <= zrisfdepdiff) THEN 
    1429                         mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
    1430                         bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
    1431                      ELSE 
    1432                         misfdep(ji,jj)   = misfdep(ji,jj) - 1 
    1433                         risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
    1434                      END IF 
    1435                   ELSE 
    1436                      misfdep(ji,jj)   = misfdep(ji,jj) - 1 
    1437                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
    1438                   END IF 
    1439                ENDIF 
    1440             END DO 
    1441          END DO 
    1442   
    1443   
    1444          IF( lk_mpp ) THEN  
    1445             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1446             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1447             misfdep(:,:) = INT( zbathy(:,:) ) 
    1448  
    1449             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1450             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1451  
    1452             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1453             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1454             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1455          ENDIF  
    1456   
    1457  ! point U mbathy(ji,jj) == misfdep(ji,jj+1)  
    1458          DO jj = 1, jpjm1 
    1459             DO ji = 1, jpim1 
    1460                IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    1461                   IF ( .NOT. ln_iscpl ) THEN  
    1462                   zbathydiff  =ABS(  bathy(ji  ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) & 
    1463                        &                              + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
    1464                   zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) & 
    1465                        &                              - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
    1466                   IF (zbathydiff <= zrisfdepdiff) THEN 
    1467                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1468                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1469                   ELSE 
    1470                      misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
    1471                      risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
    1472                   END IF 
    1473                   ELSE 
    1474                      misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
    1475                      risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
    1476                   ENDIF 
    1477                ENDIF 
    1478             ENDDO 
    1479          ENDDO 
    1480   
    1481          IF( lk_mpp ) THEN  
    1482             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1483             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1484             misfdep(:,:) = INT( zbathy(:,:) ) 
    1485  
    1486             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1487             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1488  
    1489             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1490             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1491             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1492          ENDIF  
    1493   
    1494  ! point U misfdep(ji,jj) == 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) > 1) THEN 
    1498                   IF ( .NOT. ln_iscpl ) THEN  
    1499                      zbathydiff  =ABS(  bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) & 
    1500                           &                              + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
    1501                      zrisfdepdiff=ABS(risfdep(ji  ,jj) - ( gdepw_1d(misfdep(ji  ,jj)  ) & 
    1502                           &                              - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
    1503                      IF (zbathydiff <= zrisfdepdiff) THEN 
    1504                         mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
    1505                         bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  ) + 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) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
    1509                      END IF 
    1510                   ELSE 
    1511                      misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
    1512                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
    1513                   ENDIF 
    1514                ENDIF 
    1515             ENDDO 
    1516          ENDDO 
    1517   
    1518          IF( lk_mpp ) THEN 
    1519             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1520             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1521             misfdep(:,:) = INT( zbathy(:,:) ) 
    1522  
    1523             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1524             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1525  
    1526             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1527             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1528             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1529          ENDIF 
    1530       END DO 
    1531       ! end dig bathy/ice shelf to be compatible 
    1532       ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
    1533       DO jl = 1,20 
    1534   
    1535  ! remove single point "bay" on isf coast line in the ice shelf draft' 
    1536          DO jk = 2, jpk 
    1537             WHERE (misfdep==0) misfdep=jpk 
    1538             zmask=0._wp 
    1539             WHERE (misfdep <= jk) zmask=1 
    1540             DO jj = 2, jpjm1 
    1541                DO ji = 2, jpim1 
    1542                   IF (misfdep(ji,jj) == jk) THEN 
    1543                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1544                      IF (ibtest <= 1) THEN 
    1545                         risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
    1546                         IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk 
    1547                      END IF 
    1548                   END IF 
    1549                END DO 
    1550             END DO 
    1551          END DO 
    1552          WHERE (misfdep==jpk) 
    1553              misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
    1554          END WHERE 
    1555          IF( lk_mpp ) THEN 
    1556             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1557             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1558             misfdep(:,:) = INT( zbathy(:,:) ) 
    1559  
    1560             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1561             CALL lbc_lnk('toto', bathy,  'T', 1. ) 
    1562  
    1563             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1564             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1565             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1566          ENDIF 
    1567   
    1568  ! remove single point "bay" on bathy coast line beneath an ice shelf' 
    1569          DO jk = jpk,1,-1 
    1570             zmask=0._wp 
    1571             WHERE (mbathy >= jk ) zmask=1 
    1572             DO jj = 2, jpjm1 
    1573                DO ji = 2, jpim1 
    1574                   IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN 
    1575                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1576                      IF (ibtest <= 1) THEN 
    1577                         bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
    1578                         IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 0 
    1579                      END IF 
    1580                   END IF 
    1581                END DO 
    1582             END DO 
    1583          END DO 
    1584          WHERE (mbathy==0) 
    1585              misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
    1586          END WHERE 
    1587          IF( lk_mpp ) THEN 
    1588             zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1589             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1590             misfdep(:,:) = INT( zbathy(:,:) ) 
    1591  
    1592             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1593             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1594  
    1595             zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1596             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1597             mbathy(:,:)  = INT( zbathy(:,:) ) 
    1598          ENDIF 
    1599   
    1600  ! fill hole in ice shelf 
    1601          zmisfdep = misfdep 
    1602          zrisfdep = risfdep 
    1603          WHERE (zmisfdep <= 1._wp) zmisfdep=jpk 
    1604          DO jj = 2, jpjm1 
    1605             DO ji = 2, jpim1 
    1606                ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
    1607                ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
    1608                IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj  ) ) ibtestim1 = jpk 
    1609                IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj  ) ) ibtestip1 = jpk 
    1610                IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj-1) ) ibtestjm1 = jpk 
    1611                IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj+1) ) ibtestjp1 = jpk 
    1612                ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1613                IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN 
    1614                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
    1615                END IF 
    1616                IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN 
    1617                   misfdep(ji,jj) = ibtest 
    1618                   risfdep(ji,jj) = gdepw_1d(ibtest) 
    1619                ENDIF 
    1620             ENDDO 
    1621          ENDDO 
    1622   
    1623          IF( lk_mpp ) THEN  
    1624             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1625             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
    1626             misfdep(:,:) = INT( zbathy(:,:) )  
    1627  
    1628             CALL lbc_lnk( 'toto',risfdep, 'T', 1. )  
    1629             CALL lbc_lnk( 'toto',bathy,   'T', 1. ) 
    1630  
    1631             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1632             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
    1633             mbathy(:,:) = INT( zbathy(:,:) ) 
    1634          ENDIF  
    1635  ! 
    1636  !! fill hole in bathymetry 
    1637          zmbathy (:,:)=mbathy (:,:) 
    1638          DO jj = 2, jpjm1 
    1639             DO ji = 2, jpim1 
    1640                ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
    1641                ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
    1642                IF( zmbathy(ji,jj) <  misfdep(ji-1,jj  ) ) ibtestim1 = 0 
    1643                IF( zmbathy(ji,jj) <  misfdep(ji+1,jj  ) ) ibtestip1 = 0 
    1644                IF( zmbathy(ji,jj) <  misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
    1645                IF( zmbathy(ji,jj) <  misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
    1646                ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1647                IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN 
    1648                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
    1649                END IF 
    1650                IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN 
    1651                   mbathy(ji,jj) = ibtest 
    1652                   bathy(ji,jj)  = gdepw_1d(ibtest+1)  
    1653                ENDIF 
    1654             END DO 
    1655          END DO 
    1656          IF( lk_mpp ) THEN  
    1657             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1658             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
    1659             misfdep(:,:) = INT( zbathy(:,:) )  
    1660  
    1661             CALL lbc_lnk( 'toto',risfdep, 'T', 1. )  
    1662             CALL lbc_lnk( 'toto',bathy,   'T', 1. ) 
    1663  
    1664             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1665             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
    1666             mbathy(:,:) = INT( zbathy(:,:) ) 
    1667          ENDIF  
    1668  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1669          DO jj = 1, jpjm1 
    1670             DO ji = 1, jpim1 
    1671                IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
    1672                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1673                END IF 
    1674             END DO 
    1675          END DO 
    1676          IF( lk_mpp ) THEN  
    1677             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1678             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
    1679             misfdep(:,:) = INT( zbathy(:,:) )  
    1680  
    1681             CALL lbc_lnk('toto', risfdep, 'T', 1. )  
    1682             CALL lbc_lnk('toto', bathy,   'T', 1. ) 
    1683  
    1684             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1685             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
    1686             mbathy(:,:) = INT( zbathy(:,:) ) 
    1687          ENDIF  
    1688  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1689          DO jj = 1, jpjm1 
    1690             DO ji = 1, jpim1 
    1691                IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
    1692                   mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
    1693                END IF 
    1694             END DO 
    1695          END DO 
    1696          IF( lk_mpp ) THEN  
    1697             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1698             CALL lbc_lnk('toto', zbathy, 'T', 1. )  
    1699             misfdep(:,:) = INT( zbathy(:,:) )  
    1700  
    1701             CALL lbc_lnk('toto', risfdep,'T', 1. )  
    1702             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1703  
    1704             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1705             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1706             mbathy(:,:) = INT( zbathy(:,:) ) 
    1707          ENDIF  
    1708  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1709          DO jj = 1, jpjm1 
    1710             DO ji = 1, jpi 
    1711                IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
    1712                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1713                END IF 
    1714             END DO 
    1715          END DO 
    1716          IF( lk_mpp ) THEN  
    1717             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1718             CALL lbc_lnk( 'toto',zbathy, 'T', 1. )  
    1719             misfdep(:,:) = INT( zbathy(:,:) )  
    1720  
    1721             CALL lbc_lnk( 'toto',risfdep,'T', 1. )  
    1722             CALL lbc_lnk('toto', bathy,  'T', 1. ) 
    1723  
    1724             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1725             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1726             mbathy(:,:) = INT( zbathy(:,:) ) 
    1727          ENDIF  
    1728  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1729          DO jj = 1, jpjm1 
    1730             DO ji = 1, jpi 
    1731                IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
    1732                   mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ; 
    1733                END IF 
    1734             END DO 
    1735          END DO 
    1736          IF( lk_mpp ) THEN  
    1737             zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1738             CALL lbc_lnk( 'toto',zbathy, 'T', 1. )  
    1739             misfdep(:,:) = INT( zbathy(:,:) )  
    1740  
    1741             CALL lbc_lnk( 'toto',risfdep,'T', 1. )  
    1742             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
    1743  
    1744             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1745             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
    1746             mbathy(:,:) = INT( zbathy(:,:) ) 
    1747          ENDIF  
    1748  ! if not compatible after all check, mask T 
    1749          DO jj = 1, jpj 
    1750             DO ji = 1, jpi 
    1751                IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
    1752                   misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
    1753                END IF 
    1754             END DO 
    1755          END DO 
    1756   
    1757          WHERE (mbathy(:,:) == 1) 
    1758             mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
    1759          END WHERE 
    1760       END DO  
    1761 ! end check compatibility ice shelf/bathy 
    1762       ! remove very shallow ice shelf (less than ~ 10m if 75L) 
    1763       WHERE (risfdep(:,:) <= 10._wp) 
    1764          misfdep = 1; risfdep = 0.0_wp; 
    1765       END WHERE 
    1766  
    1767       IF( icompt == 0 ) THEN  
    1768          IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
    1769       ELSE  
    1770          IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
    1771       ENDIF  
    1772  
    1773       ! compute scale factor and depth at T- and W- points 
    1774932      DO jj = 1, jpj 
    1775933         DO ji = 1, jpi 
     
    1793951                  ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    1794952                  ENDIF 
    1795       !            gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    1796953!gm Bug?  check the gdepw_1d 
    1797954                  !       ... on ik 
     
    1799956                     &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
    1800957                     &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
    1801                   e3t_0  (ji,jj,ik  ) = gdepw_0(ji,jj,ik+1) - gdepw_1d(ik  ) 
    1802                   e3w_0  (ji,jj,ik  ) = gdept_0(ji,jj,ik  ) - gdept_1d(ik-1) 
     958                  e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
     959                     &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
     960                  e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
     961                     &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
    1803962                  !       ... on ik+1 
    1804963                  e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    1805964                  e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     965                  gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    1806966               ENDIF 
    1807967            ENDIF 
     
    1829989      END DO 
    1830990      ! 
    1831       ! (ISF) Definition of e3t, u, v, w for ISF case 
    1832       DO jj = 1, jpj  
    1833          DO ji = 1, jpi  
    1834             ik = misfdep(ji,jj)  
    1835             IF( ik > 1 ) THEN               ! ice shelf point only  
    1836                IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
    1837                gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
    1838 !gm Bug?  check the gdepw_0  
    1839             !       ... on ik  
    1840                gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
    1841                   &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
    1842                   &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
    1843                e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
    1844                e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
    1845  
    1846                IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
    1847                   e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
    1848                ENDIF  
    1849             !       ... on ik / ik-1  
    1850                e3w_0  (ji,jj,ik  ) = e3t_0  (ji,jj,ik) !2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
    1851                gdept_0(ji,jj,ik-1) = gdept_0(ji,jj,ik) - e3w_0(ji,jj,ik) 
    1852                e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
    1853                e3w_0  (ji,jj,ik-1) = gdept_0(ji,jj,ik-1) - gdept_1d(ik-2) 
    1854                gdepw_0(ji,jj,ik-1) = gdepw_0(ji,jj,ik) - e3t_0(ji,jj,ik-1) 
    1855             ENDIF  
    1856          END DO  
    1857       END DO  
    1858     
    1859       it = 0  
    1860       DO jj = 1, jpj  
    1861          DO ji = 1, jpi  
    1862             ik = misfdep(ji,jj)  
    1863             IF( ik > 1 ) THEN               ! ice shelf point only  
    1864                e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
    1865                e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
    1866             ! test  
    1867                zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
    1868                IF( zdiff <= 0. .AND. lwp ) THEN   
    1869                   it = it + 1  
    1870                   WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
    1871                   WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
    1872                   WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
    1873                   WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
    1874                ENDIF  
    1875             ENDIF  
    1876          END DO  
    1877       END DO  
    1878  
    1879       CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
    1880       CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 
    1881       ! 
    1882   !    IF( nn_timing == 1 )   CALL timing_stop('zgr_isf') 
    1883       !       
    1884    END SUBROUTINE zgr_isf 
    1885  
     991      ! compute top scale factor if ice shelf 
     992      IF (ln_isfcav) CALL zps_isf 
     993      ! 
     994      ! Scale factors and depth at U-, V-, UW and VW-points 
     995      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     996         e3u_0 (:,:,jk) = e3t_1d(jk) 
     997         e3v_0 (:,:,jk) = e3t_1d(jk) 
     998         e3uw_0(:,:,jk) = e3w_1d(jk) 
     999         e3vw_0(:,:,jk) = e3w_1d(jk) 
     1000      END DO 
     1001 
     1002      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
     1003         DO jj = 1, jpjm1 
     1004            DO ji = 1, jpim1   ! vector opt. 
     1005               e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
     1006               e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
     1007               e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
     1008               e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
     1009            END DO 
     1010         END DO 
     1011      END DO 
     1012 
     1013      ! update e3uw in case only 2 cells in the water column 
     1014      IF ( ln_isfcav ) CALL zps_isf_e3uv_w 
     1015      ! 
     1016      CALL lbc_lnk('domzgr', e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk('domzgr', e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     1017      CALL lbc_lnk('domzgr', e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 
     1018      ! 
     1019      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1020         WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
     1021         WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
     1022         WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
     1023         WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
     1024      END DO 
     1025       
     1026      ! Scale factor at F-point 
     1027      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     1028         e3f_0(:,:,jk) = e3t_1d(jk) 
     1029      END DO 
     1030      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
     1031         DO jj = 1, jpjm1 
     1032            DO ji = 1, jpim1   ! vector opt. 
     1033               e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
     1034            END DO 
     1035         END DO 
     1036      END DO 
     1037      CALL lbc_lnk('domzgr', e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
     1038      ! 
     1039      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1040         WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
     1041      END DO 
     1042!!gm  bug ? :  must be a do loop with mj0,mj1 
     1043      !  
     1044      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
     1045      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
     1046      e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
     1047      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
     1048      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
     1049 
     1050      ! Control of the sign 
     1051      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
     1052      IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
     1053      IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
     1054      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
     1055      ! 
     1056      ! if in the future gde3w_0 need to be compute, use the function defined in NEMO 
     1057      ! for now gde3w_0 computation is removed as not an output of domcfg 
     1058 
     1059      DEALLOCATE( zprt ) 
     1060      ! 
     1061   END SUBROUTINE zgr_zps 
    18861062 
    18871063   SUBROUTINE zgr_sco 
     
    19351111      REAL(wp) ::   zrfact 
    19361112      ! 
    1937       REAL(wp), POINTER, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
    1938       REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
     1113      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
     1114      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
    19391115      !! 
    19401116      NAMELIST/namzgr_sco/ln_s_sh94, ln_s_sf12, ln_sigcrit, rn_sbot_min, rn_sbot_max, rn_hc, rn_rmax,rn_theta, & 
     
    19421118     !!---------------------------------------------------------------------- 
    19431119      ! 
    1944    !!   IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
    1945       ! 
    1946       CALL wrk_alloc( jpi,jpj,   zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
     1120      ALLOCATE( zenv(jpi,jpj), ztmp(jpi,jpj), zmsk(jpi,jpj), zri(jpi,jpj), zrj(jpi,jpj), zhbat(jpi,jpj) , ztmpi1(jpi,jpj), ztmpi2(jpi,jpj), ztmpj1(jpi,jpj), ztmpj2(jpi,jpj) ) 
    19471121      ! 
    19481122      REWIND( numnam_ref )              ! Namelist namzgr_sco in reference namelist : Sigma-stretching parameters 
     
    20241198 
    20251199      ! apply lateral boundary condition   CAUTION: keep the value when the lbc field is zero 
    2026       CALL lbc_lnk( 'toto',zenv, 'T', 1._wp, 'no0' ) 
     1200      CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 
    20271201      !  
    20281202      ! smooth the bathymetry (if required) 
     
    20881262         END DO 
    20891263         ! apply lateral boundary condition   CAUTION: keep the value when the lbc field is zero 
    2090          CALL lbc_lnk( 'toto',zenv, 'T', 1._wp, 'no0' ) 
     1264         CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 
    20911265         !                                                  ! ================ ! 
    20921266      END DO                                                !     End loop     ! 
     
    21321306      ! Apply lateral boundary condition 
    21331307!!gm  ! CAUTION: retain non zero value in the initial file this should be OK for orca cfg, not for EEL 
    2134       zhbat(:,:) = hbatu(:,:)   ;   CALL lbc_lnk('toto', hbatu, 'U', 1._wp ) 
     1308      zhbat(:,:) = hbatu(:,:)   ;   CALL lbc_lnk('domzgr', hbatu, 'U', 1._wp ) 
    21351309      DO jj = 1, jpj 
    21361310         DO ji = 1, jpi 
     
    21421316         END DO 
    21431317      END DO 
    2144       zhbat(:,:) = hbatv(:,:)   ;   CALL lbc_lnk('toto', hbatv, 'V', 1._wp ) 
     1318      zhbat(:,:) = hbatv(:,:)   ;   CALL lbc_lnk('domzgr', hbatv, 'V', 1._wp ) 
    21451319      DO jj = 1, jpj 
    21461320         DO ji = 1, jpi 
     
    21511325         END DO 
    21521326      END DO 
    2153       zhbat(:,:) = hbatf(:,:)   ;   CALL lbc_lnk('toto', hbatf, 'F', 1._wp ) 
     1327      zhbat(:,:) = hbatf(:,:)   ;   CALL lbc_lnk('domzgr', hbatf, 'F', 1._wp ) 
    21541328      DO jj = 1, jpj 
    21551329         DO ji = 1, jpi 
     
    21991373      ENDIF  
    22001374 
    2201       CALL lbc_lnk( 'toto',e3t_0 , 'T', 1._wp ) 
    2202       CALL lbc_lnk( 'toto',e3u_0 , 'U', 1._wp ) 
    2203       CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp ) 
    2204       CALL lbc_lnk( 'toto',e3f_0 , 'F', 1._wp ) 
    2205       CALL lbc_lnk( 'toto',e3w_0 , 'W', 1._wp ) 
    2206       CALL lbc_lnk( 'toto',e3uw_0, 'U', 1._wp ) 
    2207       CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp ) 
     1375      CALL lbc_lnk( 'domzgr',e3t_0 , 'T', 1._wp ) 
     1376      CALL lbc_lnk( 'domzgr',e3u_0 , 'U', 1._wp ) 
     1377      CALL lbc_lnk( 'domzgr',e3v_0 , 'V', 1._wp ) 
     1378      CALL lbc_lnk( 'domzgr',e3f_0 , 'F', 1._wp ) 
     1379      CALL lbc_lnk( 'domzgr',e3w_0 , 'W', 1._wp ) 
     1380      CALL lbc_lnk( 'domzgr',e3uw_0, 'U', 1._wp ) 
     1381      CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 
    22081382      ! 
    22091383        WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
     
    22141388        WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
    22151389        WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    2216  
    2217  
    2218 !!gm   I don't like that HERE we are supposed to set the reference coordinate (i.e. _0 arrays) 
    2219 !!gm   and only that !!!!! 
    2220 !!gm   THIS should be removed from here ! 
    2221       gdept_n(:,:,:) = gdept_0(:,:,:) 
    2222       gdepw_n(:,:,:) = gdepw_0(:,:,:) 
    2223       gde3w_n(:,:,:) = gde3w_0(:,:,:) 
    2224       e3t_n  (:,:,:) = e3t_0  (:,:,:) 
    2225       e3u_n  (:,:,:) = e3u_0  (:,:,:) 
    2226       e3v_n  (:,:,:) = e3v_0  (:,:,:) 
    2227       e3f_n  (:,:,:) = e3f_0  (:,:,:) 
    2228       e3w_n  (:,:,:) = e3w_0  (:,:,:) 
    2229       e3uw_n (:,:,:) = e3uw_0 (:,:,:) 
    2230       e3vw_n (:,:,:) = e3vw_0 (:,:,:) 
    2231 !!gm and obviously in the following, use the _0 arrays until the end of this subroutine 
    2232 !! gm end 
    22331390!! 
    22341391      ! HYBRID :  
     
    22361393         DO ji = 1, jpi 
    22371394            DO jk = 1, jpkm1 
    2238                IF( scobot(ji,jj) >= gdept_n(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
     1395               IF( scobot(ji,jj) >= gdept_0(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
    22391396            END DO 
    22401397         END DO 
     
    22461403         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:)    ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    22471404         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    2248             &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gde3w_0(:,:,:) ) 
     1405            &                          ' w ', MINVAL( gdepw_0(:,:,:) ) 
    22491406         WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0  (:,:,:) ),   & 
    22501407            &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0  (:,:,:) ),   & 
     
    22531410 
    22541411         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    2255             &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gde3w_0(:,:,:) ) 
     1412            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ) 
    22561413         WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0  (:,:,:) ),   & 
    22571414            &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0  (:,:,:) ),   & 
     
    22981455               DO jk = 1, mbathy(ji,jj) 
    22991456                 ! check coordinate is monotonically increasing 
    2300                  IF (e3w_n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN 
     1457                 IF (e3w_0(ji,jj,jk) <= 0._wp .OR. e3t_0(ji,jj,jk) <= 0._wp ) THEN 
    23011458                    WRITE(ctmp1,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    23021459                    WRITE(numout,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2303                     WRITE(numout,*) 'e3w',e3w_n(ji,jj,:) 
    2304                     WRITE(numout,*) 'e3t',e3t_n(ji,jj,:) 
     1460                    WRITE(numout,*) 'e3w',e3w_0(ji,jj,:) 
     1461                    WRITE(numout,*) 'e3t',e3t_0(ji,jj,:) 
    23051462                    CALL ctl_stop( ctmp1 ) 
    23061463                 ENDIF 
    23071464                 ! and check it has never gone negative 
    2308                  IF( gdepw_n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN 
     1465                 IF( gdepw_0(ji,jj,jk) < 0._wp .OR. gdept_0(ji,jj,jk) < 0._wp ) THEN 
    23091466                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw or gdept =< 0  at point (i,j,k)= ', ji, jj, jk 
    23101467                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw   or gdept   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2311                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
    2312                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     1468                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
     1469                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23131470                    CALL ctl_stop( ctmp1 ) 
    23141471                 ENDIF 
    23151472                 ! and check it never exceeds the total depth 
    2316                  IF( gdepw_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     1473                 IF( gdepw_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23171474                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23181475                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2319                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
     1476                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
    23201477                    CALL ctl_stop( ctmp1 ) 
    23211478                 ENDIF 
     
    23241481               DO jk = 1, mbathy(ji,jj)-1 
    23251482                 ! and check it never exceeds the total depth 
    2326                 IF( gdept_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     1483                IF( gdept_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23271484                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23281485                    WRITE(numout,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2329                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     1486                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23301487                    CALL ctl_stop( ctmp1 ) 
    23311488                 ENDIF 
     
    23351492      END DO 
    23361493      ! 
    2337       CALL wrk_dealloc( jpi, jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    2338       ! 
    2339    !!!   IF( nn_timing == 1 )  CALL timing_stop('zgr_sco') 
     1494      DEALLOCATE( zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    23401495      ! 
    23411496   END SUBROUTINE zgr_sco 
     
    23581513      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    23591514      ! 
    2360       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    2361       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2362       !!---------------------------------------------------------------------- 
    2363  
    2364       CALL wrk_alloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2365       CALL wrk_alloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2366  
    2367       z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     1515      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3 
     1516      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
     1517      !!---------------------------------------------------------------------- 
     1518 
     1519      ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk) ) 
     1520      ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk) ) 
     1521      ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 
     1522 
     1523      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp 
    23681524      z_esigt3  = 0._wp   ;   z_esigw3  = 0._wp  
    23691525      z_esigtu3 = 0._wp   ;   z_esigtv3 = 0._wp   ;   z_esigtf3 = 0._wp 
     
    23921548            z_esigt3(ji,jj,jpk) = 2._wp * ( z_gsigt3(ji,jj,jpk) - z_gsigw3(ji,jj,jpk) ) 
    23931549            ! 
    2394             ! Coefficients for vertical depth as the sum of e3w scale factors 
    2395             z_gsi3w3(ji,jj,1) = 0.5_wp * z_esigw3(ji,jj,1) 
    2396             DO jk = 2, jpk 
    2397                z_gsi3w3(ji,jj,jk) = z_gsi3w3(ji,jj,jk-1) + z_esigw3(ji,jj,jk) 
    2398             END DO 
    2399             ! 
    24001550            DO jk = 1, jpk 
    24011551               zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
     
    24031553               gdept_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
    24041554               gdepw_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
    2405                gde3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
    24061555            END DO 
    24071556           ! 
     
    24481597      END DO 
    24491598      ! 
    2450       CALL wrk_dealloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2451       CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     1599      DEALLOCATE( z_gsigw3, z_gsigt3                                                        ) 
     1600      DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    24521601      ! 
    24531602   END SUBROUTINE s_sh94 
     
    24761625      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    24771626      ! 
    2478       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    2479       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2480       !!---------------------------------------------------------------------- 
    2481       ! 
    2482       CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2483       CALL wrk_alloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2484  
    2485       z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     1627      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3 
     1628      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
     1629      !!---------------------------------------------------------------------- 
     1630      ! 
     1631      ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk) ) 
     1632      ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk)) 
     1633      ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 
     1634 
     1635      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp 
    24861636      z_esigt3  = 0._wp   ;   z_esigw3  = 0._wp  
    24871637      z_esigtu3 = 0._wp   ;   z_esigtv3 = 0._wp   ;   z_esigtf3 = 0._wp 
     
    25351685          z_esigt3(ji,jj,jpk) = 2.0_wp * (z_gsigt3(ji,jj,jpk) - z_gsigw3(ji,jj,jpk)) 
    25361686 
    2537           ! Coefficients for vertical depth as the sum of e3w scale factors 
    2538           z_gsi3w3(ji,jj,1) = 0.5 * z_esigw3(ji,jj,1) 
    2539           DO jk = 2, jpk 
    2540              z_gsi3w3(ji,jj,jk) = z_gsi3w3(ji,jj,jk-1) + z_esigw3(ji,jj,jk) 
    2541           END DO 
    2542  
    25431687          DO jk = 1, jpk 
    25441688             gdept_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
    25451689             gdepw_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
    2546              gde3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
    25471690          END DO 
    25481691 
     
    26081751      ENDDO 
    26091752      ! 
    2610       CALL lbc_lnk('toto',e3t_0 ,'T',1.) ; CALL lbc_lnk('toto',e3u_0 ,'T',1.) 
    2611       CALL lbc_lnk('toto',e3v_0 ,'T',1.) ; CALL lbc_lnk('toto',e3f_0 ,'T',1.) 
    2612       CALL lbc_lnk('toto',e3w_0 ,'T',1.) 
    2613       CALL lbc_lnk('toto',e3uw_0,'T',1.) ; CALL lbc_lnk('toto',e3vw_0,'T',1.) 
    2614       ! 
    2615       CALL wrk_dealloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2616       CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     1753      CALL lbc_lnk('domzgr',e3t_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3u_0 ,'T',1.) 
     1754      CALL lbc_lnk('domzgr',e3v_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3f_0 ,'T',1.) 
     1755      CALL lbc_lnk('domzgr',e3w_0 ,'T',1.) 
     1756      CALL lbc_lnk('domzgr',e3uw_0,'T',1.) ; CALL lbc_lnk('domzgr',e3vw_0,'T',1.) 
     1757      ! 
     1758      DEALLOCATE( z_gsigw3, z_gsigt3                                                        ) 
     1759      DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    26171760      ! 
    26181761   END SUBROUTINE s_sf12 
     
    26311774      INTEGER  ::   ji, jj, jk       ! dummy loop argument 
    26321775      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
    2633       REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 
    2634       REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw 
    2635       !!---------------------------------------------------------------------- 
    2636  
    2637       CALL wrk_alloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
    2638       CALL wrk_alloc( jpk,   z_esigt, z_esigw ) 
    2639  
    2640       z_gsigw  = 0._wp   ;   z_gsigt  = 0._wp   ;   z_gsi3w  = 0._wp 
     1776      REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_gsigw, z_gsigt 
     1777      REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_esigt, z_esigw 
     1778      !!---------------------------------------------------------------------- 
     1779 
     1780      ALLOCATE( z_gsigw(jpk), z_gsigt(jpk) ) 
     1781      ALLOCATE( z_esigt(jpk), z_esigw(jpk) ) 
     1782 
     1783      z_gsigw  = 0._wp   ;   z_gsigt  = 0._wp 
    26411784      z_esigt  = 0._wp   ;   z_esigw  = 0._wp  
    26421785 
     
    26571800      z_esigt(jpk) = 2._wp * ( z_gsigt(jpk) - z_gsigw(jpk) ) 
    26581801      ! 
    2659       ! Coefficients for vertical depth as the sum of e3w scale factors 
    2660       z_gsi3w(1) = 0.5_wp * z_esigw(1) 
    2661       DO jk = 2, jpk 
    2662          z_gsi3w(jk) = z_gsi3w(jk-1) + z_esigw(jk) 
    2663       END DO 
    2664 !!gm: depuw, depvw can be suppressed (modif in ldfslp) and depw=dep3w can be set (save 3 3D arrays) 
    26651802      DO jk = 1, jpk 
    26661803         zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
     
    26681805         gdept_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
    26691806         gdepw_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
    2670          gde3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
    2671       END DO 
    2672 !!gm: e3uw, e3vw can be suppressed  (modif in dynzdf, dynzdf_iso, zdfbfr) (save 2 3D arrays) 
     1807      END DO 
     1808 
    26731809      DO jj = 1, jpj 
    26741810         DO ji = 1, jpi 
     
    26861822      END DO 
    26871823      ! 
    2688       CALL wrk_dealloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
    2689       CALL wrk_dealloc( jpk,   z_esigt, z_esigw          ) 
     1824      DEALLOCATE( z_gsigw, z_gsigt ) 
     1825      DEALLOCATE( z_esigt, z_esigw ) 
    26901826      ! 
    26911827   END SUBROUTINE s_tanh 
Note: See TracChangeset for help on using the changeset viewer.