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

Ignore:
Timestamp:
2015-12-21T23:33:57+01:00 (8 years ago)
Author:
acc
Message:

Add wetting and drying option from dev_r5803_NOC_WAD branch. Logically isolated code changes in domvvl.F90, domzgr.F90, dynhpg.F90, dynspg_ts.F90, sshwzv.F90 and nemogcm.F90. New module wet_dry.F90 in DYN. Fully SETTE tested with code deactivated (ln_wad=.false.). No test case yet available to justify activating option (still under development)

File:
1 edited

Legend:

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

    r6140 r6152  
    2323   USE dom_oce         ! ocean space and time domain 
    2424   USE sbc_oce         ! ocean surface boundary condition 
     25   USE wet_dry         ! wetting and drying 
    2526   USE restart         ! ocean restart 
    2627   ! 
     
    687688      !                                                             !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    688689      ! 
    689       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
     690      INTEGER ::   ji, jj, jk                                       ! dummy loop indices 
     691      REAL(wp) ::  zlnwd                                            ! =1./0. when ln_wd = T/F 
    690692      !!---------------------------------------------------------------------- 
    691693      ! 
    692694      IF( nn_timing == 1 )   CALL timing_start('dom_vvl_interpol') 
     695      ! 
     696      IF(ln_wd) THEN 
     697        zlnwd = 1.0_wp 
     698      ELSE 
     699        zlnwd = 0.0_wp 
     700      END IF 
    693701      ! 
    694702      SELECT CASE ( pout )    !==  type of interpolation  ==! 
     
    698706            DO jj = 1, jpjm1 
    699707               DO ji = 1, fs_jpim1   ! vector opt. 
    700                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * r1_e1e2u(ji,jj)                                   & 
     708                  pe3_out(ji,jj,jk) = 0.5_wp * (  umask(ji,jj,jk) * (1.0_wp - zlnwd) + zlnwd ) * r1_e1e2u(ji,jj)   & 
    701709                     &                       * (   e1e2t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
    702710                     &                           + e1e2t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
     
    711719            DO jj = 1, jpjm1 
    712720               DO ji = 1, fs_jpim1   ! vector opt. 
    713                   pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk) * r1_e1e2v(ji,jj)                                   & 
     721                  pe3_out(ji,jj,jk) = 0.5_wp * ( vmask(ji,jj,jk)  * (1.0_wp - zlnwd) + zlnwd ) * r1_e1e2v(ji,jj)   & 
    714722                     &                       * (   e1e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
    715723                     &                           + e1e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
     
    724732            DO jj = 1, jpjm1 
    725733               DO ji = 1, fs_jpim1   ! vector opt. 
    726                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e1e2f(ji,jj)               & 
     734                  pe3_out(ji,jj,jk) = 0.5_wp * (  umask(ji,jj,jk) * umask(ji,jj+1,jk) * (1.0_wp - zlnwd) + zlnwd ) & 
     735                     &                       *    r1_e1e2f(ji,jj)                                                  & 
    727736                     &                       * (   e1e2u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
    728737                     &                           + e1e2u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
     
    739748!!gm BUG? use here wmask in case of ISF ?  to be checked 
    740749         DO jk = 2, jpk 
    741             pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * tmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )   & 
    742                &                            +            0.5_wp * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
     750            pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( tmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )   & 
     751               &                            * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )                               & 
     752               &                            +            0.5_wp * ( tmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )     & 
     753               &                            * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
    743754         END DO 
    744755         ! 
     
    749760!!gm BUG? use here wumask in case of ISF ?  to be checked 
    750761         DO jk = 2, jpk 
    751             pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * umask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )   & 
    752                &                             +            0.5_wp * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
     762            pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( umask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )  & 
     763               &                             * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )                              & 
     764               &                             +            0.5_wp * ( umask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )    & 
     765               &                             * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
    753766         END DO 
    754767         ! 
     
    759772!!gm BUG? use here wvmask in case of ISF ?  to be checked 
    760773         DO jk = 2, jpk 
    761             pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * vmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )   & 
    762                &                             +            0.5_wp * vmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
     774            pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( vmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )  & 
     775               &                             * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )                              & 
     776               &                             +            0.5_wp * ( vmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )    & 
     777               &                             * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
    763778         END DO 
    764779      END SELECT 
     
    784799      CHARACTER(len=*), INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag 
    785800      ! 
    786       INTEGER ::   jk 
     801      INTEGER ::   ji, jj, jk 
    787802      INTEGER ::   id1, id2, id3, id4, id5     ! local integers 
    788803      !!---------------------------------------------------------------------- 
     
    872887            e3t_n(:,:,:) = e3t_0(:,:,:) 
    873888            sshn(:,:) = 0.0_wp 
     889 
     890            IF( ln_wd ) THEN 
     891              DO jj = 1, jpj 
     892                DO ji = 1, jpi 
     893                  IF( e3t_0(ji,jj,1) <= 0.5_wp * rn_wdmin1 ) THEN 
     894                     e3t_b(ji,jj,:) = 0.5_wp * rn_wdmin1  
     895                     e3t_n(ji,jj,:) = 0.5_wp * rn_wdmin1  
     896                     e3t_a(ji,jj,:) = 0.5_wp * rn_wdmin1  
     897                     sshb(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     898                     sshn(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     899                     ssha(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     900                  ENDIF 
     901                ENDDO 
     902              ENDDO 
     903            END IF 
     904 
    874905            IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN 
    875906               tilde_e3t_b(:,:,:) = 0.0_wp 
Note: See TracChangeset for help on using the changeset viewer.