Back to home page

MITgcm

 
 

    


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 CBOP
                0004 C !ROUTINE: MOM_U_SIDEDRAG
                0005 
                0006 C !INTERFACE: ==========================================================
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 C !DESCRIPTION:
                0016 C Calculates the drag terms due to the no-slip condition on viscous stresses:
                0017 C \begin{equation*}
                0018 C G^u_{drag} = - \frac{2}{\Delta y_u} (A_h u - A_4 \nabla^2 u)
                0019 C \end{equation*}
                0020 
                0021 C !USES: ===============================================================
                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 C !INPUT PARAMETERS: ===================================================
                0030 C  bi,bj                :: tile indices
                0031 C  k                    :: vertical level
                0032 C  uFld                 :: zonal flow
                0033 C  del2u                :: Laplacian of zonal flow
                0034 C  hFacZ                :: fractional open water at vorticity points
fafb134cbe Jean*0035 C  myThid               :: my Thread Id number
                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 C !OUTPUT PARAMETERS: ==================================================
                0046 C  uDragTerms           :: drag term
                0047       _RL uDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0048 
                0049 C !LOCAL VARIABLES: ====================================================
                0050 C  i,j                  :: loop indices
                0051 C  hFacZClosedN         :: fractional open water to north
                0052 C  hFacZClosedS         :: fractional open water to south
1c7feb6c12 Jean*0053       INTEGER i,j
fafb134cbe Jean*0054       _RL hFacZClosedS, hFacZClosedN
                0055       _RL Ahtmp, A4tmp
71207ba845 Alis*0056 CEOP
1c7feb6c12 Jean*0057 
                0058       IF ( sideDragFactor.LE.0. ) THEN
                0059 C--   Laplacian and bi-harmonic terms: variable-Viscosity coeff. from
                0060 C     MOM_CALC_VISC are not used here (corresponds to the "old" version).
                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 C--   Laplacian and bi-harmonic terms: using variable-Viscosity coeff.
                0102 C     from MOM_CALC_VISC, consistent with dissipation in the interior
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 C--   end old-version / new-version IF blocks
                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