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.

109 lines
3.3 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 IDEDGE (IEDSET, NEDGES, HIDENP, LINSET, LENL, IXLIN,
* MREF, LREF)
C=======================================================================
C --*** IDEDGE *** (MESH) Identify 3D lines on edge of visible mesh
C -- Written by Amy Gilkey - revised 10/02/86
C --
C --IDEDGE finds edges from IEDSET in the line set and marks them as
C --"must draw" with a -n in LINSET(3,x).
C --
C --Parameters:
C -- IEDSET - IN - the edge line set;
C -- (0) = face defining edge; 0 to delete edge
C -- NEDGES - IN - the number of lines in the edge set
C -- HIDENP - IN/OUT - node status (as in HIDDEN)
C -- LINSET - IN/OUT - the sorted line set
C -- LENL - IN - the length of the line set
C -- IXLIN - SCRATCH - index line set to be searched, length = LENL
PARAMETER (KNVIS=0, KNFOVR=10, KNHID=100)
common /debugc/ cdebug
common /debugn/ idebug
character*8 cdebug
COMMON /D3NUMS/ IS3DIM, NNPSUR, NUMNPF, LLNSET
LOGICAL IS3DIM
INTEGER IEDSET(0:2,*)
INTEGER HIDENP(*)
INTEGER LINSET(LLNSET,*)
INTEGER IXLIN(*)
INTEGER MREF(*), LREF(*)
C --Get indices of line set to search and order line set nodes
LENIX = 0
DO 100 IL = 1, LENL
IF (LINSET(3,IL) .GE. 1) THEN
LENIX = LENIX + 1
IXLIN(LENIX) = IL
IF (LINSET(3,IL) .EQ. 1) THEN
IF (LINSET(1,IL) .GT. LINSET(2,IL)) THEN
IF (HIDENP(LINSET(1,IL)) .GT. KNVIS) THEN
I = LINSET(1,IL)
LINSET(1,IL) = LINSET(2,IL)
LINSET(2,IL) = I
END IF
END IF
END IF
END IF
100 CONTINUE
C ... For each node, mref is first linset edge referencing that node
C lref is last linset edge referencing that node
call iniint(numnpf, 0, mref)
call iniint(numnpf, 0, lref)
DO IX=LENIX, 1, -1
IL = IXLIN(IX)
MREF(LINSET(1,IL)) = IX
MREF(LINSET(2,IL)) = IX
END DO
DO IX=1,LENIX
IL = IXLIN(IX)
LREF(LINSET(1,IL)) = IX
LREF(LINSET(2,IL)) = IX
END DO
DO 130 IEDG = 1, NEDGES
IF (IEDSET(0,IEDG) .EQ. 0) GOTO 130
C --Make sure edge set is still ordered (some nodes may have become
C --visible)
N1 = IEDSET(1,IEDG)
N2 = IEDSET(2,IEDG)
IF (N1 .GT. N2) THEN
IF (HIDENP(N1) .GT. KNVIS) THEN
I = N1
N1 = N2
N2 = I
END IF
END IF
C --Find edge in ordered line set
imax = min(lref(n1), lref(n2), lenix)
imin = max(mref(n1), mref(n2), 1)
DO 110 IX = imin, imax
IL = IXLIN(IX)
IF (LINSET(1,IL) .EQ. N1 .and.
* LINSET(2,IL) .EQ. N2) THEN
C --Mark line set as an edge
LINSET(3,IL) = - LINSET(3,IL)
GO TO 130
END IF
110 CONTINUE
130 CONTINUE
RETURN
END