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

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

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


Revision 1.6 - (show annotations) (download)
Sat Oct 1 19:17:17 2005 UTC (18 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58b_post, checkpoint57y_post, checkpoint58, checkpoint58f_post, checkpoint58d_post, checkpoint58a_post, checkpoint57z_post, checkpoint57t_post, checkpoint57v_post, checkpoint57y_pre, checkpoint58e_post, checkpint57u_post, checkpoint58g_post, checkpoint57w_post, checkpoint57x_post, checkpoint58c_post
Changes since 1.5: +5 -4 lines
add brackets in multi-terms sum to get same truncation, independent of
 the face number (manage to get exactly same value of gU,gV at the cs-edge)

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_vecinv/mom_vi_u_coriolis_c4.F,v 1.5 2005/06/20 23:23:00 jmc Exp $
2 C $Name: $
3
4 #include "MOM_VECINV_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: MOM_VI_U_CORIOLIS_C4
8 C !INTERFACE:
9 SUBROUTINE MOM_VI_U_CORIOLIS_C4(
10 I bi,bj,k,
11 I vFld,omega3,r_hFacZ,
12 O uCoriolisTerm,
13 I myThid)
14 C !DESCRIPTION: \bv
15 C *==========================================================*
16 C | S/R MOM_VI_U_CORIOLIS_C4
17 C |==========================================================*
18 C | o Calculate meridional flux of vorticity at U point
19 C | using 4th 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 "GRID.h"
30 #include "PARAMS.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C == Routine arguments ==
34 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 r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38 _RL uCoriolisTerm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
39 INTEGER myThid
40 CEOP
41
42 C == Local variables ==
43 INTEGER i,j
44 _RL vBarXY,vort3u,Rjp,Rjm
45 _RL vBarXm,vBarXp,oneSixth
46 LOGICAL upwindVort3
47 LOGICAL fourthVort3
48
49 PARAMETER(oneSixth=1.D0/6.D0)
50 PARAMETER(upwindVort3=.FALSE.)
51 PARAMETER(fourthVort3=.TRUE. )
52
53 c DO j=2-Oly,sNy+Oly-2
54 c DO i=2-Olx,sNx+Olx
55 DO j=1,sNy
56 DO i=1,sNx+1
57
58 IF ( SadournyCoriolis ) THEN
59 C- using SadournyCoriolis discretization:
60
61 vBarXY=1.
62 vBarXm=0.5*(
63 & vFld( i , j )*dxG( i , j ,bi,bj)*hFacS( i , j ,k,bi,bj)
64 & +vFld(i-1, j )*dxG(i-1, j ,bi,bj)*hFacS(i-1, j ,k,bi,bj) )
65 vBarXp=0.5*(
66 & vFld( i ,j+1)*dxG( i ,j+1,bi,bj)*hFacS( i ,j+1,k,bi,bj)
67 & +vFld(i-1,j+1)*dxG(i-1,j+1,bi,bj)*hFacS(i-1,j+1,k,bi,bj) )
68 IF (upwindVorticity) THEN
69 IF ( (vBarXm+vBarXp) .GT.0.) THEN
70 vort3u=vBarXm*r_hFacZ(i, j )*omega3(i, j )
71 ELSE
72 vort3u=vBarXp*r_hFacZ(i,j+1)*omega3(i,j+1)
73 ENDIF
74 ELSEIF (fourthVort3) THEN
75 Rjp = omega3(i,j+1)*r_hFacZ(i,j+1)
76 & -oneSixth*( omega3(i,j+2)*r_hFacZ(i,j+2)
77 & -omega3(i, j )*r_hFacZ(i, j ) )
78 Rjm = omega3(i,j)*r_hFacZ(i,j)
79 & +oneSixth*( omega3(i,j+1)*r_hFacZ(i,j+1)
80 & -omega3(i,j-1)*r_hFacZ(i,j-1) )
81 vort3u=0.5*( vBarXm*Rjm + vBarXp*Rjp )
82 ELSE
83 vort3u=0.5*( vBarXm*r_hFacZ(i, j )*omega3(i, j )
84 & + vBarXp*r_hFacZ(i,j+1)*omega3(i,j+1) )
85 ENDIF
86
87 ELSE
88 C- not using SadournyCoriolis discretization:
89
90 vBarXY=0.25*(
91 & (vFld( i , j )*dxG( i , j ,bi,bj)*hFacS( i , j ,k,bi,bj)
92 & +vFld(i-1, j )*dxG(i-1, j ,bi,bj)*hFacS(i-1, j ,k,bi,bj))
93 & +(vFld( i ,j+1)*dxG( i ,j+1,bi,bj)*hFacS( i ,j+1,k,bi,bj)
94 & +vFld(i-1,j+1)*dxG(i-1,j+1,bi,bj)*hFacS(i-1,j+1,k,bi,bj))
95 & )
96 IF (upwindVort3) THEN
97 IF (vBarXY.GT.0.) THEN
98 vort3u=omega3(i,j)*r_hFacZ(i,j)
99 ELSE
100 vort3u=omega3(i,j+1)*r_hFacZ(i,j+1)
101 ENDIF
102 ELSEIF (fourthVort3) THEN
103 Rjp=omega3(i,j+2)*r_hFacZ(i,j+2)
104 & -omega3(i,j+1)*r_hFacZ(i,j+1)
105 Rjm=omega3(i,j)*r_hFacZ(i,j)
106 & -omega3(i,j-1)*r_hFacZ(i,j-1)
107 vort3u=0.5*(omega3(i,j)*r_hFacZ(i,j)
108 & +omega3(i,j+1)*r_hFacZ(i,j+1)
109 & -1./12.*(Rjp-Rjm)
110 & )
111 ELSE
112 vort3u=0.5*(omega3(i,j)*r_hFacZ(i,j)
113 & +omega3(i,j+1)*r_hFacZ(i,j+1))
114 ENDIF
115
116 C- end if / else SadournyCoriolis
117 ENDIF
118
119 uCoriolisTerm(i,j)=
120 & vort3u*vBarXY*recip_dxC(i,j,bi,bj)
121 & * _maskW(i,j,k,bi,bj)
122
123 ENDDO
124 ENDDO
125
126 RETURN
127 END

  ViewVC Help
Powered by ViewVC 1.1.22