*IF DEF,A06_3A,OR,DEF,A06_3B ADR2F405.2 C ******************************COPYRIGHT****************************** GTS2F400.3673 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.3674 C GTS2F400.3675 C Use, duplication or disclosure of this code is subject to the GTS2F400.3676 C restrictions as set forth in the contract. GTS2F400.3677 C GTS2F400.3678 C Meteorological Office GTS2F400.3679 C London Road GTS2F400.3680 C BRACKNELL GTS2F400.3681 C Berkshire UK GTS2F400.3682 C RG12 2SZ GTS2F400.3683 C GTS2F400.3684 C If no contract has been raised with this copy of the code, the use, GTS2F400.3685 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.3686 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.3687 C Modelling at the above address. GTS2F400.3688 C ******************************COPYRIGHT****************************** GTS2F400.3689 C GTS2F400.3690 ! SUBROUTINE GW_SCOR TO DELINEATE VERT SCORER PROFILE FOR GW_LEE/GW_VERT GWSCOR3A.3 ! GWSCOR3A.4SUBROUTINE GW_SCOR 2GWSCOR3A.5 1 (PSTAR,PEXNER,THETA,U,V,LEVELS,START_L,H_JUMP,POINTS,AKH,BKH GWSCOR3A.6 2 ,UNIT_X,UNIT_Y,TRANS,K_LEE,H_LEE,LSQ_LEE,L_LEE) GWSCOR3A.7 GWSCOR3A.8 IMPLICIT NONE GWSCOR3A.9 ! Description: TO CALCULATE THE PROFILE OF THE SCORER PARAMETER GWSCOR3A.10 ! TO CALCULATE LEE HEIGHT AND TRANSMITTION COEFFICIENT GWSCOR3A.11 ! GWSCOR3A.12 ! Method: UNIFIED MODEL DOCUMENTATION PAPER NO. ? GWSCOR3A.13 ! THE EQUATIONS USED ARE eq 11,30,49. GWSCOR3A.14 ! GWSCOR3A.15 ! Current code owner: S.Webster ASW1F403.49 ASW1F403.50 ! GWSCOR3A.17 ! History: GWSCOR3A.18 ! Version Date Comment GWSCOR3A.19 ! 3.4 18/10/94 Original Code. J.R.Mitchell GWSCOR3A.20 ! 4.4 19/09/97 Remove *IF -DEF,CRAY compile options. S.Webster ASW1F404.9 !LL 4.5 14/05/98 Add Fujitsu directive to stop potential zero GRB0F405.144 !LL divide caused by optimizer. RBarnes@ecmwf.int GRB0F405.145 ! GWSCOR3A.21 ! Code Description: GWSCOR3A.22 ! Language: Fortran 77 + common extensions GWSCOR3A.23 ! This code is written to UMDP3 v6 programming standards. GWSCOR3A.24 ! System component covered: ORIGINAL VERSION FOR CRAY Y-MP GWSCOR3A.25 ! System task covered: PART OF P22 GWSCOR3A.26 ! SUITABLE FOR SINGLE COLUMN USE,ROTATED GRIDS GWSCOR3A.27 ! FURTHER ALTERATIONS MAY BE REQUIRED FOR AUTOTASKING EFFICIENCY GWSCOR3A.28 GWSCOR3A.29 ! Global Variables GWSCOR3A.30 *CALL C_G
GWSCOR3A.31 *CALL C_R_CP
GWSCOR3A.32 ! Local constants GWSCOR3A.33 *CALL C_GWAVE
GWSCOR3A.34 ! Subroutine arguements: GWSCOR3A.35 GWSCOR3A.36 INTEGER GWSCOR3A.37 * LEVELS !IN NUMBER OF MODEL LEVELS GWSCOR3A.38 *,START_L !IN START LEVEL FOR GWD CALCULATIONS GWSCOR3A.39 *,POINTS !IN NUMBER OF POINTS GWSCOR3A.40 *,K_LEE(POINTS,2) !OUT MODEL LEVEL OF LEE HEIGHT AND TOP GWSCOR3A.41 GWSCOR3A.42 REAL GWSCOR3A.43 * PSTAR(POINTS) !IN PSTAR FIELD GWSCOR3A.44 *,PEXNER(POINTS,LEVELS+1) !IN PEXNER GWSCOR3A.45 *,THETA(POINTS,LEVELS) !IN THETA FIELD GWSCOR3A.46 *,U(POINTS,LEVELS) !IN U FIELD GWSCOR3A.47 *,V(POINTS,LEVELS) !IN V FIELD GWSCOR3A.48 *,UNIT_X(POINTS) !IN X_COMPNT OF UNIT STRESS VECTOR GWSCOR3A.49 *,UNIT_Y(POINTS) !IN Y_COMPNT OF UNIT STRESS VECTOR GWSCOR3A.50 *,TRANS(POINTS) !OUT TRANSMITION COEFFICIENT GWSCOR3A.51 *,LSQ_LEE(POINTS,2) !OUT L1 SQUARED AND L2 SQUARED FOR GWSCOR3A.52 * ! LEE WAVE CALCULATIONS GWSCOR3A.53 *,H_LEE(POINTS) !OUT LEE HEIGHT TO TOP OF LEVEL GWSCOR3A.54 ! AKH,BKH DEFINE HYBRID VERTICAL COORDINATES P=A+BP*-LAYER EDGES, GWSCOR3A.55 ! DELTA_AK,DELTA_BK DEFINE PRESSURE DIFFERENCES ACROSS LAYERS GWSCOR3A.56 *,AKH(LEVELS+1) !IN VALUE AT LAYER BOUNDARY GWSCOR3A.57 *,BKH(LEVELS+1) !IN VALUE AT LAYER BOUMDARY GWSCOR3A.58 GWSCOR3A.59 LOGICAL GWSCOR3A.60 * H_JUMP(POINTS) !IN TRUE IF HYDROLIC JUMP REGIME GWSCOR3A.61 *,L_LEE(POINTS) !OUT TRUE IF LEE WAVE/TRANS POINT GWSCOR3A.62 GWSCOR3A.63 ! Local parameters GWSCOR3A.64 REAL CPBYG GWSCOR3A.65 PARAMETER(CPBYG=CP/G) GWSCOR3A.66 ! Local scalers GWSCOR3A.67 REAL GWSCOR3A.68 * DEL_EXNER,DEL_EXNER_KL,DEL_EXNER_KU, ! EXNER DIFFERENCE GWSCOR3A.69 * PU,PL GWSCOR3A.70 GWSCOR3A.71 LOGICAL FLAG GWSCOR3A.72 GWSCOR3A.73 INTEGER I,K,M ! LOOP COUNTER IN ROUTINE GWSCOR3A.74 INTEGER KK,KL,KU ! LEVEL COUNTERS IN ROUTINE GWSCOR3A.75 GWSCOR3A.76 ! Local dynamic arrays GWSCOR3A.77 ! LOCAL WORKSPACE ARRAYS: LEVELS+8 ARRAYS OF FULL FIELD LENGTH GWSCOR3A.78 ! GWSCOR3A.79 INTEGER GWSCOR3A.85 * K_LEE_LIM(LEVELS-3) ! TOP MODEL LEVEL HEIGHT FOR CALCULATION GWSCOR3A.86 * ! OF L_SQ(I,2), FOR EACH POSSIBLE LEE LEVEL GWSCOR3A.87 *,K_LEE_MAX ! MAXIMUM LEVEL FOR FINDING LEE WAVE HEIGHT GWSCOR3A.88 *,K_TRANS ! LEVEL OF L_SQ SPLIT FOR CALCULATION OF GWSCOR3A.89 * ! TRANSMITION COEFFICIENT GWSCOR3A.90 GWSCOR3A.91 REAL GWSCOR3A.92 * ALPHA_L,PHASE ! LINKED LEE WAVE PARAMETER GWSCOR3A.93 *,DELTA_Z ! THICKNESS OF LAYER BETWEEN HALF LEVELS GWSCOR3A.94 *,P_EXNER_CENTRE(POINTS,2) ! EXNER PRESSURE AT LAYER CENTRES GWSCOR3A.95 *,N_SQ(POINTS,2) ! SQUARE OF BRUNT_VAISALA FREQUENCY AT GWSCOR3A.96 * ! LAYER BOUNDARIES GWSCOR3A.97 *,N_SQAV ! CENTRE LAYER AV. OF BOUYANCY FREQ SQ GWSCOR3A.98 *,ZH(POINTS) ! TOTAL HEIGHT OF JUMP CALCUALTION GWSCOR3A.99 *,P(LEVELS-3) ! PRESSURE AT LEVEL TOP BOUNDARIES GWSCOR3A.100 * ! FOR STANDARD POINT GWSCOR3A.101 *,P_LIM(LEVELS-3) ! PRESSURE TOP BOUNDARIES FOR GWSCOR3A.102 * ! K_LEE_LIM GWSCOR3A.103 *,UKP1 ! COMPONENT OF WIND AT LAYER K+1 IN GWSCOR3A.104 * ! DIRN. OF SURFACE STRESS GWSCOR3A.105 *,UK ! COMPONENT OF WIND AT LAYER K GWSCOR3A.106 *,UKM1 ! COMPONENT OF WIND AT LAYER K-1 GWSCOR3A.107 *,DU_DZ(POINTS,2) ! DELTAN OVER DELTAU - LAYER BOUNDARY GWSCOR3A.108 *,LSQ_SUM(POINTS,2) ! L1 SQUARED AND L2 SQUARED SUMMED GWSCOR3A.109 *,LSQ(POINTS,LEVELS-3) ! L SQUARED AT A LEVEL. GWSCOR3A.110 *,LSQ1, LSQ2, L1, L2 ! L CALCULATIONS FOR TRANSMITTION COEFF GWSCOR3A.111 *,CONST,CALC ! CALCULATIONS GWSCOR3A.112 GWSCOR3A.114 ! Function and subroutine calls GWSCOR3A.115 *CALL P_EXNERC
GWSCOR3A.116 GWSCOR3A.117 !------------------------------------------------------------------- GWSCOR3A.118 ! 1. Parameter calculation. Tan(0.75*PI) = -1.0 GWSCOR3A.119 ! Note ATAN produces answer in range -PI/2 to PI/2 GWSCOR3A.120 !-------------------------------------------------------------------- GWSCOR3A.121 PHASE=LEE_PHASE*3.14159 GWSCOR3A.122 ALPHA_L= TAN(PHASE) GWSCOR3A.123 CONST= ALPHA_L/( PHASE*SQRT( 1+ALPHA_L**2 ) ) GWSCOR3A.124 KL=1 GWSCOR3A.125 KU=2 GWSCOR3A.126 !--------------------------------------------------------------------- GWSCOR3A.127 ! Find approximate level of 0.6 tropopause height - maximum lee limit GWSCOR3A.128 ! Find approx half tropopause height - transmittion coefficient top GWSCOR3A.129 !--------------------------------------------------------------------- GWSCOR3A.130 FLAG = .TRUE. GWSCOR3A.131 K_LEE_MAX = LEVELS-4 GWSCOR3A.132 K_TRANS = K_LEE_MAX GWSCOR3A.133 DO K= 3,LEVELS-4 GWSCOR3A.134 IF (FLAG) THEN GWSCOR3A.135 PU=100000.*BKH(K+1) + AKH(K+1) GWSCOR3A.136 IF ( PU .GT. 50000. ) THEN GWSCOR3A.137 K_TRANS = K GWSCOR3A.138 ELSE IF ( PU .LT. 45000. ) THEN GWSCOR3A.139 K_LEE_MAX = K GWSCOR3A.140 FLAG = .FALSE. GWSCOR3A.141 ENDIF GWSCOR3A.142 ENDIF GWSCOR3A.143 ENDDO GWSCOR3A.144 !--------------------------------------------------------------------- GWSCOR3A.145 ! Find array of top level scorer calculation limits K_LEE_LIM, for each GWSCOR3A.146 ! possible lee level by using the same standard point as above. GWSCOR3A.147 !--------------------------------------------------------------------- GWSCOR3A.148 DO K= 2,LEVELS-3 GWSCOR3A.149 P(K)=100000.*BKH(K+1) + AKH(K+1) GWSCOR3A.150 IF ( K .LE. K_LEE_MAX ) THEN GWSCOR3A.151 P_LIM(K) = 2*P(K) - 100000. GWSCOR3A.152 K_LEE_LIM(K) = LEVELS-3 GWSCOR3A.153 ENDIF GWSCOR3A.154 ENDDO GWSCOR3A.155 GWSCOR3A.156 DO M= 2,K_LEE_MAX GWSCOR3A.157 DO K= M+1,LEVELS-3 GWSCOR3A.158 IF ( P(K) .LT. P_LIM(M) .AND. GWSCOR3A.159 * K_LEE_LIM(M).EQ.LEVELS-3 ) THEN GWSCOR3A.160 K_LEE_LIM(M) = K GWSCOR3A.161 ENDIF GWSCOR3A.162 ENDDO GWSCOR3A.163 ENDDO GWSCOR3A.164 K_LEE_LIM(1)=2 GWSCOR3A.165 !--------------------------------------------------------------------- GWSCOR3A.166 ! Initialisation GWSCOR3A.167 !--------------------------------------------------------------------- GWSCOR3A.168 DO I=1,POINTS GWSCOR3A.169 K_LEE(I,1)=0 GWSCOR3A.170 K_LEE(I,2)=0 GWSCOR3A.171 IF( H_JUMP(I) ) THEN GWSCOR3A.172 L_LEE(I)=.FALSE. GWSCOR3A.173 ELSE GWSCOR3A.174 L_LEE(I)=.TRUE. GWSCOR3A.175 ENDIF GWSCOR3A.176 TRANS(I)=1.0 GWSCOR3A.177 ZH(I)=0.0 GWSCOR3A.178 ENDDO GWSCOR3A.179 GWSCOR3A.180 !--------------------------------------------------------------------- GWSCOR3A.181 ! Bottom Level calculation - Calculates L_SQ at level 2 GWSCOR3A.182 !--------------------------------------------------------------------- GWSCOR3A.183 DO I=1,POINTS GWSCOR3A.184 IF( L_LEE(I) ) THEN GWSCOR3A.185 PU=PSTAR(I)*BKH(2) + AKH(2) GWSCOR3A.186 PL=PSTAR(I)*BKH(1) + AKH(1) GWSCOR3A.187 !-------------- KU / KL reversed ready for next stage------------ GWSCOR3A.188 P_EXNER_CENTRE(I,KU)= GWSCOR3A.189 & P_EXNER_C( PEXNER(I,2),PEXNER(I,1),PU,PL,KAPPA) GWSCOR3A.190 PL=PU GWSCOR3A.191 PU=PSTAR(I)*BKH(3) + AKH(3) GWSCOR3A.192 P_EXNER_CENTRE(I,KL)= GWSCOR3A.193 & P_EXNER_C( PEXNER(I,3),PEXNER(I,2),PU,PL,KAPPA) GWSCOR3A.194 !------------------------------------------------------------- GWSCOR3A.195 N_SQ(I,KL) = G*(THETA(I,2)-THETA(I,1))/(THETA(I,2)* GWSCOR3A.196 & THETA(I,1)*(P_EXNER_CENTRE(I,KU)-P_EXNER_CENTRE(I,KL)) GWSCOR3A.197 & *CPBYG) GWSCOR3A.198 PL=PU GWSCOR3A.199 PU=PSTAR(I)*BKH(4) + AKH(4) GWSCOR3A.200 P_EXNER_CENTRE(I,KU)= GWSCOR3A.201 & P_EXNER_C( PEXNER(I,4),PEXNER(I,3),PU,PL,KAPPA) GWSCOR3A.202 N_SQ(I,KU) = G*(THETA(I,3)-THETA(I,2))/(THETA(I,3)* GWSCOR3A.203 & THETA(I,2)*(P_EXNER_CENTRE(I,KL)-P_EXNER_CENTRE(I,KU)) GWSCOR3A.204 & *CPBYG) GWSCOR3A.205 !-------------------------------------------------------------------- GWSCOR3A.206 ! N_SQAV at layer centre, interpolated from N_SQ(KL/KU) at boundaries GWSCOR3A.207 !-------------------------------------------------------------------- GWSCOR3A.208 N_SQAV = ( (PEXNER(I,2)-P_EXNER_CENTRE(I,KL))*N_SQ(I,KU) GWSCOR3A.209 & + (P_EXNER_CENTRE(I,KL) - PEXNER(I,3))*N_SQ(I,KL) ) GWSCOR3A.210 & / ( PEXNER(I,2) - PEXNER(I,3) ) GWSCOR3A.211 !-------------------------------------------------------------------- GWSCOR3A.212 ! Note U is component parallel to stress vector GWSCOR3A.213 !-------------------------------------------------------------------- GWSCOR3A.214 UKP1 = U(I,3)*UNIT_X(I) + V(I,3)*UNIT_Y(I) GWSCOR3A.215 UK = U(I,2)*UNIT_X(I) + V(I,2)*UNIT_Y(I) GWSCOR3A.216 UKM1 = U(I,1)*UNIT_X(I) + V(I,1)*UNIT_Y(I) GWSCOR3A.217 IF( N_SQAV .LE. 0.0 .OR. UKP1.LE.0.3 GWSCOR3A.218 * .OR. UK.LE.0.2 .OR. UKM1.LE.0.1 ) THEN GWSCOR3A.219 L_LEE(I)=.FALSE. GWSCOR3A.220 ELSE GWSCOR3A.221 DEL_EXNER_KU = PEXNER(I,3) - P_EXNER_CENTRE(I,KU) GWSCOR3A.222 DEL_EXNER_KL = P_EXNER_CENTRE(I,KL) - PEXNER(I,3) GWSCOR3A.223 DELTA_Z= CPBYG*(THETA(I,2)*DEL_EXNER_KL + GWSCOR3A.224 * THETA(I,3)*DEL_EXNER_KU) GWSCOR3A.225 DU_DZ(I,KU)= ( UKP1-UK )/ DELTA_Z GWSCOR3A.226 PU=PSTAR(I)*BKH(2) + AKH(2) GWSCOR3A.227 PL=PSTAR(I)*BKH(1) + AKH(1) GWSCOR3A.228 CALC= GWSCOR3A.229 & P_EXNER_C( PEXNER(I,2),PEXNER(I,1),PU,PL,KAPPA) GWSCOR3A.230 DEL_EXNER_KU = PEXNER(I,2) - P_EXNER_CENTRE(I,KL) GWSCOR3A.231 DEL_EXNER_KL = CALC - PEXNER(I,2) GWSCOR3A.232 DELTA_Z= CPBYG*(THETA(I,1)*DEL_EXNER_KL + GWSCOR3A.233 * THETA(I,2)*DEL_EXNER_KU ) GWSCOR3A.234 GWSCOR3A.235 DU_DZ(I,KL)= ( UK-UKM1 )/ DELTA_Z GWSCOR3A.236 DEL_EXNER_KU = PEXNER(I,2) - PEXNER(I,3) GWSCOR3A.237 DEL_EXNER_KL = PEXNER(I,1) - PEXNER(I,2) GWSCOR3A.238 ZH(I) = CPBYG*(THETA(I,1)*DEL_EXNER_KL + GWSCOR3A.239 * THETA(I,2)*DEL_EXNER_KU ) GWSCOR3A.240 LSQ(I,2)=N_SQAV /UK**2 - ( DU_DZ(I,KU)-DU_DZ(I,KL) ) GWSCOR3A.241 * / (UK*CPBYG*THETA(I,2)*DEL_EXNER_KU) GWSCOR3A.242 LSQ_SUM(I,1)= 0.0 GWSCOR3A.243 LSQ_SUM(I,2)= LSQ(I,2) GWSCOR3A.244 ENDIF GWSCOR3A.245 ENDIF ! lee point GWSCOR3A.246 ENDDO ! Points GWSCOR3A.247 GWSCOR3A.248 !--------------------------------------------------------------------- GWSCOR3A.249 ! Loop Levels GWSCOR3A.250 !--------------------------------------------------------------------- GWSCOR3A.251 DO M= 2,K_LEE_MAX GWSCOR3A.252 DO K= K_LEE_LIM(M-1), K_LEE_LIM(M) GWSCOR3A.253 GWSCOR3A.254 IF( K.NE.K_LEE_LIM(M-1) ) THEN GWSCOR3A.255 KK=KL GWSCOR3A.256 KL=KU GWSCOR3A.257 KU=KK GWSCOR3A.258 ENDIF GWSCOR3A.259 GWSCOR3A.260 ! Optimizer precomputes values which can cause zero divide, so:- GRB0F405.146 !OCL NOPREEX,NOEVAL GRB0F405.147 DO I=1,POINTS GWSCOR3A.261 IF( L_LEE(I) .AND. ( K.NE.K_LEE_LIM(M-1) ) GWSCOR3A.262 & .AND. ( K_LEE(I,1).EQ.0 .OR. M.LE.K_TRANS ) ) THEN GWSCOR3A.263 ! next level stage GWSCOR3A.264 PU=PSTAR(I)*BKH(K+2) + AKH(K+2) GWSCOR3A.265 PL=PSTAR(I)*BKH(K+1) + AKH(K+1) GWSCOR3A.266 P_EXNER_CENTRE(I,KU)= GWSCOR3A.267 & P_EXNER_C( PEXNER(I,K+2),PEXNER(I,K+1),PU,PL,KAPPA) GWSCOR3A.268 N_SQ(I,KU) = G*(THETA(I,K+1)-THETA(I,K))/(THETA(I,K+1)* GWSCOR3A.269 & THETA(I,K)*(P_EXNER_CENTRE(I,KL)-P_EXNER_CENTRE(I,KU))* GWSCOR3A.270 & CPBYG) GWSCOR3A.271 N_SQAV = ( (PEXNER(I,K)-P_EXNER_CENTRE(I,KL))*N_SQ(I,KU) GWSCOR3A.272 & + (P_EXNER_CENTRE(I,KL) - PEXNER(I,K+1))*N_SQ(I,KL) ) GWSCOR3A.273 & / ( PEXNER(I,K) - PEXNER(I,K+1) ) GWSCOR3A.274 !-------------------------------------------------------------------- GWSCOR3A.275 ! Note U is component parallel to stress vector GWSCOR3A.276 !-------------------------------------------------------------------- GWSCOR3A.277 UKP1 = U(I,K+1)*UNIT_X(I) + V(I,K+1)*UNIT_Y(I) GWSCOR3A.278 UK = U(I,K) *UNIT_X(I) + V(I,K) *UNIT_Y(I) GWSCOR3A.279 UKM1 = U(I,K-1)*UNIT_X(I) + V(I,K-1)*UNIT_Y(I) GWSCOR3A.280 IF( N_SQAV .LE. 0.0 .OR. UKP1 .LE. 0.3) THEN GWSCOR3A.281 L_LEE(I)=.FALSE. GWSCOR3A.282 ELSE GWSCOR3A.283 DEL_EXNER_KU = PEXNER(I,K+1) - P_EXNER_CENTRE(I,KU) GWSCOR3A.284 DEL_EXNER_KL = P_EXNER_CENTRE(I,KL) - PEXNER(I,K+1) GWSCOR3A.285 DELTA_Z= CPBYG*(THETA(I,K)*DEL_EXNER_KL + GWSCOR3A.286 * THETA(I,K+1)*DEL_EXNER_KU) GWSCOR3A.287 DU_DZ(I,KU)= ( UKP1-UK )/ DELTA_Z GWSCOR3A.288 DEL_EXNER = PEXNER(I,K) - PEXNER(I,K+1) GWSCOR3A.289 LSQ(I,K)=N_SQAV/UK**2 - ( DU_DZ(I,KU)-DU_DZ(I,KL) ) GWSCOR3A.290 * / (UK*CPBYG*THETA(I,K)*DEL_EXNER) GWSCOR3A.291 LSQ_SUM(I,2)=LSQ_SUM(I,2)+LSQ(I,K) GWSCOR3A.292 ENDIF GWSCOR3A.293 ENDIF ! ...K.NE.K_Lee_Lim(M-1).. GWSCOR3A.294 GWSCOR3A.295 IF( L_LEE(I) .AND. GWSCOR3A.296 & ( K_LEE(I,1).EQ.0 .OR. M.LE.K_TRANS ) ) THEN GWSCOR3A.297 GWSCOR3A.298 IF( K .EQ. K_LEE_LIM(M) ) THEN GWSCOR3A.299 GWSCOR3A.300 DEL_EXNER = PEXNER(I,M) - PEXNER(I,M+1) GWSCOR3A.301 ZH(I) = ZH(I) + CPBYG*THETA(I,M)*DEL_EXNER GWSCOR3A.302 GWSCOR3A.303 LSQ_SUM(I,1)=LSQ_SUM(I,1)+LSQ(I,M) GWSCOR3A.304 LSQ_SUM(I,2)=LSQ_SUM(I,2)-LSQ(I,M) GWSCOR3A.305 IF( LSQ_SUM(I,2).LT.0.0 ) LSQ_SUM(I,2)=0.0 GWSCOR3A.306 CALC= LSQ_SUM(I,1)/(M-1) - LSQ_SUM(I,2)/(K-M) GWSCOR3A.307 IF( CALC .GT. 0.0 .AND. K_LEE(I,1).EQ.0 GWSCOR3A.308 & .AND. M.GE.START_L ) THEN GWSCOR3A.309 CALC=CONST*ZH(I)*SQRT(CALC) GWSCOR3A.310 IF( CALC.LT.-1.0 ) THEN GWSCOR3A.311 K_LEE(I,1)=M GWSCOR3A.312 K_LEE(I,2)=K GWSCOR3A.313 H_LEE(I)=ZH(I) GWSCOR3A.314 LSQ_LEE(I,1)=LSQ_SUM(I,1)/(M-1) GWSCOR3A.315 LSQ_LEE(I,2)=LSQ_SUM(I,2)/(K-M) GWSCOR3A.316 ENDIF GWSCOR3A.317 ENDIF GWSCOR3A.318 ENDIF GWSCOR3A.319 GWSCOR3A.320 IF( M .EQ. K_TRANS ) THEN GWSCOR3A.321 IF( LSQ_SUM(I,1).GT.0.0 .AND. LSQ_SUM(I,2).GT.0.0 )THEN GWSCOR3A.322 LSQ1=LSQ_SUM(I,1)/(M-1) GWSCOR3A.323 LSQ2=LSQ_SUM(I,2)/(K-M) GWSCOR3A.324 L1=SQRT(LSQ1) GWSCOR3A.325 L2=SQRT(LSQ2) GWSCOR3A.326 CALC= LSQ1+LSQ2+(LSQ1-LSQ2)*COS(2.*L1*ZH(I)) GWSCOR3A.327 IF( CALC.EQ.0.0) THEN GWSCOR3A.328 TRANS(I)=1.0 GWSCOR3A.329 ELSE GWSCOR3A.330 TRANS(I)=2*L1*L2/ CALC GWSCOR3A.331 ENDIF GWSCOR3A.332 IF( TRANS(I).GT.1.0 ) THEN GWSCOR3A.333 TRANS(I)=1.0 GWSCOR3A.334 ENDIF GWSCOR3A.335 ENDIF GWSCOR3A.336 ENDIF GWSCOR3A.337 GWSCOR3A.338 IF( K_LEE(I,1).EQ.0 .AND. M.EQ.K_LEE_MAX ) THEN GWSCOR3A.339 L_LEE(I)= .FALSE. GWSCOR3A.340 ENDIF GWSCOR3A.341 GWSCOR3A.342 ENDIF ! K_Lee or K_trans = 0 GWSCOR3A.343 ENDDO ! Points GWSCOR3A.344 ENDDO ! K-Loop GWSCOR3A.345 ENDDO ! M-Loop GWSCOR3A.346 GWSCOR3A.347 ! FIND CRITICAL LEVELS? GWSCOR3A.348 RETURN GWSCOR3A.349 END GWSCOR3A.350 GWSCOR3A.351 *ENDIF GWSCOR3A.352