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.

361 lines
12 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
SUBROUTINE PDATA (MP, ML, MR, MSC, IPOINT, COOR, IPBOUN, ILINE,
& LTYPE, NINT, LCON, FACTOR, ILBOUN, ISBOUN, IREGN, IMAT, LINKP,
& LINKL, LINKR, LINKSC, RSIZE, SCHEME, DEFSCH, DEFSIZ, REXTRM,
& N, LABP, LABL, LABR, FULL, LABMD, LABI, LABF, LABPB, LABLB,
& LABSBD, LABSC, LABSZ, AXISD, TITLE, XMIN, XMAX, YMIN, YMAX,
& XX1, YY1, XX2, YY2, DEV1, VERSN)
C***********************************************************************
C SUBROUTINE PDATA = PLOTS FLAGGED POINTS, LINES, AND REGIONS
C***********************************************************************
DIMENSION IPOINT (MP), COOR (2, MP), IPBOUN (MP)
DIMENSION ILINE (ML), LTYPE (ML), NINT (ML), LCON (3, ML)
DIMENSION FACTOR (ML)
DIMENSION ILBOUN (ML), ISBOUN (ML)
DIMENSION IREGN (MR), IMAT (MR), REXTRM (4, MR), RSIZE (MR)
DIMENSION SCHEME (MSC)
DIMENSION LINKP (2, MP), LINKL (2, ML), LINKR (2, MR)
DIMENSION LINKSC (2, MR)
DIMENSION N (29), XDUM (2), YDUM (2)
CHARACTER*72 DUMMY, SCHEME, DEFSCH, TITLE, DEV1*3
CHARACTER*8 DATE, TIME, VERSN*10
LOGICAL LABP, LABL, LABR, AXISD, LABMD, LABI, LABF
LOGICAL LABPB, LABLB, LABSBD
LOGICAL ADDLNK, CPUIFC, TEST, FULL, LABSC
LOGICAL GETMAX, ADD, LABSZ
C INITIALIZE THE PLOTTING SURFACE
TEST = .FALSE.
GETMAX = .FALSE.
IF (TEST)OPEN (UNIT = 12, FILE = 'HP7580.DAT', STATUS = 'NEW')
ADDLNK = .FALSE.
CALL PLTBGN
CALL PLTSTV (2, 160.)
XDIMR = ABS (XMAX - XMIN)
YDIMR = ABS (YMAX - YMIN)
XDIMD = 1.
YDIMD = .75
CALL MPVIEW (0., XDIMD, 0., YDIMD)
XRAT = XDIMR/XDIMD
YRAT = YDIMR/YDIMD
IF (XRAT.LT.YRAT) THEN
XDIMR = XDIMD*YRAT
XX1 = (XMIN + XMAX - XDIMR)*.5
XX2 = (XMIN + XMAX + XDIMR)*.5
XDIMR = XX2 - XX1
YY1 = YMIN
YY2 = YMAX
ELSE
YDIMR = YDIMD*XRAT
YY1 = (YMIN + YMAX - YDIMR)*.5
YY2 = (YMIN + YMAX + YDIMR)*.5
YDIMR = YY2 - YY1
XX1 = XMIN
XX2 = XMAX
ENDIF
C SET UP SCALING EXTREMES FOR AXIS
IF (TEST) THEN
WRITE (12, 10000)'IN;SP6;;IP - 5710, -10060, 15710, 10060;'
WRITE (12, 10010)
& 'SC', INT (XX1*1000), ', ', INT (YY1*1000), ', ',
& INT (XX2*1000), ', ', INT (YY2*1000), ';'
ENDIF
IF (AXISD) THEN
XDUM (1) = XX1 - (XDIMR*.05)
XDUM (2) = XX2 + (XDIMR*.05)
YDUM (1) = YY1 - (YDIMR*.05)
YDUM (2) = YY2 + (YDIMR*.05)
SHRINK = .2
ELSE
SHRINK = .1
ENDIF
C SHRINK TO FIT A BORDER ON THE PLOT
XX1 = XX1 - (XDIMR*SHRINK)
XX2 = XX2 + (XDIMR*SHRINK)
YY1 = YY1 - (YDIMR*SHRINK)
YY2 = YY2 + (YDIMR*SHRINK)
CALL MPORT2 (XX1, XX2, YY1, YY2)
CALL PLTFRM (0)
C PLOT THE TITLE AND THE TRACE
CALL STRLNG (TITLE, LEN)
IF ( (LEN.GT.1) .OR. (TITLE (1:1).NE.' ')) THEN
CALL PLTXHL (TITLE (1:LEN), XLEN)
XBEGIN = AMAX1 (0., (XDIMD*.5 - XLEN*.5))
CALL PLTXTH (XBEGIN, YDIMD*.95, TITLE (1:LEN))
ENDIF
DUMMY(1:10) = ' DRAWN BY '
DUMMY(11:20) = VERSN
DUMMY(21:22) = ' '
CALL EXDATE (DATE)
DUMMY(23:30) = DATE
DUMMY(31:32) = ' '
CALL EXTIME (TIME)
DUMMY(33:40) = TIME
CALL PLTXTH (0., 0., DUMMY(1:40))
C DRAW THE AXIS IF REQUIRED, AND SET CLIPPING WITHIN AXIS
IF (AXISD)CALL SETAXS (XDUM, YDUM)
IF (CPUIFC (.TRUE.))GOTO 130
C PLOT THE POINTS FLAGGED
IF ( (LABP) .OR. (LABPB)) THEN
DO 100 I = 1, N (18)
IF (CPUIFC (.TRUE.))GOTO 130
CALL LTSORT (MP, LINKP, I, II, ADDLNK)
IF (II.GT.0) THEN
IF (IPOINT (II).LT.0) THEN
INUM = - IPOINT (II)
CALL MP2PT (1, COOR (1, II), COOR (2, II),
& X1, Y1, MASK)
IF (MOD (MASK, 2).NE.0) THEN
C PLOT THE POINT LABELS
IF (LABP) THEN
CALL PLTSTD (1, 1.)
CALL GETDUM (INUM, DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
CALL PLTXHE (X1, Y1)
ENDIF
C PLOT THE POINBC FLAGS
IF ( ( (LABPB) .OR. ( (FULL) .AND. (LABP))) .AND.
& (IPBOUN (II).GT.0)) THEN
CALL PLTSTD (1, 5.)
IF (LABP) THEN
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL GETDUM (IPBOUN (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ENDIF
ENDIF
ENDIF
ENDIF
100 CONTINUE
ENDIF
C PLOT ALL LINES THAT HAVE BEEN FLAGGED
DO 110 I = 1, N (19)
IF (CPUIFC (.TRUE.))GOTO 130
CALL LTSORT (ML, LINKL, I, II, ADDLNK)
IF (II.GT.0) THEN
IF (LABL) THEN
ADD = .TRUE.
ELSE
ADD = .FALSE.
ENDIF
CALL PLTSTD (1, 7.)
IF (ILINE (II).LT.0) THEN
IF ( (LABL) .OR. (LABLB) .OR. (LABSBD) .OR. (LABF)
& .OR. (LABI)) THEN
KNUM = - ILINE (II)
ELSE
KNUM = 0
ENDIF
LT = LTYPE (II)
IP1 = LCON (1, II)
IP2 = LCON (2, II)
IP3 = LCON (3, II)
CALL LTSORT (MP, LINKP, IP1, IPNTR1, ADDLNK)
CALL LTSORT (MP, LINKP, IP2, IPNTR2, ADDLNK)
IF (IP3.NE.0) THEN
CALL LTSORT (MP, LINKP, IABS (IP3), IPNTR3, ADDLNK)
ELSE
IPNTR3 = 0
ENDIF
IF ((IPNTR1.GT.0) .AND. (IPNTR2.GT.0) .AND.
& ((LT.EQ.1) .OR. (IPNTR3.GT.0)) ) THEN
CALL DLINE (MP, ML, COOR, LINKP, KNUM, LT, IP1, IP2,
& IP3, LABL, X1, Y1, TEST, GETMAX, DUM1, DUM2, DUM3,
& DUM4)
C PLOT INTERVAL NUMBERS
IF ( ( (FULL) .AND. (LABL)) .OR. (LABI)) THEN
CALL PLTSTD (1, 5.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL GETDUM (NINT (II), DUMMY, LEN)
IF (TEST) THEN
CALL PLTD2G (X1, Y1, XR, YR)
CALL PLTG2D (X1, Y1, XR, YR)
WRITE (12, 10020)'PU;PA', INT (XR*1000.),
& ', ', INT (YR*1000.), ';LB',
& DUMMY (1:LEN), CHAR (3)
ENDIF
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ADD = .TRUE.
ENDIF
C PLOT THE LINE FACTOR
IF ( ( (FULL) .AND. (LABL)) .OR. (LABF)) THEN
IF (ADD) THEN
CALL PLTSTD (1, 1.)
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL GTXDUM (FACTOR (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ADD = .TRUE.
ENDIF
C PLOT THE LINEBC FLAGS
IF ( ( ( (FULL) .AND. (LABL)) .OR. (LABLB)) .AND.
& (ILBOUN (II).GT.0)) THEN
CALL PLTSTD (1, 2.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL GETDUM (ILBOUN (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ADD = .TRUE.
ENDIF
C PLOT THE SIDEBC FLAGS
IF ( ( ( (FULL) .AND. (LABL)) .OR. (LABSBD)) .AND.
& (ISBOUN (II).GT.0)) THEN
CALL PLTSTD (1, 3.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL GETDUM (ISBOUN (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ENDIF
ENDIF
ENDIF
ENDIF
110 CONTINUE
C PLOT ALL REGIONS FLAGGED
IF ( (LABR) .OR. (LABMD) .OR. (LABSC) .OR. (LABSZ)) THEN
IF (CPUIFC (.TRUE.))GOTO 130
DO 120 I = 1, N (22)
CALL LTSORT (MR, LINKR, I, II, ADDLNK)
IF (II.GT.0) THEN
IF (IREGN (II).LT.0) THEN
ADD = .FALSE.
INUM = - IREGN (II)
XMID = (REXTRM (1, II) + REXTRM (2, II))/2.
YMID = (REXTRM (3, II) + REXTRM (4, II))/2.
CALL MP2PT (1, XMID, YMID, X1, Y1, MASK)
IF ( (MOD (MASK, 2).NE.0)) THEN
C PLOT THE REGION NUMBER
IF (LABR) THEN
CALL PLTSTD (1, 2.)
CALL GETDUM (INUM, DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ADD = .TRUE.
ENDIF
C PLOT OUT THE MATERIAL NUMBER
IF (((FULL) .AND. (LABR)) .OR. (LABMD)) THEN
CALL PLTSTD (1, 1.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
ADD = .TRUE.
CALL GETDUM (IMAT (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ENDIF
C PLOT OUT THE SIZE NUMBER FOR THE REGION
IF (((FULL) .AND. (LABR)) .OR. (LABSZ)) THEN
CALL PLTSTD (1, 1.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
ADD = .TRUE.
CALL GTXDUM (RSIZE (II), DUMMY, LEN)
CALL PLTXTH (X1, Y1, DUMMY (1:LEN))
ENDIF
C PLOT OUT THE SCHEME
IF (((FULL) .AND. (LABR)) .OR. (LABSC)) THEN
CALL PLTSTD (1, 7.)
IF (ADD) THEN
CALL PLTXHE (X1, Y1)
CALL PLTXTH (X1, Y1, '/')
CALL PLTXHE (X1, Y1)
ENDIF
CALL LTSORT (MR, LINKSC, INUM, IPNTR, ADDLNK)
IF ( (INUM.LE.N (24)) .AND. (IPNTR.GT.0)) THEN
CALL STRLNG (SCHEME (IPNTR), LEN)
IF (TEST) THEN
CALL PLTD2G (X1, Y1, XR, YR)
WRITE (12, 10020)'PU;PA', INT (XR*1000.),
& ', ', INT (YR*1000.), ';LB',
& SCHEME (IPNTR) (1:LEN), CHAR (3)
ENDIF
CALL PLTXTH (X1, Y1, SCHEME (IPNTR) (1:LEN))
ELSE
CALL STRLNG (DEFSCH, LEN)
IF (TEST) THEN
CALL PLTD2G (X1, Y1, XR, YR)
WRITE (12, 10020)'PU;PA', INT (XR*1000.),
& ', ', INT (YR*1000.), ';LB',
& DEFSCH (1:LEN), CHAR (3)
ENDIF
CALL PLTXTH (X1, Y1, DEFSCH (1:LEN))
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
120 CONTINUE
ENDIF
130 CONTINUE
CALL PLTSTD (1, 7.)
CALL PLTBEL
CALL PLTFLU
RETURN
10000 FORMAT (A)
10010 FORMAT (A2, I10, A1, I10, A1, I10, A1, I10, A1)
10020 FORMAT (A5, I10, A1, I10, A3, A, A1)
END