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.
 
 
 
 
 
 

114 lines
3.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
SUBROUTINE VOL3D( COORD, LSTSN, NSEG, VOLUME, NDIM, NUMESS,
* CENT, NUMNP, CENTER)
C***********************************************************************
C DESCRIPTION:
C This routine computes the volume of a cavity formed
C by the boundary of an element side set flag
C FORMAL PARAMETERS:
C COORD REAL Nodal Coordinates
C LSTSN INTEGER List of nodes on this boundary
C NSEG INTEGER Number of segments in this boundary
C VOLUME REAL Volume of this cavity
C NDIM INTEGER Number of Nodes
C CENT REAL Apex of Cavity Volume pentahedra
C CALLED BY:
C***********************************************************************
DIMENSION COORD(NUMNP, *), LSTSN(*), CENT(3)
LOGICAL CENTER
VOLUME = 0.0
IF (.NOT. CENTER) THEN
XC = 0.0
YC = 0.0
ZC = 0.0
DO KSEG = 1 , NSEG
L = LSTSN(4*KSEG)
K = LSTSN(4*KSEG - 1)
J = LSTSN(4*KSEG - 2)
I = LSTSN(4*KSEG - 3)
X1 = COORD(I,1)
X2 = COORD(J,1)
X3 = COORD(K,1)
X4 = COORD(L,1)
Y1 = COORD(I,2)
Y2 = COORD(J,2)
Y3 = COORD(K,2)
Y4 = COORD(L,2)
Z1 = COORD(I,3)
Z2 = COORD(J,3)
Z3 = COORD(K,3)
Z4 = COORD(L,3)
XC = XC + x1 + x2 + x3 + x4
YC = YC + y1 + y2 + y3 + y4
ZC = ZC + z1 + z2 + z3 + z4
END DO
CENT(1) = XC / (4*NSEG)
CENT(2) = YC / (4*NSEG)
CENT(3) = ZC / (4*NSEG)
END IF
X5 = CENT(1)
Y5 = CENT(2)
Z5 = CENT(3)
DO 100 KSEG = 1 , NSEG
L = LSTSN(4*KSEG)
K = LSTSN(4*KSEG - 1)
J = LSTSN(4*KSEG - 2)
I = LSTSN(4*KSEG - 3)
X1 = COORD(I,1)
X2 = COORD(J,1)
X3 = COORD(K,1)
X4 = COORD(L,1)
Y1 = COORD(I,2)
Y2 = COORD(J,2)
Y3 = COORD(K,2)
Y4 = COORD(L,2)
Z1 = COORD(I,3)
Z2 = COORD(J,3)
Z3 = COORD(K,3)
Z4 = COORD(L,3)
Z13 = Z1 - Z3
Z24 = Z2 - Z4
Z31 = Z3 - Z1
Z42 = Z4 - Z2
Z51 = Z5 - Z1
Z52 = Z5 - Z2
Z53 = Z5 - Z3
Z54 = Z5 - Z4
VP = ((2.*Y5 - Y3) * Z42 + Y2 * (Z53 + Z54) -
* Y4 * (Z53 + Z52) ) * X1 +
* ( (Y4 - 2.*Y5) * Z31 + Y3 * (Z54 + Z51) -
* Y1 * (Z54 + Z53) ) * X2 +
* ( (Y1 - 2.*Y5) * Z42 + Y4 * (Z51 + Z52) -
* Y2 * (Z54 + Z51) ) * X3 +
* ( (2.*Y5 - Y2) * Z31 + Y1 * (Z52 + Z53) -
* Y3 * (Z52 + Z51) ) * X4 +
* ((Y2 - Y4) * (Z3 - Z1) + (Y3 - Y1) *(Z4 - Z2)) * 2. * X5
VOLUME = VOLUME + VP / 12.0
100 CONTINUE
RETURN
END