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 6060 for branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2015-12-16T10:25:22+01:00 (8 years ago)
Author:
timgraham
Message:

Merged dev_r5836_noc2_VVL_BY_DEFAULT into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r5836 r6060  
    22   !!============================================================================== 
    33   !!                       ***  MODULE domzgr   *** 
    4    !! Ocean initialization : domain initialization 
     4   !! Ocean domain : definition of the vertical coordinate system 
    55   !!============================================================================== 
    66   !! History :  OPA  ! 1995-12  (G. Madec)  Original code : s vertical coordinate 
     
    3838   USE closea            ! closed seas 
    3939   USE c1d               ! 1D vertical configuration 
     40   ! 
    4041   USE in_out_manager    ! I/O manager 
    4142   USE iom               ! I/O library 
     
    7374 
    7475  !! * Substitutions 
    75 #  include "domzgr_substitute.h90" 
    7676#  include "vectopt_loop_substitute.h90" 
    7777   !!---------------------------------------------------------------------- 
     
    102102      INTEGER ::   ios 
    103103      ! 
    104       NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 
     104      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav, ln_linssh 
    105105      !!---------------------------------------------------------------------- 
    106106      ! 
     
    120120         WRITE(numout,*) 'dom_zgr : vertical coordinate' 
    121121         WRITE(numout,*) '~~~~~~~' 
    122          WRITE(numout,*) '          Namelist namzgr : set vertical coordinate' 
    123          WRITE(numout,*) '             z-coordinate - full steps      ln_zco    = ', ln_zco 
    124          WRITE(numout,*) '             z-coordinate - partial steps   ln_zps    = ', ln_zps 
    125          WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
    126          WRITE(numout,*) '             ice shelf cavities             ln_isfcav = ', ln_isfcav 
     122         WRITE(numout,*) '   Namelist namzgr : set vertical coordinate' 
     123         WRITE(numout,*) '      z-coordinate - full steps      ln_zco    = ', ln_zco 
     124         WRITE(numout,*) '      z-coordinate - partial steps   ln_zps    = ', ln_zps 
     125         WRITE(numout,*) '      s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
     126         WRITE(numout,*) '      ice shelf cavities             ln_isfcav = ', ln_isfcav 
     127         WRITE(numout,*) '      linear free surface            ln_linssh = ', ln_linssh 
    127128      ENDIF 
     129 
     130      IF( ln_linssh .AND. lwp) WRITE(numout,*) '   linear free surface: the vertical mesh does not change in time' 
    128131 
    129132      ioptio = 0                       ! Check Vertical coordinate options 
     
    155158      ! 
    156159      IF( nprint == 1 .AND. lwp )   THEN 
    157          WRITE(numout,*) ' MIN val mbathy ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
     160         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    158161         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    159             &                   ' w ',   MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gdep3w_0(:,:,:) ) 
    160          WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0(:,:,:) ), ' f ', MINVAL( e3f_0(:,:,:) ),  & 
    161             &                   ' u ',   MINVAL( e3u_0(:,:,:) ), ' u ', MINVAL( e3v_0(:,:,:) ),  & 
    162             &                   ' uw',   MINVAL( e3uw_0(:,:,:)), ' vw', MINVAL( e3vw_0(:,:,:)),   & 
    163             &                   ' w ',   MINVAL( e3w_0(:,:,:) ) 
     162            &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w ', MINVAL( gde3w_0(:,:,:) ) 
     163         WRITE(numout,*) ' MIN val e3    t ', MINVAL(   e3t_0(:,:,:) ), ' f ', MINVAL(  e3f_0(:,:,:) ),  & 
     164            &                          ' u ', MINVAL(   e3u_0(:,:,:) ), ' u ', MINVAL(  e3v_0(:,:,:) ),  & 
     165            &                          ' uw', MINVAL(  e3uw_0(:,:,:) ), ' vw', MINVAL( e3vw_0(:,:,:)),   & 
     166            &                          ' w ', MINVAL(  e3w_0(:,:,:) ) 
    164167 
    165168         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    166             &                   ' w ',   MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gdep3w_0(:,:,:) ) 
    167          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0(:,:,:) ), ' f ', MAXVAL( e3f_0(:,:,:) ),  & 
    168             &                   ' u ',   MAXVAL( e3u_0(:,:,:) ), ' u ', MAXVAL( e3v_0(:,:,:) ),  & 
    169             &                   ' uw',   MAXVAL( e3uw_0(:,:,:)), ' vw', MAXVAL( e3vw_0(:,:,:)),   & 
    170             &                   ' w ',   MAXVAL( e3w_0(:,:,:) ) 
     169            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w ', MAXVAL( gde3w_0(:,:,:) ) 
     170         WRITE(numout,*) ' MAX val e3    t ', MAXVAL(   e3t_0(:,:,:) ), ' f ', MAXVAL(  e3f_0(:,:,:) ),  & 
     171            &                          ' u ', MAXVAL(   e3u_0(:,:,:) ), ' u ', MAXVAL(  e3v_0(:,:,:) ),  & 
     172            &                          ' uw', MAXVAL(  e3uw_0(:,:,:) ), ' vw', MAXVAL(  e3vw_0(:,:,:) ),  & 
     173            &                          ' w ', MAXVAL(  e3w_0(:,:,:) ) 
    171174      ENDIF 
    172175      ! 
     
    674677      !!              - update bathy : meter bathymetry (in meters) 
    675678      !!---------------------------------------------------------------------- 
    676       !! 
    677679      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    678680      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    679681      REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
    680  
    681682      !!---------------------------------------------------------------------- 
    682683      ! 
     
    775776         IF(lwp) WRITE(numout,*) ' you can decrease jpk to ', ikmax+1 
    776777      ENDIF 
    777  
    778       IF( lwp .AND. nprint == 1 ) THEN      ! control print 
    779          WRITE(numout,*) 
    780          WRITE(numout,*) ' bathymetric field :   number of non-zero T-levels ' 
    781          WRITE(numout,*) ' ------------------' 
    782          CALL prihin( mbathy, jpi, jpj, 1, jpi, 1, 1, jpj, 1, 3, numout ) 
    783          WRITE(numout,*) 
    784       ENDIF 
    785778      ! 
    786779      CALL wrk_dealloc( jpi, jpj, zbathy ) 
     
    803796      !!                                     (min value = 1 over land) 
    804797      !!---------------------------------------------------------------------- 
    805       !! 
    806798      INTEGER ::   ji, jj   ! dummy loop indices 
    807799      REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
     
    835827   END SUBROUTINE zgr_bot_level 
    836828 
    837       SUBROUTINE zgr_top_level 
     829 
     830   SUBROUTINE zgr_top_level 
    838831      !!---------------------------------------------------------------------- 
    839832      !!                    ***  ROUTINE zgr_bot_level  *** 
     
    847840      !!                                     (min value = 1) 
    848841      !!---------------------------------------------------------------------- 
    849       !! 
    850842      INTEGER ::   ji, jj   ! dummy loop indices 
    851843      REAL(wp), POINTER, DIMENSION(:,:) ::  zmik 
     
    881873   END SUBROUTINE zgr_top_level 
    882874 
     875 
    883876   SUBROUTINE zgr_zco 
    884877      !!---------------------------------------------------------------------- 
    885878      !!                  ***  ROUTINE zgr_zco  *** 
    886879      !! 
    887       !! ** Purpose :   define the z-coordinate system 
     880      !! ** Purpose :   define the reference z-coordinate system 
    888881      !! 
    889882      !! ** Method  :   set 3D coord. arrays to reference 1D array  
     
    895888      ! 
    896889      DO jk = 1, jpk 
    897          gdept_0 (:,:,jk) = gdept_1d(jk) 
    898          gdepw_0 (:,:,jk) = gdepw_1d(jk) 
    899          gdep3w_0(:,:,jk) = gdepw_1d(jk) 
    900          e3t_0   (:,:,jk) = e3t_1d  (jk) 
    901          e3u_0   (:,:,jk) = e3t_1d  (jk) 
    902          e3v_0   (:,:,jk) = e3t_1d  (jk) 
    903          e3f_0   (:,:,jk) = e3t_1d  (jk) 
    904          e3w_0   (:,:,jk) = e3w_1d  (jk) 
    905          e3uw_0  (:,:,jk) = e3w_1d  (jk) 
    906          e3vw_0  (:,:,jk) = e3w_1d  (jk) 
     890         gdept_0(:,:,jk) = gdept_1d(jk) 
     891         gdepw_0(:,:,jk) = gdepw_1d(jk) 
     892         gde3w_0(:,:,jk) = gdepw_1d(jk) 
     893         e3t_0  (:,:,jk) = e3t_1d  (jk) 
     894         e3u_0  (:,:,jk) = e3t_1d  (jk) 
     895         e3v_0  (:,:,jk) = e3t_1d  (jk) 
     896         e3f_0  (:,:,jk) = e3t_1d  (jk) 
     897         e3w_0  (:,:,jk) = e3w_1d  (jk) 
     898         e3uw_0 (:,:,jk) = e3w_1d  (jk) 
     899         e3vw_0 (:,:,jk) = e3w_1d  (jk) 
    907900      END DO 
    908901      ! 
     
    917910      !!                      
    918911      !! ** Purpose :   the depth and vertical scale factor in partial step 
    919       !!      z-coordinate case 
     912      !!              reference z-coordinate case 
    920913      !! 
    921914      !! ** Method  :   Partial steps : computes the 3D vertical scale factors 
     
    957950      !!  Reference :   Pacanowsky & Gnanadesikan 1997, Mon. Wea. Rev., 126, 3248-3270. 
    958951      !!---------------------------------------------------------------------- 
    959       !! 
    960952      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
    961953      INTEGER  ::   ik, it, ikb, ikt ! temporary integers 
    962       LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    963954      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    964955      REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
     
    971962      IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
    972963      ! 
    973       CALL wrk_alloc( jpi, jpj, jpk, zprt ) 
     964      CALL wrk_alloc( jpi,jpj,jpk,  zprt ) 
    974965      ! 
    975966      IF(lwp) WRITE(numout,*) 
     
    977968      IF(lwp) WRITE(numout,*) '    ~~~~~~~ ' 
    978969      IF(lwp) WRITE(numout,*) '              mbathy is recomputed : bathy_level file is NOT used' 
    979  
    980       ll_print = .FALSE.                   ! Local variable for debugging 
    981        
    982       IF(lwp .AND. ll_print) THEN          ! control print of the ocean depth 
    983          WRITE(numout,*) 
    984          WRITE(numout,*) 'dom_zgr_zps:  bathy (in hundred of meters)' 
    985          CALL prihre( bathy, jpi, jpj, 1,jpi, 1, 1, jpj, 1, 1.e-2, numout ) 
    986       ENDIF 
    987  
    988970 
    989971      ! bathymetry in level (from bathy_meter) 
     
    11961178      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
    11971179      
    1198       ! Compute gdep3w_0 (vertical sum of e3w) 
     1180      ! Compute gde3w_0 (vertical sum of e3w) 
    11991181      IF ( ln_isfcav ) THEN ! if cavity 
    1200          WHERE (misfdep == 0) misfdep = 1 
     1182         WHERE( misfdep == 0 )  misfdep = 1 
    12011183         DO jj = 1,jpj 
    12021184            DO ji = 1,jpi 
    1203                gdep3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
     1185               gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
    12041186               DO jk = 2, misfdep(ji,jj) 
    1205                   gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1187                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    12061188               END DO 
    1207                IF (misfdep(ji,jj) .GE. 2) gdep3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 
     1189               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)) 
    12081190               DO jk = misfdep(ji,jj) + 1, jpk 
    1209                   gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1191                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    12101192               END DO 
    12111193            END DO 
    12121194         END DO 
    12131195      ELSE ! no cavity 
    1214          gdep3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
     1196         gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    12151197         DO jk = 2, jpk 
    1216             gdep3w_0(:,:,jk) = gdep3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
     1198            gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
    12171199         END DO 
    12181200      END IF 
    1219       !                                               ! ================= ! 
    1220       IF(lwp .AND. ll_print) THEN                     !   Control print   ! 
    1221          !                                            ! ================= ! 
    1222          DO jj = 1,jpj 
    1223             DO ji = 1, jpi 
    1224                ik = MAX( mbathy(ji,jj), 1 ) 
    1225                zprt(ji,jj,1) = e3t_0   (ji,jj,ik) 
    1226                zprt(ji,jj,2) = e3w_0   (ji,jj,ik) 
    1227                zprt(ji,jj,3) = e3u_0   (ji,jj,ik) 
    1228                zprt(ji,jj,4) = e3v_0   (ji,jj,ik) 
    1229                zprt(ji,jj,5) = e3f_0   (ji,jj,ik) 
    1230                zprt(ji,jj,6) = gdep3w_0(ji,jj,ik) 
    1231             END DO 
    1232          END DO 
    1233          WRITE(numout,*) 
    1234          WRITE(numout,*) 'domzgr e3t(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1235          WRITE(numout,*) 
    1236          WRITE(numout,*) 'domzgr e3w(mbathy)'      ;   CALL prihre(zprt(:,:,2),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1237          WRITE(numout,*) 
    1238          WRITE(numout,*) 'domzgr e3u(mbathy)'      ;   CALL prihre(zprt(:,:,3),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1239          WRITE(numout,*) 
    1240          WRITE(numout,*) 'domzgr e3v(mbathy)'      ;   CALL prihre(zprt(:,:,4),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1241          WRITE(numout,*) 
    1242          WRITE(numout,*) 'domzgr e3f(mbathy)'      ;   CALL prihre(zprt(:,:,5),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1243          WRITE(numout,*) 
    1244          WRITE(numout,*) 'domzgr gdep3w(mbathy)'   ;   CALL prihre(zprt(:,:,6),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    1245       ENDIF   
    1246       ! 
    1247       CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 
     1201      ! 
     1202      CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
    12481203      ! 
    12491204      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    12501205      ! 
    12511206   END SUBROUTINE zgr_zps 
     1207 
    12521208 
    12531209   SUBROUTINE zgr_isf 
     
    12651221      !!              - bathy and isfdraft are modified 
    12661222      !!---------------------------------------------------------------------- 
    1267       !!    
    12681223      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    12691224      INTEGER  ::   ik, it           ! temporary integers 
    12701225      INTEGER  ::   id, jd, nprocd 
    12711226      INTEGER  ::   icompt, ibtest, ibtestim1, ibtestip1, ibtestjm1, ibtestjp1   ! (ISF) 
    1272       LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    12731227      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    12741228      REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
     
    12811235      !!--------------------------------------------------------------------- 
    12821236      ! 
    1283       IF( nn_timing == 1 )  CALL timing_start('zgr_isf') 
    1284       ! 
    1285       CALL wrk_alloc( jpi, jpj, zbathy, zmask, zrisfdep) 
    1286       CALL wrk_alloc( jpi, jpj, zmisfdep, zmbathy ) 
     1237      IF( nn_timing == 1 )   CALL timing_start('zgr_isf') 
     1238      ! 
     1239      CALL wrk_alloc( jpi,jpj,  zbathy, zmask, zrisfdep) 
     1240      CALL wrk_alloc( jpi,jpj,  zmisfdep, zmbathy ) 
    12871241 
    12881242 
     
    13001254         WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
    13011255      END DO  
    1302       WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) .GT. 0._wp) 
    1303          risfdep(:,:) = 0. ; misfdep(:,:) = 1 
     1256      WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) > 0._wp) 
     1257         risfdep(:,:) = 0.   ;  misfdep(:,:) = 1 
    13041258      END WHERE 
    13051259  
     
    13081262! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
    13091263      DO jl = 1, 10      
    1310          WHERE (bathy(:,:) .EQ. risfdep(:,:) ) 
     1264         WHERE (bathy(:,:) == risfdep(:,:) ) 
    13111265            misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    13121266            mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     
    13151269            misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
    13161270            mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
    1317          ENDWHERE 
     1271         END WHERE 
    13181272         IF( lk_mpp ) THEN 
    13191273            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     
    13601314               ! find the minimum change option: 
    13611315               ! test bathy 
    1362                IF (risfdep(ji,jj) .GT. 1) THEN 
     1316               IF (risfdep(ji,jj) > 1) THEN 
    13631317               zbathydiff =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
    13641318                 &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     
    13661320                 &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    13671321  
    1368                   IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 
     1322                  IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN 
    13691323                     IF (zbathydiff .LE. zrisfdepdiff) THEN 
    13701324                        bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
     
    17521706      CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
    17531707      CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 
    1754  
    1755       IF( nn_timing == 1 )  CALL timing_stop('zgr_isf') 
    1756        
     1708      ! 
     1709      IF( nn_timing == 1 )   CALL timing_stop('zgr_isf') 
     1710      !       
    17571711   END SUBROUTINE 
     1712 
    17581713 
    17591714   SUBROUTINE zgr_sco 
     
    18011756      !! 
    18021757      !!---------------------------------------------------------------------- 
    1803       ! 
    18041758      INTEGER  ::   ji, jj, jk, jl           ! dummy loop argument 
    18051759      INTEGER  ::   iip1, ijp1, iim1, ijm1   ! temporary integers 
     
    18101764      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
    18111765      REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
    1812  
     1766      !! 
    18131767      NAMELIST/namzgr_sco/ln_s_sh94, ln_s_sf12, ln_sigcrit, rn_sbot_min, rn_sbot_max, rn_hc, rn_rmax,rn_theta, & 
    1814                            rn_thetb, rn_bb, rn_alpha, rn_efold, rn_zs, rn_zb_a, rn_zb_b 
     1768         &                rn_thetb, rn_bb, rn_alpha, rn_efold, rn_zs, rn_zb_a, rn_zb_b 
    18151769     !!---------------------------------------------------------------------- 
    18161770      ! 
    18171771      IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
    18181772      ! 
    1819       CALL wrk_alloc( jpi, jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
     1773      CALL wrk_alloc( jpi,jpj,  zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    18201774      ! 
    18211775      REWIND( numnam_ref )              ! Namelist namzgr_sco in reference namelist : Sigma-stretching parameters 
     
    18761830      DO jj = 1, jpj 
    18771831         DO ji = 1, jpi 
    1878            IF( bathy(ji,jj) == 0._wp ) THEN 
    1879              iip1 = MIN( ji+1, jpi ) 
    1880              ijp1 = MIN( jj+1, jpj ) 
    1881              iim1 = MAX( ji-1, 1 ) 
    1882              ijm1 = MAX( jj-1, 1 ) 
    1883              IF( (bathy(iip1,jj) + bathy(iim1,jj) + bathy(ji,ijp1) + bathy(ji,ijm1) +              & 
    1884         &         bathy(iip1,ijp1) + bathy(iim1,ijm1) + bathy(iip1,ijp1) + bathy(iim1,ijm1)) > 0._wp ) THEN 
    1885                zenv(ji,jj) = rn_sbot_min 
    1886              ENDIF 
     1832            IF( bathy(ji,jj) == 0._wp ) THEN 
     1833               iip1 = MIN( ji+1, jpi ) 
     1834               ijp1 = MIN( jj+1, jpj ) 
     1835               iim1 = MAX( ji-1, 1 ) 
     1836               ijm1 = MAX( jj-1, 1 ) 
     1837!!gm BUG fix see ticket #1617 
     1838               IF( ( + bathy(iim1,ijm1) + bathy(ji,ijp1) + bathy(iip1,ijp1)            & 
     1839                  &  + bathy(iim1,jj  )                  + bathy(iip1,jj  )            & 
     1840                  &  + bathy(iim1,ijm1) + bathy(ji,ijm1) + bathy(iip1,ijp1)  ) > 0._wp )   zenv(ji,jj) = rn_sbot_min 
     1841!!gm 
     1842!!gm               IF( ( bathy(iip1,jj  ) + bathy(iim1,jj  ) + bathy(ji,ijp1  ) + bathy(ji,ijm1) +         & 
     1843!!gm                  &  bathy(iip1,ijp1) + bathy(iim1,ijm1) + bathy(iip1,ijp1) + bathy(iim1,ijm1)) > 0._wp ) THEN 
     1844!!gm               zenv(ji,jj) = rn_sbot_min 
     1845!!gm             ENDIF 
     1846!!gm end 
    18871847           ENDIF 
    18881848         END DO 
     
    19751935      ENDIF 
    19761936      ! 
    1977       IF(lwp) THEN                             ! Control print 
    1978          WRITE(numout,*) 
    1979          WRITE(numout,*) ' domzgr: hbatt field; ocean depth in meters' 
    1980          WRITE(numout,*) 
    1981          CALL prihre( hbatt(1,1), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 0._wp, numout ) 
    1982          IF( nprint == 1 )   THEN         
    1983             WRITE(numout,*) ' bathy  MAX ', MAXVAL( bathy(:,:) ), ' MIN ', MINVAL( bathy(:,:) ) 
    1984             WRITE(numout,*) ' hbatt  MAX ', MAXVAL( hbatt(:,:) ), ' MIN ', MINVAL( hbatt(:,:) ) 
    1985          ENDIF 
    1986       ENDIF 
    1987  
    19881937      !                                        ! ============================== 
    19891938      !                                        !   hbatu, hbatv, hbatf fields 
     
    20802029      CALL lbc_lnk( e3uw_0, 'U', 1._wp ) 
    20812030      CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    2082  
    2083       fsdepw(:,:,:) = gdepw_0 (:,:,:) 
    2084       fsde3w(:,:,:) = gdep3w_0(:,:,:) 
    2085       ! 
    2086       where (e3t_0   (:,:,:).eq.0.0)  e3t_0(:,:,:) = 1.0 
    2087       where (e3u_0   (:,:,:).eq.0.0)  e3u_0(:,:,:) = 1.0 
    2088       where (e3v_0   (:,:,:).eq.0.0)  e3v_0(:,:,:) = 1.0 
    2089       where (e3f_0   (:,:,:).eq.0.0)  e3f_0(:,:,:) = 1.0 
    2090       where (e3w_0   (:,:,:).eq.0.0)  e3w_0(:,:,:) = 1.0 
    2091       where (e3uw_0  (:,:,:).eq.0.0)  e3uw_0(:,:,:) = 1.0 
    2092       where (e3vw_0  (:,:,:).eq.0.0)  e3vw_0(:,:,:) = 1.0 
     2031      ! 
     2032      WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
     2033      WHERE( e3u_0 (:,:,:) == 0._wp )   e3u_0 (:,:,:) = 1._wp 
     2034      WHERE( e3v_0 (:,:,:) == 0._wp )   e3v_0 (:,:,:) = 1._wp 
     2035      WHERE( e3f_0 (:,:,:) == 0._wp )   e3f_0 (:,:,:) = 1._wp 
     2036      WHERE( e3w_0 (:,:,:) == 0._wp )   e3w_0 (:,:,:) = 1._wp 
     2037      WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
     2038      WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    20932039 
    20942040#if defined key_agrif 
    2095       ! Ensure meaningful vertical scale factors in ghost lines/columns 
    2096       IF( .NOT. Agrif_Root() ) THEN 
    2097          !   
    2098          IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    2099             e3u_0(1,:,:) = e3u_0(2,:,:) 
    2100          ENDIF 
    2101          ! 
    2102          IF((nbondi ==  1).OR.(nbondi == 2)) THEN 
    2103             e3u_0(nlci-1,:,:) = e3u_0(nlci-2,:,:) 
    2104          ENDIF 
    2105          ! 
    2106          IF((nbondj == -1).OR.(nbondj == 2)) THEN 
    2107             e3v_0(:,1,:) = e3v_0(:,2,:) 
    2108          ENDIF 
    2109          ! 
    2110          IF((nbondj ==  1).OR.(nbondj == 2)) THEN 
    2111             e3v_0(:,nlcj-1,:) = e3v_0(:,nlcj-2,:) 
    2112          ENDIF 
    2113          ! 
    2114       ENDIF 
     2041      IF( .NOT. Agrif_Root() ) THEN    ! Ensure meaningful vertical scale factors in ghost lines/columns 
     2042         IF( nbondi == -1 .OR. nbondi == 2 )   e3u_0(  1   ,  :   ,:) = e3u_0(  2   ,  :   ,:) 
     2043         IF( nbondi ==  1 .OR. nbondi == 2 )   e3u_0(nlci-1,  :   ,:) = e3u_0(nlci-2,  :   ,:) 
     2044         IF( nbondj == -1 .OR. nbondj == 2 )   e3v_0(  :   ,  1   ,:) = e3v_0(  :   ,  2   ,:) 
     2045         IF( nbondj ==  1 .OR. nbondj == 2 )   e3v_0(  :   ,nlcj-1,:) = e3v_0(  :   ,nlcj-2,:) 
     2046       ENDIF 
    21152047#endif 
    21162048 
    2117       fsdept(:,:,:) = gdept_0 (:,:,:) 
    2118       fsdepw(:,:,:) = gdepw_0 (:,:,:) 
    2119       fsde3w(:,:,:) = gdep3w_0(:,:,:) 
    2120       fse3t (:,:,:) = e3t_0   (:,:,:) 
    2121       fse3u (:,:,:) = e3u_0   (:,:,:) 
    2122       fse3v (:,:,:) = e3v_0   (:,:,:) 
    2123       fse3f (:,:,:) = e3f_0   (:,:,:) 
    2124       fse3w (:,:,:) = e3w_0   (:,:,:) 
    2125       fse3uw(:,:,:) = e3uw_0  (:,:,:) 
    2126       fse3vw(:,:,:) = e3vw_0  (:,:,:) 
     2049!!gm   I don't like that HERE we are supposed to set the reference coordinate (i.e. _0 arrays) 
     2050!!gm   and only that !!!!! 
     2051!!gm   THIS should be removed from here ! 
     2052      gdept_n(:,:,:) = gdept_0(:,:,:) 
     2053      gdepw_n(:,:,:) = gdepw_0(:,:,:) 
     2054      gde3w_n(:,:,:) = gde3w_0(:,:,:) 
     2055      e3t_n  (:,:,:) = e3t_0  (:,:,:) 
     2056      e3u_n  (:,:,:) = e3u_0  (:,:,:) 
     2057      e3v_n  (:,:,:) = e3v_0  (:,:,:) 
     2058      e3f_n  (:,:,:) = e3f_0  (:,:,:) 
     2059      e3w_n  (:,:,:) = e3w_0  (:,:,:) 
     2060      e3uw_n (:,:,:) = e3uw_0 (:,:,:) 
     2061      e3vw_n (:,:,:) = e3vw_0 (:,:,:) 
     2062!!gm and obviously in the following, use the _0 arrays until the end of this subroutine 
     2063!! gm end 
    21272064!! 
    21282065      ! HYBRID :  
     
    21302067         DO ji = 1, jpi 
    21312068            DO jk = 1, jpkm1 
    2132                IF( scobot(ji,jj) >= fsdept(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
    2133             END DO 
    2134             IF( scobot(ji,jj) == 0._wp               )   mbathy(ji,jj) = 0 
     2069               IF( scobot(ji,jj) >= gdept_n(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
     2070            END DO 
     2071            IF( scobot(ji,jj) == 0._wp                )   mbathy(ji,jj) = 0 
    21352072         END DO 
    21362073      END DO 
     
    21412078         WRITE(numout,*) ' MIN val mbathy  ', MINVAL( mbathy(:,:)    ), ' MAX ', MAXVAL( mbathy(:,:) ) 
    21422079         WRITE(numout,*) ' MIN val depth t ', MINVAL( gdept_0(:,:,:) ),   & 
    2143             &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gdep3w_0(:,:,:) ) 
    2144          WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0   (:,:,:) ),   & 
    2145             &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0   (:,:,:) ),   & 
    2146             &                          ' uw', MINVAL( e3uw_0 (:,:,:) ), ' vw'  , MINVAL( e3vw_0  (:,:,:) ),   & 
     2080            &                          ' w ', MINVAL( gdepw_0(:,:,:) ), '3w '  , MINVAL( gde3w_0(:,:,:) ) 
     2081         WRITE(numout,*) ' MIN val e3    t ', MINVAL( e3t_0  (:,:,:) ), ' f '  , MINVAL( e3f_0  (:,:,:) ),   & 
     2082            &                          ' u ', MINVAL( e3u_0  (:,:,:) ), ' u '  , MINVAL( e3v_0  (:,:,:) ),   & 
     2083            &                          ' uw', MINVAL( e3uw_0 (:,:,:) ), ' vw'  , MINVAL( e3vw_0 (:,:,:) ),   & 
    21472084            &                          ' w ', MINVAL( e3w_0  (:,:,:) ) 
    21482085 
    21492086         WRITE(numout,*) ' MAX val depth t ', MAXVAL( gdept_0(:,:,:) ),   & 
    2150             &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gdep3w_0(:,:,:) ) 
    2151          WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0   (:,:,:) ),   & 
    2152             &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0   (:,:,:) ),   & 
    2153             &                          ' uw', MAXVAL( e3uw_0 (:,:,:) ), ' vw'  , MAXVAL( e3vw_0  (:,:,:) ),   & 
     2087            &                          ' w ', MAXVAL( gdepw_0(:,:,:) ), '3w '  , MAXVAL( gde3w_0(:,:,:) ) 
     2088         WRITE(numout,*) ' MAX val e3    t ', MAXVAL( e3t_0  (:,:,:) ), ' f '  , MAXVAL( e3f_0  (:,:,:) ),   & 
     2089            &                          ' u ', MAXVAL( e3u_0  (:,:,:) ), ' u '  , MAXVAL( e3v_0  (:,:,:) ),   & 
     2090            &                          ' uw', MAXVAL( e3uw_0 (:,:,:) ), ' vw'  , MAXVAL( e3vw_0 (:,:,:) ),   & 
    21542091            &                          ' w ', MAXVAL( e3w_0  (:,:,:) ) 
    21552092      ENDIF 
     
    21832120         END DO 
    21842121      ENDIF 
    2185  
    2186 !================================================================================ 
    2187 ! check the coordinate makes sense 
    2188 !================================================================================ 
     2122      ! 
     2123      !================================================================================ 
     2124      ! check the coordinate makes sense 
     2125      !================================================================================ 
    21892126      DO ji = 1, jpi 
    21902127         DO jj = 1, jpj 
    2191  
     2128            ! 
    21922129            IF( hbatt(ji,jj) > 0._wp) THEN 
    21932130               DO jk = 1, mbathy(ji,jj) 
    21942131                 ! check coordinate is monotonically increasing 
    2195                  IF (fse3w(ji,jj,jk) <= 0._wp .OR. fse3t(ji,jj,jk) <= 0._wp ) THEN 
     2132                 IF (e3w_n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN 
    21962133                    WRITE(ctmp1,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    21972134                    WRITE(numout,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2198                     WRITE(numout,*) 'e3w',fse3w(ji,jj,:) 
    2199                     WRITE(numout,*) 'e3t',fse3t(ji,jj,:) 
     2135                    WRITE(numout,*) 'e3w',e3w_n(ji,jj,:) 
     2136                    WRITE(numout,*) 'e3t',e3t_n(ji,jj,:) 
    22002137                    CALL ctl_stop( ctmp1 ) 
    22012138                 ENDIF 
    22022139                 ! and check it has never gone negative 
    2203                  IF( fsdepw(ji,jj,jk) < 0._wp .OR. fsdept(ji,jj,jk) < 0._wp ) THEN 
     2140                 IF( gdepw_n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN 
    22042141                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw or gdept =< 0  at point (i,j,k)= ', ji, jj, jk 
    22052142                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw   or gdept   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2206                     WRITE(numout,*) 'gdepw',fsdepw(ji,jj,:) 
    2207                     WRITE(numout,*) 'gdept',fsdept(ji,jj,:) 
     2143                    WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
     2144                    WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
    22082145                    CALL ctl_stop( ctmp1 ) 
    22092146                 ENDIF 
    22102147                 ! and check it never exceeds the total depth 
    2211                  IF( fsdepw(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2148                 IF( gdepw_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    22122149                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    22132150                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2214                     WRITE(numout,*) 'gdepw',fsdepw(ji,jj,:) 
     2151                    WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
    22152152                    CALL ctl_stop( ctmp1 ) 
    22162153                 ENDIF 
    22172154               END DO 
    2218  
     2155               ! 
    22192156               DO jk = 1, mbathy(ji,jj)-1 
    22202157                 ! and check it never exceeds the total depth 
    2221                 IF( fsdept(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2158                IF( gdept_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    22222159                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    22232160                    WRITE(numout,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2224                     WRITE(numout,*) 'gdept',fsdept(ji,jj,:) 
     2161                    WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
    22252162                    CALL ctl_stop( ctmp1 ) 
    22262163                 ENDIF 
    22272164               END DO 
    2228  
    22292165            ENDIF 
    2230  
    22312166         END DO 
    22322167      END DO 
     
    22382173   END SUBROUTINE zgr_sco 
    22392174 
    2240 !!====================================================================== 
     2175 
    22412176   SUBROUTINE s_sh94() 
    2242  
    22432177      !!---------------------------------------------------------------------- 
    22442178      !!                  ***  ROUTINE s_sh94  *** 
     
    22512185      !! Reference : Song and Haidvogel 1994.  
    22522186      !!---------------------------------------------------------------------- 
    2253       ! 
    22542187      INTEGER  ::   ji, jj, jk           ! dummy loop argument 
    22552188      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
     
    22572190      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    22582191      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2259  
    2260       CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2261       CALL wrk_alloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2192      !!---------------------------------------------------------------------- 
     2193 
     2194      CALL wrk_alloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2195      CALL wrk_alloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    22622196 
    22632197      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     
    22652199      z_esigtu3 = 0._wp   ;   z_esigtv3 = 0._wp   ;   z_esigtf3 = 0._wp 
    22662200      z_esigwu3 = 0._wp   ;   z_esigwv3 = 0._wp 
    2267  
     2201      ! 
    22682202      DO ji = 1, jpi 
    22692203         DO jj = 1, jpj 
    2270  
     2204            ! 
    22712205            IF( hbatt(ji,jj) > rn_hc ) THEN    !deep water, stretched sigma 
    22722206               DO jk = 1, jpk 
     
    22972231               zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    22982232               zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    2299                gdept_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
    2300                gdepw_0 (ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
    2301                gdep3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
     2233               gdept_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigt3(ji,jj,jk)+rn_hc*zcoeft ) 
     2234               gdepw_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsigw3(ji,jj,jk)+rn_hc*zcoefw ) 
     2235               gde3w_0(ji,jj,jk) = ( scosrf(ji,jj) + (hbatt(ji,jj)-rn_hc)*z_gsi3w3(ji,jj,jk)+rn_hc*zcoeft ) 
    23022236            END DO 
    23032237           ! 
     
    23312265        END DO 
    23322266      END DO 
    2333  
    2334       CALL wrk_dealloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2335       CALL wrk_dealloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2336  
     2267      ! 
     2268      CALL wrk_dealloc( jpi,jpj,jpk,  z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2269      CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2270      ! 
    23372271   END SUBROUTINE s_sh94 
    23382272 
     2273 
    23392274   SUBROUTINE s_sf12 
    2340  
    23412275      !!---------------------------------------------------------------------- 
    23422276      !!                  ***  ROUTINE s_sf12 ***  
     
    23542288      !! Reference : Siddorn and Furner 2012 (submitted Ocean modelling). 
    23552289      !!---------------------------------------------------------------------- 
    2356       ! 
    23572290      INTEGER  ::   ji, jj, jk           ! dummy loop argument 
    23582291      REAL(wp) ::   zsmth               ! smoothing around critical depth 
     
    23612294      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    23622295      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2363  
     2296      !!---------------------------------------------------------------------- 
    23642297      ! 
    23652298      CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     
    24252358 
    24262359          DO jk = 1, jpk 
    2427              gdept_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
    2428              gdepw_0 (ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
    2429              gdep3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
     2360             gdept_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigt3(ji,jj,jk) 
     2361             gdepw_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsigw3(ji,jj,jk) 
     2362             gde3w_0(ji,jj,jk) = (scosrf(ji,jj)+hbatt(ji,jj))*z_gsi3w3(ji,jj,jk) 
    24302363          END DO 
    24312364 
     
    24542387             e3f_0(ji,jj,jk)=(scosrf(ji,jj)+hbatf(ji,jj))*z_esigtf3(ji,jj,jk) 
    24552388             ! 
    2456              e3w_0(ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
     2389             e3w_0 (ji,jj,jk)=hbatt(ji,jj)*z_esigw3(ji,jj,jk) 
    24572390             e3uw_0(ji,jj,jk)=hbatu(ji,jj)*z_esigwu3(ji,jj,jk) 
    24582391             e3vw_0(ji,jj,jk)=hbatv(ji,jj)*z_esigwv3(ji,jj,jk) 
     
    24672400      CALL lbc_lnk(e3uw_0,'T',1.) ; CALL lbc_lnk(e3vw_0,'T',1.) 
    24682401      ! 
    2469       !                                               ! ============= 
    2470  
    2471       CALL wrk_dealloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2472       CALL wrk_dealloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    2473  
     2402      CALL wrk_dealloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2403      CALL wrk_dealloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2404      ! 
    24742405   END SUBROUTINE s_sf12 
    24752406 
     2407 
    24762408   SUBROUTINE s_tanh() 
    2477  
    24782409      !!---------------------------------------------------------------------- 
    24792410      !!                  ***  ROUTINE s_tanh***  
     
    24852416      !! Reference : Madec, Lott, Delecluse and Crepon, 1996. JPO, 26, 1393-1408. 
    24862417      !!---------------------------------------------------------------------- 
    2487  
    2488       INTEGER  ::   ji, jj, jk           ! dummy loop argument 
     2418      INTEGER  ::   ji, jj, jk       ! dummy loop argument 
    24892419      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
    2490  
    24912420      REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 
    24922421      REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw 
    2493  
    2494       CALL wrk_alloc( jpk, z_gsigw, z_gsigt, z_gsi3w                                      ) 
    2495       CALL wrk_alloc( jpk, z_esigt, z_esigw                                               ) 
     2422      !!---------------------------------------------------------------------- 
     2423 
     2424      CALL wrk_alloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
     2425      CALL wrk_alloc( jpk,   z_esigt, z_esigw ) 
    24962426 
    24972427      z_gsigw  = 0._wp   ;   z_gsigt  = 0._wp   ;   z_gsi3w  = 0._wp 
     
    25232453         zcoeft = ( REAL(jk,wp) - 0.5_wp ) / REAL(jpkm1,wp) 
    25242454         zcoefw = ( REAL(jk,wp) - 1.0_wp ) / REAL(jpkm1,wp) 
    2525          gdept_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
    2526          gdepw_0 (:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
    2527          gdep3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
     2455         gdept_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigt(jk) + hift(:,:)*zcoeft ) 
     2456         gdepw_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsigw(jk) + hift(:,:)*zcoefw ) 
     2457         gde3w_0(:,:,jk) = ( scosrf(:,:) + (hbatt(:,:)-hift(:,:))*z_gsi3w(jk) + hift(:,:)*zcoeft ) 
    25282458      END DO 
    25292459!!gm: e3uw, e3vw can be suppressed  (modif in dynzdf, dynzdf_iso, zdfbfr) (save 2 3D arrays) 
     
    25422472         END DO 
    25432473      END DO 
    2544  
    2545       CALL wrk_dealloc( jpk, z_gsigw, z_gsigt, z_gsi3w                                      ) 
    2546       CALL wrk_dealloc( jpk, z_esigt, z_esigw                                               ) 
    2547  
     2474      ! 
     2475      CALL wrk_dealloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
     2476      CALL wrk_dealloc( jpk,   z_esigt, z_esigw          ) 
     2477      ! 
    25482478   END SUBROUTINE s_tanh 
     2479 
    25492480 
    25502481   FUNCTION fssig( pk ) RESULT( pf ) 
     
    26182549      REAL(wp), INTENT(in   ) ::   pk1(jpk)       ! continuous "k" coordinate 
    26192550      REAL(wp)                ::   p_gamma(jpk)   ! stretched coordinate 
    2620       REAL(wp), INTENT(in   ) ::   pzb           ! Bottom box depth 
    2621       REAL(wp), INTENT(in   ) ::   pzs           ! surface box depth 
    2622       REAL(wp), INTENT(in   ) ::   psmth       ! Smoothing parameter 
    2623       REAL(wp)                ::   za1,za2,za3    ! local variables 
    2624       REAL(wp)                ::   zn1,zn2        ! local variables 
    2625       REAL(wp)                ::   za,zb,zx       ! local variables 
    2626       integer                 ::   jk 
    2627       !!---------------------------------------------------------------------- 
    2628       ! 
    2629  
    2630       zn1  =  1./(jpk-1.) 
    2631       zn2  =  1. -  zn1 
    2632  
     2551      REAL(wp), INTENT(in   ) ::   pzb            ! Bottom box depth 
     2552      REAL(wp), INTENT(in   ) ::   pzs            ! surface box depth 
     2553      REAL(wp), INTENT(in   ) ::   psmth          ! Smoothing parameter 
     2554      ! 
     2555      INTEGER  ::   jk             ! dummy loop index 
     2556      REAL(wp) ::   za1,za2,za3    ! local scalar 
     2557      REAL(wp) ::   zn1,zn2        !   -      -  
     2558      REAL(wp) ::   za,zb,zx       !   -      -  
     2559      !!---------------------------------------------------------------------- 
     2560      ! 
     2561      zn1  =  1._wp / REAL( jpkm1, wp ) 
     2562      zn2  =  1._wp -  zn1 
     2563      ! 
    26332564      za1 = (rn_alpha+2.0_wp)*zn1**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn1**(rn_alpha+2.0_wp)  
    26342565      za2 = (rn_alpha+2.0_wp)*zn2**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn2**(rn_alpha+2.0_wp) 
    26352566      za3 = (zn2**3.0_wp - za2)/( zn1**3.0_wp - za1) 
    2636       
     2567      ! 
    26372568      za = pzb - za3*(pzs-za1)-za2 
    26382569      za = za/( zn2-0.5_wp*(za2+zn2**2.0_wp) - za3*(zn1-0.5_wp*(za1+zn1**2.0_wp) ) ) 
    26392570      zb = (pzs - za1 - za*( zn1-0.5_wp*(za1+zn1**2.0_wp ) ) ) / (zn1**3.0_wp - za1) 
    26402571      zx = 1.0_wp-za/2.0_wp-zb 
    2641   
     2572      ! 
    26422573      DO jk = 1, jpk 
    2643         p_gamma(jk) = za*(pk1(jk)*(1.0_wp-pk1(jk)/2.0_wp))+zb*pk1(jk)**3.0_wp +  & 
    2644                     & zx*( (rn_alpha+2.0_wp)*pk1(jk)**(rn_alpha+1.0_wp)- & 
    2645                     &      (rn_alpha+1.0_wp)*pk1(jk)**(rn_alpha+2.0_wp) ) 
     2574         p_gamma(jk) = za*(pk1(jk)*(1.0_wp-pk1(jk)/2.0_wp))+zb*pk1(jk)**3.0_wp +  & 
     2575            &          zx*( (rn_alpha+2.0_wp)*pk1(jk)**(rn_alpha+1.0_wp)- & 
     2576            &               (rn_alpha+1.0_wp)*pk1(jk)**(rn_alpha+2.0_wp) ) 
    26462577        p_gamma(jk) = p_gamma(jk)*psmth+pk1(jk)*(1.0_wp-psmth) 
    2647       ENDDO  
    2648  
     2578      END DO 
    26492579      ! 
    26502580   END FUNCTION fgamma 
Note: See TracChangeset for help on using the changeset viewer.