/[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.11 - (show annotations) (download)
Tue Jan 11 00:54:45 2011 UTC (13 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62s, checkpoint62r, 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, 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.10: +26 -14 lines
allow to specify a 2-D horizontal map and a 1-D vertical profile
 as scaling factor for Isopycnal diffusivity (Redi) and GM diffusivity

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

  ViewVC Help
Powered by ViewVC 1.1.22