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.
 
 
 
 
 
 

80 lines
2.5 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 GAUSSF (IS3DIM, NLNKF, LINKF1, XN, YN, ZN,
& XGAUSS, YGAUSS, ZGAUSS)
C=======================================================================
C --*** GAUSSF *** (DETOUR) Calculate gauss point for a face
C -- Written by Amy Gilkey - revised 10/20/87
C --
C --GAUSSF calculates the 4 element gauss points given the coordinates
C --of the 4 nodes.
C --
C --Parameters:
C -- IS3DIM - IN - true iff 3D versus 2D
C -- NLNKF - IN - the number of nodes per face; must be 4
C -- LINKF1 - IN - the connectivity for the face
C -- XN, YN, ZN - IN - the nodal coordinates
C -- XGAUSS, YGAUSS, ZGAUSS - OUT - the gauss point coordinates
PARAMETER (S = .577350269189626)
LOGICAL IS3DIM
INTEGER LINKF1(NLNKF)
REAL XN(*), YN(*), ZN(*)
REAL XGAUSS(4), YGAUSS(4), ZGAUSS(4)
REAL WT(4,4)
LOGICAL FIRST
SAVE FIRST, WT
C --FIRST - true iff first time in routine
C --WT - the gauss point constants
DATA FIRST /.TRUE./
IF (FIRST) THEN
FIRST = .FALSE.
C --Determine gauss point constants
DO 100 N = 1, 4
IF (N .EQ. 1) THEN
SI = -S
TI = -S
ELSE IF (N .EQ. 2) THEN
SI = +S
TI = -S
ELSE IF (N .EQ. 3) THEN
SI = +S
TI = +S
ELSE IF (N .EQ. 4) THEN
SI = -S
TI = +S
END IF
WT(1,N) = .25 * (1-SI) * (1-TI)
WT(2,N) = .25 * (1+SI) * (1-TI)
WT(3,N) = .25 * (1+SI) * (1+TI)
WT(4,N) = .25 * (1-SI) * (1+TI)
100 CONTINUE
END IF
C --Determine gauss point coordinates
DO 110 N = 1, 4
XGAUSS(N) = WT(1,N)*XN(LINKF1(1)) + WT(2,N)*XN(LINKF1(2))
& + WT(3,N)*XN(LINKF1(3)) + WT(4,N)*XN(LINKF1(4))
YGAUSS(N) = WT(1,N)*YN(LINKF1(1)) + WT(2,N)*YN(LINKF1(2))
& + WT(3,N)*YN(LINKF1(3)) + WT(4,N)*YN(LINKF1(4))
IF (IS3DIM) THEN
ZGAUSS(N) = WT(1,N)*ZN(LINKF1(1)) + WT(2,N)*ZN(LINKF1(2))
& + WT(3,N)*ZN(LINKF1(3)) + WT(4,N)*ZN(LINKF1(4))
END IF
110 CONTINUE
RETURN
END