/[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.13 - (show annotations) (download)
Sun Feb 9 18:56:19 2014 UTC (10 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64u, checkpoint64w, checkpoint64v, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.12: +24 -33 lines
fix sideDrag option for thin-walls with Non-Lin Free-Surf

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

  ViewVC Help
Powered by ViewVC 1.1.22