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.
97 lines
3.1 KiB
97 lines
3.1 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 MAKROW (LINK, XN, NUMCEN, NUMCOL,
|
|
& NEROW, IELROW, IXROW)
|
|
C=======================================================================
|
|
|
|
C --*** MAKROW *** (GEN3D) Order center elements in rows
|
|
C -- Written by Amy Gilkey - revised 04/26/88
|
|
C --
|
|
C --MAKROW orders the elements in all center blocks into rows. Only the
|
|
C --elements in the needed number of columns for each row are stored.
|
|
C --
|
|
C --Parameters:
|
|
C -- LINK - IN - the connectivity for the 2D elements, always 4 nodes
|
|
C -- XN - IN - the coordinates, needed to find node ordering
|
|
C -- NUMCEN - IN - the number of elements in the center blocks
|
|
C -- NUMCOL - IN - the number of columns in the center block
|
|
C -- NEROW - OUT - the number of element rows in the center blocks
|
|
C -- IELROW - IN/OUT - the element numbers of the center elements;
|
|
C -- returned as rows of elements
|
|
C -- IXROW - OUT - the IELROW index of the starting column for each row
|
|
C --
|
|
C --Common Variables:
|
|
C -- Uses IX1, IX2, IX3, IX4 of /CENPAR/
|
|
|
|
INCLUDE 'g3_cenpar.blk'
|
|
|
|
INTEGER LINK(4,*)
|
|
REAL XN(*)
|
|
INTEGER IELROW(*)
|
|
INTEGER IXROW(*)
|
|
|
|
C --Initialize the IELROW array
|
|
C -- IELROW(1..ICOL1-1) holds the ordered elements for previous rows
|
|
C -- IELROW(ICOL1..ICOL+NCOL-1) holds the ordered elements for this row
|
|
C -- IELROW(IFILL..NUMCEN) holds the elements yet to be ordered
|
|
|
|
IFILL = 1
|
|
ICOL1 = 1
|
|
|
|
10 CONTINUE
|
|
IF (IFILL .LE. NUMCEN) THEN
|
|
|
|
C --Pick leftmost unordered element for the next row
|
|
|
|
ICHK = IFILL
|
|
XMIN = XN(LINK(IX1,IELROW(IFILL)))
|
|
DO 20 I = IFILL+1, NUMCEN
|
|
IF (XN(LINK(IX1,IELROW(I))) .LT. XMIN) THEN
|
|
ICHK = I
|
|
XMIN = XN(LINK(IX1,IELROW(I)))
|
|
END IF
|
|
20 CONTINUE
|
|
|
|
NEROW = NEROW + 1
|
|
IC = IELROW(ICHK)
|
|
IELROW(ICHK) = IELROW(IFILL)
|
|
IFILL = IFILL + 1
|
|
IELROW(ICOL1) = IC
|
|
IXROW(NEROW) = ICOL1
|
|
NCOL = 1
|
|
|
|
c --Find elements to the left of the element until at leftmost column !#VAX
|
|
|
|
C --Find elements to the right of the element until at rightmost column
|
|
|
|
40 CONTINUE
|
|
IEL = IELROW(ICOL1+NCOL-1)
|
|
L2 = LINK(IX2,IEL)
|
|
L3 = LINK(IX3,IEL)
|
|
DO 50 ICHK = IFILL, NUMCEN
|
|
IC = IELROW(ICHK)
|
|
IF ((L2 .EQ. LINK(IX1,IC))
|
|
& .AND. (L3 .EQ. LINK(IX4,IC))) THEN
|
|
IELROW(ICHK) = IELROW(IFILL)
|
|
IFILL = IFILL + 1
|
|
IELROW(ICOL1+NCOL) = IC
|
|
NCOL = NCOL + 1
|
|
GOTO 40
|
|
END IF
|
|
50 CONTINUE
|
|
|
|
NCOL = MIN (NCOL, NUMCOL)
|
|
ICOL1 = ICOL1 + NCOL
|
|
|
|
GOTO 10
|
|
END IF
|
|
|
|
IXROW(NEROW+1) = ICOL1
|
|
|
|
RETURN
|
|
END
|
|
|