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.
103 lines
3.3 KiB
103 lines
3.3 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 SPTXYZ (XN, YN, XN3, YN3, ZN3, IXNP, NRNP, ZCORD,
|
|
& NSPL, ZS, XS, XS2, YS, YS2, SCR )
|
|
C=======================================================================
|
|
|
|
C --*** SPLTYZ *** (GEN3D) Calculate 3D coordinates for Spline translation
|
|
C -- Written by Greg Sjaardema - 02/06/89
|
|
C --
|
|
C --Parameters:
|
|
C -- XN, YN - IN - the 2D coordinates, destroyed
|
|
C -- XN3, YN3, ZN3 - OUT - the 3D coordinates
|
|
C -- IXNP - IN - the new index for each node
|
|
C -- NRNP - IN - the number of new nodes generated for each node
|
|
C -- ZCORD - SCRATCH - size = NNREPL, holds z coordinate for transformations
|
|
C -- NSPL - IN - number of spline points
|
|
C -- ZS, XS, YS - IN - spline data points
|
|
C -- XS2, YS2 - SCRATCH - temporary storage for spline data
|
|
C -- SCR - SCRATCH - temporary storage for spoine data
|
|
C --
|
|
C --Common Variables:
|
|
C -- Uses NDIM, NUMNP of /DBNUMS/
|
|
C -- Uses NDIM3, NUMNP3 of /DBNUM3/
|
|
C -- Uses DOTRAN, NNREPL, DIM3, NRTRAN, D3TRAN, ZGRAD,
|
|
C -- CENTER, NUMCOL, NUMROW of /PARAMS/
|
|
|
|
INCLUDE 'g3_dbnums.blk'
|
|
INCLUDE 'g3_dbnum3.blk'
|
|
INCLUDE 'g3_params.blk'
|
|
|
|
PARAMETER (BINGO = 1.0E38)
|
|
PARAMETER (TOLER = 1.0E-8)
|
|
|
|
REAL XN(NUMNP), YN(NUMNP),
|
|
& XN3(NUMNP3), YN3(NUMNP3), ZN3(NUMNP3)
|
|
INTEGER IXNP(*), NRNP(*)
|
|
REAL ZCORD(NNREPL)
|
|
REAL ZS(NSPL), XS(NSPL), XS2(NSPL), YS(NSPL), YS2(NSPL)
|
|
REAL SCR(NSPL), SLLFT(2), SLRGT(2)
|
|
|
|
C ... CALCULATE THE THICKNESS INCREMENT FOR EACH TRANSLATION
|
|
|
|
IBLK = 0
|
|
ZTOT = 0.0
|
|
10 CONTINUE
|
|
IBLK = IBLK + 1
|
|
IF (NRTRAN(IBLK) .GT. 0) THEN
|
|
ZTOT = ZTOT + D3TRAN(IBLK)
|
|
IF (IBLK .LT. MAXINT) GO TO 10
|
|
END IF
|
|
|
|
NXTNR = 1
|
|
IBLK = 0
|
|
ZEND = 0.0
|
|
|
|
20 CONTINUE
|
|
IBLK = IBLK + 1
|
|
IF (NRTRAN(IBLK) .GT. 0) THEN
|
|
ZBEG = ZEND
|
|
ZEND = ZBEG + D3TRAN(IBLK)
|
|
CALL INIGRD (ZBEG/ZTOT, ZEND/ZTOT, ZGRAD(IBLK),
|
|
* NRTRAN(IBLK), NRTRAN(IBLK)+1, ZCORD(NXTNR) )
|
|
NXTNR = NXTNR + NRTRAN(IBLK)
|
|
IF (IBLK .LT. MAXINT) GO TO 20
|
|
END IF
|
|
|
|
CALL SPLINE (ZS, XS, NSPL, SLLFT(1), SLRGT(1), XS2, SCR)
|
|
CALL SPLINE (ZS, YS, NSPL, SLLFT(2), SLRGT(2), YS2, SCR)
|
|
|
|
ZMAX = ZS(NSPL)
|
|
|
|
KLO = 1
|
|
|
|
DO 80 NR = 1, NNREPL
|
|
Z = ZCORD(NR) * ZMAX
|
|
CALL HUNT (ZS, NSPL, Z, KLO)
|
|
KLO = MIN(NSPL-1, MAX(1, KLO))
|
|
|
|
H = ZS(KLO+1) - ZS(KLO)
|
|
A = (ZS(KLO+1)-Z)/H
|
|
B = (Z-ZS(KLO))/H
|
|
|
|
XOFF = A * XS(KLO) + B * XS(KLO+1) +
|
|
* ((A**3-A) * XS2(KLO)+(B**3-B)*XS2(KLO+1)) * (H**2) / 6.
|
|
|
|
YOFF = A * YS(KLO) + B * YS(KLO+1) +
|
|
* ((A**3-A) * YS2(KLO)+(B**3-B)*YS2(KLO+1)) * (H**2) / 6.
|
|
|
|
DO 70 INP = 1, NUMNP
|
|
JNP = IXNP(INP) - 1
|
|
XN3(JNP+NR) = XN(INP) + XOFF
|
|
YN3(JNP+NR) = YN(INP) + YOFF
|
|
ZN3(JNP+NR) = Z
|
|
70 CONTINUE
|
|
80 CONTINUE
|
|
|
|
RETURN
|
|
END
|
|
|