Changeset 5044


Ignore:
Timestamp:
2015-01-26T15:48:14+01:00 (6 years ago)
Author:
hliu
Message:

correct three potential bugs in vertical scale calculation when wetting/drying is on

File:
1 edited

Legend:

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

    r5014 r5044  
    15641564         DO jj = 1, jpj 
    15651565 
    1566             IF( hbatt(ji,jj) > 0._wp) THEN 
     1566            IF( bathy(ji,jj) > 0._wp) THEN 
    15671567               DO jk = 1, mbathy(ji,jj) 
    15681568                 ! check coordinate is monotonically increasing 
     
    16281628      INTEGER  ::   ji, jj, jk           ! dummy loop argument 
    16291629      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
    1630       REAL(wp) ::   ztmpu, ztmpv, ztmpf 
     1630      REAL(wp) ::   ztmpu,  ztmpv,  ztmpf 
     1631      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    16311632      ! 
    16321633      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
     
    16861687            ztmpv = hbatt(ji,jj)+hbatt(ji,jj+1) 
    16871688            ztmpf = hbatt(ji,jj)+hbatt(ji+1,jj)+hbatt(ji,jj+1)+hbatt(ji+1,jj+1) 
     1689            ztmpu1 = hbatt(ji,jj)*hbatt(ji+1,jj) 
     1690            ztmpv1 = hbatt(ji,jj)*hbatt(ji,jj+1) 
     1691            ztmpf1 = MIN(hbatt(ji,jj), hbatt(ji+1,jj), hbatt(ji,jj+1), hbatt(ji+1,jj+1)) * & 
     1692                   & MAX(hbatt(ji,jj), hbatt(ji+1,jj), hbatt(ji,jj+1), hbatt(ji+1,jj+1)) 
    16881693            DO jk = 1, jpk 
    1689                IF(ABS(ztmpu) < rn_wdmin1.AND.ln_wd) THEN 
     1694               IF((ztmpu1 < 0._wp.OR.ABS(ztmpu) < rn_wdmin1).AND.ln_wd) THEN 
    16901695                 z_esigtu3(ji,jj,jk) = 0.5_wp * ( z_esigt3(ji,jj,jk) + z_esigt3(ji+1,jj,jk) ) 
    16911696                 z_esigwu3(ji,jj,jk) = 0.5_wp * ( z_esigw3(ji,jj,jk) + z_esigw3(ji+1,jj,jk) ) 
     
    16971702               END IF 
    16981703 
    1699                IF(ABS(ztmpv) < rn_wdmin1.AND.ln_wd) THEN 
     1704               IF((ztmpv1 < 0._wp.OR.ABS(ztmpv) < rn_wdmin1).AND.ln_wd) THEN 
    17001705                 z_esigtv3(ji,jj,jk) = 0.5_wp * ( z_esigt3(ji,jj,jk) + z_esigt3(ji,jj+1,jk) ) 
    17011706                 z_esigwv3(ji,jj,jk) = 0.5_wp * ( z_esigw3(ji,jj,jk) + z_esigw3(ji,jj+1,jk) ) 
     
    17071712               END IF 
    17081713 
    1709                IF(ABS(ztmpf) < rn_wdmin1.AND.ln_wd) THEN 
     1714               IF((ztmpf1 < 0._wp.OR.ABS(ztmpf) < rn_wdmin1).AND.ln_wd) THEN 
    17101715                 z_esigtf3(ji,jj,jk) = 0.25_wp * ( z_esigt3(ji,jj,jk)   + z_esigt3(ji+1,jj,jk)  & 
    17111716                    &                            + z_esigt3(ji,jj+1,jk) + z_esigt3(ji+1,jj+1,jk) ) 
     
    17681773      REAL(wp) ::   zzs, zzb           ! Surface and bottom cell thickness in sigma space 
    17691774      REAL(wp) ::   ztmpu, ztmpv, ztmpf 
     1775      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    17701776      ! 
    17711777      REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
     
    18501856           ztmpv = hbatt(ji,jj)+hbatt(ji,jj+1) 
    18511857           ztmpf = hbatt(ji,jj)+hbatt(ji+1,jj)+hbatt(ji,jj+1)+hbatt(ji+1,jj+1) 
     1858           ztmpu1 = hbatt(ji,jj)*hbatt(ji+1,jj) 
     1859           ztmpv1 = hbatt(ji,jj)*hbatt(ji,jj+1) 
     1860           ztmpf1 = MIN(hbatt(ji,jj), hbatt(ji+1,jj), hbatt(ji,jj+1), hbatt(ji+1,jj+1)) * & 
     1861                  & MAX(hbatt(ji,jj), hbatt(ji+1,jj), hbatt(ji,jj+1), hbatt(ji+1,jj+1)) 
    18521862           DO jk = 1, jpk 
    1853               IF(ABS(ztmpu) < 1.e-5.AND.ln_wd) THEN 
     1863              IF((ztmpu1 < 0._wp.OR.ABS(ztmpu) < rn_wdmin1).AND.ln_wd) THEN 
    18541864                z_esigtu3(ji,jj,jk) = 0.5_wp * ( z_esigt3(ji,jj,jk) + z_esigt3(ji+1,jj,jk) ) 
    18551865                z_esigwu3(ji,jj,jk) = 0.5_wp * ( z_esigw3(ji,jj,jk) + z_esigw3(ji+1,jj,jk) ) 
     
    18611871              END IF 
    18621872 
    1863               IF(ABS(ztmpv) < 1.e-5.AND.ln_wd) THEN 
     1873              IF((ztmpv1 < 0._wp.OR.ABS(ztmpv) < rn_wdmin1).AND.ln_wd) THEN 
    18641874                z_esigtv3(ji,jj,jk) = 0.5_wp * ( z_esigt3(ji,jj,jk) + z_esigt3(ji,jj+1,jk) ) 
    18651875                z_esigwv3(ji,jj,jk) = 0.5_wp * ( z_esigw3(ji,jj,jk) + z_esigw3(ji,jj+1,jk) ) 
     
    18711881              END IF 
    18721882 
    1873               IF(ABS(ztmpf) < 1.e-5.AND.ln_wd) THEN 
     1883              IF((ztmpf1 < 0._wp.OR.ABS(ztmpf) < rn_wdmin1).AND.ln_wd) THEN 
    18741884                z_esigtf3(ji,jj,jk) = 0.25_wp * ( z_esigt3(ji,jj,jk)   + z_esigt3(ji+1,jj,jk)  & 
    18751885                   &                            + z_esigt3(ji,jj+1,jk) + z_esigt3(ji+1,jj+1,jk) ) 
Note: See TracChangeset for help on using the changeset viewer.