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_update.F90 in branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/NST_SRC – NEMO

source: branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90 @ 7953

Last change on this file since 7953 was 7953, checked in by gm, 7 years ago

#1880 (HPC-09): add zdfphy (the ZDF manager) + remove all key_...

  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
1#define TWO_WAY
2#undef DECAL_FEEDBACK
3
4MODULE agrif_top_update
5   !!======================================================================
6   !!                ***  MODULE agrif_top_update  ***
7   !! AGRIF :   
8   !!======================================================================
9   !! History : 
10   !!----------------------------------------------------------------------
11#if defined key_agrif && defined key_top
12   !!----------------------------------------------------------------------
13   !!   'key_agrif'                                              AGRIF zoom
14   !!   'key_TOP'                                           on-line tracers
15   !!----------------------------------------------------------------------
16   USE par_oce
17   USE oce
18   USE dom_oce
19   USE agrif_oce
20   USE par_trc
21   USE trc
22   !
23   USE wrk_nemo 
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC Agrif_Update_Trc
29
30   INTEGER, PUBLIC ::   nbcline_trc = 0   !: ???
31
32   !!----------------------------------------------------------------------
33   !! NEMO/NST 4.0 , NEMO Consortium (2017)
34   !! $Id$
35   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
36   !!----------------------------------------------------------------------
37CONTAINS
38
39   SUBROUTINE Agrif_Update_Trc( kt )
40      !!----------------------------------------------------------------------
41      !!                   *** ROUTINE Agrif_Update_Trc ***
42      !!----------------------------------------------------------------------
43      INTEGER, INTENT(in) ::   kt
44      !!----------------------------------------------------------------------
45      !
46      IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN
47#if defined TWO_WAY   
48      Agrif_UseSpecialValueInUpdate = .TRUE.
49      Agrif_SpecialValueFineGrid    = 0._wp
50      !
51      IF( MOD(nbcline_trc,nbclineupdate) == 0 ) THEN
52# if ! defined DECAL_FEEDBACK
53         CALL Agrif_Update_Variable(trn_id, procname=updateTRC )
54# else
55         CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC )
56# endif
57      ELSE
58# if ! defined DECAL_FEEDBACK
59         CALL Agrif_Update_Variable( trn_id, locupdate=(/0,2/), procname=updateTRC )
60# else
61         CALL Agrif_Update_Variable( trn_id, locupdate=(/1,2/), procname=updateTRC )
62# endif
63      ENDIF
64      !
65      Agrif_UseSpecialValueInUpdate = .FALSE.
66      nbcline_trc = nbcline_trc + 1
67#endif
68      !
69   END SUBROUTINE Agrif_Update_Trc
70
71
72   SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before )
73      !!----------------------------------------------------------------------
74      !!                      *** ROUTINE updateT ***
75      !!----------------------------------------------------------------------
76      INTEGER                                    , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, n1, n2
77      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   ptab
78      LOGICAL                                    , INTENT(in   ) ::   before
79      !!
80      INTEGER ::   ji, jj, jk, jn
81      !!----------------------------------------------------------------------
82      !
83      IF( before ) THEN
84         ptab(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2)
85      ELSE
86         IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN
87            ! Add asselin part
88            DO jn = n1,n2
89               DO jk = k1, k2
90                  DO jj = j1, j2
91                     DO ji = i1, i2
92                        IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN
93                           trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn)             & 
94                              &             + atfp * ( ptab(ji,jj,jk,jn)   &
95                                 &                    - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk)
96                        ENDIF
97                     END DO
98                  END DO
99               END DO
100            END DO
101         ENDIF
102         DO jn = n1, n2
103            DO jk = k1, k2
104               DO jj = j1, j2
105                  DO ji = i1, i2
106                     IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN
107                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) * tmask(ji,jj,jk)
108                     END IF
109                  END DO
110               END DO
111            END DO
112         END DO
113      ENDIF
114      !
115   END SUBROUTINE updateTRC
116
117#else
118   !!----------------------------------------------------------------------
119   !!   Empty module                                           no TOP AGRIF
120   !!----------------------------------------------------------------------
121CONTAINS
122   SUBROUTINE agrif_top_update_empty
123      WRITE(*,*)  'agrif_top_update : You should not have seen this print! error?'
124   END SUBROUTINE agrif_top_update_empty
125#endif
126
127   !!======================================================================
128END MODULE agrif_top_update
Note: See TracBrowser for help on using the repository browser.