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.

95 lines
3.0 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 ZMNPS (NUMNP, NUMNPO, IXNODE, NUMNPS, LNPSNL,
& IDNPS, NNNPS, IXNNPS, NDNPS, IXDNPS, LTNNPS, FACNPS,
& NEWIX, IXNPS)
C=======================================================================
C --*** ZMNPS *** (ALGEBRA) Compress database node sets
C -- Written by Amy Gilkey - revised 07/13/89
C --
C --ZMNPS compresses the node set information by renumbering the
C --nodes and removing deleted nodes.
C --
C --Parameters:
C -- NUMNP - IN - the number of nodes
C -- NUMNPO - IN - the number of nodes
C -- IXNODE - IN - the indices of the output nodes(iff NUMNPO <> NUMNP)
C -- NUMNPS - IN/OUT - the number of node sets
C -- LNPSNL - IN/OUT - the length of the node sets node list
C -- IDNPS - IN/OUT - the node set ID for each set
C -- NNNPS - IN/OUT - the number of nodes for each set
C -- IXNNPS - IN/OUT - the index of the first node for each set
C -- NDNPS - IN/OUT - number of distribution factors for each node set
C -- IXDNPS - IN/OUT - indices into FACNPS; location of 1st dist fact/n set
C -- LTNNPS - IN/OUT - the nodes for all sets
C -- FACNPS - IN/OUT - the distribution factors for all sets
C -- NEWIX - SCRATCH - size = NUMNP
C -- IXNPS - SCRATCH - size = LNPSNL
INTEGER NUMNP
INTEGER NUMNPO
INTEGER IXNODE(*)
INTEGER NUMNPS
INTEGER LNPSNL
INTEGER IDNPS(*)
INTEGER NNNPS(*)
INTEGER IXNNPS(*)
INTEGER NDNPS(*)
INTEGER IXDNPS(*)
INTEGER LTNNPS(*)
REAL FACNPS(*)
INTEGER NEWIX(*)
INTEGER IXNPS(*)
IF (NUMNP .EQ. NUMNPO) RETURN
DO 100 INP = 1, NUMNP
NEWIX(INP) = 0
100 CONTINUE
DO 110 IX = 1, NUMNPO
NEWIX(IXNODE(IX)) = IX
110 CONTINUE
NLO = 0
DO 120 NL = 1, LNPSNL
IF (NEWIX(LTNNPS(NL)) .GT. 0) THEN
NLO = NLO + 1
LTNNPS(NLO) = NEWIX(LTNNPS(NL))
FACNPS(NLO) = FACNPS(NL)
IXNPS(NL) = NLO
ELSE
IXNPS(NL) = 0
END IF
120 CONTINUE
LNPSNL = NLO
NNPSO = 0
DO 140 INPS = 1, NUMNPS
NN = 0
IX0 = 0
DO 130 IX = IXNNPS(INPS), IXNNPS(INPS)+NNNPS(INPS)-1
IF (IXNPS(IX) .GT. 0) THEN
NN = NN + 1
IF (IX0 .EQ. 0) IX0 = IXNPS(IX)
END IF
130 CONTINUE
IF (NN .GT. 0) THEN
NNPSO = NNPSO + 1
IDNPS(NNPSO) = IDNPS(INPS)
NNNPS(NNPSO) = NN
IXNNPS(NNPSO) = IX0
NDNPS(NNPSO) = NN
IXDNPS(NNPSO) = IX0
END IF
140 CONTINUE
NUMNPS = NNPSO
RETURN
END