/[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.6 - (show annotations) (download)
Sun Nov 21 15:57:17 2004 UTC (19 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57b_post, checkpoint56b_post, checkpoint57, checkpoint57a_post, checkpoint56a_post, checkpoint56c_post, checkpoint57a_pre
Changes since 1.5: +43 -43 lines
fix ldd97 slope limit ; extend Psi-Bolus valid domain ; clean-up time-ave

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

  ViewVC Help
Powered by ViewVC 1.1.22