/[MITgcm]/MITgcm/pkg/obcs/orlanski_east.F
ViewVC logotype

Annotation of /MITgcm/pkg/obcs/orlanski_east.F

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


Revision 1.11 - (hide annotations) (download)
Tue Mar 16 00:21:26 2010 UTC (14 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62x
Changes since 1.10: +2 -2 lines
avoid unbalanced quote (single or double) in commented line

1 jmc 1.11 C $Header: /u/gcmpack/MITgcm/pkg/obcs/orlanski_east.F,v 1.10 2009/10/01 21:04:50 jmc Exp $
2 adcroft 1.6 C $Name: $
3 adcroft 1.5 cc
4 adcroft 1.2
5     #include "OBCS_OPTIONS.h"
6    
7 jmc 1.9 SUBROUTINE ORLANSKI_EAST( bi, bj, futureTime,
8     I uVel, vVel, wVel, theta, salt,
9 adcroft 1.2 I myThid )
10     C /==========================================================\
11     C | SUBROUTINE ORLANSKI_EAST |
12     C | o Calculate future boundary data at open boundaries |
13     C | at time = futureTime by applying Orlanski radiation |
14     C | conditions. |
15     C |==========================================================|
16     C | |
17     C \==========================================================/
18     IMPLICIT NONE
19    
20     C === Global variables ===
21     #include "SIZE.h"
22     #include "EEPARAMS.h"
23     #include "PARAMS.h"
24     #include "GRID.h"
25     #include "OBCS.h"
26     #include "ORLANSKI.h"
27    
28 jmc 1.9 C SPK 6/2/00: Added radiative OBCs for salinity.
29     C SPK 6/6/00: Changed calculation of OB*w. When K=1, the
30 adcroft 1.2 C upstream value is used. For example on the eastern OB:
31     C IF (K.EQ.1) THEN
32     C OBEw(J,K,bi,bj)=wVel(I_obc-1,J,K,bi,bj)
33     C ENDIF
34 jmc 1.9 C
35 adcroft 1.2 C SPK 7/7/00: 1) Removed OB*w fix (see above).
36     C 2) Added variable CMAX. Maximum diagnosed phase speed is now
37 jmc 1.9 C clamped to CMAX. For stability of AB-II scheme (CFL) the
38 adcroft 1.2 C (non-dimensional) phase speed must be <0.5
39     C 3) (Sonya Legg) Changed application of uVel and vVel.
40 jmc 1.9 C uVel on the western OB is actually applied at I_obc+1
41 adcroft 1.2 C while vVel on the southern OB is applied at J_obc+1.
42 adcroft 1.3 C 4) (Sonya Legg) Added templates for forced OBs.
43 adcroft 1.2 C
44     C SPK 7/17/00: Non-uniform resolution is now taken into account in diagnosing
45     C phase speeds and time-stepping OB values. CL is still the
46     C non-dimensional phase speed; CVEL is the dimensional phase
47 jmc 1.9 C speed: CVEL = CL*(dx or dy)/dt, where dx and dy is the
48     C appropriate grid spacings. Note that CMAX (with which CL
49 adcroft 1.2 C is compared) remains non-dimensional.
50 jmc 1.9 C
51     C SPK 7/18/00: Added code to allow filtering of phase speed following
52     C Blumberg and Kantha. There is now a separate array
53 adcroft 1.2 C CVEL_**, where **=Variable(U,V,T,S,W)Boundary(E,W,N,S) for
54 jmc 1.9 C the dimensional phase speed. These arrays are initialized to
55 adcroft 1.2 C zero in ini_obcs.F. CVEL_** is filtered according to
56     C CVEL_** = fracCVEL*CVEL(new) + (1-fracCVEL)*CVEL_**(old).
57     C fracCVEL=1.0 turns off filtering.
58     C
59 jmc 1.9 C SPK 7/26/00: Changed code to average phase speed. A new variable
60 adcroft 1.2 C 'cvelTimeScale' was created. This variable must now be
61 jmc 1.9 C specified. Then, fracCVEL=deltaT/cvelTimeScale.
62     C Since the goal is to smooth out the 'singularities' in the
63     C diagnosed phase speed, cvelTimeScale could be picked as the
64     C duration of the singular period in the unfiltered case. Thus,
65     C for a plane wave cvelTimeScale might be the time take for the
66 adcroft 1.2 C wave to travel a distance DX, where DX is the width of the region
67     C near which d(phi)/dx is small.
68 adcroft 1.5 C
69     C JBG 4/10/03: Fixed phase speed at western boundary (as suggested by
70 jmc 1.11 C Dale Durran in his MWR paper). Fixed value (in m/s) is
71 adcroft 1.5 C passed in as variable CFIX in data.obcs.
72     C also now allow choice of Orlanski or fixed wavespeed
73     C (by means of new booleans useFixedCEast and
74     C useFixedCWest) without having to recompile each time
75     C
76 adcroft 1.2
77     C == Routine arguments ==
78     INTEGER bi, bj
79     _RL futureTime
80     _RL uVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
81     _RL vVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
82     _RL wVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
83     _RL theta(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
84     _RL salt (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
85     INTEGER myThid
86    
87     #ifdef ALLOW_ORLANSKI
88 heimbach 1.8 #ifdef ALLOW_OBCS_EAST
89 adcroft 1.2
90     C == Local variables ==
91     INTEGER J, K, I_obc
92     _RL CL, ab1, ab2, fracCVEL, f1, f2
93    
94     ab1 = 1.5 _d 0 + abEps /* Adams-Bashforth coefficients */
95     ab2 = -0.5 _d 0 - abEps
96     /* CMAX is maximum allowable phase speed-CFL for AB-II */
97     /* cvelTimeScale is averaging period for phase speed in sec. */
98    
99     fracCVEL = deltaT/cvelTimeScale /* fraction of new phase speed used*/
100 adcroft 1.3 f1 = fracCVEL /* dont change this. Set cvelTimeScale */
101     f2 = 1.0-fracCVEL /* dont change this. set cvelTimeScale */
102 adcroft 1.2
103     C Eastern OB (Orlanski Radiation Condition)
104     DO K=1,Nr
105     DO J=1-Oly,sNy+Oly
106     I_obc=OB_Ie(J,bi,bj)
107     IF (I_obc.ne.0) THEN
108     C uVel
109     IF ((UE_STORE_2(J,K,bi,bj).eq.0.).and.
110     & (UE_STORE_3(J,K,bi,bj).eq.0.)) THEN
111     CL=0.
112     ELSE
113     CL=-(uVel(I_obc-1,J,K,bi,bj)-UE_STORE_1(J,K,bi,bj))/
114     & (ab1*UE_STORE_2(J,K,bi,bj) + ab2*UE_STORE_3(J,K,bi,bj))
115     ENDIF
116     IF (CL.lt.0.) THEN
117     CL=0.
118     ELSEIF (CL.gt.CMAX) THEN
119     CL=CMAX
120     ENDIF
121 adcroft 1.5 IF (useFixedCEast) THEN
122 jmc 1.10 C Fixed phase speed (ignoring all of that painstakingly
123     C saved data...)
124 adcroft 1.5 CVEL_UE(J,K,bi,bj) = CFIX
125     ELSE
126 adcroft 1.6 CVEL_UE(J,K,bi,bj) = f1*(CL*dxF(I_obc-2,J,bi,bj)/deltaT
127     & )+f2*CVEL_UE(J,K,bi,bj)
128 adcroft 1.5 ENDIF
129 adcroft 1.2 C update OBC to next timestep
130     OBEu(J,K,bi,bj)=uVel(I_obc,J,K,bi,bj)-
131 adcroft 1.7 & CVEL_UE(J,K,bi,bj)*(deltaT*recip_dxF(I_obc-1,J,bi,bj))*
132 adcroft 1.2 & (ab1*(uVel(I_obc,J,K,bi,bj)-uVel(I_obc-1,J,K,bi,bj)) +
133     & ab2*(UE_STORE_4(J,K,bi,bj)-UE_STORE_1(J,K,bi,bj)))
134     C vVel
135     IF ((VE_STORE_2(J,K,bi,bj).eq.0.).and.
136     & (VE_STORE_3(J,K,bi,bj).eq.0.)) THEN
137     CL=0.
138     ELSE
139     CL=-(vVel(I_obc-1,J,K,bi,bj)-VE_STORE_1(J,K,bi,bj))/
140     & (ab1*VE_STORE_2(J,K,bi,bj) + ab2*VE_STORE_3(J,K,bi,bj))
141 jmc 1.9 ENDIF
142 adcroft 1.2 IF (CL.lt.0.) THEN
143     CL=0.
144     ELSEIF (CL.gt.CMAX) THEN
145     CL=CMAX
146     ENDIF
147 adcroft 1.5 IF (useFixedCEast) THEN
148 jmc 1.10 C Fixed phase speed (ignoring all of that painstakingly
149     C saved data...)
150 adcroft 1.5 CVEL_VE(J,K,bi,bj) = CFIX
151     ELSE
152     CVEL_VE(J,K,bi,bj) = f1*(CL*dxV(I_obc-1,J,bi,bj)
153     $ /deltaT)+f2*CVEL_VE(J,K,bi,bj)
154     ENDIF
155 adcroft 1.2 C update OBC to next timestep
156     OBEv(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)-
157 adcroft 1.7 & CVEL_VE(J,K,bi,bj)*(deltaT*recip_dxV(I_obc,J,bi,bj))*
158 jmc 1.9 & (ab1*(vVel(I_obc,J,K,bi,bj)-vVel(I_obc-1,J,K,bi,bj)) +
159 adcroft 1.7 & ab2*(VE_STORE_4(J,K,bi,bj)-VE_STORE_1(J,K,bi,bj)))
160 adcroft 1.2 C Temperature
161     IF ((TE_STORE_2(J,K,bi,bj).eq.0.).and.
162     & (TE_STORE_3(J,K,bi,bj).eq.0.)) THEN
163     CL=0.
164     ELSE
165     CL=-(theta(I_obc-1,J,K,bi,bj)-TE_STORE_1(J,K,bi,bj))/
166     & (ab1*TE_STORE_2(J,K,bi,bj) + ab2*TE_STORE_3(J,K,bi,bj))
167 jmc 1.9 ENDIF
168 adcroft 1.2 IF (CL.lt.0.) THEN
169     CL=0.
170     ELSEIF (CL.gt.CMAX) THEN
171     CL=CMAX
172     ENDIF
173 adcroft 1.5 IF (useFixedCEast) THEN
174 jmc 1.10 C Fixed phase speed (ignoring all of that painstakingly
175     C saved data...)
176 adcroft 1.5 CVEL_TE(J,K,bi,bj) = CFIX
177     ELSE
178     CVEL_TE(J,K,bi,bj) = f1*(CL*dxC(I_obc-1,J,bi,bj)
179     $ /deltaT)+f2*CVEL_TE(J,K,bi,bj)
180     ENDIF
181 adcroft 1.2 C update OBC to next timestep
182     OBEt(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)-
183 adcroft 1.7 & CVEL_TE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
184     & (ab1*(theta(I_obc,J,K,bi,bj)-theta(I_obc-1,J,K,bi,bj))+
185 adcroft 1.2 & ab2*(TE_STORE_4(J,K,bi,bj)-TE_STORE_1(J,K,bi,bj)))
186     C Salinity
187     IF ((SE_STORE_2(J,K,bi,bj).eq.0.).and.
188     & (SE_STORE_3(J,K,bi,bj).eq.0.)) THEN
189     CL=0.
190     ELSE
191     CL=-(salt(I_obc-1,J,K,bi,bj)-SE_STORE_1(J,K,bi,bj))/
192     & (ab1*SE_STORE_2(J,K,bi,bj) + ab2*SE_STORE_3(J,K,bi,bj))
193 jmc 1.9 ENDIF
194 adcroft 1.2 IF (CL.lt.0.) THEN
195     CL=0.
196     ELSEIF (CL.gt.CMAX) THEN
197     CL=CMAX
198     ENDIF
199 adcroft 1.5 IF (useFixedCEast) THEN
200 jmc 1.10 C Fixed phase speed (ignoring all of that painstakingly
201     C saved data...)
202 adcroft 1.5 CVEL_SE(J,K,bi,bj) = CFIX
203     ELSE
204     CVEL_SE(J,K,bi,bj) = f1*(CL*dxC(I_obc-1,J,bi,bj)
205     $ /deltaT)+f2*CVEL_SE(J,K,bi,bj)
206     ENDIF
207 adcroft 1.2 C update OBC to next timestep
208     OBEs(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)-
209 adcroft 1.7 & CVEL_SE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
210 adcroft 1.2 & (ab1*(salt(I_obc,J,K,bi,bj)-salt(I_obc-1,J,K,bi,bj))+
211 jmc 1.9 & ab2*(SE_STORE_4(J,K,bi,bj)-SE_STORE_1(J,K,bi,bj)))
212 jmc 1.10 #ifdef ALLOW_NONHYDROSTATIC
213     IF ( nonHydrostatic ) THEN
214 adcroft 1.2 C wVel
215 jmc 1.10 IF ((WE_STORE_2(J,K,bi,bj).eq.0.).and.
216     & (WE_STORE_3(J,K,bi,bj).eq.0.)) THEN
217     CL=0.
218     ELSE
219     CL=-(wVel(I_obc-1,J,K,bi,bj)-WE_STORE_1(J,K,bi,bj))/
220     & (ab1*WE_STORE_2(J,K,bi,bj)+ab2*WE_STORE_3(J,K,bi,bj))
221     ENDIF
222     IF (CL.lt.0.) THEN
223     CL=0.
224     ELSEIF (CL.gt.CMAX) THEN
225     CL=CMAX
226     ENDIF
227 adcroft 1.5 IF (useFixedCEast) THEN
228 jmc 1.10 C Fixed phase speed (ignoring all of that painstakingly
229     C saved data...)
230 adcroft 1.5 CVEL_WE(J,K,bi,bj) = CFIX
231     ELSE
232     CVEL_WE(J,K,bi,bj)=f1*(CL*dxC(I_obc-1,J,bi,bj)/deltaT)
233 adcroft 1.2 & + f2*CVEL_WE(J,K,bi,bj)
234 adcroft 1.5 ENDIF
235 jmc 1.10 C update OBC to next timestep
236     OBEw(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)-
237     & CVEL_WE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
238     & (ab1*(wVel(I_obc,J,K,bi,bj)-wVel(I_obc-1,J,K,bi,bj))+
239     & ab2*(WE_STORE_4(J,K,bi,bj)-WE_STORE_1(J,K,bi,bj)))
240     ENDIF
241     #endif /* ALLOW_NONHYDROSTATIC */
242 adcroft 1.2 C update/save storage arrays
243     C uVel
244     C copy t-1 to t-2 array
245     UE_STORE_3(J,K,bi,bj)=UE_STORE_2(J,K,bi,bj)
246     C copy (current time) t to t-1 arrays
247     UE_STORE_2(J,K,bi,bj)=uVel(I_obc-1,J,K,bi,bj) -
248     & uVel(I_obc-2,J,K,bi,bj)
249     UE_STORE_1(J,K,bi,bj)=uVel(I_obc-1,J,K,bi,bj)
250     UE_STORE_4(J,K,bi,bj)=uVel(I_obc,J,K,bi,bj)
251     C vVel
252     C copy t-1 to t-2 array
253     VE_STORE_3(J,K,bi,bj)=VE_STORE_2(J,K,bi,bj)
254     C copy (current time) t to t-1 arrays
255     VE_STORE_2(J,K,bi,bj)=vVel(I_obc-1,J,K,bi,bj) -
256     & vVel(I_obc-2,J,K,bi,bj)
257     VE_STORE_1(J,K,bi,bj)=vVel(I_obc-1,J,K,bi,bj)
258     VE_STORE_4(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)
259     C Temperature
260     C copy t-1 to t-2 array
261     TE_STORE_3(J,K,bi,bj)=TE_STORE_2(J,K,bi,bj)
262     C copy (current time) t to t-1 arrays
263     TE_STORE_2(J,K,bi,bj)=theta(I_obc-1,J,K,bi,bj) -
264     & theta(I_obc-2,J,K,bi,bj)
265     TE_STORE_1(J,K,bi,bj)=theta(I_obc-1,J,K,bi,bj)
266     TE_STORE_4(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)
267     C Salinity
268     C copy t-1 to t-2 array
269     SE_STORE_3(J,K,bi,bj)=SE_STORE_2(J,K,bi,bj)
270     C copy (current time) t to t-1 arrays
271     SE_STORE_2(J,K,bi,bj)=salt(I_obc-1,J,K,bi,bj) -
272     & salt(I_obc-2,J,K,bi,bj)
273     SE_STORE_1(J,K,bi,bj)=salt(I_obc-1,J,K,bi,bj)
274     SE_STORE_4(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)
275 jmc 1.10 #ifdef ALLOW_NONHYDROSTATIC
276     IF ( nonHydrostatic ) THEN
277 adcroft 1.2 C wVel
278     C copy t-1 to t-2 array
279     WE_STORE_3(J,K,bi,bj)=WE_STORE_2(J,K,bi,bj)
280     C copy (current time) t to t-1 arrays
281     WE_STORE_2(J,K,bi,bj)=wVel(I_obc-1,J,K,bi,bj) -
282     & wVel(I_obc-2,J,K,bi,bj)
283     WE_STORE_1(J,K,bi,bj)=wVel(I_obc-1,J,K,bi,bj)
284     WE_STORE_4(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)
285 jmc 1.10 ENDIF
286     #endif /* ALLOW_NONHYDROSTATIC */
287 adcroft 1.2 ENDIF
288     ENDDO
289     ENDDO
290    
291 heimbach 1.8 #endif
292 adcroft 1.2 #endif /* ALLOW_ORLANSKI */
293     RETURN
294     END

  ViewVC Help
Powered by ViewVC 1.1.22