Cloned SEACAS for EXODUS library with extra build files for internal package management.
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.

98 lines
3.0 KiB

2 years ago
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 CONRNG (ISLINE, FMINI, FMAXI, NCNTR, DELC, CMIN, CMAX)
C=======================================================================
C --*** CONRNG *** (DETOUR) Calculate contour range
C -- Written by Amy Gilkey - revised 06/09/87
C --
C --CONRNG calculates a new contour range from the minimum and maximum
C --values. Note that the contour interval and range are rounded to
C --get "nice" numbers. For the line contour, the contour minimum and
C --maximum should fall between the actual value range (about one-half
C --an interval in). For the paint contour, the contour range must
C --cover the actual value range.
C --
C --Parameters:
C -- ISLINE - IN - true if line contour, else paint contour
C -- FMINI, FMAXI - IN - the minimum and maximum value in the contour plot
C -- NCNTR - IN/OUT - the number of contours defined
C -- DELC - OUT - the contour interval
C -- CMIN - OUT - the minimum contour value
C -- CMAX - OUT - the maximum contour value
LOGICAL ISLINE
CHARACTER*8 STRING
IF (NCNTR .LE. 0) NCNTR = 6
C --Check for minimum equal maximum
IF (FMINI .EQ. FMAXI) THEN
CALL PRTERR ('CMDWARN', 'Contour variable does not vary'
& // ' - an artificial range is supplied')
IF (FMINI .EQ. 0.0) THEN
FMIN = -1.0
FMAX = 1.0
ELSE
FMIN = FMINI - .05 * ABS(FMINI)
FMAX = FMINI + .05 * ABS(FMINI)
END IF
ELSE
FMIN = FMINI
FMAX = FMAXI
END IF
IF (ISLINE) THEN
C --Compute decimal scale factor
DELC = (FMAX - FMIN) / NCNTR
WRITE (STRING, '(E8.1)') DELC
STRING(4:4) = '1'
READ (STRING, '(E8.1)') P10
C --Compute rounded increment and offset
DELC = .5 * P10 * NINT (2. * DELC / P10)
CMIN = .5 *
& (P10 * NINT ((FMAX + FMIN) / P10) - (NCNTR-1) * DELC)
CMAX = CMIN + (NCNTR-1) * DELC
ELSE
FRNG = FMAX - FMIN
100 CONTINUE
C --Compute decimal scale factor
DELC = FRNG / NCNTR
WRITE (STRING, '(E8.1)') DELC
STRING(4:4) = '1'
READ (STRING, '(E8.1)') P10
C --Compute rounded increment and offset
DELC = .25 * P10 * NINT (4. * DELC / P10)
CMIN = .5 * (P10 * NINT ((FMAX + FMIN) / P10) - NCNTR * DELC)
IF ((FMIN .GE. 0.0) .AND. (CMIN .LT. 0.0)) CMIN = 0.0
CMAX = CMIN + NCNTR * DELC
C --Adjust and recompute, if needed
IF ((CMIN .GT. FMIN) .OR. (CMAX .LT. FMAX)) THEN
IF (CMIN .GT. FMIN) FRNG = FRNG + .25*DELC
IF (CMAX .LT. FMAX) FRNG = FRNG + .25*DELC
GOTO 100
END IF
END IF
RETURN
END