File indexing completed on 2018-03-02 18:39:15 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
b6bbe8cccf Jean*0001 #include "DWNSLP_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE DWNSLP_CALC_FLOW(
04f24c0cdf Jean*0007 I bi, bj, kBottom, rho3d,
b6bbe8cccf Jean*0008 I myTime, myIter, myThid )
bb79aa40f5 Jean*0009
b6bbe8cccf Jean*0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "DWNSLP_SIZE.h"
0026 #include "DWNSLP_PARAMS.h"
0027 #include "DWNSLP_VARS.h"
0028
0029
0030
0031
0032
04f24c0cdf Jean*0033
b6bbe8cccf Jean*0034
0035
0036
0037 INTEGER bi, bj
04f24c0cdf Jean*0038 INTEGER kBottom( xySize, nSx,nSy )
0039 _RL rho3d ( xySize, Nr,nSx,nSy )
b6bbe8cccf Jean*0040 _RL myTime
0041 INTEGER myIter, myThid
0042
0043 #ifdef ALLOW_DOWN_SLOPE
0044
0045
0046
bb79aa40f5 Jean*0047
b6bbe8cccf Jean*0048
0049
0050
0051
0052 INTEGER k
0053 INTEGER n, ijd, ijr, ijs
0054 INTEGER kdeep, ishelf, jshelf, kshelf
0055 _RL dRhoH
0056 INTEGER downward
0057 #ifdef ALLOW_DIAGNOSTICS
0058 LOGICAL doDiagDwnSlpFlow
0059 INTEGER ij
0060 _RL sgnFac
0061 _RL uFlow( xySize )
0062 _RL vFlow( xySize )
0063
0064 LOGICAL DIAGNOSTICS_IS_ON
0065 EXTERNAL DIAGNOSTICS_IS_ON
0066 #endif /* ALLOW_DIAGNOSTICS */
0067
0068
0069
0070
0071
0072
0073 downward = 1
0074 IF ( usingPCoords ) downward = -1
0075
0076 #ifdef ALLOW_DIAGNOSTICS
0077 IF ( useDiagnostics ) THEN
0078 doDiagDwnSlpFlow = DIAGNOSTICS_IS_ON( 'DSLPuFlw', myThid )
0079 & .OR. DIAGNOSTICS_IS_ON( 'DSLPvFlw', myThid )
0080 IF ( doDiagDwnSlpFlow ) THEN
0081 DO ij=1,xySize
0082 uFlow(ij) = 0. _d 0
0083 vFlow(ij) = 0. _d 0
0084 ENDDO
0085 ENDIF
0086 ELSE
0087 doDiagDwnSlpFlow = .FALSE.
0088 ENDIF
0089 #endif /* ALLOW_DIAGNOSTICS */
0090
0091 DO n=1,DWNSLP_NbSite(bi,bj)
0092 DWNSLP_deepK(n,bi,bj) = 0
0093
0884a363a5 Jean*0094
b6bbe8cccf Jean*0095
0096 ijd = DWNSLP_ijDeep(n,bi,bj)
0097 ijr = DWNSLP_shVsD(n,bi,bj)
0098 ijs = ijd + ijr
0099 kshelf = kBottom(ijs,bi,bj)
0100
04f24c0cdf Jean*0101 dRhoH = rho3d(ijs,kshelf,bi,bj)
0102 & -rho3d(ijd,kshelf,bi,bj)
b6bbe8cccf Jean*0103
04f24c0cdf Jean*0104 IF ( rho3d(ijs,kshelf+1,bi,bj).GT.rho3d(ijd,kshelf+1,bi,bj)
b6bbe8cccf Jean*0105 & .AND. dRhoH.GT.0. _d 0 ) THEN
0106
0107
0108 kdeep = kshelf
0109 DO k=kshelf+1,kBottom(ijd,bi,bj),downward
04f24c0cdf Jean*0110 IF ( rho3d(ijs,k,bi,bj).GT.rho3d(ijd,k,bi,bj) ) kdeep = k
b6bbe8cccf Jean*0111 ENDDO
0112 DWNSLP_deepK(n,bi,bj) = kdeep
0113
0114
0115
0116
0117
0118 DWNSLP_Transp(n,bi,bj) = DWNSLP_Gamma(n,bi,bj)
0119 & *DWNSLP_rec_mu*gravity*dRhoH*recip_rhoConst
0120
0121 #ifdef ALLOW_DIAGNOSTICS
0122 IF ( doDiagDwnSlpFlow ) THEN
0123 ij = MAX( ijd, ijs )
0124 sgnFac = SIGN(1,-ijr)
0125 IF ( ABS(ijr).EQ.1 ) THEN
0126 uFlow(ij) = sgnFac*DWNSLP_Transp(n,bi,bj)
0127 ELSE
0128 vFlow(ij) = sgnFac*DWNSLP_Transp(n,bi,bj)
0129 ENDIF
0130 ENDIF
0131 #endif /* ALLOW_DIAGNOSTICS */
0132
0133 ENDIF
0134
0135
0136 ENDDO
0137
bb79aa40f5 Jean*0138 IF ( DWNSLP_ioUnit.GT.0 ) THEN
0139 _BEGIN_MASTER(myThid)
b6bbe8cccf Jean*0140 WRITE(DWNSLP_ioUnit,'(A,I8,2I4)')
0141 & ' DWNSLP_CALC_FLOW: iter,bi,bj=',myIter,bi,bj
0142 WRITE(DWNSLP_ioUnit,'(A)')
0143 & ' bi bj n : ijd ijr is js ; ks kd-s Transp :'
0144 DO n=1,DWNSLP_NbSite(bi,bj)
0145 IF (DWNSLP_deepK(n,bi,bj).NE.0) THEN
0146 ijs = DWNSLP_ijDeep(n,bi,bj) + DWNSLP_shVsD(n,bi,bj)
0147 ishelf = 1-OLx + mod(ijs-1,xSize)
0148 jshelf = 1-OLy + (ijs-1)/xSize
0149 kshelf = kBottom(ijs,bi,bj)
0150 WRITE(DWNSLP_ioUnit,'(2I4,I6,A,I8,I6,2I4,A,2I4,1PE14.6)')
0151 & bi,bj,n,' :', DWNSLP_ijDeep(n,bi,bj),
0152 & DWNSLP_shVsD(n,bi,bj), ishelf,jshelf,
0153 & ' ;', kshelf, DWNSLP_deepK(n,bi,bj)-kshelf,
0154 & DWNSLP_Transp(n,bi,bj)
0155 ENDIF
0156 ENDDO
0157 WRITE(DWNSLP_ioUnit,*)
bb79aa40f5 Jean*0158 _END_MASTER(myThid)
b6bbe8cccf Jean*0159 ENDIF
0160
0161 #ifdef ALLOW_DIAGNOSTICS
0162 IF ( doDiagDwnSlpFlow ) THEN
0163 CALL DIAGNOSTICS_FILL( uFlow, 'DSLPuFlw', 0,1,2,bi,bj,myThid )
0164 CALL DIAGNOSTICS_FILL( vFlow, 'DSLPvFlw', 0,1,2,bi,bj,myThid )
0165 ENDIF
0166 #endif /* ALLOW_DIAGNOSTICS */
0167
0168 #endif /* ALLOW_DOWN_SLOPE */
0169
0170 RETURN
0171 END