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

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

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


Revision 1.18 - (show annotations) (download)
Wed Jan 20 01:20:29 2010 UTC (14 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62c, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint63g, checkpoint64, checkpoint63, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint62b, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f
Changes since 1.17: +24 -22 lines
avoid unused variables

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

  ViewVC Help
Powered by ViewVC 1.1.22