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

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

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


Revision 1.9 - (show annotations) (download)
Thu Sep 29 18:36:43 2005 UTC (18 years, 8 months ago) by jmc
Branch: MAIN
Changes since 1.8: +7 -1 lines
add diagnostics for side-drag & bottom-drag.

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_v_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_V_SIDEDRAG
9
10 C !INTERFACE: ==========================================================
11 SUBROUTINE MOM_V_SIDEDRAG(
12 I bi,bj,k,
13 I vFld, del2v, hFacZ,
14 I viscAh_Z,viscA4_Z,
15 I harmonic,biharmonic,useVariableViscosity,
16 O vDragTerms,
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^v_{drag} = - \frac{2}{\Delta x_v} (A_h v - A_4 \nabla^2 v)
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 uvld :: meridional flow
37 C del2v :: Laplacian of meridional flow
38 C hFacZ :: fractional open water at vorticity points
39 C myThid :: thread number
40 INTEGER bi,bj,k
41 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42 _RL del2v(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 vDragTerms :: drag term
51 _RL vDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52
53 C !LOCAL VARIABLES: ====================================================
54 C i,j :: loop indices
55 C hFacZClosedE :: fractional open water to east
56 C hFacZClosedW :: fractional open water to west
57 INTEGER I,J
58 _RL hFacZClosedE,hFacZClosedW
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 hFacZClosedW = h0FacS(i,j,k,bi,bj) - h0FacS(i-1,j,k,bi,bj)
71 hFacZClosedE = h0FacS(i,j,k,bi,bj) - h0FacS(i+1,j,k,bi,bj)
72 hFacZClosedW = MAX( 0. _d 0, hFacZClosedW )
73 hFacZClosedE = MAX( 0. _d 0, hFacZClosedE )
74 #else
75 hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
76 hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
77 #endif
78 Ahtmp=min(viscAh+viscAhGrid*rAs(i,j,bi,bj)/deltaTmom,
79 & viscAhMax)
80 A4tmp=min(viscA4+viscA4Grid*(rAs(i,j,bi,bj)**2)/deltaTmom,
81 & viscA4Max)
82 IF (viscA4GridMax.GT.0.) THEN
83 A4tmp=min(A4tmp,viscA4GridMax*(rAs(i,j,bi,bj)**2)/deltaTmom)
84 ENDIF
85 A4tmp=max(A4tmp,viscA4GridMin*(rAs(i,j,bi,bj)**2)/deltaTmom)
86 vDragTerms(i,j) =
87 & -_recip_hFacS(i,j,k,bi,bj)
88 & *recip_drF(k)*recip_rAs(i,j,bi,bj)
89 & *( hFacZClosedW*_dyU( i ,j,bi,bj)
90 & *_recip_dxV( i ,j,bi,bj)
91 & +hFacZClosedE*_dyU(i+1,j,bi,bj)
92 & *_recip_dxV(i+1,j,bi,bj) )
93 & *drF(k)*2.*(
94 & Ahtmp*vFld(i,j)*cosFacV(J,bi,bj)
95 & -A4tmp*del2v(i,j)*cosFacV(J,bi,bj)
96 #ifdef COSINEMETH_III
97 & -viscA4*del2v(i,j)*sqcosFacV(J,bi,bj)
98 #else
99 & -viscA4*del2v(i,j)*cosFacV(J,bi,bj)
100 #endif
101 & )
102 ENDDO
103 ENDDO
104
105 #else /* SIDEDRAG_OLD_VERSION */
106
107 C - Laplacian and bi-harmonic terms
108 DO j=2-Oly,sNy+Oly-1
109 DO i=2-Olx,sNx+Olx-1
110 C- this will not give any side-drag along thin wall.
111 C (but this might just be what we want ...)
112 #ifdef NONLIN_FRSURF
113 hFacZClosedW = h0FacS(i,j,k,bi,bj) - h0FacS(i-1,j,k,bi,bj)
114 hFacZClosedE = h0FacS(i,j,k,bi,bj) - h0FacS(i+1,j,k,bi,bj)
115 #else
116 hFacZClosedW = hFacS(i,j,k,bi,bj) - hFacS(i-1,j,k,bi,bj)
117 hFacZClosedE = hFacS(i,j,k,bi,bj) - hFacS(i+1,j,k,bi,bj)
118 #endif
119 hFacZClosedW = MAX( 0. _d 0, hFacZClosedW )
120 hFacZClosedE = MAX( 0. _d 0, hFacZClosedE )
121 vDragTerms(i,j) =
122 & -_recip_hFacS(i,j,k,bi,bj)
123 & *recip_drF(k)*recip_rAs(i,j,bi,bj)
124 & *( hFacZClosedW*_dyU( i ,j,bi,bj)*_recip_dxV( i ,j,bi,bj)
125 & *(viscAh_Z(i ,j)*vFld(i,j)*cosFacV(J,bi,bj)
126 #ifdef COSINEMETH_III
127 & -viscA4_Z(i ,j)*del2v(i,j)*sqcosFacV(J,bi,bj))
128 #else
129 & -viscA4_Z(i ,j)*del2v(i,j)*cosFacV(J,bi,bj))
130 #endif
131 & +hFacZClosedE*_dyU(i+1,j,bi,bj)*_recip_dxV(i+1,j,bi,bj)
132 & *(viscAh_Z(i+1,j)*vFld(i,j)*cosFacV(J,bi,bj)
133 #ifdef COSINEMETH_III
134 & -viscA4_Z(i+1,j)*del2v(i,j)*sqcosFacV(J,bi,bj))
135 #else
136 & -viscA4_Z(i+1,j)*del2v(i,j)*cosFacV(J,bi,bj))
137 #endif
138 & )
139 & *drF(k)*2.
140 ENDDO
141 ENDDO
142
143 #endif /* (not) SIDEDRAG_OLD_VERSION */
144
145 #ifdef ALLOW_DIAGNOSTICS
146 IF (useDiagnostics) THEN
147 CALL DIAGNOSTICS_FILL(vDragTerms,'VSidDrag',k,1,2,bi,bj,myThid)
148 ENDIF
149 #endif /* ALLOW_DIAGNOSTICS */
150
151 RETURN
152 END

  ViewVC Help
Powered by ViewVC 1.1.22