/[MITgcm]/MITgcm/pkg/mom_vecinv/mom_vi_u_coriolis.F
ViewVC logotype

Annotation of /MITgcm/pkg/mom_vecinv/mom_vi_u_coriolis.F

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


Revision 1.12 - (hide annotations) (download)
Wed Apr 2 21:18:45 2008 UTC (16 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint59p
Changes since 1.11: +107 -72 lines
disable "upwindVorticity" case (now computed from mom_vi_u,v_coriolis_c4.F)
and allow to use the original scheme (with selectVortScheme=0)

1 jmc 1.12 C $Header: /u/gcmpack/MITgcm/pkg/mom_vecinv/mom_vi_u_coriolis.F,v 1.11 2008/03/30 21:46:48 jmc Exp $
2 jmc 1.4 C $Name: $
3 adcroft 1.2
4 adcroft 1.7 #include "MOM_VECINV_OPTIONS.h"
5 adcroft 1.2
6 jmc 1.12 CBOP
7     C !ROUTINE: MOM_VI_U_CORIOLIS
8     C !INTERFACE:
9 jmc 1.9 SUBROUTINE MOM_VI_U_CORIOLIS(
10 jmc 1.12 I bi, bj, k,
11     I vFld, omega3, hFacZ, r_hFacZ,
12     O uCoriolisTerm,
13     I myThid )
14     C !DESCRIPTION: \bv
15 jmc 1.4 C *==========================================================*
16     C | S/R MOM_VI_U_CORIOLIS
17 jmc 1.12 C |==========================================================*
18     C | o Calculate flux (in Y-dir.) of vorticity at U point
19     C | using 2nd order interpolation
20 jmc 1.4 C *==========================================================*
21 jmc 1.12 C \ev
22    
23     C !USES:
24     IMPLICIT NONE
25 adcroft 1.2
26     C == Global variables ==
27     #include "SIZE.h"
28     #include "EEPARAMS.h"
29     #include "GRID.h"
30     #include "PARAMS.h"
31    
32 jmc 1.12 C !INPUT/OUTPUT PARAMETERS:
33 adcroft 1.2 C == Routine arguments ==
34 jmc 1.12 INTEGER bi, bj, k
35     _RL vFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
36     _RL omega3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
37     _RS hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38     _RS r_hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39 adcroft 1.2 _RL uCoriolisTerm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
40     INTEGER myThid
41 jmc 1.12 CEOP
42 adcroft 1.2
43     C == Local variables ==
44 jmc 1.12 C msgBuf :: Informational/error meesage buffer
45     CHARACTER*(MAX_LEN_MBUF) msgBuf
46     LOGICAL upwindVort3
47     INTEGER i, j
48     _RL vBarXY, vBarXm, vBarXp
49     _RL vort3u
50     _RS epsil
51     PARAMETER( upwindVort3 = .FALSE. )
52 jmc 1.4
53 jmc 1.9 epsil = 1. _d -9
54 jmc 1.4
55 jmc 1.12 IF ( selectVortScheme.EQ.0 ) THEN
56     C-- using enstrophy conserving scheme (Shallow-Water Eq.) by Sadourny, JAS 75
57    
58     DO j=1-Oly,sNy+Oly-1
59     DO i=2-Olx,sNx+Olx
60 adcroft 1.2 vBarXY=0.25*(
61 heimbach 1.10 & (vFld( i , j )*dxG( i , j ,bi,bj)*_hFacS( i , j ,k,bi,bj)
62     & +vFld(i-1, j )*dxG(i-1, j ,bi,bj)*_hFacS(i-1, j ,k,bi,bj))
63     & +(vFld( i ,j+1)*dxG( i ,j+1,bi,bj)*_hFacS( i ,j+1,k,bi,bj)
64 jmc 1.12 & +vFld(i-1,j+1)*dxG(i-1,j+1,bi,bj)*_hFacS(i-1,j+1,k,bi,bj))
65     & )
66     IF (upwindVort3) THEN
67 adcroft 1.2 IF (vBarXY.GT.0.) THEN
68 jmc 1.12 vort3u=omega3(i,j)*r_hFacZ(i,j)
69 adcroft 1.2 ELSE
70 jmc 1.12 vort3u=omega3(i,j+1)*r_hFacZ(i,j+1)
71 adcroft 1.2 ENDIF
72     ELSE
73 jmc 1.4 vort3u=0.5*(omega3(i,j)*r_hFacZ(i,j)
74     & +omega3(i,j+1)*r_hFacZ(i,j+1))
75 adcroft 1.2 ENDIF
76 jmc 1.12 uCoriolisTerm(i,j)= +vort3u*vBarXY*recip_dxC(i,j,bi,bj)
77     & * _maskW(i,j,k,bi,bj)
78     ENDDO
79     ENDDO
80    
81     ELSEIF ( selectVortScheme.EQ.1 ) THEN
82     C-- same as above, with different formulation (relatively to hFac)
83    
84     DO J=1-Oly,sNy+Oly-1
85     DO i=2-Olx,sNx+Olx
86     vBarXY= 0.5*(
87     & (vFld( i , j )*dxG( i , j ,bi,bj)*hFacZ(i, j )
88     & +vFld(i-1, j )*dxG(i-1, j ,bi,bj)*hFacZ(i, j ))
89 jmc 1.9 & +(vFld( i ,j+1)*dxG( i ,j+1,bi,bj)*hFacZ(i,j+1)
90     & +vFld(i-1,j+1)*dxG(i-1,j+1,bi,bj)*hFacZ(i,j+1))
91 jmc 1.12 & )/MAX( epsil, hFacZ(i,j)+hFacZ(i,j+1) )
92     IF (upwindVort3) THEN
93 jmc 1.4 IF (vBarXY.GT.0.) THEN
94     vort3u=omega3(i,j)
95     ELSE
96     vort3u=omega3(i,j+1)
97     ENDIF
98     ELSE
99 jmc 1.9 vort3u=0.5*(omega3(i,j)+omega3(i,j+1))
100 jmc 1.4 ENDIF
101 jmc 1.12 uCoriolisTerm(i,j)= +vort3u*vBarXY*recip_dxC(i,j,bi,bj)
102     & * _maskW(i,j,k,bi,bj)
103     ENDDO
104     ENDDO
105    
106     ELSEIF ( selectVortScheme.EQ.2 ) THEN
107     C-- using energy conserving scheme (used by Sadourny in JAS 75 paper)
108    
109     DO j=1-Oly,sNy+Oly-1
110     DO i=2-Olx,sNx+Olx
111     vBarXm=0.5*(
112     & vFld( i , j )*dxG( i , j ,bi,bj)*_hFacS( i , j ,k,bi,bj)
113     & +vFld(i-1, j )*dxG(i-1, j ,bi,bj)*_hFacS(i-1, j ,k,bi,bj) )
114     vBarXp=0.5*(
115     & vFld( i ,j+1)*dxG( i ,j+1,bi,bj)*_hFacS( i ,j+1,k,bi,bj)
116     & +vFld(i-1,j+1)*dxG(i-1,j+1,bi,bj)*_hFacS(i-1,j+1,k,bi,bj) )
117     IF (upwindVort3) THEN
118     IF ( (vBarXm+vBarXp) .GT.0.) THEN
119     vort3u=vBarXm*r_hFacZ(i, j )*omega3(i, j )
120     ELSE
121     vort3u=vBarXp*r_hFacZ(i,j+1)*omega3(i,j+1)
122     ENDIF
123     ELSE
124     vort3u = ( vBarXm*r_hFacZ(i, j )*omega3(i, j )
125     & +vBarXp*r_hFacZ(i,j+1)*omega3(i,j+1)
126     & )*0.5 _d 0
127     ENDIF
128     uCoriolisTerm(i,j)= +vort3u*recip_dxC(i,j,bi,bj)
129     & * _maskW(i,j,k,bi,bj)
130     ENDDO
131     ENDDO
132 adcroft 1.5
133 jmc 1.12 ELSE
134     WRITE(msgBuf,'(A,I5,A)')
135     & 'MOM_VI_U_CORIOLIS: selectVortScheme=', selectVortScheme,
136     & ' not implemented'
137     CALL PRINT_ERROR( msgBuf, myThid )
138     STOP 'ABNORMAL END: S/R MOM_VI_U_CORIOLIS'
139    
140     ENDIF
141    
142     IF ( useJamartMomAdv ) THEN
143     DO j=1-Oly,sNy+Oly-1
144     DO i=2-Olx,sNx+Olx
145     uCoriolisTerm(i,j) = uCoriolisTerm(i,j)
146     & * 4. _d 0 * _hFacW(i,j,k,bi,bj)
147     & / MAX( epsil,
148     & (_hFacS(i, j ,k,bi,bj)+_hFacS(i-1, j ,k,bi,bj))
149     & +(_hFacS(i,j+1,k,bi,bj)+_hFacS(i-1,j+1,k,bi,bj))
150     & )
151     ENDDO
152 adcroft 1.2 ENDDO
153 jmc 1.12 ENDIF
154 adcroft 1.2
155     RETURN
156     END

  ViewVC Help
Powered by ViewVC 1.1.22