/[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.13 - (show annotations) (download)
Sun Feb 9 18:56:19 2014 UTC (10 years, 2 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: +25 -34 lines
fix sideDrag option for thin-walls with Non-Lin Free-Surf

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_v_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_V_SIDEDRAG
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE MOM_V_SIDEDRAG(
11 I bi, bj, k,
12 I vFld, del2v, hFacZ,
13 I viscAh_Z,viscA4_Z,
14 I harmonic, biharmonic, useVariableViscosity,
15 O vDragTerms,
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^v_{drag} = - \frac{2}{\Delta x_v} (A_h v - A_4 \nabla^2 v)
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 vfld :: meridional flow
36 C del2v :: Laplacian of meridional flow
37 C hFacZ :: fractional open water at vorticity points
38 C myThid :: my Thread Id number
39 INTEGER bi, bj, k
40 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41 _RL del2v(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 vDragTerms :: drag term
50 _RL vDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51
52 C !LOCAL VARIABLES: ====================================================
53 C i,j :: loop indices
54 C hFacZClosedE :: fractional open water to east
55 C hFacZClosedW :: fractional open water to west
56 INTEGER i, j
57 _RL hFacZClosedE, hFacZClosedW
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 hFacZClosedW = h0FacS(i,j,k,bi,bj) - hFacZ(i,j)
69 hFacZClosedE = h0FacS(i,j,k,bi,bj) - hFacZ(i+1,j)
70 #else
71 hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
72 hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
73 #endif
74 Ahtmp=MIN(viscAh+viscAhGrid*rAs(i,j,bi,bj)/deltaTmom,
75 & viscAhMax)
76 A4tmp=MIN(viscA4+viscA4Grid*(rAs(i,j,bi,bj)**2)/deltaTmom,
77 & viscA4Max)
78 IF (viscA4GridMax.GT.0.) THEN
79 A4tmp=MIN(A4tmp,viscA4GridMax*(rAs(i,j,bi,bj)**2)/deltaTmom)
80 ENDIF
81 A4tmp=MAX(A4tmp,viscA4GridMin*(rAs(i,j,bi,bj)**2)/deltaTmom)
82 vDragTerms(i,j) =
83 & -_recip_hFacS(i,j,k,bi,bj)
84 & *recip_drF(k)*recip_rAs(i,j,bi,bj)
85 & *( hFacZClosedW*_dyU( i ,j,bi,bj)
86 & *_recip_dxV( i ,j,bi,bj)
87 & +hFacZClosedE*_dyU(i+1,j,bi,bj)
88 & *_recip_dxV(i+1,j,bi,bj) )
89 & *drF(k)*2.*(
90 & Ahtmp*vFld(i,j)*cosFacV(j,bi,bj)
91 #ifdef COSINEMETH_III
92 & -viscA4*del2v(i,j)*sqcosFacV(j,bi,bj)
93 #else
94 & -A4tmp*del2v(i,j)*cosFacV(j,bi,bj)
95 #endif
96 & )
97 ENDDO
98 ENDDO
99
100 ELSE
101 C-- Laplacian and bi-harmonic terms: using variable-Viscosity coeff.
102 C from MOM_CALC_VISC, consistent with dissipation in the interior
103
104 DO j=2-OLy,sNy+OLy-1
105 DO i=2-OLx,sNx+OLx-1
106 #ifdef NONLIN_FRSURF
107 hFacZClosedW = h0FacS(i,j,k,bi,bj) - hFacZ(i,j)
108 hFacZClosedE = h0FacS(i,j,k,bi,bj) - hFacZ(i+1,j)
109 #else
110 hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
111 hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
112 #endif
113 vDragTerms(i,j) =
114 & -_recip_hFacS(i,j,k,bi,bj)
115 & *recip_drF(k)*recip_rAs(i,j,bi,bj)
116 & *( hFacZClosedW*_dyU( i ,j,bi,bj)*_recip_dxV( i ,j,bi,bj)
117 & *( viscAh_Z(i ,j)*vFld(i,j)*cosFacV(j,bi,bj)
118 #ifdef COSINEMETH_III
119 & -viscA4_Z(i ,j)*del2v(i,j)*sqcosFacV(j,bi,bj) )
120 #else
121 & -viscA4_Z(i ,j)*del2v(i,j)*cosFacV(j,bi,bj) )
122 #endif
123 & +hFacZClosedE*_dyU(i+1,j,bi,bj)*_recip_dxV(i+1,j,bi,bj)
124 & *( viscAh_Z(i+1,j)*vFld(i,j)*cosFacV(j,bi,bj)
125 #ifdef COSINEMETH_III
126 & -viscA4_Z(i+1,j)*del2v(i,j)*sqcosFacV(j,bi,bj) )
127 #else
128 & -viscA4_Z(i+1,j)*del2v(i,j)*cosFacV(j,bi,bj) )
129 #endif
130 & )*drF(k)*sideDragFactor
131 ENDDO
132 ENDDO
133
134 C-- end old-version / new-version IF blocks
135 ENDIF
136
137 #ifdef ALLOW_DIAGNOSTICS
138 IF (useDiagnostics) THEN
139 CALL DIAGNOSTICS_FILL(vDragTerms,'VSidDrag',k,1,2,bi,bj,myThid)
140 ENDIF
141 #endif /* ALLOW_DIAGNOSTICS */
142
143 RETURN
144 END

  ViewVC Help
Powered by ViewVC 1.1.22