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

Ignore:
Timestamp:
2015-12-16T16:44:35+01:00 (9 years ago)
Author:
timgraham
Message:

Merge of dev_MetOffice_merge_2015 into branch (only NEMO directory for now).

File:
1 edited

Legend:

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

    r6060 r6069  
    382382      !!              - bathy : meter bathymetry (in meters) 
    383383      !!---------------------------------------------------------------------- 
    384       INTEGER  ::   ji, jj, jl, jk            ! dummy loop indices 
     384      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    385385      INTEGER  ::   inum                      ! temporary logical unit 
    386386      INTEGER  ::   ierror                    ! error flag 
     
    544544               CALL iom_close( inum ) 
    545545               WHERE( bathy(:,:) <= 0._wp )  risfdep(:,:) = 0._wp 
     546 
     547               ! set grounded point to 0  
     548               ! (a treshold could be set here if needed, or set it offline based on the grounded fraction) 
     549               WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin ) 
     550                  misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
     551                  mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     552               END WHERE 
    546553            END IF 
    547554            !        
     
    581588      !                        
    582589      IF ( .not. ln_sco ) THEN                                !==  set a minimum depth  ==! 
    583          ! patch to avoid case bathy = ice shelf draft and bathy between 0 and zhmin 
    584          IF ( ln_isfcav ) THEN 
    585             WHERE (bathy == risfdep) 
    586                bathy   = 0.0_wp ; risfdep = 0.0_wp 
    587             END WHERE 
    588          END IF 
    589          ! end patch 
    590590         IF( rn_hmin < 0._wp ) THEN    ;   ik = - INT( rn_hmin )                                      ! from a nb of level 
    591591         ELSE                          ;   ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 )  ! from a depth 
     
    830830   SUBROUTINE zgr_top_level 
    831831      !!---------------------------------------------------------------------- 
    832       !!                    ***  ROUTINE zgr_bot_level  *** 
     832      !!                    ***  ROUTINE zgr_top_level  *** 
    833833      !! 
    834834      !! ** Purpose :   defines the vertical index of ocean top (mik. arrays) 
     
    954954      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    955955      REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
    956       REAL(wp) ::   zmax             ! Maximum depth 
    957956      REAL(wp) ::   zdiff            ! temporary scalar 
    958       REAL(wp) ::   zrefdep          ! temporary scalar 
     957      REAL(wp) ::   zmax             ! temporary scalar 
    959958      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
    960959      !!--------------------------------------------------------------------- 
     
    986985      END DO 
    987986 
    988       IF ( ln_isfcav ) CALL zgr_isf 
    989  
    990987      ! Scale factors and depth at T- and W-points 
    991988      DO jk = 1, jpk                        ! intitialization to the reference z-coordinate 
     
    995992         e3w_0  (:,:,jk) = e3w_1d  (jk) 
    996993      END DO 
     994       
     995      ! Bathy, iceshelf draft, scale factor and depth at T- and W- points in case of isf 
     996      IF ( ln_isfcav ) CALL zgr_isf 
     997 
     998      ! Scale factors and depth at T- and W-points 
     999      IF ( .NOT. ln_isfcav ) THEN 
     1000         DO jj = 1, jpj 
     1001            DO ji = 1, jpi 
     1002               ik = mbathy(ji,jj) 
     1003               IF( ik > 0 ) THEN               ! ocean point only 
     1004                  ! max ocean level case 
     1005                  IF( ik == jpkm1 ) THEN 
     1006                     zdepwp = bathy(ji,jj) 
     1007                     ze3tp  = bathy(ji,jj) - gdepw_1d(ik) 
     1008                     ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) ) 
     1009                     e3t_0(ji,jj,ik  ) = ze3tp 
     1010                     e3t_0(ji,jj,ik+1) = ze3tp 
     1011                     e3w_0(ji,jj,ik  ) = ze3wp 
     1012                     e3w_0(ji,jj,ik+1) = ze3tp 
     1013                     gdepw_0(ji,jj,ik+1) = zdepwp 
     1014                     gdept_0(ji,jj,ik  ) = gdept_1d(ik-1) + ze3wp 
     1015                     gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp 
     1016                     ! 
     1017                  ELSE                         ! standard case 
     1018                     IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN  ;   gdepw_0(ji,jj,ik+1) = bathy(ji,jj) 
     1019                     ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
     1020                     ENDIF 
     1021   !gm Bug?  check the gdepw_1d 
     1022                     !       ... on ik 
     1023                     gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) )   & 
     1024                        &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
     1025                        &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
     1026                     e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
     1027                        &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
     1028                     e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
     1029                        &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
     1030                     !       ... on ik+1 
     1031                     e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     1032                     e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
     1033                     gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
     1034                  ENDIF 
     1035               ENDIF 
     1036            END DO 
     1037         END DO 
     1038         ! 
     1039         it = 0 
     1040         DO jj = 1, jpj 
     1041            DO ji = 1, jpi 
     1042               ik = mbathy(ji,jj) 
     1043               IF( ik > 0 ) THEN               ! ocean point only 
     1044                  e3tp (ji,jj) = e3t_0(ji,jj,ik) 
     1045                  e3wp (ji,jj) = e3w_0(ji,jj,ik) 
     1046                  ! test 
     1047                  zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik  ) 
     1048                  IF( zdiff <= 0._wp .AND. lwp ) THEN  
     1049                     it = it + 1 
     1050                     WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj 
     1051                     WRITE(numout,*) ' bathy = ', bathy(ji,jj) 
     1052                     WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 
     1053                     WRITE(numout,*) ' e3tp    = ', e3t_0  (ji,jj,ik), ' e3wp    = ', e3w_0  (ji,jj,ik  ) 
     1054                  ENDIF 
     1055               ENDIF 
     1056            END DO 
     1057         END DO 
     1058      END IF 
     1059      ! 
     1060      ! Scale factors and depth at U-, V-, UW and VW-points 
     1061      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     1062         e3u_0 (:,:,jk) = e3t_1d(jk) 
     1063         e3v_0 (:,:,jk) = e3t_1d(jk) 
     1064         e3uw_0(:,:,jk) = e3w_1d(jk) 
     1065         e3vw_0(:,:,jk) = e3w_1d(jk) 
     1066      END DO 
     1067 
     1068      DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
     1069         DO jj = 1, jpjm1 
     1070            DO ji = 1, fs_jpim1   ! vector opt. 
     1071               e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
     1072               e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
     1073               e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
     1074               e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
     1075            END DO 
     1076         END DO 
     1077      END DO 
     1078      IF ( ln_isfcav ) THEN 
     1079      ! (ISF) define e3uw (adapted for 2 cells in the water column) 
     1080         DO jj = 2, jpjm1  
     1081            DO ji = 2, fs_jpim1   ! vector opt.  
     1082               ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj)) 
     1083               ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj)) 
     1084               IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) & 
     1085                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) ) 
     1086               ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1)) 
     1087               ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1)) 
     1088               IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) & 
     1089                                       &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) ) 
     1090            END DO 
     1091         END DO 
     1092      END IF 
     1093 
     1094      CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     1095      CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
     1096      ! 
     1097 
     1098      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1099         WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
     1100         WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
     1101         WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
     1102         WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
     1103      END DO 
     1104       
     1105      ! Scale factor at F-point 
     1106      DO jk = 1, jpk                        ! initialisation to z-scale factors 
     1107         e3f_0(:,:,jk) = e3t_1d(jk) 
     1108      END DO 
     1109      DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
     1110         DO jj = 1, jpjm1 
     1111            DO ji = 1, fs_jpim1   ! vector opt. 
     1112               e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
     1113            END DO 
     1114         END DO 
     1115      END DO 
     1116      CALL lbc_lnk( e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
     1117      ! 
     1118      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     1119         WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
     1120      END DO 
     1121!!gm  bug ? :  must be a do loop with mj0,mj1 
    9971122      !  
     1123      e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
     1124      e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
     1125      e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
     1126      e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
     1127      e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
     1128 
     1129      ! Control of the sign 
     1130      IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
     1131      IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
     1132      IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
     1133      IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
     1134      
     1135      ! Compute gde3w_0 (vertical sum of e3w) 
     1136      IF ( ln_isfcav ) THEN ! if cavity 
     1137         WHERE( misfdep == 0 )   misfdep = 1 
     1138         DO jj = 1,jpj 
     1139            DO ji = 1,jpi 
     1140               gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
     1141               DO jk = 2, misfdep(ji,jj) 
     1142                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1143               END DO 
     1144               IF( misfdep(ji,jj) >= 2 )   gde3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 
     1145               DO jk = misfdep(ji,jj) + 1, jpk 
     1146                  gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     1147               END DO 
     1148            END DO 
     1149         END DO 
     1150      ELSE ! no cavity 
     1151         gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
     1152         DO jk = 2, jpk 
     1153            gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
     1154         END DO 
     1155      END IF 
     1156      ! 
     1157      CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
     1158      ! 
     1159      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
     1160      ! 
     1161   END SUBROUTINE zgr_zps 
     1162 
     1163 
     1164   SUBROUTINE zgr_isf 
     1165      !!---------------------------------------------------------------------- 
     1166      !!                    ***  ROUTINE zgr_isf  *** 
     1167      !!    
     1168      !! ** Purpose :   check the bathymetry in levels 
     1169      !!    
     1170      !! ** Method  :   THe water column have to contained at least 2 cells 
     1171      !!                Bathymetry and isfdraft are modified (dig/close) to respect 
     1172      !!                this criterion. 
     1173      !!    
     1174      !! ** Action  : - test compatibility between isfdraft and bathy  
     1175      !!              - bathy and isfdraft are modified 
     1176      !!---------------------------------------------------------------------- 
     1177      INTEGER  ::   ji, jj, jl, jk       ! dummy loop indices 
     1178      INTEGER  ::   ik, it               ! temporary integers 
     1179      INTEGER  ::   icompt, ibtest       ! (ISF) 
     1180      INTEGER  ::   ibtestim1, ibtestip1 ! (ISF) 
     1181      INTEGER  ::   ibtestjm1, ibtestjp1 ! (ISF) 
     1182      REAL(wp) ::   zdepth           ! Ajusted ocean depth to avoid too small e3t 
     1183      REAL(wp) ::   zmax             ! Maximum and minimum depth 
     1184      REAL(wp) ::   zbathydiff       ! isf temporary scalar 
     1185      REAL(wp) ::   zrisfdepdiff     ! isf temporary scalar 
     1186      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
     1187      REAL(wp) ::   zdepwp           ! Ajusted ocean depth to avoid too small e3t 
     1188      REAL(wp) ::   zdiff            ! temporary scalar 
     1189      REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
     1190      INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
     1191      !!--------------------------------------------------------------------- 
     1192      ! 
     1193      IF( nn_timing == 1 )   CALL timing_start('zgr_isf') 
     1194      ! 
     1195      CALL wrk_alloc( jpi,jpj,   zbathy, zmask, zrisfdep) 
     1196      CALL wrk_alloc( jpi,jpj,   zmisfdep, zmbathy ) 
     1197 
     1198      ! (ISF) compute misfdep 
     1199      WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
     1200      ELSEWHERE                      ;                         misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
     1201      END WHERE   
     1202 
     1203      ! Compute misfdep for ocean points (i.e. first wet level)  
     1204      ! find the first ocean level such that the first level thickness  
     1205      ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
     1206      ! e3t_0 is the reference level thickness  
     1207      DO jk = 2, jpkm1  
     1208         zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
     1209         WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
     1210      END DO  
     1211      WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) ) 
     1212         risfdep(:,:) = 0. ; misfdep(:,:) = 1 
     1213      END WHERE 
     1214 
     1215      ! remove very shallow ice shelf (less than ~ 10m if 75L) 
     1216      WHERE (risfdep(:,:) <= 10._wp .AND. misfdep(:,:) > 1) 
     1217         misfdep = 0; risfdep = 0.0_wp; 
     1218         mbathy  = 0; bathy   = 0.0_wp; 
     1219      END WHERE 
     1220      WHERE (bathy(:,:) <= 30.0_wp .AND. gphit < -60._wp) 
     1221         misfdep = 0; risfdep = 0.0_wp; 
     1222         mbathy  = 0; bathy   = 0.0_wp; 
     1223      END WHERE 
     1224  
     1225! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation 
     1226      icompt = 0  
     1227! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
     1228      DO jl = 1, 10      
     1229         ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments) 
     1230         WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin) 
     1231            misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
     1232            mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     1233         END WHERE 
     1234         WHERE (mbathy(:,:) <= 0)  
     1235            misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
     1236            mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
     1237         END WHERE 
     1238         IF( lk_mpp ) THEN 
     1239            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1240            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1241            misfdep(:,:) = INT( zbathy(:,:) ) 
     1242 
     1243            CALL lbc_lnk( risfdep,'T', 1. ) 
     1244            CALL lbc_lnk( bathy,  'T', 1. ) 
     1245 
     1246            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1247            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1248            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1249         ENDIF 
     1250         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
     1251            misfdep( 1 ,:) = misfdep(jpim1,:)            ! local domain is cyclic east-west  
     1252            misfdep(jpi,:) = misfdep(  2  ,:)  
     1253            mbathy( 1 ,:)  = mbathy(jpim1,:)             ! local domain is cyclic east-west 
     1254            mbathy(jpi,:)  = mbathy(  2  ,:) 
     1255         ENDIF 
     1256 
     1257         ! split last cell if possible (only where water column is 2 cell or less) 
     1258         ! if coupled to ice sheet, we do not modify the bathymetry (can be discuss). 
     1259         IF ( .NOT. ln_iscpl) THEN 
     1260            DO jk = jpkm1, 1, -1 
     1261               zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1262               WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
     1263                  mbathy(:,:) = jk 
     1264                  bathy(:,:)  = zmax 
     1265               END WHERE 
     1266            END DO 
     1267         END IF 
     1268  
     1269         ! split top cell if possible (only where water column is 2 cell or less) 
     1270         DO jk = 2, jpkm1 
     1271            zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
     1272            WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
     1273               misfdep(:,:) = jk 
     1274               risfdep(:,:) = zmax 
     1275            END WHERE 
     1276         END DO 
     1277 
     1278  
     1279 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
     1280         DO jj = 1, jpj 
     1281            DO ji = 1, jpi 
     1282               ! find the minimum change option: 
     1283               ! test bathy 
     1284               IF (risfdep(ji,jj) > 1) THEN 
     1285                  IF ( .NOT. ln_iscpl ) THEN 
     1286                     zbathydiff  =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
     1287                         &            + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1288                     zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
     1289                         &            - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1290                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
     1291                        IF (zbathydiff <= zrisfdepdiff) THEN 
     1292                           bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
     1293                           mbathy(ji,jj)= mbathy(ji,jj) + 1 
     1294                        ELSE 
     1295                           risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
     1296                           misfdep(ji,jj) = misfdep(ji,jj) - 1 
     1297                        END IF 
     1298                     ENDIF 
     1299                  ELSE 
     1300                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) <  misfdep(ji,jj)) THEN 
     1301                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
     1302                        misfdep(ji,jj) = misfdep(ji,jj) - 1 
     1303                     END IF 
     1304                  END IF 
     1305               END IF 
     1306            END DO 
     1307         END DO 
     1308  
     1309         ! At least 2 levels for water thickness at T, U, and V point. 
     1310         DO jj = 1, jpj 
     1311            DO ji = 1, jpi 
     1312               ! find the minimum change option: 
     1313               ! test bathy 
     1314               IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1315                  IF ( .NOT. ln_iscpl ) THEN  
     1316                     zbathydiff  =ABS(bathy(ji,jj)   - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1317                         &                             + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
     1318                     zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj)  ) &  
     1319                         &                             - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
     1320                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1321                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1322                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1323                     ELSE 
     1324                        misfdep(ji,jj)= misfdep(ji,jj) - 1 
     1325                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
     1326                     END IF 
     1327                  ELSE 
     1328                     misfdep(ji,jj)= misfdep(ji,jj) - 1 
     1329                     risfdep(ji,jj)= gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
     1330                  END IF 
     1331               ENDIF 
     1332            END DO 
     1333         END DO 
     1334  
     1335 ! point V mbathy(ji,jj) == misfdep(ji,jj+1)  
     1336         DO jj = 1, jpjm1 
     1337            DO ji = 1, jpim1 
     1338               IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1339                  IF ( .NOT. ln_iscpl ) THEN  
     1340                     zbathydiff  =ABS(bathy(ji,jj    ) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1341                          &                              + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
     1342                     zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) & 
     1343                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
     1344                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1345                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1346                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
     1347                     ELSE 
     1348                        misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
     1349                        risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
     1350                     END IF 
     1351                  ELSE 
     1352                     misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
     1353                     risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
     1354                  END IF 
     1355               ENDIF 
     1356            END DO 
     1357         END DO 
     1358  
     1359         IF( lk_mpp ) THEN 
     1360            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1361            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1362            misfdep(:,:) = INT( zbathy(:,:) ) 
     1363 
     1364            CALL lbc_lnk( risfdep,'T', 1. ) 
     1365            CALL lbc_lnk( bathy,  'T', 1. ) 
     1366 
     1367            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1368            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1369            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1370         ENDIF 
     1371 ! point V misdep(ji,jj) == mbathy(ji,jj+1)  
     1372         DO jj = 1, jpjm1 
     1373            DO ji = 1, jpim1 
     1374               IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN 
     1375                  IF ( .NOT. ln_iscpl ) THEN  
     1376                     zbathydiff  =ABS(  bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) & 
     1377                           &                             + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
     1378                     zrisfdepdiff=ABS(risfdep(ji,jj  ) - ( gdepw_1d(misfdep(ji,jj  )  ) & 
     1379                           &                             - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
     1380                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1381                        mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
     1382                        bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
     1383                     ELSE 
     1384                        misfdep(ji,jj)   = misfdep(ji,jj) - 1 
     1385                        risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
     1386                     END IF 
     1387                  ELSE 
     1388                     misfdep(ji,jj)   = misfdep(ji,jj) - 1 
     1389                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
     1390                  END IF 
     1391               ENDIF 
     1392            END DO 
     1393         END DO 
     1394  
     1395  
     1396         IF( lk_mpp ) THEN  
     1397            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1398            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1399            misfdep(:,:) = INT( zbathy(:,:) ) 
     1400 
     1401            CALL lbc_lnk( risfdep,'T', 1. ) 
     1402            CALL lbc_lnk( bathy,  'T', 1. ) 
     1403 
     1404            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1405            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1406            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1407         ENDIF  
     1408  
     1409 ! point U mbathy(ji,jj) == misfdep(ji,jj+1)  
     1410         DO jj = 1, jpjm1 
     1411            DO ji = 1, jpim1 
     1412               IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1413                  IF ( .NOT. ln_iscpl ) THEN  
     1414                  zbathydiff  =ABS(  bathy(ji  ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     1415                       &                              + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
     1416                  zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) & 
     1417                       &                              - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
     1418                  IF (zbathydiff <= zrisfdepdiff) THEN 
     1419                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
     1420                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     1421                  ELSE 
     1422                     misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
     1423                     risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
     1424                  END IF 
     1425                  ELSE 
     1426                     misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
     1427                     risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
     1428                  ENDIF 
     1429               ENDIF 
     1430            ENDDO 
     1431         ENDDO 
     1432  
     1433         IF( lk_mpp ) THEN  
     1434            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1435            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1436            misfdep(:,:) = INT( zbathy(:,:) ) 
     1437 
     1438            CALL lbc_lnk( risfdep,'T', 1. ) 
     1439            CALL lbc_lnk( bathy,  'T', 1. ) 
     1440 
     1441            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1442            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1443            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1444         ENDIF  
     1445  
     1446 ! point U misfdep(ji,jj) == bathy(ji,jj+1)  
     1447         DO jj = 1, jpjm1 
     1448            DO ji = 1, jpim1 
     1449               IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) > 1) THEN 
     1450                  IF ( .NOT. ln_iscpl ) THEN  
     1451                     zbathydiff  =ABS(  bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) & 
     1452                          &                              + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
     1453                     zrisfdepdiff=ABS(risfdep(ji  ,jj) - ( gdepw_1d(misfdep(ji  ,jj)  ) & 
     1454                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
     1455                     IF (zbathydiff <= zrisfdepdiff) THEN 
     1456                        mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
     1457                        bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
     1458                     ELSE 
     1459                        misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
     1460                        risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
     1461                     END IF 
     1462                  ELSE 
     1463                     misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
     1464                     risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
     1465                  ENDIF 
     1466               ENDIF 
     1467            ENDDO 
     1468         ENDDO 
     1469  
     1470         IF( lk_mpp ) THEN 
     1471            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1472            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1473            misfdep(:,:) = INT( zbathy(:,:) ) 
     1474 
     1475            CALL lbc_lnk( risfdep,'T', 1. ) 
     1476            CALL lbc_lnk( bathy,  'T', 1. ) 
     1477 
     1478            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1479            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1480            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1481         ENDIF 
     1482      END DO 
     1483      ! end dig bathy/ice shelf to be compatible 
     1484      ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
     1485      DO jl = 1,20 
     1486  
     1487 ! remove single point "bay" on isf coast line in the ice shelf draft' 
     1488         DO jk = 2, jpk 
     1489            WHERE (misfdep==0) misfdep=jpk 
     1490            zmask=0._wp 
     1491            WHERE (misfdep <= jk) zmask=1 
     1492            DO jj = 2, jpjm1 
     1493               DO ji = 2, jpim1 
     1494                  IF (misfdep(ji,jj) == jk) THEN 
     1495                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1496                     IF (ibtest <= 1) THEN 
     1497                        risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
     1498                        IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk 
     1499                     END IF 
     1500                  END IF 
     1501               END DO 
     1502            END DO 
     1503         END DO 
     1504         WHERE (misfdep==jpk) 
     1505             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
     1506         END WHERE 
     1507         IF( lk_mpp ) THEN 
     1508            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1509            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1510            misfdep(:,:) = INT( zbathy(:,:) ) 
     1511 
     1512            CALL lbc_lnk( risfdep,'T', 1. ) 
     1513            CALL lbc_lnk( bathy,  'T', 1. ) 
     1514 
     1515            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1516            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1517            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1518         ENDIF 
     1519  
     1520 ! remove single point "bay" on bathy coast line beneath an ice shelf' 
     1521         DO jk = jpk,1,-1 
     1522            zmask=0._wp 
     1523            WHERE (mbathy >= jk ) zmask=1 
     1524            DO jj = 2, jpjm1 
     1525               DO ji = 2, jpim1 
     1526                  IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN 
     1527                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
     1528                     IF (ibtest <= 1) THEN 
     1529                        bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
     1530                        IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 0 
     1531                     END IF 
     1532                  END IF 
     1533               END DO 
     1534            END DO 
     1535         END DO 
     1536         WHERE (mbathy==0) 
     1537             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
     1538         END WHERE 
     1539         IF( lk_mpp ) THEN 
     1540            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
     1541            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1542            misfdep(:,:) = INT( zbathy(:,:) ) 
     1543 
     1544            CALL lbc_lnk( risfdep,'T', 1. ) 
     1545            CALL lbc_lnk( bathy,  'T', 1. ) 
     1546 
     1547            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1548            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1549            mbathy(:,:)  = INT( zbathy(:,:) ) 
     1550         ENDIF 
     1551  
     1552 ! fill hole in ice shelf 
     1553         zmisfdep = misfdep 
     1554         zrisfdep = risfdep 
     1555         WHERE (zmisfdep <= 1._wp) zmisfdep=jpk 
     1556         DO jj = 2, jpjm1 
     1557            DO ji = 2, jpim1 
     1558               ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
     1559               ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
     1560               IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj  ) ) ibtestim1 = jpk 
     1561               IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj  ) ) ibtestip1 = jpk 
     1562               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj-1) ) ibtestjm1 = jpk 
     1563               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj+1) ) ibtestjp1 = jpk 
     1564               ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1565               IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN 
     1566                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
     1567               END IF 
     1568               IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN 
     1569                  misfdep(ji,jj) = ibtest 
     1570                  risfdep(ji,jj) = gdepw_1d(ibtest) 
     1571               ENDIF 
     1572            ENDDO 
     1573         ENDDO 
     1574  
     1575         IF( lk_mpp ) THEN  
     1576            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1577            CALL lbc_lnk( zbathy,  'T', 1. )  
     1578            misfdep(:,:) = INT( zbathy(:,:) )  
     1579 
     1580            CALL lbc_lnk( risfdep, 'T', 1. )  
     1581            CALL lbc_lnk( bathy,   'T', 1. ) 
     1582 
     1583            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1584            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1585            mbathy(:,:) = INT( zbathy(:,:) ) 
     1586         ENDIF  
     1587 ! 
     1588 !! fill hole in bathymetry 
     1589         zmbathy (:,:)=mbathy (:,:) 
     1590         DO jj = 2, jpjm1 
     1591            DO ji = 2, jpim1 
     1592               ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
     1593               ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
     1594               IF( zmbathy(ji,jj) <  misfdep(ji-1,jj  ) ) ibtestim1 = 0 
     1595               IF( zmbathy(ji,jj) <  misfdep(ji+1,jj  ) ) ibtestip1 = 0 
     1596               IF( zmbathy(ji,jj) <  misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
     1597               IF( zmbathy(ji,jj) <  misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
     1598               ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
     1599               IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN 
     1600                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
     1601               END IF 
     1602               IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN 
     1603                  mbathy(ji,jj) = ibtest 
     1604                  bathy(ji,jj)  = gdepw_1d(ibtest+1)  
     1605               ENDIF 
     1606            END DO 
     1607         END DO 
     1608         IF( lk_mpp ) THEN  
     1609            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1610            CALL lbc_lnk( zbathy,  'T', 1. )  
     1611            misfdep(:,:) = INT( zbathy(:,:) )  
     1612 
     1613            CALL lbc_lnk( risfdep, 'T', 1. )  
     1614            CALL lbc_lnk( bathy,   'T', 1. ) 
     1615 
     1616            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1617            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1618            mbathy(:,:) = INT( zbathy(:,:) ) 
     1619         ENDIF  
     1620 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1621         DO jj = 1, jpjm1 
     1622            DO ji = 1, jpim1 
     1623               IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
     1624                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1625               END IF 
     1626            END DO 
     1627         END DO 
     1628         IF( lk_mpp ) THEN  
     1629            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1630            CALL lbc_lnk( zbathy,  'T', 1. )  
     1631            misfdep(:,:) = INT( zbathy(:,:) )  
     1632 
     1633            CALL lbc_lnk( risfdep, 'T', 1. )  
     1634            CALL lbc_lnk( bathy,   'T', 1. ) 
     1635 
     1636            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1637            CALL lbc_lnk( zbathy,  'T', 1. ) 
     1638            mbathy(:,:) = INT( zbathy(:,:) ) 
     1639         ENDIF  
     1640 ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
     1641         DO jj = 1, jpjm1 
     1642            DO ji = 1, jpim1 
     1643               IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
     1644                  mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
     1645               END IF 
     1646            END DO 
     1647         END DO 
     1648         IF( lk_mpp ) THEN  
     1649            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1650            CALL lbc_lnk( zbathy, 'T', 1. )  
     1651            misfdep(:,:) = INT( zbathy(:,:) )  
     1652 
     1653            CALL lbc_lnk( risfdep,'T', 1. )  
     1654            CALL lbc_lnk( bathy,  'T', 1. ) 
     1655 
     1656            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1657            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1658            mbathy(:,:) = INT( zbathy(:,:) ) 
     1659         ENDIF  
     1660 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1661         DO jj = 1, jpjm1 
     1662            DO ji = 1, jpi 
     1663               IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
     1664                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
     1665               END IF 
     1666            END DO 
     1667         END DO 
     1668         IF( lk_mpp ) THEN  
     1669            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1670            CALL lbc_lnk( zbathy, 'T', 1. )  
     1671            misfdep(:,:) = INT( zbathy(:,:) )  
     1672 
     1673            CALL lbc_lnk( risfdep,'T', 1. )  
     1674            CALL lbc_lnk( bathy,  'T', 1. ) 
     1675 
     1676            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1677            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1678            mbathy(:,:) = INT( zbathy(:,:) ) 
     1679         ENDIF  
     1680 ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
     1681         DO jj = 1, jpjm1 
     1682            DO ji = 1, jpi 
     1683               IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
     1684                  mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ; 
     1685               END IF 
     1686            END DO 
     1687         END DO 
     1688         IF( lk_mpp ) THEN  
     1689            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1690            CALL lbc_lnk( zbathy, 'T', 1. )  
     1691            misfdep(:,:) = INT( zbathy(:,:) )  
     1692 
     1693            CALL lbc_lnk( risfdep,'T', 1. )  
     1694            CALL lbc_lnk( bathy,  'T', 1. ) 
     1695 
     1696            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1697            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1698            mbathy(:,:) = INT( zbathy(:,:) ) 
     1699         ENDIF  
     1700 ! if not compatible after all check, mask T 
     1701         DO jj = 1, jpj 
     1702            DO ji = 1, jpi 
     1703               IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
     1704                  misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
     1705               END IF 
     1706            END DO 
     1707         END DO 
     1708  
     1709         WHERE (mbathy(:,:) == 1) 
     1710            mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
     1711         END WHERE 
     1712      END DO  
     1713! end check compatibility ice shelf/bathy 
     1714      ! remove very shallow ice shelf (less than ~ 10m if 75L) 
     1715      WHERE (risfdep(:,:) <= 10._wp) 
     1716         misfdep = 1; risfdep = 0.0_wp; 
     1717      END WHERE 
     1718 
     1719      IF( icompt == 0 ) THEN  
     1720         IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
     1721      ELSE  
     1722         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
     1723      ENDIF  
     1724 
     1725      ! compute scale factor and depth at T- and W- points 
    9981726      DO jj = 1, jpj 
    9991727         DO ji = 1, jpi 
     
    10171745                  ELSE                                       ;   gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    10181746                  ENDIF 
     1747      !            gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 
    10191748!gm Bug?  check the gdepw_1d 
    10201749                  !       ... on ik 
     
    10221751                     &                             * ((gdept_1d(     ik  ) - gdepw_1d(ik) )   & 
    10231752                     &                             / ( gdepw_1d(     ik+1) - gdepw_1d(ik) )) 
    1024                   e3t_0  (ji,jj,ik) = e3t_1d  (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) )   &  
    1025                      &                             / ( gdepw_1d(      ik+1) - gdepw_1d(ik) )  
    1026                   e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) )   & 
    1027                      &                     * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 
     1753                  e3t_0  (ji,jj,ik  ) = gdepw_0(ji,jj,ik+1) - gdepw_1d(ik  ) 
     1754                  e3w_0  (ji,jj,ik  ) = gdept_0(ji,jj,ik  ) - gdept_1d(ik-1) 
    10281755                  !       ... on ik+1 
    10291756                  e3w_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    10301757                  e3t_0  (ji,jj,ik+1) = e3t_0  (ji,jj,ik) 
    1031                   gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 
    10321758               ENDIF 
    10331759            ENDIF 
     
    10551781      END DO 
    10561782      ! 
    1057       IF ( ln_isfcav ) THEN 
    10581783      ! (ISF) Definition of e3t, u, v, w for ISF case 
    1059          DO jj = 1, jpj  
    1060             DO ji = 1, jpi  
    1061                ik = misfdep(ji,jj)  
    1062                IF( ik > 1 ) THEN               ! ice shelf point only  
    1063                   IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
    1064                   gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
     1784      DO jj = 1, jpj  
     1785         DO ji = 1, jpi  
     1786            ik = misfdep(ji,jj)  
     1787            IF( ik > 1 ) THEN               ! ice shelf point only  
     1788               IF( risfdep(ji,jj) < gdepw_1d(ik) )  risfdep(ji,jj)= gdepw_1d(ik)  
     1789               gdepw_0(ji,jj,ik) = risfdep(ji,jj)  
    10651790!gm Bug?  check the gdepw_0  
    1066                !       ... on ik  
    1067                   gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
    1068                      &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
    1069                      &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
    1070                   e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
    1071                   e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
    1072  
    1073                   IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
    1074                      e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
    1075                   ENDIF  
    1076                !       ... on ik / ik-1  
    1077                   e3w_0  (ji,jj,ik  ) = 2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
    1078                   e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
     1791            !       ... on ik  
     1792               gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) )   &  
     1793                  &                               * ( gdepw_1d(ik+1) - gdept_1d(ik)      )   &  
     1794                  &                               / ( gdepw_1d(ik+1) - gdepw_1d(ik)      )  
     1795               e3t_0  (ji,jj,ik  ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik)  
     1796               e3w_0  (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 
     1797 
     1798               IF( ik + 1 == mbathy(ji,jj) ) THEN               ! ice shelf point only (2 cell water column)  
     1799                  e3w_0  (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik)  
     1800               ENDIF  
     1801            !       ... on ik / ik-1  
     1802               e3w_0  (ji,jj,ik  ) = e3t_0  (ji,jj,ik) !2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik))  
     1803               e3t_0  (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 
    10791804! The next line isn't required and doesn't affect results - included for consistency with bathymetry code  
    1080                   gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 
     1805               gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 
     1806            ENDIF  
     1807         END DO  
     1808      END DO  
     1809    
     1810      it = 0  
     1811      DO jj = 1, jpj  
     1812         DO ji = 1, jpi  
     1813            ik = misfdep(ji,jj)  
     1814            IF( ik > 1 ) THEN               ! ice shelf point only  
     1815               e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
     1816               e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
     1817            ! test  
     1818               zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
     1819               IF( zdiff <= 0. .AND. lwp ) THEN   
     1820                  it = it + 1  
     1821                  WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
     1822                  WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
     1823                  WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
     1824                  WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
    10811825               ENDIF  
    1082             END DO  
     1826            ENDIF  
    10831827         END DO  
    1084       !  
    1085          it = 0  
    1086          DO jj = 1, jpj  
    1087             DO ji = 1, jpi  
    1088                ik = misfdep(ji,jj)  
    1089                IF( ik > 1 ) THEN               ! ice shelf point only  
    1090                   e3tp (ji,jj) = e3t_0(ji,jj,ik  )  
    1091                   e3wp (ji,jj) = e3w_0(ji,jj,ik+1 )  
    1092                ! test  
    1093                   zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik  )  
    1094                   IF( zdiff <= 0. .AND. lwp ) THEN   
    1095                      it = it + 1  
    1096                      WRITE(numout,*) ' it      = ', it, ' ik      = ', ik, ' (i,j) = ', ji, jj  
    1097                      WRITE(numout,*) ' risfdep = ', risfdep(ji,jj)  
    1098                      WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff  
    1099                      WRITE(numout,*) ' e3tp  = ', e3tp(ji,jj), ' e3wp  = ', e3wp(ji,jj)  
    1100                   ENDIF  
    1101                ENDIF  
    1102             END DO  
    1103          END DO  
    1104       END IF 
    1105       ! END (ISF) 
    1106  
    1107       ! Scale factors and depth at U-, V-, UW and VW-points 
    1108       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1109          e3u_0 (:,:,jk) = e3t_1d(jk) 
    1110          e3v_0 (:,:,jk) = e3t_1d(jk) 
    1111          e3uw_0(:,:,jk) = e3w_1d(jk) 
    1112          e3vw_0(:,:,jk) = e3w_1d(jk) 
    1113       END DO 
    1114       DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
    1115          DO jj = 1, jpjm1 
    1116             DO ji = 1, fs_jpim1   ! vector opt. 
    1117                e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 
    1118                e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 
    1119                e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 
    1120                e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 
    1121             END DO 
    1122          END DO 
    1123       END DO 
    1124       IF ( ln_isfcav ) THEN 
    1125       ! (ISF) define e3uw (adapted for 2 cells in the water column) 
    1126          DO jj = 2, jpjm1  
    1127             DO ji = 2, fs_jpim1   ! vector opt.  
    1128                ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj)) 
    1129                ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj)) 
    1130                IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji+1,jj  ,ikb  ) ) & 
    1131                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj  ,ikb-1) ) 
    1132                ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1)) 
    1133                ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1)) 
    1134                IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) =  MIN( gdept_0(ji,jj,ikb  ), gdept_0(ji  ,jj+1,ikb  ) ) & 
    1135                                        &            - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji  ,jj+1,ikb-1) ) 
    1136             END DO 
    1137          END DO 
    1138       END IF 
    1139  
    1140       CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
    1141       CALL lbc_lnk( e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    1142       ! 
    1143       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1144          WHERE( e3u_0 (:,:,jk) == 0._wp )   e3u_0 (:,:,jk) = e3t_1d(jk) 
    1145          WHERE( e3v_0 (:,:,jk) == 0._wp )   e3v_0 (:,:,jk) = e3t_1d(jk) 
    1146          WHERE( e3uw_0(:,:,jk) == 0._wp )   e3uw_0(:,:,jk) = e3w_1d(jk) 
    1147          WHERE( e3vw_0(:,:,jk) == 0._wp )   e3vw_0(:,:,jk) = e3w_1d(jk) 
    1148       END DO 
    1149        
    1150       ! Scale factor at F-point 
    1151       DO jk = 1, jpk                        ! initialisation to z-scale factors 
    1152          e3f_0(:,:,jk) = e3t_1d(jk) 
    1153       END DO 
    1154       DO jk = 1, jpk                        ! Computed as the minimum of neighbooring V-scale factors 
    1155          DO jj = 1, jpjm1 
    1156             DO ji = 1, fs_jpim1   ! vector opt. 
    1157                e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 
    1158             END DO 
    1159          END DO 
    1160       END DO 
    1161       CALL lbc_lnk( e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
    1162       ! 
    1163       DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
    1164          WHERE( e3f_0(:,:,jk) == 0._wp )   e3f_0(:,:,jk) = e3t_1d(jk) 
    1165       END DO 
    1166 !!gm  bug ? :  must be a do loop with mj0,mj1 
    1167       !  
    1168       e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:)     ! we duplicate factor scales for jj = 1 and jj = 2 
    1169       e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)  
    1170       e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)  
    1171       e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)  
    1172       e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)  
    1173  
    1174       ! Control of the sign 
    1175       IF( MINVAL( e3t_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3t_0 <= 0' ) 
    1176       IF( MINVAL( e3w_0  (:,:,:) ) <= 0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   e3w_0 <= 0' ) 
    1177       IF( MINVAL( gdept_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdept_0 <  0' ) 
    1178       IF( MINVAL( gdepw_0(:,:,:) ) <  0._wp )   CALL ctl_stop( '    zgr_zps :   e r r o r   gdepw_0 <  0' ) 
    1179       
    1180       ! Compute gde3w_0 (vertical sum of e3w) 
    1181       IF ( ln_isfcav ) THEN ! if cavity 
    1182          WHERE( misfdep == 0 )   misfdep = 1 
    1183          DO jj = 1,jpj 
    1184             DO ji = 1,jpi 
    1185                gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 
    1186                DO jk = 2, misfdep(ji,jj) 
    1187                   gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1188                END DO 
    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)) 
    1190                DO jk = misfdep(ji,jj) + 1, jpk 
    1191                   gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    1192                END DO 
    1193             END DO 
    1194          END DO 
    1195       ELSE ! no cavity 
    1196          gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
    1197          DO jk = 2, jpk 
    1198             gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
    1199          END DO 
    1200       END IF 
    1201       ! 
    1202       CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
    1203       ! 
    1204       IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    1205       ! 
    1206    END SUBROUTINE zgr_zps 
    1207  
    1208  
    1209    SUBROUTINE zgr_isf 
    1210       !!---------------------------------------------------------------------- 
    1211       !!                    ***  ROUTINE zgr_isf  *** 
    1212       !!    
    1213       !! ** Purpose :   check the bathymetry in levels 
    1214       !!    
    1215       !! ** Method  :   THe water column have to contained at least 2 cells 
    1216       !!                Bathymetry and isfdraft are modified (dig/close) to respect 
    1217       !!                this criterion. 
    1218       !!                  
    1219       !!    
    1220       !! ** Action  : - test compatibility between isfdraft and bathy  
    1221       !!              - bathy and isfdraft are modified 
    1222       !!---------------------------------------------------------------------- 
    1223       INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    1224       INTEGER  ::   ik, it           ! temporary integers 
    1225       INTEGER  ::   id, jd, nprocd 
    1226       INTEGER  ::   icompt, ibtest, ibtestim1, ibtestip1, ibtestjm1, ibtestjp1   ! (ISF) 
    1227       REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    1228       REAL(wp) ::   zdepwp, zdepth   ! Ajusted ocean depth to avoid too small e3t 
    1229       REAL(wp) ::   zmax, zmin       ! Maximum and minimum depth 
    1230       REAL(wp) ::   zdiff            ! temporary scalar 
    1231       REAL(wp) ::   zrefdep          ! temporary scalar 
    1232       REAL(wp) ::   zbathydiff, zrisfdepdiff  ! isf temporary scalar 
    1233       REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
    1234       INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
    1235       !!--------------------------------------------------------------------- 
    1236       ! 
    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 ) 
    1241  
    1242  
    1243       ! (ISF) compute misfdep 
    1244       WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) .NE. 0) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
    1245       ELSEWHERE                      ;                          misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
    1246       END WHERE   
    1247  
    1248       ! Compute misfdep for ocean points (i.e. first wet level)  
    1249       ! find the first ocean level such that the first level thickness  
    1250       ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where  
    1251       ! e3t_0 is the reference level thickness  
    1252       DO jk = 2, jpkm1  
    1253          zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )  
    1254          WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
    12551828      END DO  
    1256       WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) > 0._wp) 
    1257          risfdep(:,:) = 0.   ;   misfdep(:,:) = 1 
    1258       END WHERE 
    1259   
    1260 ! 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 
    1261       icompt = 0  
    1262 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 
    1263       DO jl = 1, 10      
    1264          WHERE (bathy(:,:) == risfdep(:,:) ) 
    1265             misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    1266             mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
    1267          END WHERE 
    1268          WHERE (mbathy(:,:) <= 0)  
    1269             misfdep(:,:) = 0; risfdep(:,:) = 0._wp  
    1270             mbathy (:,:) = 0; bathy  (:,:) = 0._wp 
    1271          END WHERE 
    1272          IF( lk_mpp ) THEN 
    1273             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1274             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1275             misfdep(:,:) = INT( zbathy(:,:) ) 
    1276             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1277             CALL lbc_lnk( bathy, 'T', 1. ) 
    1278             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1279             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1280             mbathy(:,:) = INT( zbathy(:,:) ) 
    1281          ENDIF 
    1282          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
    1283             misfdep( 1 ,:) = misfdep(jpim1,:)           ! local domain is cyclic east-west  
    1284             misfdep(jpi,:) = misfdep(  2  ,:)  
    1285          ENDIF 
    1286  
    1287          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
    1288             mbathy( 1 ,:) = mbathy(jpim1,:)             ! local domain is cyclic east-west 
    1289             mbathy(jpi,:) = mbathy(  2  ,:) 
    1290          ENDIF 
    1291  
    1292          ! split last cell if possible (only where water column is 2 cell or less) 
    1293          DO jk = jpkm1, 1, -1 
    1294             zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1295             WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy) 
    1296                mbathy(:,:) = jk 
    1297                bathy(:,:)  = zmax 
    1298             END WHERE 
    1299          END DO 
    1300   
    1301          ! split top cell if possible (only where water column is 2 cell or less) 
    1302          DO jk = 2, jpkm1 
    1303             zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 
    1304             WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy) 
    1305                misfdep(:,:) = jk 
    1306                risfdep(:,:) = zmax 
    1307             END WHERE 
    1308          END DO 
    1309  
    1310   
    1311  ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 
    1312          DO jj = 1, jpj 
    1313             DO ji = 1, jpi 
    1314                ! find the minimum change option: 
    1315                ! test bathy 
    1316                IF (risfdep(ji,jj) > 1) THEN 
    1317                zbathydiff =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
    1318                  &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1319                zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  ) & 
    1320                  &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1321   
    1322                   IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN 
    1323                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1324                         bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
    1325                         mbathy(ji,jj)= mbathy(ji,jj) + 1 
    1326                      ELSE 
    1327                         risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
    1328                         misfdep(ji,jj) = misfdep(ji,jj) - 1 
    1329                      END IF 
    1330                   END IF 
    1331                END IF 
    1332             END DO 
    1333          END DO 
    1334   
    1335           ! At least 2 levels for water thickness at T, U, and V point. 
    1336          DO jj = 1, jpj 
    1337             DO ji = 1, jpi 
    1338                ! find the minimum change option: 
    1339                ! test bathy 
    1340                IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1341                   zbathydiff  =ABS(bathy(ji,jj)  - (gdepw_1d(mbathy (ji,jj)+1)& 
    1342                     & + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat ))) 
    1343                   zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj)  )  & 
    1344                     & - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1345                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1346                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1347                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1348                   ELSE 
    1349                      misfdep(ji,jj)= misfdep(ji,jj) - 1 
    1350                      risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat ) 
    1351                   END IF 
    1352                ENDIF 
    1353             END DO 
    1354          END DO 
    1355   
    1356  ! point V mbathy(ji,jj) EQ misfdep(ji,jj+1)  
    1357          DO jj = 1, jpjm1 
    1358             DO ji = 1, jpim1 
    1359                IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1360                   zbathydiff =ABS(bathy(ji,jj    ) - (gdepw_1d(mbathy (ji,jj)+1)   & 
    1361                     &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj  )+1)*e3zps_rat ))) 
    1362                   zrisfdepdiff=ABS(risfdep(ji,jj+1) - (gdepw_1d(misfdep(ji,jj+1))  & 
    1363                     &  - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
    1364                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1365                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1366                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) & 
    1367                    &    + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
    1368                   ELSE 
    1369                      misfdep(ji,jj+1)  = misfdep(ji,jj+1) - 1 
    1370                      risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) & 
    1371                    &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat ) 
    1372                   END IF 
    1373                ENDIF 
    1374             END DO 
    1375          END DO 
    1376   
    1377          IF( lk_mpp ) THEN 
    1378             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1379             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1380             misfdep(:,:) = INT( zbathy(:,:) ) 
    1381             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1382             CALL lbc_lnk( bathy, 'T', 1. ) 
    1383             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1384             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1385             mbathy(:,:) = INT( zbathy(:,:) ) 
    1386          ENDIF 
    1387  ! point V misdep(ji,jj) EQ mbathy(ji,jj+1)  
    1388          DO jj = 1, jpjm1 
    1389             DO ji = 1, jpim1 
    1390                IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1391                   zbathydiff =ABS(  bathy(ji,jj+1) - (gdepw_1d(mbathy (ji,jj+1)+1) & 
    1392                    &   + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ))) 
    1393                   zrisfdepdiff=ABS(risfdep(ji,jj  ) - (gdepw_1d(misfdep(ji,jj  )  )  & 
    1394                    &   - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
    1395                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1396                      mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
    1397                      bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
    1398                   ELSE 
    1399                      misfdep(ji,jj)   = misfdep(ji,jj) - 1 
    1400                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji,jj  )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )  )*e3zps_rat ) 
    1401                   END IF 
    1402                ENDIF 
    1403             END DO 
    1404          END DO 
    1405   
    1406   
    1407          IF( lk_mpp ) THEN  
    1408             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1409             CALL lbc_lnk( zbathy, 'T', 1. )  
    1410             misfdep(:,:) = INT( zbathy(:,:) )  
    1411             CALL lbc_lnk( risfdep, 'T', 1. )  
    1412             CALL lbc_lnk( bathy, 'T', 1. ) 
    1413             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1414             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1415             mbathy(:,:) = INT( zbathy(:,:) ) 
    1416          ENDIF  
    1417   
    1418  ! point U mbathy(ji,jj) EQ misfdep(ji,jj+1)  
    1419          DO jj = 1, jpjm1 
    1420             DO ji = 1, jpim1 
    1421                IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1422                   zbathydiff =ABS(  bathy(ji  ,jj) - (gdepw_1d(mbathy (ji,jj)+1) & 
    1423                     &   + MIN( e3zps_min, e3t_1d(mbathy (ji  ,jj)+1)*e3zps_rat ))) 
    1424                   zrisfdepdiff=ABS(risfdep(ji+1,jj) - (gdepw_1d(misfdep(ji+1,jj)) & 
    1425                     &  - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
    1426                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1427                      mbathy(ji,jj) = mbathy(ji,jj) + 1 
    1428                      bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
    1429                   ELSE 
    1430                      misfdep(ji+1,jj)= misfdep(ji+1,jj) - 1 
    1431                      risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat ) 
    1432                   END IF 
    1433                ENDIF 
    1434             ENDDO 
    1435          ENDDO 
    1436   
    1437          IF( lk_mpp ) THEN  
    1438             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1439             CALL lbc_lnk( zbathy, 'T', 1. )  
    1440             misfdep(:,:) = INT( zbathy(:,:) )  
    1441             CALL lbc_lnk( risfdep, 'T', 1. )  
    1442             CALL lbc_lnk( bathy, 'T', 1. ) 
    1443             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1444             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1445             mbathy(:,:) = INT( zbathy(:,:) ) 
    1446          ENDIF  
    1447   
    1448  ! point U misfdep(ji,jj) EQ bathy(ji,jj+1)  
    1449          DO jj = 1, jpjm1 
    1450             DO ji = 1, jpim1 
    1451                IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
    1452                   zbathydiff =ABS(  bathy(ji+1,jj) - (gdepw_1d(mbathy (ji+1,jj)+1) & 
    1453                       &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat ))) 
    1454                   zrisfdepdiff=ABS(risfdep(ji  ,jj) - (gdepw_1d(misfdep(ji  ,jj)  )  & 
    1455                       &  - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
    1456                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
    1457                      mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
    1458                      bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  )  & 
    1459                       &   + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
    1460                   ELSE 
    1461                      misfdep(ji,jj)   = misfdep(ji  ,jj) - 1 
    1462                      risfdep(ji,jj)   = gdepw_1d(misfdep(ji  ,jj)+1) & 
    1463                       &   - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)   )*e3zps_rat ) 
    1464                   END IF 
    1465                ENDIF 
    1466             ENDDO 
    1467          ENDDO 
    1468   
    1469          IF( lk_mpp ) THEN 
    1470             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1471             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1472             misfdep(:,:) = INT( zbathy(:,:) ) 
    1473             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1474             CALL lbc_lnk( bathy, 'T', 1. ) 
    1475             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1476             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1477             mbathy(:,:) = INT( zbathy(:,:) ) 
    1478          ENDIF 
    1479       END DO 
    1480       ! end dig bathy/ice shelf to be compatible 
    1481       ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness 
    1482       DO jl = 1,20 
    1483   
    1484  ! remove single point "bay" on isf coast line in the ice shelf draft' 
    1485          DO jk = 2, jpk 
    1486             WHERE (misfdep==0) misfdep=jpk 
    1487             zmask=0 
    1488             WHERE (misfdep .LE. jk) zmask=1 
    1489             DO jj = 2, jpjm1 
    1490                DO ji = 2, jpim1 
    1491                   IF (misfdep(ji,jj) .EQ. jk) THEN 
    1492                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1493                      IF (ibtest .LE. 1) THEN 
    1494                         risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
    1495                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) misfdep(ji,jj) = jpk 
    1496                      END IF 
    1497                   END IF 
    1498                END DO 
    1499             END DO 
    1500          END DO 
    1501          WHERE (misfdep==jpk) 
    1502              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
    1503          END WHERE 
    1504          IF( lk_mpp ) THEN 
    1505             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1506             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1507             misfdep(:,:) = INT( zbathy(:,:) ) 
    1508             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1509             CALL lbc_lnk( bathy, 'T', 1. ) 
    1510             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1511             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1512             mbathy(:,:) = INT( zbathy(:,:) ) 
    1513          ENDIF 
    1514   
    1515  ! remove single point "bay" on bathy coast line beneath an ice shelf' 
    1516          DO jk = jpk,1,-1 
    1517             zmask=0 
    1518             WHERE (mbathy .GE. jk ) zmask=1 
    1519             DO jj = 2, jpjm1 
    1520                DO ji = 2, jpim1 
    1521                   IF (mbathy(ji,jj) .EQ. jk .AND. misfdep(ji,jj) .GE. 2) THEN 
    1522                      ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1523                      IF (ibtest .LE. 1) THEN 
    1524                         bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
    1525                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) mbathy(ji,jj) = 0 
    1526                      END IF 
    1527                   END IF 
    1528                END DO 
    1529             END DO 
    1530          END DO 
    1531          WHERE (mbathy==0) 
    1532              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
    1533          END WHERE 
    1534          IF( lk_mpp ) THEN 
    1535             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
    1536             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1537             misfdep(:,:) = INT( zbathy(:,:) ) 
    1538             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1539             CALL lbc_lnk( bathy, 'T', 1. ) 
    1540             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1541             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1542             mbathy(:,:) = INT( zbathy(:,:) ) 
    1543          ENDIF 
    1544   
    1545  ! fill hole in ice shelf 
    1546          zmisfdep = misfdep 
    1547          zrisfdep = risfdep 
    1548          WHERE (zmisfdep .LE. 1) zmisfdep=jpk 
    1549          DO jj = 2, jpjm1 
    1550             DO ji = 2, jpim1 
    1551                ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
    1552                ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
    1553                IF( zmisfdep(ji,jj) .GE. mbathy(ji-1,jj  ) ) ibtestim1 = jpk!MAX(0, mbathy(ji-1,jj  ) - 1) 
    1554                IF( zmisfdep(ji,jj) .GE. mbathy(ji+1,jj  ) ) ibtestip1 = jpk!MAX(0, mbathy(ji+1,jj  ) - 1) 
    1555                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj-1) ) ibtestjm1 = jpk!MAX(0, mbathy(ji  ,jj-1) - 1) 
    1556                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj+1) ) ibtestjp1 = jpk!MAX(0, mbathy(ji  ,jj+1) - 1) 
    1557                ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1558                IF( ibtest == jpk .AND. misfdep(ji,jj) .GE. 2) THEN 
    1559                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
    1560                END IF 
    1561                IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) .GE. 2) THEN 
    1562                   misfdep(ji,jj) = ibtest 
    1563                   risfdep(ji,jj) = gdepw_1d(ibtest) 
    1564                ENDIF 
    1565             ENDDO 
    1566          ENDDO 
    1567   
    1568          IF( lk_mpp ) THEN  
    1569             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1570             CALL lbc_lnk( zbathy, 'T', 1. )  
    1571             misfdep(:,:) = INT( zbathy(:,:) )  
    1572             CALL lbc_lnk( risfdep, 'T', 1. )  
    1573             CALL lbc_lnk( bathy, 'T', 1. ) 
    1574             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1575             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1576             mbathy(:,:) = INT( zbathy(:,:) ) 
    1577          ENDIF  
    1578  ! 
    1579  !! fill hole in bathymetry 
    1580          zmbathy (:,:)=mbathy (:,:) 
    1581          DO jj = 2, jpjm1 
    1582             DO ji = 2, jpim1 
    1583                ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
    1584                ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
    1585                IF( zmbathy(ji,jj) .LT. misfdep(ji-1,jj  ) ) ibtestim1 = 0!MIN(jpk-1, misfdep(ji-1,jj  ) + 1) 
    1586                IF( zmbathy(ji,jj) .LT. misfdep(ji+1,jj  ) ) ibtestip1 = 0 
    1587                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
    1588                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
    1589                ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1590                IF( ibtest == 0 .AND. misfdep(ji,jj) .GE. 2) THEN 
    1591                   mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
    1592                END IF 
    1593                IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) .GE. 2) THEN 
    1594                   mbathy(ji,jj) = ibtest 
    1595                   bathy(ji,jj)  = gdepw_1d(ibtest+1)  
    1596                ENDIF 
    1597             END DO 
    1598          END DO 
    1599          IF( lk_mpp ) THEN  
    1600             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1601             CALL lbc_lnk( zbathy, 'T', 1. )  
    1602             misfdep(:,:) = INT( zbathy(:,:) )  
    1603             CALL lbc_lnk( risfdep, 'T', 1. )  
    1604             CALL lbc_lnk( bathy, 'T', 1. ) 
    1605             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1606             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1607             mbathy(:,:) = INT( zbathy(:,:) ) 
    1608          ENDIF  
    1609  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1610          DO jj = 1, jpjm1 
    1611             DO ji = 1, jpim1 
    1612                IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
    1613                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1614                END IF 
    1615             END DO 
    1616          END DO 
    1617          IF( lk_mpp ) THEN  
    1618             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1619             CALL lbc_lnk( zbathy, 'T', 1. )  
    1620             misfdep(:,:) = INT( zbathy(:,:) )  
    1621             CALL lbc_lnk( risfdep, 'T', 1. )  
    1622             CALL lbc_lnk( bathy, 'T', 1. ) 
    1623             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1624             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1625             mbathy(:,:) = INT( zbathy(:,:) ) 
    1626          ENDIF  
    1627  ! if not compatible after all check (ie U point water column less than 2 cells), mask U 
    1628          DO jj = 1, jpjm1 
    1629             DO ji = 1, jpim1 
    1630                IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
    1631                   mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
    1632                END IF 
    1633             END DO 
    1634          END DO 
    1635          IF( lk_mpp ) THEN  
    1636             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1637             CALL lbc_lnk( zbathy, 'T', 1. )  
    1638             misfdep(:,:) = INT( zbathy(:,:) )  
    1639             CALL lbc_lnk( risfdep, 'T', 1. )  
    1640             CALL lbc_lnk( bathy, 'T', 1. ) 
    1641             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1642             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1643             mbathy(:,:) = INT( zbathy(:,:) ) 
    1644          ENDIF  
    1645  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1646          DO jj = 1, jpjm1 
    1647             DO ji = 1, jpi 
    1648                IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
    1649                   mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    1650                END IF 
    1651             END DO 
    1652          END DO 
    1653          IF( lk_mpp ) THEN  
    1654             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1655             CALL lbc_lnk( zbathy, 'T', 1. )  
    1656             misfdep(:,:) = INT( zbathy(:,:) )  
    1657             CALL lbc_lnk( risfdep, 'T', 1. )  
    1658             CALL lbc_lnk( bathy, 'T', 1. ) 
    1659             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1660             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1661             mbathy(:,:) = INT( zbathy(:,:) ) 
    1662          ENDIF  
    1663  ! if not compatible after all check (ie V point water column less than 2 cells), mask V 
    1664          DO jj = 1, jpjm1 
    1665             DO ji = 1, jpi 
    1666                IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
    1667                   mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1)   = gdepw_1d(mbathy(ji,jj+1)+1) ; 
    1668                END IF 
    1669             END DO 
    1670          END DO 
    1671          IF( lk_mpp ) THEN  
    1672             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1673             CALL lbc_lnk( zbathy, 'T', 1. )  
    1674             misfdep(:,:) = INT( zbathy(:,:) )  
    1675             CALL lbc_lnk( risfdep, 'T', 1. )  
    1676             CALL lbc_lnk( bathy, 'T', 1. ) 
    1677             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1678             CALL lbc_lnk( zbathy, 'T', 1. ) 
    1679             mbathy(:,:) = INT( zbathy(:,:) ) 
    1680          ENDIF  
    1681  ! if not compatible after all check, mask T 
    1682          DO jj = 1, jpj 
    1683             DO ji = 1, jpi 
    1684                IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN 
    1685                   misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj)  = 0 ; bathy(ji,jj)   = 0._wp ; 
    1686                END IF 
    1687             END DO 
    1688          END DO 
    1689   
    1690          WHERE (mbathy(:,:) == 1) 
    1691             mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp 
    1692          END WHERE 
    1693       END DO  
    1694 ! end check compatibility ice shelf/bathy 
    1695       ! remove very shallow ice shelf (less than ~ 10m if 75L) 
    1696       WHERE (misfdep(:,:) <= 5) 
    1697          misfdep = 1; risfdep = 0.0_wp; 
    1698       END WHERE 
    1699  
    1700       IF( icompt == 0 ) THEN  
    1701          IF(lwp) WRITE(numout,*)'     no points with ice shelf too close to bathymetry'  
    1702       ELSE  
    1703          IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'  
    1704       ENDIF  
    17051829 
    17061830      CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
     
    17091833      IF( nn_timing == 1 )   CALL timing_stop('zgr_isf') 
    17101834      !       
    1711    END SUBROUTINE 
     1835   END SUBROUTINE zgr_isf 
    17121836 
    17131837 
Note: See TracChangeset for help on using the changeset viewer.