*IF DEF,W08_1A GLW1F404.59 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.15915 C GTS2F400.15916 C Use, duplication or disclosure of this code is subject to the GTS2F400.15917 C restrictions as set forth in the contract. GTS2F400.15918 C GTS2F400.15919 C Meteorological Office GTS2F400.15920 C London Road GTS2F400.15921 C BRACKNELL GTS2F400.15922 C Berkshire UK GTS2F400.15923 C RG12 2SZ GTS2F400.15924 C GTS2F400.15925 C If no contract has been raised with this copy of the code, the use, GTS2F400.15926 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.15927 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.15928 C Modelling at the above address. GTS2F400.15929 C ******************************COPYRIGHT****************************** GTS2F400.15930 C GTS2F400.15931 WV_CHECK.3SUBROUTINE CHECK (IREFRA, ML, KL, IINPC, 1,2WV_CHECK.4 *CALL ARGWVAL
WV_CHECK.5 *CALL ARGWVGD
WV_CHECK.6 *CALL ARGWVMP
WV_CHECK.7 & icode) WV_CHECK.8 WV_CHECK.9 *CALL PARCONS
WV_CHECK.10 C include parwvsh as value of ndepth is printed out WV_CHECK.11 *CALL PARWVSH
WV_CHECK.12 WV_CHECK.13 *CALL TYPWVGD
WV_CHECK.14 *CALL TYPWVMP
WV_CHECK.15 *CALL TYPWVAL
WV_CHECK.16 WV_CHECK.17 C need calls to ARGWVSH because a value for ndepth is printed WV_CHECK.18 C ---------------------------------------------------------------------- WV_CHECK.19 C WV_CHECK.20 C**** *CHECK* - ROUTINE TO CHECK CONSISTENCY BETWEEN COMPUTED BLOCKS. WV_CHECK.21 C WV_CHECK.22 C H.GUNTHER ECMWF 04/04/1990 WV_CHECK.23 C WV_CHECK.24 C* PURPOSE. WV_CHECK.25 C ------- WV_CHECK.26 C WV_CHECK.27 C *CHECK* CHECKS CONSISTENCY BETWEEN BLOCK INDICES. WV_CHECK.28 C WV_CHECK.29 C** INTERFACE. WV_CHECK.30 C ---------- WV_CHECK.31 C WV_CHECK.32 C *CALL* *CHECK (IREFRA, ML, KL, IINPC)* WV_CHECK.33 C *IREFRA* - REFRACTION OPTION. WV_CHECK.34 C *ML* - NUMBER OF FREQUENCIES. WV_CHECK.35 C *KL* - NUMBER OF DIRECTIONS. WV_CHECK.36 C *IINPC* - NUMBER INPUT POINTS FROM A PREVIOUS COARSE GRID. WV_CHECK.37 C WV_CHECK.38 C METHOD. WV_CHECK.39 C ------- WV_CHECK.40 C WV_CHECK.41 C NONE. WV_CHECK.42 C WV_CHECK.43 C EXTERNALS. WV_CHECK.44 C ---------- WV_CHECK.45 C WV_CHECK.46 C *ABORT* - TERMINATES PROCESSING. WV_CHECK.47 C *OUTPP* - WRITE OUT A GRID. WV_CHECK.48 C WV_CHECK.49 C REFERENCE. WV_CHECK.50 C ---------- WV_CHECK.51 C WV_CHECK.52 C NONE. WV_CHECK.53 C WV_CHECK.54 C ---------------------------------------------------------------------- WV_CHECK.55 C WV_CHECK.56 CHARACTER*1 LST(NGX,NGY) WV_CHECK.57 DIMENSION GRID(NGX,NGY) WV_CHECK.58 C WV_CHECK.59 C* VARIABLE. TYPE. PURPOSE. WV_CHECK.60 C --------- ------- -------- WV_CHECK.61 C *LSTAB* CHARACTER LAND SEA TABLE L = LAND WV_CHECK.62 C S = SEA WV_CHECK.63 C + = SEA AND OUTPUT POINT. WV_CHECK.64 C *GRID* REAL ARRAY FOR GRIDDED PRINT OUTPUT. WV_CHECK.65 C WV_CHECK.66 C ---------------------------------------------------------------------- WV_CHECK.67 C WV_CHECK.68 C* 1. COMPARE LENGTH OF OVERLAPPING LAT. WV_CHECK.69 C ----------------------------------- WV_CHECK.70 C WV_CHECK.71 iu06=6 WV_CHECK.72 1000 CONTINUE WV_CHECK.73 DO 1001 IG=1,IGL-1 WV_CHECK.74 IU1 = IJS(IG+1)-1 WV_CHECK.75 IO2 = IJL(IG)-IJLS(IG)+1 WV_CHECK.76 IF (IU1.NE.IO2) THEN WV_CHECK.77 WRITE (IU06,*) ' *****************************************' WV_CHECK.78 WRITE (IU06,*) ' * *' WV_CHECK.79 WRITE (IU06,*) ' * FATAL ERROR IN SUB. CHECK *' WV_CHECK.80 WRITE (IU06,*) ' * ========================= *' WV_CHECK.81 WRITE (IU06,*) ' * *' WV_CHECK.82 WRITE (IU06,*) ' * LENGTH OF FIRST LAT. IN BLOCK IG+1 *' WV_CHECK.83 WRITE (IU06,*) ' * IS NOT EQUAL TO SECOND TO LAST OF *' WV_CHECK.84 WRITE (IU06,*) ' * BLOCK IG *' WV_CHECK.85 WRITE (IU06,*) ' * BLOCK NUMBER IS IG = ', IG WV_CHECK.86 WRITE (IU06,*) ' * LENGTH IN BLOCK IG IS IU1 = ', IU1 WV_CHECK.87 WRITE (IU06,*) ' * LENGTH IN BLOCK IG+1 IS IO2 = ', IO2 WV_CHECK.88 WRITE (IU06,*) ' * *' WV_CHECK.89 WRITE (IU06,*) ' *****************************************' WV_CHECK.90 WV_CHECK.91 icode=-1 WV_CHECK.92 call abort
WV_CHECK.93 ENDIF WV_CHECK.94 IU2 = IJL2(IG+1)-IJS(IG+1)+1 WV_CHECK.95 IO1 = IJLT(IG)-IJL(IG) WV_CHECK.96 IF (IU2.NE.IO1) THEN WV_CHECK.97 WRITE (IU06,*) ' *****************************************' WV_CHECK.98 WRITE (IU06,*) ' * *' WV_CHECK.99 WRITE (IU06,*) ' * FATAL ERROR IN SUB. CHECK *' WV_CHECK.100 WRITE (IU06,*) ' * ========================= *' WV_CHECK.101 WRITE (IU06,*) ' * *' WV_CHECK.102 WRITE (IU06,*) ' * LENGTH OF SECOND LAT. IN BLOCK IG+1 *' WV_CHECK.103 WRITE (IU06,*) ' * IS NOT EQUAL TO LAST OF BLOCK IG *' WV_CHECK.104 WRITE (IU06,*) ' * BLOCK NUMBER IS IG = ', IG WV_CHECK.105 WRITE (IU06,*) ' * LENGTH IN BLOCK IG IS IU2 = ', IU2 WV_CHECK.106 WRITE (IU06,*) ' * LENGTH IN BLOCK IG+1 IS IO1 = ', IO1 WV_CHECK.107 WRITE (IU06,*) ' * *' WV_CHECK.108 WRITE (IU06,*) ' *****************************************' WV_CHECK.109 icode=-1 WV_CHECK.110 call abort
WV_CHECK.111 ENDIF WV_CHECK.112 1001 CONTINUE WV_CHECK.113 C WV_CHECK.114 C ---------------------------------------------------------------------- WV_CHECK.115 C WV_CHECK.116 C* 2. GENERATE LAND SEA TABLE FROM INDEX ARRAYS. WV_CHECK.117 C ------------------------------------------ WV_CHECK.118 C WV_CHECK.119 2000 CONTINUE WV_CHECK.120 DO 2001 K=1,NY WV_CHECK.121 DO 2001 I=1,NX WV_CHECK.122 LST(I,K) = 'L' WV_CHECK.123 2001 CONTINUE WV_CHECK.124 WV_CHECK.125 IERR = 0 WV_CHECK.126 DO 2002 IG=1,IGL WV_CHECK.127 DO 2003 IJ=IJS(IG),IJL(IG) WV_CHECK.128 IF (IXLG(IJ,IG).NE.0.OR.KXLT(IJ,IG).NE.0) WV_CHECK.129 1 LST(IXLG(IJ,IG),KXLT(IJ,IG)) = 'S' WV_CHECK.130 2003 CONTINUE WV_CHECK.131 2002 CONTINUE WV_CHECK.132 C WV_CHECK.133 C* 2.4 PRINT LAND SEA MAP. WV_CHECK.134 C ------------------- WV_CHECK.135 C WV_CHECK.136 2400 CONTINUE WV_CHECK.137 ILEN = 120 WV_CHECK.138 IPAGE = (NX+ILEN-1)/ILEN WV_CHECK.139 IF (IPAGE.GT.1) THEN WV_CHECK.140 LAST = (NX-ILEN*(IPAGE-1)+IPAGE-2)/(IPAGE-1) WV_CHECK.141 IF (LAST.LE.10) THEN WV_CHECK.142 ILEN = ILEN + 10 WV_CHECK.143 IPAGE = (NX+ILEN-1)/ILEN WV_CHECK.144 ENDIF WV_CHECK.145 ENDIF WV_CHECK.146 DO 2401 L=1,IPAGE WV_CHECK.147 IA = (L-1)*ILEN WV_CHECK.148 IE = MIN(IA+ILEN,NX) WV_CHECK.149 IA = IA + 1 WV_CHECK.150 BMOWEP = AMOWEP +REAL(IA-1)*XDELLO WV_CHECK.151 BMOEAP = AMOWEP +REAL(IE-1)*XDELLO WV_CHECK.152 WRITE (IU06,'(1H1,'' LAND SEA MAP OF FULL GRID '', WV_CHECK.153 1 '' L = LAND S = SEA '', WV_CHECK.154 2 '' PAGE: '',I2)') L WV_CHECK.155 WRITE (IU06,'(2X,''LONGITUDE IS FROM '',F7.2,'' TO '',F7.2)') WV_CHECK.156 1 BMOWEP, BMOEAP WV_CHECK.157 WRITE (IU06,'(2X,''LATITUDE IS FROM '',F7.2,'' TO '',F7.2)') WV_CHECK.158 1 AMONOP, AMOSOP WV_CHECK.159 WRITE (IU06,'(2X,130I1)') (MOD(I,10),I=IA,IE) WV_CHECK.160 DO 2402 K=NY,1,-1 WV_CHECK.161 WRITE (IU06,'(1X,I1,130A1)') MOD(K,10),(LST(I,K),I=IA,IE) WV_CHECK.162 2402 CONTINUE WV_CHECK.163 WRITE (IU06,'(2X,130I1)') (MOD(I,10),I=IA,IE) WV_CHECK.164 2401 CONTINUE WV_CHECK.165 C WV_CHECK.166 C ---------------------------------------------------------------------- WV_CHECK.167 C WV_CHECK.168 C* 5. OUTPUT OF OVERALL GRID INFORMATION. WV_CHECK.169 C ----------------------------------- WV_CHECK.170 C WV_CHECK.171 5000 CONTINUE WV_CHECK.172 ccmh WRITE (IU06,'(1H1,'' GRID SUMMERY:'')') WV_CHECK.173 WRITE (IU06,'(1H1,'' GRID SUMMARY:'')') WV_CHECK.174 WRITE (IU06,*) ' NUMBER OF BLOCKS GENERATED IS IGL ....: ', IGL WV_CHECK.175 IJFLAT = 0 WV_CHECK.176 IJLLAT = 0 WV_CHECK.177 IJMAX = 0 WV_CHECK.178 ISEA = 0 WV_CHECK.179 IPOI = 0 WV_CHECK.180 DO 5001 IG=1,IGL WV_CHECK.181 IJFLAT= MAX(IJFLAT,IJS(IG)-1) WV_CHECK.182 IJLLAT= MAX(IJLLAT,IJLT(IG)-IJL(IG)) WV_CHECK.183 IJMAX = MAX(IJMAX,IJLT(IG)) WV_CHECK.184 IPOI = IPOI + IJLT(IG) WV_CHECK.185 ISEA = ISEA + IJL(IG)-IJS(IG) + 1 WV_CHECK.186 5001 CONTINUE WV_CHECK.187 IOV = IPOI-ISEA WV_CHECK.188 WRITE (IU06,*) ' MAXIMUM NUMBER OF POINTS IN A BLOCK ..: ', IJMAX WV_CHECK.189 WRITE (IU06,*) ' TOTAL NUMBER OF POINT IN ALL BLOCKS ..: ', IPOI WV_CHECK.190 WRITE (IU06,*) ' TOTAL NUMBER OF SEA POINTS ...........: ', ISEA WV_CHECK.191 WRITE (IU06,*) ' TOTAL NUMBER OF POINTS IN OVERLAP.....: ', IOV WV_CHECK.192 WRITE (IU06,*) ' MAXIMUM LENGTH OF FIRST LAT OF A BLOCK: ', IJFLAT WV_CHECK.193 WRITE (IU06,*) ' MAXIMUM LENGTH OF LAST LAT OF A BLOCK: ', IJLLAT WV_CHECK.194 C WV_CHECK.195 C ---------------------------------------------------------------------- WV_CHECK.196 NIBLC = 1 WVV0F401.40 NIBLD = NIBLO WVV0F401.41 NBLC = 1 WVV0F401.42 NBLD = NBLO WVV0F401.43 C WV_CHECK.197 C* 6. OUTPUT OF OPTIMAL DIMENSIONS. WV_CHECK.198 C ----------------------------- WV_CHECK.199 C WV_CHECK.200 6000 CONTINUE WV_CHECK.201 WRITE (IU06,'(//,'' DIMENSIONS OF ARRAYS, WHICH ARE USED'', WV_CHECK.202 1 '' IN PRESET AND CHIEF '',/)') WV_CHECK.203 WRITE (IU06,'('' DEFINED'', WV_CHECK.204 1 '' USED'','' REQUIRED'')') WV_CHECK.205 WRITE (IU06,'('' NUMBER OF DIRECTIONS NANG '', 3I10)') PXWVCK.1 1 NANG, KL, KL WV_CHECK.207 WRITE (IU06,'('' NUMBER OF FREQUENCIES NFRE '', 3I10)') PXWVCK.2 1 NFRE, ML, ML WV_CHECK.209 WRITE (IU06,'('' NUMBER LONGITUDE GRID POINTS NGX '', 3I10)') WV_CHECK.210 1 NGX, NX, NX WV_CHECK.211 WRITE (IU06,'('' NUMBER LATITUDE GRID POINTS NGY '', 3I10)') WV_CHECK.212 1 NGY, NY, NY WV_CHECK.213 WRITE (IU06,'('' NUMBER OF BLOCKS NBLO '', 3I10)') WV_CHECK.214 1 NBLO, IGL, NBLO WV_CHECK.215 WRITE (IU06,'('' MAXIMUM BLOCK LENGTH NIBLO '', 3I10)') WV_CHECK.216 1 NIBLO, IJMAX, NIBLO WV_CHECK.217 WRITE (IU06,'('' NUMBER POINTS IN FIRST LAT NOVER '', 3I10)') WV_CHECK.218 1 NOVER, MAX(1,IJFLAT), MAX(1,IJFLAT) WV_CHECK.219 IF (IREFRA.EQ.0) THEN WV_CHECK.220 WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)') WV_CHECK.221 1 NIBLD, 1, 1 WV_CHECK.222 WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER NBLD '', 3I10)') WV_CHECK.223 1 NBLD, 1, 1 WV_CHECK.224 WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)') WV_CHECK.225 1 NIBLC, 1, 1 WV_CHECK.226 WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER NBLC '', 3I10)') WV_CHECK.227 1 NBLC, 1, 1 WV_CHECK.228 ELSE IF (IREFRA.EQ.1) THEN WV_CHECK.229 WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)') WV_CHECK.230 1 NIBLD, IJMAX, NIBLO WV_CHECK.231 WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER NBLD '', 3I10)') WV_CHECK.232 1 NBLD, IGL, NBLO WV_CHECK.233 WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)') WV_CHECK.234 1 NIBLC, 1, 1 WV_CHECK.235 WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER NBLC '', 3I10)') WV_CHECK.236 1 NBLC, 1, 1 WV_CHECK.237 ELSE IF (IREFRA.EQ.2) THEN WV_CHECK.238 WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)') WV_CHECK.239 1 NIBLD, IJMAX, NIBLO WV_CHECK.240 WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER NBLD '', 3I10)') WV_CHECK.241 1 NBLD, IGL, NBLO WV_CHECK.242 WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)') WV_CHECK.243 1 NIBLC, IJMAX, NIBLO WV_CHECK.244 WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER NBLC '', 3I10)') WV_CHECK.245 1 NBLC, IGL, NBLO WV_CHECK.246 ENDIF WV_CHECK.247 WV_CHECK.248 WRITE (IU06,'('' SHALLOW WATER TABLE LEN. NDEPTH '', 3I10)') WV_CHECK.249 1 NDEPTH, NDEPTH, NDEPTH WV_CHECK.250 WV_CHECK.251 WRITE (IU06,'(/,'' THE DIMENSIONS IN PRESET AND CHIEF HAVE TO '', WV_CHECK.252 1 '' BE THE VALUES IN COLUMN - REQUIRED - '')') WV_CHECK.253 WRITE (IU06,'( '' IF YOU WANT TO USE THE OPTIMAL DIMENSION'', WV_CHECK.254 1 '' LENGTH IN THE WAMODEL, THEN '',/, WV_CHECK.255 2 '' RERUN PREPROC WITH THE DIMENSION'', WV_CHECK.256 3 '' GIVEN AS -USED-'')') WV_CHECK.257 WV_CHECK.258 RETURN WV_CHECK.259 END WV_CHECK.260 *ENDIF WV_CHECK.261