next up previous
Next: Subroutine UIMATR Up: FEMGEN Geometry User Routines Previous: Subroutine UIINIT

Subroutine UILINE

      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********************************************************************



Femsys Limited
8/18/1999