Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:10 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_V_SIDEDRAG
                0005 
                0006 C !INTERFACE: ==========================================================
aea29c8517 Alis*0007       SUBROUTINE MOM_V_SIDEDRAG(
fafb134cbe Jean*0008      I        bi, bj, k,
aea29c8517 Alis*0009      I        vFld, del2v, hFacZ,
998681995e Bayl*0010      I        viscAh_Z,viscA4_Z,
fafb134cbe Jean*0011      I        harmonic, biharmonic, useVariableViscosity,
aea29c8517 Alis*0012      O        vDragTerms,
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^v_{drag} = - \frac{2}{\Delta x_v} (A_h v - A_4 \nabla^2 v)
                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
fafb134cbe Jean*0032 C  vfld                 :: meridional flow
71207ba845 Alis*0033 C  del2v                :: Laplacian of meridional 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 vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0038       _RL del2v(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  vDragTerms           :: drag term
                0047       _RL vDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0048 
                0049 C !LOCAL VARIABLES: ====================================================
                0050 C  i,j                  :: loop indices
                0051 C  hFacZClosedE         :: fractional open water to east
                0052 C  hFacZClosedW         :: fractional open water to west
fafb134cbe Jean*0053       INTEGER i, j
                0054       _RL hFacZClosedE, hFacZClosedW
dda590ff3b Jean*0055       _RL Ahtmp,A4tmp
fafb134cbe Jean*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         hFacZClosedW = h0FacS(i,j,k,bi,bj) - hFacZ(i,j)
                0066         hFacZClosedE = h0FacS(i,j,k,bi,bj) - hFacZ(i+1,j)
b6f977b498 Jean*0067 #else
dda590ff3b Jean*0068         hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
                0069         hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
b6f977b498 Jean*0070 #endif
fafb134cbe Jean*0071         Ahtmp=MIN(viscAh+viscAhGrid*rAs(i,j,bi,bj)/deltaTmom,
dda590ff3b Jean*0072      &            viscAhMax)
fafb134cbe Jean*0073         A4tmp=MIN(viscA4+viscA4Grid*(rAs(i,j,bi,bj)**2)/deltaTmom,
dda590ff3b Jean*0074      &            viscA4Max)
                0075         IF (viscA4GridMax.GT.0.) THEN
fafb134cbe Jean*0076            A4tmp=MIN(A4tmp,viscA4GridMax*(rAs(i,j,bi,bj)**2)/deltaTmom)
dda590ff3b Jean*0077         ENDIF
fafb134cbe Jean*0078         A4tmp=MAX(A4tmp,viscA4GridMin*(rAs(i,j,bi,bj)**2)/deltaTmom)
dda590ff3b Jean*0079         vDragTerms(i,j) =
                0080      &   -_recip_hFacS(i,j,k,bi,bj)
                0081      &   *recip_drF(k)*recip_rAs(i,j,bi,bj)
                0082      &   *( hFacZClosedW*_dyU( i ,j,bi,bj)
                0083      &      *_recip_dxV( i ,j,bi,bj)
                0084      &     +hFacZClosedE*_dyU(i+1,j,bi,bj)
                0085      &      *_recip_dxV(i+1,j,bi,bj) )
                0086      &   *drF(k)*2.*(
1c7feb6c12 Jean*0087      &                Ahtmp*vFld(i,j)*cosFacV(j,bi,bj)
dda590ff3b Jean*0088 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0089      &               -viscA4*del2v(i,j)*sqcosFacV(j,bi,bj)
dda590ff3b Jean*0090 #else
1c7feb6c12 Jean*0091      &               -A4tmp*del2v(i,j)*cosFacV(j,bi,bj)
dda590ff3b Jean*0092 #endif
                0093      &              )
                0094        ENDDO
                0095       ENDDO
                0096 
1c7feb6c12 Jean*0097       ELSE
                0098 C--   Laplacian and bi-harmonic terms: using variable-Viscosity coeff.
                0099 C     from MOM_CALC_VISC, consistent with dissipation in the interior
dda590ff3b Jean*0100 
fafb134cbe Jean*0101       DO j=2-OLy,sNy+OLy-1
                0102        DO i=2-OLx,sNx+OLx-1
b6f977b498 Jean*0103 #ifdef NONLIN_FRSURF
fafb134cbe Jean*0104         hFacZClosedW = h0FacS(i,j,k,bi,bj) - hFacZ(i,j)
                0105         hFacZClosedE = h0FacS(i,j,k,bi,bj) - hFacZ(i+1,j)
b6f977b498 Jean*0106 #else
fafb134cbe Jean*0107         hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
                0108         hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
b6f977b498 Jean*0109 #endif
aea29c8517 Alis*0110         vDragTerms(i,j) =
                0111      &   -_recip_hFacS(i,j,k,bi,bj)
                0112      &   *recip_drF(k)*recip_rAs(i,j,bi,bj)
998681995e Bayl*0113      &   *( hFacZClosedW*_dyU( i ,j,bi,bj)*_recip_dxV( i ,j,bi,bj)
1c7feb6c12 Jean*0114      &         *( viscAh_Z(i  ,j)*vFld(i,j)*cosFacV(j,bi,bj)
aea29c8517 Alis*0115 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0116      &           -viscA4_Z(i  ,j)*del2v(i,j)*sqcosFacV(j,bi,bj) )
                0117 #else
                0118      &           -viscA4_Z(i  ,j)*del2v(i,j)*cosFacV(j,bi,bj) )
998681995e Bayl*0119 #endif
1c7feb6c12 Jean*0120      &     +hFacZClosedE*_dyU(i+1,j,bi,bj)*_recip_dxV(i+1,j,bi,bj)
                0121      &         *( viscAh_Z(i+1,j)*vFld(i,j)*cosFacV(j,bi,bj)
998681995e Bayl*0122 #ifdef COSINEMETH_III
1c7feb6c12 Jean*0123      &           -viscA4_Z(i+1,j)*del2v(i,j)*sqcosFacV(j,bi,bj) )
aea29c8517 Alis*0124 #else
1c7feb6c12 Jean*0125      &           -viscA4_Z(i+1,j)*del2v(i,j)*cosFacV(j,bi,bj) )
998681995e Bayl*0126 #endif
1c7feb6c12 Jean*0127      &    )*drF(k)*sideDragFactor
aea29c8517 Alis*0128        ENDDO
                0129       ENDDO
                0130 
1c7feb6c12 Jean*0131 C--   end old-version / new-version IF blocks
                0132       ENDIF
dda590ff3b Jean*0133 
4ee0a32a74 Jean*0134 #ifdef ALLOW_DIAGNOSTICS
                0135       IF (useDiagnostics) THEN
                0136         CALL DIAGNOSTICS_FILL(vDragTerms,'VSidDrag',k,1,2,bi,bj,myThid)
                0137       ENDIF
                0138 #endif /* ALLOW_DIAGNOSTICS */
                0139 
aea29c8517 Alis*0140       RETURN
                0141       END