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.

89 lines
2.8 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 IXLINK (NCEN, IELROW, LINK, XN, YN, IROT)
C=======================================================================
C --*** IXLINK *** (GEN3D) Get connectivity indices
C -- Written by Amy Gilkey - revised 08/16/88
C --
C --IXLINK sets the connectivity indices IX1..4 for center elements.
C --The indices are set so that:
C -- LINK(IX1,i) holds the leftmost column, bottom row
C -- LINK(IX2,i) holds the rightmost column, bottom row
C -- LINK(IX3,i) holds the rightmost column, top row
C -- LINK(IX4,i) holds the leftmost column, top row
C --
C --Parameters:
C -- NCEN - IN - the number of center block elements
C -- IELROW - IN - the indices of the center block elements
C -- LINK - IN - the connectivity for the 2D elements, always 4 nodes
C -- XN, YN - IN - the coordinates, needed to find node ordering
C -- IROT - OUT - track link rotation for sset face update
C --
C --Common Variables:
C -- Sets IX1, IX2, IX3, IX4 of /CENPAR/
INCLUDE 'g3_cenpar.blk'
INTEGER IELROW(*)
INTEGER LINK(4,*)
REAL XN(*), YN(*)
INTEGER IROT(*)
INTEGER LSV(4)
C --Get the connectivity indices so that LINK(IX1,i) and LINK(IX4,i)
C --are on the same column and LINK(IX2,i) and LINK(IX3,i) are on the
C --next column
DO 40 IXEL = 1, NCEN
IEL = IELROW(IXEL)
IX1 = 1
DIFMAX = 0.0
L2 = LINK(2,IEL)
L3 = LINK(3,IEL)
L4 = LINK(4,IEL)
DO 10 ILINK = 1, 4
L1 = LINK(ILINK,IEL)
IF ((MAX (XN(L1), XN(L4)) .LT. MAX (XN(L2), XN(L3))) .AND.
& (MAX (YN(L1), YN(L2)) .LT. MAX (YN(L3), YN(L4)))) THEN
DIF = (MAX (XN(L2), XN(L3)) - MAX (XN(L1), XN(L4)))
& + (MAX (YN(L3), YN(L4)) - MAX (YN(L1), YN(L2)))
IF (DIF .GT. DIFMAX) THEN
IX1 = ILINK
DIFMAX = DIF
END IF
END IF
L2 = L3
L3 = L4
L4 = LINK(ILINK,IEL)
10 CONTINUE
IROT(IEL) = IX1
IF (IX1 .NE. 1) THEN
DO 20 ILINK = 1, 4
LSV(ILINK) = LINK(ILINK,IEL)
20 CONTINUE
IX = IX1
DO 30 ILINK = 1, 4
LINK(ILINK,IEL) = LSV(IX)
IX = IX + 1
IF (IX .GT. 4) IX = IX - 4
30 CONTINUE
END IF
40 CONTINUE
IX1 = 1
IX2 = 2
IX3 = 3
IX4 = 4
RETURN
END