/[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.13 - (hide annotations) (download)
Fri Jun 27 01:55:08 2003 UTC (21 years ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint52l_pre, hrcube4, hrcube5, checkpoint52d_pre, checkpoint52j_pre, checkpoint51o_pre, checkpoint54d_post, checkpoint54e_post, checkpoint51l_post, checkpoint52l_post, checkpoint52k_post, checkpoint54, checkpoint53, checkpoint52, checkpoint52f_post, checkpoint54f_post, checkpoint51f_post, checkpoint51d_post, checkpoint51t_post, checkpoint51n_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post, checkpoint51j_post, checkpoint52e_pre, checkpoint52e_post, checkpoint51n_pre, checkpoint53d_post, checkpoint52b_pre, checkpoint54b_post, checkpoint51l_pre, checkpoint52m_post, checkpoint51q_post, checkpoint52b_post, checkpoint52c_post, checkpoint51h_pre, checkpoint52f_pre, checkpoint54a_pre, checkpoint53c_post, branchpoint-genmake2, checkpoint54a_post, checkpoint51r_post, checkpoint51i_post, checkpoint51b_post, checkpoint51c_post, checkpoint53a_post, checkpoint52d_post, checkpoint53g_post, checkpoint52a_pre, checkpoint52i_post, checkpoint51i_pre, checkpoint52h_pre, checkpoint53f_post, checkpoint52j_post, branch-netcdf, checkpoint52n_post, checkpoint53b_pre, checkpoint51e_post, checkpoint51o_post, checkpoint51f_pre, checkpoint53b_post, checkpoint52a_post, checkpoint51g_post, ecco_c52_e35, checkpoint51m_post, checkpoint53d_pre, checkpoint54c_post, checkpoint51p_post, checkpoint51u_post
Branch point for: branch-genmake2, branch-nonh, tg2-branch, netcdf-sm0, checkpoint51n_branch
Changes since 1.12: +5 -3 lines
updated wraning

1 heimbach 1.13 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_ytransport.F,v 1.12 2003/01/21 19:34:13 heimbach Exp $
2 jmc 1.11 C $Name: $
3 adcroft 1.1
4     #include "GMREDI_OPTIONS.h"
5    
6     subroutine GMREDI_YTRANSPORT(
7     I iMin,iMax,jMin,jMax,bi,bj,K,
8 heimbach 1.8 I yA,Tracer,tracerIdentity,
9 adcroft 1.1 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     C \==========================================================/
17     IMPLICIT NONE
18    
19     C == GLobal variables ==
20     #include "SIZE.h"
21     #include "EEPARAMS.h"
22     #include "PARAMS.h"
23     #include "GRID.h"
24     #include "GMREDI.h"
25 heimbach 1.7
26     #ifdef ALLOW_AUTODIFF_TAMC
27     #include "tamc.h"
28     #include "tamc_keys.h"
29     #endif /* ALLOW_AUTODIFF_TAMC */
30 adcroft 1.1
31     C == Routine arguments ==
32     C iMin,iMax,jMin, - Range of points for which calculation
33     C jMax,bi,bj,k results will be set.
34     C xA - Area of X face
35     C Tracer - 3D Tracer field
36     C df - Diffusive flux component work array.
37     INTEGER iMin,iMax,jMin,jMax,bi,bj,k
38     _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39     _RL Tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
40 heimbach 1.9 integer tracerIdentity
41 adcroft 1.1 _RL df (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42     INTEGER myThid
43    
44     #ifdef ALLOW_GMREDI
45    
46     C == Local variables ==
47     C I, J - Loop counters
48     INTEGER I, J
49 heimbach 1.12 INTEGER km1,kp1
50     _RL maskp1
51     #ifdef GM_EXTRA_DIAGONAL
52     _RL dTdz(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
53     #endif
54     #ifdef GM_BOLUS_ADVEC
55     _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56     #endif
57 adcroft 1.1
58 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
59 heimbach 1.8 act0 = tracerIdentity - 1
60     max0 = maxpass
61 heimbach 1.7 act1 = bi - myBxLo(myThid)
62     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
63     act2 = bj - myByLo(myThid)
64     max2 = myByHi(myThid) - myByLo(myThid) + 1
65     act3 = myThid - 1
66     max3 = nTx*nTy
67     act4 = ikey_dynamics - 1
68 heimbach 1.8 igadkey = (act0 + 1)
69     & + act1*max0
70     & + act2*max0*max1
71     & + act3*max0*max1*max2
72     & + act4*max0*max1*max2*max3
73     kkey = (igadkey-1)*Nr + k
74 heimbach 1.13 if (tracerIdentity.GT.maxpass) then
75     print *, 'ph-pass gmredi_ytrans ', maxpass, tracerIdentity
76     STOP 'maxpass seems smaller than tracerIdentity'
77     endif
78 heimbach 1.7 #endif /* ALLOW_AUTODIFF_TAMC */
79    
80 heimbach 1.2 IF (useGMRedi) THEN
81 heimbach 1.7
82     #ifdef ALLOW_AUTODIFF_TAMC
83 heimbach 1.8 # ifdef GM_NON_UNITY_DIAGONAL
84     CADJ STORE Kvy(:,:,k,bi,bj) =
85     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
86     # endif
87     # ifdef GM_EXTRA_DIAGONAL
88     CADJ STORE Kvz(:,:,k,bi,bj) =
89     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
90     # endif
91 heimbach 1.7 #endif
92 adcroft 1.1
93     C-- Area integrated meridional flux
94     DO j=jMin,jMax
95     DO i=iMin,iMax
96     df(i,j) = df(i,j)
97 jmc 1.5 & -yA(i,j)
98 adcroft 1.1 #ifdef GM_NON_UNITY_DIAGONAL
99 heimbach 1.3 & *Kvy(i,j,k,bi,bj)
100 jmc 1.5 #else
101     & *(GM_isopycK
102     #ifdef GM_VISBECK_VARIABLE_K
103 jmc 1.11 & +op5*(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))
104 adcroft 1.1 #endif
105 jmc 1.5 & )
106     #endif /* GM_NON_UNITY_DIAGONAL */
107 adcroft 1.1 & *_recip_dyC(i,j,bi,bj)
108     & *(Tracer(i,j,k,bi,bj)-Tracer(i,j-1,k,bi,bj))
109     ENDDO
110     ENDDO
111 jmc 1.5
112     #ifdef GM_EXTRA_DIAGONAL
113     IF (GM_ExtraDiag) THEN
114     km1 = MAX(k-1,1)
115     kp1 = MIN(k+1,Nr)
116    
117     DO j=jMin,jMax
118     DO i=iMin,iMax
119    
120     C- Vertical gradients interpolated to V points
121 heimbach 1.12 dTdz(i,j) = op5*(
122 heimbach 1.10 & +op5*recip_drC(k)*
123 jmc 1.5 & ( maskC(i,j-1,k,bi,bj)*
124     & (Tracer(i,j-1,km1,bi,bj)-Tracer(i,j-1,k,bi,bj))
125     & +maskC(i, j ,k,bi,bj)*
126     & (Tracer(i, j ,km1,bi,bj)-Tracer(i, j ,k,bi,bj))
127     & )
128 heimbach 1.10 & +op5*recip_drC(kp1)*
129 jmc 1.5 & ( maskC(i,j-1,kp1,bi,bj)*
130     & (Tracer(i,j-1,k,bi,bj)-Tracer(i,j-1,kp1,bi,bj))
131     & +maskC(i, j ,kp1,bi,bj)*
132     & (Tracer(i, j ,k,bi,bj)-Tracer(i, j ,kp1,bi,bj))
133     & ) )
134 heimbach 1.12 ENDDO
135     ENDDO
136     #ifdef GM_AUTODIFF_EXCESSIVE_STORE
137     CADJ STORE dtdz(:,:) =
138     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
139     #endif
140     DO j=jMin,jMax
141     DO i=iMin,iMax
142 jmc 1.5 C- Off-diagonal components of horizontal flux
143 heimbach 1.12 df(i,j) = df(i,j) - yA(i,j)*Kvz(i,j,k,bi,bj)*dTdz(i,j)
144 jmc 1.5
145     ENDDO
146     ENDDO
147     ENDIF
148     #endif /* GM_EXTRA_DIAGONAL */
149    
150     #ifdef GM_BOLUS_ADVEC
151 jmc 1.6 IF (GM_AdvForm .AND. GM_AdvSeparate) THEN
152 jmc 1.5 kp1 = MIN(k+1,Nr)
153     maskp1 = 1.
154     IF (k.GE.Nr) maskp1 = 0.
155     DO j=jMin,jMax
156     DO i=iMin,iMax
157 heimbach 1.12 vTrans(i,j) = dxG(i,j,bi,bj)*( GM_PsiY(i,j,kp1,bi,bj)*maskp1
158     & -GM_PsiY(i,j,k,bi,bj) )
159     & *maskS(i,j,k,bi,bj)
160     ENDDO
161     ENDDO
162     #ifdef GM_AUTODIFF_EXCESSIVE_STORE
163     CADJ STORE vtrans(:,:) =
164     CADJ & comlev1_gmredi_k_gad, key=kkey, byte=isbyte
165     #endif
166     DO j=jMin,jMax
167     DO i=iMin,iMax
168 jmc 1.5 df(i,j) = df(i,j)
169 heimbach 1.12 & +vTrans(i,j)*op5*(Tracer(i,j,k,bi,bj)+Tracer(i,j-1,k,bi,bj))
170 jmc 1.5 ENDDO
171     ENDDO
172     ENDIF
173     #endif /* GM_BOLUS_ADVEC */
174 adcroft 1.1
175     ENDIF
176     #endif /* ALLOW_GMREDI */
177    
178     RETURN
179     END

  ViewVC Help
Powered by ViewVC 1.1.22