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

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

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


Revision 1.4 - (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.3: +6 -3 lines
refine debugLevel criteria when writing to log file

1 C $Header: /u/gcmpack/MITgcm/pkg/down_slope/dwnslp_calc_flow.F,v 1.3 2010/04/23 13:19:26 jmc Exp $
2 C $Name: $
3
4 #include "DWNSLP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DWNSLP_CALC_FLOW
8 C !INTERFACE:
9 SUBROUTINE DWNSLP_CALC_FLOW(
10 I bi, bj, kBottom, rho3d,
11 I myTime, myIter, myThid )
12
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | SUBROUTINE DWNSLP_CALC_FLOW
16 C | o Detect active site of Down-Sloping flow and compute
17 C | the corresponding volume transport
18 C *==========================================================*
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C === Global variables ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "DWNSLP_SIZE.h"
29 #include "DWNSLP_PARAMS.h"
30 #include "DWNSLP_VARS.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C === Routine arguments ===
34 C bi,bj :: Tile indices
35 C kBottom :: Vertical index of bottom grid cell.
36 C rho3d :: In-situ density [kg/m3] computed at z=rC ;
37 C myTime :: Current time in simulation
38 C myIter :: Current time-step number
39 C myThid :: my Thread Id number
40 INTEGER bi, bj
41 INTEGER kBottom( xySize, nSx,nSy )
42 _RL rho3d ( xySize, Nr,nSx,nSy )
43 _RL myTime
44 INTEGER myIter, myThid
45
46 #ifdef ALLOW_DOWN_SLOPE
47
48 C !LOCAL VARIABLES:
49 C === Local variables ===
50 C msgBuf :: Informational/error message buffer
51 C ijd :: horiz. index of deep water column receiving dense water flow
52 C ijs :: horiz. index of shallow water column (e.g. shelf)
53 C from which dense water flow originates
54 c CHARACTER*(MAX_LEN_MBUF) msgBuf
55 INTEGER k
56 INTEGER n, ijd, ijr, ijs
57 INTEGER kdeep, ishelf, jshelf, kshelf
58 _RL dRhoH
59 INTEGER downward
60 #ifdef ALLOW_DIAGNOSTICS
61 LOGICAL doDiagDwnSlpFlow
62 INTEGER ij
63 _RL sgnFac
64 _RL uFlow( xySize )
65 _RL vFlow( xySize )
66 C- Functions:
67 LOGICAL DIAGNOSTICS_IS_ON
68 EXTERNAL DIAGNOSTICS_IS_ON
69 #endif /* ALLOW_DIAGNOSTICS */
70
71 CEOP
72
73 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
74
75 c downward = rkSign*NINT(gravitySign)
76 downward = 1
77 IF ( usingPCoords ) downward = -1
78
79 #ifdef ALLOW_DIAGNOSTICS
80 IF ( useDiagnostics ) THEN
81 doDiagDwnSlpFlow = DIAGNOSTICS_IS_ON( 'DSLPuFlw', myThid )
82 & .OR. DIAGNOSTICS_IS_ON( 'DSLPvFlw', myThid )
83 IF ( doDiagDwnSlpFlow ) THEN
84 DO ij=1,xySize
85 uFlow(ij) = 0. _d 0
86 vFlow(ij) = 0. _d 0
87 ENDDO
88 ENDIF
89 ELSE
90 doDiagDwnSlpFlow = .FALSE.
91 ENDIF
92 #endif /* ALLOW_DIAGNOSTICS */
93
94 DO n=1,DWNSLP_NbSite(bi,bj)
95 DWNSLP_deepK(n,bi,bj) = 0
96
97 C- detect density gradient along the slope => Downsloping flow
98
99 ijd = DWNSLP_ijDeep(n,bi,bj)
100 ijr = DWNSLP_shVsD(n,bi,bj)
101 ijs = ijd + ijr
102 kshelf = kBottom(ijs,bi,bj)
103
104 dRhoH = rho3d(ijs,kshelf,bi,bj)
105 & -rho3d(ijd,kshelf,bi,bj)
106 c IF ( dRhoH.GT.0. _d 0 ) THEN
107 IF ( rho3d(ijs,kshelf+1,bi,bj).GT.rho3d(ijd,kshelf+1,bi,bj)
108 & .AND. dRhoH.GT.0. _d 0 ) THEN
109
110 C- search for deepest level where Rho_shelf > Rho_deep
111 kdeep = kshelf
112 DO k=kshelf+1,kBottom(ijd,bi,bj),downward
113 IF ( rho3d(ijs,k,bi,bj).GT.rho3d(ijd,k,bi,bj) ) kdeep = k
114 ENDDO
115 DWNSLP_deepK(n,bi,bj) = kdeep
116
117 C- Compute the Volume Transport :
118 C- same formulation as described in the paper:
119 c downslpFlow = DWNSLP_gamma/mu *gravity*dRhoH*recip_rhoConst
120 C with DWNSLP_Gamma = slope * effective cross-section area
121 DWNSLP_Transp(n,bi,bj) = DWNSLP_Gamma(n,bi,bj)
122 & *DWNSLP_rec_mu*gravity*dRhoH*recip_rhoConst
123
124 #ifdef ALLOW_DIAGNOSTICS
125 IF ( doDiagDwnSlpFlow ) THEN
126 ij = MAX( ijd, ijs )
127 sgnFac = SIGN(1,-ijr)
128 IF ( ABS(ijr).EQ.1 ) THEN
129 uFlow(ij) = sgnFac*DWNSLP_Transp(n,bi,bj)
130 ELSE
131 vFlow(ij) = sgnFac*DWNSLP_Transp(n,bi,bj)
132 ENDIF
133 ENDIF
134 #endif /* ALLOW_DIAGNOSTICS */
135
136 ENDIF
137
138 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
139 ENDDO
140
141 IF ( DWNSLP_ioUnit.GT.0 ) THEN
142 _BEGIN_MASTER(myThid)
143 WRITE(DWNSLP_ioUnit,'(A,I8,2I4)')
144 & ' DWNSLP_CALC_FLOW: iter,bi,bj=',myIter,bi,bj
145 WRITE(DWNSLP_ioUnit,'(A)')
146 & ' bi bj n : ijd ijr is js ; ks kd-s Transp :'
147 DO n=1,DWNSLP_NbSite(bi,bj)
148 IF (DWNSLP_deepK(n,bi,bj).NE.0) THEN
149 ijs = DWNSLP_ijDeep(n,bi,bj) + DWNSLP_shVsD(n,bi,bj)
150 ishelf = 1-OLx + mod(ijs-1,xSize)
151 jshelf = 1-OLy + (ijs-1)/xSize
152 kshelf = kBottom(ijs,bi,bj)
153 WRITE(DWNSLP_ioUnit,'(2I4,I6,A,I8,I6,2I4,A,2I4,1PE14.6)')
154 & bi,bj,n,' :', DWNSLP_ijDeep(n,bi,bj),
155 & DWNSLP_shVsD(n,bi,bj), ishelf,jshelf,
156 & ' ;', kshelf, DWNSLP_deepK(n,bi,bj)-kshelf,
157 & DWNSLP_Transp(n,bi,bj)
158 ENDIF
159 ENDDO
160 WRITE(DWNSLP_ioUnit,*)
161 _END_MASTER(myThid)
162 ENDIF
163
164 #ifdef ALLOW_DIAGNOSTICS
165 IF ( doDiagDwnSlpFlow ) THEN
166 CALL DIAGNOSTICS_FILL( uFlow, 'DSLPuFlw', 0,1,2,bi,bj,myThid )
167 CALL DIAGNOSTICS_FILL( vFlow, 'DSLPvFlw', 0,1,2,bi,bj,myThid )
168 ENDIF
169 #endif /* ALLOW_DIAGNOSTICS */
170
171 #endif /* ALLOW_DOWN_SLOPE */
172
173 RETURN
174 END

  ViewVC Help
Powered by ViewVC 1.1.22