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

Contents of /MITgcm/pkg/mom_common/mom_v_bottomdrag.F

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


Revision 1.12 - (show annotations) (download)
Mon Jul 23 15:52:48 2012 UTC (11 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint64
Changes since 1.11: +49 -34 lines
split loops in 3 blocs to only compute quadratic bottom drag if using it.

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_v_bottomdrag.F,v 1.11 2012/07/19 11:22:24 mlosch Exp $
2 C $Name: $
3
4 #include "MOM_COMMON_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: MOM_V_BOTTOMDRAG
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE MOM_V_BOTTOMDRAG(
11 I bi,bj,k,
12 I vFld, KE, KappaRV,
13 O vDragTerms,
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^v_{drag} = - \frac{1}{\Delta r_f} ( r_b + C_D |v| + \frac{2}{\Delta r_c} ) v
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 #ifdef ALLOW_BOTTOMDRAG_CONTROL
29 # include "DYNVARS.h"
30 #endif
31
32 C !INPUT PARAMETERS: ===================================================
33 C bi,bj :: tile indices
34 C k :: vertical level
35 C vFld :: meridional flow
36 C KE :: Kinetic energy
37 C KappaRV :: vertical viscosity
38 C myThid :: thread number
39 INTEGER bi,bj,k
40 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41 _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42 _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
43 INTEGER myThid
44
45 C !OUTPUT PARAMETERS: ==================================================
46 C vDragTerms :: drag term
47 _RL vDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
48
49 C !LOCAL VARIABLES: ====================================================
50 C i,j :: loop indices
51 INTEGER i,j,kDown,kLowF,kBottom
52 _RL viscFac, dragFac
53 _RL recDrC
54 _RL recDrF_bot(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55 CEOP
56
57 C- No-slip BCs impose a drag at bottom
58 viscFac = 0.
59 IF (no_slip_bottom) viscFac = 2.
60 IF ( usingZCoords ) THEN
61 kBottom = Nr
62 kDown = MIN(k+1,Nr)
63 kLowF = kDown
64 c dragFac = mass2rUnit*rhoConst
65 c dragFac = wUnit2rVel(k+1)
66 dragFac = 1. _d 0
67 ELSE
68 kBottom = 1
69 kDown = MAX(k-1,1)
70 kLowF = k
71 dragFac = mass2rUnit*rhoConst
72 c dragFac = wUnit2rVel(k)
73 ENDIF
74 IF ( k.EQ.kBottom ) THEN
75 recDrC = recip_drF(k)
76 DO j=1-OLy,sNy+OLy
77 DO i=1-OLx,sNx+OLx
78 recDrF_bot(i,j) = _recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
79 ENDDO
80 ENDDO
81 ELSE
82 recDrC = recip_drC(kLowF)
83 DO j=1-OLy,sNy+OLy
84 DO i=1-OLx,sNx+OLx
85 recDrF_bot(i,j) = _recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
86 & * ( 1. _d 0 -_maskS(i,j,kDown,bi,bj) )
87 ENDDO
88 ENDDO
89 ENDIF
90
91 C- viscous (no-slip BC) and linear bottom drag
92 DO j=1-OLy+1,sNy+OLy-1
93 DO i=1-OLx,sNx+OLx-1
94 vDragTerms(i,j)=
95 & - recDrF_bot(i,j)
96 & *(
97 & KappaRV(i,j,kLowF)*recDrC*viscFac
98 #ifdef ALLOW_BOTTOMDRAG_CONTROL
99 & + bottomdragfld(i,j,bi,bj)*dragFac
100 #endif
101 & + bottomDragLinear*dragFac
102 & )*vFld(i,j)
103 ENDDO
104 ENDDO
105
106 C- Add quadratic bottom drag
107 IF ( bottomDragQuadratic.NE.0. _d 0 ) THEN
108 DO j=1-OLy+1,sNy+OLy-1
109 DO i=1-OLx,sNx+OLx-1
110 IF ( (KE(i,j)+KE(i,j-1)) .GT. 0. ) THEN
111 vDragTerms(i,j) = vDragTerms(i,j)
112 & - recDrF_bot(i,j)
113 & *bottomDragQuadratic*SQRT(KE(i,j)+KE(i,j-1))*dragFac
114 & *vFld(i,j)
115 ENDIF
116 ENDDO
117 ENDDO
118 ENDIF
119
120 #ifdef ALLOW_DIAGNOSTICS
121 IF (useDiagnostics) THEN
122 CALL DIAGNOSTICS_FILL(vDragTerms,'VBotDrag',k,1,2,bi,bj,myThid)
123 ENDIF
124 #endif /* ALLOW_DIAGNOSTICS */
125
126 RETURN
127 END

  ViewVC Help
Powered by ViewVC 1.1.22