7 |
C !ROUTINE: DWNSLP_CALC_FLOW |
C !ROUTINE: DWNSLP_CALC_FLOW |
8 |
C !INTERFACE: |
C !INTERFACE: |
9 |
SUBROUTINE DWNSLP_CALC_FLOW( |
SUBROUTINE DWNSLP_CALC_FLOW( |
10 |
I bi, bj, kBottom, |
I bi, bj, kBottom, rho3d, |
|
I rhoInSitu, |
|
11 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
12 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
13 |
C *==========================================================* |
C *==========================================================* |
32 |
C === Routine arguments === |
C === Routine arguments === |
33 |
C bi,bj :: Tile indices |
C bi,bj :: Tile indices |
34 |
C kBottom :: Vertical index of bottom grid cell. |
C kBottom :: Vertical index of bottom grid cell. |
35 |
C rhoInSitu :: In-situ density [kg/m3] computed at z=rC ; |
C rho3d :: In-situ density [kg/m3] computed at z=rC ; |
36 |
C myTime :: Current time in simulation |
C myTime :: Current time in simulation |
37 |
C myIter :: Current time-step number |
C myIter :: Current time-step number |
38 |
C myThid :: my Thread Id number |
C myThid :: my Thread Id number |
39 |
INTEGER bi, bj |
INTEGER bi, bj |
40 |
INTEGER kBottom ( xySize, nSx,nSy ) |
INTEGER kBottom( xySize, nSx,nSy ) |
41 |
_RL rhoInSitu( xySize, Nr ) |
_RL rho3d ( xySize, Nr,nSx,nSy ) |
42 |
_RL myTime |
_RL myTime |
43 |
INTEGER myIter, myThid |
INTEGER myIter, myThid |
44 |
|
|
46 |
|
|
47 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
48 |
C === Local variables === |
C === Local variables === |
49 |
C msgBuf :: Informational/error meesage buffer |
C msgBuf :: Informational/error message buffer |
50 |
C ijd :: horiz. index of deep water column receiving dense water flow |
C ijd :: horiz. index of deep water column receiving dense water flow |
51 |
C ijs :: horiz. index of shallow water column (e.g. shelf) |
C ijs :: horiz. index of shallow water column (e.g. shelf) |
52 |
C from which dense water flow originates |
C from which dense water flow originates |
93 |
DO n=1,DWNSLP_NbSite(bi,bj) |
DO n=1,DWNSLP_NbSite(bi,bj) |
94 |
DWNSLP_deepK(n,bi,bj) = 0 |
DWNSLP_deepK(n,bi,bj) = 0 |
95 |
|
|
96 |
C- detect density dradient along the slope => Downsloping flow |
C- detect density gradient along the slope => Downsloping flow |
97 |
|
|
98 |
ijd = DWNSLP_ijDeep(n,bi,bj) |
ijd = DWNSLP_ijDeep(n,bi,bj) |
99 |
ijr = DWNSLP_shVsD(n,bi,bj) |
ijr = DWNSLP_shVsD(n,bi,bj) |
100 |
ijs = ijd + ijr |
ijs = ijd + ijr |
101 |
kshelf = kBottom(ijs,bi,bj) |
kshelf = kBottom(ijs,bi,bj) |
102 |
|
|
103 |
dRhoH = rhoInSitu(ijs,kshelf) |
dRhoH = rho3d(ijs,kshelf,bi,bj) |
104 |
& -rhoInSitu(ijd,kshelf) |
& -rho3d(ijd,kshelf,bi,bj) |
105 |
c IF ( dRhoH.GT.0. _d 0 ) THEN |
c IF ( dRhoH.GT.0. _d 0 ) THEN |
106 |
IF ( rhoInSitu(ijs,kshelf+1).GT.rhoInSitu(ijd,kshelf+1) |
IF ( rho3d(ijs,kshelf+1,bi,bj).GT.rho3d(ijd,kshelf+1,bi,bj) |
107 |
& .AND. dRhoH.GT.0. _d 0 ) THEN |
& .AND. dRhoH.GT.0. _d 0 ) THEN |
108 |
|
|
109 |
C- search for deepest level where Rho_shelf > Rho_deep |
C- search for deepest level where Rho_shelf > Rho_deep |
110 |
kdeep = kshelf |
kdeep = kshelf |
111 |
DO k=kshelf+1,kBottom(ijd,bi,bj),downward |
DO k=kshelf+1,kBottom(ijd,bi,bj),downward |
112 |
IF ( rhoInSitu(ijs,k).GT.rhoInSitu(ijd,k) ) kdeep = k |
IF ( rho3d(ijs,k,bi,bj).GT.rho3d(ijd,k,bi,bj) ) kdeep = k |
113 |
ENDDO |
ENDDO |
114 |
DWNSLP_deepK(n,bi,bj) = kdeep |
DWNSLP_deepK(n,bi,bj) = kdeep |
115 |
|
|
159 |
ENDIF |
ENDIF |
160 |
|
|
161 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
|
c IF ( useDiagnostics ) THEN |
|
|
c CALL DIAGNOSTICS_FILL(rhoInSitu,'RHOAnExt',0,Nr,2,bi,bj,myThid) |
|
|
c ENDIF |
|
162 |
IF ( doDiagDwnSlpFlow ) THEN |
IF ( doDiagDwnSlpFlow ) THEN |
163 |
CALL DIAGNOSTICS_FILL( uFlow, 'DSLPuFlw', 0,1,2,bi,bj,myThid ) |
CALL DIAGNOSTICS_FILL( uFlow, 'DSLPuFlw', 0,1,2,bi,bj,myThid ) |
164 |
CALL DIAGNOSTICS_FILL( vFlow, 'DSLPvFlw', 0,1,2,bi,bj,myThid ) |
CALL DIAGNOSTICS_FILL( vFlow, 'DSLPvFlw', 0,1,2,bi,bj,myThid ) |