Web pdp-10.trailing-edge.com

Trailing-Edge - PDP-10 Archives - decuslib10-12 - 43,50547/pltlib/cplot1/scale.for
There are 3 other files named scale.for in the archive. Click here to see a list.
```      SUBROUTINE SCALE (ARRAY,AXSLEN,NPT)
C
C
C    THIS ROUTINE ALLOWS THE CALLER SCALE THE ARRAY OF DATA.
C
C
C    CALLING SEQUENCE:
C
C           CALL SCALE (ARRAY,AXSLEN,N)
C
C    ARRAY  - (I/O) THE ARRAY TO SCALED (ARRAY MUST BE DIMENSIONED TO AT
C              LEAST N+2)
C
C    AXSLEN - (I) THE LENGTH OF THE AXIS
C
C    N      - (I) THE NUMBER OF POINTS IN THE ARRAY (IF N IS LESS THAN ZERO
C              THE MAXIMUM TO MINIMUM IS FOUND AND THE ABSOLUTE VALUE
C              OF N IS USED)
C
C      NOTE: UPON RETURN ARRAY(N+1) EQUALS THE MINIMUM (OR MAXIMUM)
C            AND ARRAY(N+2) EQUALS THE DELTA VALUE
C
C
C    SUBPROGRAMS USED:
C
C      IFIX, MAXMIN, AINT, IABS, ABS AND ALOG10
C
C
DIMENSION ARRAY(1),DEL(5)
DATA DEL / 1,2,4,5,8 /

IPT = IABS(NPT)
CALL MAXMIN (ARRAY,IPT,AMAX,AMIN)

AXSLN = AINT(ABS(AXSLEN))
DELTA = (AMAX - AMIN) / AXSLN
EXP = ALOG10(DELTA)
IF (EXP .LT. 0) EXP = EXP - 0.9999999
POWER = 10.0 ** IFIX(EXP)

AMIN = AMIN / POWER
IF (AMIN .LT. 0) AMIN = AMIN - 0.9999999
AMIN = AINT(AMIN) * POWER

DELTA = (AMAX - AMIN) / AXSLN
EXP = ALOG10(DELTA)
IF (EXP .LT. 0) EXP = EXP - 0.9999999
POWER = 10.0 ** IFIX(EXP)

DELTA = DELTA / POWER
DO 10 I = 1,5
IF (DELTA .GT. DEL(I)) GOTO 10
DELTA = DEL(I)
GOTO 20
10       CONTINUE
DELTA = 10.0
20    DELTA = DELTA * POWER

AMIN = AMIN / DELTA
IF (AMIN .LT. 0.0) AMIN = AMIN - 0.9999999
AMIN = AINT(AMIN) * DELTA
IF (NPT .GE. 0) GOTO 30
AMIN = AMIN + DELTA * AXSLN
DELTA = -DELTA

30    ARRAY(IPT+1) = AMIN
ARRAY(IPT+2) = DELTA

RETURN
END
```