SUBROUTINE LGAXS(X,Y,LABEL,NC,S,THETA,AMIN,DELTA) C C NAME OF PGRM LOGARITHMIC AXIS PLOT *** DECUS # 11-431 *** C AUTHOR CHARLES E. COHN, ARGONNE NATIONAL LABORATORY C PURPOSE TO GENERATE LOGARITHMIC AXES FOR CALCOMP GRAPHS C C Modified 11/21/84 by T.EUSER,PMRL/EMR OTTAWA,CANADA C for compatibility with standard calcomp routines C C X,Y(real) =the coordinates of the origin of the axis in inches C LABEL =the hollerith string containing the axis label. C it will be 0.14 inches high. C NC(int)=the number of characters in the legend.if positive, C legend is on clockwise side.if negative,on ccw side. C S(real)=the length of the axis in inches C THETA(real)=angle in degrees between the axis and +x direction. C AMIN(real)=minimum exponent value shown on the axis C DELTA(real)=number of decades shown on the axis C BYTE LABEL(1) INTEGER SGN REAL LENGTH DIMENSION Z(9),DSN(9),DCS(9) DATA Z(1),Z(2),Z(3),Z(4),Z(5),Z(6),Z(7),Z(8),Z(9)/.3010299, 1 .1760913,.1249387,.9691001E-1,.7918125E-1,.6694679E-1, 2 .5799195E-1,.5115252E-1,.4575749E-1/ S=ABS(S) NDEC=INT(DELTA) !number of decades IMAX=INT(AMIN)+NDEC !find maximum power of ten IF(IMAX)5,5,6 !round 5 IMAX=IMAX+1 6 SGN=ISIGN(1,NC) NNC=NC*SGN TH=THETA*.0174532925 !calculate rotational co-ordinates CTH=COS(TH) STH=SIN(TH) XB=X YB=Y DS=S/FLOAT(NDEC) !axis increment in inches SDS=STH*DS !and rotational co-ordinates CDS=CTH*DS DO 3 J=1,9 TEMP1=Z(J) DSN(J)=TEMP1*SDS 3 DCS(J)=TEMP1*CDS HC=.1*CTH HS=.1*STH K=AMIN TEMP1=2. XA=X+HS*TEMP1*SGN YA=Y-HC*TEMP1*SGN CALL PLOT(XA,YA,3) !move to the 1st point CALL PENDN !down boy! XD=X+SGN*HS YD=Y-SGN*HC DO 21 I=1,NDEC XA=XA+CDS YA=YA+SDS CALL PLOT(XB,YB,1) !move back 100 DO 20 J=1,9 TEMP1=DCS(J) TEMP2=DSN(J) XC=XB+TEMP1 YC=YB+TEMP2 CALL PLOT(XC,YC,1) !slide along the axis XD=XD+TEMP1 YD=YD+TEMP2 IF(J.GE.9)GOTO 19 18 CALL PLOT(XD,YD,1) !next tick mark CALL PLOT(XC,YC,1) !move back 19 XB=XC 20 YB=YC 21 CALL PLOT(XA,YA,1) !1st point just a little bit longer IMIN=AMIN IF(IMIN+10)60,60,61 60 GO TO 71 61 IF(IMAX+10)60,60,63 63 IF(IMAX-100)64,60,60 64 IF(IMIN-100)65,60,60 65 IF(IMIN-10)66,67,67 67 GO TO 71 66 IF(IMAX-10)68,67,67 68 IF(IMIN)67,69,69 69 IF(IMAX)67,71,71 71 EL=.12 IF(THETA.NE.0.)EL=.2 IF(EL.EQ..2.AND.IABS(K).GE.10)EL=.3 IF(EL.EQ..2.AND.IABS(K).GE.100)EL=.4 XB=X YB=Y XA=XB-(EL+.05)*SGN*STH-EL TEMP1=.07 YA=YB+1.3*SGN*HC-TEMP1 XC=XA+.26 YC=YA+.05 N=NDEC+1 DO 30 I=1,N CALL SYMBOL(XA,YA,.14,2H10,0.,2) IF (K-10) 40,40,41 40 NP=1 41 IF(K)42,44,43 42 NP=2 GO TO 50 43 IF(K+10)44,45,45 44 NP=3 GO TO 50 45 IF(K-100)42,40,40 50 CALL NUMBER(XC,YC,.085,FLOAT(K),0.,-1) XA=XA+CDS XC=XC+CDS YA=YA+SDS YC=YC+SDS K=K+1 30 CONTINUE C ============================================================================ C C Now let's center the axis title C NNC=IABS(NNC) HAFWAY=S/2. LENGTH=.4 IF(THETA.NE.0.)LENGTH=EL*4. ANGLE=(THETA+360.)*FLOAT(SGN) SXT=X+HAFWAY*CTH SYT=Y+HAFWAY*STH ANG=TH+FLOAT(SGN)*1.570796327 !orthogonality - which way ? XPT=SXT+LENGTH*COS(ANG) YPT=SYT+LENGTH*SIN(ANG) CALL SYMBOL(XPT,YPT,-.24,LABEL,ANGLE,NNC) RETURN END