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