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.
 
 
 
 
 
 

203 lines
6.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 MESHUP (WIDLIN, MSHLIN, MLNTYP,
& IELBST, LENL, LINSET, BLKCOL, XN, YN, ZN,
& IDELB, *)
C=======================================================================
C --*** MESHUP *** (MESH) Plot mesh lines
C -- Modified by John Glick - 11/29/88
C -- Written by Amy Gilkey - revised 03/29/88
C -- D. P. Flanagan, 07/02/82
C --
C --MESHUP plots a mesh as a set of lines. The lines have been divided
C --into parts as follows:
C -- -1) Mesh boundary
C -- 0) Element block boundary
C -- n) Interior within element block 'n'
C --
C --The line type and the display options are used to select the line color
C --and the line width.
C --
C --For a 3D mesh with interior faces requested, the interior
C --faces are drawn before the surface lines.
C --
C --Parameters:
C -- WIDLIN - IN - true iff mesh lines should be wide versus narrow
C -- MSHLIN - IN - the mesh lines to display (as in /MSHOPT/)
C -- MLNTYP - IN - the line type of lines (as in /MSHOPT/)
C -- IELBST - IN - the element block status (>0 if selected)
C -- LENL - IN - the cumulative line counts by element block
C -- LINSET - IN - the sorted line set
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 -- XN, YN, ZN - IN - the nodal coordinates
C -- * - return statement if the cancel function is active
C --
C --Common Variables:
C -- Uses NELBLK of /DBNUMS/
C -- Uses IS3DIM, LLNSET of /D3NUMS/
PARAMETER (MSHNON=0, MSHBOR=1, MSHDIV=2, MSHSEL=3, MSHALL=4)
include 'dbnums.blk'
COMMON /D3NUMS/ IS3DIM, NNPSUR, NUMNPF, LLNSET
LOGICAL IS3DIM
common /debugc/ cdebug
common /debugn/ idebug
character*8 cdebug
LOGICAL WIDLIN
INTEGER MLNTYP(-1:1)
INTEGER IELBST(NELBLK)
INTEGER LENL(-2:NELBLK), LINSET(LLNSET,*)
INTEGER BLKCOL(0:NELBLK)
REAL XN(*), YN(*), ZN(*)
INTEGER IDELB(*)
LOGICAL GRABRT
LOGICAL SELONL
LOGICAL DRAWIT
LOGICAL LDUM
INTEGER IDUM(1)
C --Set mesh display parameters
IF (MSHLIN .GE. MSHSEL) THEN
NELB = NELBLK
ELSE IF (MSHLIN .GE. MSHDIV) THEN
NELB = 0
ELSE IF (MSHLIN .GE. MSHBOR) THEN
NELB = -1
ELSE
NELB = -2
END IF
SELONL = (MSHLIN .LE. MSHSEL)
C --Draw the boundary determined by the hidden line removal
IF (IS3DIM) THEN
DO 110 IELB = NELBLK, MIN (1, NELB+1), -1
C --If element block selected, line will be drawn later
IF ((NELB .GE. IELB) .AND. SELONL .AND. (IELB .GE. 1)) THEN
DRAWIT = (IELBST(IELB) .LE. 0)
ELSE
DRAWIT = .TRUE.
END IF
IF (DRAWIT) THEN
C --Get line color and set line size
CALL MSHCOL ('BOUNDARY', IELB, MLNTYP, .TRUE., BLKCOL,
& IDELB)
C --Draw all lines marked with LINSET(3,x) < 0
DO 100 IL = LENL(IELB-1)+1, LENL(IELB)
IF (LINSET(3,IL) .LT. 0) THEN
N1 = LINSET(1,IL)
IF (LINSET(3,IL) .EQ. -1) THEN
N2 = LINSET(2,IL)
ELSE
N2 = -LINSET(3,IL)
END IF
IF (GRABRT ()) GOTO 160
CALL MPD2VC (1, XN(N1), YN(N1), XN(N2), YN(N2))
END IF
100 CONTINUE
CALL PLTFLU
END IF
110 CONTINUE
END IF
C --Draw the selected lines
DO 130 IELB = NELB, -1, -1
IF (SELONL .AND. (IELB .GE. 1)) THEN
DRAWIT = (IELBST(IELB) .GT. 0)
ELSE
DRAWIT = .TRUE.
END IF
IF (DRAWIT) THEN
C --Get line color and set line size
CALL MSHCOL ('LINE', IELB, MLNTYP, WIDLIN, BLKCOL, IDELB)
C --Draw all lines of the appropriate type
DO 120 IL = LENL(IELB-1)+1, LENL(IELB)
IF (IS3DIM) THEN
C --Skip invisible lines
IF (LINSET(3,IL) .EQ. 0) GOTO 120
END IF
N1 = LINSET(1,IL)
N2 = LINSET(2,IL)
C write (*,*) 'line: ', n1, n2, linset(3,il)
IF (IS3DIM) THEN
C --Replace invisible node with partial line node
IF (ABS (LINSET(3,IL)) .GT. 1) N2 = ABS (LINSET(3,IL))
END IF
IF (GRABRT ()) GOTO 160
CALL MPD2VC (1, XN(N1), YN(N1), XN(N2), YN(N2))
120 CONTINUE
CALL PLTFLU
END IF
130 CONTINUE
if ((cdebug .eq. 'HIDDEN') .and. (idebug .ge. 1)
& .and. is3dim) then
do 150 ielb = nelblk, -1, -1
call mshcol ('DEBUG', ielb, mlntyp, widlin, blkcol,
& idelb)
do 140 il = lenl(ielb-1)+1, lenl(ielb)
if (linset(3,il) .lt. 0) then
n1 = linset(1,il)
if (linset(3,il) .eq. -1) then
n2 = linset(2,il)
else
n2 = -linset(3,il)
end if
if (grabrt ()) goto 160
call mpd2vc (1, xn(n1), yn(n1), xn(n2), yn(n2))
end if
140 continue
call pltflu
150 continue
end if
C --Reset line type and size
CALL MSHCOL ('RESET', -999, IDUM, LDUM, BLKCOL, IDELB)
RETURN
160 CONTINUE
C --Reset line type and size
CALL MSHCOL ('RESET', -999, IDUM, LDUM, BLKCOL, IDELB)
RETURN 1
END