SUBROUTINE SCALE(VMIN,VMAX,L,V0,DV,DL,NMAJ,NMIN,NDEC) C C Given the minimum and the maximum values and the length of the C axis, this routine generates the necessary parameters for a C call to SUBROUTINE AXES which will properly display the range C of values described. C C Input C C VMIN Minimum coordinate value. C VMAX Maximum coordinate value. C L Length of axis in floating point inches. C C Output C C V0 Value of "origin". C DV Change in value between major tick marks. C DL Distance between major tick marks in inches. C NMAJ Number of major tick marks. C NMIN Number of minor divisions per major division. C NDEC Number of digits to the right of the decimal point. C REAL L,LB C C - CORRECT NUMBER OF ARGUMENTS? CALL NUMARG( NARG ) IF( NARG .EQ. 9 ) GO TO 100 CALL OTSERR( 80 ) RETURN C 100 UMIN = SIGN( AMAX1(ABS(VMIN),1.E-20), VMIN ) UMAX = SIGN( AMAX1(ABS(VMAX),1.E-20), VMAX ) IF( UMIN .NE. UMAX ) GO TO 200 STEP = 0.10*UMAX IF( STEP .EQ. 0. ) STEP = 1. UMIN = UMIN-STEP UMAX = UMAX+STEP C C - CALCULATE THE LARGER ORDER OF MAGNITUDE. 200 LOM = MAX1( ALOG10(ABS(UMIN)), ALOG10(ABS(UMAX)) ) C - CALCULATE DV AND SET NMIN. DV = 10.**LOM NMIN = 10 C C - CALCULATE THE UPPER AND LOWER BOUNDS. 300 LB = IFIX(UMIN/DV)-1 IF( UMIN/DV-LB .GE. 0.999 ) LB = LB+1. UB = IFIX(UMAX/DV) IF( UMAX/DV-UB .GT. 0.001 ) UB = UB+1. C C - CALCULATE THE NUMBER OF MAJOR DIVISIONS AND LENGTH. NMAJ = UB-LB DL = L/NMAJ C C - CHECK TO SEE IF THE SCALING IS ACCEPTABLE. IF( (NMAJ.GE.4) .OR. (DL.LE.0.6) ) GO TO 600 C - CORRECT IF NOT. IF( NMIN .NE. 10 ) GO TO 400 NMIN = 5 DV = DV*0.5 GO TO 300 C 400 IF( NMIN .EQ. 2 ) GO TO 500 NMIN = 2 DV = DV*0.4 GO TO 300 C 500 NMIN = 10 DV = DV*0.5 GO TO 300 C C - CALCULATE V0 AND NDEC. 600 V0 = LB*DV C- CORRECT NMIN IF TOO MANY. IF( ( NMIN .EQ. 10 ) .AND. ( DL .LE. 1. ) ) NMIN = 2 NDEC = 0 IF( DV .GT. 0.9 ) RETURN NDEC = -ALOG10(DV/NMIN*1.1) IF( NMIN .NE. 10 ) NDEC = NDEC+1 NDEC = MIN0( MAX0(NDEC,0), 9 ) C RETURN END