*IF DEF,A06_3A,OR,DEF,A06_3B ADR2F405.3 C ******************************COPYRIGHT****************************** GTS2F400.3709 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3710 C GTS2F400.3711 C Use, duplication or disclosure of this code is subject to the GTS2F400.3712 C restrictions as set forth in the contract. GTS2F400.3713 C GTS2F400.3714 C Meteorological Office GTS2F400.3715 C London Road GTS2F400.3716 C BRACKNELL GTS2F400.3717 C Berkshire UK GTS2F400.3718 C RG12 2SZ GTS2F400.3719 C GTS2F400.3720 C If no contract has been raised with this copy of the code, the use, GTS2F400.3721 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3722 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3723 C Modelling at the above address. GTS2F400.3724 C ******************************COPYRIGHT****************************** GTS2F400.3725 C GTS2F400.3726 ! SUBROUTINE GW_SURF TO CALCULATE SURFACE STRESS VECTOR FOR GWD GWSURF3A.3 ! GWSURF3A.4SUBROUTINE GW_SURF 2GWSURF3A.5 1 (PSTAR,PEXNER,THETA,U,V,SD_OROG,SIGMA_XX,SIGMA_XY,SIGMA_YY, GWSURF3A.6 2 S_X_STRESS,S_Y_STRESS,S_X_OROG,S_Y_OROG,LEVELS, GWSURF3A.7 3 POINTS,AK,BK,AKH,BKH,KAY,TEST,K_LIFT,U_S,V_S,RHO_S) GWSURF3A.8 GWSURF3A.9 IMPLICIT NONE GWSURF3A.10 ! Description: GWSURF3A.11 ! Finds lift height for a blocked layer. Averages wind & stability from GWSURF3A.12 ! the largest of lift height or level 2, upto a height of 1.4*sig(h) or GWSURF3A.13 ! lev 3. Calculates anisotropic 'surface' stress due to sub-grid scale GWSURF3A.14 ! orography via squared gradients and variance. The wave amplitude is GWSURF3A.15 ! dependant on variance and may be proportional or follow a square or GWSURF3A.16 ! cubic law w.r.t wind speed. These regimes are controlled by GWSURF3A.17 ! parameters alpha and beta. GWSURF3A.18 ! Method: UNIFIED MODEL DOCUMENTATION PAPER NO. ? GWSURF3A.19 ! THE EQUATIONS USED ARE (1),(2) GWSURF3A.20 ! GWSURF3A.21 ! Current code owner: S.Webster ASW1F403.46 ! GWSURF3A.23 ! History: GWSURF3A.24 ! Version Date Comment GWSURF3A.25 ! 3.4 18/10/94 Original Code. J.R.Mitchell GWSURF3A.26 ! 4.4 19/09/97 Remove *IF -DEF,CRAY compile options. S.Webster ASW1F404.7 ! GWSURF3A.27 ! Code Description: GWSURF3A.28 ! Language: Fortran 77 + common extensions GWSURF3A.29 ! This code is written to UMDP3 v6 programming standards. GWSURF3A.30 ! System component covered: ORIGINAL VERSION FOR CRAY Y-MP GWSURF3A.31 ! System task covered: PART OF P22 GWSURF3A.32 ! SUITABLE FOR SINGLE COLUMN USE,ROTATED GRIDS GWSURF3A.33 ! FURTHER ALTERATIONS MAY BE REQUIRED FOR AUTOTASKING EFFICIENCY GWSURF3A.34 GWSURF3A.35 ! Global Variables GWSURF3A.36 *CALL C_G
GWSURF3A.37 *CALL C_R_CP
GWSURF3A.38 ! Local constants GWSURF3A.39 *CALL C_GWAVE
GWSURF3A.40 GWSURF3A.41 ! Subroutine arguements GWSURF3A.42 INTEGER GWSURF3A.43 * LEVELS !IN NUMBER OF MODEL LEVELS GWSURF3A.44 *,POINTS !IN NUMBER OF POINTS GWSURF3A.45 *,K_LIFT(POINTS) !OUT MODEL LEVEL HEIGHT OF BLOCKED LAYER GWSURF3A.46 GWSURF3A.47 REAL GWSURF3A.48 * PSTAR(POINTS) !IN PSTAR FIELD GWSURF3A.49 *,PEXNER(POINTS,LEVELS+1) !IN PEXNER GWSURF3A.50 *,THETA(POINTS,LEVELS) !IN THETA FIELD GWSURF3A.51 *,U(POINTS,LEVELS) !IN U FIELD GWSURF3A.52 *,V(POINTS,LEVELS) !IN V FIELD GWSURF3A.53 ! AK,BK DEFINE HYBRID VERTICAL COORDINATES P=A+BP*, GWSURF3A.54 REAL GWSURF3A.55 * AK (LEVELS) !IN VALUE AT LAYER CENTRE GWSURF3A.56 *,BK (LEVELS) !IN VALUE AT LAYER CENTRE GWSURF3A.57 *,AKH(LEVELS+1) !IN VALUE AT LAYER boundary GWSURF3A.58 *,BKH(LEVELS+1) !IN VALUE AT LAYER boundary GWSURF3A.59 *,KAY !IN surface stress constant (m-1) GWSURF3A.60 *,SD_OROG(POINTS) !IN STANDARD DEVIATION OF OROGRAPHY GWSURF3A.61 *,SIGMA_XX(POINTS) !IN DH/DX SQUARED GRADIENT OROG GWSURF3A.62 *,SIGMA_XY(POINTS) !IN (DH/DX)(DH/DY) GRADIENT OROG GWSURF3A.63 *,SIGMA_YY(POINTS) !IN DH/DY SQUARED GRADIENT OROG GWSURF3A.64 *,S_X_STRESS(POINTS) !OUT 'SURFACE' STRESS IN X-DIRN GWSURF3A.65 *,S_Y_STRESS(POINTS) !OUT 'SURFACE' STRESS IN Y-DIRN GWSURF3A.66 *,S_X_OROG(POINTS) !OUT 'SURFACE' STRESS/OROG IN X-DIRN GWSURF3A.67 *,S_Y_OROG(POINTS) !OUT 'SURFACE' STRESS/OROG IN Y-DIRN GWSURF3A.68 *,TEST(POINTS) !OUT TEST HYDROLOIC JUMP (SIMILAR TO FROUDE) GWSURF3A.69 *,U_S(POINTS) !OUT U-WINDS AVERAGED OVER 'SURFACE' GWSURF3A.70 *,V_S(POINTS) !OUT V-WINDS AVERAGED OVER 'SURFACE' GWSURF3A.71 *,RHO_S(POINTS) !OUT DENSITY AVERAGED OVER 'SURFACE' GWSURF3A.72 GWSURF3A.73 ! Local parameters GWSURF3A.74 REAL CPBYG GWSURF3A.75 PARAMETER(CPBYG=CP/G) GWSURF3A.76 ! Local scalers GWSURF3A.77 LOGICAL FLAG GWSURF3A.78 GWSURF3A.79 INTEGER I ! LOOP COUNTER IN ROUTINE GWSURF3A.80 INTEGER K,KK,KL,KU ! LEVEL COUNTERS IN ROUTINE GWSURF3A.81 INTEGER K_MOUNT ! LIMIT OF MOUNTAIN LEVELS GWSURF3A.82 GWSURF3A.83 REAL GWSURF3A.84 * RHO ! DENSITY GWSURF3A.85 *,SPEED ! WIND SPEED / WIND SPEED IN DIRN STRESS GWSURF3A.86 *,SPEEDCALC ! NUMERATOR OF CALCUATION FOR SPEED GWSURF3A.87 *,S_STRESS_SQ ! DENOMINATER OF CALCUATION FOR SPEED GWSURF3A.88 *,N ! BRUNT_VAISALA FREQUENCY GWSURF3A.89 *,N_SQAV ! AVERAGE OF BRUNT VAISALLA FREQ SQ GWSURF3A.90 *,H_SQ ! H1*H2 OF NEW PARMS FORMULA (55) GWSURF3A.91 *,ALPHA1 ! DUMMY FOR ALPHA (C_GWAWE) GWSURF3A.92 *,BETA1 ! DUMMY FOR BETA (C_GWAVE) GWSURF3A.93 *,R_ALPHA ! RECIPRICOL OF ALPHA1 GWSURF3A.94 *,R_BETA ! RECIPRICOL OF BETA1 GWSURF3A.95 *,CALC ! CALCULATION FOR SURFACE STRESS MAGNITUDE GWSURF3A.96 *,UOVERN ! UBYN FOR ONE LAYER GWSURF3A.97 *,DEL_EXNER ! EXNER DIFFERENCE ACROSS LAYER GWSURF3A.98 *,DELTA_P ! PRESSURE DIFFERENCE GWSURF3A.99 *,PU,PL ! PRESSURES AT LAYER BOUNDARIES GWSURF3A.100 GWSURF3A.101 ! Local dynamic arrays GWSURF3A.102 ! LOCAL WORKSPACE ARRAYS: 13 ARRAYS OF FULL FIELD LENGTH GWSURF3A.103 ! GWSURF3A.104 LOGICAL GWSURF3A.114 * L_CONT(POINTS) ! LEVEL CONTINUE GWSURF3A.115 *,L_CONT2(POINTS) ! LEVEL CONTINUE GWSURF3A.116 GWSURF3A.117 INTEGER GWSURF3A.118 * K_BOT(POINTS) ! MODEL LEVEL HEIGHT OF BLOCKED LAYER GWSURF3A.119 *,K_TOP(POINTS) ! MODEL LEVEL AT MOUNTAIN TOPS GWSURF3A.120 GWSURF3A.121 REAL GWSURF3A.122 * LIFT(POINTS) ! OROGRAPHIC CONTRIBUTION TO H_JUMP HEIGHT GWSURF3A.123 *,P_EXNER_CENTRE(POINTS,2) ! EXNER PRESSURE AT LAYER CENTRES GWSURF3A.124 *,N_SQ(POINTS,2) ! SQUARE OF BRUNT_VAISALA FREQUENCY GWSURF3A.125 *,ZH(POINTS) ! TOTAL HEIGHT ABOVE GROUND (M) GWSURF3A.126 *,DELTA_P_SUM(POINTS) ! DELTA PRESSURE CUMULATIVE SUM GWSURF3A.127 *,NSQ_S(POINTS) ! N SQUARED AVERAGED OVER 'SURFACE' GWSURF3A.128 GWSURF3A.130 ! Function and subroutine calls GWSURF3A.131 *CALL P_EXNERC
GWSURF3A.132 GWSURF3A.133 !----------------------------------------------------------------- GWSURF3A.134 ! CODE ASSUMES ALPHA < BETA . SWAP IS POSSIBLE BECAUSE OF GWSURF3A.135 ! SYMMETRY OF CALCULATION ( SEE EQN(55), DOC ) GWSURF3A.136 !---------------------------------------------------------------- GWSURF3A.137 IF( ALPHA.GT.BETA ) THEN GWSURF3A.138 ALPHA1=BETA GWSURF3A.139 BETA1=ALPHA GWSURF3A.140 ELSE GWSURF3A.141 ALPHA1=ALPHA GWSURF3A.142 BETA1=BETA GWSURF3A.143 ENDIF GWSURF3A.144 GWSURF3A.145 GWSURF3A.146 R_ALPHA=1.0/ALPHA1 GWSURF3A.147 R_BETA=1.0/BETA1 GWSURF3A.148 GWSURF3A.149 KL=1 GWSURF3A.150 KU=2 GWSURF3A.151 GWSURF3A.152 !--------------------------------------------------------------------- GWSURF3A.153 ! 1.0 Find approximate level limit of orography. Initialation GWSURF3A.154 !--------------------------------------------------------------------- GWSURF3A.155 FLAG = .TRUE. GWSURF3A.156 K_MOUNT = LEVELS-2 GWSURF3A.157 DO K= 3,LEVELS-2 GWSURF3A.158 IF (FLAG) THEN GWSURF3A.159 PU=100000.*BKH(K+1) + AKH(K+1) GWSURF3A.160 IF ( PU .LT. 50000. ) THEN GWSURF3A.161 K_MOUNT = K GWSURF3A.162 FLAG = .FALSE. GWSURF3A.163 ENDIF GWSURF3A.164 ENDIF GWSURF3A.165 ENDDO GWSURF3A.166 DO I=1,POINTS GWSURF3A.167 DELTA_P_SUM(I) = 0.0 GWSURF3A.168 NSQ_S(I) = 0.0 GWSURF3A.169 RHO_S(I) = 0.0 GWSURF3A.170 U_S(I) = 0.0 GWSURF3A.171 V_S(I) = 0.0 GWSURF3A.172 L_CONT(I) =.TRUE. GWSURF3A.173 L_CONT2(I) =.TRUE. GWSURF3A.174 ENDDO GWSURF3A.175 !--------------------------------------------------------------------- GWSURF3A.176 ! 1.1 Calculate N by U averaged over boundary values of level 2 GWSURF3A.177 ! Use this to calculate level depth of any blocked layer - GWSURF3A.178 ! K_LIFT (eqn 7) GWSURF3A.179 !--------------------------------------------------------------------- GWSURF3A.180 DO K=2,K_MOUNT GWSURF3A.181 DO I=1,POINTS GWSURF3A.182 IF( K.EQ.2 ) THEN GWSURF3A.183 ! level 1.5 GWSURF3A.184 PU=PSTAR(I)*BKH(K) + AKH(K) GWSURF3A.185 PL=PSTAR(I)*BKH(K-1) + AKH(K-1) GWSURF3A.186 P_EXNER_CENTRE(I,KL)= GWSURF3A.187 & P_EXNER_C( PEXNER(I,K),PEXNER(I,K-1),PU,PL,KAPPA) GWSURF3A.188 PL=PU GWSURF3A.189 PU=PSTAR(I)*BKH(K+1) + AKH(K+1) GWSURF3A.190 P_EXNER_CENTRE(I,KU)= GWSURF3A.191 & P_EXNER_C( PEXNER(I,K+1),PEXNER(I,K),PU,PL,KAPPA) GWSURF3A.192 N_SQ(I,KL) = G*(THETA(I,K)-THETA(I,K-1))/(THETA(I,K)* GWSURF3A.193 & THETA(I,K-1)*(P_EXNER_CENTRE(I,KL)-P_EXNER_CENTRE(I,KU))* GWSURF3A.194 & CPBYG) GWSURF3A.195 ! level 2.5 GWSURF3A.196 P_EXNER_CENTRE(I,KL)=P_EXNER_CENTRE(I,KU) GWSURF3A.197 PL=PU GWSURF3A.198 PU=PSTAR(I)*BKH(K+2) + AKH(K+2) GWSURF3A.199 P_EXNER_CENTRE(I,KU)= GWSURF3A.200 & P_EXNER_C( PEXNER(I,K+2),PEXNER(I,K+1),PU,PL,KAPPA) GWSURF3A.201 N_SQ(I,KU) = G*(THETA(I,K+1)-THETA(I,K))/(THETA(I,K+1)* GWSURF3A.202 & THETA(I,K)*(P_EXNER_CENTRE(I,KL)-P_EXNER_CENTRE(I,KU))* GWSURF3A.203 & CPBYG) GWSURF3A.204 ! n_squared averaged interpolating boundary values of level 2 GWSURF3A.205 N_SQAV = ( (PEXNER(I,K)-P_EXNER_CENTRE(I,KL))*N_SQ(I,KU)+ GWSURF3A.206 & (P_EXNER_CENTRE(I,KL) - PEXNER(I,K+1))*N_SQ(I,KL) ) GWSURF3A.207 & / ( PEXNER(I,K) - PEXNER(I,K+1) ) GWSURF3A.208 GWSURF3A.209 SPEED = U(I,2)*U(I,2) + V(I,2)*V(I,2) GWSURF3A.210 IF ( N_SQAV .LE. 0.0 .OR. SPEED .LE. 0.0 ) THEN GWSURF3A.211 UOVERN = 0.0 GWSURF3A.212 LIFT(I)=0.0 GWSURF3A.213 ELSE GWSURF3A.214 UOVERN= SPEED / N_SQAV GWSURF3A.215 UOVERN = SQRT( UOVERN ) GWSURF3A.216 LIFT(I) = 1.4*SD_OROG(I) - 0.985*UOVERN GWSURF3A.217 ENDIF GWSURF3A.218 IF ( LIFT(I) .LE. 0.0 ) THEN GWSURF3A.219 K_LIFT(I) = 0 GWSURF3A.220 L_CONT(I) = .FALSE. GWSURF3A.221 ENDIF GWSURF3A.222 GWSURF3A.223 K_BOT(I) = 1 GWSURF3A.224 DEL_EXNER = PEXNER(I,K-1) - PEXNER(I,K) GWSURF3A.225 ZH(I) = CPBYG*THETA(I,K-1)*DEL_EXNER GWSURF3A.226 GWSURF3A.227 ENDIF ! k=2 GWSURF3A.228 !------------------------------------------------------------------ GWSURF3A.229 ! Substitute in Eqn 7. Orographic height Hm = 1.4*SD_OROG(I) GWSURF3A.230 !------------------------------------------------------------------ GWSURF3A.231 DEL_EXNER = PEXNER(I,K) - PEXNER(I,K+1) GWSURF3A.232 ZH(I) = ZH(I) + CPBYG*THETA(I,K)*DEL_EXNER GWSURF3A.233 IF ( L_CONT(I) .AND. GWSURF3A.234 * (ZH(I).GT.LIFT(I) .OR. ZH(I).GT.750.) ) THEN GWSURF3A.235 K_LIFT(I) = K GWSURF3A.236 K_BOT(I) = K GWSURF3A.237 L_CONT(I) = .FALSE. GWSURF3A.238 ENDIF GWSURF3A.239 !------------------------------------------------------------------ GWSURF3A.240 ! Find top of mountains where flow is still impacted upon. GWSURF3A.241 !------------------------------------------------------------------ GWSURF3A.242 IF ( L_CONT2(I) .AND. GWSURF3A.243 * (ZH(I).GT.1.4*SD_OROG(I) .OR. ZH(I).GT.750.) ) THEN GWSURF3A.244 K_TOP(I) = K GWSURF3A.245 IF( K_TOP(I).LT.3 ) K_TOP(I)=3 GWSURF3A.246 IF( K_BOT(I).GE.K_TOP(I) ) K_BOT(I)=K_TOP(I)-1 GWSURF3A.247 L_CONT2(I) = .FALSE. GWSURF3A.248 ENDIF GWSURF3A.249 GWSURF3A.250 ENDDO ! Points GWSURF3A.251 ENDDO ! Levels 2 to K_Mount GWSURF3A.252 !--------------------------------------------------------------------- GWSURF3A.253 ! 1.2 Calculate average N, U ,V ,RHO over 'surface' integral between GWSURF3A.254 ! K_BOT and K_TOP as diagnosed above GWSURF3A.255 ! N_SQAV is linearised from N_SQ at layer boundaries GWSURF3A.256 !--------------------------------------------------------------------- GWSURF3A.257 DO K=2,K_MOUNT GWSURF3A.258 DO I=1,POINTS GWSURF3A.259 IF( K.GT.K_BOT(I) .AND. K.LE.K_TOP(I) ) THEN GWSURF3A.260 GWSURF3A.261 IF( K.EQ.K_BOT(I)+1 ) THEN GWSURF3A.262 ZH(I)=0.0 GWSURF3A.263 PU=PSTAR(I)*BKH(K) + AKH(K) GWSURF3A.264 PL=PSTAR(I)*BKH(K-1) + AKH(K-1) GWSURF3A.265 ! lower layer labelled KU GWSURF3A.266 P_EXNER_CENTRE(I,KU)= GWSURF3A.267 & P_EXNER_C( PEXNER(I,K),PEXNER(I,K-1),PU,PL,KAPPA ) GWSURF3A.268 PL=PU GWSURF3A.269 PU=PSTAR(I)*BKH(K+1) + AKH(K+1) GWSURF3A.270 ! upper layer labelled KL ready for next level stage GWSURF3A.271 P_EXNER_CENTRE(I,KL)= P_EXNER_C( GWSURF3A.272 & PEXNER(I,K+1),PEXNER(I,K),PU,PL,KAPPA) GWSURF3A.273 N_SQ(I,KL) = G*(THETA(I,K)-THETA(I,K-1))/(THETA(I,K)* GWSURF3A.274 & THETA(I,K-1)*(P_EXNER_CENTRE(I,KU)-P_EXNER_CENTRE(I,KL))* GWSURF3A.275 & CPBYG) GWSURF3A.276 ENDIF GWSURF3A.277 GWSURF3A.278 ! next level stage GWSURF3A.279 PU=PSTAR(I)*BKH(K+2) + AKH(K+2) GWSURF3A.280 PL=PSTAR(I)*BKH(K+1) + AKH(K+1) GWSURF3A.281 P_EXNER_CENTRE(I,KU)= GWSURF3A.282 & P_EXNER_C( PEXNER(I,K+2),PEXNER(I,K+1),PU,PL,KAPPA) GWSURF3A.283 N_SQ(I,KU) = G*(THETA(I,K+1)-THETA(I,K))/(THETA(I,K+1)* GWSURF3A.284 & THETA(I,K)*(P_EXNER_CENTRE(I,KL)-P_EXNER_CENTRE(I,KU))* GWSURF3A.285 & CPBYG) GWSURF3A.286 N_SQAV = ( (PEXNER(I,K)-P_EXNER_CENTRE(I,KL))*N_SQ(I,KU) + GWSURF3A.287 & (P_EXNER_CENTRE(I,KL) - PEXNER(I,K+1))*N_SQ(I,KL) ) GWSURF3A.288 & / ( PEXNER(I,K) - PEXNER(I,K+1) ) GWSURF3A.289 PU=PSTAR(I)*BKH(K) + AKH(K) GWSURF3A.290 RHO=( AK(K) + BK(K)*PSTAR(I) )/( R*THETA(I,K)* GWSURF3A.291 & P_EXNER_C( PEXNER(I,K+1),PEXNER(I,K),PL,PU,KAPPA)) GWSURF3A.292 GWSURF3A.293 !-------------------------------------------------------------------- GWSURF3A.294 ! Average 'surface' quantities with pressure GWSURF3A.295 !-------------------------------------------------------------------- GWSURF3A.296 DELTA_P = PSTAR(I)*BKH(K) + AKH(K) - PL GWSURF3A.297 DELTA_P_SUM(I) = DELTA_P_SUM(I) + DELTA_P GWSURF3A.298 NSQ_S(I)=NSQ_S(I)+( N_SQAV-NSQ_S(I))*DELTA_P/DELTA_P_SUM(I) GWSURF3A.299 RHO_S(I)=RHO_S(I)+( RHO - RHO_S(I) )*DELTA_P/DELTA_P_SUM(I) GWSURF3A.300 U_S(I) =U_S(I) +( U(I,K)-U_S(I) )*DELTA_P/DELTA_P_SUM(I) GWSURF3A.301 V_S(I) =V_S(I) +( V(I,K)-V_S(I) )*DELTA_P/DELTA_P_SUM(I) GWSURF3A.302 GWSURF3A.303 ENDIF ! H_Jump and L_Cont GWSURF3A.304 ENDDO ! Points GWSURF3A.305 ! Rename lower centre array as upper centre ready for next level GWSURF3A.306 KK=KU GWSURF3A.307 KU=KL GWSURF3A.308 KL=KK GWSURF3A.309 ENDDO ! Levels 2 to K_Trop GWSURF3A.310 GWSURF3A.311 !------------------------------------------------------------------ GWSURF3A.312 ! 2.0 Begin calulation of surface stress GWSURF3A.313 !----------------------------------------------------------------- GWSURF3A.314 DO I=1,POINTS GWSURF3A.315 GWSURF3A.316 SPEED = U_S(I)*U_S(I) + V_S(I)*V_S(I) GWSURF3A.317 GWSURF3A.318 IF ( SPEED .LE. 0.0 ) THEN GWSURF3A.319 S_X_OROG(I) = 0.0 GWSURF3A.320 S_Y_OROG(I) = 0.0 GWSURF3A.321 ELSE GWSURF3A.322 SPEED = SQRT(SPEED) GWSURF3A.323 ! Surf X/Y orog define orography as seen by the surface gravity wave GWSURF3A.324 S_X_OROG(I)= (U_S(I)*SIGMA_XX(I)+V_S(I)*SIGMA_XY(I)) /SPEED GWSURF3A.325 S_Y_OROG(I)= (U_S(I)*SIGMA_XY(I)+V_S(I)*SIGMA_YY(I)) /SPEED GWSURF3A.326 GWSURF3A.327 S_STRESS_SQ= S_X_OROG(I)*S_X_OROG(I)+S_Y_OROG(I)*S_Y_OROG(I) GWSURF3A.328 SPEEDCALC = U_S(I)*S_X_OROG(I) + V_S(I)*S_Y_OROG(I) GWSURF3A.329 IF ( S_STRESS_SQ .LE. 0.0 ) THEN GWSURF3A.330 SPEED = 0.0 GWSURF3A.331 ELSE GWSURF3A.332 SPEED = SPEEDCALC / SQRT( S_STRESS_SQ ) GWSURF3A.333 ! Speed component in dirn. of surface gravity wave GWSURF3A.334 ENDIF GWSURF3A.335 ENDIF GWSURF3A.336 GWSURF3A.337 !------------------------------------------------------------------ GWSURF3A.338 ! 2.1 Calculate BRUNT-VAISALA frequency Eqn 1,2 GWSURF3A.339 !------------------------------------------------------------------ GWSURF3A.340 IF( NSQ_S(I).LE.0.0 .OR. SPEED.LE.0.0 GWSURF3A.341 & .OR. SD_OROG(I).LE.0.0 ) THEN GWSURF3A.342 S_X_STRESS(I) = 0.0 GWSURF3A.343 S_Y_STRESS(I) = 0.0 GWSURF3A.344 TEST(I)=1.0 GWSURF3A.345 ! NO WAVES IF UNSTABLE OR IF NO OROGRAPHY GWSURF3A.346 ELSE GWSURF3A.347 N = SQRT( NSQ_S(I) ) GWSURF3A.348 GWSURF3A.349 !------------------------------------------------------------------ GWSURF3A.350 ! 2.2 Impose semi-emperical formula. LINEAR/SQUARE/CUBIC DRAG GWSURF3A.351 !------------------------------------------------------------------ GWSURF3A.352 H_SQ = 1.0 GWSURF3A.353 TEST(I) = N*SD_OROG(I) / SPEED GWSURF3A.354 IF( BETA1.GT.TEST(I) .AND. TEST(I).GE.ALPHA1 ) THEN GWSURF3A.355 H_SQ = TEST(I)*R_BETA GWSURF3A.356 ELSE IF( TEST(I).LT.ALPHA1 ) THEN GWSURF3A.357 H_SQ = TEST(I)*R_BETA*TEST(I)*R_ALPHA GWSURF3A.358 ENDIF GWSURF3A.359 GWSURF3A.360 !------------------------------------------------------------------ GWSURF3A.361 ! 2.3 Calculate 'SURFACE' STRESS GWSURF3A.362 !------------------------------------------------------------------ GWSURF3A.363 CALC= KAY*RHO_S(I)*(SPEED**3)*H_SQ/(N*SD_OROG(I)*SD_OROG(I)) GWSURF3A.364 S_X_STRESS(I) = S_X_OROG(I) * CALC GWSURF3A.365 S_Y_STRESS(I) = S_Y_OROG(I) * CALC GWSURF3A.366 GWSURF3A.367 ENDIF ! SPEED OR N OR OROG .LE. 0.0 ELSE GWSURF3A.368 END DO ! I=POINTS GWSURF3A.369 ! END LOOP POINTS GWSURF3A.370 GWSURF3A.371 GWSURF3A.372 RETURN GWSURF3A.373 END GWSURF3A.374 *ENDIF GWSURF3A.375