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 15563 for NEMO/releases/r4.0/r4.0-HEAD/src/OCE/DOM – NEMO

Ignore:
Timestamp:
2021-12-01T16:50:19+01:00 (3 years ago)
Author:
jchanut
Message:

#1791, correct bottom scale factors interpolation at U/V/F points with non-linear free surface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/DOM/domvvl.F90

    r15458 r15563  
    719719      ! 
    720720      INTEGER ::   ji, jj, jk                                       ! dummy loop indices 
     721      INTEGER ::   iku, ikum1, ikv, ikvm1, ikf, ikfm1               !  
    721722      REAL(wp) ::  zlnwd                                            ! =1./0. when ln_wd_il = T/F 
    722723      !!---------------------------------------------------------------------- 
     
    740741            END DO 
    741742         END DO 
     743         ! 
     744         ! Bottom correction: 
     745         DO jj = 1, jpjm1 
     746            DO ji = 1, fs_jpim1   ! vector opt. 
     747               iku    = mbku(ji  ,jj) 
     748               ikum1  = iku - 1 
     749               pe3_out(ji,jj,iku) = ( umask(ji,jj,iku) * (1.0_wp - zlnwd) + zlnwd )                              &  
     750                  &      *(  0.5_wp * r1_e1e2u(ji,jj)                                                            & 
     751                  &      *(  e1e2t(ji  ,jj) * ( SUM(tmask(ji  ,jj,:)*(pe3_in(ji  ,jj,:) - e3t_0(ji  ,jj,:))) )   & 
     752                  &        + e1e2t(ji+1,jj) * ( SUM(tmask(ji+1,jj,:)*(pe3_in(ji+1,jj,:) - e3t_0(ji+1,jj,:))) ) ) & 
     753                  &     - SUM(pe3_out(ji,jj,1:ikum1))) 
     754            END DO 
     755         END DO 
     756         ! 
    742757         CALL lbc_lnk( 'domvvl', pe3_out(:,:,:), 'U', 1._wp ) 
    743758         pe3_out(:,:,:) = pe3_out(:,:,:) + e3u_0(:,:,:) 
     
    753768            END DO 
    754769         END DO 
     770         ! 
     771         ! Bottom correction: 
     772         DO jj = 1, jpjm1 
     773            DO ji = 1, fs_jpim1   ! vector opt. 
     774               ikv    = mbkv(ji  ,jj) 
     775               ikvm1  = ikv - 1 
     776               pe3_out(ji,jj,ikv) = ( vmask(ji,jj,ikv) * (1.0_wp - zlnwd) + zlnwd )                              &  
     777                  &      *(  0.5_wp * r1_e1e2v(ji,jj)                                                            & 
     778                  &      *(  e1e2t(ji,jj  ) * ( SUM(tmask(ji,jj  ,:)*(pe3_in(ji,jj  ,:) - e3t_0(ji,jj  ,:))) )   & 
     779                  &        + e1e2t(ji,jj+1) * ( SUM(tmask(ji,jj+1,:)*(pe3_in(ji,jj+1,:) - e3t_0(ji,jj+1,:))) ) ) & 
     780                  &     - SUM(pe3_out(ji,jj,1:ikvm1))) 
     781            END DO 
     782         END DO 
     783         ! 
    755784         CALL lbc_lnk( 'domvvl', pe3_out(:,:,:), 'V', 1._wp ) 
    756785         pe3_out(:,:,:) = pe3_out(:,:,:) + e3v_0(:,:,:) 
     
    767796            END DO 
    768797         END DO 
     798         ! 
     799         ! Bottom correction: 
     800         DO jj = 1, jpjm1 
     801            DO ji = 1, fs_jpim1   ! vector opt. 
     802               ikf    = MIN(mbku(ji  ,jj),mbku(ji,jj+1)) 
     803               ikfm1  = ikf - 1 
     804               pe3_out(ji,jj,ikf) = ( umask(ji,jj,ikf) * umask(ji,jj+1,ikf) * (1.0_wp - zlnwd) + zlnwd )         & 
     805                  &     * ( 0.5_wp *  r1_e1e2f(ji,jj)                                                            & 
     806                  &     * (  e1e2u(ji,jj  ) * ( SUM(umask(ji,jj  ,:)*(pe3_in(ji,jj  ,:) - e3u_0(ji,jj  ,:))) )   & 
     807                  &        + e1e2u(ji,jj+1) * ( SUM(umask(ji,jj+1,:)*(pe3_in(ji,jj+1,:) - e3u_0(ji,jj+1,:))) ) ) & 
     808                  &     - SUM(pe3_out(ji,jj,1:ikfm1))) 
     809            END DO 
     810         END DO 
     811         ! 
    769812         CALL lbc_lnk( 'domvvl', pe3_out(:,:,:), 'F', 1._wp ) 
    770813         pe3_out(:,:,:) = pe3_out(:,:,:) + e3f_0(:,:,:) 
Note: See TracChangeset for help on using the changeset viewer.