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.

131 lines
4.1 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=======================================================================
*DECK,VOL
SUBROUTINE VOL (ITYPE,XX,YY,ZZ,VOLUME)
C ******************************************************************
C SUBROUTINE TO FIND THE VOLUME OF AN ELEMENT
C Called by ELTON3, ELTOND
C ******************************************************************
DIMENSION XX(*), YY(*), ZZ(*)
C ******************************************************************
IF (ITYPE .EQ. 3) THEN
C 4-node quad
A1 = XX(1) - XX(3)
B1 = YY(1) - YY(3)
A2 = XX(2) - XX(4)
B2 = YY(2) - YY(4)
CCR = (A1 * B2) - (A2 * B1)
VOLUME = 0.5 * ABS(CCR)
RETURN
ELSE IF (ITYPE .EQ. 10) THEN
C 8-node hex
GR1 = ( YY(2)*(ZZ(6)-ZZ(3)-ZZ(4)+ZZ(5)) + YY(3)*(ZZ(2)-ZZ(4))
& + YY(4)*(ZZ(3)-ZZ(8)-ZZ(5)+ZZ(2))
& + YY(5)*(ZZ(8)-ZZ(6)-ZZ(2)+ZZ(4))
& + YY(6)*(ZZ(5)-ZZ(2)) + YY(8)*(ZZ(4)-ZZ(5)) ) / 12.
GR2 = ( YY(3)*(ZZ(7)-ZZ(4)-ZZ(1)+ZZ(6)) + YY(4)*(ZZ(3)-ZZ(1))
& + YY(1)*(ZZ(4)-ZZ(5)-ZZ(6)+ZZ(3))
& + YY(6)*(ZZ(5)-ZZ(7)-ZZ(3)+ZZ(1))
& + YY(7)*(ZZ(6)-ZZ(3)) + YY(5)*(ZZ(1)-ZZ(6)) ) / 12.
GR3 = ( YY(4)*(ZZ(8)-ZZ(1)-ZZ(2)+ZZ(7)) + YY(1)*(ZZ(4)-ZZ(2))
& + YY(2)*(ZZ(1)-ZZ(6)-ZZ(7)+ZZ(4))
& + YY(7)*(ZZ(6)-ZZ(8)-ZZ(4)+ZZ(2))
& + YY(8)*(ZZ(7)-ZZ(4)) + YY(6)*(ZZ(2)-ZZ(7)) ) / 12.
GR4 = ( YY(1)*(ZZ(5)-ZZ(2)-ZZ(3)+ZZ(8)) + YY(2)*(ZZ(1)-ZZ(3))
& + YY(3)*(ZZ(2)-ZZ(7)-ZZ(8)+ZZ(1))
& + YY(8)*(ZZ(7)-ZZ(5)-ZZ(1)+ZZ(3))
& + YY(5)*(ZZ(8)-ZZ(1)) + YY(7)*(ZZ(3)-ZZ(8)) ) / 12.
GR5 = ( YY(8)*(ZZ(4)-ZZ(7)-ZZ(6)+ZZ(1)) + YY(7)*(ZZ(8)-ZZ(6))
& + YY(6)*(ZZ(7)-ZZ(2)-ZZ(1)+ZZ(8))
& + YY(1)*(ZZ(2)-ZZ(4)-ZZ(8)+ZZ(6))
& + YY(4)*(ZZ(1)-ZZ(8)) + YY(2)*(ZZ(6)-ZZ(1)) ) / 12.
GR6 = ( YY(5)*(ZZ(1)-ZZ(8)-ZZ(7)+ZZ(2)) + YY(8)*(ZZ(5)-ZZ(7))
& + YY(7)*(ZZ(8)-ZZ(3)-ZZ(2)+ZZ(5))
& + YY(2)*(ZZ(3)-ZZ(1)-ZZ(5)+ZZ(7))
& + YY(1)*(ZZ(2)-ZZ(5)) + YY(3)*(ZZ(7)-ZZ(2)) ) / 12.
GR7 = ( YY(6)*(ZZ(2)-ZZ(5)-ZZ(8)+ZZ(3)) + YY(5)*(ZZ(6)-ZZ(8))
& + YY(8)*(ZZ(5)-ZZ(4)-ZZ(3)+ZZ(6))
& + YY(3)*(ZZ(4)-ZZ(2)-ZZ(6)+ZZ(8))
& + YY(2)*(ZZ(3)-ZZ(6)) + YY(4)*(ZZ(8)-ZZ(3)) ) / 12.
GR8 = ( YY(7)*(ZZ(3)-ZZ(6)-ZZ(5)+ZZ(4)) + YY(6)*(ZZ(7)-ZZ(5))
& + YY(5)*(ZZ(6)-ZZ(1)-ZZ(4)+ZZ(7))
& + YY(4)*(ZZ(1)-ZZ(3)-ZZ(7)+ZZ(5))
& + YY(3)*(ZZ(4)-ZZ(7)) + YY(1)*(ZZ(5)-ZZ(4)) ) / 12.
VOLUME = XX(1) * GR1 + XX(2) * GR2 + XX(3) * GR3 + XX(4) * GR4
& + XX(5) * GR5 + XX(6) * GR6 + XX(7) * GR7 + XX(8) * GR8
RETURN
ELSE IF (ITYPE .EQ. 13) THEN
C 4-node shell, ignore curvature
A1 = XX(1) - XX(3)
B1 = YY(1) - YY(3)
C1 = ZZ(1) - ZZ(3)
A2 = XX(2) - XX(4)
B2 = YY(2) - YY(4)
C2 = ZZ(2) - ZZ(4)
ACR = (B1 * C2) - (B2 * C1)
BCR = (A1 * C2) - (A2 * C1)
CCR = (A1 * B2) - (A2 * B1)
VOLUME = 0.5 * SQRT(ACR*ACR + BCR*BCR + CCR*CCR)
RETURN
ELSE IF (ITYPE .EQ. 6) THEN
C 4-node tet
C (process Key's 8-node tet the same way using first 4 nodes)
Y12 = YY(1) - YY(2)
Y13 = YY(1) - YY(3)
Y14 = YY(1) - YY(4)
Y24 = YY(2) - YY(4)
Y34 = YY(3) - YY(4)
Z12 = ZZ(1) - ZZ(2)
Z13 = ZZ(1) - ZZ(3)
Z14 = ZZ(1) - ZZ(4)
Z24 = ZZ(2) - ZZ(4)
Z34 = ZZ(3) - ZZ(4)
BX1 = (Y34*Z24 - Y24*Z34) / 6.0
BX2 = (Y13*Z14 - Y14*Z13) / 6.0
BX3 = (Y14*Z12 - Y12*Z14) / 6.0
BX4 = (Y12*Z13 - Y13*Z12) / 6.0
VOLUME = BX1*XX(1) + BX2*XX(2) + BX3*XX(3) + BX4*XX(4)
ELSE
CALL ERROR('VOL','ELEMENT TYPE',' ',ITYPE,
& 'NOT YET IMPLEMENTED',0,' ',' ',1)
END IF
RETURN
END