1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
cc |
4 |
|
|
5 |
#include "OBCS_OPTIONS.h" |
#include "OBCS_OPTIONS.h" |
6 |
|
|
65 |
C for a plane wave cvelTimeScale might be the time take for the |
C for a plane wave cvelTimeScale might be the time take for the |
66 |
C wave to travel a distance DX, where DX is the width of the region |
C wave to travel a distance DX, where DX is the width of the region |
67 |
C near which d(phi)/dx is small. |
C near which d(phi)/dx is small. |
68 |
|
C |
69 |
|
C JBG 3/24/03: Fixed phase speed at western boundary (as suggested by |
70 |
|
C Dale Durran's MWR paper). Fixed value (in m/s) is |
71 |
|
C passed in as variable CFIX in data.obcs. |
72 |
|
C |
73 |
|
C JBG 4/10/03: allow choice of Orlanski or fixed wavespeed (by means of new |
74 |
|
C booleans useFixedCEast and useFixedCWest) without |
75 |
|
C having to recompile each time |
76 |
|
c SAL 1/7/03: Fixed bug: implementation for salinity was incomplete |
77 |
|
C |
78 |
|
|
79 |
C == Routine arguments == |
C == Routine arguments == |
80 |
INTEGER bi, bj |
INTEGER bi, bj |
119 |
ELSEIF (CL.gt.CMAX) THEN |
ELSEIF (CL.gt.CMAX) THEN |
120 |
CL=CMAX |
CL=CMAX |
121 |
ENDIF |
ENDIF |
122 |
CVEL_UW(J,K,bi,bj) = f1*(CL*dxF(I_obc+2,J,bi,bj)/deltaT)+ |
IF (useFixedCWest) THEN |
123 |
|
C Fixed phase speed (ignoring all of that painstakingly |
124 |
|
C saved data...) |
125 |
|
CVEL_UW(J,K,bi,bj) = CFIX |
126 |
|
ELSE |
127 |
|
CVEL_UW(J,K,bi,bj) = f1*(CL*dxF(I_obc+2,J,bi,bj)/deltaT)+ |
128 |
& f2*CVEL_UW(J,K,bi,bj) |
& f2*CVEL_UW(J,K,bi,bj) |
129 |
|
ENDIF |
130 |
C update OBC to next timestep |
C update OBC to next timestep |
131 |
OBWu(J,K,bi,bj)=uVel(I_obc+1,J,K,bi,bj)+ |
OBWu(J,K,bi,bj)=uVel(I_obc+1,J,K,bi,bj)+ |
132 |
& CVEL_UW(J,K,bi,bj)*deltaT*recip_dxF(I_obc+1,J,bi,bj)* |
& CVEL_UW(J,K,bi,bj)*(deltaT/dxF(I_obc+1,J,bi,bj))* |
133 |
& (ab1*(uVel(I_obc+2,J,K,bi,bj)-uVel(I_obc+1,J,K,bi,bj))+ |
& (ab1*(uVel(I_obc+2,J,K,bi,bj)-uVel(I_obc+1,J,K,bi,bj))+ |
134 |
& ab2*(UW_STORE_1(J,K,bi,bj)-UW_STORE_4(J,K,bi,bj))) |
& ab2*(UW_STORE_1(J,K,bi,bj)-UW_STORE_4(J,K,bi,bj))) |
135 |
C vVel |
C vVel |
145 |
ELSEIF (CL.gt.CMAX) THEN |
ELSEIF (CL.gt.CMAX) THEN |
146 |
CL=CMAX |
CL=CMAX |
147 |
ENDIF |
ENDIF |
148 |
CVEL_VW(J,K,bi,bj) = f1*(CL*dxV(I_obc+2,J,bi,bj)/deltaT)+ |
IF (useFixedCWest) THEN |
149 |
|
C Fixed phase speed (ignoring all of that painstakingly |
150 |
|
C saved data...) |
151 |
|
CVEL_VW(J,K,bi,bj) = CFIX |
152 |
|
ELSE |
153 |
|
CVEL_VW(J,K,bi,bj) = f1*(CL*dxV(I_obc+2,J,bi,bj)/deltaT)+ |
154 |
& f2*CVEL_VW(J,K,bi,bj) |
& f2*CVEL_VW(J,K,bi,bj) |
155 |
|
ENDIF |
156 |
C update OBC to next timestep |
C update OBC to next timestep |
157 |
OBWv(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)+ |
OBWv(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)+ |
158 |
& CVEL_VW(J,K,bi,bj)*deltaT*recip_dxV(I_obc+1,J,bi,bj)* |
& CVEL_VW(J,K,bi,bj)*(deltaT/dxV(I_obc+1,J,bi,bj))* |
159 |
& (ab1*(vVel(I_obc+1,J,K,bi,bj)-vVel(I_obc,J,K,bi,bj))+ |
& (ab1*(vVel(I_obc+1,J,K,bi,bj)-vVel(I_obc,J,K,bi,bj))+ |
160 |
& ab2*(VW_STORE_1(J,K,bi,bj)-VW_STORE_4(J,K,bi,bj))) |
& ab2*(VW_STORE_1(J,K,bi,bj)-VW_STORE_4(J,K,bi,bj))) |
161 |
C Temperature |
C Temperature |
171 |
ELSEIF (CL.gt.CMAX) THEN |
ELSEIF (CL.gt.CMAX) THEN |
172 |
CL=CMAX |
CL=CMAX |
173 |
ENDIF |
ENDIF |
174 |
CVEL_TW(J,K,bi,bj) = f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT)+ |
IF (useFixedCWest) THEN |
175 |
|
C Fixed phase speed (ignoring all of that painstakingly |
176 |
|
C saved data...) |
177 |
|
CVEL_TW(J,K,bi,bj) = CFIX |
178 |
|
ELSE |
179 |
|
CVEL_TW(J,K,bi,bj) = f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT)+ |
180 |
& f2*CVEL_TW(J,K,bi,bj) |
& f2*CVEL_TW(J,K,bi,bj) |
181 |
|
ENDIF |
182 |
C update OBC to next timestep |
C update OBC to next timestep |
183 |
OBWt(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)+ |
OBWt(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)+ |
184 |
& CVEL_TW(J,K,bi,bj)*deltaT*recip_dxC(I_obc+1,J,bi,bj)* |
& CVEL_TW(J,K,bi,bj)*(deltaT/dxC(I_obc+1,J,bi,bj))* |
185 |
& (ab1*(theta(I_obc+1,J,K,bi,bj)-theta(I_obc,J,K,bi,bj))+ |
& (ab1*(theta(I_obc+1,J,K,bi,bj)-theta(I_obc,J,K,bi,bj))+ |
186 |
& ab2*(TW_STORE_1(J,K,bi,bj)-TW_STORE_4(J,K,bi,bj))) |
& ab2*(TW_STORE_1(J,K,bi,bj)-TW_STORE_4(J,K,bi,bj))) |
187 |
C Salinity |
C Salinity |
197 |
ELSEIF (CL.gt.CMAX) THEN |
ELSEIF (CL.gt.CMAX) THEN |
198 |
CL=CMAX |
CL=CMAX |
199 |
ENDIF |
ENDIF |
200 |
CVEL_SW(J,K,bi,bj) = f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT)+ |
IF (useFixedCWest) THEN |
201 |
|
C Fixed phase speed (ignoring all of that painstakingly |
202 |
|
C saved data...) |
203 |
|
CVEL_SW(J,K,bi,bj) = CFIX |
204 |
|
ELSE |
205 |
|
CVEL_SW(J,K,bi,bj) = f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT)+ |
206 |
& f2*CVEL_SW(J,K,bi,bj) |
& f2*CVEL_SW(J,K,bi,bj) |
207 |
|
ENDIF |
208 |
C update OBC to next timestep |
C update OBC to next timestep |
209 |
OBWs(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)+ |
OBWs(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)+ |
210 |
& CVEL_SW(J,K,bi,bj)*deltaT*recip_dxC(I_obc+1,J,bi,bj)* |
& CVEL_SW(J,K,bi,bj)*(deltaT/dxC(I_obc+1,J,bi,bj))* |
211 |
& (ab1*(salt(I_obc+1,J,K,bi,bj)-salt(I_obc,J,K,bi,bj))+ |
& (ab1*(salt(I_obc+1,J,K,bi,bj)-salt(I_obc,J,K,bi,bj))+ |
212 |
& ab2*(SW_STORE_1(J,K,bi,bj)-SW_STORE_4(J,K,bi,bj))) |
& ab2*(SW_STORE_1(J,K,bi,bj)-SW_STORE_4(J,K,bi,bj))) |
213 |
C wVel |
C wVel |
224 |
ELSEIF (CL.gt.CMAX) THEN |
ELSEIF (CL.gt.CMAX) THEN |
225 |
CL=CMAX |
CL=CMAX |
226 |
ENDIF |
ENDIF |
227 |
CVEL_WW(J,K,bi,bj)=f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT) |
IF (useFixedCWest) THEN |
228 |
|
C Fixed phase speed (ignoring all of that painstakingly |
229 |
|
C saved data...) |
230 |
|
CVEL_WW(J,K,bi,bj) = CFIX |
231 |
|
ELSE |
232 |
|
CVEL_WW(J,K,bi,bj)=f1*(CL*dxC(I_obc+2,J,bi,bj)/deltaT) |
233 |
& + f2*CVEL_WW(J,K,bi,bj) |
& + f2*CVEL_WW(J,K,bi,bj) |
234 |
|
ENDIF |
235 |
C update OBC to next timestep |
C update OBC to next timestep |
236 |
OBWw(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)+ |
OBWw(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)+ |
237 |
& CVEL_WW(J,K,bi,bj)*deltaT*recip_dxC(I_obc+1,J,bi,bj)* |
& CVEL_WW(J,K,bi,bj)*(deltaT/dxC(I_obc+1,J,bi,bj))* |
238 |
& (ab1*(wVel(I_obc+1,J,K,bi,bj)-wVel(I_obc,J,K,bi,bj))+ |
& (ab1*(wVel(I_obc+1,J,K,bi,bj)-wVel(I_obc,J,K,bi,bj))+ |
239 |
& ab2*(WW_STORE_1(J,K,bi,bj)-WW_STORE_4(J,K,bi,bj))) |
& ab2*(WW_STORE_1(J,K,bi,bj)-WW_STORE_4(J,K,bi,bj))) |
240 |
#endif |
#endif |
263 |
& theta(I_obc+1,J,K,bi,bj) |
& theta(I_obc+1,J,K,bi,bj) |
264 |
TW_STORE_1(J,K,bi,bj)=theta(I_obc+1,J,K,bi,bj) |
TW_STORE_1(J,K,bi,bj)=theta(I_obc+1,J,K,bi,bj) |
265 |
TW_STORE_4(J,K,bi,bj)=theta(I_obc,J,K,bi,bj) |
TW_STORE_4(J,K,bi,bj)=theta(I_obc,J,K,bi,bj) |
266 |
|
c Salinity |
267 |
|
C copy t-1 to t-2 array |
268 |
|
SW_STORE_3(J,K,bi,bj)=SW_STORE_2(J,K,bi,bj) |
269 |
|
C copy (current time) t to t-1 arrays |
270 |
|
SW_STORE_2(J,K,bi,bj)=salt(I_obc+2,J,K,bi,bj) - |
271 |
|
& salt(I_obc+1,J,K,bi,bj) |
272 |
|
SW_STORE_1(J,K,bi,bj)=salt(I_obc+1,J,K,bi,bj) |
273 |
|
SW_STORE_4(J,K,bi,bj)=salt(I_obc,J,K,bi,bj) |
274 |
C wVel |
C wVel |
275 |
#ifdef ALLOW_NONHYDROSTATIC |
#ifdef ALLOW_NONHYDROSTATIC |
276 |
C copy t-1 to t-2 array |
C copy t-1 to t-2 array |