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

Contents of /MITgcm/pkg/mom_fluxform/mom_u_bottomdrag.F

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


Revision 1.9 - (show annotations) (download)
Thu Jul 1 16:19:08 2004 UTC (19 years, 10 months ago) by heimbach
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +1 -1 lines
FILE REMOVED
moving mom_?_bottomdrag.F to mom_common/

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_u_bottomdrag.F,v 1.8 2003/10/24 05:52:05 edhill Exp $
2 C $Name: $
3
4 #include "MOM_FLUXFORM_OPTIONS.h"
5
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 IF ( buoyancyRelation .EQ. 'OCEANIC' ) THEN
56 kBottom = Nr
57 kDown = min(k+1,kBottom)
58 kDownC = kDown
59 ELSEIF ( buoyancyRelation .EQ. 'OCEANICP' .OR.
60 & buoyancyRelation .EQ. 'ATMOSPHERIC' ) THEN
61 kBottom = 1
62 kDown = max(k-1,kBottom)
63 kDownC = k
64 ELSE
65 cph k-assignments here are redundant but good for TAF
66 kBottom = Nr
67 kDown = min(k+1,kBottom)
68 kDownC = kDown
69 STOP 'S/R MOM_U_BOTTOMDRAG: We should never reach this point!'
70 ENDIF
71 rdrckp1=recip_drC(kDownC)
72 IF (k.EQ.kBottom) rdrckp1=recip_drF(k)
73 viscFac=1.
74 IF (.NOT. no_slip_bottom) viscFac=0.
75 DO j=1-Oly,sNy+Oly-1
76 DO i=1-Olx+1,sNx+Olx-1
77 maskDown=_maskW(i,j,kDown,bi,bj)
78 IF (k.EQ.kBottom) maskDown=0.
79 uDragTerms(i,j)=
80 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
81 & *(
82 & 2.*KappaRU(i,j,kDownC)*rkFac*rdrckp1*viscFac
83 #if (defined (ALLOW_AUTODIFF_TAMC) && \
84 defined (ALLOW_BOTTOMDRAG_CONTROL))
85 & + bottomdragfld(i,j,bi,bj)
86 #else
87 & + bottomDragLinear
88 #endif
89 & )*(1.-maskDown)*uFld(i,j)
90 IF ( (KE(i,j)+KE(i-1,j)) .NE. 0. ) THEN
91 uDragTerms(i,j)=uDragTerms(i,j)
92 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
93 & *bottomDragQuadratic*sqrt(KE(i,j)+KE(i-1,j))
94 & *(1.-maskDown)*uFld(i,j)
95 ENDIF
96 ENDDO
97 ENDDO
98
99 RETURN
100 END

  ViewVC Help
Powered by ViewVC 1.1.22