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

source: branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90 @ 4789

Last change on this file since 4789 was 4789, checked in by rblod, 10 years ago

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

  • Property svn:keywords set to Id
File size: 3.6 KB
Line 
1#define SPONGE_TOP
2
3MODULE agrif_top_sponge
4#if defined key_agrif && defined key_top
5   USE par_oce
6   USE oce
7   USE dom_oce
8   USE in_out_manager
9   USE agrif_oce
10   USE agrif_opa_sponge
11   USE trc
12   USE lib_mpp
13   USE wrk_nemo 
14
15   IMPLICIT NONE
16   PRIVATE
17
18   PUBLIC Agrif_Sponge_trc, interptrn
19
20   !! * Substitutions
21#  include "domzgr_substitute.h90"
22   !!----------------------------------------------------------------------
23   !! NEMO/NST 3.6 , NEMO Consortium (2010)
24   !! $Id$
25   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
26   !!----------------------------------------------------------------------
27
28CONTAINS
29
30   SUBROUTINE Agrif_Sponge_trc
31      !!---------------------------------------------
32      !!   *** ROUTINE Agrif_Sponge_Trc ***
33      !!---------------------------------------------
34      !!
35      REAL(wp) :: timecoeff
36
37#if defined SPONGE_TOP
38      timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot()
39      CALL Agrif_sponge
40      Agrif_SpecialValue=0.
41      Agrif_UseSpecialValue = .TRUE.
42      tabspongetrn = .FALSE.
43      CALL Agrif_Bc_Variable(trn_sponge_id,calledweight=timecoeff,procname=interptrn_sponge)
44      Agrif_UseSpecialValue = .FALSE.
45
46#endif
47
48   END SUBROUTINE Agrif_Sponge_Trc
49
50   SUBROUTINE interptrn_sponge(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before)
51      !!---------------------------------------------
52      !!   *** ROUTINE interptrn_sponge ***
53      !!---------------------------------------------
54      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2
55      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
64      !
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     
68
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
103
104#else
105CONTAINS
106
107   SUBROUTINE agrif_top_sponge_empty
108      !!---------------------------------------------
109      !!   *** ROUTINE agrif_top_sponge_empty ***
110      !!---------------------------------------------
111      WRITE(*,*)  'agrif_top_sponge : You should not have seen this print! error?'
112   END SUBROUTINE agrif_top_sponge_empty
113#endif
114
115END MODULE agrif_top_sponge
Note: See TracBrowser for help on using the repository browser.