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_interp.F90 in trunk/NEMOGCM/NEMO/NST_SRC – NEMO

source: trunk/NEMOGCM/NEMO/NST_SRC/agrif_top_interp.F90 @ 3294

Last change on this file since 3294 was 3294, checked in by rblod, 12 years ago

Merge of 3.4beta into the trunk

  • Property svn:keywords set to Id
File size: 5.1 KB
Line 
1MODULE agrif_top_interp
2#if defined key_agrif && defined key_top
3   USE par_oce
4   USE oce
5   USE dom_oce     
6   USE sol_oce
7   USE agrif_oce
8   USE agrif_top_sponge
9   USE trc
10   USE lib_mpp
11   USE wrk_nemo 
12
13   IMPLICIT NONE
14   PRIVATE
15
16   PUBLIC Agrif_trc
17
18#  include "domzgr_substitute.h90" 
19#  include "vectopt_loop_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_trc
29      !!---------------------------------------------
30      !!   *** ROUTINE Agrif_trc ***
31      !!---------------------------------------------
32     
33      INTEGER :: ji,jj,jk,jn
34      REAL(wp) :: zrhox
35      REAL(wp) :: alpha1, alpha2, alpha3, alpha4
36      REAL(wp) :: alpha5, alpha6, alpha7
37      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztra
38           
39      IF (Agrif_Root()) RETURN
40
41      CALL wrk_alloc( jpi, jpj, jpk, jptra, ztra )
42
43      Agrif_SpecialValue=0.
44      Agrif_UseSpecialValue = .TRUE.
45      ztra = 0.e0
46
47      CALL Agrif_Bc_variable(ztra,trn_id, procname = interptrn )
48      Agrif_UseSpecialValue = .FALSE.
49
50      zrhox = Agrif_Rhox()
51
52      alpha1 = (zrhox-1.)/2.
53      alpha2 = 1.-alpha1
54
55      alpha3 = (zrhox-1)/(zrhox+1)
56      alpha4 = 1.-alpha3
57
58      alpha6 = 2.*(zrhox-1.)/(zrhox+1.)
59      alpha7 = -(zrhox-1)/(zrhox+3)
60      alpha5 = 1. - alpha6 - alpha7
61
62      IF ((nbondi == 1).OR.(nbondi == 2)) THEN
63         tra(nlci,:,:,:) = alpha1 * ztra(nlci,:,:,:) + alpha2 * ztra(nlci-1,:,:,:)
64         DO jn=1,jptra 
65            DO jk=1,jpk     
66               DO jj=1,jpj
67                  IF (umask(nlci-2,jj,jk).EQ.0.) THEN
68                     tra(nlci-1,jj,jk,jn) = tra(nlci,jj,jk,jn) * tmask(nlci-1,jj,jk)
69                  ELSE
70                     tra(nlci-1,jj,jk,jn)=(alpha4*tra(nlci,jj,jk,jn)+alpha3*tra(nlci-2,jj,jk,jn))*tmask(nlci-1,jj,jk)
71                     IF (un(nlci-2,jj,jk).GT.0.) THEN
72                        tra(nlci-1,jj,jk,jn)=(alpha6*tra(nlci-2,jj,jk,jn)+alpha5*tra(nlci,jj,jk,jn) &
73                           +alpha7*tra(nlci-3,jj,jk,jn))*tmask(nlci-1,jj,jk)
74                     ENDIF
75                  ENDIF
76               END DO
77            END DO
78         END DO
79      ENDIF
80
81      IF ((nbondj == 1).OR.(nbondj == 2)) THEN
82         tra(:,nlcj,:,:) = alpha1 * ztra(:,nlcj,:,:) + alpha2 * ztra(:,nlcj-1,:,:)
83         DO jn=1, jptra           
84            DO jk=1,jpk     
85               DO ji=1,jpi
86                  IF (vmask(ji,nlcj-2,jk).EQ.0.) THEN
87                     tra(ji,nlcj-1,jk,jn) = tra(ji,nlcj,jk,jn) * tmask(ji,nlcj-1,jk)
88                  ELSE
89                     tra(ji,nlcj-1,jk,jn)=(alpha4*tra(ji,nlcj,jk,jn)+alpha3*tra(ji,nlcj-2,jk,jn))*tmask(ji,nlcj-1,jk)       
90                     IF (vn(ji,nlcj-2,jk) .GT. 0.) THEN
91                        tra(ji,nlcj-1,jk,jn)=(alpha6*tra(ji,nlcj-2,jk,jn)+alpha5*tra(ji,nlcj,jk,jn) &
92                           +alpha7*tra(ji,nlcj-3,jk,jn))*tmask(ji,nlcj-1,jk)
93                     ENDIF
94                  ENDIF
95               END DO
96            END DO
97         END DO
98      ENDIF
99
100      IF ((nbondi == -1).OR.(nbondi == 2)) THEN
101         tra(1,:,:,:) = alpha1 * ztra(1,:,:,:) + alpha2 * ztra(2,:,:,:)
102         DO jn=1, jptra
103            DO jk=1,jpk     
104               DO jj=1,jpj
105                  IF (umask(2,jj,jk).EQ.0.) THEN
106                     tra(2,jj,jk,jn) = tra(1,jj,jk,jn) * tmask(2,jj,jk)
107                  ELSE
108                     tra(2,jj,jk,jn)=(alpha4*tra(1,jj,jk,jn)+alpha3*tra(3,jj,jk,jn))*tmask(2,jj,jk)       
109                     IF (un(2,jj,jk).LT.0.) THEN
110                        tra(2,jj,jk,jn)=(alpha6*tra(3,jj,jk,jn)+alpha5*tra(1,jj,jk,jn) &
111                           +alpha7*tra(4,jj,jk,jn))*tmask(2,jj,jk)
112                     ENDIF
113                  ENDIF
114               END DO
115            END DO
116         END DO
117      ENDIF
118
119      IF ((nbondj == -1).OR.(nbondj == 2)) THEN
120         tra(:,1,:,:) = alpha1 * ztra(:,1,:,:) + alpha2 * ztra(:,2,:,:)
121         DO jn=1, jptra 
122            DO jk=1,jpk     
123               DO ji=1,jpi
124                  IF (vmask(ji,2,jk).EQ.0.) THEN
125                     tra(ji,2,jk,jn)=tra(ji,1,jk,jn) * tmask(ji,2,jk)
126                  ELSE
127                     tra(ji,2,jk,jn)=(alpha4*tra(ji,1,jk,jn)+alpha3*tra(ji,3,jk,jn))*tmask(ji,2,jk)
128                     IF (vn(ji,2,jk) .LT. 0.) THEN
129                        tra(ji,2,jk,jn)=(alpha6*tra(ji,3,jk,jn)+alpha5*tra(ji,1,jk,jn)&
130                           +alpha7*tra(ji,4,jk,jn))*tmask(ji,2,jk)
131                     ENDIF
132                  ENDIF
133               END DO
134            END DO
135         END DO
136      ENDIF
137
138      CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztra )
139
140   END SUBROUTINE Agrif_trc
141
142#else
143CONTAINS
144   SUBROUTINE Agrif_TOP_Interp_empty
145      !!---------------------------------------------
146      !!   *** ROUTINE agrif_Top_Interp_empty ***
147      !!---------------------------------------------
148      WRITE(*,*)  'agrif_top_interp : You should not have seen this print! error?'
149   END SUBROUTINE Agrif_TOP_Interp_empty
150#endif
151END MODULE agrif_top_interp
Note: See TracBrowser for help on using the repository browser.