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.
81 lines
2.5 KiB
81 lines
2.5 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=======================================================================
|
||
|
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
|