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 15574 for NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_sponge.F90 – NEMO

Ignore:
Timestamp:
2021-12-03T20:32:50+01:00 (3 years ago)
Author:
techene
Message:

#2605 #2715 trunk merged into dev_r14318_RK3_stage1

Location:
NEMO/branches/2021/dev_r14318_RK3_stage1
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14318_RK3_stage1

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette@14244        sette 
         11^/utils/CI/sette@HEAD        sette 
         12 
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_sponge.F90

    r14800 r15574  
    159159      ztabramp(:,:) = 0._wp 
    160160 
    161       IF( lk_west ) THEN                             ! --- West --- ! 
    162          ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    163          ind2 = nn_hls + 1 + nbghostcells + ispongearea  
     161      IF( lk_west ) THEN                            ! --- West --- ! 
     162         ind1 = nn_hls + nbghostcells               ! halo + nbghostcells 
     163         ind2 = nn_hls + nbghostcells + ispongearea  
    164164         DO ji = mi0(ind1), mi1(ind2)    
    165165            DO jj = 1, jpj                
     
    169169         ! ghost cells: 
    170170         ind1 = 1 
    171          ind2 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     171         ind2 = nn_hls +  nbghostcells              ! halo + nbghostcells 
    172172         DO ji = mi0(ind1), mi1(ind2)    
    173173            DO jj = 1, jpj                
     
    177177      ENDIF 
    178178      IF( lk_east ) THEN                             ! --- East --- ! 
    179          ind1 = jpiglo - ( nn_hls + nbghostcells ) - ispongearea - 1 
    180          ind2 = jpiglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     179         ind1 = jpiglo - ( nn_hls + nbghostcells -1 ) - ispongearea - 1 
     180         ind2 = jpiglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + land + nbghostcells - 1 
    181181         DO ji = mi0(ind1), mi1(ind2) 
    182182            DO jj = 1, jpj 
     
    185185         END DO 
    186186         ! ghost cells: 
    187          ind1 = jpiglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     187         ind1 = jpiglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + land + nbghostcells - 1 
    188188         ind2 = jpiglo - 1 
    189189         DO ji = mi0(ind1), mi1(ind2) 
     
    194194      ENDIF       
    195195      IF( lk_south ) THEN                            ! --- South --- ! 
    196          ind1 = nn_hls + 1 + nbghostcells                 ! halo + land + nbghostcells 
    197          ind2 = nn_hls + 1 + nbghostcells + jspongearea  
     196         ind1 = nn_hls + nbghostcells                ! halo + nbghostcells 
     197         ind2 = nn_hls + nbghostcells + jspongearea  
    198198         DO jj = mj0(ind1), mj1(ind2)  
    199199            DO ji = 1, jpi 
     
    203203         ! ghost cells: 
    204204         ind1 = 1 
    205          ind2 = nn_hls + 1 + nbghostcells                 ! halo + land + nbghostcells 
     205         ind2 = nn_hls + nbghostcells                ! halo + nbghostcells 
    206206         DO jj = mj0(ind1), mj1(ind2)  
    207207            DO ji = 1, jpi 
     
    211211      ENDIF 
    212212      IF( lk_north ) THEN                            ! --- North --- ! 
    213          ind1 = jpjglo - ( nn_hls + nbghostcells ) - jspongearea - 1 
    214          ind2 = jpjglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     213         ind1 = jpjglo - ( nn_hls + nbghostcells -1 ) - jspongearea - 1 
     214         ind2 = jpjglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + nbghostcells - 1 
    215215         DO jj = mj0(ind1), mj1(ind2) 
    216216            DO ji = 1, jpi 
     
    219219         END DO 
    220220         ! ghost cells: 
    221          ind1 = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     221         ind1 = jpjglo - ( nn_hls + nbghostcells -1 )      ! halo + land + nbghostcells - 1 
    222222         ind2 = jpjglo 
    223223         DO jj = mj0(ind1), mj1(ind2) 
     
    245245      END_2D 
    246246       
    247       CALL lbc_lnk_multi( 'agrif_Sponge', fspu, 'U', 1._wp, fspv, 'V', 1._wp, fspt, 'T', 1._wp, fspf, 'F', 1._wp ) 
     247      CALL lbc_lnk( 'agrif_Sponge', fspu, 'U', 1._wp, fspv, 'V', 1._wp, fspt, 'T', 1._wp, fspf, 'F', 1._wp ) 
    248248      ! 
    249249      ! Remove vertical interpolation where not needed: 
     
    293293 
    294294      IF( lk_west ) THEN                             ! --- West --- ! 
    295          ind1 = nn_hls + 1 + nbghostcells + ishift 
    296          ind2 = nn_hls + 1 + nbghostcells + ishift + ispongearea  
     295         ind1 = nn_hls + nbghostcells + ishift 
     296         ind2 = nn_hls + nbghostcells + ishift + ispongearea  
    297297         DO ji = mi0(ind1), mi1(ind2)    
    298298            DO jj = 1, jpj                
     
    302302         ! ghost cells: 
    303303         ind1 = 1 
    304          ind2 = nn_hls + 1 + nbghostcells + ishift               ! halo + land + nbghostcells 
     304         ind2 = nn_hls + nbghostcells + ishift               ! halo + nbghostcells 
    305305         DO ji = mi0(ind1), mi1(ind2)    
    306306            DO jj = 1, jpj                
     
    310310      ENDIF 
    311311      IF( lk_east ) THEN                             ! --- East --- ! 
    312          ind1 = jpiglo - ( nn_hls + nbghostcells + ishift) - ispongearea - 1 
    313          ind2 = jpiglo - ( nn_hls + nbghostcells + ishift) - 1    ! halo + land + nbghostcells - 1 
     312         ind1 = jpiglo - ( nn_hls + nbghostcells -1  + ishift) - ispongearea - 1 
     313         ind2 = jpiglo - ( nn_hls + nbghostcells -1  + ishift) - 1    ! halo + nbghostcells - 1 
    314314         DO ji = mi0(ind1), mi1(ind2) 
    315315            DO jj = 1, jpj 
     
    318318         END DO 
    319319         ! ghost cells: 
    320          ind1 = jpiglo - ( nn_hls + nbghostcells + ishift) - 1    ! halo + land + nbghostcells - 1 
     320         ind1 = jpiglo - ( nn_hls + nbghostcells -1 + ishift) - 1    ! halo + nbghostcells - 1 
    321321         ind2 = jpiglo - 1 
    322322         DO ji = mi0(ind1), mi1(ind2) 
     
    327327      ENDIF       
    328328      IF( lk_south ) THEN                            ! --- South --- ! 
    329          ind1 = nn_hls + 1 + nbghostcells + jshift                ! halo + land + nbghostcells 
    330          ind2 = nn_hls + 1 + nbghostcells + jshift + jspongearea  
     329         ind1 = nn_hls + nbghostcells + jshift                ! halo + nbghostcells 
     330         ind2 = nn_hls + nbghostcells + jshift + jspongearea  
    331331         DO jj = mj0(ind1), mj1(ind2)  
    332332            DO ji = 1, jpi 
     
    336336         ! ghost cells: 
    337337         ind1 = 1 
    338          ind2 = nn_hls + 1 + nbghostcells + jshift                ! halo + land + nbghostcells 
     338         ind2 = nn_hls + nbghostcells + jshift                ! halo + land + nbghostcells 
    339339         DO jj = mj0(ind1), mj1(ind2)  
    340340            DO ji = 1, jpi 
     
    344344      ENDIF 
    345345      IF( lk_north ) THEN                            ! --- North --- ! 
    346          ind1 = jpjglo - ( nn_hls + nbghostcells + jshift) - jspongearea - 1 
    347          ind2 = jpjglo - ( nn_hls + nbghostcells + jshift) - 1    ! halo + land + nbghostcells - 1 
     346         ind1 = jpjglo - ( nn_hls + nbghostcells -1 + jshift) - jspongearea - 1 
     347         ind2 = jpjglo - ( nn_hls + nbghostcells -1 + jshift) - 1    ! halo + land + nbghostcells - 1 
    348348         DO jj = mj0(ind1), mj1(ind2) 
    349349            DO ji = 1, jpi 
     
    352352         END DO 
    353353         ! ghost cells: 
    354          ind1 = jpjglo - ( nn_hls + nbghostcells + jshift)      ! halo + land + nbghostcells - 1 
     354         ind1 = jpjglo - ( nn_hls + nbghostcells -1 + jshift)      ! halo + land + nbghostcells - 1 
    355355         ind2 = jpjglo 
    356356         DO jj = mj0(ind1), mj1(ind2) 
     
    377377         fspf_2d(ji,jj) = ztabramp(ji,jj) * ssvmask(ji,jj) * ssvmask(ji,jj+1) 
    378378         END_2D 
    379       CALL lbc_lnk_multi( 'agrif_Sponge_2d', fspu_2d, 'U', 1._wp, fspv_2d, 'V', 1._wp, fspt_2d, 'T', 1._wp, fspf_2d, 'F', 1._wp ) 
     379      CALL lbc_lnk( 'agrif_Sponge_2d', fspu_2d, 'U', 1._wp, fspv_2d, 'V', 1._wp, fspt_2d, 'T', 1._wp, fspf_2d, 'F', 1._wp ) 
    380380      ! 
    381381#endif 
     
    395395      INTEGER  ::   iku, ikv 
    396396      REAL(wp) :: ztsa, zabe1, zabe2, zbtr, zhtot 
     397      REAl(wp) :: zflag, zdmod, zdtot 
    397398      REAL(wp), DIMENSION(i1-1:i2,j1-1:j2,jpk) :: ztu, ztv 
    398399      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tsbdiff 
     
    410411               DO jj=j1,j2 
    411412                  DO ji=i1,i2 
    412                      tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb_a) 
     413                     ! JC: masking is mandatory here: before tracer field seems  
     414                     !     to hold non zero values where tmask=0 
     415                     tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb_a) * tmask(ji,jj,jk) 
    413416                  END DO 
    414417               END DO 
     
    545548                  DO ji = i1,i2-1 
    546549                     zabe1 = rn_sponge_tra * r1_Dt * umask(ji,jj,jk) * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) 
    547                      ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )  
     550                     zdtot =  tsbdiff(ji+1,jj,jk,jn) -  tsbdiff(ji,jj,jk,jn)  
     551                     zdmod =       ts(ji+1,jj,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a) 
     552                     zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod) 
     553                     ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod )  
    548554                  END DO 
    549555               END DO 
     
    553559                     zabe2 = rn_sponge_tra * r1_Dt * vmask(ji,jj,jk) * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a) 
    554560                     ztv(ji,jj,jk) = zabe2 * fspv(ji,jj) * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
     561                     zdtot =  tsbdiff(ji,jj+1,jk,jn) -  tsbdiff(ji,jj,jk,jn)  
     562                     zdmod =       ts(ji,jj+1,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a) 
     563                     zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod) 
     564                     ztv(ji,jj,jk) = zabe2 * fspv(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod )  
    555565                  END DO 
    556566               END DO 
     
    621631            DO jj=j1,j2 
    622632               DO ji=i1,i2 
    623                   tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb_a) 
     633                  tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb_a) * umask(ji,jj,jk) 
    624634               END DO 
    625635            END DO 
     
    697707            END DO 
    698708 
    699             ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb_a) - tabres_child(i1:i2,j1:j2,:))*umask(i1:i2,j1:j2,:) 
     709            ubdiff(i1:i2,j1:j2,1:jpk) = (uu(i1:i2,j1:j2,1:jpk,Kbb_a) - tabres_child(i1:i2,j1:j2,1:jpk))*umask(i1:i2,j1:j2,1:jpk) 
    700710         ELSE 
    701711 
    702             ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb_a) - tabres(i1:i2,j1:j2,:,1))*umask(i1:i2,j1:j2,:) 
     712            ubdiff(i1:i2,j1:j2,1:jpk) = (uu(i1:i2,j1:j2,1:jpk,Kbb_a) - tabres(i1:i2,j1:j2,1:jpk,1))*umask(i1:i2,j1:j2,1:jpk) 
    703713   
    704714         ENDIF 
     
    750760 
    751761         jmax = j2-1 
    752          ind1 = jpjglo - ( nn_hls + nbghostcells + 2 )   ! North 
     762         ind1 = jpjglo - ( nn_hls + nbghostcells + 1 )   ! North 
    753763         DO jj = mj0(ind1), mj1(ind1)                  
    754764            jmax = MIN(jmax,jj) 
     
    806816            DO jj=j1,j2 
    807817               DO ji=i1,i2 
    808                   tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb_a) 
     818                  tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb_a) * vmask(ji,jj,jk) 
    809819               END DO 
    810820            END DO 
     
    881891            END DO 
    882892 
    883             vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb_a) - tabres_child(i1:i2,j1:j2,:))*vmask(i1:i2,j1:j2,: 
     893            vbdiff(i1:i2,j1:j2,1:jpk) = (vv(i1:i2,j1:j2,1:jpk,Kbb_a) - tabres_child(i1:i2,j1:j2,1:jpk))*vmask(i1:i2,j1:j2,1:jpk 
    884894         ELSE 
    885895 
    886             vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb_a) - tabres(i1:i2,j1:j2,:,1))*vmask(i1:i2,j1:j2,:) 
     896            vbdiff(i1:i2,j1:j2,1:jpk) = (vv(i1:i2,j1:j2,1:jpk,Kbb_a) - tabres(i1:i2,j1:j2,1:jpk,1))*vmask(i1:i2,j1:j2,1:jpk) 
    887897 
    888898         ENDIF 
     
    914924 
    915925         imax = i2 - 1 
    916          ind1 = jpiglo - ( nn_hls + nbghostcells + 2 )   ! East 
     926         ind1 = jpiglo - ( nn_hls + nbghostcells + 1 )   ! East 
    917927         DO ji = mi0(ind1), mi1(ind1)                 
    918928            imax = MIN(imax,ji) 
     
    10141024 
    10151025         jmax = j2-1 
    1016          ind1 = jpjglo - ( nn_hls + nbghostcells + 2 )   ! North 
     1026         ind1 = jpjglo - ( nn_hls + nbghostcells + 1 )   ! North 
    10171027         DO jj = mj0(ind1), mj1(ind1)                  
    10181028            jmax = MIN(jmax,jj) 
     
    10811091 
    10821092         imax = i2 - 1 
    1083          ind1 = jpiglo - ( nn_hls + nbghostcells + 2 )   ! East 
     1093         ind1 = jpiglo - ( nn_hls + nbghostcells + 1 )   ! East 
    10841094         DO ji = mi0(ind1), mi1(ind1)                 
    10851095            imax = MIN(imax,ji) 
Note: See TracChangeset for help on using the changeset viewer.