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/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC – NEMO

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