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
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
|
|
|