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 5945 for branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2015-11-29T20:44:49+01:00 (8 years ago)
Author:
mathiot
Message:

ice sheet coupling: changes based on reviewer comments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r5932 r5945  
    531531               ! set grounded point to 0  
    532532               ! (a treshold could be set here if needed, or set it offline based on the grounded fraction) 
    533                WHERE ( bathy(:,:) .LE. risfdep(:,:) + rn_isfhmin ) 
     533               WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin ) 
    534534                  misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    535535                  mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     
    824824   END SUBROUTINE zgr_bot_level 
    825825 
    826       SUBROUTINE zgr_top_level 
    827       !!---------------------------------------------------------------------- 
    828       !!                    ***  ROUTINE zgr_bot_level  *** 
     826   SUBROUTINE zgr_top_level 
     827      !!---------------------------------------------------------------------- 
     828      !!                    ***  ROUTINE zgr_top_level  *** 
    829829      !! 
    830830      !! ** Purpose :   defines the vertical index of ocean top (mik. arrays) 
     
    11491149                  gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
    11501150               END DO 
    1151                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)) 
     1151               IF (misfdep(ji,jj) >= 2) gdep3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 
    11521152               DO jk = misfdep(ji,jj) + 1, jpk 
    11531153                  gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)  
     
    12041204      !!                Bathymetry and isfdraft are modified (dig/close) to respect 
    12051205      !!                this criterion. 
    1206       !!                  
    12071206      !!    
    12081207      !! ** Action  : - test compatibility between isfdraft and bathy  
     
    12121211      INTEGER  ::   ji, jj, jl, jk       ! dummy loop indices 
    12131212      INTEGER  ::   ik, it               ! temporary integers 
    1214       INTEGER  ::   icompt, ibtest, ibtestim1, ibtestip1, ibtestjm1, ibtestjp1   ! (ISF) 
     1213      INTEGER  ::   icompt, ibtest       ! (ISF) 
     1214      INTEGER  ::   ibtestim1, ibtestip1 ! (ISF) 
     1215      INTEGER  ::   ibtestjm1, ibtestjp1 ! (ISF) 
    12151216      REAL(wp) ::   zdepth           ! Ajusted ocean depth to avoid too small e3t 
    12161217      REAL(wp) ::   zmax             ! Maximum and minimum depth 
    1217       REAL(wp) ::   zbathydiff, zrisfdepdiff  ! isf temporary scalar 
     1218      REAL(wp) ::   zbathydiff       ! isf temporary scalar 
     1219      REAL(wp) ::   zrisfdepdiff     ! isf temporary scalar 
    12181220      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
    12191221      REAL(wp) ::   zdepwp           ! Ajusted ocean depth to avoid too small e3t 
     
    12291231 
    12301232      ! (ISF) compute misfdep 
    1231       WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) .NE. 0) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
    1232       ELSEWHERE                      ;                          misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
     1233      WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
     1234      ELSEWHERE                      ;                         misfdep(:,:) = 2   ! iceshelf : initialize misfdep to second level  
    12331235      END WHERE   
    12341236 
     
    12411243         WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth )   misfdep(:,:) = jk+1  
    12421244      END DO  
    1243       WHERE (risfdep(:,:) <= e3t_1d(1) .AND. risfdep(:,:) .GT. 0._wp) 
     1245      WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) ) 
    12441246         risfdep(:,:) = 0. ; misfdep(:,:) = 1 
    12451247      END WHERE 
     
    12501252      DO jl = 1, 10      
    12511253         ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments) 
    1252          WHERE (bathy(:,:) .LE. risfdep(:,:) + rn_isfhmin) 
     1254         WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin) 
    12531255            misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp 
    12541256            mbathy (:,:) = 0 ; bathy  (:,:) = 0._wp 
     
    12591261         ENDWHERE 
    12601262         IF( lk_mpp ) THEN 
    1261             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1263            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    12621264            CALL lbc_lnk( zbathy, 'T', 1. ) 
    12631265            misfdep(:,:) = INT( zbathy(:,:) ) 
    1264             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1265             CALL lbc_lnk( bathy, 'T', 1. ) 
    1266             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1266 
     1267            CALL lbc_lnk( risfdep,'T', 1. ) 
     1268            CALL lbc_lnk( bathy,  'T', 1. ) 
     1269 
     1270            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    12671271            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1268             mbathy(:,:) = INT( zbathy(:,:) ) 
     1272            mbathy(:,:)  = INT( zbathy(:,:) ) 
    12691273         ENDIF 
     1274         ! JMM : lbc_lnk must do it ? no ??? 
    12701275         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN  
    1271             misfdep( 1 ,:) = misfdep(jpim1,:)           ! local domain is cyclic east-west  
     1276            misfdep( 1 ,:) = misfdep(jpim1,:)            ! local domain is cyclic east-west  
    12721277            misfdep(jpi,:) = misfdep(  2  ,:)  
    1273          ENDIF 
    1274  
    1275          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
    1276             mbathy( 1 ,:) = mbathy(jpim1,:)             ! local domain is cyclic east-west 
    1277             mbathy(jpi,:) = mbathy(  2  ,:) 
     1278            mbathy( 1 ,:)  = mbathy(jpim1,:)             ! local domain is cyclic east-west 
     1279            mbathy(jpi,:)  = mbathy(  2  ,:) 
    12781280         ENDIF 
    12791281 
     
    13051307               ! find the minimum change option: 
    13061308               ! test bathy 
    1307                IF (risfdep(ji,jj) .GT. 1) THEN 
     1309               IF (risfdep(ji,jj) > 1) THEN 
    13081310                  IF ( .NOT. ln_iscpl ) THEN 
    13091311                     zbathydiff  =ABS(bathy(ji,jj)   - (gdepw_1d(mbathy (ji,jj)+1) & 
     
    13121314                         &            - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    13131315  
    1314                      IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 
    1315                         IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1316                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN 
     1317                        IF (zbathydiff <= zrisfdepdiff) THEN 
    13161318                           bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 
    13171319                           mbathy(ji,jj)= mbathy(ji,jj) + 1 
     
    13221324                     ENDIF 
    13231325                  ELSE 
    1324                      IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 
     1326                     IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN 
    13251327                        risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ) 
    13261328                        misfdep(ji,jj) = misfdep(ji,jj) - 1 
     
    13311333         END DO 
    13321334  
    1333           ! At least 2 levels for water thickness at T, U, and V point. 
     1335         ! At least 2 levels for water thickness at T, U, and V point. 
    13341336         DO jj = 1, jpj 
    13351337            DO ji = 1, jpi 
    13361338               ! find the minimum change option: 
    13371339               ! test bathy 
    1338                IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1340               IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    13391341                  IF ( .NOT. ln_iscpl ) THEN  
    13401342                     zbathydiff  =ABS(bathy(ji,jj)   - ( gdepw_1d(mbathy (ji,jj)+1) & 
     
    13421344                     zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj)  ) &  
    13431345                         &                             - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat ))) 
    1344                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1346                     IF (zbathydiff <= zrisfdepdiff) THEN 
    13451347                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
    13461348                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     
    13601362         DO jj = 1, jpjm1 
    13611363            DO ji = 1, jpim1 
    1362                IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1364               IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    13631365                  IF ( .NOT. ln_iscpl ) THEN  
    13641366                     zbathydiff  =ABS(bathy(ji,jj    ) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     
    13661368                     zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) & 
    13671369                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat ))) 
    1368                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1370                     IF (zbathydiff <= zrisfdepdiff) THEN 
    13691371                        mbathy(ji,jj) = mbathy(ji,jj) + 1 
    13701372                        bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj  )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj   )+1)*e3zps_rat ) 
     
    13821384  
    13831385         IF( lk_mpp ) THEN 
    1384             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1386            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    13851387            CALL lbc_lnk( zbathy, 'T', 1. ) 
    13861388            misfdep(:,:) = INT( zbathy(:,:) ) 
    1387             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1388             CALL lbc_lnk( bathy, 'T', 1. ) 
    1389             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1389 
     1390            CALL lbc_lnk( risfdep,'T', 1. ) 
     1391            CALL lbc_lnk( bathy,  'T', 1. ) 
     1392 
     1393            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    13901394            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1391             mbathy(:,:) = INT( zbathy(:,:) ) 
     1395            mbathy(:,:)  = INT( zbathy(:,:) ) 
    13921396         ENDIF 
    13931397 ! point V misdep(ji,jj) EQ mbathy(ji,jj+1)  
    13941398         DO jj = 1, jpjm1 
    13951399            DO ji = 1, jpim1 
    1396                IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1400               IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN 
    13971401                  IF ( .NOT. ln_iscpl ) THEN  
    13981402                     zbathydiff  =ABS(  bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) & 
     
    14001404                     zrisfdepdiff=ABS(risfdep(ji,jj  ) - ( gdepw_1d(misfdep(ji,jj  )  ) & 
    14011405                           &                             - MIN( e3zps_min, e3t_1d(misfdep(ji,jj  )-1)*e3zps_rat ))) 
    1402                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1406                     IF (zbathydiff <= zrisfdepdiff) THEN 
    14031407                        mbathy (ji,jj+1) = mbathy(ji,jj+1) + 1 
    14041408                        bathy  (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat ) 
     
    14171421  
    14181422         IF( lk_mpp ) THEN  
    1419             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1420             CALL lbc_lnk( zbathy, 'T', 1. )  
    1421             misfdep(:,:) = INT( zbathy(:,:) )  
    1422             CALL lbc_lnk( risfdep, 'T', 1. )  
    1423             CALL lbc_lnk( bathy, 'T', 1. ) 
    1424             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1423            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    14251424            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1426             mbathy(:,:) = INT( zbathy(:,:) ) 
     1425            misfdep(:,:) = INT( zbathy(:,:) ) 
     1426 
     1427            CALL lbc_lnk( risfdep,'T', 1. ) 
     1428            CALL lbc_lnk( bathy,  'T', 1. ) 
     1429 
     1430            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1431            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1432            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14271433         ENDIF  
    14281434  
     
    14301436         DO jj = 1, jpjm1 
    14311437            DO ji = 1, jpim1 
    1432                IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1438               IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN 
    14331439                  IF ( .NOT. ln_iscpl ) THEN  
    14341440                  zbathydiff  =ABS(  bathy(ji  ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) & 
     
    14361442                  zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) & 
    14371443                       &                              - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat ))) 
    1438                   IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1444                  IF (zbathydiff <= zrisfdepdiff) THEN 
    14391445                     mbathy(ji,jj) = mbathy(ji,jj) + 1 
    14401446                     bathy(ji,jj)  = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat ) 
     
    14521458  
    14531459         IF( lk_mpp ) THEN  
    1454             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1455             CALL lbc_lnk( zbathy, 'T', 1. )  
    1456             misfdep(:,:) = INT( zbathy(:,:) )  
    1457             CALL lbc_lnk( risfdep, 'T', 1. )  
    1458             CALL lbc_lnk( bathy, 'T', 1. ) 
    1459             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1460            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    14601461            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1461             mbathy(:,:) = INT( zbathy(:,:) ) 
     1462            misfdep(:,:) = INT( zbathy(:,:) ) 
     1463 
     1464            CALL lbc_lnk( risfdep,'T', 1. ) 
     1465            CALL lbc_lnk( bathy,  'T', 1. ) 
     1466 
     1467            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
     1468            CALL lbc_lnk( zbathy, 'T', 1. ) 
     1469            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14621470         ENDIF  
    14631471  
     
    14651473         DO jj = 1, jpjm1 
    14661474            DO ji = 1, jpim1 
    1467                IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GT. 1) THEN 
     1475               IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) > 1) THEN 
    14681476                  IF ( .NOT. ln_iscpl ) THEN  
    14691477                     zbathydiff  =ABS(  bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) & 
     
    14711479                     zrisfdepdiff=ABS(risfdep(ji  ,jj) - ( gdepw_1d(misfdep(ji  ,jj)  ) & 
    14721480                          &                              - MIN( e3zps_min, e3t_1d(misfdep(ji  ,jj)-1)*e3zps_rat ))) 
    1473                      IF (zbathydiff .LE. zrisfdepdiff) THEN 
     1481                     IF (zbathydiff <= zrisfdepdiff) THEN 
    14741482                        mbathy(ji+1,jj)  = mbathy (ji+1,jj) + 1 
    14751483                        bathy (ji+1,jj)  = gdepw_1d(mbathy (ji+1,jj)  ) + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat ) 
     
    14871495  
    14881496         IF( lk_mpp ) THEN 
    1489             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1497            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    14901498            CALL lbc_lnk( zbathy, 'T', 1. ) 
    14911499            misfdep(:,:) = INT( zbathy(:,:) ) 
    1492             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1493             CALL lbc_lnk( bathy, 'T', 1. ) 
    1494             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1500 
     1501            CALL lbc_lnk( risfdep,'T', 1. ) 
     1502            CALL lbc_lnk( bathy,  'T', 1. ) 
     1503 
     1504            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    14951505            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1496             mbathy(:,:) = INT( zbathy(:,:) ) 
     1506            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14971507         ENDIF 
    14981508      END DO 
     
    15041514         DO jk = 2, jpk 
    15051515            WHERE (misfdep==0) misfdep=jpk 
    1506             zmask=0 
    1507             WHERE (misfdep .LE. jk) zmask=1 
     1516            zmask=0._wp 
     1517            WHERE (misfdep <= jk) zmask=1 
    15081518            DO jj = 2, jpjm1 
    15091519               DO ji = 2, jpim1 
    1510                   IF (misfdep(ji,jj) .EQ. jk) THEN 
     1520                  IF (misfdep(ji,jj) == jk) THEN 
    15111521                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1512                      IF (ibtest .LE. 1) THEN 
     1522                     IF (ibtest <= 1) THEN 
    15131523                        risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 
    1514                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) misfdep(ji,jj) = jpk 
     1524                        IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk 
    15151525                     END IF 
    15161526                  END IF 
     
    15191529         END DO 
    15201530         WHERE (misfdep==jpk) 
    1521              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
     1531             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
    15221532         END WHERE 
    15231533         IF( lk_mpp ) THEN 
    1524             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1534            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    15251535            CALL lbc_lnk( zbathy, 'T', 1. ) 
    15261536            misfdep(:,:) = INT( zbathy(:,:) ) 
    1527             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1528             CALL lbc_lnk( bathy, 'T', 1. ) 
    1529             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1537 
     1538            CALL lbc_lnk( risfdep,'T', 1. ) 
     1539            CALL lbc_lnk( bathy,  'T', 1. ) 
     1540 
     1541            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    15301542            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1531             mbathy(:,:) = INT( zbathy(:,:) ) 
     1543            mbathy(:,:)  = INT( zbathy(:,:) ) 
    15321544         ENDIF 
    15331545  
    15341546 ! remove single point "bay" on bathy coast line beneath an ice shelf' 
    15351547         DO jk = jpk,1,-1 
    1536             zmask=0 
    1537             WHERE (mbathy .GE. jk ) zmask=1 
     1548            zmask=0._wp 
     1549            WHERE (mbathy >= jk ) zmask=1 
    15381550            DO jj = 2, jpjm1 
    15391551               DO ji = 2, jpim1 
    1540                   IF (mbathy(ji,jj) .EQ. jk .AND. misfdep(ji,jj) .GE. 2) THEN 
     1552                  IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN 
    15411553                     ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 
    1542                      IF (ibtest .LE. 1) THEN 
     1554                     IF (ibtest <= 1) THEN 
    15431555                        bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-1 
    1544                         IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) mbathy(ji,jj) = 0 
     1556                        IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 0 
    15451557                     END IF 
    15461558                  END IF 
     
    15491561         END DO 
    15501562         WHERE (mbathy==0) 
    1551              misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0. 
     1563             misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 
    15521564         END WHERE 
    15531565         IF( lk_mpp ) THEN 
    1554             zbathy(:,:) = FLOAT( misfdep(:,:) ) 
     1566            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    15551567            CALL lbc_lnk( zbathy, 'T', 1. ) 
    15561568            misfdep(:,:) = INT( zbathy(:,:) ) 
    1557             CALL lbc_lnk( risfdep, 'T', 1. ) 
    1558             CALL lbc_lnk( bathy, 'T', 1. ) 
    1559             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     1569 
     1570            CALL lbc_lnk( risfdep,'T', 1. ) 
     1571            CALL lbc_lnk( bathy,  'T', 1. ) 
     1572 
     1573            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    15601574            CALL lbc_lnk( zbathy, 'T', 1. ) 
    1561             mbathy(:,:) = INT( zbathy(:,:) ) 
     1575            mbathy(:,:)  = INT( zbathy(:,:) ) 
    15621576         ENDIF 
    15631577  
     
    15651579         zmisfdep = misfdep 
    15661580         zrisfdep = risfdep 
    1567          WHERE (zmisfdep .LE. 1) zmisfdep=jpk 
     1581         WHERE (zmisfdep <= 1._wp) zmisfdep=jpk 
    15681582         DO jj = 2, jpjm1 
    15691583            DO ji = 2, jpim1 
    15701584               ibtestim1 = zmisfdep(ji-1,jj  ) ; ibtestip1 = zmisfdep(ji+1,jj  ) 
    15711585               ibtestjm1 = zmisfdep(ji  ,jj-1) ; ibtestjp1 = zmisfdep(ji  ,jj+1) 
    1572                IF( zmisfdep(ji,jj) .GE. mbathy(ji-1,jj  ) ) ibtestim1 = jpk 
    1573                IF( zmisfdep(ji,jj) .GE. mbathy(ji+1,jj  ) ) ibtestip1 = jpk 
    1574                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj-1) ) ibtestjm1 = jpk 
    1575                IF( zmisfdep(ji,jj) .GE. mbathy(ji  ,jj+1) ) ibtestjp1 = jpk 
     1586               IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj  ) ) ibtestim1 = jpk 
     1587               IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj  ) ) ibtestip1 = jpk 
     1588               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj-1) ) ibtestjm1 = jpk 
     1589               IF( zmisfdep(ji,jj) >= mbathy(ji  ,jj+1) ) ibtestjp1 = jpk 
    15761590               ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1577                IF( ibtest == jpk .AND. misfdep(ji,jj) .GE. 2) THEN 
     1591               IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN 
    15781592                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp 
    15791593               END IF 
    1580                IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) .GE. 2) THEN 
     1594               IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN 
    15811595                  misfdep(ji,jj) = ibtest 
    15821596                  risfdep(ji,jj) = gdepw_1d(ibtest) 
     
    15861600  
    15871601         IF( lk_mpp ) THEN  
    1588             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1589             CALL lbc_lnk( zbathy, 'T', 1. )  
     1602            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1603            CALL lbc_lnk( zbathy,  'T', 1. )  
    15901604            misfdep(:,:) = INT( zbathy(:,:) )  
     1605 
    15911606            CALL lbc_lnk( risfdep, 'T', 1. )  
    1592             CALL lbc_lnk( bathy, 'T', 1. ) 
     1607            CALL lbc_lnk( bathy,   'T', 1. ) 
     1608 
    15931609            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1594             CALL lbc_lnk( zbathy, 'T', 1. ) 
     1610            CALL lbc_lnk( zbathy,  'T', 1. ) 
    15951611            mbathy(:,:) = INT( zbathy(:,:) ) 
    15961612         ENDIF  
     
    16021618               ibtestim1 = zmbathy(ji-1,jj  ) ; ibtestip1 = zmbathy(ji+1,jj  ) 
    16031619               ibtestjm1 = zmbathy(ji  ,jj-1) ; ibtestjp1 = zmbathy(ji  ,jj+1) 
    1604                IF( zmbathy(ji,jj) .LT. misfdep(ji-1,jj  ) ) ibtestim1 = 0 
    1605                IF( zmbathy(ji,jj) .LT. misfdep(ji+1,jj  ) ) ibtestip1 = 0 
    1606                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
    1607                IF( zmbathy(ji,jj) .LT. misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
     1620               IF( zmbathy(ji,jj) < misfdep(ji-1,jj  ) ) ibtestim1 = 0 
     1621               IF( zmbathy(ji,jj) < misfdep(ji+1,jj  ) ) ibtestip1 = 0 
     1622               IF( zmbathy(ji,jj) < misfdep(ji  ,jj-1) ) ibtestjm1 = 0 
     1623               IF( zmbathy(ji,jj) < misfdep(ji  ,jj+1) ) ibtestjp1 = 0 
    16081624               ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1) 
    1609                IF( ibtest == 0 .AND. misfdep(ji,jj) .GE. 2) THEN 
     1625               IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN 
    16101626                  mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ; 
    16111627               END IF 
    1612                IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) .GE. 2) THEN 
     1628               IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN 
    16131629                  mbathy(ji,jj) = ibtest 
    16141630                  bathy(ji,jj)  = gdepw_1d(ibtest+1)  
     
    16171633         END DO 
    16181634         IF( lk_mpp ) THEN  
    1619             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1620             CALL lbc_lnk( zbathy, 'T', 1. )  
     1635            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1636            CALL lbc_lnk( zbathy,  'T', 1. )  
    16211637            misfdep(:,:) = INT( zbathy(:,:) )  
     1638 
    16221639            CALL lbc_lnk( risfdep, 'T', 1. )  
    1623             CALL lbc_lnk( bathy, 'T', 1. ) 
     1640            CALL lbc_lnk( bathy,   'T', 1. ) 
     1641 
    16241642            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1625             CALL lbc_lnk( zbathy, 'T', 1. ) 
     1643            CALL lbc_lnk( zbathy,  'T', 1. ) 
    16261644            mbathy(:,:) = INT( zbathy(:,:) ) 
    16271645         ENDIF  
     
    16291647         DO jj = 1, jpjm1 
    16301648            DO ji = 1, jpim1 
    1631                IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
     1649               IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
    16321650                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    16331651               END IF 
     
    16351653         END DO 
    16361654         IF( lk_mpp ) THEN  
    1637             zbathy(:,:) = FLOAT( misfdep(:,:) )  
    1638             CALL lbc_lnk( zbathy, 'T', 1. )  
     1655            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
     1656            CALL lbc_lnk( zbathy,  'T', 1. )  
    16391657            misfdep(:,:) = INT( zbathy(:,:) )  
     1658 
    16401659            CALL lbc_lnk( risfdep, 'T', 1. )  
    1641             CALL lbc_lnk( bathy, 'T', 1. ) 
     1660            CALL lbc_lnk( bathy,   'T', 1. ) 
     1661 
    16421662            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1643             CALL lbc_lnk( zbathy, 'T', 1. ) 
     1663            CALL lbc_lnk( zbathy,  'T', 1. ) 
    16441664            mbathy(:,:) = INT( zbathy(:,:) ) 
    16451665         ENDIF  
     
    16471667         DO jj = 1, jpjm1 
    16481668            DO ji = 1, jpim1 
    1649                IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji+1,jj) .GE. 1) THEN 
     1669               IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN 
    16501670                  mbathy(ji+1,jj)  = mbathy(ji+1,jj) - 1;   bathy(ji+1,jj)   = gdepw_1d(mbathy(ji+1,jj)+1) ; 
    16511671               END IF 
     
    16531673         END DO 
    16541674         IF( lk_mpp ) THEN  
    1655             zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1675            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    16561676            CALL lbc_lnk( zbathy, 'T', 1. )  
    16571677            misfdep(:,:) = INT( zbathy(:,:) )  
    1658             CALL lbc_lnk( risfdep, 'T', 1. )  
    1659             CALL lbc_lnk( bathy, 'T', 1. ) 
     1678 
     1679            CALL lbc_lnk( risfdep,'T', 1. )  
     1680            CALL lbc_lnk( bathy,  'T', 1. ) 
     1681 
    16601682            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    16611683            CALL lbc_lnk( zbathy, 'T', 1. ) 
     
    16651687         DO jj = 1, jpjm1 
    16661688            DO ji = 1, jpi 
    1667                IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
     1689               IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
    16681690                  mbathy(ji,jj)  = mbathy(ji,jj) - 1 ; bathy(ji,jj)   = gdepw_1d(mbathy(ji,jj)+1) ; 
    16691691               END IF 
     
    16711693         END DO 
    16721694         IF( lk_mpp ) THEN  
    1673             zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1695            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    16741696            CALL lbc_lnk( zbathy, 'T', 1. )  
    16751697            misfdep(:,:) = INT( zbathy(:,:) )  
    1676             CALL lbc_lnk( risfdep, 'T', 1. )  
    1677             CALL lbc_lnk( bathy, 'T', 1. ) 
     1698 
     1699            CALL lbc_lnk( risfdep,'T', 1. )  
     1700            CALL lbc_lnk( bathy,  'T', 1. ) 
     1701 
    16781702            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    16791703            CALL lbc_lnk( zbathy, 'T', 1. ) 
     
    16831707         DO jj = 1, jpjm1 
    16841708            DO ji = 1, jpi 
    1685                IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) .GE. 1 .AND. mbathy(ji,jj+1) .GE. 1) THEN 
    1686                   mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1)   = gdepw_1d(mbathy(ji,jj+1)+1) ; 
     1709               IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN 
     1710                  mbathy(ji,jj+1)  = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ; 
    16871711               END IF 
    16881712            END DO 
    16891713         END DO 
    16901714         IF( lk_mpp ) THEN  
    1691             zbathy(:,:) = FLOAT( misfdep(:,:) )  
     1715            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    16921716            CALL lbc_lnk( zbathy, 'T', 1. )  
    16931717            misfdep(:,:) = INT( zbathy(:,:) )  
    1694             CALL lbc_lnk( risfdep, 'T', 1. )  
    1695             CALL lbc_lnk( bathy, 'T', 1. ) 
     1718 
     1719            CALL lbc_lnk( risfdep,'T', 1. )  
     1720            CALL lbc_lnk( bathy,  'T', 1. ) 
     1721 
    16961722            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    16971723            CALL lbc_lnk( zbathy, 'T', 1. ) 
     
    18291855      IF( nn_timing == 1 )  CALL timing_stop('zgr_isf') 
    18301856       
    1831    END SUBROUTINE 
     1857   END SUBROUTINE zgr_isf 
    18321858 
    18331859   SUBROUTINE zgr_sco 
     
    21582184      fsde3w(:,:,:) = gdep3w_0(:,:,:) 
    21592185      ! 
    2160       where (e3t_0   (:,:,:).eq.0.0)  e3t_0(:,:,:) = 1.0 
    2161       where (e3u_0   (:,:,:).eq.0.0)  e3u_0(:,:,:) = 1.0 
    2162       where (e3v_0   (:,:,:).eq.0.0)  e3v_0(:,:,:) = 1.0 
    2163       where (e3f_0   (:,:,:).eq.0.0)  e3f_0(:,:,:) = 1.0 
    2164       where (e3w_0   (:,:,:).eq.0.0)  e3w_0(:,:,:) = 1.0 
    2165       where (e3uw_0  (:,:,:).eq.0.0)  e3uw_0(:,:,:) = 1.0 
    2166       where (e3vw_0  (:,:,:).eq.0.0)  e3vw_0(:,:,:) = 1.0 
     2186      where (e3t_0   (:,:,:) == 0.0)  e3t_0(:,:,:)  = 1.0_wp 
     2187      where (e3u_0   (:,:,:) == 0.0)  e3u_0(:,:,:)  = 1.0_wp 
     2188      where (e3v_0   (:,:,:) == 0.0)  e3v_0(:,:,:)  = 1.0_wp 
     2189      where (e3f_0   (:,:,:) == 0.0)  e3f_0(:,:,:)  = 1.0_wp 
     2190      where (e3w_0   (:,:,:) == 0.0)  e3w_0(:,:,:)  = 1.0_wp 
     2191      where (e3uw_0  (:,:,:) == 0.0)  e3uw_0(:,:,:) = 1.0_wp 
     2192      where (e3vw_0  (:,:,:) == 0.0)  e3vw_0(:,:,:) = 1.0_wp 
    21672193 
    21682194#if defined key_agrif 
Note: See TracChangeset for help on using the changeset viewer.