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