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.

139 lines
3.8 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
SUBROUTINE SUMNOD (CRD, DISP, SVAR, NDIM, NUMNP, INDX,
* NODSEL, NAME, TIME, ITMSEL, AXI, AVER, DOABS)
include 'exodusII.inc'
REAL CRD(NUMNP,*), DISP(NUMNP,*), SVAR(*)
CHARACTER*(*) NAME
REAL TIME(*)
LOGICAL NODSEL(*), ITMSEL(*), AXI, AVER, DOABS
CHARACTER*64 STRA
CHARACTER*132 STRTMP
CHARACTER*16 ENGNOT, ENG1, ENG2, ENG3, ENG4
include 'nu_io.blk'
include 'nu_ptim.blk'
include 'nu_ndisp.blk'
PI = ATAN2(0.0, -1.0)
NLAST = 0
IF (AVER) THEN
IF (DOABS) THEN
STRA = 'Average absolute value of'
ELSE
STRA = 'Average'
END IF
RSEL = DBLE(NUMEQL (.TRUE., NUMNP, NODSEL))
ELSE
IF (DOABS) THEN
STRA = 'Absolute value total of'
ELSE
STRA = 'Total'
END IF
RSEL = 1.0
END IF
DO 10 IO=IOMIN, IOMAX
IF (NDIM .EQ. 2 .AND. AXI) THEN
WRITE (IO,20) STRA(:LENSTR(STRA)), NAME(:LENSTR(NAME))
ELSE
WRITE (IO,30) STRA(:LENSTR(STRA)), NAME(:LENSTR(NAME))
END IF
WRITE (IO, 40) NAME
10 CONTINUE
20 FORMAT (/4X,A,' ',A,' on selected nodes ',
* '(2 PI Radius Multiplier)')
30 FORMAT (/4X,A,' ',A,' on selected nodes ')
40 FORMAT (/,
* 4X,'Time ',A8,/
* 4X,'---- ------ ')
RMIN = 1.0E38
RMAX = -1.0E38
50 CONTINUE
NLAST = NLAST + 1
IF (NLAST .GT. LSTSEL) THEN
NLAST = 0
GO TO 120
ELSE IF (ITMSEL(NLAST)) THEN
C ... READ THE STEP AND STORE X-DISPLACEMENTS (2D AXISYMMETRIC)
IF (NDIM .EQ. 2 .AND. AXI) THEN
call exgnv(ndb, nlast, ndisp(1), numnp, disp(1,1), ierr)
END IF
call exgnv(ndb, nlast, indx, numnp, svar, ierr)
TREAD = TIME(NLAST)
SUM = 0.0
IF (NDIM .EQ. 2 .AND. AXI) THEN
IF (DOABS) THEN
DO 60 I=1, NUMNP
IF (NODSEL(I))
* SUM = SUM + 2. * PI * (CRD(I,1) + DISP(I,1)) *
$ ABS( SVAR(I) )
60 CONTINUE
ELSE
DO 70 I=1, NUMNP
IF (NODSEL(I)) SUM = SUM +
$ 2. * PI * (CRD(I,1) + DISP(I,1)) * SVAR(I)
70 CONTINUE
END IF
ELSE
IF (DOABS) THEN
DO 80 I=1, NUMNP
IF (NODSEL(I)) SUM = SUM + ABS(SVAR(I))
80 CONTINUE
ELSE
DO 90 I=1, NUMNP
IF (NODSEL(I)) SUM = SUM + SVAR(I)
90 CONTINUE
END IF
END IF
SUM = SUM / RSEL
IF (SUM .GT. RMAX) THEN
RMAX = SUM
ITMX = NLAST
END IF
IF (SUM .LT. RMIN) THEN
RMIN = SUM
ITMN = NLAST
END IF
DO 100 IO=IOMIN,IOMAX
WRITE (IO, 110) TREAD, SUM
100 CONTINUE
110 FORMAT (1X,2(1PE15.8,2X))
END IF
GO TO 50
120 CONTINUE
eng1 = engnot(rmin,2)
eng2 = engnot(time(itmn), 2)
eng3 = engnot(rmax,2)
eng4 = engnot(time(itmx), 2)
WRITE (STRTMP, 140) ENG1, ENG2, ENG3, ENG4
CALL SQZSTR(STRTMP, LSTR)
DO 130 IO=IOMIN, IOMAX
WRITE (IO, 150) STRTMP(:LSTR)
130 CONTINUE
RETURN
140 FORMAT ('Minimum = ',A16,' at time ',A16,', maximum = ',A16,
* ' at time ',A16,'.')
150 FORMAT (/,1X,A)
CALL PRTERR ('PROGRAM',
* 'Internal code error, contact sponsor')
STOP 'SUMNOD'
END