source: branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90 @ 8010

Last change on this file since 8010 was 8010, checked in by jchanut, 3 years ago

AGRIF vvl add on

  • Property svn:keywords set to Id
File size: 4.5 KB
Line 
1#define TWO_WAY
2#undef DECAL_FEEDBACK
3
4MODULE agrif_top_update
5
6#if defined key_agrif && defined key_top
7   USE par_oce
8   USE oce
9   USE dom_oce
10   USE agrif_oce
11   USE par_trc
12   USE trc
13   USE wrk_nemo 
14
15   IMPLICIT NONE
16   PRIVATE
17
18   PUBLIC Agrif_Update_Trc
19
20   INTEGER, PUBLIC :: nbcline_trc = 0
21
22   !!----------------------------------------------------------------------
23   !! NEMO/NST 3.3 , NEMO Consortium (2010)
24   !! $Id$
25   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
26   !!----------------------------------------------------------------------
27
28CONTAINS
29
30   SUBROUTINE Agrif_Update_Trc( )
31      !!---------------------------------------------
32      !!   *** ROUTINE Agrif_Update_Trc ***
33      !!---------------------------------------------
34      !!---------------------------------------------
35      !
36      IF (Agrif_Root()) RETURN
37     
38#if defined TWO_WAY   
39      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update trc  from grid Number',Agrif_Fixed(), 'nbcline_trc', nbcline_trc
40
41      Agrif_UseSpecialValueInUpdate = .TRUE.
42      Agrif_SpecialValueFineGrid = 0.
43      !
44      IF (MOD(nbcline_trc,nbclineupdate) == 0) THEN
45# if ! defined DECAL_FEEDBACK
46         CALL Agrif_Update_Variable(trn_id, procname=updateTRC)
47# else
48         CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC)
49# endif
50      ELSE
51# if ! defined DECAL_FEEDBACK
52         CALL Agrif_Update_Variable(trn_id,locupdate=(/0,2/), procname=updateTRC)
53# else
54         CALL Agrif_Update_Variable(trn_id,locupdate=(/1,2/), procname=updateTRC)
55# endif
56      ENDIF
57      !
58      Agrif_UseSpecialValueInUpdate = .FALSE.
59      nbcline_trc = nbcline_trc + 1
60      !
61#endif
62      !
63   END SUBROUTINE Agrif_Update_Trc
64
65   SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before )
66      !!---------------------------------------------
67      !!           *** ROUTINE updateT ***
68      !!---------------------------------------------
69#  include "domzgr_substitute.h90"
70      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2
71      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: ptab
72      LOGICAL, INTENT(in) :: before
73      !!
74      INTEGER :: ji,jj,jk,jn
75      REAL(wp) :: ztb, ztnu, ztno
76      !!---------------------------------------------
77      !
78      IF (before) THEN
79         DO jn = n1,n2
80            DO jk=k1,k2
81               DO jj=j1,j2
82                  DO ji=i1,i2
83!> jc tmp
84                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * fse3t_n(ji,jj,jk) / e3t_0(ji,jj,jk)
85!                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * fse3t_n(ji,jj,jk)
86!< jc tmp
87                  END DO
88               END DO
89            END DO
90         END DO
91      ELSE
92!> jc tmp
93         DO jn = n1,n2
94            ptab(i1:i2,j1:j2,k1:k2,jn) =  ptab(i1:i2,j1:j2,k1:k2,jn) * e3t_0(i1:i2,j1:j2,k1:k2)
95         ENDDO
96!< jc tmp
97
98         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN
99            ! Add asselin part
100            DO jn = n1,n2
101               DO jk=k1,k2
102                  DO jj=j1,j2
103                     DO ji=i1,i2
104                        IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN
105                           ztb  = trb(ji,jj,jk,jn) * fse3t_b(ji,jj,jk) ! fse3t_b prior update should be used
106                           ztnu = ptab(ji,jj,jk,jn)
107                           ztno = trn(ji,jj,jk,jn) * fse3t_a(ji,jj,jk)
108                           trb(ji,jj,jk,jn) = ( ztb + atfp * ( ztnu - ztno) )  & 
109                                     &        * tmask(ji,jj,jk) / fse3t_b(ji,jj,jk)
110                        ENDIF
111                     ENDDO
112                  ENDDO
113               ENDDO
114            ENDDO
115         ENDIF
116
117         DO jn = n1,n2
118            DO jk=k1,k2
119               DO jj=j1,j2
120                  DO ji=i1,i2
121                     IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN
122                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) / fse3t_n(ji,jj,jk)
123                     END IF
124                  END DO
125               END DO
126            END DO
127         END DO
128         !
129         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
130            trb(i1:i2,j1:j2,k1:k2,n1:n2)  = trn(i1:i2,j1:j2,k1:k2,n1:n2)
131         ENDIF
132         !
133      ENDIF
134      !
135   END SUBROUTINE updateTRC
136
137#else
138CONTAINS
139   SUBROUTINE agrif_top_update_empty
140      !!---------------------------------------------
141      !!   *** ROUTINE agrif_Top_update_empty ***
142      !!---------------------------------------------
143      WRITE(*,*)  'agrif_top_update : You should not have seen this print! error?'
144   END SUBROUTINE agrif_top_update_empty
145#endif
146END MODULE agrif_top_update
Note: See TracBrowser for help on using the repository browser.