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

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

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


Revision 1.2 - (show annotations) (download)
Thu Dec 22 19:06:25 2011 UTC (12 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint64, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.1: +44 -42 lines
avoid un-used variables

1 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/submeso_calc_psi.F,v 1.1 2011/07/13 22:59:53 jmc Exp $
2 C $Name: $
3
4 #include "GMREDI_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SUBMESO_CALC_PSI
8 C !INTERFACE:
9 SUBROUTINE SUBMESO_CALC_PSI(
10 I bi, bj, iMin, iMax, jMin, jMax,
11 I sigmaX, sigmaY, sigmaR,
12 I locMixLayer,
13 I myIter, myThid )
14
15 C !DESCRIPTION: \bv
16 C *==========================================================*
17 C | SUBROUTINE SUBMESO_CALC_PSI
18 C | o Calculate stream-functions for Sub-Meso bolus velocity
19 C *==========================================================*
20 C | Ref: B. Fox-Kemper etal, Oce.Model., 39:61-78, 2011
21 C | B. Fox-Kemper etal, JPO, 38(6):1145-1165, 2008
22 C *==========================================================*
23 C \ev
24
25 C !USES:
26 IMPLICIT NONE
27
28 C == Global variables ==
29 #include "SIZE.h"
30 #include "GRID.h"
31 #include "EEPARAMS.h"
32 #include "PARAMS.h"
33 #include "GMREDI.h"
34
35 C !INPUT/OUTPUT PARAMETERS:
36 C == Routine arguments ==
37 _RL sigmaX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
38 _RL sigmaY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
39 _RL sigmaR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
40 _RL locMixLayer(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41 INTEGER bi,bj,iMin,iMax,jMin,jMax
42 INTEGER myIter
43 INTEGER myThid
44 CEOP
45
46 #ifndef GM_EXCLUDE_SUBMESO
47
48 C !LOCAL VARIABLES:
49 C == Local variables ==
50 INTEGER i,j,k
51 _RL mixLayerU (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52 _RL mixLayerV (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
53 _RL dBuoyX_Hu (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
54 _RL dBuoyY_Hv (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55 _RL NHmixLay (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56 _RL MsquareH (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57 _RL lengthScaleF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58 _RL fcorLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
59 _RL PsiLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60 _RL dzLoc
61 #ifdef GM_BOLUS_ADVEC
62 _RL z2H, mu_z
63 #endif
64 _RL five_ov21
65 PARAMETER( five_ov21 = 5. _d 0 / 21. _d 0 )
66
67 C-- parameter to move to GMREDI.h
68 c _RL subMeso_invTau, subMeso_LfMin, subMeso_Ceff
69 c _RS subMeso_Lmax
70
71 c subMeso_invTau = 1.6 _d -6 ! ~ 1/(7.2 days)
72 c subMeso_LfMin = 1000. _d 0
73 c subMeso_Ceff = 0.07 _d 0
74 c subMeso_Lmax = 111. _d 3
75
76 C- Initialization : <= done in S/R gmredi_init
77
78 c IF ( GM_useSubMeso ) THEN
79 DO j=1-OLy,sNy+OLy
80 DO i=1-OLx+1,sNx+OLx
81 mixLayerU(i,j) = op5*( locMixLayer(i-1,j)+locMixLayer(i,j) )
82 mixLayerU(i,j) = MIN( mixLayerU(i,j), -rLowW(i,j,bi,bj) )
83 ENDDO
84 ENDDO
85 DO j=1-OLy+1,sNy+OLy
86 DO i=1-OLx,sNx+OLx
87 mixLayerV(i,j)=op5*( locMixLayer(i,j-1)+locMixLayer(i,j) )
88 mixLayerV(i,j) = MIN( mixLayerV(i,j), -rLowS(i,j,bi,bj) )
89 ENDDO
90 ENDDO
91
92 C-- Integrate buoyancy gradient over the Mixed-Layer
93 DO j=1-OLy,sNy+OLy
94 DO i=1-OLx,sNx+OLx
95 dBuoyX_Hu(i,j)= 0.
96 dBuoyY_Hv(i,j)= 0.
97 NHmixLay(i,j) = 0.
98 fcorLoc(i,j) = SQRT( fCori(i,j,bi,bj)*fCori(i,j,bi,bj)
99 & + subMeso_invTau*subMeso_invTau )
100 ENDDO
101 ENDDO
102 DO k=1,Nr
103 DO j=1-OLy,sNy+OLy
104 DO i=1-OLx+1,sNx+OLx
105 dzLoc = MAX( 0. _d 0, MIN( drF(k), mixLayerU(i,j)+rF(k) ) )
106 dBuoyX_Hu(i,j) = dBuoyX_Hu(i,j) + sigmaX(i,j,k)*dzLoc
107 ENDDO
108 ENDDO
109 DO j=1-OLy+1,sNy+OLy
110 DO i=1-OLx,sNx+OLx
111 dzLoc = MAX( 0. _d 0, MIN( drF(k), mixLayerV(i,j)+rF(k) ) )
112 dBuoyY_Hv(i,j) = dBuoyY_Hv(i,j) + sigmaY(i,j,k)*dzLoc
113 ENDDO
114 ENDDO
115 ENDDO
116 DO k=2,Nr
117 DO j=1-OLy,sNy+OLy
118 DO i=1-OLx,sNx+OLx
119 dzLoc = 0.
120 IF ( locMixLayer(i,j)+rC(k-1).GE.0. ) dzLoc = drC(k)
121 NHmixLay(i,j) = NHmixLay(i,j)
122 & + dzLoc*MAX( -sigmaR(i,j,k), 0. _d 0 )
123 ENDDO
124 ENDDO
125 ENDDO
126 DO j=1-OLy,sNy+OLy
127 DO i=1-OLx,sNx+OLx
128 dBuoyX_Hu(i,j)= -dBuoyX_Hu(i,j)*gravity*recip_rhoConst
129 dBuoyY_Hv(i,j)= -dBuoyY_Hv(i,j)*gravity*recip_rhoConst
130 NHmixLay(i,j) = SQRT( NHmixLay(i,j)*gravity*recip_rhoConst
131 & *locMixLayer(i,j) )
132 ENDDO
133 ENDDO
134 DO j=2-OLy,sNy+OLy-1
135 DO i=2-OLx,sNx+OLx-1
136 MsquareH(i,j)= SQRT( op25*(
137 & (dBuoyX_Hu(i,j) + dBuoyX_Hu(i+1,j))**2
138 & + (dBuoyY_Hv(i,j) + dBuoyY_Hv(i,j+1))**2
139 & ) )
140 ENDDO
141 ENDDO
142 C- Compute Lf at grid-cell center
143 DO j=2-OLy,sNy+OLy-1
144 DO i=2-OLx,sNx+OLx-1
145 lengthScaleF(i,j)= MAX(
146 & MsquareH(i,j)/(fcorLoc(i,j)*fcorLoc(i,j)) ,
147 & NHmixLay(i,j)/fcorLoc(i,j) ,
148 & subMeso_LfMin )
149 ENDDO
150 ENDDO
151
152 C Mix-Layer Eddies contribution to Bolus Transport in X dir.
153 DO j=2-OLy,sNy+OLy-1
154 DO i=3-OLx,sNx+OLx-1
155 PsiLoc(i,j) = -subMeso_Ceff*dBuoyX_Hu(i,j)
156 & *mixLayerU(i,j)
157 & *MIN( dxC(i,j,bi,bj), subMeso_Lmax )
158 & *2. _d 0/(lengthScaleF(i-1,j)+lengthScaleF(i,j))
159 & *2. _d 0/(fcorLoc(i-1,j)+fcorLoc(i,j))
160 ENDDO
161 ENDDO
162 #ifdef GM_BOLUS_ADVEC
163 DO k=2,Nr
164 DO j=2-OLy,sNy+OLy-1
165 DO i=3-OLx,sNx+OLx-1
166 IF ( mixLayerU(i,j).GT.0. _d 0 ) THEN
167 z2H = 2. _d 0*rF(k)/mixLayerU(i,j)
168 ELSE
169 z2H = 0. _d 0
170 ENDIF
171 mu_z = ( z2H + 1. _d 0 )*( z2H + 1. _d 0 )
172 mu_z = ( 1. _d 0 - mu_z )*(1. _d 0 + mu_z*five_ov21 )
173 mu_z = MAX( 0. _d 0, mu_z )
174 GM_PsiX(i,j,k,bi,bj) = GM_PsiX(i,j,k,bi,bj)
175 & + mu_z*PsiLoc(i,j)
176 ENDDO
177 ENDDO
178 ENDDO
179 #endif /* GM_BOLUS_ADVEC */
180 #ifdef ALLOW_DIAGNOSTICS
181 IF ( useDiagnostics ) THEN
182 CALL DIAGNOSTICS_FILL( lengthScaleF, 'SubMesLf',
183 & 0, 1, 2, bi, bj, myThid )
184 CALL DIAGNOSTICS_FILL( PsiLoc, 'SubMpsiX',
185 & 0, 1, 2, bi, bj, myThid )
186 ENDIF
187 #endif
188 IF ( debugLevel.GE.debLevD ) THEN
189 CALL WRITE_LOCAL_RL( 'subMeso_Lf','I10',1,lengthScaleF,
190 & bi,bj,1,myIter,myThid )
191 CALL WRITE_LOCAL_RL( 'subMeso_psiX','I10',1,PsiLoc,
192 & bi,bj,1,myIter,myThid )
193 ENDIF
194
195 C Mix-Layer Eddies contribution to Bolus Transport in Y dir.
196 DO j=3-OLy,sNy+OLy-1
197 DO i=2-OLx,sNx+OLx-1
198 PsiLoc(i,j) = -subMeso_Ceff*dBuoyY_Hv(i,j)
199 & *mixLayerV(i,j)
200 & *MIN( dyC(i,j,bi,bj), subMeso_Lmax )
201 & *2. _d 0/(lengthScaleF(i,j-1)+lengthScaleF(i,j))
202 & *2. _d 0/(fcorLoc(i,j-1)+fcorLoc(i,j))
203 ENDDO
204 ENDDO
205 #ifdef GM_BOLUS_ADVEC
206 DO k=2,Nr
207 DO j=3-OLy,sNy+OLy-1
208 DO i=2-OLx,sNx+OLx-1
209 IF ( mixLayerV(i,j).GT.0. _d 0 ) THEN
210 z2H = 2. _d 0*rF(k)/mixLayerV(i,j)
211 ELSE
212 z2H = 0. _d 0
213 ENDIF
214 mu_z = ( z2H + 1. _d 0 )*( z2H + 1. _d 0 )
215 mu_z = ( 1. _d 0 - mu_z )*(1. _d 0 + mu_z*five_ov21 )
216 mu_z = MAX( 0. _d 0, mu_z )
217 GM_PsiY(i,j,k,bi,bj) = GM_PsiY(i,j,k,bi,bj)
218 & + mu_z*PsiLoc(i,j)
219 ENDDO
220 ENDDO
221 ENDDO
222 #endif /* GM_BOLUS_ADVEC */
223 #ifdef ALLOW_DIAGNOSTICS
224 IF ( useDiagnostics ) THEN
225 CALL DIAGNOSTICS_FILL( PsiLoc, 'SubMpsiY',
226 & 0, 1, 2, bi, bj, myThid )
227 ENDIF
228 #endif
229 IF ( debugLevel.GE.debLevD ) THEN
230 CALL WRITE_LOCAL_RL( 'subMeso_psiY','I10',1,PsiLoc,
231 & bi,bj,1,myIter,myThid )
232 ENDIF
233
234 c ENDIF
235 #endif /* ndef GM_EXCLUDE_SUBMESO */
236
237 RETURN
238 END

  ViewVC Help
Powered by ViewVC 1.1.22