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.
 
 
 
 
 
 

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