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

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

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


Revision 1.8 - (hide annotations) (download)
Thu Sep 29 03:33:28 2005 UTC (18 years, 8 months ago) by jmc
Branch: MAIN
Changes since 1.7: +27 -18 lines
try to fix non-lin. free-surf. version of side-drag.

1 jmc 1.8 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_v_sidedrag.F,v 1.7 2005/09/29 02:31:55 jmc Exp $
2 adcroft 1.2 C $Name: $
3 adcroft 1.1
4     #include "MOM_COMMON_OPTIONS.h"
5 jmc 1.6 #define SIDEDRAG_OLD_VERSION
6 adcroft 1.1
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 baylor 1.5 I viscAh_Z,viscA4_Z,
15     I harmonic,biharmonic,useVariableViscosity,
16 adcroft 1.1 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 jmc 1.8 #include "SURFACE.h"
32 adcroft 1.1
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 baylor 1.5 _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 adcroft 1.1 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 jmc 1.8 _RL hFacZClosedE,hFacZClosedW
59 adcroft 1.1 CEOP
60    
61 jmc 1.6 #ifdef SIDEDRAG_OLD_VERSION
62     _RL Ahtmp,A4tmp
63    
64     C - Laplacian and bi-harmonic terms
65 jmc 1.8 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 jmc 1.6 hFacZClosedW = _hFacS(i,j,k,bi,bj) - hFacZ(i,j)
76     hFacZClosedE = _hFacS(i,j,k,bi,bj) - hFacZ(i+1,j)
77 jmc 1.8 #endif
78 jmc 1.6 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 jmc 1.7 A4tmp=min(A4tmp,viscA4GridMax*(rAs(i,j,bi,bj)**2)/deltaTmom)
84 jmc 1.6 ENDIF
85 jmc 1.7 A4tmp=max(A4tmp,viscA4GridMin*(rAs(i,j,bi,bj)**2)/deltaTmom)
86 jmc 1.6 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 adcroft 1.1 C - Laplacian and bi-harmonic terms
108 jmc 1.8 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 adcroft 1.1 vDragTerms(i,j) =
122     & -_recip_hFacS(i,j,k,bi,bj)
123     & *recip_drF(k)*recip_rAs(i,j,bi,bj)
124 baylor 1.5 & *( 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 adcroft 1.1 #ifdef COSINEMETH_III
127 baylor 1.5 & -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 adcroft 1.1 #else
136 baylor 1.5 & -viscA4_Z(i+1,j)*del2v(i,j)*cosFacV(J,bi,bj))
137     #endif
138 adcroft 1.1 & )
139 baylor 1.5 & *drF(k)*2.
140 adcroft 1.1 ENDDO
141     ENDDO
142    
143 jmc 1.6 #endif /* (not) SIDEDRAG_OLD_VERSION */
144    
145 adcroft 1.1 RETURN
146     END

  ViewVC Help
Powered by ViewVC 1.1.22