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.

104 lines
3.3 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 RDSTEP (NDB, NCSTEP,
& NUMELB, IDELB, ISEVOK,
& TIME, VARGL, VARNP, VAREL,
$ neldm)
C=======================================================================
C --*** RDSTEP *** (EXPLORE) Read current database variables
C --
C --RDSTEP reads the variable data for the next time step from the
C --database.
C --
C --Parameters:
C -- NDB - IN - the database number
C -- NCSTEP - IN/OUT - the current step number
C -- NVARGL - IN - the number of global variables
C -- NVARNP - IN - the number of nodal variables
C -- NVAREL - IN - the number of element variables
C -- NUMELB - IN - the number of elements per block
C -- ISEVOK - IN - the element block variable truth table;
C -- variable i of block j exists iff ISEVOK(i,j) is NOT 0
C -- TIME - OUT - the time step time
C -- VARGL - OUT - the global variables for the time step
C -- VARNP - OUT - the nodal variables for the time step
C -- VAREL - OUT - the element variables for the time step
include 'exodusII.inc'
include 'exp_dbnums.blk'
INTEGER NUMELB(*)
INTEGER IDELB(*)
INTEGER ISEVOK(nvarel,*)
REAL VARGL(*)
REAL VARNP(numnp, *)
REAL VAREL(numel, *)
CHARACTER*80 ERRMSG
C ... Initialize variables to known value in case error on read
TIME = -999.9
CALL INIREA (NVARGL, -999.9, VARGL)
CALL INIREA (NVARNP * NUMNP, -999.9, VARNP)
CALL INIREA (NVAREL * NUMEL, -999.9, VAREL)
C ... Read the time for the specified step
call exgtim(ndb, ncstep, time, ierr)
if (ierr .ne. 0) go to 150
C ... Read the global variables (if any)
if (nvargl .gt. 0) then
call exggv (ndb, ncstep, nvargl, vargl, ierr)
if (ierr .ne. 0) go to 170
end if
C ... Read the nodal variables (if any)
DO 120 I = 1, NVARNP
call exgnv (ndb, ncstep, i, numnp, varnp(1,i), ierr)
if (ierr .ne. 0) go to 180
120 CONTINUE
C ... Read the element variables (if any)
DO 140 I = 1, NVAREL
IEL0 = 1
DO 130 IELB = 1, NELBLK
IF (ISEVOK(I,IELB) .NE. 0 .AND. numelb(ielb) .GT. 0) THEN
call exgev (ndb, ncstep, i, idelb(ielb),
& numelb(ielb), varel(iel0,i), ierr)
if (ierr .ne. 0) go to 190
END IF
IEL0 = IEL0 + NUMELB(IELB)
130 CONTINUE
140 CONTINUE
RETURN
150 CONTINUE
WRITE (ERRMSG, 10000, IOSTAT=IDUM)
& 'TIME on step', NCSTEP
GOTO 200
170 CONTINUE
WRITE (ERRMSG, 10000, IOSTAT=IDUM)
& 'GLOBAL VARIABLES on step', NCSTEP
GOTO 200
180 CONTINUE
WRITE (ERRMSG, 10000, IOSTAT=IDUM)
& 'NODAL VARIABLE', I, ' on step', NCSTEP
GOTO 200
190 CONTINUE
WRITE (ERRMSG, 10000, IOSTAT=IDUM)
& 'ELEMENT VARIABLE', I, ' in block', IELB, ' on step', NCSTEP
GOTO 200
200 CONTINUE
CALL WDBERR (IERR, ERRMSG)
RETURN
10000 FORMAT (5 (A, I12))
END