/[MITgcm]/MITgcm/pkg/mom_common/mom_u_sidedrag.F
ViewVC logotype

Contents of /MITgcm/pkg/mom_common/mom_u_sidedrag.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.9 - (show annotations) (download)
Thu Sep 29 03:39:59 2005 UTC (18 years, 8 months ago) by jmc
Branch: MAIN
Changes since 1.8: +2 -2 lines
fix typo.

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_u_sidedrag.F,v 1.8 2005/09/29 03:33:28 jmc Exp $
2 C $Name: $
3
4 #include "MOM_COMMON_OPTIONS.h"
5 #define SIDEDRAG_OLD_VERSION
6
7 CBOP
8 C !ROUTINE: MOM_U_SIDEDRAG
9
10 C !INTERFACE: ==========================================================
11 SUBROUTINE MOM_U_SIDEDRAG(
12 I bi,bj,k,
13 I uFld, del2u, hFacZ,
14 I viscAh_Z,viscA4_Z,
15 I harmonic,biharmonic,useVariableViscosity,
16 O uDragTerms,
17 I myThid)
18
19 C !DESCRIPTION:
20 C Calculates the drag terms due to the no-slip condition on viscous stresses:
21 C \begin{equation*}
22 C G^u_{drag} = - \frac{2}{\Delta y_u} (A_h u - A_4 \nabla^2 u)
23 C \end{equation*}
24
25 C !USES: ===============================================================
26 IMPLICIT NONE
27 #include "SIZE.h"
28 #include "EEPARAMS.h"
29 #include "PARAMS.h"
30 #include "GRID.h"
31 #include "SURFACE.h"
32
33 C !INPUT PARAMETERS: ===================================================
34 C bi,bj :: tile indices
35 C k :: vertical level
36 C uFld :: zonal flow
37 C del2u :: Laplacian of zonal flow
38 C hFacZ :: fractional open water at vorticity points
39 C myThid :: thread number
40 INTEGER bi,bj,k
41 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42 _RL del2u(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
44 _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
45 _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
46 LOGICAL harmonic,biharmonic,useVariableViscosity
47 INTEGER myThid
48
49 C !OUTPUT PARAMETERS: ==================================================
50 C uDragTerms :: drag term
51 _RL uDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52
53 C !LOCAL VARIABLES: ====================================================
54 C i,j :: loop indices
55 C hFacZClosedN :: fractional open water to north
56 C hFacZClosedS :: fractional open water to south
57 INTEGER I,J
58 _RL hFacZClosedS,hFacZClosedN
59 CEOP
60
61 #ifdef SIDEDRAG_OLD_VERSION
62 _RL Ahtmp,A4tmp
63
64 C - Laplacian and bi-harmonic terms
65 DO j=2-Oly,sNy+Oly-1
66 DO i=2-Olx,sNx+Olx-1
67 #ifdef NONLIN_FRSURF
68 C- this will not give any side-drag along thin wall.
69 C (but this might just be what we want ...)
70 hFacZClosedS = h0FacW(i,j,k,bi,bj) - h0FacW(i,j-1,k,bi,bj)
71 hFacZClosedN = h0FacW(i,j,k,bi,bj) - h0FacW(i,j+1,k,bi,bj)
72 hFacZClosedS = MAX( 0. _d 0, hFacZClosedS )
73 hFacZClosedN = MAX( 0. _d 0, hFacZClosedN )
74 #else
75 hFacZClosedS = _hFacW(i,j,k,bi,bj) - hFacZ(i,j)
76 hFacZClosedN = _hFacW(i,j,k,bi,bj) - hFacZ(i,j+1)
77 #endif
78 Ahtmp=min(viscAh+viscAhGrid*rAw(i,j,bi,bj)/deltaTmom,
79 & viscAhMax)
80 A4tmp=min(viscA4+viscA4Grid*(rAw(i,j,bi,bj)**2)/deltaTmom,
81 & viscA4Max)
82 A4tmp=min(A4tmp,viscA4GridMax*(rAw(i,j,bi,bj)**2)/deltaTmom)
83 A4tmp=max(A4tmp,viscA4GridMin*(rAw(i,j,bi,bj)**2)/deltaTmom)
84 uDragTerms(i,j) =
85 & -_recip_hFacW(i,j,k,bi,bj)
86 & *recip_drF(k)*recip_rAw(i,j,bi,bj)
87 & *( hFacZClosedS*_dxV(i, j ,bi,bj)
88 & *_recip_dyU(i, j ,bi,bj)
89 & +hFacZClosedN*_dxV(i,j+1,bi,bj)
90 & *_recip_dyU(i,j+1,bi,bj) )
91 & *drF(k)*2.*(
92 #ifdef ISOTROPIC_COS_SCALING
93 & viscAh*uFld(i,j)*cosFacU(J,bi,bj)
94 #ifdef COSINEMETH_III
95 & -viscA4*del2u(i,j)*sqcosFacU(J,bi,bj)
96 #else
97 & -viscA4*del2u(i,j)*cosFacU(J,bi,bj)
98 #endif
99 #else
100 & Ahtmp*uFld(i,j)
101 & -A4tmp*del2u(i,j)
102 #endif
103 & )
104 ENDDO
105 ENDDO
106
107 #else /* SIDEDRAG_OLD_VERSION */
108
109 C - Laplacian and bi-harmonic terms
110 DO j=2-Oly,sNy+Oly-1
111 DO i=2-Olx,sNx+Olx-1
112 C- this will not give any side-drag along thin wall.
113 C (but this might just be what we want ...)
114 #ifdef NONLIN_FRSURF
115 hFacZClosedS = h0FacW(i,j,k,bi,bj) - h0FacW(i,j-1,k,bi,bj)
116 hFacZClosedN = h0FacW(i,j,k,bi,bj) - h0FacW(i,j+1,k,bi,bj)
117 #else
118 hFacZClosedS = hFacW(i,j,k,bi,bj) - hFacW(i,j-1,k,bi,bj)
119 hFacZClosedN = hFacW(i,j,k,bi,bj) - hFacW(i,j+1,k,bi,bj)
120 #endif
121 hFacZClosedS = MAX( 0. _d 0, hFacZClosedS )
122 hFacZClosedN = MAX( 0. _d 0, hFacZClosedN )
123 uDragTerms(i,j) =
124 & -_recip_hFacW(i,j,k,bi,bj)
125 & *recip_drF(k)*recip_rAw(i,j,bi,bj)
126 & *( hFacZClosedS*_dxV(i, j ,bi,bj)*_recip_dyU(i, j ,bi,bj)
127 #ifdef ISOTROPIC_COS_SCALING
128 & *(viscAh_Z(i,j )*uFld(i,j)*cosFacU(J,bi,bj)
129 #ifdef COSINEMETH_III
130 & -viscA4_Z(i,j )*del2u(i,j)*sqcosFacU(J,bi,bj))
131 #else
132 & -viscA4_Z(i,j )*del2u(i,j)*cosFacU(J,bi,bj))
133 #endif
134 #else
135 & *(viscAh_Z(i,j )*uFld(i,j)
136 & -viscA4_Z(i,j )*del2u(i,j))
137 #endif
138 & +hFacZClosedN*_dxV(i,j+1,bi,bj)*_recip_dyU(i,j+1,bi,bj)
139 #ifdef ISOTROPIC_COS_SCALING
140 & *(viscAh_Z(i,j+1)*uFld(i,j)*cosFacU(J,bi,bj)
141 #ifdef COSINEMETH_III
142 & -viscA4_Z(i,j+1)*del2u(i,j)*sqcosFacU(J,bi,bj))
143 #else
144 & -viscA4_Z(i,j+1)*del2u(i,j)*cosFacU(J,bi,bj))
145 #endif
146 #else
147 & *(viscAh_Z(i,j+1)*uFld(i,j)
148 & -viscA4_Z(i,j+1)*del2u(i,j))
149 #endif
150 & )
151 & *drF(k)*2.
152 ENDDO
153 ENDDO
154
155 #endif /* (not) SIDEDRAG_OLD_VERSION */
156
157 RETURN
158 END

  ViewVC Help
Powered by ViewVC 1.1.22