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 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (5 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90

    r10248 r10251  
    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 
    6    USE par_trc 
    76   USE oce 
    87   USE dom_oce 
     
    1716   PRIVATE 
    1817 
    19    PUBLIC Agrif_Sponge_trc, interptrn_sponge 
     18   PUBLIC Agrif_Sponge_Trc, interptrn 
    2019 
    21    !! * Substitutions 
     20  !! * Substitutions 
    2221#  include "domzgr_substitute.h90" 
    2322   !!---------------------------------------------------------------------- 
    24    !! NEMO/NST 3.6 , NEMO Consortium (2010) 
     23   !! NEMO/NST 3.3 , NEMO Consortium (2010) 
    2524   !! $Id$ 
    2625   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    2726   !!---------------------------------------------------------------------- 
    2827 
    29 CONTAINS 
     28   CONTAINS 
    3029 
    31    SUBROUTINE Agrif_Sponge_trc 
     30   SUBROUTINE Agrif_Sponge_Trc 
    3231      !!--------------------------------------------- 
    3332      !!   *** ROUTINE Agrif_Sponge_Trc *** 
    3433      !!--------------------------------------------- 
    3534      !!  
     35      INTEGER :: ji,jj,jk,jn 
    3636      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 
    3741 
    3842#if defined SPONGE_TOP 
     43      CALL wrk_alloc( jpi, jpj, ztru, ztrv ) 
     44      CALL wrk_alloc( jpi, jpj, jpk, jptra, ztabr, trbdiff ) 
     45 
    3946      timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot() 
    40       CALL Agrif_sponge 
     47 
    4148      Agrif_SpecialValue=0. 
    4249      Agrif_UseSpecialValue = .TRUE. 
    43       tabspongedone_trn = .FALSE. 
    44       CALL Agrif_Bc_Variable(trn_sponge_id,calledweight=timecoeff,procname=interptrn_sponge) 
     50      ztabr = 0.e0 
     51      CALL Agrif_Bc_Variable(ztabr, tra_id,calledweight=timecoeff,procname=interptrn) 
    4552      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 ) 
    4685 
    4786#endif 
     
    4988   END SUBROUTINE Agrif_Sponge_Trc 
    5089 
    51    SUBROUTINE interptrn_sponge(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before) 
     90   SUBROUTINE interptrn(tabres,i1,i2,j1,j2,k1,k2,n1,n2) 
    5291      !!--------------------------------------------- 
    53       !!   *** ROUTINE interptrn_sponge *** 
     92      !!   *** ROUTINE interptn *** 
    5493      !!--------------------------------------------- 
    5594      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    5695      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
    57       LOGICAL, INTENT(in) :: before 
     96      ! 
     97      tabres(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
    5898 
    59  
    60       INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    61  
    62       REAL(wp) :: ztra, zabe1, zabe2, zbtr 
    63       REAL(wp), DIMENSION(i1:i2,j1:j2) :: ztu, ztv 
    64       REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::trbdiff 
    65       ! 
    66       IF (before) THEN 
    67          tabres(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
    68       ELSE       
    69  
    70          trbdiff(:,:,:,:) = trb(i1:i2,j1:j2,:,:) - tabres(:,:,:,:)       
    71          DO jn = 1, jptra 
    72             DO jk = 1, jpkm1 
    73  
    74                DO jj = j1,j2-1 
    75                   DO ji = i1,i2-1 
    76                      zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk) 
    77                      zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) 
    78                      ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    79                      ztv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    80                   ENDDO 
    81                ENDDO 
    82  
    83                DO jj = j1+1,j2-1 
    84                   DO ji = i1+1,i2-1 
    85  
    86                      IF (.NOT. tabspongedone_trn(ji,jj)) THEN  
    87                         zbtr = r1_e12t(ji,jj) / fse3t(ji,jj,jk) 
    88                         ! horizontal diffusive trends 
    89                         ztra = zbtr * (  ztu(ji,jj) - ztu(ji-1,jj  ) + ztv(ji,jj) - ztv(ji  ,jj-1)  ) 
    90                         ! add it to the general tracer trends 
    91                         tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    92                      ENDIF 
    93  
    94                   ENDDO 
    95                ENDDO 
    96  
    97             ENDDO 
    98          ENDDO 
    99  
    100          tabspongedone_trn(i1+1:i2-1,j1+1:j2-1) = .TRUE. 
    101       ENDIF 
    102       !                  
    103    END SUBROUTINE interptrn_sponge 
     99   END SUBROUTINE interptrn 
    104100 
    105101#else 
Note: See TracChangeset for help on using the changeset viewer.