diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /sys/gio/ncarutil/conlib/consld.f | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/gio/ncarutil/conlib/consld.f')
-rw-r--r-- | sys/gio/ncarutil/conlib/consld.f | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/sys/gio/ncarutil/conlib/consld.f b/sys/gio/ncarutil/conlib/consld.f new file mode 100644 index 00000000..fd40e10d --- /dev/null +++ b/sys/gio/ncarutil/conlib/consld.f @@ -0,0 +1,165 @@ + SUBROUTINE CONSLD (SCRARR) +C +C +-----------------------------------------------------------------+ +C | | +C | Copyright (C) 1986 by UCAR | +C | University Corporation for Atmospheric Research | +C | All Rights Reserved | +C | | +C | NCARGRAPHICS Version 1.00 | +C | | +C +-----------------------------------------------------------------+ +C +C +C +C THIS ROUTINE IS USED TO GENERATE A SHIELD WHERE CONTOUR +C DRAWING IS ALLOWED. +C +C THE ROUTINE TAKES THE SILHOUETTE INFORMATION FROM COMMON BLOCK +C CONR13 AND TRANSFORMS THIS INTO A SHIELD TO BE USED IN THE +C SCRATCH ARRAY PASSED IN BY THE USER (THE SCRATCH ARRAY HOLDS THE +C GRIDED DATA FROM THE INTERPOLATION). +C +C INPUT +C SCRARR-THE SCRATCH ARRAY HOLDING THE INTERPOLATED DATA +C +C +C +C + COMMON /CONRA1/ CL(30) ,NCL ,OLDZ ,PV(210) , + 1 FINC ,HI ,FLO + COMMON /CONRA6/ XST ,YST ,XED ,YED , + 1 STPSZ ,IGRAD ,IG ,XRG , + 2 YRG ,BORD ,PXST ,PYST , + 3 PXED ,PYED ,ITICK + COMMON /CONRA9/ ICOORD(500), NP ,MXXY ,TR , + 1 BR ,TL ,BL ,CONV , + 2 XN ,YN ,ITLL ,IBLL , + 3 ITRL ,IBRL ,XC ,YC , + 4 ITLOC(210) ,JX ,JY ,ILOC , + 5 ISHFCT ,XO ,YO ,IOC ,NC + COMMON /CONR12/ IXMAX ,IYMAX ,XMAX ,YMAX + COMMON /CONR13/XVS(50),YVS(50),ICOUNT,SPVAL,SHIELD, + 1 SLDPLT + LOGICAL SHIELD,SLDPLT +C +C INCREASE THE RESOLUTION OF THE SHIELD PROFILE +C + DIMENSION SCRARR(1) +C + SAVE + DATA RESINC/8.0/ +C +C STATEMENT FUNCTION TO MAKE ARRAY ACCESS SEEM LIKE MATRIX ACCESS +C +C +NOAO +C These statement functions are never called. +C SCRTCH(IXX,IYY) = SCRARR(IYY+(IXX-1)*IYMAX) +C IARVL(IXX,IYY) = IYY+(IXX-1)*IYMAX +C -NOAO + IGADDR(XXX,YYY) = + 1 IFIX((YYY-YST)/STPSZ+.5)+(IFIX((XXX-XST)/STPSZ+.5))*IYMAX +C +C SET THE SPECIAL VALUE +C + SPVAL = SPVAL * 2. +C +C SET THE USER ARRAY LOCATIONS TO TEMPORARY POINTERS +C +C LOOP FOR ALL SHIELD ELEMENTS +C + DO 100 IC = 1,ICOUNT +C +C ASSIGN LINE SEGMENT END POINTS +C + X1 = XVS(IC) + Y1 = YVS(IC) + IF (IC .EQ. ICOUNT) GO TO 10 + X2 = XVS(IC+1) + Y2 = YVS(IC+1) + GO TO 15 + 10 CONTINUE + X2 = XVS(1) + Y2 = YVS(1) + 15 CONTINUE +C +C INSURE THAT ALL POINTS ARE IN THE CONVEX HULL +C + IF (X1.GT.XED) X1 = XED + IF (X1.LT.XST) X1 = XST + IF (X2.GT.XED) X2 = XED + IF (X2.LT.XST) X2 = XST + IF (Y1.GT.YED) Y1 = YED + IF (Y1.LT.YST) Y1 = YST + IF (Y2.GT.YED) Y2 = YED + IF (Y2.LT.YST) Y2 = YST +C +C SET THE START OF THE LINE SEGMENT SCRATCH LOCATION TO +C THE SPECIAL VALUE +C + II = IGADDR(X1,Y1) + SCRARR(II) = SPVAL +C +C FIND THE LENGTH OF THE LINE SEGMENT +C + DIST = SQRT(((X2-X1)**2)+((Y2-Y1)**2)) +C +C IF LENGTH SHORTER THAN STEP SIZE THEN THERE IS NOTHING TO DO +C + IF (DIST .LE. STPSZ) GO TO 100 +C +C SET UP LOOP TO SET ALL CELLS ON THE LINE SEGMENT +C + NSTPS = (DIST/STPSZ)*RESINC + XSTP = (X2-X1)/FLOAT(NSTPS) + YSTP = (Y2-Y1)/FLOAT(NSTPS) + X = X1 + Y = Y1 + DO 20 K = 1,NSTPS + X = X + XSTP + Y = Y + YSTP + II = IGADDR(X,Y) + SCRARR(II) = SPVAL + 20 CONTINUE +C + 100 CONTINUE +C +C FILL THE SHIELDED AREAS +C FOR EACH COLUMN THE ELEMENTS ARE SET TO SPVAL IF FILL IS TRUE. +C THE VALUE OF FILL IS NEGATED EVERY TIME A SPVAL IS ENCOUNTERED, +C AND THAT CELL REMAINS UNCHANGED. +C +C LOOP THROUGH THE GRID +C + DO 39 I = 1,IXMAX +C +C GET THE START AND END FOR THE COLUMN +C + IYS = (I-1)*IYMAX+1 + IYE = I*IYMAX +C +C ADVANCE IN THE FORWARD DIRECTION +C + DO 32 J = IYS,IYE +C +C IF NOT SPVAL THEN SET CELL AS APPROPIATE +C + IF (SCRARR(J).EQ.SPVAL) GO TO 33 + SCRARR(J) = SPVAL + 32 CONTINUE + GO TO 39 +C +C ADVANCE IN THE BACKWARD DIRECTION +C + 33 CONTINUE + DO 34 J = 1,IYMAX + NJ =IYE+1-J +C IF NOT SPVAL THEN SET CELL AS APPROPIATE +C + IF (SCRARR(NJ).EQ.SPVAL) GO TO 39 + SCRARR(NJ) = SPVAL + 34 CONTINUE + 39 CONTINUE +C + RETURN + END |