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.
162 lines
5.7 KiB
162 lines
5.7 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 DBINM1 (NDB, OPTION, NELBLK, NVAREL, ISEVOK, IEVOK,
|
||
|
& ITMP, IERR, NELBDM, IDELB, ISHEX, HEXID, A,
|
||
|
& IA, *)
|
||
|
C=======================================================================
|
||
|
C --*** DBINM1 *** (EXOLIB) Internal to DBINAM
|
||
|
C -- Written by Amy Gilkey - revised 02/18/88
|
||
|
C --
|
||
|
C --DBINM1 reads the element block variable truth table.
|
||
|
C --
|
||
|
C --Parameters:
|
||
|
C -- NDB - IN - the database number
|
||
|
C -- OPTION - IN - ' ' to not store, '*' to store all, else store options:
|
||
|
C -- 'T' to store element block variable truth table
|
||
|
C -- NELBLK - IN - the number of element blocks
|
||
|
C -- NVAREL - IN - the number of element variables
|
||
|
C -- ISEVOK - OUT - the element block variable truth table;
|
||
|
C -- variable i of block j exists iff ISEVOK(j,i)
|
||
|
C -- IEVOK - OUT - the element block variable truth table;
|
||
|
C -- variable i of block j exists iff ISEVOK(j,i) is NOT 0
|
||
|
C -- IERR - OUT - the returned read error flag
|
||
|
C -- * - OUT - return statement if error encountered
|
||
|
C -- NO message is printed
|
||
|
C --
|
||
|
C --Database must be positioned in front of truth table upon entry;
|
||
|
C --upon exit positioned after table.
|
||
|
|
||
|
include 'exodusII.inc'
|
||
|
DIMENSION A(*), IA(*)
|
||
|
INTEGER NDB
|
||
|
CHARACTER*(*) OPTION
|
||
|
INTEGER NELBLK, NVAREL
|
||
|
LOGICAL ISEVOK(NELBDM,*)
|
||
|
INTEGER IEVOK(NELBDM,*)
|
||
|
INTEGER ITMP(NVAREL,NELBDM)
|
||
|
INTEGER IERR
|
||
|
INTEGER IDELB(*)
|
||
|
INTEGER ISHEX
|
||
|
INTEGER HEXID(*)
|
||
|
|
||
|
IF ((OPTION .EQ. '*') .OR. (INDEX (OPTION, 'T') .GT. 0)) THEN
|
||
|
CALL EXGVTT(NDB, NELBLK-ISHEX, NVAREL, ITMP, IERR)
|
||
|
C If ishex>0 then new element blocks have been created for
|
||
|
C HEXSHELL elements
|
||
|
IF (ISHEX .GT. 0) THEN
|
||
|
C Reserve scratch space to create new element variable truth table
|
||
|
CALL MDRSRV ('IETSCR', IETSCR, NELBLK*NVAREL)
|
||
|
CALL MDSTAT (NERR, MEM)
|
||
|
IF (NERR .GT. 0) RETURN 1
|
||
|
CALL MODEVTT(NELBLK, NVAREL, ISHEX, IDELB, HEXID, ITMP,
|
||
|
& IA(IETSCR))
|
||
|
CALL MDDEL ('IETSCR')
|
||
|
CALL MDSTAT (NERR, MEM)
|
||
|
IF (NERR .GT. 0) RETURN 1
|
||
|
ENDIF
|
||
|
IF (ierr .eq. 17) then
|
||
|
DO 20 I = 1, NVAREL
|
||
|
DO 10 IELB = 1, NELBLK
|
||
|
ISEVOK(IELB,I) = .true.
|
||
|
10 CONTINUE
|
||
|
20 CONTINUE
|
||
|
ELSE
|
||
|
DO 110 I = 1, NVAREL
|
||
|
DO 100 IELB = 1, NELBLK
|
||
|
ISEVOK(IELB,I) = (ITMP(I,IELB) .NE. 0)
|
||
|
100 CONTINUE
|
||
|
110 CONTINUE
|
||
|
ENDIF
|
||
|
|
||
|
END IF
|
||
|
|
||
|
RETURN
|
||
|
|
||
|
END
|
||
|
|
||
|
SUBROUTINE MODEVTT(NELBLK, NVAREL, ISHEX, IDELB, HEXID, IEVTT,
|
||
|
& TTSCR)
|
||
|
C Add rows to element variable truth table for the SHELL
|
||
|
C element blocks of the HEXSHELL. IEVTT contains the element variable
|
||
|
C truth table from the exodusII file. HEXID contains the ID of
|
||
|
C the HEXSHELL element blocks. TTSCR is a scratch array for the
|
||
|
C element variable truth table.
|
||
|
C Design - loop over the number of element blocks. If the element
|
||
|
C block id in the IDELB matches the element block id in HEXID, copy the
|
||
|
C row from the IEVTT array to the TTSCR array and then add a
|
||
|
C row of zeros into the TTSCR array for the next element block
|
||
|
C to account for the SHELL element block. Otherwise, copy the
|
||
|
C row from the IEVTT array to the TTSCR array.
|
||
|
|
||
|
C ... Current truth table is filled in (NVAREL,NELBLK-ISHEX)
|
||
|
C and contains valid values only for the non-hexshell-shell blocks
|
||
|
C (if a block was originally a shell, it has variables, if shell
|
||
|
C block created from hexshell, then no variables)
|
||
|
C ... The IDELB has both hexshell-shell and hex ids already in it
|
||
|
C so it's rows don't necessarily correspond to the truth table
|
||
|
C rows.
|
||
|
|
||
|
INTEGER NELBLK, NVAREL, ISHEX
|
||
|
INTEGER IDELB(*), HEXID(*)
|
||
|
INTEGER IEVTT(NVAREL,NELBLK), TTSCR(NVAREL,NELBLK)
|
||
|
|
||
|
C Index into HEXID array
|
||
|
IHEX = 1
|
||
|
C Index into truth table array (IEVTT), max value = NELBLK-ISHEX
|
||
|
IFROM = 1
|
||
|
C Index into block id array (IDELB)
|
||
|
IID = 1
|
||
|
C Index into TTSCR array
|
||
|
ITO = 1
|
||
|
|
||
|
200 CONTINUE
|
||
|
C Exit condition
|
||
|
IF (IFROM .GT. NELBLK-ISHEX) GOTO 300
|
||
|
|
||
|
C HEXSHELL element block ID - HEX element block ID
|
||
|
IF (IHEX .GT. ISHEX) THEN
|
||
|
IDH = 0
|
||
|
ELSE
|
||
|
IDH = HEXID(IHEX)
|
||
|
ENDIF
|
||
|
|
||
|
IF (IDELB(IID) .EQ. IDH) THEN
|
||
|
C Element block id matches hexshell element
|
||
|
DO 210 J = 1, NVAREL
|
||
|
C Row for HEX element in element variable truth table
|
||
|
TTSCR(J,ITO) = IEVTT(J,IFROM)
|
||
|
C Row for SHELL element in element variable truth table
|
||
|
TTSCR(J,ITO+1) = 0
|
||
|
210 CONTINUE
|
||
|
ITO = ITO + 2
|
||
|
IHEX = IHEX + 1
|
||
|
C ... Skip past hexshell-shell id in idelb
|
||
|
IID = IID + 2
|
||
|
ELSE
|
||
|
C Element block id doesn't match hexshell element. Copy Element
|
||
|
C variable truth table values.
|
||
|
DO 220 J = 1, NVAREL
|
||
|
TTSCR(J,ITO) = IEVTT(J,IFROM)
|
||
|
220 CONTINUE
|
||
|
ITO = ITO + 1
|
||
|
IID = IID + 1
|
||
|
ENDIF
|
||
|
IFROM = IFROM + 1
|
||
|
GOTO 200
|
||
|
300 CONTINUE
|
||
|
|
||
|
C Copy TTSCR back to IEVTT
|
||
|
DO 230 I = 1, NELBLK
|
||
|
DO 240 J = 1, NVAREL
|
||
|
IEVTT(J,I) = TTSCR(J,I)
|
||
|
240 CONTINUE
|
||
|
230 CONTINUE
|
||
|
|
||
|
RETURN
|
||
|
END
|