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 4292 for branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2013-11-20T17:28:04+01:00 (10 years ago)
Author:
cetlod
Message:

dev_MERGE_2013 : 1st step of the merge, see ticket #1185

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r4245 r4292  
    8888      !!              vertical scale factors. 
    8989      !! 
    90       !! ** Method  : - reference 1D vertical coordinate (gdep._0, e3._0) 
     90      !! ** Method  : - reference 1D vertical coordinate (gdep._1d, e3._1d) 
    9191      !!              - read/set ocean depth and ocean levels (bathy, mbathy) 
    9292      !!              - vertical coordinate (gdep., e3.) depending on the  
     
    153153      IF( nprint == 1 .AND. lwp )   THEN 
    154154         WRITE(numout,*) ' MIN val mbathy ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    155          WRITE(numout,*) ' MIN val depth t ', MINVAL( fsdept(:,:,:) ),   & 
    156             &                   ' w ',   MINVAL( fsdepw(:,:,:) ), '3w ', MINVAL( fsde3w(:,:,:) ) 
    157          WRITE(numout,*) ' MIN val e3    t ', MINVAL( fse3t(:,:,:) ), ' f ', MINVAL( fse3f(:,:,:) ),  & 
    158             &                   ' u ',   MINVAL( fse3u(:,:,:) ), ' u ', MINVAL( fse3v(:,:,:) ),  & 
    159             &                   ' uw',   MINVAL( fse3uw(:,:,:)), ' vw', MINVAL( fse3vw(:,:,:)),   & 
    160             &                   ' w ',   MINVAL( fse3w(:,:,:) ) 
    161  
    162          WRITE(numout,*) ' MAX val depth t ', MAXVAL( fsdept(:,:,:) ),   & 
    163             &                   ' w ',   MAXVAL( fsdepw(:,:,:) ), '3w ', MAXVAL( fsde3w(:,:,:) ) 
    164          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( fse3t(:,:,:) ), ' f ', MAXVAL( fse3f(:,:,:) ),  & 
    165             &                   ' u ',   MAXVAL( fse3u(:,:,:) ), ' u ', MAXVAL( fse3v(:,:,:) ),  & 
    166             &                   ' uw',   MAXVAL( fse3uw(:,:,:)), ' vw', MAXVAL( fse3vw(:,:,:)),   & 
    167             &                   ' w ',   MAXVAL( fse3w(:,:,:) ) 
     155         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
     156            &                   ' w ',   MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gdep3w_0(:,:,:) ) 
     157         WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0(:,:,:) ), ' f ', MINVAL( e3f_0(:,:,:) ),  & 
     158            &                   ' u ',   MINVAL( e3u_0(:,:,:) ), ' u ', MINVAL( e3v_0(:,:,:) ),  & 
     159            &                   ' uw',   MINVAL( e3uw_0(:,:,:)), ' vw', MINVAL( e3vw_0(:,:,:)),   & 
     160            &                   ' w ',   MINVAL( e3w_0(:,:,:) ) 
     161 
     162         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
     163            &                   ' w ',   MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gdep3w_0(:,:,:) ) 
     164         WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0(:,:,:) ), ' f ', MAXVAL( e3f_0(:,:,:) ),  & 
     165            &                   ' u ',   MAXVAL( e3u_0(:,:,:) ), ' u ', MAXVAL( e3v_0(:,:,:) ),  & 
     166            &                   ' uw',   MAXVAL( e3uw_0(:,:,:)), ' vw', MAXVAL( e3vw_0(:,:,:)),   & 
     167            &                   ' w ',   MAXVAL( e3w_0(:,:,:) ) 
    168168      ENDIF 
    169169      ! 
     
    176176      !!---------------------------------------------------------------------- 
    177177      !!                   ***  ROUTINE zgr_z  *** 
    178       !!                     
     178      !!                    
    179179      !! ** Purpose :   set the depth of model levels and the resulting  
    180180      !!      vertical scale factors. 
     
    184184      !!      function the derivative of which gives the scale factors. 
    185185      !!        both depth and scale factors only depend on k (1d arrays). 
    186       !!              w-level: gdepw_0  = fsdep(k) 
    187       !!                       e3w_0(k) = dk(fsdep)(k)     = fse3(k) 
    188       !!              t-level: gdept_0  = fsdep(k+0.5) 
    189       !!                       e3t_0(k) = dk(fsdep)(k+0.5) = fse3(k+0.5) 
    190       !! 
    191       !! ** Action  : - gdept_0, gdepw_0 : depth of T- and W-point (m) 
    192       !!              - e3t_0  , e3w_0   : scale factors at T- and W-levels (m) 
     186      !!              w-level: gdepw_1d  = gdep(k) 
     187      !!                       e3w_1d(k) = dk(gdep)(k)     = e3(k) 
     188      !!              t-level: gdept_1d  = gdep(k+0.5) 
     189      !!                       e3t_1d(k) = dk(gdep)(k+0.5) = e3(k+0.5) 
     190      !! 
     191      !! ** Action  : - gdept_1d, gdepw_1d : depth of T- and W-point (m) 
     192      !!              - e3t_1d  , e3w_1d   : scale factors at T- and W-levels (m) 
    193193      !! 
    194194      !! Reference : Marti, Madec & Delecluse, 1992, JGR, 97, No8, 12,763-12,766. 
     
    262262            zw = FLOAT( jk ) 
    263263            zt = FLOAT( jk ) + 0.5_wp 
    264             gdepw_0(jk) = ( zw - 1 ) * za1 
    265             gdept_0(jk) = ( zt - 1 ) * za1 
    266             e3w_0  (jk) =  za1 
    267             e3t_0  (jk) =  za1 
     264            gdepw_1d(jk) = ( zw - 1 ) * za1 
     265            gdept_1d(jk) = ( zt - 1 ) * za1 
     266            e3w_1d  (jk) =  za1 
     267            e3t_1d  (jk) =  za1 
    268268         END DO 
    269269      ELSE                                ! Madec & Imbard 1996 function 
     
    272272               zw = REAL( jk , wp ) 
    273273               zt = REAL( jk , wp ) + 0.5_wp 
    274                gdepw_0(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
    275                gdept_0(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
    276                e3w_0  (jk) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
    277                e3t_0  (jk) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     274               gdepw_1d(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     275               gdept_1d(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     276               e3w_1d  (jk) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     277               e3t_1d  (jk) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
    278278            END DO 
    279279         ELSE 
     
    282282               zt = FLOAT( jk ) + 0.5_wp 
    283283               ! Double tanh function 
    284                gdepw_0(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
    285                   &                            + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
    286                gdept_0(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
    287                   &                            + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
    288                e3w_0  (jk) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )    & 
    289                   &                            + za2        * TANH(       (zw-zkth2) / zacr2 ) 
    290                e3t_0  (jk) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
    291                   &                            + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     284               gdepw_1d(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     285                  &                             + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     286               gdept_1d(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
     287                  &                             + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
     288               e3w_1d  (jk) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )      & 
     289                  &                             + za2        * TANH(       (zw-zkth2) / zacr2 ) 
     290               e3t_1d  (jk) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )      & 
     291                  &                             + za2        * TANH(       (zt-zkth2) / zacr2 ) 
    292292            END DO 
    293293         ENDIF 
    294          gdepw_0(1) = 0._wp                    ! force first w-level to be exactly at zero 
     294         gdepw_1d(1) = 0._wp                    ! force first w-level to be exactly at zero 
    295295      ENDIF 
    296296 
    297297!!gm BUG in s-coordinate this does not work! 
    298298      ! deepest/shallowest W level Above/Below ~10m 
    299       zrefdep = 10._wp - 0.1_wp * MINVAL( e3w_0 )                    ! ref. depth with tolerance (10% of minimum layer thickness) 
    300       nlb10 = MINLOC( gdepw_0, mask = gdepw_0 > zrefdep, dim = 1 )  ! shallowest W level Below ~10m 
     299      zrefdep = 10._wp - 0.1_wp * MINVAL( e3w_1d )                   ! ref. depth with tolerance (10% of minimum layer thickness) 
     300      nlb10 = MINLOC( gdepw_1d, mask = gdepw_1d > zrefdep, dim = 1 ) ! shallowest W level Below ~10m 
    301301      nla10 = nlb10 - 1                                              ! deepest    W level Above ~10m 
    302302!!gm end bug 
     
    305305         WRITE(numout,*) 
    306306         WRITE(numout,*) '              Reference z-coordinate depth and scale factors:' 
    307          WRITE(numout, "(9x,' level   gdept    gdepw     e3t      e3w  ')" ) 
    308          WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept_0(jk), gdepw_0(jk), e3t_0(jk), e3w_0(jk), jk = 1, jpk ) 
     307         WRITE(numout, "(9x,' level  gdept_1d  gdepw_1d  e3t_1d   e3w_1d  ')" ) 
     308         WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept_1d(jk), gdepw_1d(jk), e3t_1d(jk), e3w_1d(jk), jk = 1, jpk ) 
    309309      ENDIF 
    310310      DO jk = 1, jpk                      ! control positivity 
    311          IF( e3w_0  (jk) <= 0._wp .OR. e3t_0  (jk) <= 0._wp )   CALL ctl_stop( 'dom:zgr_z: e3w or e3t =< 0 '    ) 
    312          IF( gdepw_0(jk) <  0._wp .OR. gdept_0(jk) <  0._wp )   CALL ctl_stop( 'dom:zgr_z: gdepw or gdept < 0 ' ) 
     311         IF( e3w_1d  (jk) <= 0._wp .OR. e3t_1d  (jk) <= 0._wp )   CALL ctl_stop( 'dom:zgr_z: e3w_1d or e3t_1d =< 0 '    ) 
     312         IF( gdepw_1d(jk) <  0._wp .OR. gdept_1d(jk) <  0._wp )   CALL ctl_stop( 'dom:zgr_z: gdepw_1d or gdept_1d < 0 ' ) 
    313313      END DO 
    314314      ! 
     
    382382                  idta(:,:) = jpkm1 
    383383                  DO jk = 1, jpkm1 
    384                      WHERE( gdept_0(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_0(jk+1) )   idta(:,:) = jk 
     384                     WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
    385385                  END DO 
    386386               ENDIF 
     
    388388               IF(lwp) WRITE(numout,*) '         Depth = depthw(jpkm1)' 
    389389               idta(:,:) = jpkm1                            ! before last level 
    390                zdta(:,:) = gdepw_0(jpk)                     ! last w-point depth 
    391                h_oce     = gdepw_0(jpk) 
     390               zdta(:,:) = gdepw_1d(jpk)                     ! last w-point depth 
     391               h_oce     = gdepw_1d(jpk) 
    392392            ENDIF 
    393393         ELSE                                         ! bump centered in the basin 
     
    398398            r_bump  = 50000._wp                            ! bump radius (meters)        
    399399            h_bump  =  2700._wp                            ! bump height (meters) 
    400             h_oce   = gdepw_0(jpk)                         ! background ocean depth (meters) 
     400            h_oce   = gdepw_1d(jpk)                        ! background ocean depth (meters) 
    401401            IF(lwp) WRITE(numout,*) '            bump characteristics: ' 
    402402            IF(lwp) WRITE(numout,*) '               bump center (i,j)   = ', ii_bump, ii_bump 
     
    418418               idta(:,:) = jpkm1 
    419419               DO jk = 1, jpkm1 
    420                   WHERE( gdept_0(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_0(jk+1) )   idta(:,:) = jk 
     420                  WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
    421421               END DO 
    422422            ENDIF 
     
    460460            CALL iom_close( inum ) 
    461461            mbathy(:,:) = INT( bathy(:,:) ) 
    462             ! 
     462            !                                                ! ===================== 
    463463            IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
    464                ! 
     464               !                                             ! ===================== 
    465465               IF( nn_cla == 0 ) THEN 
    466466                  ii0 = 140   ;   ii1 = 140                  ! Gibraltar Strait open  
     
    531531      IF ( .not. ln_sco ) THEN                                !==  set a minimum depth  ==! 
    532532         IF( rn_hmin < 0._wp ) THEN    ;   ik = - INT( rn_hmin )                                      ! from a nb of level 
    533          ELSE                          ;   ik = MINLOC( gdepw_0, mask = gdepw_0 > rn_hmin, dim = 1 )  ! from a depth 
     533         ELSE                          ;   ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 )  ! from a depth 
    534534         ENDIF 
    535          zhmin = gdepw_0(ik+1)                                                         ! minimum depth = ik+1 w-levels  
     535         zhmin = gdepw_1d(ik+1)                                                         ! minimum depth = ik+1 w-levels  
    536536         WHERE( bathy(:,:) <= 0._wp )   ;   bathy(:,:) = 0._wp                         ! min=0     over the lands 
    537537         ELSE WHERE                     ;   bathy(:,:) = MAX(  zhmin , bathy(:,:)  )   ! min=zhmin over the oceans 
     
    798798      ! 
    799799      DO jk = 1, jpk 
    800             gdept(:,:,jk) = gdept_0(jk) 
    801             gdepw(:,:,jk) = gdepw_0(jk) 
    802             gdep3w(:,:,jk) = gdepw_0(jk) 
    803             e3t (:,:,jk) = e3t_0(jk) 
    804             e3u (:,:,jk) = e3t_0(jk) 
    805             e3v (:,:,jk) = e3t_0(jk) 
    806             e3f (:,:,jk) = e3t_0(jk) 
    807             e3w (:,:,jk) = e3w_0(jk) 
    808             e3uw(:,:,jk) = e3w_0(jk) 
    809             e3vw(:,:,jk) = e3w_0(jk) 
     800         gdept_0 (:,:,jk) = gdept_1d(jk) 
     801         gdepw_0 (:,:,jk) = gdepw_1d(jk) 
     802         gdep3w_0(:,:,jk) = gdepw_1d(jk) 
     803         e3t_0   (:,:,jk) = e3t_1d  (jk) 
     804         e3u_0   (:,:,jk) = e3t_1d  (jk) 
     805         e3v_0   (:,:,jk) = e3t_1d  (jk) 
     806         e3f_0   (:,:,jk) = e3t_1d  (jk) 
     807         e3w_0   (:,:,jk) = e3w_1d  (jk) 
     808         e3uw_0  (:,:,jk) = e3w_1d  (jk) 
     809         e3vw_0  (:,:,jk) = e3w_1d  (jk) 
    810810      END DO 
    811811      ! 
     
    832832      !!      with partial steps  on 3d arrays ( i, j, k ). 
    833833      !! 
    834       !!              w-level: gdepw(i,j,k)  = fsdep(k) 
    835       !!                       e3w(i,j,k) = dk(fsdep)(k)     = fse3(i,j,k) 
    836       !!              t-level: gdept(i,j,k)  = fsdep(k+0.5) 
    837       !!                       e3t(i,j,k) = dk(fsdep)(k+0.5) = fse3(i,j,k+0.5) 
     834      !!              w-level: gdepw_0(i,j,k)  = gdep(k) 
     835      !!                       e3w_0(i,j,k) = dk(gdep)(k)     = e3(i,j,k) 
     836      !!              t-level: gdept_0(i,j,k)  = gdep(k+0.5) 
     837      !!                       e3t_0(i,j,k) = dk(gdep)(k+0.5) = e3(i,j,k+0.5) 
    838838      !! 
    839839      !!        With the help of the bathymetric file ( bathymetry_depth_ORCA_R2.nc), 
     
    843843      !!              - bathy = 0 => mbathy = 0 
    844844      !!              - 1 < mbathy < jpkm1     
    845       !!              - bathy > gdepw(jpk) => mbathy = jpkm1   
     845      !!              - bathy > gdepw_0(jpk) => mbathy = jpkm1   
    846846      !! 
    847847      !!        Then, for each case, we find the new depth at t- and w- levels 
     
    855855      !!      schemes. 
    856856      !! 
    857       !!         c a u t i o n : gdept_0, gdepw_0 and e3._0 are positives 
    858       !!         - - - - - - -   gdept, gdepw and e3. are positives 
     857      !!         c a u t i o n : gdept_1d, gdepw_1d and e3._1d are positives 
     858      !!         - - - - - - -   gdept_0, gdepw_0 and e3. are positives 
    859859      !!       
    860860      !!  Reference :   Pacanowsky & Gnanadesikan 1997, Mon. Wea. Rev., 126, 3248-3270. 
     
    892892      ! bathymetry in level (from bathy_meter) 
    893893      ! =================== 
    894       zmax = gdepw_0(jpk) + e3t_0(jpk)          ! maximum depth (i.e. the last ocean level thickness <= 2*e3t_0(jpkm1) ) 
     894      zmax = gdepw_1d(jpk) + e3t_1d(jpk)        ! maximum depth (i.e. the last ocean level thickness <= 2*e3t_1d(jpkm1) ) 
    895895      bathy(:,:) = MIN( zmax ,  bathy(:,:) )    ! bounded value of bathy (min already set at the end of zgr_bat) 
    896896      WHERE( bathy(:,:) == 0._wp )   ;   mbathy(:,:) = 0       ! land  : set mbathy to 0 
     
    900900      ! Compute mbathy for ocean points (i.e. the number of ocean levels) 
    901901      ! find the number of ocean levels such that the last level thickness 
    902       ! is larger than the minimum of e3zps_min and e3zps_rat * e3t_0 (where 
    903       ! e3t_0 is the reference level thickness 
     902      ! is larger than the minimum of e3zps_min and e3zps_rat * e3t_1d (where 
     903      ! e3t_1d is the reference level thickness 
    904904      DO jk = jpkm1, 1, -1 
    905          zdepth = gdepw_0(jk) + MIN( e3zps_min, e3t_0(jk)*e3zps_rat ) 
     905         zdepth = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    906906         WHERE( 0._wp < bathy(:,:) .AND. bathy(:,:) <= zdepth )   mbathy(:,:) = jk-1 
    907907      END DO 
     
    909909      ! Scale factors and depth at T- and W-points 
    910910      DO jk = 1, jpk                        ! intitialization to the reference z-coordinate 
    911          gdept(:,:,jk) = gdept_0(jk) 
    912          gdepw(:,:,jk) = gdepw_0(jk) 
    913          e3t  (:,:,jk) = e3t_0  (jk) 
    914          e3w  (:,:,jk) = e3w_0  (jk) 
     911         gdept_0(:,:,jk) = gdept_1d(jk) 
     912         gdepw_0(:,:,jk) = gdepw_1d(jk) 
     913         e3t_0  (:,:,jk) = e3t_1d  (jk) 
     914         e3w_0  (:,:,jk) = e3w_1d  (jk) 
    915915      END DO 
    916916      !  
     
    922922               IF( ik == jpkm1 ) THEN 
    923923                  zdepwp = bathy(ji,jj) 
    924                   ze3tp  = bathy(ji,jj) - gdepw_0(ik) 
    925                   ze3wp = 0.5_wp * e3w_0(ik) * ( 1._wp + ( ze3tp/e3t_0(ik) ) ) 
    926                   e3t(ji,jj,ik  ) = ze3tp 
    927                   e3t(ji,jj,ik+1) = ze3tp 
    928                   e3w(ji,jj,ik  ) = ze3wp 
    929                   e3w(ji,jj,ik+1) = ze3tp 
    930                   gdepw(ji,jj,ik+1) = zdepwp 
    931                   gdept(ji,jj,ik  ) = gdept_0(ik-1) + ze3wp 
    932                   gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + ze3tp 
     924                  ze3tp  = bathy(ji,jj) - gdepw_1d(ik) 
     925                  ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) ) 
     926                  e3t_0(ji,jj,ik  ) = ze3tp 
     927                  e3t_0(ji,jj,ik+1) = ze3tp 
     928                  e3w_0(ji,jj,ik  ) = ze3wp 
     929                  e3w_0(ji,jj,ik+1) = ze3tp 
     930                  gdepw_0(ji,jj,ik+1) = zdepwp 
     931                  gdept_0(ji,jj,ik  ) = gdept_1d(ik-1) + ze3wp 
     932                  gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp 
    933933                  ! 
    934934               ELSE                         ! standard case 
    935                   IF( bathy(ji,jj) <= gdepw_0(ik+1) ) THEN   ;   gdepw(ji,jj,ik+1) = bathy(ji,jj) 
    936                   ELSE                                       ;   gdepw(ji,jj,ik+1) = gdepw_0(ik+1) 
     935                  IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN  ;   gdepw_0(ji,jj,ik+1) = bathy(ji,jj) 
     936                  ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    937937                  ENDIF 
    938 !gm Bug?  check the gdepw_0 
     938!gm Bug?  check the gdepw_1d 
    939939                  !       ... on ik 
    940                   gdept(ji,jj,ik) = gdepw_0(ik) + ( gdepw  (ji,jj,ik+1) - gdepw_0(ik) )   & 
    941                      &                          * ((gdept_0(      ik  ) - gdepw_0(ik) )   & 
    942                      &                          / ( gdepw_0(      ik+1) - gdepw_0(ik) )) 
    943                   e3t  (ji,jj,ik) = e3t_0  (ik) * ( gdepw  (ji,jj,ik+1) - gdepw_0(ik) )   &  
    944                      &                          / ( gdepw_0(      ik+1) - gdepw_0(ik) )  
    945                   e3w  (ji,jj,ik) = 0.5_wp * ( gdepw(ji,jj,ik+1) + gdepw_0(ik+1) - 2._wp * gdepw_0(ik) )   & 
    946                      &                     * ( e3w_0(ik) / ( gdepw_0(ik+1) - gdepw_0(ik) ) ) 
     940                  gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0   (ji,jj,ik+1) - gdepw_1d(ik) )   & 
     941                     &                           * ((gdept_1d(      ik  ) - gdepw_1d(ik) )   & 
     942                     &                           / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )) 
     943                  e3t_0(ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
     944                     &                          / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
     945                  e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
     946                     &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
    947947                  !       ... on ik+1 
    948                   e3w  (ji,jj,ik+1) = e3t  (ji,jj,ik) 
    949                   e3t  (ji,jj,ik+1) = e3t  (ji,jj,ik) 
    950                   gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik) 
     948                  e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     949                  e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     950                  gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    951951               ENDIF 
    952952            ENDIF 
     
    959959            ik = mbathy(ji,jj) 
    960960            IF( ik > 0 ) THEN               ! ocean point only 
    961                e3tp (ji,jj) = e3t(ji,jj,ik  ) 
    962                e3wp (ji,jj) = e3w(ji,jj,ik  ) 
     961               e3tp (ji,jj) = e3t_0(ji,jj,ik) 
     962               e3wp (ji,jj) = e3w_0(ji,jj,ik) 
    963963               ! test 
    964                zdiff= gdepw(ji,jj,ik+1) - gdept(ji,jj,ik  ) 
     964               zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik  ) 
    965965               IF( zdiff <= 0._wp .AND. lwp ) THEN  
    966966                  it = it + 1 
    967967                  WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj 
    968968                  WRITE(numout,*) ' bathy = ', bathy(ji,jj) 
    969                   WRITE(numout,*) ' gdept = ', gdept(ji,jj,ik), ' gdepw = ', gdepw(ji,jj,ik+1), ' zdiff = ', zdiff 
    970                   WRITE(numout,*) ' e3tp  = ', e3t  (ji,jj,ik), ' e3wp  = ', e3w  (ji,jj,ik  ) 
     969                  WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 
     970                  WRITE(numout,*) ' e3tp    = ', e3t_0  (ji,jj,ik), ' e3wp    = ', e3w_0  (ji,jj,ik  ) 
    971971               ENDIF 
    972972            ENDIF 
     
    976976      ! Scale factors and depth at U-, V-, UW and VW-points 
    977977      DO jk = 1, jpk                        ! initialisation to z-scale factors 
    978          e3u (:,:,jk) = e3t_0(jk) 
    979          e3v (:,:,jk) = e3t_0(jk) 
    980          e3uw(:,:,jk) = e3w_0(jk) 
    981          e3vw(:,:,jk) = e3w_0(jk) 
     978         e3u_0 (:,:,jk) = e3t_1d(jk) 
     979         e3v_0 (:,:,jk) = e3t_1d(jk) 
     980         e3uw_0(:,:,jk) = e3w_1d(jk) 
     981         e3vw_0(:,:,jk) = e3w_1d(jk) 
    982982      END DO 
    983983      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
    984984         DO jj = 1, jpjm1 
    985985            DO ji = 1, fs_jpim1   ! vector opt. 
    986                e3u (ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji+1,jj,jk) ) 
    987                e3v (ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji,jj+1,jk) ) 
    988                e3uw(ji,jj,jk) = MIN( e3w(ji,jj,jk), e3w(ji+1,jj,jk) ) 
    989                e3vw(ji,jj,jk) = MIN( e3w(ji,jj,jk), e3w(ji,jj+1,jk) ) 
    990             END DO 
    991          END DO 
    992       END DO 
    993       CALL lbc_lnk( e3u , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw, 'U', 1._wp )   ! lateral boundary conditions 
    994       CALL lbc_lnk( e3v , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw, 'V', 1._wp ) 
     986               e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
     987               e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
     988               e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
     989               e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
     990            END DO 
     991         END DO 
     992      END DO 
     993      CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     994      CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    995995      ! 
    996996      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    997          WHERE( e3u (:,:,jk) == 0._wp )   e3u (:,:,jk) = e3t_0(jk) 
    998          WHERE( e3v (:,:,jk) == 0._wp )   e3v (:,:,jk) = e3t_0(jk) 
    999          WHERE( e3uw(:,:,jk) == 0._wp )   e3uw(:,:,jk) = e3w_0(jk) 
    1000          WHERE( e3vw(:,:,jk) == 0._wp )   e3vw(:,:,jk) = e3w_0(jk) 
     997         WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
     998         WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
     999         WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
     1000         WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
    10011001      END DO 
    10021002       
    10031003      ! Scale factor at F-point 
    10041004      DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1005          e3f(:,:,jk) = e3t_0(jk) 
     1005         e3f_0(:,:,jk) = e3t_1d(jk) 
    10061006      END DO 
    10071007      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
    10081008         DO jj = 1, jpjm1 
    10091009            DO ji = 1, fs_jpim1   ! vector opt. 
    1010                e3f(ji,jj,jk) = MIN( e3v(ji,jj,jk), e3v(ji+1,jj,jk) ) 
    1011             END DO 
    1012          END DO 
    1013       END DO 
    1014       CALL lbc_lnk( e3f, 'F', 1._wp )       ! Lateral boundary conditions 
     1010               e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
     1011            END DO 
     1012         END DO 
     1013      END DO 
     1014      CALL lbc_lnk( e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
    10151015      ! 
    10161016      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1017          WHERE( e3f(:,:,jk) == 0._wp )   e3f(:,:,jk) = e3t_0(jk) 
     1017         WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
    10181018      END DO 
    10191019!!gm  bug ? :  must be a do loop with mj0,mj1 
    10201020      !  
    1021       e3t(:,mj0(1),:) = e3t(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
    1022       e3w(:,mj0(1),:) = e3w(:,mj0(2),:)  
    1023       e3u(:,mj0(1),:) = e3u(:,mj0(2),:)  
    1024       e3v(:,mj0(1),:) = e3v(:,mj0(2),:)  
    1025       e3f(:,mj0(1),:) = e3f(:,mj0(2),:)  
     1021      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
     1022      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
     1023      e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
     1024      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
     1025      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
    10261026 
    10271027      ! Control of the sign 
    1028       IF( MINVAL( e3t  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t  <= 0' ) 
    1029       IF( MINVAL( e3w  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w  <= 0' ) 
    1030       IF( MINVAL( gdept(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw <  0' ) 
    1031       IF( MINVAL( gdepw(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw <  0' ) 
     1028      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
     1029      IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
     1030      IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
     1031      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
    10321032      
    1033       ! Compute gdep3w (vertical sum of e3w) 
    1034       gdep3w(:,:,1) = 0.5_wp * e3w(:,:,1) 
     1033      ! Compute gdep3w_0 (vertical sum of e3w) 
     1034      gdep3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    10351035      DO jk = 2, jpk 
    1036          gdep3w(:,:,jk) = gdep3w(:,:,jk-1) + e3w(:,:,jk)  
     1036         gdep3w_0(:,:,jk) = gdep3w_0(:,:,jk-1) + e3w_0(:,:,jk)  
    10371037      END DO 
    10381038         
     
    10431043            DO ji = 1, jpi 
    10441044               ik = MAX( mbathy(ji,jj), 1 ) 
    1045                zprt(ji,jj,1) = e3t   (ji,jj,ik) 
    1046                zprt(ji,jj,2) = e3w   (ji,jj,ik) 
    1047                zprt(ji,jj,3) = e3u   (ji,jj,ik) 
    1048                zprt(ji,jj,4) = e3v   (ji,jj,ik) 
    1049                zprt(ji,jj,5) = e3f   (ji,jj,ik) 
    1050                zprt(ji,jj,6) = gdep3w(ji,jj,ik) 
     1045               zprt(ji,jj,1) = e3t_0   (ji,jj,ik) 
     1046               zprt(ji,jj,2) = e3w_0   (ji,jj,ik) 
     1047               zprt(ji,jj,3) = e3u_0   (ji,jj,ik) 
     1048               zprt(ji,jj,4) = e3v_0   (ji,jj,ik) 
     1049               zprt(ji,jj,5) = e3f_0   (ji,jj,ik) 
     1050               zprt(ji,jj,6) = gdep3w_0(ji,jj,ik) 
    10511051            END DO 
    10521052         END DO 
     
    13871387      ENDIF  
    13881388 
    1389       CALL lbc_lnk( e3t , 'T', 1._wp ) 
    1390       CALL lbc_lnk( e3u , 'U', 1._wp ) 
    1391       CALL lbc_lnk( e3v , 'V', 1._wp ) 
    1392       CALL lbc_lnk( e3f , 'F', 1._wp ) 
    1393       CALL lbc_lnk( e3w , 'W', 1._wp ) 
    1394       CALL lbc_lnk( e3uw, 'U', 1._wp ) 
    1395       CALL lbc_lnk( e3vw, 'V', 1._wp ) 
    1396  
    1397       fsdepw(:,:,:) = gdepw (:,:,:) 
    1398       fsde3w(:,:,:) = gdep3w(:,:,:) 
    1399       ! 
    1400       where (e3t   (:,:,:).eq.0.0)  e3t(:,:,:) = 1._wp 
    1401       where (e3u   (:,:,:).eq.0.0)  e3u(:,:,:) = 1._wp 
    1402       where (e3v   (:,:,:).eq.0.0)  e3v(:,:,:) = 1._wp 
    1403       where (e3f   (:,:,:).eq.0.0)  e3f(:,:,:) = 1._wp 
    1404       where (e3w   (:,:,:).eq.0.0)  e3w(:,:,:) = 1._wp 
    1405       where (e3uw  (:,:,:).eq.0.0)  e3uw(:,:,:) = 1._wp 
    1406       where (e3vw  (:,:,:).eq.0.0)  e3vw(:,:,:) = 1._wp 
     1389      CALL lbc_lnk( e3t_0 , 'T', 1._wp ) 
     1390      CALL lbc_lnk( e3u_0 , 'U', 1._wp ) 
     1391      CALL lbc_lnk( e3v_0 , 'V', 1._wp ) 
     1392      CALL lbc_lnk( e3f_0 , 'F', 1._wp ) 
     1393      CALL lbc_lnk( e3w_0 , 'W', 1._wp ) 
     1394      CALL lbc_lnk( e3uw_0, 'U', 1._wp ) 
     1395      CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
     1396 
     1397      fsdepw(:,:,:) = gdepw_0 (:,:,:) 
     1398      fsde3w(:,:,:) = gdep3w_0(:,:,:) 
     1399      ! 
     1400      where (e3t_0   (:,:,:).eq.0.0)  e3t_0(:,:,:) = 1.0 
     1401      where (e3u_0   (:,:,:).eq.0.0)  e3u_0(:,:,:) = 1.0 
     1402      where (e3v_0   (:,:,:).eq.0.0)  e3v_0(:,:,:) = 1.0 
     1403      where (e3f_0   (:,:,:).eq.0.0)  e3f_0(:,:,:) = 1.0 
     1404      where (e3w_0   (:,:,:).eq.0.0)  e3w_0(:,:,:) = 1.0 
     1405      where (e3uw_0  (:,:,:).eq.0.0)  e3uw_0(:,:,:) = 1.0 
     1406      where (e3vw_0  (:,:,:).eq.0.0)  e3vw_0(:,:,:) = 1.0 
    14071407 
    14081408#if defined key_agrif 
     
    14111411         !   
    14121412         IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    1413             e3u(1,:,:) = e3u(2,:,:) 
     1413            e3u_0(1,:,:) = e3u_0(2,:,:) 
    14141414         ENDIF 
    14151415         ! 
    14161416         IF((nbondi ==  1).OR.(nbondi == 2)) THEN 
    1417             e3u(nlci-1,:,:) = e3u(nlci-2,:,:) 
     1417            e3u_0(nlci-1,:,:) = e3u_0(nlci-2,:,:) 
    14181418         ENDIF 
    14191419         ! 
    14201420         IF((nbondj == -1).OR.(nbondj == 2)) THEN 
    1421             e3v(:,1,:) = e3v(:,2,:) 
     1421            e3v_0(:,1,:) = e3v_0(:,2,:) 
    14221422         ENDIF 
    14231423         ! 
    14241424         IF((nbondj ==  1).OR.(nbondj == 2)) THEN 
    1425             e3v(:,nlcj-1,:) = e3v(:,nlcj-2,:) 
     1425            e3v_0(:,nlcj-1,:) = e3v_0(:,nlcj-2,:) 
    14261426         ENDIF 
    14271427         ! 
     
    14291429#endif 
    14301430 
    1431       fsdept(:,:,:) = gdept (:,:,:) 
    1432       fsdepw(:,:,:) = gdepw (:,:,:) 
    1433       fsde3w(:,:,:) = gdep3w(:,:,:) 
    1434       fse3t (:,:,:) = e3t   (:,:,:) 
    1435       fse3u (:,:,:) = e3u   (:,:,:) 
    1436       fse3v (:,:,:) = e3v   (:,:,:) 
    1437       fse3f (:,:,:) = e3f   (:,:,:) 
    1438       fse3w (:,:,:) = e3w   (:,:,:) 
    1439       fse3uw(:,:,:) = e3uw  (:,:,:) 
    1440       fse3vw(:,:,:) = e3vw  (:,:,:) 
     1431      fsdept(:,:,:) = gdept_0 (:,:,:) 
     1432      fsdepw(:,:,:) = gdepw_0 (:,:,:) 
     1433      fsde3w(:,:,:) = gdep3w_0(:,:,:) 
     1434      fse3t (:,:,:) = e3t_0   (:,:,:) 
     1435      fse3u (:,:,:) = e3u_0   (:,:,:) 
     1436      fse3v (:,:,:) = e3v_0   (:,:,:) 
     1437      fse3f (:,:,:) = e3f_0   (:,:,:) 
     1438      fse3w (:,:,:) = e3w_0   (:,:,:) 
     1439      fse3uw(:,:,:) = e3uw_0  (:,:,:) 
     1440      fse3vw(:,:,:) = e3vw_0  (:,:,:) 
    14411441!! 
    14421442      ! HYBRID :  
     
    14531453 
    14541454      IF( nprint == 1  .AND. lwp )   THEN         ! min max values over the local domain 
    1455          WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:)   ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    1456          WRITE(numout,*) ' MIN val depth t ', MINVAL( fsdept(:,:,:) ),   & 
    1457             &                          ' w ', MINVAL( fsdepw(:,:,:) ), '3w '  , MINVAL( fsde3w(:,:,:) ) 
    1458          WRITE(numout,*) ' MIN val e3    t ', MINVAL( fse3t (:,:,:) ), ' f '  , MINVAL( fse3f (:,:,:) ),   & 
    1459             &                          ' u ', MINVAL( fse3u (:,:,:) ), ' u '  , MINVAL( fse3v (:,:,:) ),   & 
    1460             &                          ' uw', MINVAL( fse3uw(:,:,:) ), ' vw'  , MINVAL( fse3vw(:,:,:) ),   & 
    1461             &                          ' w ', MINVAL( fse3w (:,:,:) ) 
    1462  
    1463          WRITE(numout,*) ' MAX val depth t ', MAXVAL( fsdept(:,:,:) ),   & 
    1464             &                          ' w ', MAXVAL( fsdepw(:,:,:) ), '3w '  , MAXVAL( fsde3w(:,:,:) ) 
    1465          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( fse3t (:,:,:) ), ' f '  , MAXVAL( fse3f (:,:,:) ),   & 
    1466             &                          ' u ', MAXVAL( fse3u (:,:,:) ), ' u '  , MAXVAL( fse3v (:,:,:) ),   & 
    1467             &                          ' uw', MAXVAL( fse3uw(:,:,:) ), ' vw'  , MAXVAL( fse3vw(:,:,:) ),   & 
    1468             &                          ' w ', MAXVAL( fse3w (:,:,:) ) 
     1455         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:)    ), ' MAX ', MAXVAL( mbathy(:,:) ) 
     1456         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
     1457            &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gdep3w_0(:,:,:) ) 
     1458         WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0  (:,:,:) ),   & 
     1459            &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0  (:,:,:) ),   & 
     1460            &                          ' uw', MINVAL( e3uw_0 (:,:,:) ), ' vw'  , MINVAL( e3vw_0  (:,:,:) ),   & 
     1461            &                          ' w ', MINVAL( e3w_0 (:,:,:) ) 
     1462 
     1463         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
     1464            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gdep3w_0(:,:,:) ) 
     1465         WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0  (:,:,:) ),   & 
     1466            &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0  (:,:,:) ),   & 
     1467            &                          ' uw', MAXVAL( e3uw_0 (:,:,:) ), ' vw'  , MAXVAL( e3vw_0  (:,:,:) ),   & 
     1468            &                          ' w ', MAXVAL( e3w_0 (:,:,:) ) 
    14691469      ENDIF 
    14701470      !  END DO 
     
    14731473         WRITE(numout,*) ' domzgr: vertical coordinates : point (1,1,k) bathy = ', bathy(1,1), hbatt(1,1) 
    14741474         WRITE(numout,*) ' ~~~~~~  --------------------' 
    1475          WRITE(numout,"(9x,' level   gdept    gdepw    gde3w     e3t      e3w  ')") 
    1476          WRITE(numout,"(10x,i4,4f9.2)") ( jk, fsdept(1,1,jk), fsdepw(1,1,jk),     & 
    1477             &                                 fse3t (1,1,jk), fse3w (1,1,jk), jk=1,jpk ) 
    1478          iip1 = MIN(20, jpiglo-1)  ! for config with i smaller than 20 points 
    1479          ijp1 = MIN(20, jpjglo-1)  ! for config with j smaller than 20 points 
    1480          DO jj = mj0(ijp1), mj1(ijp1) 
    1481             DO ji = mi0(iip1), mi1(iip1) 
     1475         WRITE(numout,"(9x,' level  gdept_0   gdepw_0   e3t_0    e3w_0')") 
     1476         WRITE(numout,"(10x,i4,4f9.2)") ( jk, gdept_0(1,1,jk), gdepw_0(1,1,jk),     & 
     1477            &                                 e3t_0 (1,1,jk) , e3w_0 (1,1,jk) , jk=1,jpk ) 
     1478         DO jj = mj0(20), mj1(20) 
     1479            DO ji = mi0(20), mi1(20) 
    14821480               WRITE(numout,*) 
    1483                WRITE(numout,*) ' domzgr: vertical coordinates : point (',iip1,',',ijp1,',k)   bathy = ',  & 
    1484                   &                                              bathy(ji,jj), hbatt(ji,jj) 
     1481               WRITE(numout,*) ' domzgr: vertical coordinates : point (20,20,k)   bathy = ', bathy(ji,jj), hbatt(ji,jj) 
    14851482               WRITE(numout,*) ' ~~~~~~  --------------------' 
    1486                WRITE(numout,"(9x,' level   gdept    gdepw    gde3w     e3t      e3w  ')") 
    1487                WRITE(numout,"(10x,i4,4f9.2)") ( jk, fsdept(ji,jj,jk), fsdepw(ji,jj,jk),     & 
    1488                   &                                 fse3t (ji,jj,jk), fse3w (ji,jj,jk), jk=1,jpk ) 
    1489             END DO 
    1490          END DO 
    1491          iip1 = MIN(  74, jpiglo-1) 
    1492          ijp1 = MIN( 100, jpjglo-1) 
    1493          DO jj = mj0(ijp1), mj1(ijp1) 
    1494             DO ji = mi0(iip1), mi1(iip1) 
     1483               WRITE(numout,"(9x,' level  gdept_0   gdepw_0   e3t_0    e3w_0')") 
     1484               WRITE(numout,"(10x,i4,4f9.2)") ( jk, gdept_0(ji,jj,jk), gdepw_0(ji,jj,jk),     & 
     1485                  &                                 e3t_0 (ji,jj,jk) , e3w_0 (ji,jj,jk) , jk=1,jpk ) 
     1486            END DO 
     1487         END DO 
     1488         DO jj = mj0(74), mj1(74) 
     1489            DO ji = mi0(100), mi1(100) 
    14951490               WRITE(numout,*) 
    1496                WRITE(numout,*) ' domzgr: vertical coordinates : point (',iip1,',',ijp1,',k)   bathy = ',  & 
    1497                   &                                              bathy(ji,jj), hbatt(ji,jj) 
     1491               WRITE(numout,*) ' domzgr: vertical coordinates : point (100,74,k)   bathy = ', bathy(ji,jj), hbatt(ji,jj) 
    14981492               WRITE(numout,*) ' ~~~~~~  --------------------' 
    1499                WRITE(numout,"(9x,' level   gdept    gdepw    gde3w     e3t      e3w  ')") 
    1500                WRITE(numout,"(10x,i4,4f9.2)") ( jk, fsdept(ji,jj,jk), fsdepw(ji,jj,jk),     & 
    1501                   &                                 fse3t (ji,jj,jk), fse3w (ji,jj,jk), jk=1,jpk ) 
     1493               WRITE(numout,"(9x,' level  gdept_0   gdepw_0   e3t_0    e3w_0')") 
     1494               WRITE(numout,"(10x,i4,4f9.2)") ( jk, gdept_0(ji,jj,jk), gdepw_0(ji,jj,jk),     & 
     1495                  &                                 e3t_0 (ji,jj,jk) , e3w_0 (ji,jj,jk) , jk=1,jpk ) 
    15021496            END DO 
    15031497         END DO 
     
    16171611               zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    16181612               zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    1619                gdept (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
    1620                gdepw (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
    1621                gdep3w(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
     1613               gdept_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
     1614               gdepw_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
     1615               gdep3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
    16221616            END DO 
    16231617           ! 
     
    16401634                  &              / ( hbatt(ji,jj)+hbatt(ji,jj+1) ) 
    16411635               ! 
    1642                e3t(ji,jj,jk) = ( (hbatt(ji,jj)-rn_hc)*z_esigt3 (ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    1643                e3u(ji,jj,jk) = ( (hbatu(ji,jj)-rn_hc)*z_esigtu3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    1644                e3v(ji,jj,jk) = ( (hbatv(ji,jj)-rn_hc)*z_esigtv3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    1645                e3f(ji,jj,jk) = ( (hbatf(ji,jj)-rn_hc)*z_esigtf3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1636               e3t_0(ji,jj,jk) = ( (hbatt(ji,jj)-rn_hc)*z_esigt3 (ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1637               e3u_0(ji,jj,jk) = ( (hbatu(ji,jj)-rn_hc)*z_esigtu3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1638               e3v_0(ji,jj,jk) = ( (hbatv(ji,jj)-rn_hc)*z_esigtv3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1639               e3f_0(ji,jj,jk) = ( (hbatf(ji,jj)-rn_hc)*z_esigtf3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    16461640               ! 
    1647                e3w (ji,jj,jk) = ( (hbatt(ji,jj)-rn_hc)*z_esigw3 (ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    1648                e3uw(ji,jj,jk) = ( (hbatu(ji,jj)-rn_hc)*z_esigwu3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    1649                e3vw(ji,jj,jk) = ( (hbatv(ji,jj)-rn_hc)*z_esigwv3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1641               e3w_0 (ji,jj,jk) = ( (hbatt(ji,jj)-rn_hc)*z_esigw3 (ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1642               e3uw_0(ji,jj,jk) = ( (hbatu(ji,jj)-rn_hc)*z_esigwu3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
     1643               e3vw_0(ji,jj,jk) = ( (hbatv(ji,jj)-rn_hc)*z_esigwv3(ji,jj,jk) + rn_hc/REAL(jpkm1,wp) ) 
    16501644            END DO 
    16511645        END DO 
     
    17451739 
    17461740          DO jk = 1, jpk 
    1747              gdept (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
    1748              gdepw (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
    1749              gdep3w(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
     1741             gdept_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
     1742             gdepw_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
     1743             gdep3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
    17501744          END DO 
    17511745 
     
    17691763                                    ( hbatt(ji,jj)+hbatt(ji,jj+1) ) 
    17701764 
    1771              e3t(ji,jj,jk)=(scosrf(ji,jj)+hbatt(ji,jj))*z_esigt3(ji,jj,jk) 
    1772              e3u(ji,jj,jk)=(scosrf(ji,jj)+hbatu(ji,jj))*z_esigtu3(ji,jj,jk) 
    1773              e3v(ji,jj,jk)=(scosrf(ji,jj)+hbatv(ji,jj))*z_esigtv3(ji,jj,jk) 
    1774              e3f(ji,jj,jk)=(scosrf(ji,jj)+hbatf(ji,jj))*z_esigtf3(ji,jj,jk) 
     1765             e3t_0(ji,jj,jk)=(scosrf(ji,jj)+hbatt(ji,jj))*z_esigt3(ji,jj,jk) 
     1766             e3u_0(ji,jj,jk)=(scosrf(ji,jj)+hbatu(ji,jj))*z_esigtu3(ji,jj,jk) 
     1767             e3v_0(ji,jj,jk)=(scosrf(ji,jj)+hbatv(ji,jj))*z_esigtv3(ji,jj,jk) 
     1768             e3f_0(ji,jj,jk)=(scosrf(ji,jj)+hbatf(ji,jj))*z_esigtf3(ji,jj,jk) 
    17751769             ! 
    1776              e3w(ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
    1777              e3uw(ji,jj,jk)=hbatu(ji,jj)*z_esigwu3(ji,jj,jk) 
    1778              e3vw(ji,jj,jk)=hbatv(ji,jj)*z_esigwv3(ji,jj,jk) 
     1770             e3w_0(ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
     1771             e3uw_0(ji,jj,jk)=hbatu(ji,jj)*z_esigwu3(ji,jj,jk) 
     1772             e3vw_0(ji,jj,jk)=hbatv(ji,jj)*z_esigwv3(ji,jj,jk) 
    17791773          END DO 
    17801774 
    17811775        ENDDO 
    17821776      ENDDO 
     1777      ! 
     1778      CALL lbc_lnk(e3t_0 ,'T',1.) ; CALL lbc_lnk(e3u_0 ,'T',1.) 
     1779      CALL lbc_lnk(e3v_0 ,'T',1.) ; CALL lbc_lnk(e3f_0 ,'T',1.) 
     1780      CALL lbc_lnk(e3w_0 ,'T',1.) 
     1781      CALL lbc_lnk(e3uw_0,'T',1.) ; CALL lbc_lnk(e3vw_0,'T',1.) 
    17831782      ! 
    17841783      !                                               ! ============= 
     
    18381837         zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    18391838         zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    1840          gdept (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
    1841          gdepw (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
    1842          gdep3w(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
     1839         gdept_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
     1840         gdepw_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
     1841         gdep3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
    18431842      END DO 
    18441843!!gm: e3uw, e3vw can be suppressed  (modif in dynzdf, dynzdf_iso, zdfbfr) (save 2 3D arrays) 
     
    18461845         DO ji = 1, jpi 
    18471846            DO jk = 1, jpk 
    1848               e3t(ji,jj,jk) = ( (hbatt(ji,jj)-hift(ji,jj))*z_esigt(jk) + hift(ji,jj)/REAL(jpkm1,wp) ) 
    1849               e3u(ji,jj,jk) = ( (hbatu(ji,jj)-hifu(ji,jj))*z_esigt(jk) + hifu(ji,jj)/REAL(jpkm1,wp) ) 
    1850               e3v(ji,jj,jk) = ( (hbatv(ji,jj)-hifv(ji,jj))*z_esigt(jk) + hifv(ji,jj)/REAL(jpkm1,wp) ) 
    1851               e3f(ji,jj,jk) = ( (hbatf(ji,jj)-hiff(ji,jj))*z_esigt(jk) + hiff(ji,jj)/REAL(jpkm1,wp) ) 
     1847              e3t_0(ji,jj,jk) = ( (hbatt(ji,jj)-hift(ji,jj))*z_esigt(jk) + hift(ji,jj)/REAL(jpkm1,wp) ) 
     1848              e3u_0(ji,jj,jk) = ( (hbatu(ji,jj)-hifu(ji,jj))*z_esigt(jk) + hifu(ji,jj)/REAL(jpkm1,wp) ) 
     1849              e3v_0(ji,jj,jk) = ( (hbatv(ji,jj)-hifv(ji,jj))*z_esigt(jk) + hifv(ji,jj)/REAL(jpkm1,wp) ) 
     1850              e3f_0(ji,jj,jk) = ( (hbatf(ji,jj)-hiff(ji,jj))*z_esigt(jk) + hiff(ji,jj)/REAL(jpkm1,wp) ) 
    18521851              ! 
    1853               e3w (ji,jj,jk) = ( (hbatt(ji,jj)-hift(ji,jj))*z_esigw(jk) + hift(ji,jj)/REAL(jpkm1,wp) ) 
    1854               e3uw(ji,jj,jk) = ( (hbatu(ji,jj)-hifu(ji,jj))*z_esigw(jk) + hifu(ji,jj)/REAL(jpkm1,wp) ) 
    1855               e3vw(ji,jj,jk) = ( (hbatv(ji,jj)-hifv(ji,jj))*z_esigw(jk) + hifv(ji,jj)/REAL(jpkm1,wp) ) 
     1852              e3w_0 (ji,jj,jk) = ( (hbatt(ji,jj)-hift(ji,jj))*z_esigw(jk) + hift(ji,jj)/REAL(jpkm1,wp) ) 
     1853              e3uw_0(ji,jj,jk) = ( (hbatu(ji,jj)-hifu(ji,jj))*z_esigw(jk) + hifu(ji,jj)/REAL(jpkm1,wp) ) 
     1854              e3vw_0(ji,jj,jk) = ( (hbatv(ji,jj)-hifv(ji,jj))*z_esigw(jk) + hifv(ji,jj)/REAL(jpkm1,wp) ) 
    18561855            END DO 
    18571856         END DO 
     
    18781877      !!---------------------------------------------------------------------- 
    18791878      ! 
    1880       pf =   (   TANH( rn_theta * ( -(pk-0.5_wp) / REAL(jpkm1,wp) + rn_thetb )  )   & 
     1879      pf =   (   TANH( rn_theta * ( -(pk-0.5_wp) / REAL(jpkm1) + rn_thetb )  )   & 
    18811880         &     - TANH( rn_thetb * rn_theta                                )  )   & 
    18821881         & * (   COSH( rn_theta                           )                      & 
     
    19041903      ! 
    19051904      IF ( rn_theta == 0 ) then      ! uniform sigma 
    1906          pf1 = - ( pk1 - 0.5_wp ) / REAL( jpkm1,wp ) 
     1905         pf1 = - ( pk1 - 0.5_wp ) / REAL( jpkm1 ) 
    19071906      ELSE                        ! stretched sigma 
    1908          pf1 =   ( 1._wp - pbb ) * ( SINH( rn_theta*(-(pk1-0.5_wp)/REAL(jpkm1,wp)) ) ) / SINH( rn_theta )              & 
    1909             &  + pbb * (  (TANH( rn_theta*( (-(pk1-0.5_wp)/REAL(jpkm1,wp)) + 0.5_wp) ) - TANH( 0.5_wp * rn_theta )  )  & 
     1907         pf1 =   ( 1._wp - pbb ) * ( SINH( rn_theta*(-(pk1-0.5_wp)/REAL(jpkm1)) ) ) / SINH( rn_theta )              & 
     1908            &  + pbb * (  (TANH( rn_theta*( (-(pk1-0.5_wp)/REAL(jpkm1)) + 0.5_wp) ) - TANH( 0.5_wp * rn_theta )  )  & 
    19101909            &        / ( 2._wp * TANH( 0.5_wp * rn_theta ) )  ) 
    19111910      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.