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 4789 for branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90 – NEMO

Ignore:
Timestamp:
2014-09-25T18:26:34+02:00 (10 years ago)
Author:
rblod
Message:

dev_r4765_CNRS_agrif: First update of AGRIF for dynamic only (_flt and _ts), see ticket #1380 and associated wiki page

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90

    r3680 r4789  
    11#define SPONGE_TOP 
    22 
    3 Module agrif_top_sponge 
     3MODULE agrif_top_sponge 
    44#if defined key_agrif && defined key_top 
    55   USE par_oce 
     
    1616   PRIVATE 
    1717 
    18    PUBLIC Agrif_Sponge_Trc, interptrn 
     18   PUBLIC Agrif_Sponge_trc, interptrn 
    1919 
    20   !! * Substitutions 
     20   !! * Substitutions 
    2121#  include "domzgr_substitute.h90" 
    2222   !!---------------------------------------------------------------------- 
    23    !! NEMO/NST 3.3 , NEMO Consortium (2010) 
     23   !! NEMO/NST 3.6 , NEMO Consortium (2010) 
    2424   !! $Id$ 
    2525   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    2626   !!---------------------------------------------------------------------- 
    2727 
    28    CONTAINS 
     28CONTAINS 
    2929 
    30    SUBROUTINE Agrif_Sponge_Trc 
     30   SUBROUTINE Agrif_Sponge_trc 
    3131      !!--------------------------------------------- 
    3232      !!   *** ROUTINE Agrif_Sponge_Trc *** 
    3333      !!--------------------------------------------- 
    3434      !!  
    35       INTEGER :: ji,jj,jk,jn 
    3635      REAL(wp) :: timecoeff 
    37       REAL(wp) :: ztra, zabe1, zabe2, zbtr 
    38       REAL(wp), POINTER, DIMENSION(:,:) :: ztru, ztrv 
    39       REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztabr 
    40       REAL(wp), POINTER, DIMENSION(:,:,:,:) :: trbdiff 
    4136 
    4237#if defined SPONGE_TOP 
    43       CALL wrk_alloc( jpi, jpj, ztru, ztrv ) 
    44       CALL wrk_alloc( jpi, jpj, jpk, jptra, ztabr, trbdiff ) 
    45  
    4638      timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot() 
    47  
     39      CALL Agrif_sponge 
    4840      Agrif_SpecialValue=0. 
    4941      Agrif_UseSpecialValue = .TRUE. 
    50       ztabr = 0.e0 
    51       CALL Agrif_Bc_Variable(ztabr, tra_id,calledweight=timecoeff,procname=interptrn) 
     42      tabspongetrn = .FALSE. 
     43      CALL Agrif_Bc_Variable(trn_sponge_id,calledweight=timecoeff,procname=interptrn_sponge) 
    5244      Agrif_UseSpecialValue = .FALSE. 
    53  
    54       trbdiff(:,:,:,:) = trb(:,:,:,:) - ztabr(:,:,:,:) 
    55  
    56       CALL Agrif_sponge 
    57  
    58       DO jn = 1, jptra 
    59          DO jk = 1, jpkm1 
    60             ! 
    61             DO jj = 1, jpjm1 
    62                DO ji = 1, jpim1 
    63                   zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 
    64                   zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 
    65                   ztru(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    66                   ztrv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    67                ENDDO 
    68             ENDDO 
    69  
    70             DO jj = 2,jpjm1 
    71                DO ji = 2,jpim1 
    72                   zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
    73                   ! horizontal diffusive trends 
    74                   ztra = zbtr * ( ztru(ji,jj) - ztru(ji-1,jj) + ztrv(ji,jj) - ztrv(ji,jj-1)  ) 
    75                   ! add it to the general tracer trends 
    76                   tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    77                END DO 
    78             END DO 
    79             ! 
    80          ENDDO 
    81       ENDDO 
    82   
    83       CALL wrk_dealloc( jpi, jpj, ztru, ztrv ) 
    84       CALL wrk_dealloc( jpi, jpj, jpk, jptra, trbdiff, ztabr ) 
    8545 
    8646#endif 
     
    8848   END SUBROUTINE Agrif_Sponge_Trc 
    8949 
    90    SUBROUTINE interptrn(tabres,i1,i2,j1,j2,k1,k2,n1,n2) 
     50   SUBROUTINE interptrn_sponge(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before) 
    9151      !!--------------------------------------------- 
    92       !!   *** ROUTINE interptn *** 
     52      !!   *** ROUTINE interptrn_sponge *** 
    9353      !!--------------------------------------------- 
    9454      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    9555      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     56      LOGICAL, INTENT(in) :: before 
     57 
     58 
     59      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     60 
     61      REAL(wp) :: ztra, zabe1, zabe2, zbtr 
     62      REAL(wp), DIMENSION(i1:i2,j1:j2) :: ztu, ztv 
     63      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::trbdiff 
    9664      ! 
    97       tabres(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
     65      IF (before) THEN 
     66         tabres(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
     67      ELSE       
    9868 
    99    END SUBROUTINE interptrn 
     69         trbdiff(:,:,:,:) = trb(i1:i2,j1:j2,:,:) - tabres(:,:,:,:)       
     70         DO jn = 1, jptra 
     71            DO jk = 1, jpkm1 
     72 
     73               DO jj = j1,j2-1 
     74                  DO ji = i1,i2-1 
     75                     zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 
     76                     zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 
     77                     ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     78                     ztv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     79                  ENDDO 
     80               ENDDO 
     81 
     82               DO jj = j1+1,j2-1 
     83                  DO ji = i1+1,i2-1 
     84 
     85                     IF (.NOT. tabspongedone_trn(ji,jj)) THEN  
     86                        zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
     87                        ! horizontal diffusive trends 
     88                        ztra = zbtr * (  ztu(ji,jj) - ztu(ji-1,jj  ) + ztv(ji,jj) - ztv(ji  ,jj-1)  ) 
     89                        ! add it to the general tracer trends 
     90                        tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
     91                     ENDIF 
     92 
     93                  ENDDO 
     94               ENDDO 
     95 
     96            ENDDO 
     97         ENDDO 
     98 
     99         tabspongedone_trn(i1+1:i2-1,j1+1:j2-1) = .TRUE. 
     100      ENDIF 
     101      !                  
     102   END SUBROUTINE interptrn_sponge 
    100103 
    101104#else 
Note: See TracChangeset for help on using the changeset viewer.