SUBROUTINE POLAR(X0,Y0,DMIN,DMAX,RMIN,RMAX,VMIN,VMAX, 1 OF, ITIC) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C POLAR PLOT C C X0,Y0 = ORIGIN OF POLAR COORDIANTE SYSTEM C (NEED NOT BE LOCATED ON THE PLOT!) C DMIN,DMAX = MIN, MAX DEGREES TO BE PLOTTED C RMIN,RMAX = INNER, OUTER ARCS IN SCALE INCHES C VMIN,VMAX = MIN,MAX VALUES FOR RADIAL AXIS C OF = ORIENTATION OFFSET IN DEGREES C ITIC = PLOT TIC CONTROL C BIT 0 = 1 FOR RADIAL LINES C BIT 1 = 1 FOR CONCENTRIC ARCS C BIT 2 = 1 FOR RADIAL TICS C BIT 3 = 1 FOR ANGULAR TICS C BIT 4 = 1 TO GENERATE A '+' AT THE ORIGIN C DATA RAD/0.0174533/ C C PLUS? IF(IAND(ITIC,16).EQ.16) CALL PLUS(X0,Y0) C C FIND CONVENIENT DEGREE SCALING MIN = DMIN MAX = DMAX IF(MIN.GT.MAX) MAX = MAX+360 ISP = MAX-MIN C RADIAL LINES HOW OFTEN? JRAD = 10 IF(ISP.GT.30) JRAD = 15 IF(ISP.GT.90) JRAD = 30 C ADJUST MIN,MAX IF(MOD(MIN,JRAD).NE.0) MIN = (MIN/JRAD)*JRAD IF(MOD(MAX,JRAD).NE.0) MAX = (MAX/JRAD)*JRAD+JRAD C OFFSET FIGURED IN DMIN = MIN DMAX = MAX MIN = MIN+OF MAX = MAX+OF C C AXIS LENGTH XL = RMAX-RMIN C C SCALE RADIAL AXIS CALL SCALE(VMIN,VMAX,XL,DX,DV,DL,NMAJ,NMIN,NFRAC) C C DRAW OUTSIDE ARC CALL CIRC(X0,Y0,MIN,MAX,RMAX,JRAD,-1,10) C OMIT INNER ARC IF AT ORIGIN IF(RMIN.EQ.0.) GO TO 27 C INNER ARC CALL CIRC(X0,Y0,MIN,MAX,RMIN,JRAD,1,10) C C LABELED AXIS 27 ANG = MIN CALL CONV1(ANG,X0,Y0,RMIN,XX,YY) CALL AXISL(XX,YY,VMIN,DV,DL,NMAJ,NMIN,NFRAC,ANG) C LABLE THIS ANGLE PANG = DMIN CALL DEGL(X0,Y0,RMAX,ANG,PANG) C OUTSIDE AXIS C OMIT IF FULL CIRCLE IF(ISP.EQ.360) GO TO 28 ANG = MAX CALL CONV1(ANG,X0,Y0,RMIN,XX,YY) CALL AXISR(XX,YY,DL,NMAJ,NMIN,ANG) C LABEL THIS ANGLE PANG = DMAX IF(PANG.GT.360.) PANG = PANG-360. CALL DEGL(X0,Y0,RMAX,ANG,PANG) 28 CONTINUE C INTERIOR CIRCLES/ARCS R = RMIN+DL DO 2 K = 2,NMAJ CALL CIRC(X0,Y0,MIN,MAX,R,JRAD,0,ITIC) 2 R = R+DL C C INTERIOR RADIAL AXES ANG = MIN PANG = DMIN 5 ANG = ANG+JRAD IA = ANG IF(IA.GE.MAX) RETURN PANG = PANG+JRAD IF(PANG.GT.360.) PANG = PANG-360. CALL CONV1(ANG,X0,Y0,RMIN,XX,YY) CALL AXISP(XX,YY,DL,NMAJ,ANG,ITIC) C LABEL CALL DEGL(X0,Y0,RMAX,ANG,PANG) GO TO 5 C END SUBROUTINE AXISP(X0,Y0,DL,NMAJ,ANG,ITIC) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C THIS ROUTINE DRAWS A RADIAL AXIS WITH ARC-ED C TIC MARKS ON BOTH SIDES OF THE AXIS C C X0,Y0 = STARTING POINT OF AXIS C DL = MAJOR INCREMENT LENGTH C NMAJ = NUMBER OF MAJOR TIC MARKS C ANG = ANGLE OF AXIS IN DEGREES C ITIC = TIC CONTROL C 0 No tick marks. C 1 Radial lines. C 4 Radial ticks. C REAL LN,LNM IF(ITIC.EQ.0) RETURN RAD = 0.0174533 A = ANG*RAD CS = COS(A) SN = SIN(A) C MAJOR TIC LENGTH LN = DELTAH*.75 C SCALE INCREMENTS - MAJOR INTERVALS DX = DL*CS DY = DL*SN IF(IAND(ITIC,4).NE.4) GO TO 9 C ORIGIN XP = X0 YP = Y0 C PLOT TICS DO 2 I = 1,NMAJ XP = X0+DX*I YP = Y0+DY*I 2 CALL ATIC(XP,YP,X0,Y0,LN) 9 IF(IAND(ITIC,1).NE.1) RETURN XP = X0+NMAJ*DX YP = Y0+NMAJ*DY C AXIS LINE CALL CALPLT(XP,YP,3) CALL CALPLT(X0,Y0,2) RETURN END SUBROUTINE AXISR(X0,Y0,DL,NMAJ,NMIN,ANG) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C DRAW POLAR AXIS WITH TICS TO THE RIGHT OF RADIAL C C X0,Y0 = STARTING POINT C DL = MAJOR INCREMENT IN SCALE C NMAJ = NUMBER OF MAJOR TIC MARKS C NMIN = NUMBER OF MINOR TIC MARKS C ANG = ANGLE OF AXIS (0-360) C RAD = 0.0174533 A = ANG*RAD CS = COS(A) SN = SIN(A) C LEN OF MAJOR TICS XL = DELTAH C MINOR XLM = .6*XL C DELTAS FOR MAJOR INTERVALS DX = DL*CS DY = DL*SN C DELTAS FOR MINOR INTERVALS DXM = DX/NMIN DYM = DY/NMIN C BEGINNING PLOT POINT XP = X0 YP = Y0 C PLOT TICS DO 2 I = 1,NMAJ IF(NMIN.LE.1) GO TO 22 C MINOR TICS DO 20 IMIN = 1,NMIN-1 XP = XP+DXM YP = YP+DYM 20 CALL RTIC(XP,YP,X0,Y0,XLM) 22 CONTINUE C MAJOR TICS XP = X0+DX*I YP = Y0+DY*I 2 CALL RTIC(XP,YP,X0,Y0,XL) C DRAW RADIAL CALL CALPLT(XP,YP,3) CALL CALPLT(X0,Y0,2) RETURN END SUBROUTINE RTIC(X,Y,X0,Y0,XL) C C DRAW TIC MARKS TO THE RIGHT OF AXIS C C X,Y = TIC POSITION C X0,Y0 = ORIGIN OF AXIS C XL = TIC LENGTH C R = SQRT((X-X0)**2+(Y-Y0)**2) A = ATAN2((Y-Y0),(X-X0)) IF(A.LT.0.) A = A+6.28318 DEL = XL/R A1 = A-DEL AINC = (A1-A)*0.5 B = A IPEN = 3 DO 1 I = 1,3 XX = X0+R*COS(B) YY = Y0+R*SIN(B) CALL CALPLT(XX,YY,IPEN) B = B+AINC 1 IPEN = 2 RETURN END SUBROUTINE AXISL(X0,Y0,V0,DV,DL,NMAJ,NMIN,NDEC,ANG) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C DRAW POLAR AXIS WITH TICS TO THE LEFT OF RADIAL C AND LABEL ON THE RIGHT C C X0,Y0 = STARTING POINT C DL = MAJOR INCREMENT IN SCALE C NMAJ = NUMBER OF MAJOR TIC MARKS C NMIN = NUMBER OF MINOR TIC MARKS C NDEC = NUMBER OF DECIMAL POINTS IN LABELS C ANG = ANGLE OF AXIS (0-360) C RAD = 0.0174533 A = ANG*RAD CS = COS(A) SN = SIN(A) C LEN OF MAJOR TICS XL = DELTAH C MINOR XLM = .6*XL C DELTAS FOR MAJOR INTERVALS DX = DL*CS DY = DL*SN C DELTAS FOR MINOR INTERVALS DXM = DX/NMIN DYM = DY/NMIN C BEGINNING PLOT POINT, VALUE XP = X0 YP = Y0 VL = V0 C PLOT TICS AND LABEL AXIS DO 2 I = 1,NMAJ C LABLING POSITION XP1 = XP+2.*CSIZE*SN YP1 = YP-2.*CSIZE*CS CALL NUMB(XP1,YP1,0.1,VL,0.,NDEC) IF(NMIN.LE.1) GO TO 22 C MINOR TICS DO 20 IMIN = 1,NMIN-1 XP = XP+DXM YP = YP+DYM 20 CALL LTIC(XP,YP,X0,Y0,XLM) 22 CONTINUE C MAJOR TICS XP = X0+DX*I YP = Y0+DY*I CALL LTIC(XP,YP,X0,Y0,XL) 2 VL = VL+DV XP = X0+NMAJ*DX YP = Y0+NMAJ*DY XP1 = XP+2.*CSIZE*SN YP1 = YP-2.*CSIZE*CS CALL NUMB(XP1,YP1,0.1,VL,0.,NDEC) C DRAW RADIAL CALL CALPLT(XP,YP,3) CALL CALPLT(X0,Y0,2) RETURN END SUBROUTINE LTIC(X,Y,X0,Y0,XL) C C DRAW TIC MARKS TO THE LEFT OF AXIS C C X,Y = TIC POSITION C X0,Y0 = ORIGIN OF AXIS C XL = TIC LENGTH C R = SQRT((X-X0)**2+(Y-Y0)**2) A = ATAN2((Y-Y0),(X-X0)) IF(A.LT.0.) A = A+6.28318 DEL = XL/R A1 = A+DEL AINC = (A1-A)*0.5 B = A IPEN = 3 DO 1 I = 1,3 XX = X0+R*COS(B) YY = Y0+R*SIN(B) CALL CALPLT(XX,YY,IPEN) B = B+AINC 1 IPEN = 2 RETURN END SUBROUTINE ATIC(XP,YP,X0,Y0,XL) C C DRAW ARC C C XP,YP = MID-POINT OF ARC C X0,Y0 = ORIGIN OF ARC C XL = LENGTH OF ARC IN INCHES C A = ATAN2((YP-Y0),(XP-X0)) IF(A.LT.0.) A = 6.283185+A R = SQRT((XP-X0)**2+(YP-Y0)**2) DEL = XL/R A1 = A-DEL A2 = A+DEL AINC = (A2-A1)/4. B = A1 IPEN = 3 DO 1 I = 1,5 X = X0+R*COS(B) Y = Y0+R*SIN(B) CALL CALPLT(X,Y,IPEN) B = B+AINC 1 IPEN = 2 RETURN END SUBROUTINE NUMB(X,Y,HT,V,ANG,NDEC) LOGICAL*1 FRMT(7),VALUE(15) C CALL SIZEUP(HT,ANG) C - CALCULATE PRINT FIELD SIZE AND GENERATE FORMAT. NTOTAL = 15 NPRINT = NTOTAL IFRAC = MIN0( MAX0(0,NDEC), 9 ) IF( IFRAC .EQ. 0 ) NPRINT = NPRINT-1 ENCODE(7,10,FRMT) IFRAC 10 FORMAT( '(F15.',I1,')' ) MAXW = 0 ZERO = 10.**( -IFRAC-1 ) C C - ANNOTATE THE AXIS AND FIND THE MINIMUM NUMBER OF LEADING BLANKS. MINB = NPRINT C IF( ABS(V) .LE. ZERO ) GO TO 1200 ENCODE(NTOTAL,FRMT,VALUE) V C C - COUNT THE NUMBER OF LEADING BLANKS. DO 1000 ICHAR=1,NPRINT IF( VALUE(ICHAR) .NE. "40 ) GO TO 1100 1000 CONTINUE 1100 IF( ABS(V) .GE. 1.-ZERO ) GO TO 1400 GO TO 1300 C C - SPECIAL CASE, V = 0. 1200 ICHAR = 14 VALUE(14) = '0' VALUE(15) = '.' GO TO 1400 C C - SPECIAL CASE, ABS(V) .LE. 1. 1300 ICHAR = ICHAR + 1 IF( V .LT. 0. ) VALUE(ICHAR) = '-' C 1400 NWIDTH = NPRINT - ICHAR + 1 MAXW = MAX0( NWIDTH, MAXW ) C CALL HCGEN(X,Y,VALUE(ICHAR),NWIDTH) C RETURN END SUBROUTINE CIRC(X0,Y0,MIN,MAX,R,JRAD,INTIC,ITIC) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C ROUTINE DRAWS ARCS (OR CIRCLES) WITH C INWARD OR OUTWARD TICS, OR NO TICS C C X0,Y0 = ORIGIN OF CIRCLE OR ARC C MIN,MAX = DEGREES TO ENCOMPASS C R = RADIAL DISTANCE FROM ORIGIN C JRAD = SPACING OF TIC MARKS IN DEGREES C INTIC = TIC-TYPE INDICATOR C = - FOR TICS INSIDE ARC C = + FOR TICS OUTSIDE ARC C = 0 FOR TICS THROUGH ARC C ITIC = PLOT TIC CONTROL C = 2 FOR PLOTTING ARCS OR CIRCLES C = 8 FOR TICS ANY TYPE TICS C DATA RAD/0.0174533/ IF(IAND(ITIC,2).NE.2) GO TO 10 C DRAW ARC OR CIRCLE IPEN = 3 DO 20 I = MIN,MAX A = I*RAD XP = X0+R*COS(A) YP = Y0+R*SIN(A) CALL CALPLT(XP,YP,IPEN) 20 IPEN = 2 C 10 IF(IAND(ITIC,8).NE.8) RETURN JTIC = JRAD/5 IF(JTIC.EQ.6) JTIC = 5 NMIN = JRAD/JTIC-1 AN = RAD*JTIC C MAJOR TIC LENGTH TIC = DELTAH C MINOR TIC LENGTH TICM = TIC*0.6 R1 = R R2 = R R11 = R R22 = R IF(INTIC.NE.0) GO TO 11 TIC = TIC*.6 R1 = R-TIC R2 = R+TIC 11 IF(INTIC.LT.0) R1 = R-TIC IF(INTIC.LT.0) R11 = R-TICM IF(INTIC.GT.0) R1 = R+TIC IF(INTIC.GT.0) R11 = R+TICM C DO 1 I = MIN,MAX-JRAD,JRAD A = I*RAD CA = COS(A) SA = SIN(A) XP = X0+R1*CA YP = Y0+R1*SA X2 = X0+R2*CA Y2 = Y0+R2*SA CALL CALPLT(X2,Y2,3) CALL CALPLT(XP,YP,2) IF(INTIC.EQ.0) GO TO 1 DO 1 J = 1,NMIN A = A+AN CA = COS(A) SA = SIN(A) XP = X0+R11*CA YP = Y0+R11*SA X2 = X0+R22*CA Y2 = Y0+R22*SA CALL CALPLT(XP,YP,3) CALL CALPLT(X2,Y2,2) 1 CONTINUE RETURN END SUBROUTINE CONV1(ANG,X0,Y0,R,X,Y) DATA RAD/0.0174533/ A = ANG*RAD CA = COS(A) SA = SIN(A) X = X0+R*CA Y = Y0+R*SA RETURN END SUBROUTINE DEGL(X0,Y0,R,ANG,PANG) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj C C LABEL DEGREES AT END OF RADIAL AXIS C C X0,Y0 = ORIGIN C R = END OF RADIAL AXIS IN SCALE INCHES C ANG = ANGLE TO BE LABELED C PANG = LABEL FOR THIS ANGLE C DATA RAD/0.0174533/ C C LETTER HEIGHT HT = CSIZE A = ANG*RAD SA = SIN(A) CA = COS(A) C KEEP LABELS READABLE B = ABS(ANG) IF(B.GT.180.) B = 360.-B C DISTANCE FROM AXIS D = DELTAV+(B/180.)*DELTAV*1.5 XX = X0+(R+D)*CA YY = Y0+(R+D)*SA CALL NUMB(XX,YY,HT,PANG,0.,0) RETURN END SUBROUTINE PLUS(X0,Y0) COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj X = X0-0.5*DELTAH Y = Y0-0.5*CSIZE X2 = X0+DELTAH*0.5 Y2 = Y0+CSIZE*0.5 CALL CALPLT(X,Y0,3) CALL CALPLT(X2,Y0,2) CALL CALPLT(X0,Y2,3) CALL CALPLT(X0,Y,2) RETURN END