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

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

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


Revision 1.8 - (show annotations) (download)
Wed Feb 7 00:01:15 2007 UTC (17 years, 7 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint59, checkpoint58y_post, checkpoint58w_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint58v_post, checkpoint58x_post, checkpoint59j
Changes since 1.7: +9 -1 lines
Updating for case ALLOW_KAPGM_CONTROL

1 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_calc_psi_b.F,v 1.7 2005/01/03 14:35:37 jmc Exp $
2 C $Name: $
3
4 #include "GMREDI_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE GMREDI_CALC_PSI_B(
8 I bi, bj, iMin, iMax, jMin, jMax,
9 I sigmaX, sigmaY, sigmaR,
10 I ldd97_LrhoW, ldd97_LrhoS,
11 I myThid )
12 C /==========================================================\
13 C | SUBROUTINE GMREDI_CALC_PSI_B |
14 C | o Calculate stream-functions for GM bolus velocity |
15 C |==========================================================|
16 C \==========================================================/
17 IMPLICIT NONE
18
19 C == Global variables ==
20 #include "SIZE.h"
21 #include "GRID.h"
22 #include "DYNVARS.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "GMREDI.h"
26
27 #ifdef ALLOW_AUTODIFF_TAMC
28 #include "tamc.h"
29 #include "tamc_keys.h"
30 #endif /* ALLOW_AUTODIFF_TAMC */
31
32 C == Routine arguments ==
33 C
34 _RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
35 _RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
36 _RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
37 _RL ldd97_LrhoW(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
38 _RL ldd97_LrhoS(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
39 INTEGER bi,bj,iMin,iMax,jMin,jMax
40 INTEGER myThid
41 CEndOfInterface
42
43 #ifdef ALLOW_GMREDI
44 #ifdef GM_BOLUS_ADVEC
45
46 C == Local variables ==
47 INTEGER i,j,k, km1
48 _RL SlopeX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
49 _RL SlopeY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
50 _RL dSigmaDrW(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
51 _RL dSigmaDrS(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
52 _RL taperX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
53 _RL taperY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
54
55 C- Initialization : <= done in S/R gmredi_init
56
57 #ifdef ALLOW_AUTODIFF_TAMC
58 act1 = bi - myBxLo(myThid)
59 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
60 act2 = bj - myByLo(myThid)
61 max2 = myByHi(myThid) - myByLo(myThid) + 1
62 act3 = myThid - 1
63 max3 = nTx*nTy
64 act4 = ikey_dynamics - 1
65 igmkey = (act1 + 1) + act2*max1
66 & + act3*max1*max2
67 & + act4*max1*max2*max3
68 #endif /* ALLOW_AUTODIFF_TAMC */
69
70 #ifdef ALLOW_AUTODIFF_TAMC
71 # ifdef GM_VISBECK_VARIABLE_K
72 CADJ STORE VisbeckK(:,:,bi,bj) = comlev1_bibj, key=igmkey, byte=isbyte
73 # endif
74 #endif
75 IF (GM_AdvForm) THEN
76 DO k=2,Nr
77 km1 = k-1
78
79 #ifdef ALLOW_AUTODIFF_TAMC
80 kkey = (igmkey-1)*Nr + k
81 DO j=1-Oly,sNy+Oly
82 DO i=1-Olx,sNx+Olx
83 SlopeX(i,j) = 0. _d 0
84 SlopeY(i,j) = 0. _d 0
85 dSigmaDrW(i,j) = 0. _d 0
86 dSigmaDrS(i,j) = 0. _d 0
87 ENDDO
88 ENDDO
89 #endif
90
91 C Gradient of Sigma below U and V points
92 DO j=1-Oly,sNy+Oly
93 DO i=1-Olx+1,sNx+Olx
94 SlopeX(i,j)=op5*( sigmaX(i,j,km1)+sigmaX(i,j,k) )
95 & *maskW(i,j,k,bi,bj)
96 dSigmaDrW(i,j)=op5*( sigmaR(i-1,j,k)+sigmaR(i,j,k) )
97 & *maskW(i,j,k,bi,bj)
98 ENDDO
99 ENDDO
100 DO j=1-Oly+1,sNy+Oly
101 DO i=1-Olx,sNx+Olx
102 SlopeY(i,j)=op5*( sigmaY(i,j,km1)+sigmaY(i,j,k) )
103 & *maskS(i,j,k,bi,bj)
104 dSigmaDrS(i,j)=op5*( sigmaR(i,j-1,k)+sigmaR(i,j,k) )
105 & *maskS(i,j,k,bi,bj)
106 ENDDO
107 ENDDO
108
109 C Calculate slopes , taper and/or clip
110 CALL GMREDI_SLOPE_PSI(
111 O taperX, taperY,
112 U SlopeX, SlopeY,
113 U dSigmaDrW, dSigmaDrS,
114 I ldd97_LrhoW, ldd97_LrhoS, rF(k), k,
115 I bi, bj, myThid )
116
117 #ifdef ALLOW_AUTODIFF_TAMC
118 CADJ STORE SlopeX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
119 CADJ STORE SlopeY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
120 CADJ STORE taperX(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
121 CADJ STORE taperY(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
122 #endif /* ALLOW_AUTODIFF_TAMC */
123
124 C- Compute the 2 stream-function Components ( GM bolus vel.)
125 DO j=1-Oly,sNy+Oly
126 DO i=1-Olx+1,sNx+Olx
127 GM_PsiX(i,j,k,bi,bj) = SlopeX(i,j)*taperX(i,j)
128 #ifdef ALLOW_KAPGM_CONTROL
129 & *( kapgm(i,j,k,bi,bj)
130 #else
131 & *( GM_background_K
132 #endif
133 #ifdef GM_VISBECK_VARIABLE_K
134 & +op5*(VisbeckK(i-1,j,bi,bj)+VisbeckK(i,j,bi,bj))
135 #endif
136 & )*maskW(i,j,k,bi,bj)
137 ENDDO
138 ENDDO
139 DO j=1-Oly+1,sNy+Oly
140 DO i=1-Olx,sNx+Olx
141 GM_PsiY(i,j,k,bi,bj) = SlopeY(i,j)*taperY(i,j)
142 #ifdef ALLOW_KAPGM_CONTROL
143 & *( kapgm(i,j,k,bi,bj)
144 #else
145 & *( GM_background_K
146 #endif
147 #ifdef GM_VISBECK_VARIABLE_K
148 & +op5*(VisbeckK(i,j-1,bi,bj)+VisbeckK(i,j,bi,bj))
149 #endif
150 & )*maskS(i,j,k,bi,bj)
151 ENDDO
152 ENDDO
153
154 C----- end of loop on level k
155 ENDDO
156
157 ENDIF
158 #endif /* GM_BOLUS_ADVEC */
159 #endif /* ALLOW_GMREDI */
160
161 RETURN
162 END

  ViewVC Help
Powered by ViewVC 1.1.22