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.
 
 
 
 
 
 

132 lines
4.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 FNPCEN (LINK, N4, NUMCOL, NEROW, IELCEN,
& IRBOT, IRTOP, NUMROW, NPCEN, NREL, IELCOL, NRNP, NRBOT, NRTOP)
C=======================================================================
C --*** FNPCEN *** (GEN3D) Compute center block row x column nodes
C -- Written by Amy Gilkey - revised 04/26/88
C -- Modified by Greg Sjaardema, 07/06/90
C -- Problem with noncontiguous material blocks in center
C -- blocks. (ie. Slidelines separating materials.)
C -- Problem not fixed, error checking enabled.
C -- Problem is in setting node numbers in NPCEN.
C --
C --FNPCEN sets the number of elements generated by each element (if the
C --column is within NUMCOL), and returns the nodes by row and column.
C --
C --Parameters:
C -- LINK - IN - the connectivity for the 2D elements, always 4 nodes
C -- N4 - IN - the number of quadrants
C -- NUMCOL - IN - the number of columns in the center blocks
C -- NEROW - IN - the number of element rows in the center blocks
C -- IELCEN - IN - the element numbers of the center elements
C -- by column and row
C -- IRBOT, IRTOP - IN - the row number of the row on top and bottom
C -- NUMROW - OUT - the number of nodal rows in the center blocks
C -- NPCEN - OUT - the node numbers of the center nodes by column and row
C -- NREL - IN/OUT - the number of new elements generated for each element
C -- IELCOL - IN/OUT - the row number for each element
C -- NRNP - IN/OUT - the number of new nodes generated for each node
C -- NRBOT, NRTOP - SCRATCH - size = NEROW
C --
C --Common Variables:
C -- Uses IX1, IX2, IX3, IX4 of /CENPAR/
INCLUDE 'g3_cenpar.blk'
INTEGER LINK(4,*)
INTEGER NPCEN(NUMCOL,*)
INTEGER IELCEN(NUMCOL,*)
INTEGER IRBOT(*), IRTOP(*)
INTEGER NREL(*), IELCOL(*)
INTEGER NRNP(*)
INTEGER NRBOT(*), NRTOP(*)
C --The number of elements generated for center elements is dependent on
C --the column
DO 20 ICOL = 1, MAX (NUMCOL-1, 1)
NR = (ICOL*2-1) * N4
DO 10 IROW = 1, NEROW
IEL = IELCEN(ICOL,IROW)
IF (IEL .LE. 0) GOTO 10
NREL(IEL) = NR
IELCOL(IEL) = ICOL
10 CONTINUE
20 CONTINUE
C --Fill in the node rows, checking if bottom or top row has already been
C --inserted
CALL INIINT (NEROW, 0, NRBOT)
CALL INIINT (NEROW, 0, NRTOP)
NUMROW = 0
DO 40 IROW = 1, NEROW
IBOT = NRBOT(IROW)
IF (IBOT .EQ. 0) THEN
NUMROW = NUMROW + 1
IBOT = NUMROW
IF (IRBOT(IROW) .GT. 0) NRTOP(IRBOT(IROW)) = IBOT
END IF
ITOP = NRTOP(IROW)
IF (ITOP .EQ. 0) THEN
NUMROW = NUMROW + 1
ITOP = NUMROW
IF (IRTOP(IROW) .GT. 0) NRBOT(IRTOP(IROW)) = ITOP
END IF
DO 30 ICOL = 1, NUMCOL
IEL = IELCEN(ICOL,IROW)
IF (IEL .LE. 0) GOTO 30
INP = LINK(IX1,IEL)
IF (NPCEN(ICOL,IBOT) .NE. 0 .AND.
$ NPCEN(ICOL,IBOT) .NE. INP) THEN
CALL PRTERR ('FATAL',
$ 'Center blocks must be contiguous')
CALL PRTERR ('CMDSPEC',
$ 'Slidelines are not allowed')
STOP 'CENTER BLOCK NONCONTIGUOUS'
ELSE
NPCEN(ICOL,IBOT) = INP
END IF
INP = LINK(IX4,IEL)
IF (NPCEN(ICOL,ITOP) .NE. 0 .AND.
$ NPCEN(ICOL,ITOP) .NE. INP) THEN
CALL PRTERR ('FATAL',
$ 'Center blocks must be contiguous')
CALL PRTERR ('CMDSPEC',
$ 'Slidelines are not allowed')
STOP 'CENTER BLOCK NONCONTIGUOUS'
ELSE
NPCEN(ICOL,ITOP) = INP
END IF
30 CONTINUE
40 CONTINUE
C --The number of nodes generated for center nodes is dependent on
C --the column
DO 70 ICOL = 1, MAX (NUMCOL, 1)
IF (ICOL .EQ. 1) THEN
NR = 1
ELSE IF (N4 .EQ. 4) THEN
NR = (ICOL-1) * 2 * N4
ELSE
NR = (ICOL-1) * 2 * N4 + 1
END IF
DO 60 IROW = 1, NUMROW
INP = NPCEN(ICOL,IROW)
IF (INP .EQ. 0) GOTO 60
NRNP(INP) = NR
60 CONTINUE
70 CONTINUE
RETURN
END