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.
 
 
 
 
 
 

118 lines
4.0 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 HIDIXF (HIDEF, HIDENP, LENF, NLNKE, NLNKF, LINKF,
& ZF, NXFAC, IXFAC, IIXFAC, NAMELB)
C=======================================================================
C --*** HIDIXF *** (MESH) Order visible faces by Z coordinate
C -- Written by Amy Gilkey - revised 02/29/88
C --
C --HIDIXF orders the visible faces by the Z coordinate of the face center.
C --The ordering is expressed by indexing the faces from minimum Z to
C --maximum Z.
C --
C --Parameters:
C -- HIDEF - IN - face status (as in HIDDEN)
C -- HIDENP - IN - node status (as in HIDDEN)
C -- LENF - IN - the cumulative face counts by element block
C -- NLNKE - IN - the number of nodes per element
C -- NLNKF - IN - the number of nodes per face
C -- LINKF - IN - the connectivity for all faces
C -- ZF - IN - the face Z coordinates
C -- NXFAC - OUT - the number of ordered faces
C -- IXFAC - OUT - the indices of the ordered faces
C -- IIXFAC - SCRATCH - size = number of faces
C --
C --Common Variables:
C -- Uses NELBLK of /DBNUMS/
PARAMETER (KFVIS=0, KFNODH=10, KFPOUT=20, KFOUT=90, KFAWAY=100)
PARAMETER (KNVIS=0, KNFOVR=10, KNHID=100)
include 'debug.blk'
include 'dbnums.blk'
include 'd3nums.blk'
INTEGER HIDEF(*)
INTEGER HIDENP(*)
INTEGER LENF(0:NELBLK)
INTEGER NLNKE(NELBLK)
INTEGER NLNKF(NELBLK)
INTEGER LINKF(*)
REAL ZF(*)
INTEGER IXFAC(*)
INTEGER IIXFAC(*)
CHARACTER*(*) NAMELB(*)
NXFAC = 0
NNXFAC = 0
DO 120 IELB = 1, NELBLK
IF (NLNKE(IELB) .GT. 4 .OR. NAMELB(IELB)(:3) .EQ. 'TET') THEN
IXL0 = IDBLNK (IELB, 0, LENF, NLNKF) - 1
DO 110 IFAC = LENF(IELB-1)+1, LENF(IELB)
IF (HIDEF(IFAC) .LT. KFAWAY) THEN
NHID = 0
DO 100 ILINK = 1, NLNKF(IELB)
IF (HIDENP(LINKF(IXL0+ILINK)) .GT. KNVIS)
& NHID = NHID + 1
100 CONTINUE
IF (NHID .LE. 0) THEN
NNXFAC = NNXFAC + 1
IIXFAC(NNXFAC) = IFAC
ELSE
NXFAC = NXFAC + 1
IXFAC(NXFAC) = IFAC
END IF
END IF
IXL0 = IXL0 + NLNKF(IELB)
110 CONTINUE
END IF
IF (NLNKE(IELB) .EQ. 4 .AND. NAMELB(IELB)(:3) .NE. 'TET') THEN
IXL0 = IDBLNK (IELB, 0, LENF, NLNKF) - 1
DO 1110 IFAC = LENF(IELB-1)+1, LENF(IELB)
IF (HIDEF(IFAC) .LT. KFAWAY) THEN
NHID = 0
DO 1100 ILINK = 1, NLNKF(IELB)
IF (HIDENP(LINKF(IXL0+ILINK)) .GT. KNVIS)
& NHID = NHID + 1
1100 CONTINUE
IF (NHID .LE. 0) THEN
NNXFAC = NNXFAC + 1
IIXFAC(NNXFAC) = IFAC
ELSE
NXFAC = NXFAC + 1
IXFAC(NXFAC) = IFAC
END IF
END IF
IXL0 = IXL0 + NLNKF(IELB)
1110 CONTINUE
END IF
120 CONTINUE
call indexx(zf, ixfac, nxfac, .FALSE.)
c$$$ DO 140 IX = 1, NXFAC
c$$$ IMIN = IX
c$$$ ZMIN = ZF(IXFAC(IMIN))
c$$$ DO 130 IX1 = IX+1, NXFAC
c$$$ IF (ZF(IXFAC(IX1)) .LT. ZMIN) THEN
c$$$ IMIN = IX1
c$$$ ZMIN = ZF(IXFAC(IMIN))
c$$$ END IF
c$$$ 130 CONTINUE
c$$$ ISAV = IXFAC(IMIN)
c$$$ IXFAC(IMIN) = IXFAC(IX)
c$$$ IXFAC(IX) = ISAV
c$$$ 140 CONTINUE
DO 150 IX = 1, NNXFAC
NXFAC = NXFAC + 1
IXFAC(NXFAC) = IIXFAC(IX)
150 CONTINUE
RETURN
END