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

Annotation 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 - (hide 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 jmc 1.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