File indexing completed on 2024-05-14 05:10:40 UTC
view on githubraw file Latest commit 9e0fdb40 on 2024-05-13 20:05:25 UTC
42c525bfb4 Alis*0001 #include "OBCS_OPTIONS.h"
0002
a24437ad80 Jean*0003 SUBROUTINE ORLANSKI_EAST( bi, bj, futureTime,
0004 I uVel, vVel, wVel, theta, salt,
42c525bfb4 Alis*0005 I myThid )
9e0fdb4065 Garr*0006
42c525bfb4 Alis*0007
0008
0009
0010
9e0fdb4065 Garr*0011
42c525bfb4 Alis*0012 IMPLICIT NONE
0013
0014
0015 #include "SIZE.h"
0016 #include "EEPARAMS.h"
0017 #include "PARAMS.h"
0018 #include "GRID.h"
9b4f2a04e2 Jean*0019 #include "OBCS_PARAMS.h"
0020 #include "OBCS_GRID.h"
0021 #include "OBCS_FIELDS.h"
42c525bfb4 Alis*0022 #include "ORLANSKI.h"
0023
a24437ad80 Jean*0024
0025
42c525bfb4 Alis*0026
0027
0028
0029
a24437ad80 Jean*0030
42c525bfb4 Alis*0031
0032
a24437ad80 Jean*0033
42c525bfb4 Alis*0034
0035
a24437ad80 Jean*0036
42c525bfb4 Alis*0037
e9b27c9813 Alis*0038
42c525bfb4 Alis*0039
0040
0041
0042
a24437ad80 Jean*0043
0044
42c525bfb4 Alis*0045
a24437ad80 Jean*0046
0047
0048
42c525bfb4 Alis*0049
a24437ad80 Jean*0050
42c525bfb4 Alis*0051
0052
0053
0054
a24437ad80 Jean*0055
42c525bfb4 Alis*0056
a24437ad80 Jean*0057
0058
0059
0060
0061
42c525bfb4 Alis*0062
0063
f2f2d1c632 Alis*0064
0065
3daafce20b Jean*0066
f2f2d1c632 Alis*0067
0068
0069
0070
0071
42c525bfb4 Alis*0072
0073
0074 INTEGER bi, bj
0075 _RL futureTime
0076 _RL uVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0077 _RL vVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0078 _RL wVel (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0079 _RL theta(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0080 _RL salt (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0081 INTEGER myThid
0082
0083 #ifdef ALLOW_ORLANSKI
96bbd4e2a5 Patr*0084 #ifdef ALLOW_OBCS_EAST
42c525bfb4 Alis*0085
0086 INTEGER J, K, I_obc
0087 _RL CL, ab1, ab2, fracCVEL, f1, f2
9e0fdb4065 Garr*0088 _RL denom
0089
42c525bfb4 Alis*0090
0091 ab1 = 1.5 _d 0 + abEps /* Adams-Bashforth coefficients */
0092 ab2 = -0.5 _d 0 - abEps
0093 /* CMAX is maximum allowable phase speed-CFL for AB-II */
0094 /* cvelTimeScale is averaging period for phase speed in sec. */
0095
0096 fracCVEL = deltaT/cvelTimeScale /* fraction of new phase speed used*/
e9b27c9813 Alis*0097 f1 = fracCVEL /* dont change this. Set cvelTimeScale */
0098 f2 = 1.0-fracCVEL /* dont change this. set cvelTimeScale */
42c525bfb4 Alis*0099
0100
0101 DO K=1,Nr
74019f026d Jean*0102 DO J=1-OLy,sNy+OLy
42c525bfb4 Alis*0103 I_obc=OB_Ie(J,bi,bj)
74019f026d Jean*0104 IF ( I_obc.NE.OB_indexNone ) THEN
9e0fdb4065 Garr*0105
0106 denom =
42c525bfb4 Alis*0107 & (ab1*UE_STORE_2(J,K,bi,bj) + ab2*UE_STORE_3(J,K,bi,bj))
9e0fdb4065 Garr*0108 IF ( denom .NE. 0 _d 0 ) THEN
0109 CL =-(uVel(I_obc-1,J,K,bi,bj)-UE_STORE_1(J,K,bi,bj))
0110 & / denom
0111 CL = MIN( MAX( CL, zeroRL ), CMAX )
0112 ELSE
0113 CL = 0. _d 0
42c525bfb4 Alis*0114 ENDIF
f2f2d1c632 Alis*0115 IF (useFixedCEast) THEN
41a255859f Jean*0116
0117
f2f2d1c632 Alis*0118 CVEL_UE(J,K,bi,bj) = CFIX
0119 ELSE
725711d378 Alis*0120 CVEL_UE(J,K,bi,bj) = f1*(CL*dxF(I_obc-2,J,bi,bj)/deltaT
0121 & )+f2*CVEL_UE(J,K,bi,bj)
f2f2d1c632 Alis*0122 ENDIF
42c525bfb4 Alis*0123
0124 OBEu(J,K,bi,bj)=uVel(I_obc,J,K,bi,bj)-
077d6102ae Alis*0125 & CVEL_UE(J,K,bi,bj)*(deltaT*recip_dxF(I_obc-1,J,bi,bj))*
42c525bfb4 Alis*0126 & (ab1*(uVel(I_obc,J,K,bi,bj)-uVel(I_obc-1,J,K,bi,bj)) +
0127 & ab2*(UE_STORE_4(J,K,bi,bj)-UE_STORE_1(J,K,bi,bj)))
9e0fdb4065 Garr*0128
0129
0130 denom =
42c525bfb4 Alis*0131 & (ab1*VE_STORE_2(J,K,bi,bj) + ab2*VE_STORE_3(J,K,bi,bj))
9e0fdb4065 Garr*0132 IF ( denom .NE. 0 _d 0 ) THEN
0133 CL =-(vVel(I_obc-1,J,K,bi,bj)-VE_STORE_1(J,K,bi,bj))
0134 & / denom
0135 CL = MIN( MAX( CL, zeroRL ), CMAX )
0136 ELSE
0137 CL = 0. _d 0
42c525bfb4 Alis*0138 ENDIF
f2f2d1c632 Alis*0139 IF (useFixedCEast) THEN
41a255859f Jean*0140
0141
f2f2d1c632 Alis*0142 CVEL_VE(J,K,bi,bj) = CFIX
0143 ELSE
0144 CVEL_VE(J,K,bi,bj) = f1*(CL*dxV(I_obc-1,J,bi,bj)
0145 $ /deltaT)+f2*CVEL_VE(J,K,bi,bj)
0146 ENDIF
42c525bfb4 Alis*0147
0148 OBEv(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)-
077d6102ae Alis*0149 & CVEL_VE(J,K,bi,bj)*(deltaT*recip_dxV(I_obc,J,bi,bj))*
a24437ad80 Jean*0150 & (ab1*(vVel(I_obc,J,K,bi,bj)-vVel(I_obc-1,J,K,bi,bj)) +
077d6102ae Alis*0151 & ab2*(VE_STORE_4(J,K,bi,bj)-VE_STORE_1(J,K,bi,bj)))
9e0fdb4065 Garr*0152
0153
0154 denom =
42c525bfb4 Alis*0155 & (ab1*TE_STORE_2(J,K,bi,bj) + ab2*TE_STORE_3(J,K,bi,bj))
9e0fdb4065 Garr*0156 IF ( denom .NE. 0 _d 0 ) THEN
0157 CL =-(theta(I_obc-1,J,K,bi,bj)-TE_STORE_1(J,K,bi,bj))
0158 & / denom
0159 CL = MIN( MAX( CL, zeroRL ), CMAX )
0160 ELSE
0161 CL = 0. _d 0
42c525bfb4 Alis*0162 ENDIF
f2f2d1c632 Alis*0163 IF (useFixedCEast) THEN
41a255859f Jean*0164
0165
f2f2d1c632 Alis*0166 CVEL_TE(J,K,bi,bj) = CFIX
0167 ELSE
0168 CVEL_TE(J,K,bi,bj) = f1*(CL*dxC(I_obc-1,J,bi,bj)
0169 $ /deltaT)+f2*CVEL_TE(J,K,bi,bj)
0170 ENDIF
42c525bfb4 Alis*0171
0172 OBEt(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)-
077d6102ae Alis*0173 & CVEL_TE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
0174 & (ab1*(theta(I_obc,J,K,bi,bj)-theta(I_obc-1,J,K,bi,bj))+
42c525bfb4 Alis*0175 & ab2*(TE_STORE_4(J,K,bi,bj)-TE_STORE_1(J,K,bi,bj)))
9e0fdb4065 Garr*0176
0177
0178 denom =
42c525bfb4 Alis*0179 & (ab1*SE_STORE_2(J,K,bi,bj) + ab2*SE_STORE_3(J,K,bi,bj))
9e0fdb4065 Garr*0180 IF ( denom .NE. 0 _d 0 ) THEN
0181 CL =-(salt(I_obc-1,J,K,bi,bj)-SE_STORE_1(J,K,bi,bj))
0182 & / denom
0183 CL = MIN( MAX( CL, zeroRL ), CMAX )
0184 ELSE
0185 CL = 0. _d 0
42c525bfb4 Alis*0186 ENDIF
f2f2d1c632 Alis*0187 IF (useFixedCEast) THEN
41a255859f Jean*0188
0189
f2f2d1c632 Alis*0190 CVEL_SE(J,K,bi,bj) = CFIX
0191 ELSE
0192 CVEL_SE(J,K,bi,bj) = f1*(CL*dxC(I_obc-1,J,bi,bj)
0193 $ /deltaT)+f2*CVEL_SE(J,K,bi,bj)
0194 ENDIF
42c525bfb4 Alis*0195
0196 OBEs(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)-
077d6102ae Alis*0197 & CVEL_SE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
42c525bfb4 Alis*0198 & (ab1*(salt(I_obc,J,K,bi,bj)-salt(I_obc-1,J,K,bi,bj))+
a24437ad80 Jean*0199 & ab2*(SE_STORE_4(J,K,bi,bj)-SE_STORE_1(J,K,bi,bj)))
9e0fdb4065 Garr*0200
42c525bfb4 Alis*0201 #ifdef ALLOW_NONHYDROSTATIC
41a255859f Jean*0202 IF ( nonHydrostatic ) THEN
9e0fdb4065 Garr*0203
0204 denom =
41a255859f Jean*0205 & (ab1*WE_STORE_2(J,K,bi,bj)+ab2*WE_STORE_3(J,K,bi,bj))
9e0fdb4065 Garr*0206 IF ( denom .NE. 0 _d 0 ) THEN
0207 CL =-(wVel(I_obc-1,J,K,bi,bj)-WE_STORE_1(J,K,bi,bj))
0208 & / denom
0209 CL = MIN( MAX( CL, zeroRL ), CMAX )
0210 ELSE
0211 CL = 0. _d 0
41a255859f Jean*0212 ENDIF
f2f2d1c632 Alis*0213 IF (useFixedCEast) THEN
41a255859f Jean*0214
0215
f2f2d1c632 Alis*0216 CVEL_WE(J,K,bi,bj) = CFIX
0217 ELSE
0218 CVEL_WE(J,K,bi,bj)=f1*(CL*dxC(I_obc-1,J,bi,bj)/deltaT)
42c525bfb4 Alis*0219 & + f2*CVEL_WE(J,K,bi,bj)
f2f2d1c632 Alis*0220 ENDIF
41a255859f Jean*0221
0222 OBEw(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)-
0223 & CVEL_WE(J,K,bi,bj)*(deltaT*recip_dxC(I_obc,J,bi,bj))*
0224 & (ab1*(wVel(I_obc,J,K,bi,bj)-wVel(I_obc-1,J,K,bi,bj))+
0225 & ab2*(WE_STORE_4(J,K,bi,bj)-WE_STORE_1(J,K,bi,bj)))
0226 ENDIF
0227 #endif /* ALLOW_NONHYDROSTATIC */
9e0fdb4065 Garr*0228
0229
42c525bfb4 Alis*0230
0231
0232 UE_STORE_3(J,K,bi,bj)=UE_STORE_2(J,K,bi,bj)
0233
0234 UE_STORE_2(J,K,bi,bj)=uVel(I_obc-1,J,K,bi,bj) -
0235 & uVel(I_obc-2,J,K,bi,bj)
0236 UE_STORE_1(J,K,bi,bj)=uVel(I_obc-1,J,K,bi,bj)
0237 UE_STORE_4(J,K,bi,bj)=uVel(I_obc,J,K,bi,bj)
0238
0239
0240 VE_STORE_3(J,K,bi,bj)=VE_STORE_2(J,K,bi,bj)
0241
0242 VE_STORE_2(J,K,bi,bj)=vVel(I_obc-1,J,K,bi,bj) -
0243 & vVel(I_obc-2,J,K,bi,bj)
0244 VE_STORE_1(J,K,bi,bj)=vVel(I_obc-1,J,K,bi,bj)
0245 VE_STORE_4(J,K,bi,bj)=vVel(I_obc,J,K,bi,bj)
0246
0247
0248 TE_STORE_3(J,K,bi,bj)=TE_STORE_2(J,K,bi,bj)
0249
0250 TE_STORE_2(J,K,bi,bj)=theta(I_obc-1,J,K,bi,bj) -
0251 & theta(I_obc-2,J,K,bi,bj)
0252 TE_STORE_1(J,K,bi,bj)=theta(I_obc-1,J,K,bi,bj)
0253 TE_STORE_4(J,K,bi,bj)=theta(I_obc,J,K,bi,bj)
0254
0255
0256 SE_STORE_3(J,K,bi,bj)=SE_STORE_2(J,K,bi,bj)
0257
0258 SE_STORE_2(J,K,bi,bj)=salt(I_obc-1,J,K,bi,bj) -
0259 & salt(I_obc-2,J,K,bi,bj)
0260 SE_STORE_1(J,K,bi,bj)=salt(I_obc-1,J,K,bi,bj)
0261 SE_STORE_4(J,K,bi,bj)=salt(I_obc,J,K,bi,bj)
0262 #ifdef ALLOW_NONHYDROSTATIC
41a255859f Jean*0263 IF ( nonHydrostatic ) THEN
0264
42c525bfb4 Alis*0265
0266 WE_STORE_3(J,K,bi,bj)=WE_STORE_2(J,K,bi,bj)
0267
0268 WE_STORE_2(J,K,bi,bj)=wVel(I_obc-1,J,K,bi,bj) -
0269 & wVel(I_obc-2,J,K,bi,bj)
0270 WE_STORE_1(J,K,bi,bj)=wVel(I_obc-1,J,K,bi,bj)
0271 WE_STORE_4(J,K,bi,bj)=wVel(I_obc,J,K,bi,bj)
41a255859f Jean*0272 ENDIF
0273 #endif /* ALLOW_NONHYDROSTATIC */
42c525bfb4 Alis*0274 ENDIF
0275 ENDDO
0276 ENDDO
0277
9e0fdb4065 Garr*0278 #endif /* ALLOW_OBCS_EAST */
42c525bfb4 Alis*0279 #endif /* ALLOW_ORLANSKI */
0280 RETURN
0281 END