File indexing completed on 2025-05-05 05:08:25 UTC
view on githubraw file Latest commit 31fb0e0e on 2025-05-05 02:15:14 UTC
cec2469d72 Alis*0001 #include "MOM_VECINV_OPTIONS.h"
aea29c8517 Alis*0002
31fb0e0e6d Jean*0003
0004
0005
0006
aea29c8517 Alis*0007 SUBROUTINE MOM_VI_U_VERTSHEAR(
31fb0e0e6d Jean*0008 I bi, bj, k, deepFacA,
0009 I uFld, wFld,
aea29c8517 Alis*0010 U uShearTerm,
31fb0e0e6d Jean*0011 I myThid )
0012
0013
cf9761f7d1 Jean*0014
0015
0016
aea29c8517 Alis*0017
31fb0e0e6d Jean*0018
0019 IMPLICIT NONE
aea29c8517 Alis*0020
0021 #include "SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "GRID.h"
0024 #include "PARAMS.h"
0025
31fb0e0e6d Jean*0026
0027
0028 INTEGER bi, bj, k
0029 _RL deepFacA(Nr)
aea29c8517 Alis*0030 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0031 _RL wFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0032 _RL uShearTerm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0033 INTEGER myThid
0034
31fb0e0e6d Jean*0035
0036 INTEGER i, j, kp1, km1
0037 _RL mask_Kp1, mask_Km1, wBarXm, wBarXp
0038 _RL uZm, uZp, recip_drDeepRho
0039 LOGICAL rAdvAreaWeight
0040
0041
0042
aea29c8517 Alis*0043
b8082fc644 Jean*0044 rAdvAreaWeight =.TRUE.
0045
0046 IF ( selectKEscheme.EQ.1 .OR. selectKEscheme.EQ.3 )
0047 & rAdvAreaWeight =.FALSE.
0048
31fb0e0e6d Jean*0049 kp1 = MIN(k+1,Nr)
0050 mask_Kp1 = oneRL
0051 IF (k.EQ.Nr) mask_Kp1 = zeroRL
0052 km1 = MAX(k-1,1)
0053 mask_Km1 = oneRL
0054 IF (k.EQ.1) mask_Km1 = zeroRL
0055
0056 recip_drDeepRho = recip_drF(k)/deepFacA(k)
0057 & * recip_deepFac2C(k)*recip_rhoFacC(k)
aea29c8517 Alis*0058
31fb0e0e6d Jean*0059 DO j=1-OLy,sNy+OLy
0060 DO i=2-OLx,sNx+OLx
aea29c8517 Alis*0061
627b8cb06f Jean*0062
aea29c8517 Alis*0063
0064
0065
0066
0067
0068
cf9761f7d1 Jean*0069 IF ( rAdvAreaWeight ) THEN
31fb0e0e6d Jean*0070
0071 wBarXm = halfRL*(
0072 & wFld(i,j,k,bi,bj)*rA(i,j,bi,bj)*maskC(i,j,km1,bi,bj)
0073 & + wFld(i-1,j,k,bi,bj)*rA(i-1,j,bi,bj)*maskC(i-1,j,km1,bi,bj)
0074 & )*mask_Km1*deepFac2F(k)*rhoFacF(k)
0075 & *recip_rAw(i,j,bi,bj)
0076
0077
0078 wBarXp = halfRL*(
0079 & wFld(i,j,kp1,bi,bj)*rA(i,j,bi,bj)
0080 & + wFld(i-1,j,kp1,bi,bj)*rA(i-1,j,bi,bj)
0081 & )*mask_Kp1*deepFac2F(kp1)*rhoFacF(kp1)
0082 & *recip_rAw(i,j,bi,bj)
cf9761f7d1 Jean*0083 ELSE
31fb0e0e6d Jean*0084
0085 wBarXm = halfRL*(
0086 & wFld(i,j,k,bi,bj)*maskC(i,j,km1,bi,bj)
0087 & + wFld(i-1,j,k,bi,bj)*maskC(i-1,j,km1,bi,bj)
0088 & )*mask_Km1*deepFac2F(k)*rhoFacF(k)
0089
0090
0091 wBarXp = halfRL*(
0092 & wFld(i,j,kp1,bi,bj)
0093 & + wFld(i-1,j,kp1,bi,bj)
0094 & )*mask_Kp1*deepFac2F(kp1)*rhoFacF(kp1)
cf9761f7d1 Jean*0095 ENDIF
aea29c8517 Alis*0096
31fb0e0e6d Jean*0097
23571d7948 Jean*0098
31fb0e0e6d Jean*0099 uZm = ( uFld(i,j, k ,bi,bj)*deepFacA( k )
0100 & - uFld(i,j,km1,bi,bj)*deepFacA(km1)*mask_Km1 )*rkSign
aea29c8517 Alis*0101
23571d7948 Jean*0102
0103
aea29c8517 Alis*0104
31fb0e0e6d Jean*0105
23571d7948 Jean*0106
31fb0e0e6d Jean*0107 uZp = ( uFld(i,j,kp1,bi,bj)*deepFacA(kp1)*mask_Kp1
0108 & - uFld(i,j, k ,bi,bj)*deepFacA( k ) )*rkSign
aea29c8517 Alis*0109
23571d7948 Jean*0110
0111
aea29c8517 Alis*0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
3bb7e60d5f Jean*0127 IF (upwindShear) THEN
31fb0e0e6d Jean*0128 uShearTerm(i,j) = -halfRL*
0129 & ( ( wBarXp *uZp + wBarXm *uZm )
0130 & + ( ABS(wBarXp)*uZp - ABS(wBarXm)*uZm )
0131 & )*_recip_hFacW(i,j,k,bi,bj)*recip_drDeepRho
3bb7e60d5f Jean*0132 ELSE
31fb0e0e6d Jean*0133 uShearTerm(i,j) = -halfRL*( wBarXp*uZp + wBarXm*uZm )
0134 & *_recip_hFacW(i,j,k,bi,bj)*recip_drDeepRho
3bb7e60d5f Jean*0135 ENDIF
aea29c8517 Alis*0136 ENDDO
0137 ENDDO
0138
0139 RETURN
0140 END