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_opa_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_opa_sponge.F90 @ 4785

Last change on this file since 4785 was 4785, 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: 19.0 KB
Line 
1#define SPONGE && define SPONGE_TOP
2
3Module agrif_opa_sponge
4#if defined key_agrif  && ! defined key_offline
5   USE par_oce
6   USE oce
7   USE dom_oce
8   USE in_out_manager
9   USE agrif_oce
10   USE wrk_nemo 
11
12   IMPLICIT NONE
13   PRIVATE
14
15   PUBLIC Agrif_Sponge, Agrif_Sponge_Tra, Agrif_Sponge_Dyn
16   PUBLIC interptsn_sponge, interpun_sponge, interpvn_sponge
17
18  !! * Substitutions
19#  include "domzgr_substitute.h90"
20   !!----------------------------------------------------------------------
21   !! NEMO/NST 3.3 , NEMO Consortium (2010)
22   !! $Id$
23   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
24   !!----------------------------------------------------------------------
25
26   CONTAINS
27
28   SUBROUTINE Agrif_Sponge_Tra
29      !!---------------------------------------------
30      !!   *** ROUTINE Agrif_Sponge_Tra ***
31      !!---------------------------------------------
32      !!
33      INTEGER :: ji,jj,jk,jn
34      REAL(wp) :: timecoeff
35      REAL(wp) :: ztsa, zabe1, zabe2, zbtr
36      REAL(wp), POINTER, DIMENSION(:,:    ) :: ztu, ztv
37      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztab
38      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: tsbdiff
39
40#if defined SPONGE
41      timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot()
42     
43      CALL Agrif_Sponge
44      Agrif_SpecialValue=0.
45      Agrif_UseSpecialValue = .TRUE.
46      tabspongedone = .FALSE.
47
48      CALL Agrif_Bc_Variable(tsn_sponge_id,calledweight=timecoeff,procname=interptsn_sponge)
49
50      Agrif_UseSpecialValue = .FALSE.
51#endif
52
53   END SUBROUTINE Agrif_Sponge_Tra
54
55   SUBROUTINE Agrif_Sponge_dyn
56      !!---------------------------------------------
57      !!   *** ROUTINE Agrif_Sponge_dyn ***
58      !!---------------------------------------------
59      !!
60      REAL(wp) :: timecoeff
61
62#if defined SPONGE
63      timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot()
64
65         Agrif_SpecialValue=0.
66         Agrif_UseSpecialValue = ln_spc_dyn
67
68         tabspongedone_u = .FALSE.
69         tabspongedone_v = .FALSE.         
70         CALL Agrif_Bc_Variable(un_sponge_id,calledweight=timecoeff,procname=interpun_sponge)
71
72         tabspongedone_u = .FALSE.
73         tabspongedone_v = .FALSE.
74         CALL Agrif_Bc_Variable(vn_sponge_id,calledweight=timecoeff,procname=interpvn_sponge)
75
76         Agrif_UseSpecialValue = .FALSE.
77#endif
78
79   END SUBROUTINE Agrif_Sponge_dyn
80
81   SUBROUTINE Agrif_Sponge
82      !!---------------------------------------------
83      !!   *** ROUTINE  Agrif_Sponge ***
84      !!---------------------------------------------
85      INTEGER  :: ji,jj,jk
86      INTEGER  :: ispongearea, ilci, ilcj
87      REAL(wp) :: z1spongearea
88      REAL(wp), POINTER, DIMENSION(:,:) :: zlocalviscsponge
89
90#if defined SPONGE || defined SPONGE_TOP
91
92      CALL wrk_alloc( jpi, jpj, zlocalviscsponge )
93
94      ispongearea  = 2 + 2 * Agrif_irhox()
95      ilci = nlci - ispongearea
96      ilcj = nlcj - ispongearea 
97      z1spongearea = 1._wp / REAL( ispongearea - 2 )
98      spbtr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) )
99
100      ! Tracers
101      IF( .NOT. spongedoneT ) THEN
102         zlocalviscsponge(:,:) = 0.
103         spe1ur(:,:) = 0.
104         spe2vr(:,:) = 0.
105
106         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN
107            DO ji = 2, ispongearea
108               zlocalviscsponge(ji,:) = visc_tra * ( ispongearea-ji ) * z1spongearea
109            ENDDO
110            spe1ur(2:ispongearea-1,:      ) = 0.5 * ( zlocalviscsponge(2:ispongearea-1,:      )   &
111               &                         +            zlocalviscsponge(3:ispongearea  ,:      ) ) &
112               &                         * e2u(2:ispongearea-1,:      ) / e1u(2:ispongearea-1,:      )
113            spe2vr(2:ispongearea  ,1:jpjm1) = 0.5 * ( zlocalviscsponge(2:ispongearea  ,1:jpjm1)   &
114               &                         +            zlocalviscsponge(2:ispongearea,2  :jpj  ) ) &
115               &                         * e1v(2:ispongearea  ,1:jpjm1) / e2v(2:ispongearea  ,1:jpjm1)
116         ENDIF
117
118         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN
119            DO ji = ilci+1,nlci-1
120               zlocalviscsponge(ji,:) = visc_tra * (ji - (ilci+1) ) * z1spongearea
121            ENDDO
122 
123            spe1ur(ilci+1:nlci-2,:      ) = 0.5 * (  zlocalviscsponge(ilci+1:nlci-2,:)    & 
124               &                          +          zlocalviscsponge(ilci+2:nlci-1,:) )  &
125               &                          * e2u(ilci+1:nlci-2,:) / e1u(ilci+1:nlci-2,:)
126
127            spe2vr(ilci+1:nlci-1,1:jpjm1) = 0.5 * (  zlocalviscsponge(ilci+1:nlci-1,1:jpjm1)    & 
128               &                            +        zlocalviscsponge(ilci+1:nlci-1,2:jpj  )  ) & 
129               &                                   * e1v(ilci+1:nlci-1,1:jpjm1) / e2v(ilci+1:nlci-1,1:jpjm1)
130         ENDIF
131
132         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN
133            DO jj = 2, ispongearea
134               zlocalviscsponge(:,jj) = visc_tra * ( ispongearea-jj ) * z1spongearea
135            ENDDO
136            spe1ur(1:jpim1,2:ispongearea  ) = 0.5 * ( zlocalviscsponge(1:jpim1,2:ispongearea  ) & 
137               &                            +         zlocalviscsponge(2:jpi  ,2:ispongearea) ) &
138               &                            * e2u(1:jpim1,2:ispongearea) / e1u(1:jpim1,2:ispongearea)
139   
140            spe2vr(:      ,2:ispongearea-1) = 0.5 * ( zlocalviscsponge(:,2:ispongearea-1)       &
141               &                            +         zlocalviscsponge(:,3:ispongearea  )     ) &
142               &                            * e1v(:,2:ispongearea-1) / e2v(:,2:ispongearea-1)
143         ENDIF
144
145         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN
146            DO jj = ilcj+1,nlcj-1
147               zlocalviscsponge(:,jj) = visc_tra * (jj - (ilcj+1) ) * z1spongearea
148            ENDDO
149            spe1ur(1:jpim1,ilcj+1:nlcj-1) = 0.5 * ( zlocalviscsponge(1:jpim1,ilcj+1:nlcj-1)   &
150               &                          +         zlocalviscsponge(2:jpi  ,ilcj+1:nlcj-1) ) &
151               &                                * e2u(1:jpim1,ilcj+1:nlcj-1) / e1u(1:jpim1,ilcj+1:nlcj-1)
152            spe2vr(:      ,ilcj+1:nlcj-2) = 0.5 * ( zlocalviscsponge(:,ilcj+1:nlcj-2      )   &
153               &                          +         zlocalviscsponge(:,ilcj+2:nlcj-1)     )   &
154               &                                * e1v(:,ilcj+1:nlcj-2) / e2v(:,ilcj+1:nlcj-2)
155         ENDIF
156         spongedoneT = .TRUE.
157      ENDIF
158
159      ! Dynamics
160      IF( .NOT. spongedoneU ) THEN
161         zlocalviscsponge(:,:) = 0.
162         spe1ur2(:,:) = 0.
163         spe2vr2(:,:) = 0.
164
165         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN
166            DO ji = 2, ispongearea
167               zlocalviscsponge(ji,:) = visc_dyn * ( ispongearea-ji ) * z1spongearea
168            ENDDO
169            spe1ur2(2:ispongearea-1,:      ) = 0.5 * ( zlocalviscsponge(2:ispongearea-1,:      ) &
170                                             &     +   zlocalviscsponge(3:ispongearea,:    ) )
171            spe2vr2(2:ispongearea  ,1:jpjm1) = 0.5 * ( zlocalviscsponge(2:ispongearea  ,1:jpjm1) &
172                                             &     +   zlocalviscsponge(2:ispongearea,2:jpj) ) 
173         ENDIF
174
175         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN
176            DO ji = ilci+1,nlci-1
177               zlocalviscsponge(ji,:) = visc_dyn * (ji - (ilci+1) ) * z1spongearea
178            ENDDO
179            spe1ur2(ilci+1:nlci-2,:      ) = 0.5 * (  zlocalviscsponge(ilci+1:nlci-2,:) &
180                                           &        + zlocalviscsponge(ilci+2:nlci-1,:) ) 
181            spe2vr2(ilci+1:nlci-1,1:jpjm1) = 0.5 * (  zlocalviscsponge(ilci+1:nlci-1,1:jpjm1) &
182                                           &        + zlocalviscsponge(ilci+1:nlci-1,2:jpj  )  ) 
183         ENDIF
184
185         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN
186            DO jj = 2, ispongearea
187               zlocalviscsponge(:,jj) = visc_dyn * ( ispongearea-jj ) * z1spongearea
188            ENDDO
189            spe1ur2(1:jpim1,2:ispongearea  ) = 0.5 * ( zlocalviscsponge(1:jpim1,2:ispongearea) &
190                                             &      + zlocalviscsponge(2:jpi,2:ispongearea) ) 
191            spe2vr2(:      ,2:ispongearea-1) = 0.5 * ( zlocalviscsponge(:,2:ispongearea-1)     &
192                                             &      + zlocalviscsponge(:,3:ispongearea)     )
193         ENDIF
194
195         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN
196            DO jj = ilcj+1,nlcj-1
197               zlocalviscsponge(:,jj) = visc_dyn * (jj - (ilcj+1) ) * z1spongearea
198            ENDDO
199            spe1ur2(1:jpim1,ilcj+1:nlcj-1) = 0.5 * ( zlocalviscsponge(1:jpim1,ilcj+1:nlcj-1) &
200                                           &         + zlocalviscsponge(2:jpi,ilcj+1:nlcj-1) ) 
201            spe2vr2(:      ,ilcj+1:nlcj-2) = 0.5 * ( zlocalviscsponge(:,ilcj+1:nlcj-2      ) &
202                                           &         + zlocalviscsponge(:,ilcj+2:nlcj-1)     )
203         ENDIF
204         spongedoneU = .TRUE.
205         spbtr3(:,:) = 1. / ( e1f(:,:) * e2f(:,:) )
206      ENDIF
207      !
208      CALL wrk_dealloc( jpi, jpj, zlocalviscsponge )
209      !
210#endif
211
212   END SUBROUTINE Agrif_Sponge
213
214   SUBROUTINE interptsn_sponge(tabres,i1,i2,j1,j2,k1,k2,n1,n2,before)
215      !!---------------------------------------------
216      !!   *** ROUTINE interptsn_sponge ***
217      !!---------------------------------------------
218      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2
219      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres
220      LOGICAL, INTENT(in) :: before
221       
222     
223      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices
224
225      REAL(wp) :: ztsa, zabe1, zabe2, zbtr
226      REAL(wp), DIMENSION(i1:i2,j1:j2) :: ztu, ztv
227      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::tsbdiff
228      !
229         
230         
231         IF (before) THEN
232            tabres(i1:i2,j1:j2,k1:k2,n1:n2) = tsn(i1:i2,j1:j2,k1:k2,n1:n2)
233         ELSE     
234
235            tsbdiff(:,:,:,:) = tsb(i1:i2,j1:j2,:,:) - tabres(:,:,:,:)     
236            DO jn = 1, jpts
237               DO jk = 1, jpkm1
238                 
239                  DO jj = j1,j2-1
240                     DO ji = i1,i2-1
241                        zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk)
242                        zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk)
243                        ztu(ji,jj) = zabe1 * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )
244                        ztv(ji,jj) = zabe2 * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) )
245                     ENDDO
246                  ENDDO
247                 
248                  DO jj = j1+1,j2-1
249                     DO ji = i1+1,i2-1
250                       
251                        if (.not. tabspongedone(ji,jj)) then
252                           zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk)
253            ! horizontal diffusive trends
254                           ztsa = zbtr * (  ztu(ji,jj) - ztu(ji-1,jj  ) + ztv(ji,jj) - ztv(ji  ,jj-1)  )
255            ! add it to the general tracer trends
256                           tsa(ji,jj,jk,jn) = tsa(ji,jj,jk,jn) + ztsa
257                         endif
258 
259                       ENDDO
260                    ENDDO
261                   
262                ENDDO
263             ENDDO
264             
265             tabspongedone(i1+1:i2-1,j1+1:j2-1) = .TRUE.
266                         
267    ENDIF
268               
269   END SUBROUTINE interptsn_sponge
270
271   SUBROUTINE interpun_sponge(tabres,i1,i2,j1,j2,k1,k2, before)
272      !!---------------------------------------------
273      !!   *** ROUTINE interpun_sponge ***
274      !!---------------------------------------------   
275      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2
276      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres
277      LOGICAL, INTENT(in) :: before
278
279      INTEGER :: ji,jj,jk
280
281   ! sponge parameters
282      REAL(wp) :: ze2u, ze1v, zua, zva, zbtr
283      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: ubdiff
284      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: rotdiff, hdivdiff
285      INTEGER :: jmax
286   !
287     
288
289      IF (before) THEN
290         
291          tabres = un(i1:i2,j1:j2,:)
292
293      ELSE
294         
295         ubdiff(i1:i2,j1:j2,:) = (ub(i1:i2,j1:j2,:) - tabres(:,:,:))*umask(i1:i2,j1:j2,:)
296         
297         DO jk=1,jpkm1
298            ubdiff(i1:i2,j1:j2,jk) = ubdiff(i1:i2,j1:j2,jk) * spe1ur2(i1:i2,j1:j2)
299         ENDDO
300
301         DO jk = 1, jpkm1                                 ! Horizontal slab
302!                                             ! ===============
303
304!                                             ! --------
305! Horizontal divergence                       !   div
306!                                             ! --------
307            DO jj = j1,j2
308               DO ji = i1+1,i2   ! vector opt.
309                  zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk)
310                  hdivdiff(ji,jj,jk) = (e2u(ji,jj)*fse3u(ji,jj,jk) * ubdiff(ji,jj,jk) - e2u(ji-1,jj)* fse3u(ji-1,jj  ,jk)  &
311                                       * ubdiff(ji-1,jj  ,jk) ) * zbtr
312               END DO
313            END DO
314
315            DO jj = j1,j2-1
316               DO ji = i1,i2   ! vector opt.
317                  zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk)
318                  rotdiff(ji,jj,jk) = (- e1u(ji  ,jj+1) * ubdiff(ji  ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk)  ) &
319                                      * fmask(ji,jj,jk) * zbtr 
320               END DO
321            END DO
322         ENDDO
323
324!
325
326
327
328            DO jj = j1+1, j2-1
329               DO ji = i1+1, i2-1   ! vector opt.
330                 
331                  if (.not. tabspongedone_u(ji,jj)) then
332                     DO jk = 1, jpkm1                                 ! Horizontal slab
333                        ze2u = rotdiff (ji,jj,jk)
334                        ze1v = hdivdiff(ji,jj,jk)
335! horizontal diffusive trends
336                        zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   &
337                        + ( hdivdiff(ji+1,jj,jk) - ze1v  ) / e1u(ji,jj)
338
339! add it to the general momentum trends
340                        ua(ji,jj,jk) = ua(ji,jj,jk) + zua
341
342                     END DO                 
343                  endif
344
345               END DO           
346            END DO
347                 
348            tabspongedone_u(i1+1:i2-1,j1+1:j2-1) = .true.
349 
350         jmax = j2-1
351         If ((nbondj == 1).OR.(nbondj == 2)) jmax = min(jmax,nlcj-3)
352                               
353            DO jj = j1+1, jmax
354               DO ji = i1+1, i2   ! vector opt.
355                 
356                  if (.not. tabspongedone_v(ji,jj)) then
357                     DO jk = 1, jpkm1                                 ! Horizontal slab
358                        ze2u = rotdiff (ji,jj,jk)
359                        ze1v = hdivdiff(ji,jj,jk)
360                       
361! horizontal diffusive trends
362                        zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   &
363                        + ( hdivdiff(ji,jj+1,jk) - ze1v  ) / e2v(ji,jj)
364
365! add it to the general momentum trends
366                        va(ji,jj,jk) = va(ji,jj,jk) + zva
367                     END DO                 
368                  endif
369
370               END DO           
371            END DO
372
373           
374            tabspongedone_v(i1+1:i2,j1+1:jmax) = .true.
375           
376      ENDIF
377         
378         
379   END SUBROUTINE interpun_sponge
380 
381   
382   SUBROUTINE interpvn_sponge(tabres,i1,i2,j1,j2,k1,k2, before,nb,ndir)
383     !!---------------------------------------------
384      !!   *** ROUTINE interpvn_sponge ***
385      !!---------------------------------------------
386      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2
387      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres
388      LOGICAL, INTENT(in) :: before
389      INTEGER, INTENT(in) :: nb , ndir
390
391      INTEGER :: ji,jj,jk
392
393      REAL(wp) :: ze2u, ze1v, zua, zva, zbtr
394     
395      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: vbdiff
396      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: rotdiff, hdivdiff
397      INTEGER :: imax
398   !
399     
400      IF (before) THEN
401        tabres = vn(i1:i2,j1:j2,:)
402      ELSE
403
404         vbdiff(i1:i2,j1:j2,:) = (vb(i1:i2,j1:j2,:) - tabres(:,:,:))*vmask(i1:i2,j1:j2,:)
405           
406         DO jk=1,jpkm1
407            vbdiff(i1:i2,j1:j2,jk) = vbdiff(i1:i2,j1:j2,jk) * spe2vr2(i1:i2,j1:j2)
408         ENDDO
409
410         DO jk = 1, jpkm1                                 ! Horizontal slab
411!                                             ! ===============
412
413!                                             ! --------
414! Horizontal divergence                       !   div
415!                                             ! --------
416            DO jj = j1+1,j2
417               DO ji = i1,i2   ! vector opt.
418                  zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk)
419                  hdivdiff(ji,jj,jk) = (e1v(ji,jj) * fse3v(ji,jj,jk) * vbdiff(ji,jj,jk) - e1v(ji  ,jj-1) &
420                                       * fse3v(ji  ,jj-1,jk)  * vbdiff(ji  ,jj-1,jk)  ) * zbtr
421               END DO
422            END DO
423
424            DO jj = j1,j2
425               DO ji = i1,i2-1   ! vector opt.
426                  zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk)
427                  rotdiff(ji,jj,jk) = (e2v(ji+1,jj  ) * vbdiff(ji+1,jj  ,jk) - e2v(ji,jj) * vbdiff(ji,jj,jk)) &
428                                      * fmask(ji,jj,jk) * zbtr
429               END DO
430            END DO
431
432         ENDDO
433
434!                                                ! ===============
435!                                               
436         
437         imax = i2-1
438         If ((nbondi == 1).OR.(nbondi == 2)) imax = min(imax,nlci-3)
439                           
440            DO jj = j1+1, j2
441               DO ji = i1+1, imax   ! vector opt.
442                  if (.not. tabspongedone_u(ji,jj)) then
443                     DO jk = 1, jpkm1                                 ! Horizontal slab
444                        ze2u = rotdiff (ji,jj,jk)
445                        ze1v = hdivdiff(ji,jj,jk)
446! horizontal diffusive trends
447                        zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) + ( hdivdiff(ji+1,jj,jk) - ze1v) &
448                        / e1u(ji,jj)
449
450
451! add it to the general momentum trends
452                       ua(ji,jj,jk) = ua(ji,jj,jk) + zua
453                     END DO
454
455                   endif
456            END DO           
457         END DO 
458 
459         tabspongedone_u(i1+1:imax,j1+1:j2) = .true.
460         
461            DO jj = j1+1, j2-1
462               DO ji = i1+1, i2-1   ! vector opt.
463                  if (.not. tabspongedone_v(ji,jj)) then
464                     DO jk = 1, jpkm1                                 ! Horizontal slab
465                        ze2u = rotdiff (ji,jj,jk)
466                        ze1v = hdivdiff(ji,jj,jk)
467! horizontal diffusive trends
468
469                        zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) + ( hdivdiff(ji,jj+1,jk) - ze1v) &
470                        / e2v(ji,jj)
471
472! add it to the general momentum trends
473                       va(ji,jj,jk) = va(ji,jj,jk) + zva
474                     END DO
475
476                   endif
477            END DO           
478         END DO         
479         
480         tabspongedone_v(i1+1:i2-1,j1+1:j2-1) = .true.
481         
482      ENDIF
483     
484   END SUBROUTINE interpvn_sponge
485
486#else
487CONTAINS
488
489   SUBROUTINE agrif_opa_sponge_empty
490      !!---------------------------------------------
491      !!   *** ROUTINE agrif_OPA_sponge_empty ***
492      !!---------------------------------------------
493      WRITE(*,*)  'agrif_opa_sponge : You should not have seen this print! error?'
494   END SUBROUTINE agrif_opa_sponge_empty
495#endif
496
497END MODULE agrif_opa_sponge
Note: See TracBrowser for help on using the repository browser.