/[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.1 - (hide annotations) (download)
Thu Jul 1 16:19:07 2004 UTC (20 years ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint54, checkpoint53g_post
moving mom_?_bottomdrag.F to mom_common/

1 heimbach 1.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