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 7588 for branches/2016 – NEMO

Changeset 7588 for branches/2016


Ignore:
Timestamp:
2017-01-20T16:24:07+01:00 (7 years ago)
Author:
acc
Message:

Branch dev_merge_2016. Wetting and drying enhancements. Added the reading of bathymetry with land elevations (negative depths) from domain configuration files (if ln_wd is .true.). Also added better detection of convergence in the limiter iterations (wet_dry.F90)

Location:
branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r7421 r7588  
    3030   USE usrdef_zgr     ! user defined vertical coordinate system 
    3131   USE depth_e3       ! depth <=> e3 
     32   USE wet_dry, ONLY: ln_wd, ht_wd 
    3233   ! 
    3334   USE in_out_manager ! I/O manager 
     
    256257      CALL iom_get( inum, jpdom_data, 'bottom_level' , z2d  , lrowattr=ln_use_jattr )   ! last wet T-points 
    257258      k_bot(:,:) = INT( z2d(:,:) ) 
     259      ! 
     260      ! bathymetry with orography (wetting and drying only) 
     261      IF( ln_wd )  CALL iom_get( inum, jpdom_data, 'ht_wd' , ht_wd  , lrowattr=ln_use_jattr ) 
    258262      ! 
    259263      CALL iom_close( inum ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90

    r7580 r7588  
    170170              zdep2 = ht_wd(ji,jj) + sshb1(ji,jj) - rn_wdmin1 
    171171              IF(zdep2 .le. 0._wp) THEN  !add more safty, but not necessary 
    172                 !zdep2 = 0._wp 
    173172                sshb1(ji,jj) = rn_wdmin1 - ht_wd(ji,jj) 
     173                IF(zflxu(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = 0._wp 
     174                IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp 
     175                IF(zflxv(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = 0._wp 
     176                IF(zflxv(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = 0._wp  
    174177                wdmask(ji,jj) = 0._wp 
    175178              END IF 
     
    202205                 zdep2 = ht_wd(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - z2dt * sshemp(ji,jj) 
    203206           
    204                  IF(zdep1 > zdep2) THEN 
    205                    jflag = 1 
     207                 IF( zdep1 > zdep2 ) THEN 
    206208                   wdmask(ji, jj) = 0 
    207209                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    208210                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
    209                    zcoef = max(zcoef, 0._wp) 
     211                   ! flag if the limiter has been used but stop flagging if the only 
     212                   ! changes have zeroed the coefficient since further iterations will 
     213                   ! not change anything 
     214                   IF( zcoef > 0._wp ) THEN 
     215                      jflag = 1  
     216                   ELSE 
     217                      zcoef = 0._wp 
     218                   ENDIF 
    210219                   IF(jk1 > nn_wdit) zcoef = 0._wp 
    211220                   IF(zflxu1(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = zcoef 
     
    316325 
    317326              zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 
    318               IF(zdep2 .le. 0._wp) THEN  !add more safty, but not necessary 
     327              IF(zdep2 .le. 0._wp) THEN  !add more safety, but not necessary 
    319328                sshn_e(ji,jj) = rn_wdmin1 - ht_wd(ji,jj) 
     329                IF(zflxu(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = 0._wp 
     330                IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp 
     331                IF(zflxv(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = 0._wp 
     332                IF(zflxv(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = 0._wp  
    320333              END IF 
    321334           ENDDO 
     
    348361           
    349362                 IF(zdep1 > zdep2) THEN 
    350                    jflag = 1 
    351363                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    352364                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
    353                    zcoef = max(zcoef, 0._wp) 
     365                   ! flag if the limiter has been used but stop flagging if the only 
     366                   ! changes have zeroed the coefficient since further iterations will 
     367                   ! not change anything 
     368                   IF( zcoef > 0._wp ) THEN 
     369                      jflag = 1  
     370                   ELSE 
     371                      zcoef = 0._wp 
     372                   ENDIF 
    354373                   IF(jk1 > nn_wdit) zcoef = 0._wp 
    355374                   IF(zflxu1(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = zcoef 
Note: See TracChangeset for help on using the changeset viewer.