/[MITgcm]/MITgcm/pkg/down_slope/dwnslp_init_fixed.F
ViewVC logotype

Contents of /MITgcm/pkg/down_slope/dwnslp_init_fixed.F

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


Revision 1.3 - (show annotations) (download)
Tue Jun 7 21:05:13 2011 UTC (12 years, 11 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, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint63, 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, checkpoint62z, HEAD
Changes since 1.2: +15 -12 lines
refine debugLevel criteria when writing to log file

1 C $Header: /u/gcmpack/MITgcm/pkg/down_slope/dwnslp_init_fixed.F,v 1.2 2010/04/23 13:19:26 jmc Exp $
2 C $Name: $
3
4 #include "DWNSLP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DWNSLP_INIT_FIXED
8 C !INTERFACE:
9 SUBROUTINE DWNSLP_INIT_FIXED( myThid )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE DWNSLP_INIT_FIXED
14 C | o Routine to initialize Down-Sloping arrays ;
15 C | find potential location of Down-Sloping flow.
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21
22 C === Global variables ===
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "GRID.h"
27 #include "DWNSLP_SIZE.h"
28 #include "DWNSLP_PARAMS.h"
29 #include "DWNSLP_VARS.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C === Routine arguments ===
33 INTEGER myThid
34
35 #ifdef ALLOW_DOWN_SLOPE
36
37 C !LOCAL VARIABLES:
38 C === Local variables ===
39 C msgBuf :: Informational/error message buffer
40 C logFname,STATUS='UNKNOWN')
41 CHARACTER*(MAX_LEN_MBUF) msgBuf
42 CHARACTER*(19) logFname
43 INTEGER i, j, k
44 INTEGER bi, bj
45 INTEGER n, ncount, ijd, ijr
46 INTEGER ideep, jdeep, kdeep, dkMx
47 INTEGER ishelf,jshelf,kshelf
48 INTEGER downward
49 _RL dz_bottom
50 _RL drFlowMin
51 CEOP
52
53 DO bj = myByLo(myThid), myByHi(myThid)
54 DO bi = myBxLo(myThid), myBxHi(myThid)
55
56 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
57
58 C- Initialize common bloc arrays :
59
60 DWNSLP_NbSite(bi,bj) = 0
61 DO n=1,DWNSLP_size
62 DWNSLP_ijDeep(n,bi,bj) = 0
63 DWNSLP_shVsD(n,bi,bj) = 0
64 DWNSLP_deepK(n,bi,bj) = 0
65 DWNSLP_Gamma(n,bi,bj) = 0.
66 DWNSLP_Transp(n,bi,bj) = 0.
67 ENDDO
68
69 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
70
71 C---- set list of bathymetric step (= potential location of Down-Sloping flow)
72 ncount = 0
73
74 IF ( gravitySign.GT.0. ) THEN
75 C-- gravity > 0 (p-Coord)
76
77 C- in X direction (U-flow):
78 DO j=1,sNy
79 DO i=1,sNx+1
80 IF ( kSurfW(i,j,bi,bj).LE.Nr ) THEN
81
82 IF ( kSurfC(i,j,bi,bj).LT.kSurfC(i-1,j,bi,bj) ) THEN
83 ncount = ncount + 1
84 IF ( ncount.LE.DWNSLP_size ) THEN
85 DWNSLP_ijDeep(ncount,bi,bj) =
86 & 1 + (i+OLx-1) + (j+OLy-1)*xSize
87 DWNSLP_shVsD(ncount,bi,bj) = -1
88 ENDIF
89 ENDIF
90
91 IF ( kSurfC(i,j,bi,bj).GT.kSurfC(i-1,j,bi,bj) ) THEN
92 ncount = ncount + 1
93 IF ( ncount.LE.DWNSLP_size ) THEN
94 DWNSLP_ijDeep(ncount,bi,bj) =
95 & 1 + (i-1+OLx-1) + (j+OLy-1)*xSize
96 DWNSLP_shVsD(ncount,bi,bj) = 1
97 ENDIF
98 ENDIF
99
100 ENDIF
101 ENDDO
102 ENDDO
103
104 C- in Y direction (V-flow):
105
106 DO j=1,sNy+1
107 DO i=1,sNx
108 IF ( kSurfS(i,j,bi,bj).LE.Nr ) THEN
109
110 IF ( kSurfC(i,j,bi,bj).LT.kSurfC(i,j-1,bi,bj) ) THEN
111 ncount = ncount + 1
112 IF ( ncount.LE.DWNSLP_size ) THEN
113 DWNSLP_ijDeep(ncount,bi,bj) =
114 & 1 + (i+OLx-1) + (j+OLy-1)*xSize
115 DWNSLP_shVsD(ncount,bi,bj) = -xSize
116 ENDIF
117 ENDIF
118
119 IF ( kSurfC(i,j,bi,bj).GT.kSurfC(i,j-1,bi,bj) ) THEN
120 ncount = ncount + 1
121 IF ( ncount.LE.DWNSLP_size ) THEN
122 DWNSLP_ijDeep(ncount,bi,bj) =
123 & 1 + (i+OLx-1) + (j-1+OLy-1)*xSize
124 DWNSLP_shVsD(ncount,bi,bj) = xSize
125 ENDIF
126 ENDIF
127
128 ENDIF
129 ENDDO
130 ENDDO
131
132 ELSE
133 C-- gravity < 0 (z-Coord)
134
135 C- in X direction (U-flow):
136
137 DO j=1,sNy
138 DO i=1,sNx+1
139 IF ( kSurfW(i,j,bi,bj).LE.Nr ) THEN
140
141 IF ( kLowC(i,j,bi,bj).GT.kLowC(i-1,j,bi,bj) ) THEN
142 ncount = ncount + 1
143 IF ( ncount.LE.DWNSLP_size ) THEN
144 DWNSLP_ijDeep(ncount,bi,bj) =
145 & 1 + (i+OLx-1) + (j+OLy-1)*xSize
146 DWNSLP_shVsD(ncount,bi,bj) = -1
147 ENDIF
148 ENDIF
149
150 IF ( kLowC(i,j,bi,bj).LT.kLowC(i-1,j,bi,bj) ) THEN
151 ncount = ncount + 1
152 IF ( ncount.LE.DWNSLP_size ) THEN
153 DWNSLP_ijDeep(ncount,bi,bj) =
154 & 1 + (i-1+OLx-1) + (j+OLy-1)*xSize
155 DWNSLP_shVsD(ncount,bi,bj) = 1
156 ENDIF
157 ENDIF
158
159 ENDIF
160 ENDDO
161 ENDDO
162
163 C- in Y direction (V-flow):
164
165 DO j=1,sNy+1
166 DO i=1,sNx
167 IF ( kSurfS(i,j,bi,bj).LE.Nr ) THEN
168
169 IF ( kLowC(i,j,bi,bj).GT.kLowC(i,j-1,bi,bj) ) THEN
170 ncount = ncount + 1
171 IF ( ncount.LE.DWNSLP_size ) THEN
172 DWNSLP_ijDeep(ncount,bi,bj) =
173 & 1 + (i+OLx-1) + (j+OLy-1)*xSize
174 DWNSLP_shVsD(ncount,bi,bj) = -xSize
175 ENDIF
176 ENDIF
177
178 IF ( kLowC(i,j,bi,bj).LT.kLowC(i,j-1,bi,bj) ) THEN
179 ncount = ncount + 1
180 IF ( ncount.LE.DWNSLP_size ) THEN
181 DWNSLP_ijDeep(ncount,bi,bj) =
182 & 1 + (i+OLx-1) + (j-1+OLy-1)*xSize
183 DWNSLP_shVsD(ncount,bi,bj) = xSize
184 ENDIF
185 ENDIF
186
187 ENDIF
188 ENDDO
189 ENDDO
190
191 C-- end if gravitySign block
192 ENDIF
193
194 C- Store the Nb of bathymetric steps (=maximum Nb of Downsloping-flow site)
195 DWNSLP_NbSite(bi,bj) = ncount
196
197 C- Check dimension :
198 IF (ncount.GT.DWNSLP_size) THEN
199 WRITE(msgBuf,'(A,I8,A)')
200 & ' DWNSLP_INIT: DWNSLP_size=',DWNSLP_size,' too small !'
201 CALL PRINT_ERROR( msgBuf, myThid )
202 WRITE(msgBuf,'(A,2I4,A,I8)')
203 & ' DWNSLP_INIT: min needed for tile',bi,bj,' :', ncount
204 CALL PRINT_ERROR( msgBuf, myThid )
205 STOP 'ABNORMAL END: S/R DWNSLP_INIT'
206 ENDIF
207
208 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
209 C- Compute geometric factor Gamma = slope * effective cross section area
210 DO n=1,DWNSLP_NbSite(bi,bj)
211
212 ijd = DWNSLP_ijDeep(n,bi,bj)
213 ideep = 1-OLx + MOD(ijd-1,xSize)
214 jdeep = 1-Oly + (ijd-1)/xSize
215 ijr = DWNSLP_shVsD(n,bi,bj)
216 ishelf = ideep + MOD(ijr,xSize)
217 jshelf = jdeep + ijr/xSize
218 IF ( usingPCoords ) THEN
219 kdeep = kSurfC(ideep, jdeep, bi,bj)
220 kshelf = kSurfC(ishelf,jshelf,bi,bj)
221 downward = -1
222 ELSE
223 kdeep = kLowC (ideep, jdeep, bi,bj)
224 kshelf = kLowC (ishelf,jshelf,bi,bj)
225 downward = 1
226 ENDIF
227
228 i= MAX(ideep,ishelf)
229 j= MAX(jdeep,jshelf)
230
231 C-- calculate the minimum level thickness between kshelf & kdeep:
232 drFlowMin = DWNSLP_drFlow
233 DO k = kshelf,kdeep,downward
234 drFlowMin = MIN( drFlowMin,
235 & drF(k)*hFacC(ideep,jdeep,k,bi,bj) )
236 ENDDO
237
238 IF (DWNSLP_slope.NE.0.) THEN
239 C-- Use fixed slope = DWNSLP_slope :
240 IF (ABS(ijr).EQ.1) THEN
241 C- slope along X dir:
242 DWNSLP_Gamma(n,bi,bj) = DWNSLP_slope*dyG(i,j,bi,bj)
243 & *MIN( drF(kshelf)*hFacW(i,j,kshelf,bi,bj), drFlowMin )
244 ELSE
245 C- slope along Y dir:
246 DWNSLP_Gamma(n,bi,bj) = DWNSLP_slope*dxG(i,j,bi,bj)
247 & *MIN( drF(kshelf)*hFacS(i,j,kshelf,bi,bj), drFlowMin )
248 ENDIF
249 ELSE
250 C-- Compute and use the local slope :
251 IF ( usingPCoords ) THEN
252 dz_bottom = Ro_surf(ideep,jdeep,bi,bj)
253 & - Ro_surf(ishelf,jshelf,bi,bj)
254 C a quick way to convert Delta.P to Delta.Z :
255 dz_bottom = dz_bottom*recip_gravity*recip_rhoConst
256 ELSE
257 dz_bottom = R_low(ishelf,jshelf,bi,bj)
258 & - R_low(ideep,jdeep,bi,bj)
259 ENDIF
260 IF (ABS(ijr).EQ.1) THEN
261 C- slope along X dir:
262 DWNSLP_Gamma(n,bi,bj) = dz_bottom*recip_dxC(i,j,bi,bj)
263 & *dyG(i,j,bi,bj)
264 & *MIN( drF(kshelf)*hFacW(i,j,kshelf,bi,bj), drFlowMin )
265 ELSE
266 C- slope along Y dir:
267 DWNSLP_Gamma(n,bi,bj) = dz_bottom*recip_dyC(i,j,bi,bj)
268 & *dxG(i,j,bi,bj)
269 & *MIN( drF(kshelf)*hFacS(i,j,kshelf,bi,bj), drFlowMin )
270 ENDIF
271
272 ENDIF
273
274 ENDDO
275
276 C- end bi,bj loops.
277 ENDDO
278 ENDDO
279
280 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
281 C- Print usefull variables :
282 _BARRIER
283 _BEGIN_MASTER(myThid)
284
285 DWNSLP_ioUnit = 0
286 IF ( debugLevel.GE.debLevA ) THEN
287 CALL MDSFINDUNIT( DWNSLP_ioUnit, myThid )
288 ENDIF
289 IF ( DWNSLP_ioUnit.GT.0 ) THEN
290 WRITE(logFname,'(A11,I4.4,A4)') 'down_slope.',myProcId,'.log'
291 OPEN(DWNSLP_ioUnit,FILE=logFname,STATUS='UNKNOWN')
292 ENDIF
293
294 DO bj = 1,nSy
295 DO bi = 1,nSx
296
297 WRITE(msgBuf,'(A,2I4,I8)')
298 & 'DWNSLP_INIT: DWNSLP_NbSite=',bi,bj,DWNSLP_NbSite(bi,bj)
299 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
300 & SQUEEZE_RIGHT, myThid )
301 C---
302 IF ( DWNSLP_ioUnit.GT.0 ) THEN
303 WRITE(DWNSLP_ioUnit,'(A,2I4,2I8)')
304 & ' DWNSLP_INIT: bi,bj, DWNSLP_NbSite, xSize =',
305 & bi,bj, DWNSLP_NbSite(bi,bj), xSize
306 WRITE(DWNSLP_ioUnit,'(A)')
307 & ' bi bj n : ijd is js , ijr ks dkMx Gamma :'
308 DO n=1,DWNSLP_NbSite(bi,bj)
309 ijd = DWNSLP_ijDeep(n,bi,bj)
310 ideep = 1-OLx + MOD(ijd-1,xSize)
311 jdeep = 1-Oly + (ijd-1)/xSize
312 ijr = DWNSLP_shVsD(n,bi,bj)
313 ishelf = ideep + MOD(ijr,xSize)
314 jshelf = jdeep + ijr/xSize
315 IF ( usingPCoords ) THEN
316 kshelf = kSurfC(ishelf,jshelf,bi,bj)
317 dkMx = kshelf - kSurfC(ideep,jdeep,bi,bj)
318 ELSE
319 kshelf = kLowC (ishelf,jshelf,bi,bj)
320 dkMx = kLowC (ideep,jdeep,bi,bj) - kshelf
321 ENDIF
322 WRITE(DWNSLP_ioUnit,'(2I4,I6,A,I8,2I4,A,I6,2I4,1PE14.6)')
323 & bi,bj,n, ' :', ijd, ideep, jdeep,
324 & ' ,', ijr, kshelf, dkMx, DWNSLP_Gamma(n,bi,bj)
325 ENDDO
326 WRITE(DWNSLP_ioUnit,*)
327 ENDIF
328 C---
329 ENDDO
330 ENDDO
331 IF ( DWNSLP_ioUnit.GT.0 .AND. debugLevel.LT.debLevD ) THEN
332 CLOSE(DWNSLP_ioUnit)
333 DWNSLP_ioUnit = 0
334 ENDIF
335
336 _END_MASTER(myThid)
337
338 #ifdef ALLOW_DIAGNOSTICS
339 IF ( useDiagnostics ) THEN
340 CALL DWNSLP_DIAGNOSTICS_INIT( myThid )
341 ENDIF
342 #endif
343
344 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
345
346 #endif /* ALLOW_DOWN_SLOPE */
347 RETURN
348 END

  ViewVC Help
Powered by ViewVC 1.1.22