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.
 
 
 
 
 
 

362 lines
12 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 SPPLOT (A, NEUTRL, NPTIMS, IPTIMS, TIMES,
* NENUM, DIST, PLTVAL, NAMES, IXSEGV, ISEGEL, SQDIST, LIDSP,
& BLKCOL, MAPEL, MAPND)
C=======================================================================
C --*** SPPLOT *** (SPLOT) Plot curves for all times
C -- Modified by John Glick - 11/9/88
C -- Written by Amy Gilkey - revised 01/22/88
C --
C --SPPLOT generates all the plots requested for the plot set (for
C --all plot times). It scales the X axis and the Y axis (as requested).
C --It then processes each curve by reading the data and calling SPPLT1.
C --
C --Parameters:
C -- A - IN - the dynamic memory base array
C -- NEUTRL - IN - the type of neutral file to write.
C -- NPTIMS - IN - the number of selected times
C -- IPTIMS - IN - the selected time steps
C -- TIMES - IN - the database times
C -- NENUM - IN - the selected node/element numbers
C -- DIST - IN - the plot distances
C -- PLTVAL - IN - the plot data
C -- NAMES - IN - the variable names
C -- IXSEGV - IN - the index into ISEGEL for "segmented" variables;
C -- 0 if all selected elements are defined
C -- ISEGEL - IN - the NENUM indices of the defined elements;
C -- ISEGEL(0,i) = the number of defined elements
C -- SQDIST - SCRATCH - size = NNENUM
C -- LIDSP(0:*) - IN - the indices of the selected variables
C -- whose values will be displayed on the plot legend.
C -- LIDSP(0) = the number of variables in the list.
C -- LIDSP(i) identifies the ith variable in the list.
C -- If LIDSP(i) > 0, LIDSP(i) is the id of a history variable.
C -- If LIDSP(i) < 0, -LIDSP(i) is the id of a global variable.
C -- If LIDSP(i) = 0, TIME is to be displayed on the plot legend
C -- BLKCOL - IN/OUT - the user selected colors of the element blocks.
C -- BLKCOL(0) = 1 if the user defined material
C -- colors should be used in mesh plots.
C -- = -1 if program selected colors should
C -- be used.
C -- BLKCOL(i) = the user selected color of element
C -- block i:
C -- -2 - no color selected by user.
C -- -1 - black
C -- 0 - white
C -- 1 - red
C -- 2 - green
C -- 3 - yellow
C -- 4 - blue
C -- 5 - cyan
C -- 6 - magenta
C --
C --Common Variables:
C -- Uses NNENUM of /SELNE/
C -- Uses NSPVAR of /SPVARS/
C -- Uses DOGRID, ISYTYP, OVERLY, OVERTM of /XYOPT/
C -- Uses IXSCAL, IYSCAL of /XYLIM/
C -- Sets XMIN, XMAX, YMIN, YMAX of /XYLIM/
PARAMETER (NUMSYM = 6, NUMLIN = 6)
include 'params.blk'
include 'dbnums.blk'
include 'selne.blk'
include 'spvars.blk'
include 'xyopt.blk'
include 'xylim.blk'
DIMENSION A(*)
INTEGER IPTIMS(NPTIMS)
REAL TIMES(*)
INTEGER NENUM(NNENUM)
REAL DIST(NNENUM)
REAL PLTVAL(NNENUM,NSPVAR,*)
CHARACTER*(*) NAMES(*)
INTEGER IXSEGV(*)
INTEGER ISEGEL(0:NNENUM,*)
REAL SQDIST(NNENUM)
INTEGER LIDSP(0:*)
INTEGER BLKCOL(0:NELBLK)
INTEGER MAPEL(*), MAPND(*)
LOGICAL NUMCRV
CHARACTER*1024 TXLAB, TYLAB
LOGICAL SVOVER, SVOVTM
CHARACTER*8 SVLSID
C --Save user-set parameters and set program parameters (to eliminate
C --checks for senseless conditions)
SVOVTM = OVERTM
SVOVER = OVERLY
SVLSID = LABSID
IF ((NEUTRL .NE. 0) .OR. (NSPVAR .LE. 1)) OVERLY = .FALSE.
IF ((NEUTRL .NE. 0) .OR. (NPTIMS .LE. 1)) OVERTM = .FALSE.
IF (IXSCAL .NE. 'SET') THEN
IXSCAL = 'ALL'
END IF
IF (IYSCAL .NE. 'SET') THEN
IYSCAL = IAXSCA
IF (NEUTRL .GT. 0) THEN
IYSCAL = 'CURVE'
ELSE IF ((NSPVAR .LE. 1) .AND. (NPTIMS .LE. 1)) THEN
IYSCAL = 'ALL'
ELSE IF ((OVERLY .OR. (NSPVAR .LE. 1))
& .AND. (OVERTM .OR. (NPTIMS .LE. 1))) THEN
IF (IYSCAL .EQ. 'PLOT') IYSCAL = 'ALL'
ELSE IF (.NOT. (OVERLY .OR. OVERTM)) THEN
IF (IYSCAL .EQ. 'CURVE') IYSCAL = 'PLOT'
END IF
END IF
NC = 1
IF (OVERLY) NC = NPTIMS
IF (OVERTM) NC = NSPVAR
IF (((.NOT. OVERLY) .AND. (.NOT. OVERTM))
& .OR. ((ISYTYP .LT. 0) .AND. (NUMSYM .GE. NC))
& .OR. ((LINTYP .LT. 0) .AND. (NUMLIN .GE. NC)))
& LABSID = 'NONE'
NUMCRV = (LABSID .NE. 'NONE')
C --Compact variables which have undefined element values (distances
C --must be compacted for each variable at a later time)
DO 100 N = 1, NSPVAR
IF (IXSEGV(N) .GT. 0) THEN
IX = IXSEGV(N)
CALL SQZIXV (ISEGEL(0,IX), ISEGEL(1,IX),
& PLTVAL(1,N,NPT), PLTVAL(1,N,NPT))
END IF
100 CONTINUE
C --Scale distance parameters (only done once)
IF (IXSCAL .NE. 'SET') THEN
CALL MINMAX (NNENUM, DIST, XMIN, XMAX)
IF (NEUTRL .EQ. 0)
* CALL EXPMAX (LABSID, XMIN, XMAX)
END IF
C --Scale Y axis if same scale requested
IF (IYSCAL .EQ. 'ALL') THEN
DO 120 NPT = 1, NPTIMS
DO 110 N = 1, NSPVAR
IF (IXSEGV(N) .LE. 0) THEN
NNE = NNENUM
ELSE
NNE = ISEGEL(0,IXSEGV(N))
END IF
CALL MINMAX (NNE, PLTVAL(1,N,NPT), VMIN, VMAX)
IF ((NPT .EQ. 1) .AND. (N .EQ. 1)) THEN
YMIN = VMIN
YMAX = VMAX
ELSE
YMIN = MIN (YMIN, VMIN)
YMAX = MAX (YMAX, VMAX)
END IF
110 CONTINUE
120 CONTINUE
call adjrng(ymin, ymax)
CALL EXPMAX (' ', YMIN, YMAX)
END IF
C --Set the total number of plots
IF (OVERTM) THEN
NPTOT = NSPVAR
ELSE IF (OVERLY) THEN
NPTOT = NPTIMS
ELSE
NPTOT = NSPVAR * NPTIMS
END IF
IF (OVERTM) THEN
DO 160 N = 1, NSPVAR
IF (IXSEGV(N) .LE. 0) THEN
NNE = NNENUM
ELSE
NNE = ISEGEL(0,IXSEGV(N))
END IF
C --Calculate axis limits if to be done once for all times
IF (IYSCAL .EQ. 'PLOT') THEN
DO 130 NPT = 1, NPTIMS
CALL MINMAX (NNE, PLTVAL(1,N,NPT), VMIN, VMAX)
IF (NPT .EQ. 1) THEN
YMIN = VMIN
YMAX = VMAX
ELSE
YMIN = MIN (YMIN, VMIN)
YMAX = MAX (YMAX, VMAX)
END IF
130 CONTINUE
call adjrng(ymin, ymax)
CALL EXPMAX (' ', YMIN, YMAX)
END IF
C --Label plot if overlaid by time
140 CONTINUE
CALL SPLAB (A, NPTIMS, IPTIMS, TIMES, NENUM,
& N, 1, NUMCRV, NAMES, TXLAB, TYLAB,
& LIDSP, BLKCOL, MAPEL, MAPND, *210)
IF (IYSCAL .NE. 'CURVE')
& CALL XYAXIS (0, DOGRID, TXLAB, TYLAB, BLKCOL, *210)
C --Compact distances to match compacted variables
IF (IXSEGV(N) .GT. 0) THEN
CALL SQZIXV (NNE, ISEGEL(1,IXSEGV(N)), DIST, SQDIST)
END IF
C --Plot all time curves for this variable
DO 150 NPT = 1, NPTIMS
NPDON = N
IF (IXSEGV(N) .LE. 0) THEN
CALL SPPLT1 (A, NEUTRL, IPTIMS, TIMES, NPT,
& N, OVERTM, NPT, NUMCRV,
& NENUM, DIST, PLTVAL(1,N,NPT),
& TXLAB, TYLAB, NAMES,
& NNE, ISEGEL(1,IXSEGV(N)), NPDON,
& NPTOT, LIDSP, BLKCOL, MAPEL, MAPND, *210)
ELSE
CALL SPPLT1 (A, NEUTRL, IPTIMS, TIMES, NPT,
& N, OVERTM, NPT, NUMCRV,
& NENUM, SQDIST, PLTVAL(1,N,NPT),
& TXLAB, TYLAB, NAMES,
& NNE, ISEGEL(1,IXSEGV(N)), NPDON,
& NPTOT, LIDSP, BLKCOL, MAPEL, MAPND, *210)
END IF
150 CONTINUE
C --Finish plot
C --Set color in case text is requested
CALL UGRCOL (0, BLKCOL)
CALL GRPEND (.TRUE., .TRUE., N, NSPVAR, .FALSE., *140, *210)
160 CONTINUE
ELSE
DO 200 NPT = 1, NPTIMS
C --Calculate axis limits if to be done once for all curves
IF (IYSCAL .EQ. 'PLOT') THEN
DO 170 N = 1, NSPVAR
IF (IXSEGV(N) .LE. 0) THEN
NNE = NNENUM
ELSE
NNE = ISEGEL(0,IXSEGV(N))
END IF
CALL MINMAX (NNE, PLTVAL(1,N,NPT), VMIN, VMAX)
IF (N .EQ. 1) THEN
YMIN = VMIN
YMAX = VMAX
ELSE
YMIN = MIN (YMIN, VMIN)
YMAX = MAX (YMAX, VMAX)
END IF
170 CONTINUE
call adjrng(ymin, ymax)
CALL EXPMAX (' ', YMIN, YMAX)
END IF
C --Label plot if overlaid curves
180 CONTINUE
IF (OVERLY) THEN
CALL SPLAB (A, 1, IPTIMS(NPT), TIMES,
& NENUM, 1, NSPVAR,
& NUMCRV, NAMES, TXLAB, TYLAB, LIDSP,
& BLKCOL, MAPEL, MAPND, *210)
IF (IYSCAL .NE. 'CURVE')
& CALL XYAXIS (0, DOGRID, TXLAB, TYLAB, BLKCOL, *210)
END IF
C --Plot all variable curves for this time
DO 190 N = 1, NSPVAR
IF (IXSEGV(N) .LE. 0) THEN
NNE = NNENUM
ELSE
NNE = ISEGEL(0,IXSEGV(N))
END IF
C --Compact distances to match compacted variables
IF (IXSEGV(N) .GT. 0) THEN
CALL SQZIXV (NNE, ISEGEL(1,IXSEGV(N)), DIST, SQDIST)
END IF
IF (OVERLY) THEN
NPDON = NPT
ELSE
NPDON = (NPT-1)*NSPVAR + N
END IF
IF (IXSEGV(N) .LE. 0) THEN
CALL SPPLT1 (A, NEUTRL, IPTIMS, TIMES, NPT,
& N, OVERLY, N, NUMCRV,
& NENUM, DIST, PLTVAL(1,N,NPT),
& TXLAB, TYLAB, NAMES,
& NNE, ISEGEL(1,IXSEGV(N)), NPDON,
& NPTOT, LIDSP, BLKCOL, MAPEL, MAPND, *210)
ELSE
CALL SPPLT1 (A, NEUTRL, IPTIMS, TIMES, NPT,
& N, OVERLY, N, NUMCRV,
& NENUM, SQDIST, PLTVAL(1,N,NPT),
& TXLAB, TYLAB, NAMES,
& NNE, ISEGEL(1,IXSEGV(N)), NPDON,
& NPTOT, LIDSP, BLKCOL, MAPEL, MAPND, *210)
END IF
190 CONTINUE
C --Finish plot
IF (OVERLY) THEN
C --Set color in case text is requested
CALL UGRCOL (0, BLKCOL)
CALL GRPEND (.TRUE., .TRUE., NPT, NPTIMS, .FALSE.,
$ *180, *210)
END IF
200 CONTINUE
END IF
210 CONTINUE
C --Restore user-set parameters
OVERTM = SVOVTM
OVERLY = SVOVER
LABSID = SVLSID
IF (IXSCAL .NE. 'SET') IXSCAL = IAXSCA
IF (IYSCAL .NE. 'SET') IYSCAL = IAXSCA
RETURN
END
subroutine adjrng(ymin, ymax)
C .. Check that YMIN and YMAX are "different enough"
if ((ymax - ymin) / ymax .lt. 1.0e-4) then
ymax = ymax * 1.001
ymin = ymin / 1.001
end if
return
end