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.

118 lines
3.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 MIRSS (IDFRO, IDBCK,
& NESUR, NESFRO, NESBCK, LTEES3, LTSSS3,
* COMTOP, NAMELB, NUMELB, IDXELB)
C=======================================================================
C --*** MIRSS *** (GEN3D) Modifies sideset node order to account
C for mirroring about axes
C -- Written by Greg Sjaardema - revised 02/10/89
C -- Modified from WRESS written by Amy Gilkey
C --
C --Parameters:
C -- IDFRO - IN - ids for front surface side sets; (0) = length
C -- IDBCK - IN - ids for back surface side sets; (0) = length
C -- NESUR - IN - the number of elements in the surface side set
C -- NESFRO - IN - the elements in the front surface side set
C -- NESBCK - IN - the elements in the back surface side set
C -- LTEES3 - IN - the element faces for all 3D sets
C --
C --Common Variables:
C -- Uses NUMESS of /DBNUMS/
C -- Uses LESSEO of /DBNUM3/
C --
INCLUDE 'g3_dbnums.blk'
INCLUDE 'g3_dbnum3.blk'
INCLUDE 'exodusII.inc'
INTEGER IDFRO(0:*)
INTEGER IDBCK(0:*)
INTEGER NESFRO(*), NESBCK(*)
INTEGER LTSSS3(*), LTEES3(*)
CHARACTER*(*) COMTOP
CHARACTER*(MXSTLN) NAMELB(NELBLK)
INTEGER NUMELB(*)
INTEGER IDXELB(0:*)
LOGICAL ANYESS
INTEGER NEWFAC(6)
INTEGER NEWWED(5)
DATA NEWFAC /4, 3, 2, 1, 5, 6/
DATA NEWWED /3, 2, 1, 4, 5/
NFRO = IDFRO(0)
NBCK = IDBCK(0)
ANYESS = (NFRO .GT. 0) .OR. (NBCK .GT. 0) .OR. (NUMESS .GT. 0)
C --Write 3D
C ... If topology is anything other than QUAD or TRI (HEX or WEDGE)
C it is ignored in this routine.
c ... NOTE: COMTOP is in the 2D topology, NAMELB is in the 3D topology
IF (ANYESS) THEN
if (comtop(:8) .eq. 'MULTIPLE') THEN
C ... Sidesets are possibly mixed topology (HEX and WEDGE)
C Need to iterate the sideset element/side and determine
C which block the element/side belongs to and then
C adjust accordingly.
C This could probably be optimized...
C ... First, set up the index structure to map an element id to the block it is in.
idxelb(0) = 0
do i=1, nelblk
idxelb(i) = numelb(i)
end do
do i=1, nelblk
idxelb(i) = idxelb(i-1) + idxelb(i)
end do
C ... Now iterate the sideset element/faces
do nl = 1, lesseo
iel = ltees3(nl)
do i=1, nelblk
if (iel .gt. idxelb(i-1) .and. iel .le. idxelb(i)) then
iblk = i
go to 20
end if
end do
20 continue
if (namelb(iblk)(:1) .eq. 'H') then
LTSSS3(NL) = NEWFAC(LTSSS3(NL))
else if (namelb(iblk)(:1) .eq. 'W') then
LTSSS3(NL) = NEWWED(LTSSS3(NL))
end if
end do
else
C ... comtop was not equal to "MULTIPLE_TOPOLOGIES", so
C at this point, the underlying element topology for all elements
C is the same....
if (comtop(:4) .eq. 'QUAD') then
C ... Quad -> hex
DO NL = 1, LESSEO
C ... non-front and non-back sidesets
C ... Front and back don't get mirrored...(?)
LTSSS3(NL) = NEWFAC(LTSSS3(NL))
END DO
else if (comtop(:3) .eq. 'TRI') then
C ... Tri -> wedge
DO NL = 1, LESSEO
LTSSS3(NL) = NEWWED(LTSSS3(NL))
END DO
end if
END IF
end if
RETURN
END