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
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
|