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

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

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


Revision 1.6 - (show annotations) (download)
Mon Dec 16 21:40:07 2002 UTC (21 years, 4 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint47j_post, checkpoint48d_pre, branch-exfmods-tag, checkpoint47e_post, checkpoint47f_post, checkpoint47d_post, checkpoint47h_post, checkpoint48e_post, checkpoint48h_post, checkpoint48d_post, checkpoint48f_post, checkpoint47i_post, checkpoint48c_post, checkpoint48, checkpoint49, checkpoint48i_post, checkpoint47g_post, checkpoint48a_post, checkpoint48b_post, checkpoint48c_pre, checkpoint48g_post
Branch point for: branch-exfmods-curt
Changes since 1.5: +19 -8 lines
o fixed bug in the oceanic pressure coordinates code: vertical viscosity
  at the bottom boundary had an erroneous half slip boundary condition
o added bottom drag and no slip boundary condition capabilities to
  oceanic pressure coordinates code

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_v_bottomdrag.F,v 1.5 2002/11/29 13:38:38 heimbach Exp $
2 C $Name: $
3
4 #include "CPP_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} = - ( 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
29 C !INPUT PARAMETERS: ===================================================
30 C bi,bj :: tile indices
31 C k :: vertical level
32 C vFld :: meridional flow
33 C KE :: Kinetic energy
34 C KappaRV :: vertical viscosity
35 C myThid :: thread number
36 INTEGER bi,bj,k
37 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38 _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39 _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
40 _RL viscFac
41 INTEGER myThid
42
43 C !OUTPUT PARAMETERS: ==================================================
44 C vDragTerms :: drag term
45 _RL vDragTerms(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
46
47 C !LOCAL VARIABLES: ====================================================
48 C i,j :: loop indices
49 C Kp1 :: =k+1 for k<Nr, =Nr for k>=Nr
50 INTEGER I,J,kDown,kDownC,kBottom
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 STOP 'S/R MOM_U_BOTTOMDRAG: We should never reach this point!'
66 ENDIF
67 rdrckp1=recip_drC(kDownC)
68 viscFac=1.
69 IF (.NOT. no_slip_bottom) viscFac=0.
70 IF (k.EQ.kBottom) rdrckp1=recip_drF(k)
71 DO j=1-Oly+1,sNy+Oly-1
72 DO i=1-Olx,sNx+Olx-1
73 maskDown=_maskS(i,j,kdown,bi,bj)
74 IF (k.EQ.kBottom) maskDown=0.
75 vDragTerms(i,j)=
76 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
77 & *(
78 & 2.*KappaRV(i,j,kDownC)*rkFac*rdrckp1*viscFac
79 #if (defined (ALLOW_AUTODIFF_TAMC) && \
80 defined (ALLOW_BOTTOMDRAG_CONTROL))
81 & + bottomdragfld(i,j,bi,bj)
82 #else
83 & + bottomDragLinear
84 #endif
85 & )*(1.-maskDown)*vFld(i,j)
86 IF ( (KE(i,j)+KE(i,j-1)) .NE. 0. ) THEN
87 vDragTerms(i,j)=vDragTerms(i,j)
88 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
89 & *bottomDragQuadratic*sqrt(KE(i,j)+KE(i,j-1))
90 & *(1.-maskDown)*vFld(i,j)
91 ENDIF
92 ENDDO
93 ENDDO
94
95 RETURN
96 END

  ViewVC Help
Powered by ViewVC 1.1.22