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.
 
 
 
 
 
 

106 lines
3.6 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 HIDSET (LINSET, LENL, HIDENP, ALLHOL, IELBST,
& IEDSET, NEDGES, IPSET, NPART)
C=======================================================================
C --*** HIDSET *** (MESH) Identify partial line set
C -- Written by Amy Gilkey - revised 10/02/86
C --
C --HIDSET identifies those lines which connect visible to hidden nodes
C --overlapped by a face (versus hidden nodes with the normal
C --pointing away). The hidden nodes are moved to LINSET(2,x) and a
C --list of indices into the LINSET array is made up.
C --
C --Parameters:
C -- LINSET - IN/OUT - the sorted line set
C -- LENL - IN - the length of the line set, for each element block
C -- HIDENP - IN - node status (as in HIDDEN)
C -- ALLHOL - IN - true iff mesh display is hollow
C -- IELBST - IN - the element block status (>0 if selected)
C -- IEDSET - IN - the edge line set; (0) = face defining edge
C -- NEDGES - IN - the number of edges
C -- IPSET - OUT - the indices of the partial line set
C -- NPART - OUT - the number of lines in the partial line set
C --
C --Common Variables:
C -- Uses NELBLK of /DBNUMS/
C -- Uses LLNSET of /D3NUMS/
PARAMETER (KNVIS=0, KNFOVR=10, KNHID=100)
common /debugc/ cdebug
common /debugn/ idebug
character*8 cdebug
include 'dbnums.blk'
include 'd3nums.blk'
INTEGER LENL(-2:NELBLK)
INTEGER LINSET(LLNSET,*)
INTEGER HIDENP(*)
LOGICAL ALLHOL
INTEGER IELBST(NELBLK)
INTEGER IEDSET(0:2,*)
INTEGER IPSET(*)
LOGICAL EDGONL
C --Get all line sets that are partially hidden, put the hidden node
C --in LINSET(2,x)
NPART = 0
DO 140 IELB = -1, NELBLK
C --Flag whether partial lines of this element block must be in the
C --edge set
EDGONL = .FALSE.
IF (IELB .GE. 1) THEN
IF (ALLHOL .OR. (IELBST(IELB) .LE. 0)) EDGONL = .TRUE.
END IF
DO 130 IL = LENL(IELB-1)+1, LENL(IELB)
IF ((HIDENP(LINSET(1,IL)) .LE. KNVIS) .OR.
& (HIDENP(LINSET(2,IL)) .LE. KNVIS)) THEN
IF ((HIDENP(LINSET(1,IL)) .EQ. KNFOVR) .OR.
& (HIDENP(LINSET(2,IL)) .EQ. KNFOVR)) THEN
C --Get hidden node in LINSET(2,x)
IF (HIDENP(LINSET(1,IL)) .GT. KNVIS) THEN
I = LINSET(1,IL)
LINSET(1,IL) = LINSET(2,IL)
LINSET(2,IL) = I
END IF
IF (EDGONL) THEN
C --Eliminate the partial line if not in the edge set
IV = LINSET(1,IL)
IH = LINSET(2,IL)
DO 100 IEDG = 1, NEDGES
IF (IV .EQ. IEDSET(1,IEDG)) THEN
IF (IH .EQ. IEDSET(2,IEDG)) GOTO 110
END IF
100 CONTINUE
GOTO 120
110 CONTINUE
END IF
C --Add the line to the partial line set
NPART = NPART + 1
IPSET(NPART) = IL
120 CONTINUE
END IF
END IF
130 CONTINUE
140 CONTINUE
if ((cdebug .eq. 'HIDDEN') .and. (idebug .ge. 1))
& write (*, '(1x,a,i5)') 'partial line set =', npart
RETURN
END