*IF DEF,A06_3A GWSATN3A.2 C ******************************COPYRIGHT****************************** GTS2F400.3655 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3656 C GTS2F400.3657 C Use, duplication or disclosure of this code is subject to the GTS2F400.3658 C restrictions as set forth in the contract. GTS2F400.3659 C GTS2F400.3660 C Meteorological Office GTS2F400.3661 C London Road GTS2F400.3662 C BRACKNELL GTS2F400.3663 C Berkshire UK GTS2F400.3664 C RG12 2SZ GTS2F400.3665 C GTS2F400.3666 C If no contract has been raised with this copy of the code, the use, GTS2F400.3667 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3668 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3669 C Modelling at the above address. GTS2F400.3670 C ******************************COPYRIGHT****************************** GTS2F400.3671 C GTS2F400.3672 ! SUBROUTINE GW_SATN: SATURATION HYPOTHESIS VERT. STRESS DISTRIBUTION GWSATN3A.3 ! GWSATN3A.4SUBROUTINE GW_SATN 2GWSATN3A.5 1 (PSTAR,PEXNER,THETA,U,V,S_X_STRESS,S_Y_STRESS,START_L,LEVELS GWSATN3A.6 2 ,POINTS,AKH,BKH,DELTA_AK,DELTA_BK,KAY,SD_OROG,H_O_LEV,H_JUMP GWSATN3A.7 3 ,H_CRIT,S_X_OROG,S_Y_OROG,DU_DT,DV_DT GWSATN3A.8 ! Diagnostics GWSATN3A.9 4 ,STRESS_UD,POINTS_STRESS_UD,STRESS_UD_ON GWSATN3A.10 5 ,STRESS_VD,POINTS_STRESS_VD,STRESS_VD_ON GWSATN3A.11 6 ,DU_DT_SATN,POINTS_DU_DT_SATN,DU_DT_SATN_ON GWSATN3A.12 7 ,DV_DT_SATN,POINTS_DV_DT_SATN,DV_DT_SATN_ON ) GWSATN3A.13 GWSATN3A.14 IMPLICIT NONE GWSATN3A.15 ! Description: GWSATN3A.16 ! TO CALCULATE STRESS PROFILE DUE TO SUBGRID-SCALE GWSATN3A.17 ! OROGRAPHIC LONG HYDROSTATIC WAVES. GWSATN3A.18 ! THE WAVES PROPOGATE VERTICALLY WITH STRESS INDEPENDENT GWSATN3A.19 ! OF HEIGHT UNLESS A CRITICAL LEVEL OR WAVE BREAKING IS GWSATN3A.20 ! DIAGNOSED. THE CRITICAL STRESS IS CALCULATED GWSATN3A.21 ! FROM WIND COMPONENT PARALLEL TO THE ORIGINAL SURFACE GWSATN3A.22 ! STRESS , NOT NECESSARILY PARALLEL TO SURFACE WIND. GWSATN3A.23 ! THE X AND Y COMPONENTS OF STRESS ARE TREATED GWSATN3A.24 ! INDEPENDANTLY BUT THE VECTOR CAN NOT TURN. GWSATN3A.25 ! IF HYDROLIC JUMP HAS BEEN DIAGNOSED THEN THIS GWSATN3A.26 ! ROUTINE STARTS FROM H_O_LEV AND EQUIVALENT STARTING GWSATN3A.27 ! STRESS OF A THIRD 'SURFACE' STRESS ,UNLESS A GWSATN3A.28 ! CRITICAL LAYER HAS ALREADY BEEN DIAGNOSED. GWSATN3A.29 ! DRAG ON MEAN FLOW IS CALCULATED FROM STRESS PROFILE. GWSATN3A.30 ! GWSATN3A.31 ! Method: UNIFIED MODEL DOCUMENTATION PAPER NO. ? GWSATN3A.32 ! THE EQUATIONS USED ARE (1),(2),(3),(4),(6) GWSATN3A.33 ! GWSATN3A.34 ! Current code owner: S.Webster ASW1F403.47 ! GWSATN3A.36 ! History: GWSATN3A.37 ! Version Date Comment GWSATN3A.38 ! 3.4 18/10/94 Original Code. J.R.Mitchell GWSATN3A.39 ! 4.0 04/09/95 Mod to prevent floating point exception caused ASW1F404.11 ! by divide by zero especially when run at ASW1F404.12 ! 32 bit precision. (J.Clifton) ASW1F404.13 ! Remove line of redundant code. (N.Farnon) ASW1F404.14 ! GWSATN3A.40 ! 4.1 27/03/96 Mod to ensure that x,y components of the ASW1F404.15 ! critical stress vector are correctly defined ASW1F404.16 ! (S.Webster) ASW1F404.17 ! ASW1F404.18 ! 4.4 19/09/97 Remove *IF -DEF,CRAY compile options. S.Webster ASW1F404.19 ! ASW1F404.20 ! ASW1F404.21 ! ASW1F404.22 ! Code Description: GWSATN3A.41 ! Language: Fortran 77 + common extensions GWSATN3A.42 ! This code is written to UMDP3 v6 programming standards. GWSATN3A.43 ! System component covered: ORIGINAL VERSION FOR CRAY Y-MP GWSATN3A.44 ! System task covered: PART OF P22 GWSATN3A.45 ! SUITABLE FOR SINGLE COLUMN USE,ROTATED GRIDS GWSATN3A.46 ! FURTHER ALTERATIONS MAY BE REQUIRED FOR AUTOTASKING EFFICIENCY GWSATN3A.47 GWSATN3A.48 ! Global Variables GWSATN3A.49 *CALL C_G
GWSATN3A.50 *CALL C_R_CP
GWSATN3A.51 ! Local constants GWSATN3A.52 *CALL C_GWAVE
GWSATN3A.53 ! Subroutine arguements; GWSATN3A.54 GWSATN3A.55 INTEGER GWSATN3A.56 * LEVELS !IN NUMBER OF MODEL LEVELS GWSATN3A.57 *,START_L !IN START LEVEL FOR WAVE-BREAKING TEST GWSATN3A.58 *,POINTS !IN NUMBER OF POINTS GWSATN3A.59 *,POINTS_STRESS_UD !IN ) No of land points in diagnostic GWSATN3A.60 *,POINTS_STRESS_VD !IN ) arrays for GW stress - u and v GWSATN3A.61 *,POINTS_DU_DT_SATN !IN ) No of land points in diagnostic GWSATN3A.62 *,POINTS_DV_DT_SATN !IN ) arrays for GW satn - du and dv GWSATN3A.63 *,H_O_LEV(POINTS) !IN LEVEL OF CRITICAL/JUMP HEIGHT GWSATN3A.64 GWSATN3A.65 LOGICAL GWSATN3A.66 * H_JUMP(POINTS) !IN TRUE IF POINT IS TO BE LINEARIZED GWSATN3A.67 *,H_CRIT(POINTS) !IN TRUE IF CRITICAL HEIGHT BEFORE JUMP GWSATN3A.68 *,STRESS_UD_ON !IN U stress diagnostic switch GWSATN3A.69 *,STRESS_VD_ON !IN V stress diagnostic switch GWSATN3A.70 *,DU_DT_SATN_ON !IN U accel (saturation) diagnostic switch GWSATN3A.71 *,DV_DT_SATN_ON !IN V accel (saturation) diagnostic switch GWSATN3A.72 GWSATN3A.73 REAL GWSATN3A.74 * PSTAR(POINTS) !IN PSTAR FIELD GWSATN3A.75 *,PEXNER(POINTS,LEVELS+1) !IN PEXNER GWSATN3A.76 *,THETA(POINTS,LEVELS) !IN THETA FIELD GWSATN3A.77 *,U(POINTS,LEVELS) !IN U FIELD GWSATN3A.78 *,V(POINTS,LEVELS) !IN V FIELD GWSATN3A.79 *,S_X_STRESS(POINTS) !IN 'SURFACE' X_STRESS GWSATN3A.80 *,S_Y_STRESS(POINTS) !IN 'SURFACE' Y_STRESS GWSATN3A.81 *,S_X_OROG(POINTS) !IN 'SURFACE' X_OROG GWSATN3A.82 *,S_Y_OROG(POINTS) !IN 'SURFACE' Y_OROG GWSATN3A.83 *,SD_OROG(POINTS) !IN STANDARD DEVIATION OF OROGRAPHY GWSATN3A.84 ! AKH,BKH DEFINE HYBRID VERTICAL COORDINATES P=A+BP*-LAYER EDGES, GWSATN3A.85 ! DELTA_AK,DELTA_BK DEFINE PRESSURE DIFFERENCES ACROSS LAYERS GWSATN3A.86 *,AKH(LEVELS+1) !IN VALUE AT LAYER BOUNDARY GWSATN3A.87 *,BKH(LEVELS+1) !IN VALUE AT LAYER BOUMDARY GWSATN3A.88 *,DELTA_AK(LEVELS) !IN DIFFERENCE ACROSS LAYER GWSATN3A.89 *,DELTA_BK(LEVELS) !IN DIFFERENCE ACROSS LAYER GWSATN3A.90 *,KAY !IN stress constant (m-1) GWSATN3A.91 *,DU_DT(POINTS,LEVELS) !OUT U-ACCELERATION GWSATN3A.92 *,DV_DT(POINTS,LEVELS) !OUT V-ACCELERATION GWSATN3A.93 ! Diagnostics GWSATN3A.94 REAL GWSATN3A.95 * DU_DT_SATN(POINTS_DU_DT_SATN,LEVELS) !U-ACCELN DIAGNOSTIC GWSATN3A.96 *,DV_DT_SATN(POINTS_DV_DT_SATN,LEVELS) !V-ACCELN DIAGNOSTIC GWSATN3A.97 *,STRESS_UD(POINTS_STRESS_UD,LEVELS+1) !U-STRESS DIAGNOSTIC GWSATN3A.98 *,STRESS_VD(POINTS_STRESS_VD,LEVELS+1) !V-STRESS DIAGNOSTIC GWSATN3A.99 GWSATN3A.100 ! Local parameters GWSATN3A.101 REAL CPBYG GWSATN3A.102 PARAMETER(CPBYG=CP/G) GWSATN3A.103 GWSATN3A.104 ! Local scalers GWSATN3A.105 REAL GWSATN3A.106 * RHO ! DENSITY AT LAYER BOUNDARY GWSATN3A.107 *,TB ! TEMPERATURE AT LAYER BOUNDARY GWSATN3A.108 *,DZB ! HEIGHT DIFFERENCE ACROSS LAYER BOUNDARY GWSATN3A.109 *,UB ! U-WIND AT LAYER BOUNDARY GWSATN3A.110 *,VB ! V-WIND AT LAYER BOUNDARY GWSATN3A.111 *,N ! BRUNT_VAISALA FREQUENCY GWSATN3A.112 *,N_SQ ! SQUARE OF BRUNT_VAISALA FREQUENCY GWSATN3A.113 *,C_X_STRESS ! CRITICAL X_STRESS (EQN 56) GWSATN3A.114 *,C_Y_STRESS ! CRITICAL Y_STRESS (EQN 56) GWSATN3A.115 *,S_STRESS_SQ ! SQUARE OF SURFACE STRESS GWSATN3A.116 *,S_STRESS ! MAGNITUDE OF SURFACE STRESS GWSATN3A.117 *,SPEEDCALC ! DOT PRODUCT CALCULATION FOR SPEED/STRESS GWSATN3A.118 *,DELTA_P ! DIFFERENCE IN PRESSURE ACROSS LAYER GWSATN3A.119 *,ALPHA1 ! ALLOWS SWAP OF ALPHA AND BETA GWSATN3A.120 *,BETA1 ! " GWSATN3A.121 *,DELTA_AK_SUM ! DELTA_AK SUMMED OVER LOWEST LAYERS UP TO START_L GWSATN3A.122 *,DELTA_BK_SUM ! DELTA_BK SUMMED OVER LOWEST LAYERS UP TO START_L GWSATN3A.123 *,PU,PL,P_EXNER_CENTRE GWSATN3A.124 INTEGER I,K ! LOOP COUNTER IN ROUTINE GWSATN3A.125 INTEGER KK,KL,KU,KT ! LEVEL COUNTERS IN ROUTINE GWSATN3A.126 INTEGER H_O_L ! DUMMY FOR H_O_LEV(I) GWSATN3A.127 GWSATN3A.128 ! Local dynamic arrays GWSATN3A.129 ! LOCAL WORKSPACE ARRAYS: 11 ARRAYS OF FULL FIELD LENGTH GWSATN3A.130 ! GWSATN3A.131 REAL GWSATN3A.136 * DZ(POINTS,3) ! HEIGHT DIFFERENCES IN EACH HALF LAYER GWSATN3A.137 *,T(POINTS,2) ! TEMPERATURES (LEVELS) GWSATN3A.138 *,X_STRESS(POINTS,2) ! X_STRESSES (LAYER BOUNDARIES) GWSATN3A.139 *,Y_STRESS(POINTS,2) ! Y_STRESSES (LAYER BOUNDARIES) GWSATN3A.140 *,X_S_CONST(POINTS) ! LEVEL INDEPEDANT CONSTS FOR CALCULATION GWSATN3A.141 *,Y_S_CONST(POINTS) ! OF CRITICAL STRESSES GWSATN3A.142 GWSATN3A.144 ! Function and subroutine calls GWSATN3A.145 *CALL P_EXNERC
GWSATN3A.146 GWSATN3A.147 !------------------------------------------------------------------- GWSATN3A.148 ! INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS: GWSATN3A.149 ! 1. START LEVEL PRELIMINARIES GWSATN3A.150 !------------------------------------------ GWSATN3A.151 GWSATN3A.152 CFPP$ NOCONCUR L GWSATN3A.153 ! TREAT LAYERS BELOW AND INCLUDING START_L AS ONE LAYER GWSATN3A.154 DELTA_AK_SUM = 0.0 GWSATN3A.155 DELTA_BK_SUM = 0.0 GWSATN3A.156 DO K=2,START_L GWSATN3A.157 DELTA_AK_SUM = DELTA_AK_SUM + DELTA_AK(K) GWSATN3A.158 DELTA_BK_SUM = DELTA_BK_SUM + DELTA_BK(K) GWSATN3A.159 END DO GWSATN3A.160 CFPP$ CONCUR GWSATN3A.161 GWSATN3A.162 !----------------------------------------------------------------- GWSATN3A.163 ! CODE ASSUMES ALPHA < BETA . SWAP IS POSSIBLE BECAUSE OF GWSATN3A.164 ! SYMMETRY OF CALCULATION ( SEE EQN(55), DOC ) GWSATN3A.165 !---------------------------------------------------------------- GWSATN3A.166 IF( ALPHA.GT.BETA ) THEN GWSATN3A.167 ALPHA1 = BETA GWSATN3A.168 BETA1 = ALPHA GWSATN3A.169 ELSE GWSATN3A.170 ALPHA1 = ALPHA GWSATN3A.171 BETA1 = BETA GWSATN3A.172 ENDIF GWSATN3A.173 GWSATN3A.174 KL=1 GWSATN3A.175 KU=2 GWSATN3A.176 KT=3 GWSATN3A.177 GWSATN3A.178 DO I=1,POINTS GWSATN3A.179 GWSATN3A.180 IF( H_JUMP(I) .AND. H_CRIT(I) ) THEN GWSATN3A.181 X_STRESS(I,KL) = 0.0 GWSATN3A.182 Y_STRESS(I,KL) = 0.0 GWSATN3A.183 H_O_L=H_O_LEV(I) GWSATN3A.184 GWSATN3A.185 ELSE IF( H_JUMP(I) ) THEN GWSATN3A.186 X_STRESS(I,KL) = S_X_STRESS(I)/3.0 GWSATN3A.187 Y_STRESS(I,KL) = S_Y_STRESS(I)/3.0 GWSATN3A.188 H_O_L=H_O_LEV(I) GWSATN3A.189 PU=PSTAR(I)*BKH(H_O_L+1) + AKH(H_O_L+1) GWSATN3A.190 PL=PSTAR(I)*BKH(H_O_L) + AKH(H_O_L) GWSATN3A.191 P_EXNER_CENTRE= GWSATN3A.192 & P_EXNER_C( PEXNER(I,H_O_L+1),PEXNER(I,H_O_L),PU,PL,KAPPA) GWSATN3A.193 GWSATN3A.194 DZ(I,KL) = (P_EXNER_CENTRE - PEXNER(I,H_O_L+1)) GWSATN3A.195 * *THETA(I,H_O_L)*CPBYG GWSATN3A.196 T(I,KL) = P_EXNER_CENTRE*THETA(I,H_O_L) GWSATN3A.197 DZ(I,KT) = DZ(I,KL) GWSATN3A.198 T(I,KU) = T(I,KL) GWSATN3A.199 GWSATN3A.200 ELSE GWSATN3A.201 X_STRESS(I,KL) = S_X_STRESS(I) GWSATN3A.202 Y_STRESS(I,KL) = S_Y_STRESS(I) GWSATN3A.203 PU=PSTAR(I)*BKH(START_L+1) + AKH(START_L+1) GWSATN3A.204 PL=PSTAR(I)*BKH(START_L) + AKH(START_L) GWSATN3A.205 P_EXNER_CENTRE= GWSATN3A.206 & P_EXNER_C( PEXNER(I,START_L+1),PEXNER(I,START_L),PU,PL,KAPPA) GWSATN3A.207 GWSATN3A.208 DZ(I,KL) = (P_EXNER_CENTRE - PEXNER(I,START_L+1)) GWSATN3A.209 * *THETA(I,START_L)*CPBYG GWSATN3A.210 T(I,KL) = P_EXNER_CENTRE*THETA(I,START_L) GWSATN3A.211 GWSATN3A.212 ENDIF GWSATN3A.213 GWSATN3A.214 !------------------------------------------------------------------ GWSATN3A.215 ! 1.1 CALCULATE LEVEL INDEPENDANT STRESS CONSTANTS FOR SECTION 2.2 GWSATN3A.216 !------------------------------------------------------------------ GWSATN3A.217 S_STRESS_SQ = S_X_STRESS(I)**2 + S_Y_STRESS(I)**2 GWSATN3A.218 S_STRESS=SQRT(S_STRESS_SQ) ACL0F400.7 IF((BETA*SD_OROG(I)*SD_OROG(I)*S_STRESS_SQ*S_STRESS).LE.1.0E-30 ACL0F400.8 & .OR.SD_OROG(I).LE.0.0 .OR. S_STRESS_SQ.LE.0.0 )THEN ACL0F400.9 X_S_CONST(I) = 0.0 GWSATN3A.220 Y_S_CONST(I) = 0.0 GWSATN3A.221 ELSE GWSATN3A.222 Y_S_CONST(I) = KAY*ALPHA/ GWSATN3A.224 * (BETA*SD_OROG(I)*SD_OROG(I)*S_STRESS_SQ*S_STRESS) GWSATN3A.225 X_S_CONST(I) = Y_S_CONST(I)*S_X_OROG(I) GWSATN3A.226 Y_S_CONST(I) = Y_S_CONST(I)*S_Y_OROG(I) GWSATN3A.227 ASW2F401.6 ASW2F401.7 ENDIF GWSATN3A.234 GWSATN3A.235 END DO GWSATN3A.236 GWSATN3A.237 IF( STRESS_UD_ON ) THEN GWSATN3A.238 DO I=1,POINTS GWSATN3A.239 IF( H_JUMP(I) ) THEN GWSATN3A.240 STRESS_UD(I,H_O_LEV(I)) = X_STRESS(I,KL) GWSATN3A.241 ELSE GWSATN3A.242 STRESS_UD(I,START_L) = X_STRESS(I,KL) GWSATN3A.243 ENDIF GWSATN3A.244 END DO GWSATN3A.245 ENDIF GWSATN3A.246 GWSATN3A.247 IF( STRESS_VD_ON ) THEN GWSATN3A.248 DO I=1,POINTS GWSATN3A.249 IF( H_JUMP(I) ) THEN GWSATN3A.250 STRESS_VD(I,H_O_LEV(I)) = Y_STRESS(I,KL) GWSATN3A.251 ELSE GWSATN3A.252 STRESS_VD(I,START_L) = Y_STRESS(I,KL) GWSATN3A.253 ENDIF GWSATN3A.254 END DO GWSATN3A.255 ENDIF GWSATN3A.256 GWSATN3A.257 !------------------------------------------------------------------ GWSATN3A.258 ! 2 LOOP LEVELS GWSATN3A.259 !------------------------------------------------------------------ GWSATN3A.260 GWSATN3A.261 DO K=START_L+1,LEVELS GWSATN3A.262 GWSATN3A.263 GWSATN3A.264 DO I=1,POINTS GWSATN3A.265 GWSATN3A.266 X_STRESS(I,KU) = X_STRESS(I,KL) GWSATN3A.267 Y_STRESS(I,KU) = Y_STRESS(I,KL) GWSATN3A.268 GWSATN3A.269 IF( K .EQ. START_L+1 ) THEN GWSATN3A.270 DELTA_P = DELTA_AK_SUM+DELTA_BK_SUM*PSTAR(I) GWSATN3A.271 ELSE GWSATN3A.272 DELTA_P = DELTA_AK(K-1)+DELTA_BK(K-1)*PSTAR(I) GWSATN3A.273 END IF GWSATN3A.274 GWSATN3A.275 IF( (.NOT.H_JUMP(I)) .OR. K.GT.H_O_LEV(I) ) THEN GWSATN3A.276 GWSATN3A.277 IF( (X_STRESS(I,KL) .NE. 0.0) GWSATN3A.278 * .OR.(Y_STRESS(I,KL) .NE. 0.0) ) THEN GWSATN3A.279 GWSATN3A.280 PU=PSTAR(I)*BKH(K+1) + AKH(K+1) GWSATN3A.281 PL=PSTAR(I)*BKH(K) + AKH(K) GWSATN3A.282 P_EXNER_CENTRE= GWSATN3A.283 & P_EXNER_C( PEXNER(I,K+1),PEXNER(I,K),PU,PL,KAPPA) GWSATN3A.284 GWSATN3A.285 ! lower half height of upper layer GWSATN3A.286 DZ(I,KU) = (PEXNER(I,K) - P_EXNER_CENTRE)*THETA(I,K) GWSATN3A.287 * *CPBYG GWSATN3A.288 ! upper half height of upper layer GWSATN3A.289 DZ(I,KT) = (P_EXNER_CENTRE - PEXNER(I,K+1))*THETA(I,K) GWSATN3A.290 * *CPBYG GWSATN3A.291 ! model level height difference GWSATN3A.292 DZB = DZ(I,KU) + DZ(I,KL) GWSATN3A.293 UB = (DZ(I,KU)*U(I,K-1)+DZ(I,KL)*U(I,K)) / DZB GWSATN3A.294 VB = (DZ(I,KU)*V(I,K-1)+DZ(I,KL)*V(I,K)) / DZB GWSATN3A.295 T(I,KU) = P_EXNER_CENTRE*THETA(I,K) GWSATN3A.296 TB = (DZ(I,KU)*T(I,KL) + DZ(I,KL)*T(I,KU))/DZB GWSATN3A.297 RHO = ( AKH(K) + BKH(K)*PSTAR(I) )/(R*TB) GWSATN3A.298 GWSATN3A.299 !------------------------------------------------------------------ GWSATN3A.300 ! 2.2 CALCULATE BRUNT-VAISALA FREQUENCY GWSATN3A.301 !------------------------------------------------------------------ GWSATN3A.302 GWSATN3A.303 N_SQ = G*( THETA(I,K) - THETA(I,K-1) )*PEXNER(I,K)/ GWSATN3A.304 * ( TB*DZB ) GWSATN3A.305 GWSATN3A.306 IF( N_SQ .LE. 0.0 ) THEN GWSATN3A.307 ! SET STRESS TO ZERO IF UNSTABLE GWSATN3A.308 N_SQ = 0.0 GWSATN3A.309 X_STRESS(I,KU) = 0.0 GWSATN3A.310 Y_STRESS(I,KU) = 0.0 GWSATN3A.311 ELSE GWSATN3A.312 N = SQRT( N_SQ ) GWSATN3A.313 SPEEDCALC = UB*S_X_STRESS(I) + VB*S_Y_STRESS(I) GWSATN3A.314 C_Y_STRESS = (SPEEDCALC**3)*RHO/N GWSATN3A.315 C_X_STRESS = X_S_CONST(I)*C_Y_STRESS GWSATN3A.316 C_Y_STRESS = Y_S_CONST(I)*C_Y_STRESS GWSATN3A.317 GWSATN3A.318 !------------------------------------------------------------------ GWSATN3A.319 ! 2.3 CALCULATE CRITICAL STRESS FOR GWSATN3A.320 ! EACH COMPONENT (EQN 6) GWSATN3A.321 ! TEST FOR WAVE-BREAKING GWSATN3A.322 ! AND MODIFY STRESS AT UPPER LAYER BOUNDARY GWSATN3A.323 !------------------------------------------------------------------ GWSATN3A.324 GWSATN3A.325 IF( X_STRESS(I,KL) .GT. 0.0 ) THEN GWSATN3A.326 IF( C_X_STRESS .LT. 0.0 ) THEN GWSATN3A.327 C_X_STRESS = 0.0 GWSATN3A.328 ENDIF GWSATN3A.329 GWSATN3A.330 IF( C_X_STRESS .LT. X_STRESS(I,KU) ) THEN GWSATN3A.331 X_STRESS(I,KU) = C_X_STRESS GWSATN3A.332 ENDIF GWSATN3A.333 ENDIF GWSATN3A.334 IF( X_STRESS(I,KL) .LT. 0.0 ) THEN GWSATN3A.335 IF( C_X_STRESS .GT. 0.0 ) THEN GWSATN3A.336 C_X_STRESS = 0.0 GWSATN3A.337 ENDIF GWSATN3A.338 GWSATN3A.339 IF( C_X_STRESS .GT. X_STRESS(I,KU) ) THEN GWSATN3A.340 X_STRESS(I,KU) = C_X_STRESS GWSATN3A.341 ENDIF GWSATN3A.342 ENDIF GWSATN3A.343 GWSATN3A.344 IF( Y_STRESS(I,KL) .GT. 0.0 ) THEN GWSATN3A.345 IF( C_Y_STRESS .LT. 0.0 ) THEN GWSATN3A.346 C_Y_STRESS = 0.0 GWSATN3A.347 ENDIF GWSATN3A.348 GWSATN3A.349 IF( C_Y_STRESS .LT. Y_STRESS(I,KU) ) THEN GWSATN3A.350 Y_STRESS(I,KU) = C_Y_STRESS GWSATN3A.351 ENDIF GWSATN3A.352 ENDIF GWSATN3A.353 IF( Y_STRESS(I,KL) .LT. 0.0 ) THEN GWSATN3A.354 IF( C_Y_STRESS .GT. 0.0 ) THEN GWSATN3A.355 C_Y_STRESS = 0.0 GWSATN3A.356 ENDIF GWSATN3A.357 GWSATN3A.358 IF( C_Y_STRESS .GT. Y_STRESS(I,KU) ) THEN GWSATN3A.359 Y_STRESS(I,KU) = C_Y_STRESS GWSATN3A.360 ENDIF GWSATN3A.361 ENDIF GWSATN3A.362 GWSATN3A.363 END IF ! (N_SQ < 0) ELSE N_SQ > 0 GWSATN3A.364 GWSATN3A.365 END IF ! STRESS X OR Y NE 0 GWSATN3A.366 GWSATN3A.367 END IF ! no jump or above jump height GWSATN3A.368 GWSATN3A.369 !------------------------------------------------------------------ GWSATN3A.370 ! 2.4 CALCULATE DRAG FROM VERTICAL STRESS CONVERGENCE GWSATN3A.371 ! AND ACCELERATIONS FOR WIND COMPONENTS GWSATN3A.372 !------------------------------------------------------------------ GWSATN3A.373 GWSATN3A.374 DU_DT(I,K-1) = G*(X_STRESS(I,KL) - X_STRESS(I,KU))/DELTA_P GWSATN3A.375 DV_DT(I,K-1) = G*(Y_STRESS(I,KL) - Y_STRESS(I,KU))/DELTA_P GWSATN3A.376 GWSATN3A.377 END DO GWSATN3A.378 GWSATN3A.379 ! Diagnostics GWSATN3A.380 IF( STRESS_UD_ON ) THEN GWSATN3A.381 DO I=1,POINTS GWSATN3A.382 STRESS_UD(I,K) = X_STRESS(I,KU) GWSATN3A.383 END DO GWSATN3A.384 ENDIF GWSATN3A.385 GWSATN3A.386 IF( STRESS_VD_ON ) THEN GWSATN3A.387 DO I=1,POINTS GWSATN3A.388 STRESS_VD(I,K) = Y_STRESS(I,KU) GWSATN3A.389 END DO GWSATN3A.390 ENDIF GWSATN3A.391 GWSATN3A.392 IF( DU_DT_SATN_ON ) THEN GWSATN3A.393 DO I=1,POINTS GWSATN3A.394 DU_DT_SATN(I,K-1) = DU_DT(I,K-1) GWSATN3A.395 END DO GWSATN3A.396 ENDIF GWSATN3A.397 GWSATN3A.398 IF( DV_DT_SATN_ON ) THEN GWSATN3A.399 DO I=1,POINTS GWSATN3A.400 DV_DT_SATN(I,K-1) = DV_DT(I,K-1) GWSATN3A.401 END DO GWSATN3A.402 ENDIF GWSATN3A.403 GWSATN3A.404 ! Swap storage for lower and upper layers GWSATN3A.405 KK=KL GWSATN3A.406 KL=KU GWSATN3A.407 KU=KK GWSATN3A.408 GWSATN3A.409 ! Replace top half height of lower layer ready for next pass GWSATN3A.410 DO I=1,POINTS GWSATN3A.411 DZ(I,KL)=DZ(I,KT) GWSATN3A.412 END DO GWSATN3A.413 GWSATN3A.414 END DO GWSATN3A.415 ! END LOOP LEVELS GWSATN3A.416 GWSATN3A.417 ! GWSATN3A.418 !------------------------------------------------------------------ GWSATN3A.419 ! 3.0 TOP OF MODEL. SET ACCELERATION SAME AS PENULTIMATE LAYER GWSATN3A.420 ! WITH PROVISO THAT STRESS COMPONENTS DO NOT PASS THROUGH 0 GWSATN3A.421 !------------------------------------------------------------------ GWSATN3A.422 GWSATN3A.423 DO I=1,POINTS GWSATN3A.424 DELTA_P = DELTA_AK(LEVELS) + DELTA_BK(LEVELS)*PSTAR(I) GWSATN3A.425 GWSATN3A.426 X_STRESS(I,KU) = X_STRESS(I,KL) - DU_DT(I,LEVELS-1)*DELTA_P/G GWSATN3A.427 IF( (X_STRESS(I,KU).LT.0.0) .AND. (X_STRESS(I,KL).GT.0.0) ) GWSATN3A.428 & X_STRESS(I,KU) = 0.0 GWSATN3A.429 IF( (X_STRESS(I,KU).GT.0.0) .AND. (X_STRESS(I,KL).LT.0.0) ) GWSATN3A.430 & X_STRESS(I,KU) = 0.0 GWSATN3A.431 GWSATN3A.432 Y_STRESS(I,KU) = Y_STRESS(I,KL) - DV_DT(I,LEVELS-1)*DELTA_P/G GWSATN3A.433 IF( (Y_STRESS(I,KU).LT.0.0) .AND. (Y_STRESS(I,KL).GT.0.0) ) GWSATN3A.434 & Y_STRESS(I,KU) = 0.0 GWSATN3A.435 IF( (Y_STRESS(I,KU).GT.0.0) .AND. (Y_STRESS(I,KL).LT.0.0) ) GWSATN3A.436 & Y_STRESS(I,KU) = 0.0 GWSATN3A.437 GWSATN3A.438 DU_DT(I,LEVELS) = G*(X_STRESS(I,KL) - X_STRESS(I,KU))/DELTA_P GWSATN3A.439 DV_DT(I,LEVELS) = G*(Y_STRESS(I,KL) - Y_STRESS(I,KU))/DELTA_P GWSATN3A.440 GWSATN3A.441 END DO GWSATN3A.442 GWSATN3A.443 ! Diagnostics GWSATN3A.444 IF( STRESS_UD_ON ) THEN GWSATN3A.445 DO I=1,POINTS GWSATN3A.446 STRESS_UD(I,LEVELS+1) = X_STRESS(I,KU) GWSATN3A.447 END DO GWSATN3A.448 ENDIF GWSATN3A.449 GWSATN3A.450 IF( STRESS_VD_ON ) THEN GWSATN3A.451 DO I=1,POINTS GWSATN3A.452 STRESS_VD(I,LEVELS+1) = Y_STRESS(I,KU) GWSATN3A.453 END DO GWSATN3A.454 ENDIF GWSATN3A.455 GWSATN3A.456 IF( DU_DT_SATN_ON ) THEN GWSATN3A.457 DO I=1,POINTS GWSATN3A.458 DU_DT_SATN(I,LEVELS) = DU_DT(I,LEVELS) GWSATN3A.459 END DO GWSATN3A.460 ENDIF GWSATN3A.461 GWSATN3A.462 IF( DV_DT_SATN_ON ) THEN GWSATN3A.463 DO I=1,POINTS GWSATN3A.464 DV_DT_SATN(I,LEVELS) = DV_DT(I,LEVELS) GWSATN3A.465 END DO GWSATN3A.466 ENDIF GWSATN3A.467 GWSATN3A.468 RETURN GWSATN3A.469 END GWSATN3A.470 GWSATN3A.471 *ENDIF GWSATN3A.472