File indexing completed on 2018-03-02 18:42:08 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
9c05b3873e Alis*0001 #include "MOM_COMMON_OPTIONS.h"
aea29c8517 Alis*0002
71207ba845 Alis*0003
0004
0005
0006
aea29c8517 Alis*0007 SUBROUTINE MOM_U_SIDEDRAG(
fafb134cbe Jean*0008 I bi, bj, k,
aea29c8517 Alis*0009 I uFld, del2u, hFacZ,
fafb134cbe Jean*0010 I viscAh_Z, viscA4_Z,
0011 I harmonic, biharmonic, useVariableViscosity,
aea29c8517 Alis*0012 O uDragTerms,
fafb134cbe Jean*0013 I myThid )
aea29c8517 Alis*0014
71207ba845 Alis*0015
0016
0017
0018
0019
0020
0021
0022 IMPLICIT NONE
aea29c8517 Alis*0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "GRID.h"
b6f977b498 Jean*0027 #include "SURFACE.h"
aea29c8517 Alis*0028
71207ba845 Alis*0029
0030
0031
0032
0033
0034
fafb134cbe Jean*0035
0036 INTEGER bi, bj, k
aea29c8517 Alis*0037 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0038 _RL del2u(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0039 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
998681995e Bayl*0040 _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0041 _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
fafb134cbe Jean*0042 LOGICAL harmonic, biharmonic, useVariableViscosity
aea29c8517 Alis*0043 INTEGER myThid
0044
71207ba845 Alis*0045
0046
0047 _RL uDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0048
0049
0050
0051
0052
1c7feb6c12 Jean*0053 INTEGER i,j
fafb134cbe Jean*0054 _RL hFacZClosedS, hFacZClosedN
0055 _RL Ahtmp, A4tmp
71207ba845 Alis*0056
1c7feb6c12 Jean*0057
0058 IF ( sideDragFactor.LE.0. ) THEN
0059
0060
0061
fafb134cbe Jean*0062 DO j=2-OLy,sNy+OLy-1
0063 DO i=2-OLx,sNx+OLx-1
b6f977b498 Jean*0064 #ifdef NONLIN_FRSURF
fafb134cbe Jean*0065 hFacZClosedS = h0FacW(i,j,k,bi,bj) - hFacZ(i,j)
0066 hFacZClosedN = h0FacW(i,j,k,bi,bj) - hFacZ(i,j+1)
b6f977b498 Jean*0067 #else
dda590ff3b Jean*0068 hFacZClosedS = _hFacW(i,j,k,bi,bj) - hFacZ(i,j)
0069 hFacZClosedN = _hFacW(i,j,k,bi,bj) - hFacZ(i,j+1)
b6f977b498 Jean*0070 #endif
fafb134cbe Jean*0071 Ahtmp=MIN(viscAh+viscAhGrid*rAw(i,j,bi,bj)/deltaTmom,
dda590ff3b Jean*0072 & viscAhMax)
fafb134cbe Jean*0073 A4tmp=MIN(viscA4+viscA4Grid*(rAw(i,j,bi,bj)**2)/deltaTmom,
dda590ff3b Jean*0074 & viscA4Max)
fafb134cbe Jean*0075 A4tmp=MIN(A4tmp,viscA4GridMax*(rAw(i,j,bi,bj)**2)/deltaTmom)
0076 A4tmp=MAX(A4tmp,viscA4GridMin*(rAw(i,j,bi,bj)**2)/deltaTmom)
dda590ff3b Jean*0077 uDragTerms(i,j) =
0078 & -_recip_hFacW(i,j,k,bi,bj)
0079 & *recip_drF(k)*recip_rAw(i,j,bi,bj)
0080 & *( hFacZClosedS*_dxV(i, j ,bi,bj)
0081 & *_recip_dyU(i, j ,bi,bj)
0082 & +hFacZClosedN*_dxV(i,j+1,bi,bj)
0083 & *_recip_dyU(i,j+1,bi,bj) )
0084 & *drF(k)*2.*(
0085 #ifdef ISOTROPIC_COS_SCALING
1c7feb6c12 Jean*0086 & viscAh*uFld(i,j)*cosFacU(j,bi,bj)
dda590ff3b Jean*0087 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0088 & -viscA4*del2u(i,j)*sqcosFacU(j,bi,bj)
dda590ff3b Jean*0089 #else
1c7feb6c12 Jean*0090 & -viscA4*del2u(i,j)*cosFacU(j,bi,bj)
dda590ff3b Jean*0091 #endif
0092 #else
0093 & Ahtmp*uFld(i,j)
0094 & -A4tmp*del2u(i,j)
0095 #endif
0096 & )
0097 ENDDO
0098 ENDDO
0099
1c7feb6c12 Jean*0100 ELSE
0101
0102
dda590ff3b Jean*0103
fafb134cbe Jean*0104 DO j=2-OLy,sNy+OLy-1
0105 DO i=2-OLx,sNx+OLx-1
b6f977b498 Jean*0106 #ifdef NONLIN_FRSURF
fafb134cbe Jean*0107 hFacZClosedS = h0FacW(i,j,k,bi,bj) - hFacZ(i,j)
0108 hFacZClosedN = h0FacW(i,j,k,bi,bj) - hFacZ(i,j+1)
b6f977b498 Jean*0109 #else
fafb134cbe Jean*0110 hFacZClosedS = _hFacW(i,j,k,bi,bj) - hFacZ(i,j)
0111 hFacZClosedN = _hFacW(i,j,k,bi,bj) - hFacZ(i,j+1)
b6f977b498 Jean*0112 #endif
aea29c8517 Alis*0113 uDragTerms(i,j) =
0114 & -_recip_hFacW(i,j,k,bi,bj)
0115 & *recip_drF(k)*recip_rAw(i,j,bi,bj)
998681995e Bayl*0116 & *( hFacZClosedS*_dxV(i, j ,bi,bj)*_recip_dyU(i, j ,bi,bj)
aea29c8517 Alis*0117 #ifdef ISOTROPIC_COS_SCALING
1c7feb6c12 Jean*0118 & *( viscAh_Z(i,j )*uFld(i,j)*cosFacU(j,bi,bj)
aea29c8517 Alis*0119 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0120 & -viscA4_Z(i,j )*del2u(i,j)*sqcosFacU(j,bi,bj) )
aea29c8517 Alis*0121 #else
1c7feb6c12 Jean*0122 & -viscA4_Z(i,j )*del2u(i,j)*cosFacU(j,bi,bj) )
aea29c8517 Alis*0123 #endif
0124 #else
1c7feb6c12 Jean*0125 & *( viscAh_Z(i,j )*uFld(i,j)
0126 & -viscA4_Z(i,j )*del2u(i,j) )
998681995e Bayl*0127 #endif
1c7feb6c12 Jean*0128 & +hFacZClosedN*_dxV(i,j+1,bi,bj)*_recip_dyU(i,j+1,bi,bj)
998681995e Bayl*0129 #ifdef ISOTROPIC_COS_SCALING
1c7feb6c12 Jean*0130 & *( viscAh_Z(i,j+1)*uFld(i,j)*cosFacU(j,bi,bj)
998681995e Bayl*0131 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0132 & -viscA4_Z(i,j+1)*del2u(i,j)*sqcosFacU(j,bi,bj) )
998681995e Bayl*0133 #else
1c7feb6c12 Jean*0134 & -viscA4_Z(i,j+1)*del2u(i,j)*cosFacU(j,bi,bj) )
998681995e Bayl*0135 #endif
0136 #else
1c7feb6c12 Jean*0137 & *( viscAh_Z(i,j+1)*uFld(i,j)
0138 & -viscA4_Z(i,j+1)*del2u(i,j) )
aea29c8517 Alis*0139 #endif
1c7feb6c12 Jean*0140 & )*drF(k)*sideDragFactor
aea29c8517 Alis*0141 ENDDO
0142 ENDDO
0143
1c7feb6c12 Jean*0144
0145 ENDIF
dda590ff3b Jean*0146
4ee0a32a74 Jean*0147 #ifdef ALLOW_DIAGNOSTICS
0148 IF (useDiagnostics) THEN
0149 CALL DIAGNOSTICS_FILL(uDragTerms,'USidDrag',k,1,2,bi,bj,myThid)
0150 ENDIF
0151 #endif /* ALLOW_DIAGNOSTICS */
0152
aea29c8517 Alis*0153 RETURN
0154 END