/[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.3 - (show annotations) (download)
Fri Apr 23 13:19:26 2010 UTC (14 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62g, checkpoint62f, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62y, checkpoint62x
Changes since 1.2: +3 -3 lines
fix propagating typo in variable description

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

  ViewVC Help
Powered by ViewVC 1.1.22