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.

245 lines
8.4 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 DBINAM (NDB, OPTION, NDIM, NELBLK, NNDIM, NNELB,
& NVARHI, NVARGL, NVARNP, NVAREL, NVARNS,
& NVARSS, NAMECO,
& IXHV, IXGV, IXNV, IXEV, IXNS, IXSS,
& A, IA, KIEVOK, C, KNAMES, EXODUS, IDELB,
& ISHEX, KHEXID, NAMLEN, *)
C=======================================================================
C --*** DBINAM *** (EXOLIB) Read database names
C -- Written by Amy Gilkey - revised 02/08/88
C --
C --DBINAM reads the names of the coordinates, the element block types,
C --and the database variables from the database. All names are converted
C --to uppercase and all embedded blanks within a name are removed.
C --The element block variable truth table is also read.
C --
C --Note that the numbers of variables are read in this routine.
C --
C --This routine calls DBVINI and uses DBVIX_BL to get the variable name
C --indices.
C --
C --Dynamic memory is reserved in this routine. If there is a problem,
C --the routine returns normally without printing an error message.
C --
C --Parameters:
C -- NDB - IN - the database number
C -- OPTION - IN - ' ' to not store, '*' to store all, else store options:
C -- 'C' to store coordinate names
C -- 'B' to store element block names
C -- 'V' to store variables names
C -- 'T' to store element block variable truth table
C -- NDIM - IN - the number of coordinates per node
C -- NELBLK - IN - the number of element blocks
C -- NNDIM - OUT - the number of coordinates per node; <0 if end-of-file
C -- NNELB - OUT - the number of element blocks; <0 if end-of-file
C -- NVARHI - OUT - the number of history variables; <0 if end-of-file
C -- NVARGL - OUT - the number of global variables; <0 if end-of-file
C -- NVARNP - OUT - the number of nodal variables; <0 if end-of-file
C -- NVAREL - OUT - the number of element variables; <0 if end-of-file
C -- NAMECO - OUT - the names of the coordinates; max size = 6 (if OPTION)
C -- IXHV - OUT - the VNAMES index of the history var names (if OPTION)
C -- IXGV - OUT - the VNAMES index of the global var names (if OPTION)
C -- IXNV - OUT - the VNAMES index of the nodal var names (if OPTION)
C -- IXEV - OUT - the VNAMES index of the element var names (if OPTION)
C -- IXNS - OUT - the VNAMES index of the nodeset var names (if OPTION)
C -- IXSS - OUT - the VNAMES index of the sideset var names (if OPTION)
C -- A - OUT - the dynamic memory base array
C -- KIEVOK - OUT - the dynamic memory index of the element block variable
C -- truth table; (if OPTION)
C -- variable i of block j exists iff ISEVOK(j,i)
C -- C - OUT - the dynamic memory base array (character)
C -- KNAMES - OUT - the dynamic memory index of the variable names.
C -- EXODUS - OUT - false if GENESIS file, true if EXODUS file so far
C -- * - OUT - return statement if error encountered
C -- NOT used if valid GENESIS file; message is printed
C --
C --Routines Called:
C -- EXUPCS - (SUPES) Convert to uppercase and blank non-standard
C -- MDRSRV - (SUPES) Reserve dynamic memory
C -- PCKSTR - (STRLIB) Remove embedded blanks
include 'exodusII.inc'
PARAMETER (MAXDIM=6)
INTEGER NDB
CHARACTER*(*) OPTION
INTEGER NDIM, NELBLK
INTEGER NNDIM, NNELB
CHARACTER*(MXSTLN) NAMECO(*)
INTEGER NVARHI, NVARGL, NVARNP, NVAREL
INTEGER IXHV, IXGV, IXNV, IXEV, IXNS, IXSS
DIMENSION A(*), IA(*)
INTEGER KIEVOK
CHARACTER*1 C(*)
INTEGER KNAMES
LOGICAL EXODUS
INTEGER IDELB(*)
CHARACTER*80 ERRMSG
EXODUS = .FALSE.
NNDIM = -999
NNELB = -999
NVARHI = -999
NVARGL = -999
NVARNP = -999
NVAREL = -999
NVARNS = -999
NVARSS = -999
C --Read and pack coordinate names
IF ((OPTION .EQ. '*') .OR. (INDEX (OPTION, 'C') .GT. 0)) THEN
IF (NDIM .GT. MAXDIM) CALL PRTERR ('WARNING',
& 'Too many coordinate names in the database')
C ... Easier to just hardwire the coordinate names...
nameco(1) = 'X'
nameco(2) = 'Y'
if (ndim .eq. 3) nameco(3) = 'Z'
DO 100 I = 1, MIN(NDIM,MAXDIM)
CALL EXUPCS (NAMECO(I))
100 CONTINUE
CALL PCKSTR (MIN(NDIM,MAXDIM), NAMECO)
END IF
NNDIM = NDIM
C --Read the number of variables
nvarhi = 0
call exgvp(ndb, 'G', nvargl, ierr)
call exgvp(ndb, 'N', nvarnp, ierr)
call exgvp(ndb, 'E', nvarel, ierr)
call exgvp(ndb, 'M', nvarns, ierr)
call exgvp(ndb, 'S', nvarss, ierr)
C --Initialize for DBVTYP_BL and DBVIX_BL
CALL DBVINI_BL (NVARGL, NVARNP, NVAREL, NVARNS, NVARSS)
if ((nvarhi + nvargl + nvarnp + nvarel + nvarns + nvarss) .eq. 0)
* go to 160
EXODUS = .TRUE.
IF ((OPTION .EQ. '*') .OR. (INDEX (OPTION, 'V') .GT. 0)) THEN
C --Get the name indices
CALL MCRSRV('NAMES', KNAMES,
* NAMLEN*(NVARHI+NVARGL+NVARNP+NVAREL+NVARNS+NVARSS))
CALL MCSTAT (NERR, MEM)
IF (NERR .GT. 0) GOTO 180
CALL DBVIX_BL ('H', 1, IXHV)
CALL DBVIX_BL ('H', NVARHI, IXHVE)
CALL DBVIX_BL ('G', 1, IXGV)
CALL DBVIX_BL ('G', NVARGL, IXGVE)
CALL DBVIX_BL ('N', 1, IXNV)
CALL DBVIX_BL ('N', NVARNP, IXNVE)
CALL DBVIX_BL ('E', 1, IXEV)
CALL DBVIX_BL ('E', NVAREL, IXEVE)
CALL DBVIX_BL ('M', 1, IXNS)
CALL DBVIX_BL ('M', NVARNS, IXNSE)
CALL DBVIX_BL ('S', 1, IXSS)
CALL DBVIX_BL ('S', NVARSS, IXSSE)
C --Read and pack variable names
call dbinm2 (ndb, nvargl, nvarnp, nvarel, nvarns, nvarss,
& C(KNAMES+NAMLEN*(IXGV-1)),
& C(KNAMES+NAMLEN*(IXNV-1)),
& C(KNAMES+NAMLEN*(IXEV-1)),
& C(KNAMES+NAMLEN*(IXNS-1)),
& C(KNAMES+NAMLEN*(IXSS-1)), namlen)
END IF
C --Read the element block variable truth table
IF ((OPTION .EQ. '*') .OR. (INDEX (OPTION, 'T') .GT. 0)) THEN
CALL MDRSRV ('ISEVOK', KIEVOK, NELBLK * NVAREL)
CALL MDRSRV ('ITMP', KITMP, NELBLK * NVAREL)
CALL MDSTAT (NERR, MEM)
IF (NERR .GT. 0) GOTO 160
CALL DBINM1 (NDB, OPTION, NELBLK, NVAREL, IA(KIEVOK),
& IA(KIEVOK), IA(KITMP), IERR, MAX(NELBLK,1),
& IDELB, ISHEX, IA(KHEXID), A, IA, *210)
call mddel('ITMP')
END IF
160 CONTINUE
RETURN
180 CONTINUE
ERRMSG = 'ELEMENT BLOCK NAMES'
GOTO 220
210 CONTINUE
ERRMSG = 'ELEMENT BLOCK VARIABLE TRUTH TABLE'
GOTO 220
220 CONTINUE
CALL DBERR (IERR, ERRMSG)
RETURN 1
END
subroutine dbinm2 (ndb, nvargl, nvarnp, nvarel, nvarns, nvarss,
& namgv, namnv, namev, namns, namss, namlen)
include 'params.blk'
character*(namlen) namgv(*), namnv(*), namev(*), namns(*),
* namss(*)
if (nvargl .gt. 0) then
call exgvan(ndb, 'G', nvargl, namgv, ierr)
end if
if (nvarnp .gt. 0) then
call exgvan(ndb, 'N', nvarnp, namnv, ierr)
end if
if (nvarel .gt. 0) then
call exgvan(ndb, 'E', nvarel, namev, ierr)
end if
if (nvarns .gt. 0) then
call exgvan(ndb, 'M', nvarns, namns, ierr)
end if
if (nvarss .gt. 0) then
call exgvan(ndb, 'S', nvarss, namss, ierr)
end if
DO 130 I = 1, nvargl
CALL EXUPCS (namgv(i))
130 CONTINUE
CALL PCKSTR (NVARGL, namgv)
DO 140 I = 1, nvarnp
CALL EXUPCS (namnv(i))
140 CONTINUE
CALL PCKSTR (NVARNP, namnv)
DO 150 I = 1, nvarel
CALL EXUPCS (namev(i))
150 CONTINUE
CALL PCKSTR (NVAREL, namev)
DO I = 1, nvarns
CALL EXUPCS (namns(i))
END DO
CALL PCKSTR (NVARNS, namns)
DO I = 1, nvarss
CALL EXUPCS (namss(i))
END DO
CALL PCKSTR (NVARSS, namss)
return
end