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
RevLine 
[628]1#define TWO_WAY
[6204]2#undef DECAL_FEEDBACK
[628]3
[636]4MODULE agrif_top_update
5
[1206]6#if defined key_agrif && defined key_top
[636]7   USE par_oce
8   USE oce
9   USE dom_oce
[782]10   USE agrif_oce
[6204]11   USE par_trc
[1271]12   USE trc
[3294]13   USE wrk_nemo 
[628]14
[636]15   IMPLICIT NONE
16   PRIVATE
[628]17
[636]18   PUBLIC Agrif_Update_Trc
[628]19
[1300]20   INTEGER, PUBLIC :: nbcline_trc = 0
[628]21
[1156]22   !!----------------------------------------------------------------------
[2528]23   !! NEMO/NST 3.3 , NEMO Consortium (2010)
[1156]24   !! $Id$
[2528]25   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[1156]26   !!----------------------------------------------------------------------
27
[6204]28CONTAINS
[636]29
[8010]30   SUBROUTINE Agrif_Update_Trc( )
[636]31      !!---------------------------------------------
32      !!   *** ROUTINE Agrif_Update_Trc ***
33      !!---------------------------------------------
[6204]34      !!---------------------------------------------
35      !
[8010]36      IF (Agrif_Root()) RETURN
37     
[6204]38#if defined TWO_WAY   
[8010]39      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update trc  from grid Number',Agrif_Fixed(), 'nbcline_trc', nbcline_trc
40
[628]41      Agrif_UseSpecialValueInUpdate = .TRUE.
42      Agrif_SpecialValueFineGrid = 0.
[6204]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
[628]50      ELSE
[6204]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
[628]56      ENDIF
[6204]57      !
[628]58      Agrif_UseSpecialValueInUpdate = .FALSE.
[1300]59      nbcline_trc = nbcline_trc + 1
[8010]60      !
[628]61#endif
[6204]62      !
[636]63   END SUBROUTINE Agrif_Update_Trc
[628]64
[6204]65   SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before )
[636]66      !!---------------------------------------------
[6204]67      !!           *** ROUTINE updateT ***
[636]68      !!---------------------------------------------
[6204]69#  include "domzgr_substitute.h90"
[3680]70      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2
[6204]71      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: ptab
[636]72      LOGICAL, INTENT(in) :: before
[6204]73      !!
[3680]74      INTEGER :: ji,jj,jk,jn
[8010]75      REAL(wp) :: ztb, ztnu, ztno
[6204]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
[8010]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
[6204]87                  END DO
88               END DO
89            END DO
90         END DO
91      ELSE
[8010]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
[6204]98         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN
[4491]99            ! Add asselin part
[6204]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
[8010]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)
[1300]110                        ENDIF
111                     ENDDO
[636]112                  ENDDO
113               ENDDO
114            ENDDO
115         ENDIF
[8010]116
[6204]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
[8010]122                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) / fse3t_n(ji,jj,jk)
[6204]123                     END IF
124                  END DO
125               END DO
126            END DO
127         END DO
[8010]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         !
[6204]133      ENDIF
134      !
[636]135   END SUBROUTINE updateTRC
[628]136
137#else
[636]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
[628]145#endif
[6204]146END MODULE agrif_top_update
Note: See TracBrowser for help on using the repository browser.