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

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

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


Revision 1.4 - (hide annotations) (download)
Wed Jun 22 00:31:47 2005 UTC (19 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57o_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57r_post, checkpoint57n_post, checkpoint57p_post, checkpoint57q_post, checkpoint57j_post, checkpoint57l_post
Changes since 1.3: +4 -4 lines
remove "rkFac" that should not be there.

1 jmc 1.4 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_u_bottomdrag.F,v 1.3 2004/10/19 02:42:36 jmc Exp $
2 heimbach 1.1 C $Name: $
3    
4 jmc 1.2 #include "MOM_COMMON_OPTIONS.h"
5 heimbach 1.1
6     CBOP
7     C !ROUTINE: MOM_U_BOTTOMDRAG
8    
9     C !INTERFACE: ==========================================================
10     SUBROUTINE MOM_U_BOTTOMDRAG(
11     I bi,bj,k,
12     I uFld, KE, KappaRU,
13     O uDragTerms,
14     I myThid)
15    
16     C !DESCRIPTION:
17     C Calculates the drag due to friction and the no-slip condition at bottom:
18     C \begin{equation*}
19     C G^u_{drag} = - ( r_b + C_D |v| + \frac{2}{\Delta r_c} ) u
20     C \end{equation*}
21    
22     C !USES: ===============================================================
23     IMPLICIT NONE
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27     #include "GRID.h"
28    
29     C !INPUT PARAMETERS: ===================================================
30     C bi,bj :: tile indices
31     C k :: vertical level
32     C uFld :: zonal flow
33     C KE :: Kinetic energy
34     C KappaRU :: vertical viscosity
35     C myThid :: thread number
36     INTEGER bi,bj,k
37     _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38     _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39     _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
40     INTEGER myThid
41    
42     C !OUTPUT PARAMETERS: ==================================================
43     C uDragTerms :: drag term
44     _RL uDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
45    
46     C !LOCAL VARIABLES: ====================================================
47     C i,j :: loop indices
48     C Kp1 :: =k+1 for k<Nr, =Nr for k>=Nr
49     INTEGER I,J,kDown,kDownC,kBottom
50     _RL viscFac
51     _RL rdrckp1,maskDown
52     CEOP
53    
54     C- No-slip BCs impose a drag at bottom
55 jmc 1.3 IF ( usingZCoords ) THEN
56 heimbach 1.1 kBottom = Nr
57     kDown = min(k+1,kBottom)
58     kDownC = kDown
59 jmc 1.3 ELSE
60 heimbach 1.1 kBottom = 1
61     kDown = max(k-1,kBottom)
62     kDownC = k
63     ENDIF
64     rdrckp1=recip_drC(kDownC)
65     IF (k.EQ.kBottom) rdrckp1=recip_drF(k)
66 jmc 1.4 viscFac=0.
67     IF (no_slip_bottom) viscFac=1.
68 heimbach 1.1 DO j=1-Oly,sNy+Oly-1
69     DO i=1-Olx+1,sNx+Olx-1
70     maskDown=_maskW(i,j,kDown,bi,bj)
71     IF (k.EQ.kBottom) maskDown=0.
72     uDragTerms(i,j)=
73     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
74     & *(
75 jmc 1.4 & 2.*KappaRU(i,j,kDownC)*rdrckp1*viscFac
76 heimbach 1.1 #if (defined (ALLOW_AUTODIFF_TAMC) && \
77     defined (ALLOW_BOTTOMDRAG_CONTROL))
78     & + bottomdragfld(i,j,bi,bj)
79     #else
80     & + bottomDragLinear
81     #endif
82     & )*(1.-maskDown)*uFld(i,j)
83     IF ( (KE(i,j)+KE(i-1,j)) .NE. 0. ) THEN
84     uDragTerms(i,j)=uDragTerms(i,j)
85     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
86     & *bottomDragQuadratic*sqrt(KE(i,j)+KE(i-1,j))
87     & *(1.-maskDown)*uFld(i,j)
88     ENDIF
89     ENDDO
90     ENDDO
91    
92     RETURN
93     END

  ViewVC Help
Powered by ViewVC 1.1.22