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.
 
 
 
 
 
 

172 lines
6.0 KiB

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 CMDTIM (INLINE, VERB, IFLD, INTYP, CFIELD, IFIELD,
& RFIELD,NSTEPS, TIMES, TMIN, TMAX,
& DELT, NINTV, NPTIMS, IPTIMS)
C=======================================================================
C --*** CMDTIM *** (TIMSEL) Process time step parameter command
C -- Written by Amy Gilkey - revised 05/18/88
C --
C --CMDTIM processes a time step parameter command. The commands are:
C -- TMIN - sets the minimum selected time TMIN
C -- TMAX - sets the maximum selected time TMAX
C -- DELTIME - sets the selected time interval DELT
C -- ZINTV - sets the number of selected times NINTV
C -- with interval starting at TMIN
C -- NINTV - sets the number of selected times NINTV
C -- with interval starting at TMIN + offset
C -- ALLTIMES - sets DELT = 0 for all times
C -- TIMES - selects time steps by time
C -- STEPS - selects time steps by number
C --
C --Parameters:
C -- INLINE - IN/OUT - the parsed input lines for the log file
C -- VERB - IN/OUT - the time step parameter command verb; set for SHOW
C -- IFLD - IN/OUT - the field number
C -- INTYP - IN - the input types from the free field reader
C -- CFIELD - IN - the character fields
C -- IFIELD - IN - the integer fields
C -- RFIELD - IN - the real fields
C -- NSTEPS - IN - the number of time steps
C -- TIMES - IN - the database times
C -- TMIN - IN/OUT - the minimum selected time
C -- TMAX - IN/OUT - the maximum selected time
C -- DELT - IN/OUT - the interval between selected times
C -- (<0 = selected times)
C -- NINTV - IN/OUT - the number of times between tmin and tmax to select
C -- (negative for zero interval)
C -- NPTIMS - IN/OUT - the number of selected times
C -- IPTIMS - IN/OUT - the selected time step numbers
C --Routines Called:
C -- LOCREA - (ETCLIB) Find closest value
C -- MINMAX - (ETCLIB) Find minimum and maximum value
C -- MINMXL - (ETCLIB) Find minimum and maximum value of selected values
C -- NUMEQL - (ETCLIB) Count the number of equal values
CHARACTER*(*) INLINE(*)
CHARACTER*(*) VERB
INTEGER INTYP(*)
CHARACTER*(*) CFIELD(*)
INTEGER IFIELD(*)
REAL RFIELD(*)
REAL TIMES(*)
INTEGER IPTIMS(*)
LOGICAL FFEXST, FFMATC
LOGICAL ISTIME
CHARACTER*5 STR5
NSTEPX = NSTEPS
IF ((VERB .EQ. 'TMIN') .OR. (VERB .EQ. 'TMAX')) THEN
CALL FFADDC (VERB, INLINE(1))
CALL MINMAX (NSTEPS, TIMES, TIMMIN, TIMMAX)
IF (VERB .EQ. 'TMIN') THEN
CALL FFREAL (IFLD, INTYP, RFIELD,
& 'minimum time', TIMMIN, X, *120)
TMIN = X
CALL FFADDR (TMIN, INLINE(1))
ELSE
CALL FFREAL (IFLD, INTYP, RFIELD,
& 'maximum time', TIMMAX, X, *120)
TMAX = X
CALL FFADDR (TMAX, INLINE(1))
END IF
IF (TMIN .GT. TMAX) CALL PRTERR ('CMDWARN',
& 'Minimum time is greater than maximum time')
IF (DELT .LT. 0) THEN
NINTV = 0
DELT = 0.0
END IF
ELSE IF ((VERB .EQ. 'NINTV') .OR. (VERB .EQ. 'ZINTV')) THEN
CALL FFADDC (VERB, INLINE(1))
IF (VERB .EQ. 'NINTV') THEN
NT = MIN (10, NSTEPX-1)
ELSE
NT = MIN (10, NSTEPX)
END IF
CALL FFINTG (IFLD, INTYP, IFIELD,
& 'number of times', NT, N, *120)
NINTV = N
CALL FFADDI (NINTV, INLINE(1))
IF (VERB .EQ. 'NINTV') THEN
NINTV = N
ELSE
NINTV = -N
END IF
DELT = 999.0
ELSE IF (VERB .EQ. 'DELTIME') THEN
CALL FFADDC (VERB, INLINE(1))
NT = - MIN (10, NSTEPX)
IF (NT .LT. -1) THEN
DDELT = (TMAX - TMIN) / (-NT-1)
IF (DDELT .LE. 0.) DDELT = 1.0
ELSE
DDELT = 0.0
END IF
CALL FFREAL (IFLD, INTYP, RFIELD,
& 'delta time', DDELT, X, *120)
DELT = X
CALL FFADDR (DELT, INLINE(1))
NINTV = 0
ELSE IF (VERB .EQ. 'ALLTIMES') THEN
CALL FFADDC (VERB, INLINE(1))
DELT = 0.0
NINTV = 0
ELSE IF ((VERB .EQ. 'TIMES') .OR. (VERB .EQ. 'STEPS')) THEN
CALL FFADDC (VERB, INLINE(1))
ISTIME = (VERB .EQ. 'TIMES')
VERB = 'DELTIME'
IF (DELT .GE. 0.0) THEN
NINTV = NPTIMS
DELT = -1.0
END IF
C --Reset is assumed, unless ADD is first parameter
IF (.NOT. FFMATC (IFLD, INTYP, CFIELD, 'ADD', 1)) NINTV = 0
100 CONTINUE
IF (FFEXST (IFLD, INTYP)) THEN
IF (ISTIME) THEN
CALL FFREAL (IFLD, INTYP, RFIELD,
& 'time, ignored', 0.0, T, *110)
CALL FFADDR (T, INLINE(1))
ISTEP = LOCREA (T, NSTEPS, TIMES)
ELSE
CALL FFINTG (IFLD, INTYP, IFIELD,
& 'step, ignored', 0, ISTEP, *110)
IF ((ISTEP .LE. 0) .OR. (ISTEP .GT. NSTEPS)) THEN
CALL INTSTR (1, 0, ISTEP, STR5, LSTR)
CALL PRTERR ('CMDERR', 'Step ' // STR5(:LSTR)
& // ' does not exist, ignored')
GOTO 110
END IF
CALL FFADDI (ISTEP, INLINE(1))
END IF
IF (LOCINT (ISTEP, NINTV, IPTIMS) .LE. 0) THEN
NINTV = NINTV + 1
IPTIMS(NINTV) = ISTEP
END IF
110 CONTINUE
GOTO 100
END IF
END IF
NPTIMS = -999
CALL CALTIM (TMIN, TMAX, DELT, NINTV,
& NSTEPS, TIMES, NPTIMS, IPTIMS)
120 CONTINUE
RETURN
END