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.
150 lines
4.4 KiB
150 lines
4.4 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 DBMIR1 (IELB, NUMELB, NUMLNK, LINK, TYPE, NDIM, NONQUD)
|
|
C=======================================================================
|
|
|
|
C --*** DBMIR1 *** (GJOIN) Fixup element connectivity for reflections
|
|
C -- Written by Greg Sjaardema - revised 02/10/89
|
|
C -- Modified from DBOEB1 Written by Amy Gilkey
|
|
C --
|
|
C --Parameters:
|
|
C -- IELB - IN - the element block number
|
|
C -- NUMELB - IN - the number of elements in the block
|
|
C -- NUMLNK - IN - the number of nodes per element
|
|
C -- LINK - IN/OUT - the element connectivity for this block
|
|
C -- TYPE - IN - the element type for this block
|
|
C -- NDIM - IN - the spatial dimension (1,2,3)
|
|
C --
|
|
|
|
include 'exodusII.inc'
|
|
|
|
INTEGER NUMELB, NUMLNK
|
|
INTEGER LINK(NUMLNK,*)
|
|
CHARACTER*(MXSTLN) TYPE
|
|
LOGICAL NONQUD
|
|
|
|
CHARACTER*132 STRING
|
|
|
|
IF (NUMELB .GT. 0) THEN
|
|
|
|
C...8-node Hexes
|
|
IF ((NUMLNK .EQ. 8) .AND. (NDIM .EQ. 3) .AND.
|
|
* TYPE(:3) .EQ. 'HEX') THEN
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(4,NE)
|
|
LINK(4,NE) = ILTMP
|
|
|
|
ILTMP = LINK (6,NE)
|
|
LINK(6,NE) = LINK(8,NE)
|
|
LINK(8,NE) = ILTMP
|
|
END DO
|
|
|
|
C...20-node Hexes
|
|
ELSE IF ((NUMLNK .EQ. 20) .AND. (NDIM .EQ. 3) .AND.
|
|
* TYPE(:3) .EQ. 'HEX') THEN
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(4,NE)
|
|
LINK(4,NE) = ILTMP
|
|
|
|
ILTMP = LINK (6,NE)
|
|
LINK(6,NE) = LINK(8,NE)
|
|
LINK(8,NE) = ILTMP
|
|
|
|
ILTMP = LINK ( 9,NE)
|
|
LINK( 9,NE) = LINK(12,NE)
|
|
LINK(12,NE) = ILTMP
|
|
|
|
ILTMP = LINK (10,NE)
|
|
LINK(10,NE) = LINK(11,NE)
|
|
LINK(11,NE) = ILTMP
|
|
|
|
ILTMP = LINK (14,NE)
|
|
LINK(14,NE) = LINK(16,NE)
|
|
LINK(16,NE) = ILTMP
|
|
|
|
ILTMP = LINK (17,NE)
|
|
LINK(17,NE) = LINK(20,NE)
|
|
LINK(20,NE) = ILTMP
|
|
|
|
ILTMP = LINK (18,NE)
|
|
LINK(18,NE) = LINK(19,NE)
|
|
LINK(19,NE) = ILTMP
|
|
END DO
|
|
|
|
C...Quads/Shells
|
|
ELSE IF ((NUMLNK .EQ. 4) .AND.
|
|
* (TYPE(:4) .EQ. 'QUAD' .OR. TYPE(:5) .EQ. 'SHELL')) THEN
|
|
if (type(:5) .eq. 'SHELL') NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(4,NE)
|
|
LINK(4,NE) = ILTMP
|
|
END DO
|
|
|
|
C...four-node tets...
|
|
ELSE IF ((NUMLNK .EQ. 4) .AND.
|
|
* (TYPE(:3) .EQ. 'TET')) THEN
|
|
NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(3,NE)
|
|
LINK(3,NE) = ILTMP
|
|
END DO
|
|
|
|
C...Bars
|
|
ELSE IF (NUMLNK .EQ. 2) THEN
|
|
NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(1,NE)
|
|
LINK(1,NE) = ILTMP
|
|
END DO
|
|
|
|
C...Triangles
|
|
ELSE IF (NUMLNK .EQ. 3) THEN
|
|
NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(3,NE)
|
|
LINK(3,NE) = ILTMP
|
|
END DO
|
|
|
|
C...6-node Triangles
|
|
ELSE IF (NUMLNK .EQ. 6 .and. type(:3) .eq. 'TRI') then
|
|
NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(3,NE)
|
|
LINK(3,NE) = ILTMP
|
|
ILTMP = LINK (4,NE)
|
|
LINK(4,NE) = LINK(6,NE)
|
|
LINK(6,NE) = ILTMP
|
|
END DO
|
|
ELSE IF (NUMLNK .EQ. 6 .and. type(:5) .eq. 'WEDGE') then
|
|
NONQUD = .TRUE.
|
|
DO NE = 1, NUMELB
|
|
ILTMP = LINK (2,NE)
|
|
LINK(2,NE) = LINK(3,NE)
|
|
LINK(3,NE) = ILTMP
|
|
ILTMP = LINK (5,NE)
|
|
LINK(5,NE) = LINK(6,NE)
|
|
LINK(6,NE) = ILTMP
|
|
END DO
|
|
ELSE
|
|
NONQUD = .TRUE.
|
|
WRITE (STRING, 100) IELB, NUMLNK, TYPE
|
|
100 FORMAT('Element block ',I5,' contains ',I2,'-node ',A,
|
|
* ' elements which are not supported for mirroring by grepos')
|
|
CALL SQZSTR (STRING, LSTR)
|
|
CALL PRTERR ('PROGRAM', STRING(:LSTR))
|
|
END IF
|
|
END IF
|
|
RETURN
|
|
END
|
|
|