/[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.1 - (show annotations) (download)
Sun Aug 17 02:01:27 2008 UTC (15 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint61c
pkg Down_Slope : density-driven downsloping flow parameterization.

1 C $Header: $
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,
11 I rhoInSitu,
12 I myTime, myIter, myThid )
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 rhoInSitu :: 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 rhoInSitu( xySize, Nr )
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 meesage 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 dradient 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 = rhoInSitu(ijs,kshelf)
105 & -rhoInSitu(ijd,kshelf)
106 c IF ( dRhoH.GT.0. _d 0 ) THEN
107 IF ( rhoInSitu(ijs,kshelf+1).GT.rhoInSitu(ijd,kshelf+1)
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 ( rhoInSitu(ijs,k).GT.rhoInSitu(ijd,k) ) 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 (debugMode) THEN
142 WRITE(DWNSLP_ioUnit,'(A,I8,2I4)')
143 & ' DWNSLP_CALC_FLOW: iter,bi,bj=',myIter,bi,bj
144 WRITE(DWNSLP_ioUnit,'(A)')
145 & ' bi bj n : ijd ijr is js ; ks kd-s Transp :'
146 DO n=1,DWNSLP_NbSite(bi,bj)
147 IF (DWNSLP_deepK(n,bi,bj).NE.0) THEN
148 ijs = DWNSLP_ijDeep(n,bi,bj) + DWNSLP_shVsD(n,bi,bj)
149 ishelf = 1-OLx + mod(ijs-1,xSize)
150 jshelf = 1-OLy + (ijs-1)/xSize
151 kshelf = kBottom(ijs,bi,bj)
152 WRITE(DWNSLP_ioUnit,'(2I4,I6,A,I8,I6,2I4,A,2I4,1PE14.6)')
153 & bi,bj,n,' :', DWNSLP_ijDeep(n,bi,bj),
154 & DWNSLP_shVsD(n,bi,bj), ishelf,jshelf,
155 & ' ;', kshelf, DWNSLP_deepK(n,bi,bj)-kshelf,
156 & DWNSLP_Transp(n,bi,bj)
157 ENDIF
158 ENDDO
159 WRITE(DWNSLP_ioUnit,*)
160 ENDIF
161
162 #ifdef ALLOW_DIAGNOSTICS
163 c IF ( useDiagnostics ) THEN
164 c CALL DIAGNOSTICS_FILL(rhoInSitu,'RHOAnExt',0,Nr,2,bi,bj,myThid)
165 c ENDIF
166 IF ( doDiagDwnSlpFlow ) THEN
167 CALL DIAGNOSTICS_FILL( uFlow, 'DSLPuFlw', 0,1,2,bi,bj,myThid )
168 CALL DIAGNOSTICS_FILL( vFlow, 'DSLPvFlw', 0,1,2,bi,bj,myThid )
169 ENDIF
170 #endif /* ALLOW_DIAGNOSTICS */
171
172 #endif /* ALLOW_DOWN_SLOPE */
173
174 RETURN
175 END

  ViewVC Help
Powered by ViewVC 1.1.22