*IF DEF,A13_1A,OR,DEF,A13_1B ATJ0F402.29 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14912 C GTS2F400.14913 C Use, duplication or disclosure of this code is subject to the GTS2F400.14914 C restrictions as set forth in the contract. GTS2F400.14915 C GTS2F400.14916 C Meteorological Office GTS2F400.14917 C London Road GTS2F400.14918 C BRACKNELL GTS2F400.14919 C Berkshire UK GTS2F400.14920 C RG12 2SZ GTS2F400.14921 C GTS2F400.14922 C If no contract has been raised with this copy of the code, the use, GTS2F400.14923 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14924 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14925 C Modelling at the above address. GTS2F400.14926 C ******************************COPYRIGHT****************************** GTS2F400.14927 C GTS2F400.14928 CLL SUBROUTINE COEFF_UV ----------------------------------------- COFUV1A.3 CLL COFUV1A.4 CLL PURPOSE: CALCULATES EFFECTIVE DIFFUSIVE COEFFICIENTS FOR U AND V COFUV1A.5 CLL IN NS AND EW DIRECTIONS COFUV1A.6 CLL IF STEEP SLOPE THEN EFFECTIVE DIFFUSION IS ZERO. COFUV1A.7 CLL COFUV1A.8 CLL NOTE PRESSURE ARRAY NEEDS TO BE GLOBAL (SHARED) COFUV1A.9 CLL FOR MULTI-TASKING AT 3.4 UPWARDS. COFUV1A.10 CLL NOT SUITABLE FOR SINGLE COLUMN USE. COFUV1A.11 CLL VERSION FOR CRAY Y-MP COFUV1A.12 CLL COFUV1A.13 CLL MODEL MODIFICATION HISTORY COFUV1A.14 CLL VERSION DATE COFUV1A.15 CLL 4.0 17/01/95 Original code. T.Davies. COFUV1A.16 ! 4.1 07/05/96 Added MPP code and TYPFLDPT arguments and fixed APB0F401.1383 ! bug in wrap-arounds P.Burton APB0F401.1384 CLL COFUV1A.17 CLL PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4, COFUV1A.18 CLL STANDARD B. VERSION 2, DATED 18/01/90 COFUV1A.19 CLL COFUV1A.20 CLL SYSTEM COMPONENTS COVERED: P132 COFUV1A.21 CLL COFUV1A.22 CLL SYSTEM TASK: P1 COFUV1A.23 CLL COFUV1A.24 CLL DOCUMENTATION: THE EQUATION USED IS (47) COFUV1A.25 CLL IN UNIFIED MODEL DOCUMENTATION PAPER COFUV1A.26 CLL NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON COFUV1A.27 CLL VERSION 16 DATED 09/01/91. COFUV1A.28 CLLEND------------------------------------------------------------- COFUV1A.29 COFUV1A.30 C*L ARGUMENTS:--------------------------------------------------- COFUV1A.31SUBROUTINE COEFF_UV 2,2COFUV1A.32 1 (DIFFUSION_EW,DIFFUSION_NS, COFUV1A.33 2 PRESSURE,LEVEL,PRESSURE_TEST,AK,BK, COFUV1A.34 3 COS_P_LATITUDE,START_U_UPDATE, COFUV1A.35 4 END_U_UPDATE,ROW_LENGTH, APB0F401.1385 *CALL ARGFLDPT
APB0F401.1386 & LATITUDE_STEP_INVERSE, APB0F401.1387 5 LONGITUDE_STEP_INVERSE,P_FIELD,U_FIELD,P_LEVELS, COFUV1A.37 6 DIFFUSION_COEFFICIENT,DIFFUSION_COEFFICIENT2) COFUV1A.38 COFUV1A.39 IMPLICIT NONE COFUV1A.40 COFUV1A.41 INTEGER COFUV1A.42 * U_FIELD !IN DIMENSION OF FIELDS ON VELOCITY GRID COFUV1A.43 *, P_FIELD !IN DIMENSION OF FIELDS ON PRESSURE GRID COFUV1A.44 *, P_LEVELS !IN NUMBER OF MODEL LEVELS COFUV1A.45 *, ROW_LENGTH !IN NUMBER OF POINTS PER ROW COFUV1A.46 *, START_U_UPDATE !IN FIRST POINT TO BE UPDATED. COFUV1A.47 *, END_U_UPDATE !IN LAST POINT TO BE UPDATED. COFUV1A.48 *, LEVEL !CURRENT MODEL LEVEL COFUV1A.49 APB0F401.1388 ! All TYPFLDPT arguments are intent IN APB0F401.1389 *CALL TYPFLDPT
APB0F401.1390 COFUV1A.50 REAL COFUV1A.51 * PRESSURE(P_FIELD,P_LEVELS) !IN.3-D PRESSURE FIELD U POINTS COFUV1A.52 * ! LEVEL_P=1 SURFACE THEN LEVEL_P=K IS LEVEL K-1 COFUV1A.53 *,DIFFUSION_EW(P_FIELD) !OUT EFFECTIVE EW DIFFUSION COEFFICIENT COFUV1A.54 *,DIFFUSION_NS(P_FIELD) !OUT EFFECTIVE NS DIFFUSION COEFFICIENT COFUV1A.55 COFUV1A.56 COFUV1A.57 REAL COFUV1A.58 * DIFFUSION_COEFFICIENT(P_FIELD) !IN HOLD ON P GRID. FIRST POINT COFUV1A.59 * ! OF ARRAY IS FIRST P POINT ON COFUV1A.60 * ! SECOND P ROW. EAST-WEST COFUV1A.61 * ! DIFFUSION COEFFICIENT. COFUV1A.62 *,DIFFUSION_COEFFICIENT2(P_FIELD) !IN HOLD ON P GRID. FIRST POINT COFUV1A.63 * ! OF ARRAY IS FIRST P POINT ON COFUV1A.64 * ! SECOND P ROW. NORTH-SOUTH COFUV1A.65 * ! DIFFUSION COEFFICIENT. COFUV1A.66 *,AK(P_LEVELS) !IN LAYER AK'S COFUV1A.67 *,BK(P_LEVELS) !IN LAYER BK'S COFUV1A.68 *,COS_P_LATITUDE(P_FIELD) !IN COS(LAT) AT P POINTS COFUV1A.69 *,LATITUDE_STEP_INVERSE !IN 1/(DELTA LAMDA) COFUV1A.70 *,LONGITUDE_STEP_INVERSE !IN 1/(DELTA PHI) COFUV1A.71 *, PRESSURE_TEST !IN PRESSURE ALTITUDE LIMIT FOR SLOPE TEST COFUV1A.72 COFUV1A.73 COFUV1A.74 C*L DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE----------------- COFUV1A.75 ! Define local arrays APB0F401.1391 LOGICAL MASK(P_FIELD) ! Indicates of EW_DIFFUSION to be set to APB0F401.1392 ! ! zero at a point APB0F401.1393 COFUV1A.76 C DEFINE LOCAL VARIABLES COFUV1A.77 COFUV1A.78 C LOCAL REALS. COFUV1A.79 REAL COFUV1A.80 * PRESSURE_LEVEL COFUV1A.81 COFUV1A.82 C COUNT VARIABLES FOR DO LOOPS ETC. COFUV1A.83 INTEGER COFUV1A.84 * I,IJ,LEVEL_P APB0F401.1394 C LEVEL_P=LEVEL+1 IS FOR PRESSURE TEST COFUV1A.86 C*L EXTERNAL SUBROUTINE CALLS: NONE--------------------------------- COFUV1A.87 COFUV1A.88 C*--------------------------------------------------------------------- COFUV1A.89 CL MAXIMUM VECTOR LENGTH ASSUMED IS END_U_UPDATE-START_U_UPDATE+1+ COFUV1A.90 CL ROW_LENGTH COFUV1A.91 CL--------------------------------------------------------------------- COFUV1A.92 CL INTERNAL STRUCTURE. COFUV1A.93 CL--------------------------------------------------------------------- COFUV1A.94 CL COFUV1A.95 CL--------------------------------------------------------------------- COFUV1A.96 CL SECTION 1. CALCULATE FIRST TERM IN EQUATION (47) COFUV1A.97 CL--------------------------------------------------------------------- COFUV1A.98 COFUV1A.99 C LEVEL_P=LEVEL+1 IS FOR PRESSURE TEST COFUV1A.100 LEVEL_P=LEVEL+1 COFUV1A.101 C---------------------------------------------------------------------- COFUV1A.102 CL TOP LEVEL LEVEL_P = P_LEVELS SINCE SLOPE TEST NEED NOT BE COFUV1A.103 CL DONE FOR TOP MOST (PRESSURE) LEVELS COFUV1A.104 C---------------------------------------------------------------------- COFUV1A.105 IF(LEVEL_P.GT.P_LEVELS)LEVEL_P=P_LEVELS COFUV1A.106 C---------------------------------------------------------------------- COFUV1A.107 CL SECTION 1.1 CALCULATE DELTALAMBDA TERMS COFUV1A.108 C DELTAPHIKLAMBDA*1/(DELTALAMBDA)SQUARED COFUV1A.109 C---------------------------------------------------------------------- COFUV1A.110 COFUV1A.111 DO I= START_U_UPDATE,END_U_UPDATE COFUV1A.112 DIFFUSION_EW(I) = 0.5*(DIFFUSION_COEFFICIENT(I+ROW_LENGTH)+ COFUV1A.113 & DIFFUSION_COEFFICIENT(I))*LONGITUDE_STEP_INVERSE COFUV1A.114 & *LONGITUDE_STEP_INVERSE COFUV1A.115 END DO COFUV1A.116 COFUV1A.117 COFUV1A.118 COFUV1A.119 C---------------------------------------------------------------------- COFUV1A.120 CL SECTION 1.2 SET EFFECTIVE DIFFUSION COEFFICIENT TO ZERO COFUV1A.121 C IF STEEP SLOPE BELOW PRESSURE ALTITUDE LIMIT COFUV1A.122 C APPLY GENERAL TEST AT FIRST POINT ONLY COFUV1A.123 C---------------------------------------------------------------------- COFUV1A.124 COFUV1A.125 C APPLY GENERAL TEST FOR REFERENCE SURFACE PRESSURE OF 1000HPA COFUV1A.126 PRESSURE_LEVEL=AK(LEVEL)+100000.0*BK(LEVEL) COFUV1A.127 IF(PRESSURE_LEVEL.GT.PRESSURE_TEST)THEN COFUV1A.128 COFUV1A.129 DO I= START_U_UPDATE+1,END_U_UPDATE APB0F401.1395 MASK(I)=((PRESSURE(I-1,LEVEL_P).GT.PRESSURE(I,LEVEL_P-1)).OR. APB0F401.1396 & (PRESSURE(I-1,LEVEL_P).LT.PRESSURE(I,LEVEL_P+1))) APB0F401.1397 ENDDO APB0F401.1398 APB0F401.1399 *IF -DEF,MPP APB0F401.1400 ! Recalculate end-points APB0F401.1401 DO I=START_U_UPDATE,END_U_UPDATE,ROW_LENGTH APB0F401.1402 IJ=I+ROW_LENGTH-1 APB0F401.1403 MASK(I)=((PRESSURE(IJ,LEVEL_P).GT.PRESSURE(I,LEVEL_P-1)).OR. APB0F401.1404 & (PRESSURE(IJ,LEVEL_P).LT.PRESSURE(I,LEVEL_P+1))) APB0F401.1405 ENDDO APB0F401.1406 *ENDIF APB0F401.1407 APB0F401.1408 ! And zero appropriate points of EW_DIFFUSION APB0F401.1409 DO I= START_U_UPDATE,END_U_UPDATE APB0F401.1410 IF (MASK(I)) DIFFUSION_EW(I)=0.0 APB0F401.1411 ENDDO APB0F401.1412 COFUV1A.151 ENDIF COFUV1A.152 COFUV1A.153 COFUV1A.154 CL--------------------------------------------------------------------- COFUV1A.155 CL SECTION 2. CALCULATE SECOND TERM IN EQUATION (47) COFUV1A.156 CL--------------------------------------------------------------------- COFUV1A.157 COFUV1A.158 C---------------------------------------------------------------------- COFUV1A.159 CL SECTION 2.1 CALCULATE DELTAPHI TERMS COFUV1A.160 CL CALCULATE DELTALAMBDAK*COSLAT/(DELTAPHI)SQUARED COFUV1A.161 C---------------------------------------------------------------------- COFUV1A.162 COFUV1A.163 ! Loop over field missing Northern row APB0F401.1413 DO I=START_POINT_NO_HALO,LAST_U_FLD_PT-1 APB0F401.1414 DIFFUSION_NS(I)=0.5*(DIFFUSION_COEFFICIENT2(I)*COS_P_LATITUDE(I) COFUV1A.165 & +DIFFUSION_COEFFICIENT2(I+1)*COS_P_LATITUDE(I+1))* COFUV1A.166 & LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE COFUV1A.167 END DO COFUV1A.168 COFUV1A.169 C RECALCULATE END POINTS. COFUV1A.170 COFUV1A.171 *IF -DEF,MPP APB0F401.1415 DO I=1+ROW_LENGTH,U_FIELD,ROW_LENGTH COFUV1A.172 IJ = I+ROW_LENGTH-1 COFUV1A.173 DIFFUSION_NS(IJ)=0.5* COFUV1A.174 & (DIFFUSION_COEFFICIENT2(I)*COS_P_LATITUDE(I) COFUV1A.175 & +DIFFUSION_COEFFICIENT2(IJ)*COS_P_LATITUDE(IJ))* COFUV1A.176 & LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE COFUV1A.177 END DO COFUV1A.178 *ELSE APB0F401.1416 DIFFUSION_NS(LAST_U_FLD_PT)=DIFFUSION_NS(LAST_U_FLD_PT-1) APB0F401.1417 *ENDIF APB0F401.1418 COFUV1A.179 COFUV1A.180 *IF DEF,GLOBAL COFUV1A.181 C CALCULATE POLAR TERMS USING ACROSS-POLE DIFFERENCE, REMEMBERING SIGN COFUV1A.182 C CHANGE ACROSS THE POLE COFUV1A.183 C NB: EFFECTIVE COS_P_LATITUDE IS 1/4 THAT AT ADJACENT ROW COFUV1A.184 COFUV1A.185 APB0F401.1419 *IF DEF,MPP APB0F401.1420 IF (at_top_of_LPG) THEN APB0F401.1421 *ENDIF APB0F401.1422 ! North Pole APB0F401.1423 DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1 APB0F401.1424 DIFFUSION_NS(I)=DIFFUSION_COEFFICIENT2(I)*COS_P_LATITUDE(I)* APB0F401.1425 & LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE APB0F401.1426 ENDDO APB0F401.1427 *IF DEF,MPP APB0F401.1428 ENDIF APB0F401.1429 APB0F401.1430 IF (at_base_of_LPG) THEN APB0F401.1431 *ENDIF APB0F401.1432 ! South Pole APB0F401.1433 DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1 APB0F401.1434 DIFFUSION_NS(I)=DIFFUSION_COEFFICIENT2(I)*COS_P_LATITUDE(I)* APB0F401.1435 & LATITUDE_STEP_INVERSE*LATITUDE_STEP_INVERSE APB0F401.1436 ENDDO APB0F401.1437 *IF DEF,MPP APB0F401.1438 ENDIF APB0F401.1439 *ENDIF APB0F401.1440 *ENDIF COFUV1A.204 COFUV1A.205 COFUV1A.206 C---------------------------------------------------------------------- COFUV1A.207 CL SECTION 2.2 SET EFFECTIVE DIFFUSION COEFFICIENT TO ZERO COFUV1A.208 C IF STEEP SLOPE BELOW PRESSURE ALTITUDE LIMIT COFUV1A.209 C APPLY GENERAL TEST AT FIRST POINT ONLY COFUV1A.210 C---------------------------------------------------------------------- COFUV1A.211 COFUV1A.212 C APPLY GENERAL TEST FOR REFERENCE SURFACE PRESSURE OF 1000HPA COFUV1A.213 IF(PRESSURE_LEVEL.GT.PRESSURE_TEST)THEN COFUV1A.214 COFUV1A.215 ! Loop over field, missing Northern row APB0F401.1441 DO I=START_POINT_NO_HALO,LAST_U_FLD_PT APB0F401.1442 IF((PRESSURE(I,LEVEL_P).GT.PRESSURE(I-ROW_LENGTH,LEVEL_P-1)).OR. COFUV1A.217 & (PRESSURE(I,LEVEL_P).LT. COFUV1A.218 & PRESSURE(I-ROW_LENGTH,LEVEL_P+1)))THEN COFUV1A.219 DIFFUSION_NS(I)=0.0 COFUV1A.220 ENDIF COFUV1A.221 COFUV1A.222 END DO COFUV1A.223 COFUV1A.224 ENDIF COFUV1A.225 COFUV1A.226 CL END OF ROUTINE COEFF_UV COFUV1A.227 COFUV1A.228 RETURN COFUV1A.229 END COFUV1A.230 *ENDIF COFUV1A.231