/[MITgcm]/MITgcm/pkg/gmredi/gmredi_ytransport.F
ViewVC logotype

Annotation of /MITgcm/pkg/gmredi/gmredi_ytransport.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.21 - (hide annotations) (download)
Tue Sep 9 22:34:06 2014 UTC (9 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65l, checkpoint65m, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65o, HEAD
Changes since 1.20: +25 -11 lines
Include explicitly AUTODIFF_OPTIONS.h (in case we don't use ECCO_CPPOPTIONS.h)

1 jmc 1.21 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_ytransport.F,v 1.20 2014/08/18 12:23:04 jmc Exp $
2 jmc 1.11 C $Name: $
3 adcroft 1.1
4     #include "GMREDI_OPTIONS.h"
5 jmc 1.21 #ifdef ALLOW_AUTODIFF
6     # include "AUTODIFF_OPTIONS.h"
7     #endif
8 jmc 1.19 #ifdef ALLOW_CTRL
9     # include "CTRL_OPTIONS.h"
10     #endif
11 adcroft 1.1
12 jmc 1.21 C !ROUTINE: GMREDI_YTRANSPORT
13     C !INTERFACE:
14 jmc 1.18 SUBROUTINE GMREDI_YTRANSPORT(
15 jmc 1.20 I trIdentity, bi, bj, k,
16     I iMin, iMax, jMin, jMax,
17     I yA, Tracer,
18 adcroft 1.1 U df,
19 jmc 1.20 I myThid )
20 jmc 1.21
21     C !DESCRIPTION: \bv
22 jmc 1.18 C *==========================================================*
23     C | o SUBROUTINE GMREDI_YTRANSPORT
24     C | Add horizontal y transport terms from GM/Redi
25     C | parameterization.
26     C *==========================================================*
27 jmc 1.21 C \ev
28    
29     C !USES:
30 adcroft 1.1 IMPLICIT NONE
31     C == GLobal variables ==
32     #include "SIZE.h"
33     #include "EEPARAMS.h"
34     #include "PARAMS.h"
35     #include "GRID.h"
36     #include "GMREDI.h"
37 jmc 1.19 #ifdef ALLOW_CTRL
38     # include "CTRL_FIELDS.h"
39     #endif
40 jmc 1.18
41 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
42 heimbach 1.14 # include "tamc.h"
43     # include "tamc_keys.h"
44     # ifdef ALLOW_PTRACERS
45     # include "PTRACERS_SIZE.h"
46     # endif
47 heimbach 1.7 #endif /* ALLOW_AUTODIFF_TAMC */
48 adcroft 1.1
49 jmc 1.21 C !INPUT/OUTPUT PARAMETERS:
50     C trIdentity :: tracer Id number
51     C bi, bj :: current tile indices
52     C k :: current level index
53     C iMin,iMax :: Range of 1rst index where results will be set
54     C jMin,jMax :: Range of 2nd index where results will be set
55     C yA :: Area of Y face
56     C Tracer :: 3D Tracer field
57     C df :: Diffusive flux component work array.
58     C myThid :: my Thread Id number
59 jmc 1.20 INTEGER trIdentity
60     INTEGER bi, bj, k
61     INTEGER iMin, iMax, jMin, jMax
62     _RS yA (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
63     _RL Tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
64 adcroft 1.1 _RL df (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
65     INTEGER myThid
66 jmc 1.21 CEOP
67 adcroft 1.1
68     #ifdef ALLOW_GMREDI
69 jmc 1.21 C !LOCAL VARIABLES:
70     C i, j :: Loop counters
71 jmc 1.20 INTEGER i, j
72 jmc 1.18 #if ( defined (GM_EXTRA_DIAGONAL) || defined (GM_BOLUS_ADVEC) )
73     INTEGER kp1
74     #endif
75 heimbach 1.12 #ifdef GM_EXTRA_DIAGONAL
76 jmc 1.18 INTEGER km1
77 heimbach 1.12 _RL dTdz(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
78     #endif
79     #ifdef GM_BOLUS_ADVEC
80 jmc 1.18 _RL maskp1
81 heimbach 1.12 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
82 dfer 1.15 #ifdef ALLOW_DIAGNOSTICS
83     LOGICAL DIAGNOSTICS_IS_ON
84     EXTERNAL DIAGNOSTICS_IS_ON
85     _RL tmp1k(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
86     #endif
87 jmc 1.18 #endif /* GM_BOLUS_ADVEC */
88 adcroft 1.1
89 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
90 jmc 1.20 act0 = trIdentity - 1
91 heimbach 1.8 max0 = maxpass
92 heimbach 1.7 act1 = bi - myBxLo(myThid)
93     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
94     act2 = bj - myByLo(myThid)
95     max2 = myByHi(myThid) - myByLo(myThid) + 1
96     act3 = myThid - 1
97     max3 = nTx*nTy
98     act4 = ikey_dynamics - 1
99 jmc 1.18 igadkey = (act0 + 1)
100 heimbach 1.8 & + act1*max0
101     & + act2*max0*max1
102     & + act3*max0*max1*max2
103     & + act4*max0*max1*max2*max3
104     kkey = (igadkey-1)*Nr + k
105 jmc 1.20 if (trIdentity.GT.maxpass) then
106     print *, 'ph-pass gmredi_ytrans ', maxpass, trIdentity
107     STOP 'maxpass seems smaller than trIdentity'
108 heimbach 1.13 endif
109 heimbach 1.7 #endif /* ALLOW_AUTODIFF_TAMC */
110    
111 heimbach 1.2 IF (useGMRedi) THEN
112 jmc 1.18
113 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
114 heimbach 1.8 # ifdef GM_NON_UNITY_DIAGONAL
115     CADJ STORE Kvy(:,:,k,bi,bj) =
116     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
117     # endif
118     # ifdef GM_EXTRA_DIAGONAL
119     CADJ STORE Kvz(:,:,k,bi,bj) =
120     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
121     # endif
122 jmc 1.21 #endif /* ALLOW_AUTODIFF_TAMC */
123 adcroft 1.1
124     C-- Area integrated meridional flux
125     DO j=jMin,jMax
126     DO i=iMin,iMax
127     df(i,j) = df(i,j)
128 jmc 1.5 & -yA(i,j)
129 adcroft 1.1 #ifdef GM_NON_UNITY_DIAGONAL
130 heimbach 1.3 & *Kvy(i,j,k,bi,bj)
131 jmc 1.5 #else
132 gforget 1.16 #ifdef ALLOW_KAPREDI_CONTROL
133 jmc 1.19 & *(kapRedi(i,j,k,bi,bj)
134 gforget 1.16 #else
135 jmc 1.5 & *(GM_isopycK
136 gforget 1.16 #endif
137 jmc 1.5 #ifdef GM_VISBECK_VARIABLE_K
138 jmc 1.11 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
139 adcroft 1.1 #endif
140 jmc 1.5 & )
141     #endif /* GM_NON_UNITY_DIAGONAL */
142 adcroft 1.1 & *_recip_dyC(i,j,bi,bj)
143 jmc 1.20 & *(Tracer(i,j,k)-Tracer(i,j-1,k))
144 adcroft 1.1 ENDDO
145     ENDDO
146 jmc 1.5
147     #ifdef GM_EXTRA_DIAGONAL
148     IF (GM_ExtraDiag) THEN
149     km1 = MAX(k-1,1)
150     kp1 = MIN(k+1,Nr)
151 jmc 1.18
152 jmc 1.20 C- Vertical gradients interpolated to V points
153 jmc 1.5 DO j=jMin,jMax
154     DO i=iMin,iMax
155 heimbach 1.12 dTdz(i,j) = op5*(
156 heimbach 1.10 & +op5*recip_drC(k)*
157 jmc 1.5 & ( maskC(i,j-1,k,bi,bj)*
158 jmc 1.20 & (Tracer(i,j-1,km1)-Tracer(i,j-1,k))
159 jmc 1.5 & +maskC(i, j ,k,bi,bj)*
160 jmc 1.20 & (Tracer(i, j ,km1)-Tracer(i, j ,k))
161 jmc 1.5 & )
162 heimbach 1.10 & +op5*recip_drC(kp1)*
163 jmc 1.5 & ( maskC(i,j-1,kp1,bi,bj)*
164 jmc 1.20 & (Tracer(i,j-1,k)-Tracer(i,j-1,kp1))
165 jmc 1.5 & +maskC(i, j ,kp1,bi,bj)*
166 jmc 1.20 & (Tracer(i, j ,k)-Tracer(i, j ,kp1))
167 jmc 1.5 & ) )
168 heimbach 1.12 ENDDO
169     ENDDO
170     #ifdef GM_AUTODIFF_EXCESSIVE_STORE
171 jmc 1.18 CADJ STORE dtdz(:,:) =
172 heimbach 1.12 CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
173     #endif
174 jmc 1.20 C- Off-diagonal components of horizontal flux
175 heimbach 1.12 DO j=jMin,jMax
176 jmc 1.18 DO i=iMin,iMax
177 heimbach 1.12 df(i,j) = df(i,j) - yA(i,j)*Kvz(i,j,k,bi,bj)*dTdz(i,j)
178 jmc 1.5
179     ENDDO
180     ENDDO
181     ENDIF
182 jmc 1.18 #endif /* GM_EXTRA_DIAGONAL */
183 jmc 1.5
184     #ifdef GM_BOLUS_ADVEC
185 gforget 1.17 IF (GM_AdvForm .AND. GM_AdvSeparate
186     & .AND. .NOT.GM_InMomAsStress) THEN
187 jmc 1.5 kp1 = MIN(k+1,Nr)
188     maskp1 = 1.
189     IF (k.GE.Nr) maskp1 = 0.
190     DO j=jMin,jMax
191     DO i=iMin,iMax
192 heimbach 1.12 vTrans(i,j) = dxG(i,j,bi,bj)*( GM_PsiY(i,j,kp1,bi,bj)*maskp1
193     & -GM_PsiY(i,j,k,bi,bj) )
194     & *maskS(i,j,k,bi,bj)
195     ENDDO
196     ENDDO
197     #ifdef GM_AUTODIFF_EXCESSIVE_STORE
198 jmc 1.18 CADJ STORE vtrans(:,:) =
199 heimbach 1.12 CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
200     #endif
201     DO j=jMin,jMax
202     DO i=iMin,iMax
203 jmc 1.5 df(i,j) = df(i,j)
204 jmc 1.20 & +vTrans(i,j)*op5*(Tracer(i,j,k)+Tracer(i,j-1,k))
205 jmc 1.5 ENDDO
206     ENDDO
207     ENDIF
208 dfer 1.15
209     #ifdef ALLOW_DIAGNOSTICS
210     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
211     IF ( useDiagnostics
212     & .AND. DIAGNOSTICS_IS_ON('GM_vbT ', myThid )
213 jmc 1.20 & .AND. trIdentity.EQ.1 ) THEN
214 dfer 1.15 kp1 = MIN(k+1,Nr)
215     maskp1 = 1.
216     IF (k.GE.Nr) maskp1 = 0.
217 jmc 1.18 DO j=jMin,jMax
218 dfer 1.15 DO i=iMin,iMax
219     tmp1k(i,j) = dxG(i,j,bi,bj)*( GM_PsiY(i,j,kp1,bi,bj)*maskp1
220     & -GM_PsiY(i,j,k,bi,bj) )
221     & *maskS(i,j,k,bi,bj)
222 jmc 1.20 & *op5*(Tracer(i,j,k)+Tracer(i,j-1,k))
223 jmc 1.18 ENDDO
224 dfer 1.15 ENDDO
225     CALL DIAGNOSTICS_FILL(tmp1k,'GM_vbT ', k,1,2,bi,bj,myThid)
226     ENDIF
227     #endif /* ALLOW_DIAGNOSTICS */
228    
229 jmc 1.5 #endif /* GM_BOLUS_ADVEC */
230 adcroft 1.1
231     ENDIF
232     #endif /* ALLOW_GMREDI */
233    
234     RETURN
235     END

  ViewVC Help
Powered by ViewVC 1.1.22