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 4990 for trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2014-12-15T17:42:49+01:00 (9 years ago)
Author:
timgraham
Message:

Merged branches/2014/dev_MERGE_2014 back onto the trunk as follows:

In the working copy of branch ran:
svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk@HEAD
1 conflict in LIM_SRC_3/limdiahsb.F90
Resolved by keeping the version from dev_MERGE_2014 branch
and commited at r4989

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

Run:
svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2014/dev_MERGE_2014
to merge the branch into the trunk - no conflicts at this stage.

File:
1 edited

Legend:

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

    r4687 r4990  
    3535   USE oce               ! ocean variables 
    3636   USE dom_oce           ! ocean domain 
     37   USE sbc_oce           ! surface variable (isf) 
    3738   USE closea            ! closed seas 
    3839   USE c1d               ! 1D vertical configuration 
     
    101102      INTEGER ::   ios 
    102103      ! 
    103       NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco 
     104      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 
    104105      !!---------------------------------------------------------------------- 
    105106      ! 
     
    120121         WRITE(numout,*) '~~~~~~~' 
    121122         WRITE(numout,*) '          Namelist namzgr : set vertical coordinate' 
    122          WRITE(numout,*) '             z-coordinate - full steps      ln_zco = ', ln_zco 
    123          WRITE(numout,*) '             z-coordinate - partial steps   ln_zps = ', ln_zps 
    124          WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco = ', ln_sco 
     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 
    125127      ENDIF 
    126128 
     
    145147      IF( .NOT.lk_c1d )   CALL zgr_bat_ctl      ! check bathymetry (mbathy) and suppress isolated ocean points 
    146148                          CALL zgr_bot_level    ! deepest ocean level for t-, u- and v-points 
     149                          CALL zgr_top_level    ! shallowest ocean level for T-, U-, V- points 
    147150      ! 
    148151      IF( lk_c1d ) THEN                         ! 1D config.: same mbathy value over the 3x3 domain 
     
    294297         gdepw_1d(1) = 0._wp                    ! force first w-level to be exactly at zero 
    295298      ENDIF 
     299 
     300! need to be like this to compute the pressure gradient with ISF. If not, level beneath the ISF are not aligned (sum(e3t) /= depth) 
     301! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively 
     302      DO jk = 1, jpkm1 
     303         e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk)  
     304      END DO 
     305      e3t_1d(jpk) = e3t_1d(jpk-1)   ! we don't care because this level is masked in NEMO 
     306 
     307      DO jk = 2, jpk 
     308         e3w_1d(jk) = gdept_1d(jk) - gdept_1d(jk-1)  
     309      END DO 
     310      e3w_1d(1  ) = 2._wp * (gdept_1d(1) - gdepw_1d(1))  
    296311 
    297312!!gm BUG in s-coordinate this does not work! 
     
    451466         END DO 
    452467         ! 
     468         ! (ISF) TODO build ice draft netcdf file for isomip and build the corresponding part of code 
     469         IF( cp_cfg == "isomip" ) THEN  
     470           !  
     471           risfdep(:,:)=200.e0  
     472           misfdep(:,:)=1  
     473           ij0 = 1 ; ij1 = 40  
     474           DO jj = mj0(ij0), mj1(ij1)  
     475              risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp  
     476                END DO  
     477            WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp  
     478           !  
     479         ELSEIF ( cp_cfg == "isomip2" ) THEN 
     480         !  
     481            risfdep(:,:)=0.e0 
     482            misfdep(:,:)=1 
     483            ij0 = 1 ; ij1 = 40 
     484            DO jj = mj0(ij0), mj1(ij1) 
     485               risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp 
     486            END DO 
     487            WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
     488         END IF 
     489         ! 
    453490         !                                            ! ================ ! 
    454491      ELSEIF( ntopo == 1 ) THEN                       !   read in file   ! (over the local domain) 
     
    492529            CALL iom_get  ( inum, jpdom_data, 'Bathymetry', bathy ) 
    493530            CALL iom_close( inum ) 
    494             !                                                 
     531            !   
     532            risfdep(:,:)=0._wp          
     533            misfdep(:,:)=1              
     534            IF ( ln_isfcav ) THEN 
     535               CALL iom_open ( 'isf_draft_meter.nc', inum )  
     536               CALL iom_get  ( inum, jpdom_data, 'isf_draft', risfdep ) 
     537               CALL iom_close( inum ) 
     538               WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
     539            END IF 
     540            !        
    495541            IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
    496542               ! 
     
    530576      !                        
    531577      IF ( .not. ln_sco ) THEN                                !==  set a minimum depth  ==! 
     578         ! patch to avoid case bathy = ice shelf draft and bathy between 0 and zhmin 
     579         WHERE (bathy == risfdep) 
     580            bathy   = 0.0_wp ; risfdep = 0.0_wp 
     581         END WHERE 
     582         ! end patch 
    532583         IF( rn_hmin < 0._wp ) THEN    ;   ik = - INT( rn_hmin )                                      ! from a nb of level 
    533584         ELSE                          ;   ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 )  ! from a depth 
     
    783834   END SUBROUTINE zgr_bot_level 
    784835 
     836      SUBROUTINE zgr_top_level 
     837      !!---------------------------------------------------------------------- 
     838      !!                    ***  ROUTINE zgr_bot_level  *** 
     839      !! 
     840      !! ** Purpose :   defines the vertical index of ocean top (mik. arrays) 
     841      !! 
     842      !! ** Method  :   computes from misfdep with a minimum value of 1 
     843      !! 
     844      !! ** Action  :   mikt, miku, mikv :   vertical indices of the shallowest  
     845      !!                                     ocean level at t-, u- & v-points 
     846      !!                                     (min value = 1) 
     847      !!---------------------------------------------------------------------- 
     848      !! 
     849      INTEGER ::   ji, jj   ! dummy loop indices 
     850      REAL(wp), POINTER, DIMENSION(:,:) ::  zmik 
     851      !!---------------------------------------------------------------------- 
     852      ! 
     853      IF( nn_timing == 1 )  CALL timing_start('zgr_top_level') 
     854      ! 
     855      CALL wrk_alloc( jpi, jpj, zmik ) 
     856      ! 
     857      IF(lwp) WRITE(numout,*) 
     858      IF(lwp) WRITE(numout,*) '    zgr_top_level : ocean top k-index of T-, U-, V- and W-levels ' 
     859      IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~' 
     860      ! 
     861      mikt(:,:) = MAX( misfdep(:,:) , 1 )    ! top k-index of T-level (=1) 
     862      !                                      ! top k-index of W-level (=mikt) 
     863      DO jj = 1, jpjm1                       ! top k-index of U- (U-) level 
     864         DO ji = 1, jpim1 
     865            miku(ji,jj) = MAX(  mikt(ji+1,jj  ) , mikt(ji,jj)  ) 
     866            mikv(ji,jj) = MAX(  mikt(ji  ,jj+1) , mikt(ji,jj)  ) 
     867            mikf(ji,jj) = MAX(  mikt(ji  ,jj+1) , mikt(ji,jj), mikt(ji+1,jj  ), mikt(ji+1,jj+1)  ) 
     868         END DO 
     869      END DO 
     870 
     871      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
     872      zmik(:,:) = REAL( miku(:,:), wp )   ;   CALL lbc_lnk(zmik,'U',1.)   ;   miku  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     873      zmik(:,:) = REAL( mikv(:,:), wp )   ;   CALL lbc_lnk(zmik,'V',1.)   ;   mikv  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     874      zmik(:,:) = REAL( mikf(:,:), wp )   ;   CALL lbc_lnk(zmik,'F',1.)   ;   mikf  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     875      ! 
     876      CALL wrk_dealloc( jpi, jpj, zmik ) 
     877      ! 
     878      IF( nn_timing == 1 )  CALL timing_stop('zgr_top_level') 
     879      ! 
     880   END SUBROUTINE zgr_top_level 
    785881 
    786882   SUBROUTINE zgr_zco 
     
    861957      !!---------------------------------------------------------------------- 
    862958      !! 
    863       INTEGER  ::   ji, jj, jk       ! dummy loop indices 
     959      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    864960      INTEGER  ::   ik, it           ! temporary integers 
     961      INTEGER  ::   id, jd, nprocd 
     962      INTEGER  ::   icompt, ibtest, ibtestim1, ibtestip1, ibtestjm1, ibtestjp1   ! (ISF) 
    865963      LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    866964      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    867965      REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
    868       REAL(wp) ::   zmax             ! Maximum depth 
     966      REAL(wp) ::   zmax, zmin       ! Maximum and minimum depth 
    869967      REAL(wp) ::   zdiff            ! temporary scalar 
    870968      REAL(wp) ::   zrefdep          ! temporary scalar 
     969      REAL(wp) ::   zbathydiff, zrisfdepdiff  
     970      REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 3D workspace (ISH) 
     971      INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep   ! 3D workspace (ISH) 
    871972      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
    872973      !!--------------------------------------------------------------------- 
     
    875976      ! 
    876977      CALL wrk_alloc( jpi, jpj, jpk, zprt ) 
     978      CALL wrk_alloc( jpi, jpj, zbathy, zmask, zrisfdep) 
     979      CALL wrk_alloc( jpi, jpj, zmbathy, zmisfdep) 
    877980      ! 
    878981      IF(lwp) WRITE(numout,*) 
     
    889992      ENDIF 
    890993 
    891  
    892994      ! bathymetry in level (from bathy_meter) 
    893995      ! =================== 
     
    9061008         WHERE( 0._wp < bathy(:,:) .AND. bathy(:,:) <= zdepth )   mbathy(:,:) = jk-1 
    9071009      END DO 
     1010      ! (ISF) compute misfdep 
     1011      WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) .NE. 0) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
     1012      ELSEWHERE                      ;                          misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
     1013      END WHERE   
     1014 
     1015      ! Compute misfdep for ocean points (i.e. first wet level)  
     1016      ! find the first ocean level such that the first level thickness  
     1017      ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
     1018      ! e3t_0 is the reference level thickness  
     1019      DO jk = 2, jpkm1  
     1020         zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
     1021         WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
     1022      END DO  
     1023      WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) .GT. 0._wp) 
     1024         risfdep(:,:) = 0. ; misfdep(:,:) = 1 
     1025      END WHERE 
     1026  
     1027! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation 
     1028      icompt = 0  
     1029! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
     1030      DO jl = 1, 10      
     1031         WHERE (bathy(:,:) .EQ. risfdep(:,:) ) 
     1032            misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
     1033            mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     1034         END WHERE 
     1035         WHERE (mbathy(:,:) <= 0)  
     1036            misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
     1037            mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
     1038         ENDWHERE 
     1039         IF( lk_mpp ) THEN 
     1040            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1041            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1042            misfdep(:,:) = INT( zbathy(:,:) ) 
     1043            CALL lbc_lnk( risfdep, 'T', 1. ) 
     1044            CALL lbc_lnk( bathy, 'T', 1. ) 
     1045            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1046            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1047            mbathy(:,:) = INT( zbathy(:,:) ) 
     1048         ENDIF 
     1049         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
     1050            misfdep( 1 ,:) = misfdep(jpim1,:)           ! local domain is cyclic east-west  
     1051            misfdep(jpi,:) = misfdep(  2  ,:)  
     1052         ENDIF 
     1053  
     1054         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
     1055            mbathy( 1 ,:) = mbathy(jpim1,:)             ! local domain is cyclic east-west 
     1056            mbathy(jpi,:) = mbathy(  2  ,:) 
     1057         ENDIF 
     1058  
     1059         ! split last cell if possible (only where water column is 2 cell or less) 
     1060         DO jk = jpkm1, 1, -1 
     1061            zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1062            WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
     1063               mbathy(:,:) = jk 
     1064               bathy(:,:)  = zmax 
     1065            END WHERE 
     1066         END DO 
     1067  
     1068         ! split top cell if possible (only where water column is 2 cell or less) 
     1069         DO jk = 2, jpkm1 
     1070            zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1071            WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
     1072               misfdep(:,:) = jk 
     1073               risfdep(:,:) = zmax 
     1074            END WHERE 
     1075         END DO 
     1076  
     1077  
     1078 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
     1079         DO jj = 1, jpj 
     1080            DO ji = 1, jpi 
     1081               ! find the minimum change option: 
     1082               ! test bathy 
     1083               IF (risfdep(ji,jj) .GT. 1) THEN 
     1084               zbathydiff =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
     1085                 &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1086               zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
     1087                 &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1088  
     1089                  IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 
     1090                     IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1091                        bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
     1092                        mbathy(ji,jj)= mbathy(ji,jj) + 1 
     1093                     ELSE 
     1094                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
     1095                        misfdep(ji,jj) = misfdep(ji,jj) - 1 
     1096                     END IF 
     1097                  END IF 
     1098               END IF 
     1099            END DO 
     1100         END DO 
     1101  
     1102          ! At least 2 levels for water thickness at T, U, and V point. 
     1103         DO jj = 1, jpj 
     1104            DO ji = 1, jpi 
     1105               ! find the minimum change option: 
     1106               ! test bathy 
     1107               IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1108                  zbathydiff  =ABS(bathy(ji,jj)  - (gdepw_1d(mbathy (ji,jj)+1)& 
     1109                    & + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1110                  zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  )  & 
     1111                    & - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1112                  IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1113                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1114                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1115                  ELSE 
     1116                     misfdep(ji,jj)= misfdep(ji,jj) - 1 
     1117                     risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
     1118                  END IF 
     1119               ENDIF 
     1120            END DO 
     1121         END DO 
     1122  
     1123 ! point V mbathy(ji,jj) EQ misfdep(ji,jj+1)  
     1124         DO jj = 1, jpjm1 
     1125            DO ji = 1, jpim1 
     1126               IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1127                  zbathydiff =ABS(bathy(ji,jj    ) - (gdepw_1d(mbathy (ji,jj)+1)   & 
     1128                    &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
     1129                  zrisfdepdiff=ABS(risfdep(ji,jj+1) - (gdepw_1d(misfdep(ji,jj+1))  & 
     1130                    &  - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
     1131                  IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1132                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1133                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) & 
     1134                   &    + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
     1135                  ELSE 
     1136                     misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
     1137                     risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) & 
     1138                   &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
     1139                  END IF 
     1140               ENDIF 
     1141            END DO 
     1142         END DO 
     1143  
     1144         IF( lk_mpp ) THEN 
     1145            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1146            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1147            misfdep(:,:) = INT( zbathy(:,:) ) 
     1148            CALL lbc_lnk( risfdep, 'T', 1. ) 
     1149            CALL lbc_lnk( bathy, 'T', 1. ) 
     1150            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1151            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1152            mbathy(:,:) = INT( zbathy(:,:) ) 
     1153         ENDIF 
     1154 ! point V misdep(ji,jj) EQ mbathy(ji,jj+1)  
     1155         DO jj = 1, jpjm1 
     1156            DO ji = 1, jpim1 
     1157               IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1158                  zbathydiff =ABS(  bathy(ji,jj+1) - (gdepw_1d(mbathy (ji,jj+1)+1) & 
     1159                   &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
     1160                  zrisfdepdiff=ABS(risfdep(ji,jj  ) - (gdepw_1d(misfdep(ji,jj  )  )  & 
     1161                   &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
     1162                  IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1163                     mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
     1164                     bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
     1165                  ELSE 
     1166                     misfdep(ji,jj)   = misfdep(ji,jj) - 1 
     1167                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
     1168                  END IF 
     1169               ENDIF 
     1170            END DO 
     1171         END DO 
     1172  
     1173  
     1174         IF( lk_mpp ) THEN  
     1175            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1176            CALL lbc_lnk( zbathy, 'T', 1. )  
     1177            misfdep(:,:) = INT( zbathy(:,:) )  
     1178            CALL lbc_lnk( risfdep, 'T', 1. )  
     1179            CALL lbc_lnk( bathy, 'T', 1. ) 
     1180            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1181            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1182            mbathy(:,:) = INT( zbathy(:,:) ) 
     1183         ENDIF  
     1184  
     1185 ! point U mbathy(ji,jj) EQ misfdep(ji,jj+1)  
     1186         DO jj = 1, jpjm1 
     1187            DO ji = 1, jpim1 
     1188               IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1189                  zbathydiff =ABS(  bathy(ji  ,jj) - (gdepw_1d(mbathy (ji,jj)+1) & 
     1190                    &   + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
     1191                  zrisfdepdiff=ABS(risfdep(ji+1,jj) - (gdepw_1d(misfdep(ji+1,jj)) & 
     1192                    &  - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
     1193                  IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1194                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1195                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1196                  ELSE 
     1197                     misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
     1198                     risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
     1199                  END IF 
     1200               ENDIF 
     1201            ENDDO 
     1202         ENDDO 
     1203  
     1204         IF( lk_mpp ) THEN  
     1205            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1206            CALL lbc_lnk( zbathy, 'T', 1. )  
     1207            misfdep(:,:) = INT( zbathy(:,:) )  
     1208            CALL lbc_lnk( risfdep, 'T', 1. )  
     1209            CALL lbc_lnk( bathy, 'T', 1. ) 
     1210            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1211            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1212            mbathy(:,:) = INT( zbathy(:,:) ) 
     1213         ENDIF  
     1214  
     1215 ! point U misfdep(ji,jj) EQ bathy(ji,jj+1)  
     1216         DO jj = 1, jpjm1 
     1217            DO ji = 1, jpim1 
     1218               IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1219                  zbathydiff =ABS(  bathy(ji+1,jj) - (gdepw_1d(mbathy (ji+1,jj)+1) & 
     1220                      &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
     1221                  zrisfdepdiff=ABS(risfdep(ji  ,jj) - (gdepw_1d(misfdep(ji  ,jj)  )  & 
     1222                      &  - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
     1223                  IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1224                     mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
     1225                     bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  )  & 
     1226                      &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
     1227                  ELSE 
     1228                     misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
     1229                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) & 
     1230                      &   - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
     1231                  END IF 
     1232               ENDIF 
     1233            ENDDO 
     1234         ENDDO 
     1235  
     1236         IF( lk_mpp ) THEN 
     1237            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1238            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1239            misfdep(:,:) = INT( zbathy(:,:) ) 
     1240            CALL lbc_lnk( risfdep, 'T', 1. ) 
     1241            CALL lbc_lnk( bathy, 'T', 1. ) 
     1242            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1243            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1244            mbathy(:,:) = INT( zbathy(:,:) ) 
     1245         ENDIF 
     1246      END DO 
     1247      ! end dig bathy/ice shelf to be compatible 
     1248      ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
     1249      DO jl = 1,20 
     1250  
     1251 ! remove single point "bay" on isf coast line in the ice shelf draft' 
     1252         DO jk = 1, jpk 
     1253            WHERE (misfdep==0) misfdep=jpk 
     1254            zmask=0 
     1255            WHERE (misfdep .LE. jk) zmask=1 
     1256            DO jj = 2, jpjm1 
     1257               DO ji = 2, jpim1 
     1258                  IF (misfdep(ji,jj) .EQ. jk) THEN 
     1259                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1260                     IF (ibtest .LE. 1) THEN 
     1261                        risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
     1262                        IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) misfdep(ji,jj) = jpk 
     1263                     END IF 
     1264                  END IF 
     1265               END DO 
     1266            END DO 
     1267         END DO 
     1268         WHERE (misfdep==jpk) 
     1269             misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
     1270         END WHERE 
     1271         IF( lk_mpp ) THEN 
     1272            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1273            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1274            misfdep(:,:) = INT( zbathy(:,:) ) 
     1275            CALL lbc_lnk( risfdep, 'T', 1. ) 
     1276            CALL lbc_lnk( bathy, 'T', 1. ) 
     1277            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1278            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1279            mbathy(:,:) = INT( zbathy(:,:) ) 
     1280         ENDIF 
     1281  
     1282 ! remove single point "bay" on bathy coast line beneath an ice shelf' 
     1283         DO jk = jpk,1,-1 
     1284            zmask=0 
     1285            WHERE (mbathy .GE. jk ) zmask=1 
     1286            DO jj = 2, jpjm1 
     1287               DO ji = 2, jpim1 
     1288                  IF (mbathy(ji,jj) .EQ. jk .AND. misfdep(ji,jj) .GE. 2) THEN 
     1289                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1290                     IF (ibtest .LE. 1) THEN 
     1291                        bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
     1292                        IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) mbathy(ji,jj) = 0 
     1293                     END IF 
     1294                  END IF 
     1295               END DO 
     1296            END DO 
     1297         END DO 
     1298         WHERE (mbathy==0) 
     1299             misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
     1300         END WHERE 
     1301         IF( lk_mpp ) THEN 
     1302            zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1303            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1304            misfdep(:,:) = INT( zbathy(:,:) ) 
     1305            CALL lbc_lnk( risfdep, 'T', 1. ) 
     1306            CALL lbc_lnk( bathy, 'T', 1. ) 
     1307            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1308            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1309            mbathy(:,:) = INT( zbathy(:,:) ) 
     1310         ENDIF 
     1311  
     1312 ! fill hole in ice shelf 
     1313         zmisfdep = misfdep 
     1314         zrisfdep = risfdep 
     1315         WHERE (zmisfdep .LE. 1) zmisfdep=jpk 
     1316         DO jj = 2, jpjm1 
     1317            DO ji = 2, jpim1 
     1318               ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
     1319               ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
     1320               IF( zmisfdep(ji,jj) .GE. mbathy(ji-1,jj  ) ) ibtestim1 = jpk!MAX(0, mbathy(ji-1,jj  ) - 1) 
     1321               IF( zmisfdep(ji,jj) .GE. mbathy(ji+1,jj  ) ) ibtestip1 = jpk!MAX(0, mbathy(ji+1,jj  ) - 1) 
     1322               IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj-1) ) ibtestjm1 = jpk!MAX(0, mbathy(ji  ,jj-1) - 1) 
     1323               IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj+1) ) ibtestjp1 = jpk!MAX(0, mbathy(ji  ,jj+1) - 1) 
     1324               ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1325               IF( ibtest == jpk .AND. misfdep(ji,jj) .GE. 2) THEN 
     1326                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
     1327               END IF 
     1328               IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) .GE. 2) THEN 
     1329                  misfdep(ji,jj) = ibtest 
     1330                  risfdep(ji,jj) = gdepw_1d(ibtest) 
     1331               ENDIF 
     1332            ENDDO 
     1333         ENDDO 
     1334  
     1335         IF( lk_mpp ) THEN  
     1336            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1337            CALL lbc_lnk( zbathy, 'T', 1. )  
     1338            misfdep(:,:) = INT( zbathy(:,:) )  
     1339            CALL lbc_lnk( risfdep, 'T', 1. )  
     1340            CALL lbc_lnk( bathy, 'T', 1. ) 
     1341            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1342            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1343            mbathy(:,:) = INT( zbathy(:,:) ) 
     1344         ENDIF  
     1345 ! 
     1346 !! fill hole in bathymetry 
     1347         zmbathy (:,:)=mbathy (:,:) 
     1348         DO jj = 2, jpjm1 
     1349            DO ji = 2, jpim1 
     1350               ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
     1351               ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
     1352               IF( zmbathy(ji,jj) .LT. misfdep(ji-1,jj  ) ) ibtestim1 = 0!MIN(jpk-1, misfdep(ji-1,jj  ) + 1) 
     1353               IF( zmbathy(ji,jj) .LT. misfdep(ji+1,jj  ) ) ibtestip1 = 0 
     1354               IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
     1355               IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
     1356               ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1357               IF( ibtest == 0 ) THEN 
     1358                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
     1359               END IF 
     1360               IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) .GE. 2) THEN 
     1361                  mbathy(ji,jj) = ibtest 
     1362                  bathy(ji,jj)  = gdepw_1d(ibtest+1)  
     1363               ENDIF 
     1364            END DO 
     1365         END DO 
     1366         IF( lk_mpp ) THEN  
     1367            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1368            CALL lbc_lnk( zbathy, 'T', 1. )  
     1369            misfdep(:,:) = INT( zbathy(:,:) )  
     1370            CALL lbc_lnk( risfdep, 'T', 1. )  
     1371            CALL lbc_lnk( bathy, 'T', 1. ) 
     1372            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1373            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1374            mbathy(:,:) = INT( zbathy(:,:) ) 
     1375         ENDIF  
     1376 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1377         DO jj = 1, jpjm1 
     1378            DO ji = 1, jpim1 
     1379               IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
     1380                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1381               END IF 
     1382            END DO 
     1383         END DO 
     1384         IF( lk_mpp ) THEN  
     1385            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1386            CALL lbc_lnk( zbathy, 'T', 1. )  
     1387            misfdep(:,:) = INT( zbathy(:,:) )  
     1388            CALL lbc_lnk( risfdep, 'T', 1. )  
     1389            CALL lbc_lnk( bathy, 'T', 1. ) 
     1390            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1391            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1392            mbathy(:,:) = INT( zbathy(:,:) ) 
     1393         ENDIF  
     1394 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1395         DO jj = 1, jpjm1 
     1396            DO ji = 1, jpim1 
     1397               IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
     1398                  mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
     1399               END IF 
     1400            END DO 
     1401         END DO 
     1402         IF( lk_mpp ) THEN  
     1403            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1404            CALL lbc_lnk( zbathy, 'T', 1. )  
     1405            misfdep(:,:) = INT( zbathy(:,:) )  
     1406            CALL lbc_lnk( risfdep, 'T', 1. )  
     1407            CALL lbc_lnk( bathy, 'T', 1. ) 
     1408            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1409            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1410            mbathy(:,:) = INT( zbathy(:,:) ) 
     1411         ENDIF  
     1412 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1413         DO jj = 1, jpjm1 
     1414            DO ji = 1, jpi 
     1415               IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
     1416                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1417               END IF 
     1418            END DO 
     1419         END DO 
     1420         IF( lk_mpp ) THEN  
     1421            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1422            CALL lbc_lnk( zbathy, 'T', 1. )  
     1423            misfdep(:,:) = INT( zbathy(:,:) )  
     1424            CALL lbc_lnk( risfdep, 'T', 1. )  
     1425            CALL lbc_lnk( bathy, 'T', 1. ) 
     1426            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1427            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1428            mbathy(:,:) = INT( zbathy(:,:) ) 
     1429         ENDIF  
     1430 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1431         DO jj = 1, jpjm1 
     1432            DO ji = 1, jpi 
     1433               IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
     1434                  mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1)   = gdepw_1d(mbathy(ji,jj+1)+1) ; 
     1435               END IF 
     1436            END DO 
     1437         END DO 
     1438         IF( lk_mpp ) THEN  
     1439            zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1440            CALL lbc_lnk( zbathy, 'T', 1. )  
     1441            misfdep(:,:) = INT( zbathy(:,:) )  
     1442            CALL lbc_lnk( risfdep, 'T', 1. )  
     1443            CALL lbc_lnk( bathy, 'T', 1. ) 
     1444            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1445            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1446            mbathy(:,:) = INT( zbathy(:,:) ) 
     1447         ENDIF  
     1448 ! if not compatible after all check, mask T 
     1449         DO jj = 1, jpj 
     1450            DO ji = 1, jpi 
     1451               IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
     1452                  misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
     1453               END IF 
     1454            END DO 
     1455         END DO 
     1456  
     1457         WHERE (mbathy(:,:) == 1) 
     1458            mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
     1459         END WHERE 
     1460      END DO  
     1461! end check compatibility ice shelf/bathy 
     1462      ! remove very shallow ice shelf (less than ~ 10m if 75L) 
     1463      WHERE (misfdep(:,:) <= 5) 
     1464         misfdep = 1; risfdep = 0.0_wp; 
     1465      END WHERE 
     1466 
     1467      IF( icompt == 0 ) THEN  
     1468         IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
     1469      ELSE  
     1470         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
     1471      ENDIF  
    9081472 
    9091473      ! Scale factors and depth at T- and W-points 
     
    9381502!gm Bug?  check the gdepw_1d 
    9391503                  !       ... on 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) )) 
     1504                  gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) )   & 
     1505                     &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
     1506                     &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
    9431507                  e3t_0(ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
    9441508                     &                          / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
     
    9731537         END DO 
    9741538      END DO 
     1539      ! 
     1540      ! (ISF) Definition of e3t, u, v, w for ISF case 
     1541      DO jj = 1, jpj  
     1542         DO ji = 1, jpi  
     1543            ik = misfdep(ji,jj)  
     1544            IF( ik > 1 ) THEN               ! ice shelf point only  
     1545               IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
     1546               gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
     1547!gm Bug?  check the gdepw_0  
     1548               !       ... on ik  
     1549               gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
     1550                  &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
     1551                  &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
     1552               e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
     1553               e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
     1554 
     1555               IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
     1556                  e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
     1557                ENDIF  
     1558               !       ... on ik / ik-1  
     1559               e3w_0  (ji,jj,ik  ) = 2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
     1560               e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
     1561! The next line isn't required and doesn't affect results - included for consistency with bathymetry code  
     1562               gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 
     1563            ENDIF  
     1564         END DO  
     1565      END DO  
     1566      !  
     1567      it = 0  
     1568      DO jj = 1, jpj  
     1569         DO ji = 1, jpi  
     1570            ik = misfdep(ji,jj)  
     1571            IF( ik > 1 ) THEN               ! ice shelf point only  
     1572               e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
     1573               e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
     1574               ! test  
     1575               zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
     1576               IF( zdiff <= 0. .AND. lwp ) THEN   
     1577                  it = it + 1  
     1578                  WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
     1579                  WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
     1580                  WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
     1581                  WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
     1582               ENDIF  
     1583            ENDIF  
     1584         END DO  
     1585      END DO  
     1586      ! END (ISF) 
    9751587 
    9761588      ! Scale factors and depth at U-, V-, UW and VW-points 
     
    9911603         END DO 
    9921604      END DO 
     1605      ! (ISF) define e3uw 
     1606      DO jk = 2,jpk                           
     1607         DO jj = 1, jpjm1  
     1608            DO ji = 1, fs_jpim1   ! vector opt.  
     1609               e3uw_0(ji,jj,jk) = MIN( gdept_0(ji,jj,jk), gdept_0(ji+1,jj  ,jk) ) & 
     1610                 &   - MAX( gdept_0(ji,jj,jk-1), gdept_0(ji+1,jj  ,jk-1) ) 
     1611               e3vw_0(ji,jj,jk) = MIN( gdept_0(ji,jj,jk), gdept_0(ji  ,jj+1,jk) ) & 
     1612                 &   - MAX( gdept_0(ji,jj,jk-1), gdept_0(ji  ,jj+1,jk-1) ) 
     1613            END DO  
     1614         END DO  
     1615      END DO 
     1616      !End (ISF) 
     1617       
    9931618      CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
    9941619      CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
     
    10321657      
    10331658      ! Compute gdep3w_0 (vertical sum of e3w) 
    1034       gdep3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    1035       DO jk = 2, jpk 
    1036          gdep3w_0(:,:,jk) = gdep3w_0(:,:,jk-1) + e3w_0(:,:,jk)  
    1037       END DO 
    1038          
     1659      WHERE (misfdep == 0) misfdep = 1 
     1660      DO jj = 1,jpj 
     1661         DO ji = 1,jpi 
     1662            gdep3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
     1663            DO jk = 2, misfdep(ji,jj) 
     1664               gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1665            END DO 
     1666            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)) 
     1667            DO jk = misfdep(ji,jj) + 1, jpk 
     1668               gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1669            END DO 
     1670        END DO 
     1671      END DO 
    10391672      !                                               ! ================= ! 
    10401673      IF(lwp .AND. ll_print) THEN                     !   Control print   ! 
     
    10661699      ! 
    10671700      CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 
     1701      CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
     1702      CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 
    10681703      ! 
    10691704      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
Note: See TracChangeset for help on using the changeset viewer.