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

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

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


Revision 1.2 - (show annotations) (download)
Tue May 29 14:01:38 2001 UTC (23 years ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint40pre1, checkpoint40pre9, checkpoint40pre7, checkpoint40pre2, checkpoint40pre5, checkpoint40pre6, checkpoint40pre8, checkpoint40pre4, checkpoint40pre3, checkpoint40
Changes since 1.1: +186 -0 lines
Merge from branch pre38:
 o essential mods for cubed sphere
 o debugged atmosphere, dynamcis + physics (aim)
 o new packages (mom_vecinv, mom_fluxform, ...)

1 C $Header: /u/gcmpack/models/MITgcmUV/pkg/mom_fluxform/Attic/mom_cdscheme.F,v 1.1.2.1 2001/03/28 19:51:14 adcroft Exp $
2 C $Name: pre38-close $
3
4 #include "CPP_OPTIONS.h"
5
6 SUBROUTINE MOM_CDSCHEME(
7 I bi,bj,k,phi_hyd,
8 I myThid)
9
10 IMPLICIT NONE
11
12 C == Global variables ==
13 #include "SIZE.h"
14 #include "DYNVARS.h"
15 #include "EEPARAMS.h"
16 #include "PARAMS.h"
17 #include "GRID.h"
18 #include "SURFACE.h"
19
20 C == Routine arguments ==
21 C myThid - Instance number for this innvocation of CALC_MOM_RHS
22 INTEGER bi,bj,K
23 _RL phi_hyd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
24 INTEGER myThid
25
26 #ifdef INCLUDE_CD_CODE
27
28 C == Local variables ==
29 _RL pF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
30 _RL vF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
31 _RL aF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
32 INTEGER i,j,iMin,iMax,jMin,jMax
33 _RL ab15,ab05
34
35 C Compute ranges
36 iMin=1-Olx+1
37 iMax=sNx+Olx-1
38 jMin=1-Oly+1
39 jMax=sNy+Oly-1
40
41 C Adams-Bashforth weighting factors
42 ab15 = 1.5 + abEps
43 ab05 = -0.5 - abEps
44
45 C Pressure extrapolated forward in time
46 DO j=1-Oly,sNy+Oly
47 DO i=1-Olx,sNx+Olx
48 pf(i,j) =
49 & ab15*( etaN(i,j,bi,bj)*Bo_surf(i,j,bi,bj) )
50 & +ab05*(etaNm1(i,j,bi,bj)*Bo_surf(i,j,bi,bj) )
51 ENDDO
52 ENDDO
53 IF (staggerTimeStep) THEN
54 DO j=jMin,jMax
55 DO i=iMin,iMax
56 pf(i,j) = pf(i,j)+phi_hyd(i,j,k)
57 ENDDO
58 ENDDO
59 ENDIF
60
61 C-- Zonal velocity coriolis term
62 C Note. As coded here, coriolis will not work with "thin walls"
63 C-- Coriolis with CD scheme allowed
64 C grady(p) + gV
65 DO j=1-Oly+1,sNy+Oly
66 DO i=1-Olx,sNx+Olx
67 af(i,j) = -_maskS(i,j,k,bi,bj)
68 & *_recip_dyC(i,j,bi,bj)
69 & *(pf(i,j)-pf(i,j-1))
70 & +gV(i,j,k,bi,bj)
71 ENDDO
72 ENDDO
73 C Average to Vd point and add coriolis
74 DO j=jMin,jMax
75 DO i=iMin,iMax
76 vf(i,j) =
77 & 0.25*( af(i ,j)+af(i ,j+1)
78 & +af(i-1,j)+af(i-1,j+1)
79 & )*_maskW(i,j,k,bi,bj)
80 & -0.5*(_fCori(i,j,bi,bj)+
81 & _fCori(i-1,j,bi,bj))
82 & *uVel(i,j,k,bi,bj)
83 ENDDO
84 ENDDO
85 C Step forward Vd
86 DO j=jMin,jMax
87 DO i=iMin,iMax
88 vVelD(i,j,k,bi,bj) = vVelD(i,j,k,bi,bj) +
89 & deltaTmom*vf(i,j)
90 ENDDO
91 ENDDO
92 C Relax D grid V to C grid V
93 DO j=jMin,jMax
94 DO i=iMin,iMax
95 vVelD(i,j,k,bi,bj) = rCD*vVelD(i,j,k,bi,bj)
96 & +(1. - rCD)*(
97 & ab15*0.25*(
98 & vVel(i ,j ,k,bi,bj)+vVel(i ,j+1,k,bi,bj)
99 & +vVel(i-1,j ,k,bi,bj)+vVel(i-1,j+1,k,bi,bj)
100 & )*_maskW(i,j,k,bi,bj)
101 & +
102 & ab05*0.25*(
103 & vNM1(i ,j ,k,bi,bj)+vNM1(i ,j+1,k,bi,bj)
104 & +vNM1(i-1,j ,k,bi,bj)+vNM1(i-1,j+1,k,bi,bj)
105 & )*_maskW(i,j,k,bi,bj)
106 & )
107 ENDDO
108 ENDDO
109 C Calculate coriolis force on U
110 DO j=jMin,jMax
111 DO i=iMin,iMax
112 guCD(i,j,k,bi,bj) =
113 & 0.5*( _fCori(i ,j,bi,bj) +
114 & _fCori(i-1,j,bi,bj) )
115 & *vVelD(i,j,k,bi,bj)*cfFacMom
116 ENDDO
117 ENDDO
118
119 C-- Meridional velocity coriolis term
120 C gradx(p)+gU
121 DO j=1-Oly,sNy+Oly
122 DO i=1-Olx+1,sNx+Olx
123 af(i,j) = -_maskW(i,j,k,bi,bj)
124 & *_recip_dxC(i,j,bi,bj)*
125 & (pf(i,j)-pf(i-1,j))
126 & +gU(i,j,k,bi,bj)
127 ENDDO
128 ENDDO
129 C Average to Ud point and add coriolis
130 DO j=jMin,jMax
131 DO i=iMin,iMax
132 vf(i,j) =
133 & 0.25*( af(i ,j)+af(i ,j-1)
134 & +af(i+1,j)+af(i+1,j-1)
135 & )*_maskS(i,j,k,bi,bj)
136 & +0.5*( _fCori(i,j,bi,bj)
137 & +_fCori(i,j-1,bi,bj))
138 & *vVel(i,j,k,bi,bj)
139 ENDDO
140 ENDDO
141 C Step forward Ud
142 DO j=jMin,jMax
143 DO i=iMin,iMax
144 uVelD(i,j,k,bi,bj) = uVelD(i,j,k,bi,bj) +
145 & deltaTmom*vf(i,j)*_maskS(i,j,k,bi,bj)
146 ENDDO
147 ENDDO
148 C Relax D grid U to C grid U
149 DO j=jMin,jMax
150 DO i=iMin,iMax
151 uVelD(i,j,k,bi,bj) = rCD*uVelD(i,j,k,bi,bj)
152 & +(1. - rCD)*(
153 & ab15*0.25*(
154 & uVel(i,j ,k,bi,bj)+uVel(i+1,j ,k,bi,bj)
155 & +uVel(i,j-1,k,bi,bj)+uVel(i+1,j-1,k,bi,bj)
156 & )*_maskS(i,j,k,bi,bj)
157 & +
158 & ab05*0.25*(
159 & uNM1(i,j ,k,bi,bj)+uNM1(i+1,j ,k,bi,bj)
160 & +uNM1(i,j-1,k,bi,bj)+uNM1(i+1,j-1,k,bi,bj)
161 & )*_maskS(i,j,k,bi,bj)
162 & )
163 ENDDO
164 ENDDO
165 C Calculate coriolis force on V
166 DO j=jMin,jMax
167 DO i=iMin,iMax
168 gvCD(i,j,k,bi,bj) =
169 & -0.5*( _fCori(i ,j,bi,bj)
170 & +_fCori(i,j-1,bi,bj) )
171 & *uVelD(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)*cfFacMom
172 ENDDO
173 ENDDO
174
175 C-- Save "previous time level" variables
176 DO j=1-OLy,sNy+OLy
177 DO i=1-OLx,sNx+OLx
178 uNM1(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)
179 vNM1(i,j,k,bi,bj) = vVel(i,j,k,bi,bj)
180 ENDDO
181 ENDDO
182
183 #endif /* INCLUDE_CD_CODE */
184
185 RETURN
186 END

  ViewVC Help
Powered by ViewVC 1.1.22