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

Contents of /MITgcm/pkg/mom_vecinv/mom_vi_v_coriolis_c4.F

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


Revision 1.12 - (show annotations) (download)
Sun Jun 28 01:08:26 2009 UTC (14 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62c, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62, checkpoint62b, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61s, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.11: +2 -2 lines
add bj in exch2 arrays and S/R

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_vecinv/mom_vi_v_coriolis_c4.F,v 1.11 2009/05/12 19:56:36 jmc Exp $
2 C $Name: $
3
4 #include "MOM_VECINV_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: MOM_VI_V_CORIOLIS_C4
8 C !INTERFACE:
9 SUBROUTINE MOM_VI_V_CORIOLIS_C4(
10 I bi,bj,k,
11 I uFld,omega3,r_hFacZ,
12 O vCoriolisTerm,
13 I myThid)
14 C !DESCRIPTION: \bv
15 C *==========================================================*
16 C | S/R MOM_VI_V_CORIOLIS_C4
17 C |==========================================================*
18 C | o Calculate flux (in X-dir.) of vorticity at V point
19 C | using 4th order (or 1rst order) interpolation
20 C *==========================================================*
21 C \ev
22
23 C !USES:
24 IMPLICIT NONE
25
26 C == Global variables ==
27 #include "SIZE.h"
28 #include "EEPARAMS.h"
29 #include "PARAMS.h"
30 #include "GRID.h"
31 #ifdef ALLOW_EXCH2
32 #include "W2_EXCH2_SIZE.h"
33 #include "W2_EXCH2_TOPOLOGY.h"
34 #endif /* ALLOW_EXCH2 */
35
36 C !INPUT/OUTPUT PARAMETERS:
37 C == Routine arguments ==
38 INTEGER bi,bj,k
39 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
40 _RL omega3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42 _RL vCoriolisTerm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43 INTEGER myThid
44 CEOP
45
46 C == Local variables ==
47 C msgBuf :: Informational/error meesage buffer
48 CHARACTER*(MAX_LEN_MBUF) msgBuf
49 INTEGER i,j
50 _RL vort3r(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51 _RL uBarXY,vort3v,Rjp,Rjm
52 _RL uBarYm,uBarYp
53
54 LOGICAL northWestCorner, northEastCorner,
55 & southWestCorner, southEastCorner
56 INTEGER myFace
57 #ifdef ALLOW_EXCH2
58 INTEGER myTile
59 #endif /* ALLOW_EXCH2 */
60 _RL oneSixth, oneTwelve
61 LOGICAL fourthVort3
62 PARAMETER(oneSixth=1.D0/6.D0 , oneTwelve=1.D0/12.D0)
63 PARAMETER(fourthVort3=.TRUE. )
64
65 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
66
67 DO j=1-Oly,sNy+Oly
68 DO i=1-Olx,sNx+Olx
69 vort3r(i,j) = r_hFacZ(i,j)*omega3(i,j)
70 ENDDO
71 ENDDO
72
73 C-- Special stuff for Cubed Sphere
74 IF ( useCubedSphereExchange.AND.highOrderVorticity ) THEN
75
76 #ifdef ALLOW_EXCH2
77 myTile = W2_myTileList(bi,bj)
78 myFace = exch2_myFace(myTile)
79 southWestCorner = exch2_isWedge(myTile).EQ.1
80 & .AND. exch2_isSedge(myTile).EQ.1
81 southEastCorner = exch2_isEedge(myTile).EQ.1
82 & .AND. exch2_isSedge(myTile).EQ.1
83 northEastCorner = exch2_isEedge(myTile).EQ.1
84 & .AND. exch2_isNedge(myTile).EQ.1
85 northWestCorner = exch2_isWedge(myTile).EQ.1
86 & .AND. exch2_isNedge(myTile).EQ.1
87 #else
88 myFace = bi
89 southWestCorner = .TRUE.
90 southEastCorner = .TRUE.
91 northWestCorner = .TRUE.
92 northEastCorner = .TRUE.
93 #endif /* ALLOW_EXCH2 */
94 IF ( southWestCorner ) THEN
95 i = 1
96 j = 1
97 vort3r(i-1,j) = ( vort3r(i-1,j) + vort3r(i,j+1) )*0.5 _d 0
98 ENDIF
99 IF ( southEastCorner ) THEN
100 i = sNx+1
101 j = 1
102 vort3r(i+1,j) = ( vort3r(i+1,j) + vort3r(i,j+1) )*0.5 _d 0
103 ENDIF
104 IF ( northWestCorner ) THEN
105 i = 1
106 j = sNy+1
107 vort3r(i-1,j) = ( vort3r(i-1,j) + vort3r(i,j-1) )*0.5 _d 0
108 ENDIF
109 IF ( northEastCorner ) THEN
110 i = sNx+1
111 j = sNy+1
112 vort3r(i+1,j) = ( vort3r(i+1,j) + vort3r(i,j-1) )*0.5 _d 0
113 ENDIF
114
115 C-- End of special stuff for Cubed Sphere.
116 ENDIF
117
118 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
119
120 IF ( selectVortScheme.EQ.0 ) THEN
121 C-- using Sadourny Enstrophy conserving discretization:
122
123 c DO j=2-Oly,sNy+Oly
124 c DO i=2-Olx,sNx+Olx-2
125 DO j=1,sNy+1
126 DO i=1,sNx
127
128 uBarXY=0.25*(
129 & (uFld( i , j )*dyG( i , j ,bi,bj)*_hFacW( i , j ,k,bi,bj)
130 & +uFld( i ,j-1)*dyG( i ,j-1,bi,bj)*_hFacW( i ,j-1,k,bi,bj))
131 & +(uFld(i+1, j )*dyG(i+1, j ,bi,bj)*_hFacW(i+1, j ,k,bi,bj)
132 & +uFld(i+1,j-1)*dyG(i+1,j-1,bi,bj)*_hFacW(i+1,j-1,k,bi,bj))
133 & )
134 IF (upwindVorticity) THEN
135 IF (uBarXY.GT.0.) THEN
136 vort3v=vort3r(i,j)
137 ELSE
138 vort3v=vort3r(i+1,j)
139 ENDIF
140 ELSEIF (fourthVort3) THEN
141 Rjp = vort3r(i+2,j) - vort3r(i+1,j)
142 Rjm = vort3r( i ,j) - vort3r(i-1,j)
143 vort3v=0.5*( vort3r(i,j) + vort3r(i+1,j)
144 & -oneTwelve*(Rjp-Rjm)
145 & )
146 ELSE
147 vort3v=0.5*( vort3r(i,j) + vort3r(i+1,j) )
148 ENDIF
149
150 vCoriolisTerm(i,j) = -vort3v*uBarXY*recip_dyC(i,j,bi,bj)
151 & * _maskS(i,j,k,bi,bj)
152
153 ENDDO
154 ENDDO
155
156 ELSEIF ( selectVortScheme.EQ.2 ) THEN
157 C-- using Energy conserving discretization:
158
159 c DO j=2-Oly,sNy+Oly
160 c DO i=2-Olx,sNx+Olx-2
161 DO j=1,sNy+1
162 DO i=1,sNx
163
164 uBarYm=0.5*(
165 & uFld( i , j )*dyG( i , j ,bi,bj)*_hFacW( i , j ,k,bi,bj)
166 & +uFld( i ,j-1)*dyG( i ,j-1,bi,bj)*_hFacW( i ,j-1,k,bi,bj) )
167 uBarYp=0.5*(
168 & uFld(i+1, j )*dyG(i+1, j ,bi,bj)*_hFacW(i+1, j ,k,bi,bj)
169 & +uFld(i+1,j-1)*dyG(i+1,j-1,bi,bj)*_hFacW(i+1,j-1,k,bi,bj) )
170 IF (upwindVorticity) THEN
171 IF ( (uBarYm+uBarYp) .GT.0.) THEN
172 vort3v=uBarYm*vort3r( i ,j)
173 ELSE
174 vort3v=uBarYp*vort3r(i+1,j)
175 ENDIF
176 ELSEIF (fourthVort3) THEN
177 Rjp = vort3r(i+1,j) -oneSixth*( vort3r(i+2,j)-vort3r( i ,j) )
178 Rjm = vort3r( i ,j) +oneSixth*( vort3r(i+1,j)-vort3r(i-1,j) )
179 vort3v=0.5*( uBarYm*Rjm + uBarYp*Rjp )
180 ELSE
181 vort3v=0.5*( uBarYm*vort3r( i ,j) + uBarYp*vort3r(i+1,j) )
182 ENDIF
183
184 vCoriolisTerm(i,j) = -vort3v*recip_dyC(i,j,bi,bj)
185 & * _maskS(i,j,k,bi,bj)
186
187 ENDDO
188 ENDDO
189
190 ELSE
191 WRITE(msgBuf,'(A,I5,A)')
192 & 'MOM_VI_V_CORIOLIS_C4: selectVortScheme=', selectVortScheme,
193 & ' not implemented'
194 CALL PRINT_ERROR( msgBuf, myThid )
195 STOP 'ABNORMAL END: S/R MOM_VI_V_CORIOLIS_C4'
196
197 ENDIF
198
199 RETURN
200 END

  ViewVC Help
Powered by ViewVC 1.1.22