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 15437 – NEMO

Changeset 15437


Ignore:
Timestamp:
2021-10-22T14:21:20+02:00 (2 years ago)
Author:
jchanut
Message:

agrif fixes: i) Add masking prior interpolation on "before" tracers: these seem to be strangly unmasked which induces extrapolation issues. ii) Add flux limiter on tracer sponge (recall sponge is applied on anomalies) to prevent from generating spurious extrema.

Location:
NEMO/trunk/src/NST
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/NST/agrif_oce_interp.F90

    r15119 r15437  
    15781578         DO jj = j1, j2 
    15791579            DO ji = i1, i2 
    1580                zh = 0._wp 
    1581                DO jk = 1, mbkt_parent(ji, jj)-1 
    1582                   zh = zh + e3t0_parent(ji,jj,jk) 
    1583                END DO 
    1584                e3t0_parent(ji,jj,mbkt_parent(ji,jj)) = ht0_parent(ji, jj) - zh 
     1580               IF ( mbkt_parent(ji,jj) > 1 ) THEN 
     1581                  zh = 0._wp 
     1582                  DO jk = 1, mbkt_parent(ji, jj)-1 
     1583                     zh = zh + e3t0_parent(ji,jj,jk) 
     1584                  END DO 
     1585                  e3t0_parent(ji,jj,mbkt_parent(ji,jj)) = ht0_parent(ji, jj) - zh 
     1586               ENDIF   
    15851587            END DO 
    15861588         END DO 
  • NEMO/trunk/src/NST/agrif_oce_sponge.F90

    r15317 r15437  
    386386      INTEGER  ::   iku, ikv 
    387387      REAL(wp) :: ztsa, zabe1, zabe2, zbtr, zhtot 
     388      REAl(wp) :: zflag, zdmod, zdtot 
    388389      REAL(wp), DIMENSION(i1-1:i2,j1-1:j2,jpk) :: ztu, ztv 
    389390      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tsbdiff 
     
    401402               DO jj=j1,j2 
    402403                  DO ji=i1,i2 
    403                      tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb_a) 
     404                     ! JC: masking is mandatory here: before tracer field seems  
     405                     !     to hold non zero values where tmask=0 
     406                     tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb_a) * tmask(ji,jj,jk) 
    404407                  END DO 
    405408               END DO 
     
    536539                  DO ji = i1,i2-1 
    537540                     zabe1 = rn_sponge_tra * r1_Dt * umask(ji,jj,jk) * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) 
    538                      ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )  
     541                     zdtot =  tsbdiff(ji+1,jj,jk,jn) -  tsbdiff(ji,jj,jk,jn)  
     542                     zdmod =       ts(ji+1,jj,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a) 
     543                     zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod) 
     544                     ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod )  
    539545                  END DO 
    540546               END DO 
     
    544550                     zabe2 = rn_sponge_tra * r1_Dt * vmask(ji,jj,jk) * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a) 
    545551                     ztv(ji,jj,jk) = zabe2 * fspv(ji,jj) * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
     552                     zdtot =  tsbdiff(ji,jj+1,jk,jn) -  tsbdiff(ji,jj,jk,jn)  
     553                     zdmod =       ts(ji,jj+1,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a) 
     554                     zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod) 
     555                     ztv(ji,jj,jk) = zabe2 * fspv(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod )  
    546556                  END DO 
    547557               END DO 
     
    612622            DO jj=j1,j2 
    613623               DO ji=i1,i2 
    614                   tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb_a) 
     624                  tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb_a) * umask(ji,jj,jk) 
    615625               END DO 
    616626            END DO 
     
    797807            DO jj=j1,j2 
    798808               DO ji=i1,i2 
    799                   tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb_a) 
     809                  tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb_a) * vmask(ji,jj,jk) 
    800810               END DO 
    801811            END DO 
  • NEMO/trunk/src/NST/agrif_top_sponge.F90

    r14170 r15437  
    9090               DO jj=j1,j2 
    9191                  DO ji=i1,i2 
    92                      tabres(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kbb_a) 
     92                     tabres(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kbb_a) * tmask(ji,jj,jk)  
    9393                  END DO 
    9494               END DO 
Note: See TracChangeset for help on using the changeset viewer.