You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.7 KiB
135 lines
2.7 KiB
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
|
|
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
|
C NTESS, the U.S. Government retains certain rights in this software.
|
|
C
|
|
C See packages/seacas/LICENSE for details
|
|
|
|
C=======================================================================
|
|
SUBROUTINE PLTINO(MIN,MAX,START,REND,INTER,EXP,NMIN)
|
|
REAL MIN,MAX,INTER,NINTER
|
|
INTEGER EXP
|
|
REAL NI
|
|
DATA SMALL/1.E-4/,DESINT/5./
|
|
|
|
DELTA = MAX - MIN
|
|
TMAX = MAX
|
|
TMIN = MIN
|
|
IF (DELTA.NE.0) THEN
|
|
EXP = NINT(LOG10(ABS(DELTA))) - 1
|
|
|
|
ELSE
|
|
IF (MIN.NE.0) THEN
|
|
EXP = NINT(LOG10(ABS(MIN))) - 1
|
|
EPS = .01*ABS(MIN)
|
|
|
|
ELSE
|
|
EXP = 0
|
|
EPS = .1
|
|
END IF
|
|
|
|
TMAX = MAX + EPS
|
|
TMIN = TMIN - EPS
|
|
END IF
|
|
|
|
TENEXP = 10.**EXP
|
|
RMIN = 1.E20
|
|
J = 1
|
|
DO 2470 I = 1,5
|
|
NINTER = DELTA/ (DBLE(I)*TENEXP)
|
|
TEMP = ABS(DESINT-NINTER)
|
|
IF (TEMP.LT.RMIN) THEN
|
|
J = I
|
|
RMIN = TEMP
|
|
END IF
|
|
|
|
2470 CONTINUE
|
|
INTER = DBLE(J)
|
|
IF (DELTA.EQ.0.) THEN
|
|
INTER = 1.
|
|
END IF
|
|
|
|
IF (INTER.EQ.1.) THEN
|
|
NMIN = 5
|
|
|
|
ELSE IF (INTER.EQ.2.) THEN
|
|
NMIN = 4
|
|
|
|
ELSE IF (INTER.EQ.3.) THEN
|
|
NMIN = 6
|
|
|
|
ELSE IF (INTER.EQ.4.) THEN
|
|
NMIN = 4
|
|
|
|
ELSE IF (INTER.EQ.5.) THEN
|
|
NMIN = 5
|
|
END IF
|
|
|
|
TENI = INTER*TENEXP
|
|
IF (TMIN.GE.0.) THEN
|
|
ADD = 0.
|
|
|
|
ELSE
|
|
ADD = -1.
|
|
END IF
|
|
|
|
RNI = TMIN/TENI
|
|
NI = INT(RNI)
|
|
IF (ABS(RNI-NI).LT.SMALL) THEN
|
|
ADD = 0.
|
|
END IF
|
|
|
|
START = (NI+ADD)*TENI
|
|
IF (TMAX.GE.0.) THEN
|
|
ADD = 1.
|
|
|
|
ELSE
|
|
ADD = 0.
|
|
END IF
|
|
|
|
RNI = TMAX/TENI
|
|
NI = INT(RNI)
|
|
IF (ABS(RNI-NI).LT.SMALL) THEN
|
|
ADD = 0.
|
|
END IF
|
|
|
|
REND = (NI+ADD)*TENI
|
|
START = START/TENEXP
|
|
REND = REND/TENEXP
|
|
IF (REND.NE.0.) THEN
|
|
2490 IF (.NOT. (ABS(REND).GT.10.)) GO TO 2500
|
|
REND = REND/10.
|
|
START = START/10.
|
|
INTER = INTER/10.
|
|
EXP = EXP + 1
|
|
GO TO 2490
|
|
|
|
2500 CONTINUE
|
|
END IF
|
|
|
|
IF (START.NE.0.) THEN
|
|
2510 IF (.NOT. (ABS(START).LT.1.)) GO TO 2520
|
|
REND = REND*10.
|
|
START = START*10.
|
|
INTER = INTER*10.
|
|
EXP = EXP - 1
|
|
GO TO 2510
|
|
|
|
2520 CONTINUE
|
|
END IF
|
|
|
|
IF (START.EQ.0 .OR. TMIN.EQ.0) THEN
|
|
RETURN
|
|
|
|
END IF
|
|
|
|
IF (START.EQ.REND) THEN
|
|
REND = START + INTER
|
|
END IF
|
|
|
|
IF (ABS(START-REND).EQ.INTER) THEN
|
|
NMIN = 10
|
|
END IF
|
|
|
|
RETURN
|
|
|
|
END
|
|
|