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.
 
 
 
 
 
 

160 lines
4.7 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 NEWXYZ (XN, YN, ZN, NUMNP, NDIM, A)
C=======================================================================
C --*** NEWXYZ *** (GEND) Modify coordinates
C -- Written by Amy Gilkey - revised 05/09/88
C -- Modified by Greg Sjaardema - 02/06/89
C --
C --NEWXYZ modifies the coordinate array for the database.
C --
C --Parameters:
C -- XN, YN, ZN - OUT - the coordinates
C -- NUMNP - IN - Number of nodes
C -- NDIM - IN - Number of spatial dimensions
C -- A - IN - Base array for memory allocation
C --
C --Common Variables:
C -- Uses XOFFS, YOFFS, ZOFFS, SPLOFF of /XYZOFF/
C -- Uses ROT3D, ROTMAT of /XYZROT/
include 'gp_xyzoff.blk'
include 'gp_xyzrot.blk'
include 'gp_xyzmir.blk'
include 'gp_xyzero.blk'
include 'gp_xyzscl.blk'
include 'gp_splxyz.blk'
REAL XN(numnp), YN(numnp), ZN(numnp)
REAL A(*)
C --Rotate 3D mesh, if needed
IF (ROT3D .AND. NDIM .EQ. 3) THEN
DO 10 JNP = 1, NUMNP
X = XN(JNP) - ROTCEN(1)
Y = YN(JNP) - ROTCEN(2)
Z = ZN(JNP) - ROTCEN(3)
XN(JNP) = X*ROTMAT(1,1) + Y*ROTMAT(2,1) + Z*ROTMAT(3,1)
& + ROTCEN(1)
YN(JNP) = X*ROTMAT(1,2) + Y*ROTMAT(2,2) + Z*ROTMAT(3,2)
& + ROTCEN(2)
ZN(JNP) = X*ROTMAT(1,3) + Y*ROTMAT(2,3) + Z*ROTMAT(3,3)
& + ROTCEN(3)
10 CONTINUE
ELSE IF (ROT3D .AND. NDIM .EQ. 2) THEN
DO 20 JNP = 1, NUMNP
X = XN(JNP) - ROTCEN(1)
Y = YN(JNP) - ROTCEN(2)
XN(JNP) = X*ROTMAT(1,1) + Y*ROTMAT(2,1) + ROTCEN(1)
YN(JNP) = X*ROTMAT(1,2) + Y*ROTMAT(2,2) + ROTCEN(2)
20 CONTINUE
END IF
C --Add offset, if any, to coordinates
IF (SPLOFF) THEN
C ... Finish processing in sub-routine
CALL SPOFF (XN, YN, ZN, NSPL, A(KZSPL), A(KXSPL), A(KXSPL2),
& A(KYSPL), A(KYSPL2), SLTOP, SLBOT, NUMNP, NDIM)
ELSE
IF (XOFFS .NE. 0.0) THEN
DO 30 JNP = 1, NUMNP
XN(JNP) = XN(JNP) + XOFFS
30 CONTINUE
END IF
IF (YOFFS .NE. 0.0) THEN
DO 40 JNP = 1, NUMNP
YN(JNP) = YN(JNP) + YOFFS
40 CONTINUE
END IF
IF (ZOFFS .NE. 0.0 .AND. NDIM .EQ. 3) THEN
DO 50 JNP = 1, NUMNP
ZN(JNP) = ZN(JNP) + ZOFFS
50 CONTINUE
END IF
END IF
C --Mirror coordinates if any specified
IF (XMIRR .LT. 0.) THEN
DO 60 JNP = 1, NUMNP
XN(JNP) = -XN(JNP)
60 CONTINUE
END IF
IF (YMIRR .LT. 0.) THEN
DO 70 JNP = 1, NUMNP
YN(JNP) = -YN(JNP)
70 CONTINUE
END IF
IF (ZMIRR .LT. 0. .AND. NDIM .EQ. 3) THEN
DO 80 JNP = 1, NUMNP
ZN(JNP) = -ZN(JNP)
80 CONTINUE
END IF
C --Randomize coordinates if any specified
IDUM = 1
IF (XRAND .NE. 0.) THEN
DO 61 JNP = 1, NUMNP
XN(JNP) = (2.0*RAN1(IDUM)-1.0) * XRAND + XN(JNP)
61 CONTINUE
END IF
IF (YRAND .NE. 0.) THEN
DO 71 JNP = 1, NUMNP
YN(JNP) = (2.0*RAN1(IDUM)-1.0) * YRAND + YN(JNP)
71 CONTINUE
END IF
IF (ZRAND .NE. 0. .AND. NDIM .EQ. 3) THEN
DO 81 JNP = 1, NUMNP
ZN(JNP) = (2.0*RAN1(IDUM)-1.0) * ZRAND + ZN(JNP)
81 CONTINUE
END IF
C --- Zero coordinates if *ZERO is not equal to zero
IF (XZERO .NE. 0.) THEN
DO 90 JNP = 1, NUMNP
IF (ABS(XN(JNP)) .LE. XZERO) XN(JNP) = 0.0
90 CONTINUE
END IF
IF (YZERO .NE. 0.) THEN
DO 100 JNP = 1, NUMNP
IF (ABS(YN(JNP)) .LE. YZERO) YN(JNP) = 0.0
100 CONTINUE
END IF
IF (ZZERO .NE. 0. .AND. NDIM .EQ. 3) THEN
DO 110 JNP = 1, NUMNP
IF (ABS(ZN(JNP)) .LE. ZZERO) ZN(JNP) = 0.0
110 CONTINUE
END IF
C --- Scale the coordinates if any Scaled
IF (XSCAL .NE. 1.) THEN
DO 120 JNP = 1, NUMNP
XN(JNP) = XSCAL * XN(JNP)
120 CONTINUE
END IF
IF (YSCAL .NE. 1.) THEN
DO 130 JNP = 1, NUMNP
YN(JNP) = YSCAL * YN(JNP)
130 CONTINUE
END IF
IF (ZSCAL .NE. 1. .AND. NDIM .EQ. 3) THEN
DO 140 JNP = 1, NUMNP
ZN(JNP) = ZSCAL * ZN(JNP)
140 CONTINUE
END IF
RETURN
END