SUBROUTINE ORSMTW(KFILDO,KFILOG,IP16, 1 CCALL,XP,YP,LNDSEA,NOPTN,LTAG,LTAGPT,NSTA, 2 ID,IDPARS,P,MESH,C,Q,NX,NY, 3 TELEV,SEALND,CPNDFD,NXE,NYE,MESHE, 4 IPACK,DATA,IWORK,ND5, 5 MODNO,NDATE, 6 ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD, 7 IOCINC,DPOWER,RAY,MAXDST,CSTSM, 8 IS0,IS1,IS2,IS4,ND7, 9 JTOTBY,JTOTRC,PLAINT,IPLANT, A L3264B,L3264W,MINPK,ISTOP,IER) C C JUNE 2011 GLAHN MDL MOS-2000 C ADAPTED FROM ORSMTH AND SPOTRM C JULY 2011 GLAHN ADDED FACTOR ON DIAGONALS; C ADDED LTAGBS C JULY 2011 GLAHN INSERTED SMOOTHING BEFORE RAY C JULY 2011 GLAHN REMOVED MAXRAY C AUGUST 2011 GLAHN ADDED CSTSM FOR LAND/WATER C BOUNDARY SMOOTHING C AUGUST 2011 GLAHN CHANGED LTAGBS( ) TO LATGPT( ) C AUGUST 2011 GLAHN ADDED NOPTN TO CALL AND TO C CALL TO SPOTWT C SEPTEMBER 2011 GLAHN CORRECTED ERROR IN DEFINITION C OF FACNE AND FACNNE C FEBRUARY 2012 GLAHN 3RD PARAGRAPH PURPOSE CORRECTED C C PURPOSE C TO SMOOTH WATER POINTS ON A GRID OVER A CIRCLE C BY TRACING A RAY IN 16 DIRECTIONS FROM THE CENTER. C ONCE A LAND POINT OR A MISSING VALUE IS ENCOUNTERED, C THE RAY STOPS. THE RAYS WILL BE OF LENGTH IOCEXT C GRID LENGTHS AT INCREMENTS OF IOCINC. P(NX,JY) AND C SEALND(NXE,NYE) MUST COVER THE SAME AREA AND BE OF C THE SAME MESH LENGTH. THE GRID SIZES AND MESH LENGTHS C ARE CHECKED. A MISSING POINT IS KEPT AS MISSING. C C THE DIFFERENCE BETWEEN ORSMTW AND ORSMTH IS THAT C ORSMTW COMPUTES THE RADIUS OVER WHICH TO SMOOTH C AND WEIGHTS TO USE SIMILAR TO SPOTRM. ORSMTW CALLS C SPOTWT TO COMPUTE THE RADII AND WEIGHTS. C C ORSMTW AND ORSMTH DO NOT DISTINGUISH BETWEEN LAKE AND C OCEAN. ORSMTW TREATS EACH WATER BODY SEPARATELY BECAUSE C THE RAY STOPS WHEN LAND IS ENCOUNTERED. C C AFTER THE RAY SMOOTHING, A SIMPLE 9-POINT SMOOTHER C IS USED TWICE; WITHOUT IT, THERE IS CHATTER IN THE GRID. C C FINALLY, CSTSM (WHEN NOT ZERO) IS USED TO SMOOTH THE C LAND/WATER BOUNDARY. WHEN THE FOUR POINTS AROUND THE C POINT POTENTIALLY BEING SMOOTHED ARE NOT ALL WATER C OR LAND, CSTSM IS USED TO SMOOTH IT. C C OPEN MP STOP AND IER ARE NOT DECLARED PRIVATE IN OPEN MP. C THEY ARE NOT INVOLVED IN THE OPEN MP LOOPS. C C DATA SET USE C KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) C KFILOG - UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT C OUTPUT. (OUTPUT) C KFILRA(J) - HOLDS THE UNIT NUMBERS FOR ACCESSING THE C MOS-2000 EXTERNAL RANDOM ACCESS FILES (J=1,6). C (INPUT) C IP16 - UNIT NUMBER FOR INDICATING WHEN A RECORD IS C WRITTEN TO THE SEQUENTIAL FILE. (OUTPUT) C C VARIABLES C KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE. (INPUT) C KFILOG = UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT C OUTPUT. THIS IS FOR DIFFERENT PASSES OF THE C ANALYSES AND THEIR SMOOTHINGS. USED HERE C FOR DISTANCE MAP. (INPUT) C IP16 = INDICATES WHETHER (>0) OR NOT (=0) C A STATEMENT WILL BE OUTPUT TO IP(16) C WHEN A SEQUENTIAL FILE IS WRITTEN THROUGH C PAWGTS. (INPUT)) C CCALL(J) = STATION CALL LETTERS (J=1,NSTA). (CHARACTER*8) C (INPUT) C XP(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH C LENGTH MESH. (INPUT) C YP(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH C LENGTH MESH. (INPUT) C LNDSEA(K) = LAND/SEA INFLUENCE FLAG FOR EACH STATION C (K=1,NSTA). C 0 = WILL BE USED FOR ONLY OCEAN WATER (=0) C GRIDPOINTS. C 3 = WILL BE USED FOR ONLY INLAND WATER (=3) C GRIDPOINTS. C 6 = WILL BE USED FOR BOTH INLAND WATER (=3) C AND LAND (=9) GRIDPOINTS. C 9 = WILL BE USED FOR ONLY LAND (=9) GRIDPOINTS. C (INPUT) C NOPTN = INDICATES OPTION FOR WHICH DATA TO SMOOTH OUT. C COMES FROM U405A.CN IN CALL TO SPOTRM CONST( ). C 1 = SMOTH OUT BOGUS ONLY C 2 = SMOTH OUT BOGUS AND 2ND LEVEL AUGMENTATION. C 3 = SMOTH OUT BOGUS AND ALL AUGMENTATION C 4 = KEEP ALL. C (INPUT) C LTAG(K) = DENOTES USE OF DATA CORRESPONDING TO CCALL(K) C (K=1,NSTA). C +2 = STATION LOCATION UNKNOWN. NOT USED FOR ANY C PURPOSE. C +1 = STATION OUTSIDE RADIUS OF INFLUENCE FOR C AREA BEING ANALYZED OR MISSING DATUM. C PERMANENTLY DISCARDED. C 0 = USE ON CURRENT PASS THROUGH DATA IN BCD. C -1 = ON RETURN FROM BCD, THE DATUM WAS NOT C USED ON THE LAST PASS. C -3 = ACCEPT THIS STATION ON EVERY PASS IN BCD. C (NOT IMPLEMENTED IN U405A) C (INPUT) C LTAGPT(K) = FOR STATION K (K=1NSTA), C 1 = AUGMENTED DATA (FIRST PASS) C 2 = AUGMENTED DATA (2ND PASS) C 3 = BOGUS DATA C 0 = EVERYTHING ELSE C (INPUT) C NSTA = NUMBER OF STATIONS IN CCALL( ). (INPUT) C ID(J) = 4 WORD ID OF VARIABLE BEING ANALYZED. (INPUT) C IDPARS(J) = THE PARSED, INDIVIDUAL COMPONENTS OF THE C PREDICTOR ID'S CORRESPONDING TO ID( ,N) C (J=1,15), (N=1,ND4). C J=1--CCC (CLASS OF VARIABLE), C J=2--FFF (SUBCLASS OF VARIABLE), C J=3--B (BINARY INDICATOR), C J=4--DD (DATA SOURCE, MODEL NUMBER), C J=5--V (VERTICAL APPLICATION), C J=6--LBLBLBLB (BOTTOM OF LAYER, 0 IF ONLY C 1 LAYER), C J=7--LTLTLTLT (TOP OF LAYER), C J=8--T (TRANSFORMATION), C J=9--RR (RUN TIME OFFSET, ALWAYS + AND BACK C IN TIME), C J=10--OT (TIME APPLICATION), C J=11--OH (TIME PERIOD IN HOURS), C J=12--TAU (PROJECTION IN HOURS), C J=13--I (INTERPOLATION TYPE), C J=14--S (SMOOTHING INDICATOR), AND C J=15--G (GRID INDICATOR). C (INPUT) C P(IX,JY) = HOLDS A FIELD TO BE SMOOTHED (INPUT) AND C THE SMOOTHED GRID (OUTPUT) (IX=1,NX) C (JY=1,NY). (INPUT/OUTPUT) C MESH = NOMINAL MESH LENGTH OF GRID IN P( , ). C (INPUT) C C(IX,JY) = SCRATCH ARRAY (IX=1,NX) (JY=1,NY). (INTERNAL) C NX = SIZE OF P( , ) IN X DIRECTION. (INPUT) C NY = SIZE OF P( , ) IN Y DIRECTION. (INPUT) C TELEV(IX,JY) = THE TERRAIN ELEVATION (IX=1,NX) (JY=1,NY) AT C NOMINAL MESHLENGTH MESHE. (INPUT) C SEALND(IX,JY) = THE LAND/SEA MASK (IX=1,NX) (JY=1,NY). C 0 = OCEAN WATER GRIDPOINTS; C 3 = INLAND WATER GRIDPOINTS. C 9 = LAND GRIDPOINTS. C (INPUT) C CPNDFD(IX,JY) = THE NDFD MASK (IX=1,NX) (JY=1,NY) AT C NOMINAL MESHLENGTH MESHE. A "1" MEANS THE C GRIDPOINT IS WITHIN THE AREA; A "0" MEANS IT C IS OUTSIDE THE AREA. (INPUT) C NXE = X-EXTENT OF TELEV( , ), SEALND( , ), AND C CPNDFD( , ) AT MESH LENGTH MESHE. (INPUT) C NYE = Y-EXTENT OF TELEV( , ), SEALND( , ), AND C CPNDFD( , ) AT MESH LENGTH MESHE. (INPUT) C MESHE = NOMINAL MESH LENGTH OF GRID IN SEALND( , ), C TELEV( , ), AND CPNDFD( , ). (INPUT) C IPACK(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C DATA(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C IWORK(J) = WORK ARRAY (J=1,ND5). (INTERNAL) C ND5 = DIMENSION OF IPACK( ), IWORK( ), AND DATA( ). C (INPUT) C MODNO = OUTPUT MODEL NUMBER. (INPUT) C NDATE = DATE/TIME, YYYYMMDDHH. THIS IS THE ANALYSIS C RUN TIME, INCLUDING HH. (INPUT) C ALATL = NORTH LATITUDE OF LOWER LEFT CORNER POINT C OF A GRID OF THE SIZE NXL, NYL. TRUNCATED C TO TEN THOUSANDTHS OF DEGREES. NOTE THAT THE C MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF C DEGREES. (INPUT) C ALONL = WEST LONGITUDE OF LOWER LEFT CORNER POINT C OF A GRID OF THE SIZE NXL, NYL. TRUNCATED C TO TEN THOUSANDTHS OF DEGREES. NOTE THAT THE C MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF C DEGREES. (INPUT) C NPROJ = NUMBER OF MAP PROJECTION TO WHICH THIS GRID C APPLIES. C 3 = LAMBERT. C 5 = POLAR STEREOGRAPHIC. C 7 = MERCATOR. C (INPUT) C ORIENT = ORIENTATION OF GRID IN WEST LONGITUDE. (INPUT) C XLAT = NORTH LATITUDE AT WHICH GRIDLENGTH IS SPECIFIED C IN DEGREES. (INPUT) C ISCALD = DECIMAL SCALING FOR TDLPACKING. (INPUT) C IOCINC = THE INCREMENT TO USE IN SUMMING ALONG A RAY. C (INPUT) C DPOWER = THE POWER OF THE DISTANCE TO USE IN WEIGHTING. C WT(IX,JY)=1/DIST(IX,JY)**POWER. (INPUT) C RAY = THE MULTIPLIER OF THE DISTANCE TO THE CLOSEST C STATION TO USE AS THE RADIUS OF THE SMOOTHING C CIRCLE (OR MAJOR AXIS OF ELLIPSE). (INPUT) C MAXDST = MAXIMUM RADIUS OF CIRCLE OVER WHICH TO COMPUTE C THE DISTANCES IN SPOTWT. TAKEN FROM THE C U405A.CN FILE. (INPUT) C CSTSM = THE SMOOTHING PARAMETER IF ANY POINT HAS WATER C BUT NOT ALL ARE WATER. USE INSTEAD OF BQ. C (CSTSM = 4 WEIGHTS THE AVERAGE OF THE 4 C NEIGHBORING POINTS EQUAL TO THE CENTER C POINT--THE USUAL SITUATION FOR SMOOTHING. WHEN C CSTSM = .4, THE SUM OF THE SURROUNDING POINTS C IS .1 AS MUCH AS THE CENTER VALUE.) C (INPUT) C IS0(J) = MOS-2000 GRIB SECTION 0 ID'S (J=1,4). C (INTERNAL) C IS1(J) = MOS-2000 GRIB SECTION 1 ID'S (J=1,21+). C (INTERNAL) C IS2(J) = MOS-2000 GRIB SECTION 2 ID'S (J=1,12). C (INTERNAL) C IS4(J) = MOS-2000 GRIB SECTION 4 ID'S (J=1,4). C (INTERNAL) C ND7 = DIMENSION OF IS0( ), IS1( ), IS2( ), AND C IS4( ). (INPUT) C JTOTBY = THE TOTAL NUMBER OF BYTES ON THE FILE ASSOCIATED C WITH UNIT NO. KFILOG. (INPUT/OUTPUT) C JTOTRC = THE TOTAL NUMBER OF RECORDS IN THE FILE ON UNIT C NUMBER KFILOG. (INPUT/OUTPUT) C PLAINT = THE PLAIN LANGUAGE DESCRIPTION TO FURNISH TO C GTHRES. EQUIVALENCED TO IPLANT IN CALLING C ROUTINE. (INPUT) C IPLANT(I,J) = EQUIVALENCED TO PLAINT IN CALLING ROUTINE C (I=1,L3264W) (J=1,4). (INPUT) C L3264B = INTEGER WORD LENGTH IN BITS OF MACHINE BEING C USED (EITHER 32 OR 64). (INPUT). C L3264W = NUMBER OF WORDS IN 64 BITS (EITHER 1 OR 2). C (INPUT) C MINPK = MINIMUM GROUP SIZE WHEN PACKING THE DATA. C (INPUT) C ISTOP = INCREMENTED BY 1 IF THERE IS AN ERROR. C (INPUT/OUTPUT) C IER = RETURN CODE. C 0 = GOOD RETURN. C 777 = ANY ERROR IS RETURNED WITH A 777, BUT C CALLING PROGRAM WILL PROBABLY IGNORE IT. C (OUTPUT) C DIST(IX,JY) = THE FIELD OF DISTANCES TO THE NEAREST C STATION (IX=1,NX) (JY=1,NY). C (INTERNAL) (ALLOCATABLE) C WT(IX,JY) = WEIGHTS FOR SMOOTHING (IX=1,NS) (JY=1,NY). C (INTERNAL) (ALLOCATABLE) C IOCEXT = THE NUMBER OF GRIDPOINTS PLUS AND MINUS C OF THE POINT P(IX,JY) TO SMOOTH. IT IS C A FUNCTION OF RAY*DIST(IX,JY). (INTERNAL) C ITABLE(J,L) = CORRESPONDENCE BETWEEN NOMINAL MESH LENGTH C (L=1) AND VALUE FOR X IN 408CX0000 (L=2), C (J=1,7). C IPRTEL = 1 TO WRITE THE RETRIEVED DISTANCE GRID TO THE C OUTPUT FILE VIA GTHRES. (INTERNAL) C NXSAVE, NYSAVE = SAVED VALUES OF NX AND NY TO MAKE SURE THE C ALLOCATED ARRAYS ARE OF CORRECT SIZE. C (INTERNAL) C IFIRST = CONTROLS THE ALLOCATION OF ARRAYS. (INTERNAL) C JFIRST = CONTROLS THE WRITING OF THE DISTANCE GRID. IT C IS WRITTEN ONLY ONCE. (INTERNAL) C ODIST = DISTANCE IN GRID UNITS OUTSIDE THE GRID A C STATION IS USED FOR THIS PURPOSE. SET BY C DATA STATEMENT TO 1. (INTERNAL) C HOLD(IX,JY) = SCRATCH ARRAY USED IN COMPUTING THE SMOOTHED C FIELD (IX=1,NX) (JY=1,NY). (AUTOMATIC) C (INTERNAL) C 1 2 3 4 5 6 7 X C CHARACTER*6 RACESS(6) CHARACTER*8 CCALL(NSTA) CHARACTER*32 PLAINT C DIMENSION ID(4),LD(4),IDPARS(15) DIMENSION XP(NSTA),YP(NSTA),LNDSEA(NSTA),LTAG(NSTA),LTAGPT(NSTA) DIMENSION P(NX,NY),C(NX,NY),Q(NX,NY) DIMENSION HOLD(NX,NY) C HOLD( , ) IS AN AUTOMATIC ARRAY. DIMENSION TELEV(NXE,NYE),SEALND(NXE,NYE),CPNDFD(NXE,NYE) DIMENSION IPLANT(L3264W,4) C EQUIVALENCED TO PLAINT IN DRIVER. DIMENSION IPACK(ND5),IWORK(ND5),DATA(ND5) DIMENSION IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7) DIMENSION ITABLE(7,2),IDSAVE(4) C DATA IFIRST/0/ C ALLOCATABLE WT(:,:),DIST(:,:) SAVE WT,DIST SAVE NXSAVE,NYSAVE,IDSAVE,NDTSAV C CALL TIMPR(KFILDO,KFILDO,'START ORSMTW ') C D WRITE(KFILDO,103)ID,NX,NY,NXE,NYE,MESH,MESHE,IOCINC D103 FORMAT(/' IN ORSMTW--ID,NX,NY,NXE,NYE,MESH,MESHE,IOCINC', D 1 4I12,8I8) D WRITE(KFILDO,104)IOCINC,DPOWER,RAY,MAXDST D104 FORMAT(/' IN ORSMTW--IOCINC,DPOWER,RAY,MAXDST', D 1 I8,2F8.2,2I8) C C INITIALIZE SOME VARIABLES FOR LAND/WATER BOUNDARY SMOOTHING. C BQW=CSTSM/4. BPW=CSTSM+1. NXM1=NX-1 NYM1=NY-1 C C CHECK THE SIZE OF P( , ) AND SEALND( , ). C IF(NX.NE.NXE.OR.NY.NE.NYE)THEN WRITE(KFILDO,105)NX,NY,NXE,NYE 105 FORMAT(/' ****THE GRID P( , ) OF SIZE', I6,' X ',I6, 1 ' IS NOT THE SAME SIZE OF SEALND', I6,' X ',I6, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTW. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CHECK THE MESH LENGTHS OF P( , ) AND SEALND( , ). C IF(MESH.NE.MESHE)THEN WRITE(KFILDO,107)MESH,MESHE 107 FORMAT(/' ****THE GRID P( , ) HAS A DIFFERENT NOMINAL', 1 ' MESH LENGTH =',I4,' THAN THAT OF SEALND( , ) =',I4,/, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTW. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CHECK WHETHER OCINC IS GT 0. C IF(IOCINC.LE.0)THEN WRITE(KFILDO,108)IOCINC 108 FORMAT(/' ****IOCINC =',I4,' IS NOT GREATER THAN 0', 1 '. OCEAN IS NOT SMOOTHED IN ORSMTW.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CALCULATE THE RADII AND WEIGHTS IN SPOTWT. C 115 IF(IFIRST.EQ.0)THEN C ALLOCATE THE ARRAYS DIST( , ) AND WT( , ). C ALLOCATE (DIST(NX,NY),WT(NX,NY),STAT=IOS) C IF(IOS.EQ.1)THEN WRITE(KFILDO,116) 116 FORMAT(/' ****ALLOCATION OF DIST( , ) AND WT( , ) FAILED', 1 ' IN SPOTWT AT 116. ARRAY ALREADY ALLOCATED.') ISTOP=ISTOP+1 IER=777 GO TO 400 C ELSEIF(IOS.EQ.2)THEN WRITE(KFILDO,117) 117 FORMAT(/' ****ALLOCATION OF DIST( , ) AND WT( , ) FAILED', 1 ' IN SPOTWT AT 117. ARRAY NOT ALLOCATED.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C IFIRST=1 NXSAVE=NX NYSAVE=NY ELSE C IF(NX.NE.NXSAVE.OR.NY.NE.NYSAVE)THEN C IT IS NOT EXPECTED THAT THIS WILL HAPPEN. C IF IT DOES, IT IS PROBABLY AN ERROR OF SOME KIND. WRITE(KFILDO,118)NX,NY,NXSAVE,NYSAVE 118 FORMAT(/' ****GRID SIZE NX =',I5,' NY =',I5, 1 ' IN SPOTWT NOT THE SAME AS FOR', 2 ' THE PREVIOUS ENTRY NX =',I5,' NY =',I5,'.',/, 3 ' REALLOCATING THE ARRAYS WT( , ) AND', 4 ' DIST( , ) AND RECALCULATING THE DISTANCES.') C DEALLOCATE(DIST,WT,STAT=IOS) IFIRST=0 GO TO 115 ENDIF C ENDIF C CALL SPOTWT(KFILDO,KFILOG,IP16, 1 CCALL,XP,YP,LNDSEA,NOPTN,LTAG,LTAGPT,NSTA, 2 ID,IDPARS,DIST,WT,MESH,NX,NY, 3 SEALND,NXE,NYE,MESHE, 4 IPACK,DATA,IWORK,ND5, 5 MODNO,NDATE, 6 ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD, 7 DPOWER,MAXDST, 8 IS0,IS1,IS2,IS4,ND7, 9 JTOTBY,JTOTRC,PLAINT,IPLANT, A L3264B,L3264W,MINPK,ISTOP,IER) C IF(IER.NE.0)THEN WRITE(KFILDO,119)IER 119 FORMAT(/' ****ERROR IN SPOTWT. SMOOTHING IS NOT DONE.') GO TO 400 ENDIF C CCCCC SMOOTH OUT THE BOGUS SPOTS OVER WATER BEFORE THE RAY CCCCC SMOOTHING WITH A 25-POINT SQUARE. CCCCC CCCC DO 1195 JY=1,NY CCCC DO 1194 IX=1,NX CCCC HOLD(IX,JY)=P(IX,JY) CCCC 1194 CONTINUE CCCC 1195 CONTINUE CCCCC CCCC DO 122 K=1,NSTA CCCCC CCCC IF(XP(K).LT.9998..AND.YP(K).LT.9998.)THEN CCCCC CCCC IF(LNDSEA(K).LT.3.5.AND.LTAGPT(K).NE.0)THEN CCCCC THIS IS A BOGUS OR AUGMENTED OCEAN STATION. CCCC SUM=0. CCCC NCOUNT=0 CCCCC CCCC DO 121 JY=MAX(1,NINT(YP(K))-2),MIN(NY,NINT(YP(K))+2) CCCC DO 120 IX=MAX(1,NINT(XP(K))-2),MIN(NX,NINT(XP(K))+2) CCCCC CCCC IF(P(IX,JY).LT.9998..AND.SEALND(IX,JY).LT.3.5)THEN CCCC SUM=SUM+P(IX,JY) CCCC NCOUNT=NCOUNT+1 CCCC ENDIF CCCCC CCCC 120 CONTINUE CCCC 121 CONTINUE CCCCC CCCC IF(NCOUNT.GT.0)THEN CCCC HOLD(IX,JY)=SUM/NCOUNT CCCC ENDIF CCCCC CCCC ENDIF CCCCC CCCC ENDIF CCCCC CCCC 122 CONTINUE CCCCC CCCC DO 1225 JY=1,NY CCCC DO 1224 IX=1,NX CCCC P(IX,JY)=HOLD(IX,JY) CCCC 1224 CONTINUE CCCC 1225 CONTINUE C C THE NUMBER OF POINTS AVERAGED ALONG AN X OR Y LINE IS C INT(IOCEXT/IOCINC). HOWEVER, BECAUSE THE POINTS HAVE TO C BE PICKED AT GRIDPOINTS (ON INTEGER VALUES FROM THE C ORIGIN) THERE ARE LESS POINTS ON A DIAGONAL. TO C ACCOUNT FOR THIS, A FACTOR IS USED ON THE DIAGONALS C TO GIVE THE DIAGONALS AS MUCH WEIGHT AS THE STRAIGHT C E-W OR N-S LINES. THE FACTORS FOR THE DIAGONAL C (FACNE = FACTOR NORTHEAST) AND THE NEAR DIAGONAL C (FACNNE = FACTOR NORTH-NORTHEASTS) ARE CALCULATED C HERE. THE VALUES .707 (1/SQUARE ROOT OF 2) AND C .447 (1/SQUARE ROOT OF 5) ARE THE SAME AS USED BELOW C IN LIMITING THE LENGTH OF THE DIAGONAL. C FACNE=1./.707 FACNNE=1./.447 C C SMOOTH THE POINTS. C !$OMP PARALLEL DO DEFAULT(SHARED) !$OMP& PRIVATE(IX,JY,SUM,COUNT,IXS,JYS,IS) CCC!$OMP& SCHEDULE(DYNAMIC) C DO 300 JY=1,NY C DO 299 IX=1,NX C CCCC IF(IX.GT.620.AND.IX.LT.636.AND.JY.GE.170.AND.JY.LE.182)THEN CCCC WRITE(KFILDO,1226)IX,JY,SEALND(IX,JY),P(IX,JY),DIST(IX,JY), CCCC 1 WT(IX,JY) CCCC 1226 FORMAT(/' ORSMTW--IX,JY,SEALND(IX,JY),P(IX,JY),DIST(IX,JY)', CCCC 1 'WT(IX,JY)',2I8,4F10.3) CCCC ENDIF C IF(SEALND(IX,JY).LE.3.5.AND.P(IX,JY).LT.9998.9.AND. 1 DIST(IX,JY).LT.9998.9)THEN C THIS IS AN OCEAN OR INLAND WATER POINT THAT IS C NOT MISSING AND HAS A NON MISSING DISTANCE. C WHEN THE DISTANCE IS GOOD, THE WEIGHT WILL BE ALSO. C SUM=P(IX,JY)*WT(IX,JY) C P(IX,JY) IS THE CENTER POINT. IT IS COUNTED ONLY ONCE. COUNT=WT(IX,JY) IOCEXT=NINT(DIST(IX,JY)*RAY) C RAY IS THE MULITILYING FACTOR FOR DIST( , ) FOR RAY C LENGTH. C C SUM VALUES ON X-AXIS TO THE RIGHT. C DO 124 IXS=MIN(NX,IX+1),MIN(NX,IX+IOCEXT),+IOCINC IF(P(IXS,JY).GT.9998.9.OR.SEALND(IXS,JY).GT.3.5)GO TO 125 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IXS,JY)*WT(IXS,JY) COUNT=COUNT+WT(IXS,JY) C D IF(IX.GE.572.AND.IX.LE.578.AND.JY.EQ.468)THEN D WRITE(KFILDO,123)IX,JY,IXS,WT(IXS,JY),IOCEXT, D 1 COUNT,P(IXS,JY),SUM D123 FORMAT(' AT 123--IX,JY,IXS,WT(IXS,JY),IOCEXT,', D 1 'COUNT,P(IXS,JY),SUM',3I8,F10.2,I6,3F10.2) D ENDIF C 124 CONTINUE C C SUM VALUES ON X-AXIS TO THE LEFT. C 125 DO 134 IXS=MAX(1,IX-1),MAX(1,IX-IOCEXT),-IOCINC IF(P(IXS,JY).GT.9998.9.OR.SEALND(IXS,JY).GT.3.5)GO TO 135 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IXS,JY)*WT(IXS,JY) COUNT=COUNT+WT(IXS,JY) C D IF(IX.GE.578.AND.IX.LT.582.AND.JY.EQ.468)THEN D WRITE(KFILDO,133)IX,JY,IXS,WT(IXS,JY),IOCEXT, D 1 COUNT,P(IXS,JY),SUM D133 FORMAT(' AT 133--IX,JY,IXS,WT(IXS,JY),IOCEXT,', D 1 'COUNT,P(IXS,JY),SUM',3I8,F10.2,I6,3F10.2) D ENDIF C 134 CONTINUE C C SUM VALUES ON Y-AXIS UPWARD. C 135 DO 144 JYS=MIN(NY,JY+1),MIN(NY,JY+IOCEXT),+IOCINC IF(P(IX,JYS).GT.9998.9.OR.SEALND(IX,JYS).GT.3.5)GO TO 145 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IX,JYS)*WT(IX,JYS) COUNT=COUNT+WT(IX,JYS) C D IF(IX.EQ.578.AND.JY.GE.462.AND.JY.LE.468)THEN D WRITE(KFILDO,140)IX,JY,JYS,WT(IX,JYS),IOCEXT, D 1 COUNT,P(IX,JYS),SUM D140 FORMAT(' AT 140--IX,JY,JYS,WT(IX,JYS),IOCEXT,', D 1 'COUNT,P(IX,JYS),SUM',3I8,F10.2,I6,3F10.2) D ENDIF C 144 CONTINUE C C SUM VALUES ON Y-AXIS DOWNWARD. C 145 DO 154 JYS=MAX(1,JY-1),MAX(1,JY-IOCEXT),-IOCINC IF(P(IX,JYS).GT.9998.9.OR.SEALND(IX,JYS).GT.3.5)GO TO 155 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IX,JYS)*WT(IX,JYS) COUNT=COUNT+WT(IX,JYS) C D IF(IX.EQ.578.AND.JY.GE.468.AND.JY.LE.474)THEN D WRITE(KFILDO,150)IX,JY,JYS,WT(IX,JYS),IOCEXT, D 1 COUNT,P(IX,JYS),SUM D150 FORMAT(' AT 150--IX,JY,JYS,WT(IX,JYS),IOCEXT,', D 1 'COUNT,P(IX,JYS),SUM',3I8,F10.2,I6,3F10.2) D ENDIF C 154 CONTINUE C C SUM VALUES DIAGONALLY IN THE PLUS X AND PLUS Y DIRECTION. C 155 DO 164 IS=1,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 164 IF(JY+IS.GT.NY)GO TO 164 IF(P(IX+IS,JY+IS).GT.9998.9.OR.SEALND(IX+IS,JY+IS).GT.3.5) 1 GO TO 165 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 165 C THIS LIMITS THE SMOOTHING TO A CIRCLE. THE RAY IS ON C THE DIAGONAL OF THE SQUARE. SUM=SUM+P(IX+IS,JY+IS)*WT(IX+IS,JY+IS)*FACNE COUNT=COUNT+WT(IX+IS,JY+IS)*FACNE C D IF(IX.GE.575.AND.IX.LE.578.AND.JY.GE.465.AND.JY.LE.468)THEN D WRITE(KFILDO,160)IX,JY,IS,WT(IX+IS,JY+IS),IOCEXT, D 1 COUNT,P(IX+IS,JY+IS),SUM D160 FORMAT(' AT 160--IX,JY,IS,WT(IX+IS,JY+IS),IOCEXT,', D 1 'COUNT,P(IX+IS,JY+IS),SUM',3I8,F10.2,I6,3F10.2) D ENDIF C 164 CONTINUE C C SUM VALUES DIAGONALLY IN THE PLUS X AND MINUS Y DIRECTION. C 165 DO 174 IS=1,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 174 IF(JY-IS.LT.1)GO TO 174 IF(P(IX+IS,JY-IS).GT.9998.9.OR.SEALND(IX+IS,JY-IS).GT.3.5) 1 GO TO 175 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 175 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY-IS)*WT(IX+IS,JY-IS)*FACNE COUNT=COUNT+WT(IX+IS,JY-IS)*FACNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,170)IX,JY,IS,WT(IX+IS,JY-IS),IOCEXT, D 1 COUNT,P(IX+IS,JY-IS),SUM D170 FORMAT(' AT 170--IX,JY,IS,COUNT,P(IX+IS,JY-IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 174 CONTINUE C C SUM VALUES DIAGONALLY IN THE MINUS X AND PLUS Y DIRECTION. C 175 DO 184 IS=1,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 184 IF(JY+IS.GT.NY)GO TO 184 IF(P(IX-IS,JY+IS).GT.9998.9.OR.SEALND(IX-IS,JY+IS).GT.3.5) 1 GO TO 185 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 185 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY+IS)*WT(IX-IS,JY+IS)*FACNE COUNT=COUNT+WT(IX-IS,JY+IS)*FACNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,180)IX,JY,IS,COUNT,P(IX-IS,JY+IS),SUM D180 FORMAT(' AT 180--IX,JY,IS,COUNT,P(IX-IS,JY+IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 184 CONTINUE C C SUM VALUES DIAGONALLY IN THE MINUS X AND MINUS Y DIRECTION. C 185 DO 194 IS=1,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 194 IF(JY-IS.LT.1)GO TO 194 IF(P(IX-IS,JY-IS).GT.9998.9.OR.SEALND(IX-IS,JY-IS).GT.3.5) 1 GO TO 195 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 195 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY-IS)*WT(IX-IS,JY-IS)*FACNE COUNT=COUNT+WT(IX-IS,JY-IS)*FACNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,190)IX,JY,IS,COUNT,P(IX-IS,JY-IS),SUM D190 FORMAT(' AT 190--IX,JY,IS,COUNT,P(IX-IS,JY-IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 194 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 195 DO 204 IS=1,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 204 IF(JY+2*IS.GT.NY)GO TO 204 IF(P(IX+IS,JY+2*IS).GT.9998.9.OR.SEALND(IX+IS,JY+2*IS).GT.3.5) 1 GO TO 205 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 205 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY+2*IS)*WT(IX+IS,JY+2*IS)*FACNNE COUNT=COUNT+WT(IX+IS,JY+2*IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,200)IX,JY,IS,COUNT,P(IX+IS,JY+2*IS),SUM D200 FORMAT(' AT 200--IX,JY,IS,COUNT,P(IX+IS,JY+2*IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 204 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 205 DO 214 IS=1,IOCEXT,+IOCINC IF(IX+2*IS.GT.NX)GO TO 214 IF(JY+IS.GT.NY)GO TO 214 IF(P(IX+2*IS,JY+IS).GT.9998.9.OR.SEALND(IX+2*IS,JY+IS).GT.3.5) 1 GO TO 215 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 215 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+2*IS,JY+IS)*WT(IX+2*IS,JY+IS)*FACNNE COUNT=COUNT+WT(IX+2*IS,JY+IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,210)IX,JY,IS,COUNT,P(IX+2*IS,JY+IS),SUM D210 FORMAT(' AT 210--IX,JY,IS,COUNT,P(IX+2*IS,JY+IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 214 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 215 DO 224 IS=1,IOCEXT,+IOCINC IF(IX+2*IS.GT.NX)GO TO 224 IF(JY-IS.LT.1)GO TO 224 IF(P(IX+2*IS,JY-IS).GT.9998.9.OR.SEALND(IX+2*IS,JY-IS).GT.3.5) 1 GO TO 225 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 225 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+2*IS,JY-IS)*WT(IX+2*IS,JY-IS)*FACNNE COUNT=COUNT+WT(IX+2*IS,JY-IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,220)IX,JY,IS,COUNT,P(IX+2*IS,JY-IS),SUM D220 FORMAT(' AT 220--IX,JY,IS,COUNT,P(IX+2*IS,JY-IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 224 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 225 DO 234 IS=1,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 234 IF(JY-2*IS.LT.1)GO TO 234 IF(P(IX+IS,JY-2*IS).GT.9998.9.OR.SEALND(IX+IS,JY-2*IS).GT.3.5) 1 GO TO 235 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 235 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY-2*IS)*WT(IX+IS,JY-2*IS)*FACNNE COUNT=COUNT+WT(IX+IS,JY-2*IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,230)IX,JY,IS,COUNT,P(IX+IS,JY-2*IS),SUM D230 FORMAT(' AT 230--IX,JY,IS,COUNT,P(IX+IS,JY-2*IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 234 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 235 DO 244 IS=1,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 244 IF(JY-2*IS.LT.1)GO TO 244 IF(P(IX-IS,JY-2*IS).GT.9998.9.OR.SEALND(IX-IS,JY-2*IS).GT.3.5) 1 GO TO 245 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 245 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY-2*IS)*WT(IX-IS,JY-2*IS)*FACNNE COUNT=COUNT+WT(IX-IS,JY-2*IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,240)IX,JY,IS,COUNT,P(IX-IS,JY-2*IS),SUM D240 FORMAT(' AT 240--IX,JY,IS,COUNT,P(IX-IS,JY-2*IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 244 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 245 DO 254 IS=1,IOCEXT,+IOCINC IF(IX-2*IS.LT.1)GO TO 254 IF(JY-IS.LT.1)GO TO 254 IF(P(IX-2*IS,JY-IS).GT.9998.9.OR.SEALND(IX-2*IS,JY-IS).GT.3.5) 1 GO TO 255 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 255 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-2*IS,JY-IS)*WT(IX-2*IS,JY-IS)*FACNNE COUNT=COUNT+WT(IX-2*IS,JY-IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,250)IX,JY,IS,COUNT,P(IX-2*IS,JY-IS),SUM D250 FORMAT(' AT 250--IX,JY,IS,COUNT,P(IX-2*IS,JY-IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 254 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 255 DO 264 IS=1,IOCEXT,+IOCINC IF(IX-2*IS.LT.1)GO TO 264 IF(JY+IS.GT.NY)GO TO 264 IF(P(IX-2*IS,JY+IS).GT.9998.9.OR.SEALND(IX-2*IS,JY+IS).GT.3.5) 1 GO TO 265 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 265 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-2*IS,JY+IS)*WT(IX-2*IS,JY+IS)*FACNNE COUNT=COUNT+WT(IX-2*IS,JY+IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,260)IX,JY,IS,COUNT,P(IX-2*IS,JY+IS),SUM D260 FORMAT(' AT 260--IX,JY,IS,COUNT,P(IX-2*IS,JY+IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 264 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 265 DO 274 IS=1,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 274 IF(JY+2*IS.GT.NY)GO TO 274 IF(P(IX-IS,JY+2*IS).GT.9998.9.OR.SEALND(IX-IS,JY+2*IS).GT.3.5) 1 GO TO 275 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 275 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY+2*IS)*WT(IX-IS,JY+2*IS)*FACNNE COUNT=COUNT+WT(IX-IS,JY+2*IS)*FACNNE C D IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN D WRITE(KFILDO,270)IX,JY,IS,COUNT,P(IX-IS,JY+2*IS),SUM D270 FORMAT(' AT 270--IX,JY,IS,COUNT,P(IX-IS,JY+2*IS),SUM', D 1 3I8,F10.2,I6,3F10.2) D ENDIF C 274 CONTINUE C 275 HOLD(IX,JY)=SUM/COUNT C ELSE HOLD(IX,JY)=P(IX,JY) C WHEN NOT SMOOTHED, THE POINT IS MISSING OR LAND AND IS C PUT INTO HOLD( , ). ENDIF C CCC IF(IX.GT.624.AND.IX.LT.632.AND.JY.GE.173.AND.JY.LE.178)THEN CCC WRITE(KFILDO,297)IX,JY,HOLD(IX,JY),COUNT CCC 297 FORMAT(/' AT 297--IX,JY,HOLD(IX,JY),COUNT',2I6,2F8.2) CCC ENDIF C 299 CONTINUE C 300 CONTINUE C !$OMP END PARALLEL DO C C REPLACE P( , ) WITH HOLD( , ). C DO 310 JY=1,NY DO 309 IX=1,NX P(IX,JY)=HOLD(IX,JY) 309 CONTINUE 310 CONTINUE C CCC WRITE(KFILDO,312) CCC 312 FORMAT(' RAY SMOOTHED WITHOUT 9-PT SMOOTHING') C C SMOOTH OVER 9 POINTS. C WRITE(KFILDO,312) 312 FORMAT(' WATER RAY SMOOTHED, FOLLOWED BY FIVE 25-PT SMOOTHINGS,', 1 ' EXCEPT DATA POINT IS MAINTAINED INTACT.') C C THE RAY SMOOTHER LEAVES STREAKS PRIMARILY BECAUSE OF THE C CUTOFF WHEN LAND IS HIT. THIS CAN LEAVE A "LAND SHADOW." C THESE SMOOTHINGS TRY TO SMOOTH THEM OUT. THE RAY C SMOOTHER WORKS WELL TO KEEP VALUES IN BAYS SEPARATE FROM C THE OCEAN, BUT IS PROBABLY A DETRIMENT IN THE OPEN OCEAN. C CCCC DO 316 JY=255,235,-1 CCCC WRITE(KFILDO,313)(DIST(IX,JY),IX=881,900) CCCC 313 FORMAT(/,20F6.1) CCCC WRITE(KFILDO,314)(SEALND(IX,JY),IX=881,900) CCCC 314 FORMAT(20F6.1) CCCC WRITE(KFILDO,314)(P(IX,JY),IX=881,900) CCCC 316 CONTINUE C DO 390 L=1,5 C !$OMP PARALLEL DO DEFAULT(SHARED) !$OMP& PRIVATE(IX,JY,SUM,NCOUNT,IXS,JYS) !$OMP& SCHEDULE(DYNAMIC) C DO 370 JY=1,NY DO 369 IX=1,NX C IF(SEALND(IX,JY).LE.3.5.AND.P(IX,JY).LT.9998.9.AND. 1 DIST(IX,JY).GT.4.5)THEN C THIS IS AN OCEAN OR INLAND WATER POINT THAT IS NOT MISSING, C AND IS ALSO MORE THAN 4.5 GRIDLENGTHS FROM THE CLOSEST C STATION. THIS WILL, THEN, NOT SMOOTH OUT THE STATION C VALUE FOR INTERPOLATION OR FOR THE CLOSEST STATION. C A STATION WITHIN A SQUARE WILL BE LT 1.414 GRIDLENGTHS C OF ALL GRIDPOINTS OF THE SQUARE. THIS SEEMS TO NOT C BE SENSITIVE TO THE EXACT VALUE OF 4.5. C SUM=0. NCOUNT=0 C DO 360 JYS=MAX(1,JY-2),MIN(NY,JY+2) DO 359 IXS=MAX(1,IX-2),MIN(NX,IX+2) C IF(P(IXS,JYS).GT.9998.9.OR.SEALND(IXS,JYS).GT.3.5)GO TO 359 C SUM=SUM+P(IXS,JYS) NCOUNT=NCOUNT+1 359 CONTINUE 360 CONTINUE C IF(NCOUNT.GT.0)THEN HOLD(IX,JY)=SUM/NCOUNT ELSE HOLD(IX,JY)=P(IX,JY) ENDIF C ELSE HOLD(IX,JY)=P(IX,JY) C WHEN NOT SMOOTHED, THE POINT IS MISSING OR LAND AND IS C PUT INTO HOLD( , ). ENDIF C 369 CONTINUE 370 CONTINUE C !$OMP END PARALLEL DO C C REPLACE P( , ) WITH HOLD( , ). C DO 380 JY=1,NY DO 379 IX=1,NX P(IX,JY)=HOLD(IX,JY) 379 CONTINUE 380 CONTINUE C 390 CONTINUE C C NOW SMOOTH WITHIN ONE GRIDPOINT ALONG THE OCEAN OR LAKE C COASTS WITH CSTSM ON LAST PASS ONLY. C IF(CSTSM.NE.0.)THEN C C TRANSFER POINTS IN Q( , ) INTO C( , ), BECAUSE Q( , ) C HAS ALREADY BEEN MODIFIED. CANNOT SMOOTH INTO THE SAME C ARRAY. C DO 425 JY=1,NY DO 424 IX=1,NX C(IX,JY)=Q(IX,JY) 424 CONTINUE 425 CONTINUE C !$OMP PARALLEL DO DEFAULT(SHARED) !$OMP& PRIVATE(IX,JY,IXE,JYE) !$OMP& SCHEDULE(DYNAMIC,10) C DO 430 JY=2,NYM1 DO 429 IX=2,NXM1 C IF(NINT(RMESH).EQ.1)THEN C THIS TEST FOR EFFICIENCY. USUALLY RMESH = 1. IXE=IX JYE=JY ELSE IXE=NINT((IX-1)*RMESH)+1 C IXE IS THE IX POSITION ON THE TERRAIN GRID. JYE=NINT((JY-1)*RMESH)+1 C JYE IS THE JY POSITION ON THE TERRAIN GRID. ENDIF C IF(SEALND(IXE,JYE).LT.3.5)THEN C THIS IS A WATER POINT. TEST ON 3.5 TO AVOID NINT. C IF(SEALND(IXE+1,JYE).GT.3.5.OR. 1 SEALND(IXE-1,JYE).GT.3.5.OR. 2 SEALND(IXE,JYE+1).GT.3.5.OR. 3 SEALND(IXE,JYE-1).GT.3.5)THEN C ONE OF THE SURROUNDING POINTS IS LAND. Q(IX,JY)=(C(IX,JY) 1 +BQW*(C(IX-1,JY)+C(IX+1,JY)+C(IX,JY-1)+C(IX,JY+1)))/BPW ENDIF C ELSE C THIS IS A LAND POINT. C IF(SEALND(IXE+1,JYE).LT.3.5.OR. 1 SEALND(IXE-1,JYE).LT.3.5.OR. 2 SEALND(IXE,JYE+1).LT.3.5.OR. 3 SEALND(IXE,JYE-1).LT.3.5)THEN C ONE OF THE SURROUNDING POINTS IS WATER. Q(IX,JY)=(C(IX,JY) 1 +BQW*(C(IX-1,JY)+C(IX+1,JY)+C(IX,JY-1)+C(IX,JY+1)))/BPW ENDIF C ENDIF C 429 CONTINUE 430 CONTINUE C !$OMP END PARALLEL DO C ENDIF C CALL TIMPR(KFILDO,KFILDO,'END ORSMTW ') C 400 CONTINUE RETURN END