Next: Subroutine UIMATR
Up: FEMGEN Geometry User Routines
Previous: Subroutine UIINIT
SUBROUTINE UILINE(IWHAT,INDEX,NAME,ISTYPE,
1 LREAL,RDATA,LINTG,IDATA,LPTR,IPTR,
2 IERROR)
C U I L I N E
C ===========
C********************************************************************
C
C --- PURPOSE : INTERFACE TO LINE ENTITY IN FEMGEN DATA BASE
C
C --- IN : IWHAT : ACTION REQUESTED ON ENTITY
C : 1 : CREATE
C : 2 : FIND
C : 3 : REPLACE
C : 4 : READ
C : 5 : DELETE
C
C --- IN/OUT : INDEX : POINTER TO INSTANCE
C : NAME : ENTITY NAME
C : ISTYPE : ENTITY SUB-TYPE
C : LREAL : NUMBER OF REALS
C : RDATA : REAL DATA
C : LINTG : NUMBER OF INTEGERS
C : IDATA : INTEGER DATA
C : LPTR : NUMBER OF POINTERS
C : IPTR : POINTER DATA
C
C --- OUT : IERROR : 0 : OK
C : 1 : ILLEGAL ACTION REQUESTED
C : 2 : INCORRECT POINTER TO ENTITY
C : 3 : ILLEGAL SUB-TYPE
C : 5 : INCORRECT DATA
C
C********************************************************************
C
C --- DATA : THE DATA PASSED TO OR OUTPUT FROM THIS ROUTINE IS
C DEPENDENT ON THE RELEVANT SUB-TYPE.
C
C ISTYPE = 1 : STRAIGHT
C : LINTG = 5
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : LPTR = 7
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C
C ISTYPE = 2 : ARC
C : LINTG = 5
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : LPTR = 8
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C : IPTR(8) = INDEX TO CENTRE POINT INSTANCE
C
C ISTYPE = 3 : SHAPE INTERSECTION
C : LINTG = 5
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : LPTR = 10
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C : IPTR(8) = INDEX TO HELP POINT INSTANCE
C : IPTR(9:10) = INDICES TO SHAPE INSTANCES
C
C ISTYPE = 4 : POLYLINE
C : LINTG = 3
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : LPTR = 9
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C : IPTR(8:9) = INDICES TO FIRST AND LAST NODE INSTANCES
C
C ISTYPE = 5 : PIECE-WISE CUBIC FIT (SEE NOTE 4)
C : LINTG = 7
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : IDATA(6) = NUMBER OF INTERNAL SPLINE POINTS (IN)
C : IDATA(7) = CODE FOR SPLINE TO STRAIGHT/ARC CONVERSION (IN)
C : LREAL = M = NUMBER OF INTERNAL COORDINATES (IN)
C : RDATA = (X,Y,Z COORDINATES OF POINTS) (IN)
C : LPTR = 8
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C : IPTR(8) = INDEX TO SET INSTANCE (OUT)
C
C ISTYPE = 6 : PARAMETRIC CUBIC SPLINE CURVE (NOTES 1 AND 4)
C : LINTG = 7
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : IDATA(6) = NUMBER OF SPLINE POINTS TO BE CREATED
C : IDATA(7) = CODE FOR SPLINE TO STRAIGHT/ARC CONVERSION (IN)
C : LREAL = 14
C : RDATA = 4*(X,Y,Z COEFFICIENTS)
C : RDATA = START VALUE OF PARAMETER
C : RDATA = END VALUE OF PARAMETER
C : LPTR = 7
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C
C ISTYPE = 7 : RATIONAL B-SPLINE CURVE (SEE NOTES 2 AND 4)
C : LINTG = 9
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : IDATA(6) = NUMBER OF SPLINE POINTS TO BE CREATED
C : IDATA(7) = UPPER INDEX OF SUM (K)
C : IDATA(8) = DEGREE OF BASE FUNCTION (M)
C : IDATA(9) = CODE FOR SPLINE TO STRAIGHT/ARC CONVERSION (IN)
C : LREAL = 5*K + M + 6
C : RDATA = (K+M+2)*(VALUES OF KNOT SEQUENCES)
C : RDATA = (K+1)*(WEIGHTS)
C : RDATA = (K+1)*(X,Y,Z COORDINATES OF CONTROL POINTS)
C : RDATA = START VALUE OF PARAMETER
C : RDATA = END VALUE OF PARAMETER
C : LPTR = 7
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C
C ISTYPE = 8 : TANGENT CUBIC CURVE (SEE NOTES 3 AND 4)
C : LINTG = 7
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : IDATA(6) = NUMBER OF SPLINE POINTS TO BE CREATED
C : IDATA(7) = CODE FOR SPLINE TO STRAIGHT/ARC CONVERSION (IN)
C : LREAL = 14
C : RDATA = X,Y,Z COORDINATES OF START POINT
C : RDATA = X,Y,Z COORDINATES OF END POINT
C : RDATA = X,Y,Z TANGENT VECTOR OF START POINT
C : RDATA = X,Y,Z TANGENT VECTOR OF END POINT
C : RDATA = START VALUE OF PARAMETER
C : RDATA = END VALUE OF PARAMETER
C : LPTR = 7
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C
C
C ISTYPE = 9 : CURVE ON EXISTING NURB CURVE SHAPE
C : LINTG = 6
C : IDATA(1) = ELEMENT TYPE
C : IDATA(2) = ELEMENT VARIANT
C : IDATA(3) = ELEMENT GROUP
C : IDATA(4) = NUMBER OF DIVISIONS
C : IDATA(5) = END BIAS
C : IDATA(6) = NUMBER OF SPLINE POINTS TO BE CREATED
C : LREAL = 2
C : RDATA(1) = START VALUE OF PARAMETER
C : RDATA(2) = END VALUE OF PARAMETER
C : LPTR = 8
C : IPTR(1:2) = INDICES TO END POINT INSTANCES
C : IPTR(3) = INDEX TO FIRST ELEMENT INSTANCE
C : IPTR(4) = INDEX TO LAST ELEMENT INSTANCE
C : IPTR(5) = INDEX TO COORDINATE SYSTEM INSTANCE
C : IPTR(6) = INDEX TO MATERIAL INSTANCE
C : IPTR(7) = INDEX TO PHYSICAL INSTANCE
C : IPTR(8) = INDEX TO SHAPE INSTANCE
C
C********************************************************************
C
C --- NOTE 1 : PARAMETRIC SPLINE CURVE ENTITY IS A SEQUENCE OF
C PARAMETRIC POLYNOMIAL SEGMENTS GIVEN BY :
C
C X(u) = AX(i) + BX(i)*s + CX(i)*s*s + DX(i)*s*s*s
C
C T(i) <= u <= T(i+1), i = 1,...,N
C s = u - T(i)
C
C --- NOTE 2 : A RATIONAL B-SPLINE CURVE IS EXPRESSED PARAMETRICALLY
C IN THE FORM :
C
C SUM(i=0,K)(W(i)*X(i)*bi(t))
C XOUT(t) = ---------------------------
C SUM(i=0,K)(W(i)*bi(t))
C
C bi are the B-Spline basis functions defined from
C their degree M and the non-decreasing knot sequence
C T(-M:K+1).
C
C VSTRT <= t <= VEND where
C T(0) <= VSTRT < VEND <= T(K-M+1)
C
C There is a recursive definition of
C
C (t-T(i))*bi,k-1(t) (T(i+k)-t)*bi+1,k-1(t)
C bi,k(t) = ------------------ + ----------------------
C T(i+k-1)-T(i) T(i+k)-T(i+1)
C
C where
C
C bi,1(t) = 1 if T(i) <= t <= T(i+1)
C 0 if t < T(i) or t > T(i+1)
C
C --- NOTE 3 : TANGENTIAL FORM OF CUBIC
C
C X(u) = AX*(1-s*s*(3-2*s)) + BX*s*s*(3-2*s)
C + CX*s*(s-1)*(s-1) + DX*s*s*(s-1)
C
C USTRT <= u <= UEND where
C s = u - USTRT
C
C --- NOTE 4 : CODE FOR CONVERSION OF SPLINE LINES
C
C 0 => No Conversion at all
C 1 => Convert to Straight Lines
C 10 => Convert to Arcs
C 11 => Convert to Straight and Arcs.
C
C********************************************************************
C
C --- PARAMETERS
C
REAL RDATA(*)
INTEGER IWHAT,INDEX,ISTYPE,LREAL,LINTG,LPTR,IERROR
INTEGER IDATA(*),IPTR(*)
CHARACTER*(*) NAME
C
C********************************************************************