next up previous contents
Next: Customised Analysis Environments Up: FG-User-Routines Previous: Array Size Considerations

FEMGEN User Routines

  UANTYPSubroutineGet analysis type name

CALL UANTYP(FULNAM,ABBNAM)


\begin{parameters}
\param{FULNAM}{Character*50}{Out}{Full analysis type name}
\param{ABBNAM}{Character*10}{Out}{Abbreviated analysis type name}\end{parameters}

This routine returns both the full and abbreviated names of the analysis type for the current model, or blank character strings if none specified. This routine can be used to partition the list of elements in 'userEL' or the list of materials, physical properties and loads in 'userIQ'.

UBDRY3SubroutineGet a boundary condition

CALL UBDRY3(INO,ANAME,ICOTYP,IPART1,IDOF1,IPART2,IDOF2,VALUE,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Boundary condition sequence number (...
 ... number\\ 2 & Boundary condition does not exist\\ \end{tabular}}\end{parameters}

Where degrees of freedom have been released the indicator -1 is used in array IDOF1. For types 5 through 8 routines URBEAM, URBODY, UCONCT, and UEQUA should be used to determine the complex node connections for these constraints. Prescribed constraints are not returned by this routine, use routine UPRESC for these prescribed values. Degrees of freedom have fixed meanings for freedoms 1-10, degrees of freedom 11 to 16 can be programmed to mean anything using the FEMGV resource file femsys.ini (see chapter 3).

UBODY2SubroutineGet body data

CALL UBODY2(INO,ANAME,IBOD,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Body sequence number (see USIZE)}
\p...
 ... body sequence number\\ 2 & Body does not exist\\ \end{tabular}}\end{parameters}

The first and last element numbers include the element number offset NEBAS.

UCLOSSubroutineTo close a database file opened with USTRT2

CALL UCLOS

This routine is not needed for internal interfaces. In this case, FEMGEN performs all file closing functions.

UCOCYLSubroutineCalculate the local cartesian system at a given point

CALL UCOCYL(ISYSTY,AXESIN,P1,P2,AXES)


\begin{parameters}
\param{ISYSTY}{Integer}{In}{Type of system}
\param{}{}{}{\beg...
 ...milar to AXESIN but for local cartesian system at coordinate P2}\end{parameters}

This routine takes as input, a local axis system definition, and the coordinates of a point at which the local axes are needed. The output is in the form of a local system unique to that point. This routine is used in conjunction with UCSYS2 for spherical and cylindrical systems. For rectangular systems, the local system is the same at all points in space and so array AXESIN is simply copied to array AXES.

UCONCTSubroutineGet Node connections for MPC RCONNECT

CALL UCONCT(ICO,IWORK,IWDIM,IDOF,IERR)


\begin{parameters}
\param{ICO}{Integer}{In}{Boundary condition sequence number (...
 ...determine connection \\ 9 & IWORK is too small \\ \end{tabular}}\end{parameters}

For MPC RCONNECT FEMGEN will first attempt to evaluate an edge-edge connection involving 1-1 or 1-2 node connections and is commonly used for mesh refinement. Where the parts involved for the constraint are not two edges the routine will attempt to evaluate a number of 1-1 connections based on a proximity algorithm.

Node pairs are output as Slave_node, Nmastr, mastr1-n and for this routine Nmastr will be equal to 1 or 2. The list is terminated by a slave node ID of zero.

When the connection involves a large number of nodes, a warning message is issued as the process may be slow.

UCONE3SubroutineGet the external constraint for a single node

CALL UCONE3(INOD,ICONST,ISYSP,IERR)


\begin{parameters}
\param{INOD}{Integer}{In}{Node number}
\param{ICONST}{Integer...
 ...{tabular}
{ll}
0 & OK\\ 1 & Invalid node number\\ \end{tabular}}\end{parameters}

This routine is used to determine which external degrees of freedom are constrained on a given node. Where a node lies on the boundary between two parts, each having an external constraint definition, the constrained degrees of freedom at boundary nodes are automatically summed. Elastic and General constraints can only be accessed using UBDRY3, internal constraints can be accessed in a similar way to UCONE3 via routine UCONS3.

UCONS3SubroutineGet the summed constraints for a single node

CALL UCONS3(INOD,ICONST,ISYSP,IESUPP,IERR)


\begin{parameters}
\param{INOD}{Integer}{In}{Node number}
\param{ICONST}{Integer...
 ...{tabular}
{ll}
0 & OK\\ 1 & Invalid node number\\ \end{tabular}}\end{parameters}

This routine is used to determine which degrees of freedom are constrained on a given node. Where a node lies on the boundary between two parts, each having a constraint definition, the constrained degrees of freedom at boundary nodes are automatically summed. Elastic and General constraints can only be accessed using UBDRY3, Externals can be accessed in a similar way to UCONS3 via routine UCONE3. Degrees of freedom have fixed meanings for freedoms 1-10, degrees of freedom 11 to 16 can be programmed to mean anything using the FEMGV resource file femsys.ini (see chapter 3).

UCSYS2SubroutineGet a nodal coordinate system and the nodes to which it applies

CALL UCSYS2(ICOSYS,ISYSTY,AXES,IP1,IP2,IP3,NSEL,IWORK,IWDIM,IERR)


\begin{parameters}
\param{ICOSYS}{Integer}{In}{Local axis system sequence number...
 ...part\\ 9 & IWORK is too small to hold all nodes\\ \end{tabular}}\end{parameters}

If parameter IWDIM is set to zero, the check on array size will be omitted. The local axis system at a particular point in space may be determined using routine UCOCYL.

UCURVTSubroutineGet time curve information

CALL UCURVT(ITC,IEVAL,TNAME,ITTYPE,SMOOTH,ICYCLE,IWORK,IWDIM,
WORK,IWDIM2,NVAL,IERR)


\begin{parameters}
\param{ITC}{Integer}{In}{Time curve sequence number (see USIZ...
 ...4 & WORK is too small \\ 9 & IWORK is too small\\ \end{tabular}}\end{parameters}

This routine will normally be used with IEVAL set to 1 so that the time curve will always produce a list of point pairs. For those analysis packages that support functions the function option might prove useful in reducing the size of input files.

UECENTSubroutineCalculate the coordinates of an element centroid

CALL UECENT(IFGELT,IELEM,COORD,IERR)


\begin{parameters}
\param{IFGELT}{Integer}{In}{FEMGEN element type number (see a...
 ...{}{}{}{\begin{tabular}
{ll}
0 & OK\\ 1 & Error \\ \end{tabular}}\end{parameters}

This routine takes as input the element node list and returns the coordinates of the element centroid. This routine is useful for calculating the coordinates of a point for input to ULEVAL.

UEFACESubroutineGet the face identifier of an element adjacent to a loaded part

CALL UEFACE(IEL,IELTYP,IPATY,IPANO,IFATYP,NNEF,
IWORK,IWDIM,IWOFF,IFACE,IERR)


\begin{parameters}
\param{IEL}{Integer}{In}{Element sequence number}
\param{IELT...
 ... & Face does not exist\\ 9 & IWORK is too small\\ \end{tabular}}\end{parameters}

This routine should be used for elemental load when element faces are loaded. Routine UFACG2 only returns the face identifier of the first element found on the loaded part and this routine ensures that, for each element of the loaded part, the element face identifier is found. Array IWORK is used for temporary storage and the offset IWOFF enables any current storage in IWORK not to be overwritten (only IWORK space from IWOFF+1 to IWDIM is used by UEFACE).

UELEMSubroutineGet the nodes on an element

CALL UELEM(IE,IELEM,NNODE,IERR)


\begin{parameters}
\param{IE}{Integer}{In}{Element number}
\param{IELEM}{Integer...
 ...bular}
{ll}
0 & OK\\ 1 & Invalid element number\\ \end{tabular}}\end{parameters}

The node ordering for the element will need to be changed by the interface to ensure compatibility with the analysis package. The FEMGEN node numbering conventions are illustrated in appendix C of the FEMGV User Manual. The element number given as input to this routine should include the element number offset NEBAS, the node numbers returned include the node number offset NNBAS.

UELEMGSubroutineTo select elements on a geometric part

CALL UELEMG(IPATY,IPANO,NE0,NE1,IELT,IVAR,IMID,IPID,IELGR,IERR)


\begin{parameters}
\param{IPATY}{Integer}{In}{Type of part}
\param{}{}{}{\begin{...
 ...t was a combined line\\ 4 & No elements on part\\ \end{tabular}}\end{parameters}

Combined lines are not supported by this routine, and elements on such geometries should be accessed via the constituent lines. Parameters NE0 and NE1 include the element number offset NEBAS (see routine USIZE).
FEMGEN has an option for applying a loading condition to the whole model and routine ULOAD4 will indicate this by returning a part type of zero. Where an analysis package supports this concept the information may be used directly, otherwise routine UELEMG should be used to get NE0 and NE1 to load the elements explicitly.
Note that in all cases NE0 and NE1 only give the minimum and maximum element numbers on the part and some element numbers between these values may not exist. Routine UELEM should be used to check that a particular element within the range does exist.

UELSETSubroutineTo select the elements on all parts within a set

CALL UELSET(IPANO,NELO,IWORK,IWDIM,IERR)


\begin{parameters}
\param{IPANO}{Integer}{In}{Set sequence number (see USIZE)}
\...
 ... IWORK is too small to hold all element numbers\\ \end{tabular}}\end{parameters}

The element numbers are sorted into ascending order, and include the element number offset (NEBAS) from USIZE.

UEQUASubroutineGet Node connections for MPC EQUA

CALL UEQUA(ICO,IWORK,IWDIM,NSLAVE,IDOFS,COEF,NMASTR,
IDOFM,COEFFM,RHS,IERR)


\begin{parameters}
% latex2html id marker 671
\param{ICO}{Integer}{In}{Boundary ...
 ...int is not EQUA SLAVE\\ 9 & IWORK is too small \\ \end{tabular}}\end{parameters}

Master node groups are output as Nmastr, mastr1-n. The list is terminated by Nmastr = 0

UFACESubroutineGet loaded face on a single element

CALL UFACE(INELEM,NNODE,IELTYP,NNEF,IPNE,IFACE,JAC,IERR)


\begin{parameters}
% latex2html id marker 728
\param{INELEM}{Integer array size ...
 ...r}
{ll}
0 & OK\\ 2 & Loaded face does not exist\\ \end{tabular}}\end{parameters}

Where no loaded face is found IFACE is set to -9999, and IERR to 2. For 2D elements where all nodes are loaded, IFACE is set to zero, and IPNE is not used. For interface elements (IP11,IL22,IL32,IL33,IL44,IL55, IS33,IS44,IS84,IS66,IS88), the two faces are defined as: Face 1 is the bottom surface and contains node 1, and Face 2 is the top surface; any other case is not a valid face and IFACE is set to 0.


IFACE BE2 BE3
0 Normal to element Normal to element
1 End 1 1
2 End 2 2
IFACE QU4 QU8 QU12
0 Normal to element Normal to element Normal to element
1 Side 1-2 1-2-3 1-2-3-4
2 Side 2-3 3-4-5 4-5-6-7
3 Side 3-4 5-6-7 7-8-9-10
4 Side 4-1 7-8-1 10-11-12-1
IFACE TR3 TR6 TR9 TR15
0 Normal to element Normal to element Normal to element Normal to element
1 Side 1-2 1-2-3 1-2-3-4 1-2-3-4-5
2 Side 2-3 3-4-5 4-5-6-7 5-6-7-8-9
3 Side 3-1 5-6-1 7-8-9-1 9-10-11-12-1
IFACE HE8 HE20/HE27 HE32
1 Face 1-2-3-4 1-9-2-10-3-11-4-12 1-13-17-21-32-31-30-20-16-10-11-12
2 Face 5-6-7-8 5-13-6-14-7-15-8-16 4-5-6-7-15-19-27-26-25-24-18-14
3 Face 1-2-6-5 1-9-2-18-6-13-5-17 1-2-3-4-14-18-24-23-22-21-17-13
4 Face 2-3-7-6 2-10-3-19-7-14-6-18 7-8-9-10-16-20-30-29-28-27-19-15
5 Face 3-4-8-7 3-11-4-20-8-15-7-19 1-12-11-10-9-8-7-6-5-4-3-2
6 Face 4-1-5-8 4-12-1-17-5-16-8-20 21-22-23-24-25-26-27-28-29-30-31-32
IFACE PE6 PE15 PE24
1 Face 1-2-3 1-7-2-8-3-9 1-9-8-7-6-5-4-3-2
2 Face 4-5-6 4-10-5-11-6-12 16-17-18-19-20-21-22-23-24
3 Face 1-2-5-4 1-7-2-14-5-10-4-13 4-5-6-7-12-15-22-21-20-19-14-11
4 Face 2-3-6-5 2-8-3-15-6-11-5-14 1-10-13-16-24-23-22-15-12-7-8-9
5 Face 3-1-4-6 3-9-1-13-4-12-6-15 1-2-3-4-11-14-19-18-17-16-13-10
IFACE TE4 TE10 TE16
1 Face 1-2-3 1-5-2-6-3-7 4-5-6-7-12-15-16-14-11
2 Face 1-2-4 1-5-2-9-4-8 1-10-13-16-15-12-7-8-9
3 Face 2-3-4 2-6-3-10-4-9 1-2-3-4-11-14-16-13-10
4 Face 3-1-4 3-7-1-8-4-10 1-9-8-7-6-5-4-3-2
Table 2.1: Face identifier definition

UFACG2SubroutineGet loaded elements on or adjacent to a loaded part

CALL UFACG2(IPATY,IPANO,IPATYE,IPANOE,
IPATY2,IPANO2,NNEF,IPNE,IFACE,JAC,NSEL,IWORK,IWDIM,IERR)


\begin{parameters}
\param{IPATY}{Integer}{In}{Type of part}
\param{}{}{}{\begin{...
 ... 9 & IWORK is too small to hold element numbers\\ \end{tabular}}\end{parameters}

The routine can be given the part with elements to assist in cases where ambiguity might exist (i.e. where the loaded part is adjacent to 2 higher order parts). The element numbers are not sorted, and include the element number offset (NEBAS) from USIZE. Where no loaded face is found IFACE is set to -9999, and IERR to 2. For 2D elements where all nodes are loaded, IFACE is set to zero, and IPNE is not used.

UFCENTSubroutineCalculate the coordinates of an element face centroid

CALL UFCENT(IFGELT,IELEM,IPNE,NNEF,IFATYP,COORD,IERR)


\begin{parameters}
\param{IFGELT}{Integer}{In}{FEMGEN element type number (see a...
 ...{}{}{}{\begin{tabular}
{ll}
0 & OK\\ 1 & Error \\ \end{tabular}}\end{parameters}

This routine takes as input various element and face information and returns the coordinates of the face centroid. This routine is useful for calculating the coordinates of a point for input to ULEVAL.

UFGELTSubroutineGet an element name and variant

CALL UFGELT(IFGELT,IELVAR,ELNAME,IERR)


\begin{parameters}
\param{IFGELT}{Integer}{In}{FEMGEN element type number (see a...
 ...}
{ll}
0 & OK\\ 1 & Invalid element type number\\ \end{tabular}}\end{parameters}

Get a FEMGEN element name. Should be replaced by a FE-program specific routine to get the element-name which corresponds to the given FEMGEN element type and element variant. Returns FEMGEN element name in position 1 of ELNAME, and element variant in position 2. Both are stored as A4 packed characters.

UGELEMSubroutineTo get information on an element

CALL UGELEM(IE,IPATY,IPANO,IELT,IVAR,IMID,IPID,IELGR,IERR)


\begin{parameters}
\param{IE}{Integer}{In}{Element number}
\param{IPATY}{Integer...
 ...bular}
{ll}
0 & OK\\ 1 & Element does not exist\\ \end{tabular}}\end{parameters}

An element number (including the element number offset (see NCONST(18) in USIZE)) is input, information on the element is output.

UICON2SubroutineGet detailed initial condition data from the database

CALL UICON2(INO,ANAME,AICTYP,IAPPL,ISC,ILM,ICS,IPATY,
IPANO,IPATYE,IPANOE,NVALS,WORK,IWDIM,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Load sequence number(see USIZE)}
\pa...
 ... too small to hold all initial condition values\\ \end{tabular}}\end{parameters}

This routine may be used with any environment. Subroutine ULODE2 should be used to get the elements for element-wise initial conditions, where INO loops from IPATY to IPANO. If IPATYE and IPANOE are returned as known these will be used in ULODE2 to resolve ambiguity. The part, given by IPATY and IPANO, should be an edge of the part given by IPATYE and IPANOE. Note that where the ALL option has been used in FEMGEN to specify which parts are referenced, IPATY will be returned as zero for both nodal and element-wise initial conditions. Where an analysis package has an option to apply initial conditions to all nodes/elements, this information may be used directly. For analysis packages without such a facility routines UNODEG, and UELEMG may be used to get all nodes/elements in the model.

Parameters ISC, ILM, and ICS may be used in conjunction with ULEVAL to evaluate an initial condition at various points in space. These points will typically be nodes, element centroids or element face centres. Routines UFCENT and UECENT may be useful for determining the coordinates of element face centres and element centroids.

UIDNT2SubroutineDetermine the type and number of an entity from its name

CALL UIDNT2(ANAME,ITY,INO,IERR)


\begin{parameters}
\param{ANAME}{Character*8}{In}{Entity name}
\param{ITY}{Integ...
 ...abular}
{ll}
0 & OK\\ 2 & Entity does not exist\\ \end{tabular}}\end{parameters}

ULEVALSubroutineEvaluate a load at a point in space.

CALL ULEVAL(IFIRST,ILM,ISC,ICS,COORD,IPATY,IPANO,ISTAT,
VALUE,AXESO,IWORK,IWDIM,IERR)


\begin{parameters}
\param{IFIRST}{Integer}{In/Out}{Initialisation flag (set to 0...
 ...nition\\ 9 & WORK is too small to elavuate load\\ \end{tabular}}\end{parameters}

This routine is used in conjunction with ULOAD4, and ULODE2. Given the coordinate of any point in space, a load mask, space curve, and/or local system identifier this routine will determine whether the point is in or out of the load mask, give the value of the space curve at the point and a 3*3 transformation which may be used to transform vector loads originally specified in the global system.

The use of IWORK is necessary for evaluating space curve data and can usually be very small (dimension 40). However where large space curve lists have been imported into FEMGEN more of IWORK will be needed. The part types IPATY and IPANO are needed only for the evaluation of parametric space curves and may be taken from the output of ULOAD4 directly or via ULODE2 for element-wise loads.

The initialisation flag IFIRST is used to reduce the amount of calculation required for each point. On the first call to the routine key information is calculated and saved for use in subsequent calls. IFIRST should be re-set to zero for each load for nodal loads or for each call to ULODE2 for element-wise loads.

Routines UFCENT and UECENT may be useful for determining the coordinates of element face centres and element centroids.

Care must be taken not to destroy any data in IWORK which is currently being used to store node and element lists. It is recommended that the last 10000 places in IWORK be passed to this routine in order to avoid this problem

ULINE2SubroutineGet line data

CALL ULINE2(INO,ANAME,ILIN,RLENG,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Line sequence number (see USIZE)}
\p...
 ...Line name}
\param{ILIN}{Integer Array size 16}{Out}{Single line}\end{parameters}

Single Line Combined line
1 Line relative length NOT USED
2 Sequence number of start point Sequence number of start point
3 Sequence number of end point Sequence number of end point
4 Number of divisions indicator (IDIV) Number of divisions indicator (IDIV)
5 100*Shape1+Shape2 for intersection lines, or node1 NOT USED
6 centre, or pdef, or node2 Number of lines in combined line
7 NOT USED NOT USED
8 First element number Sequence number of line 1
9 Last element number Sequence number of line 2
10 Local coordinate system sequence number Sequence number of line 3
11 Material sequence number Sequence number of line 4
12 Physical property sequence number NOT USED
13 Element group number NOT USED
14 Type of line Type of line
1 Straight
2 Arc
3 Cut
4 Polyline
5 Spline
6 Curve
99 Manual
9 Line Combination 9 Line Combination
15 FEMGEN element type number NOT USED
16 Element variant number NOT USED


\begin{parameters}
\param{RLENG}{Real}{Out}{Line relative length}
\param{IERR}{I...
 ...& Problem with arc\\ 5 & Problem with line type\\ \end{tabular}}\end{parameters}

The first and last element numbers include the element number offset NEBAS.

ULISTSubroutineGet a list of sets

CALL ULIST(INO,NUMB,IWORK,IWDIM,NPART,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{List sequence number}
\param{NUMB}{I...
 ...st\\ 3 & List is empty\\ 9 & IWORK is too small\\ \end{tabular}}\end{parameters}

Lists of sets are only used for regions and prisms to store the sets that define holes. These sets are loops of lines or surfaces having a sense in which they are ordered (clockwise or anti-clockwise with regard to a particular direction). The reference to a set in the list IWORK is negative if its sense is not as required. The sequence number of the list INO is given by routines USURF2 for regions and UBODY2 for prisms.

ULOAD4SubroutineGet detailed load data from the database

CALL ULOAD4(INO,ANAME,ALOTYP,LCAS,IAPPL,ITC,ISC,ILM,ICS,
IPATY,IPANO,IPATYE,IPANOE,NVALS,WORK,IWDIM,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Load sequence number (see USIZE)}
\p...
 ...\ 9 & WORK is too small to hold all load values\\ \end{tabular}}\end{parameters}

This routine may be used with any environment. Subroutine ULODE2 should be used to get the loaded elements for element loads, where INO loops from IPATY to IPANO, if IPATYE and IPANOE are returned as known these will be used in ULODE2 to resolve ambiguity. The loaded part, given by IPATY and IPANO, should be an edge of the part given by IPATYE and IPANOE. Note that where the ALL option has been used in FEMGEN to specify which parts are loaded, IPATY will be returned as zero for both nodal and element-wise loads. Where an analysis package has an option to load all nodes/elements, this information may be used directly. For analysis packages without such a facility routines UNODEG, and UELEMG may be used to get all nodes/elements in the model.

Parameter ITC is the identification number of a time curve attached to the load. This may be used as an amplitude reference and the time curve data itself accessed via routine UCURVT. Parameters ISC, ILM, and ICS may be used in conjunction with ULEVAL to evaluate a load at various points in space. These points will typically be nodes, element centroids or element face centres. Routines UFCENT and UECENT may be useful for determining the coordinates of element face centres and element centroids.

ULODE2SubroutineGet expanded element load data

CALL ULODE2(INO,IPATY,IPANO,IPATYE,IPANOE,IFATYP,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Pointer from ULOAD4}
\param{IPATY}{I...
 ...tatus}
\param{}{}{}{\begin{tabular}
{ll}
0 & OK\\ \end{tabular}}\end{parameters}

This routine is used together with ULOAD4. It will always work if parameter INO is taken from the pointers IPATY and IPANO. In cases where a load has been applied to the whole model this routine may be used but will simply produce values of zero for IPATY and IPANO.

ULOADMSubroutineGet primary information for a moving load

CALL ULOADM(INO,IWORK,IWDIM,ANAME,ALOTYP,LNAME,LCAS,ILANE,
IPATY,IPANO,NSTPOS,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Load sequence number (see USIZE)}
\p...
 ...\ 16 & Start point not consistent with loadpath\\ \end{tabular}}\end{parameters}

This routine provides primary information on a moving load. Array IWORK is used in the case where the moving load is defined by a loadpath (see FEMGV User Manual) to temporarily store the line(s) that constitute the loadpath. A moving load represents a series of stopping positions for the group of loads it refers to, and each stopping position corresponds to a loadcase. The range of loadcases is determined by LCAS, the first loadcase number, and NSTPOS, the total number of stopping positions.

Once a valid moving load has been found parameter INO may be used as input to routine USETL to get an ordered list of elements (and faces) and nodes on the affected geometry. Then by looping over the number of stopping positions routine ULOADT can be called to determine the values of the moving load for each stopping position.

Refer to Appendix D for an example of a moving load file.

ULOADTSubroutineGet a moving load definition at a specific stopping position

CALL ULOADT(INO,IPOS,IWORK,IWDIM,RWORK,IWDIM2,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Load sequence number (see USIZE)}
\p...
 ...ning:- Angle greater than 5 degrees in loadpath\\ \end{tabular}}\end{parameters}

This routine returns a transformed moving load definition for the requested stopping position. The interface programmer must determine the spatial relationship between these transformed moving load definitions and the element edges generated by USETL.

Array IWORK is used in the case where the moving load is defined by a loadpath (see FEMGV User Manual) to temporarily store the line(s) that constitute the loadpath. The recommended dimension for array RWORK is 10000.

UMAT3SubroutineGet material property data from the database

CALL UMAT3(IMID,ANAME,AMATYP,IMTYPE,NVALS,WORK,IWDIM,IERR)


\begin{parameters}
\param{IMID}{Integer}{In}{Material sequence number (see USIZE...
 ...& WORK is too small to hold all material values\\ \end{tabular}}\end{parameters}

This routine may be used with any environment. Material properties data is stored in array WORK in a form defined using 'userIQ'. For external materials (IMTYPE = 2) array work will contain a number of text strings which must be decoded; subroutine UMATE is supplied for this purpose.

UMATESubroutineDecode material property names

CALL UMATE(WORK,IWDIM,MAXNAM,NNAMES,LNAMES,CNAMES,IERR)


\begin{parameters}
\param{WORK}{Real Array}{In}{Output from UMAT3 when IMTYPE = ...
 ...begin{tabular}
{ll}
0 & OK\\ 1 & No names found\\ \end{tabular}}\end{parameters}

This routine may be used to extract a list of names (MAXNAM being the maximum allowed) from the work array output of UMAT3. This routine is provided because the names and number of names are packed into array work.

These names can be used in any way to reference an external material file or database. Function KFVOPN described in chapter 5 should be used to open any additional files.

Parameter MAXNAM was added to UMATE at version 2.1 of the FEMGEN user routines, dimension of LNAMES and CNAMES was previously set to 4.

UNAMG2SubroutineGet a name

CALL UNAMG2(ITY,INO,ANAME,IERR)


\begin{parameters}
\param{ITY}{Integer}{In}{Entity Type}
\param{}{}{}{\begin{tab...
 ...mber or type number\\ 2 & Entity does not exist\\ \end{tabular}}\end{parameters}

UNODESubroutineGet node coordinates

CALL UNODE(INO,COOR,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Node number}
\param{COOR}{Real Array...
 ...{tabular}
{ll}
0 & OK\\ 1 & Invalid node number\\ \end{tabular}}\end{parameters}

The coordinates returned by this routine will always be expressed in the global cartesian system, regardless of the system used to define a model.The node number must include the node number offset NNBAS.

UNODEGSubroutineTo select nodes on a geometric part

CALL UNODEG(IPATY,IPANO,NSEL,IWORK,IWDIM,IERR)


\begin{parameters}
\param{IPATY}{Integer}{In}{Type of part}
\param{}{}{}{\begin{...
 ...9 & IWORK is too small to hold all node numbers\\ \end{tabular}}\end{parameters}

The node numbers are not sorted, and include the node number offset (NNBAS) from USIZE. For IPATY=0 all nodes in the model are placed directly into IWORK. In such cases a speed improvement may be possible by omitting the call to UNODEG and simply looping on the number of nodes in the model directly.

UPHYS4SubroutineGet physical property data from the database

CALL UPHYS4(IPID,ANAME,APHTYP,IPTYPE,IFORI,IFOFF,NVALS,WORK,IWDIM,IERR)


\begin{parameters}
\param{IPID}{Integer}{In}{Physical property sequence number (...
 ...& WORK is too small to hold all property values\\ \end{tabular}}\end{parameters}

This routine may be used with any environment. Physical properties data is stored in array WORK in a form defined using 'userIQ'. For external properties (IPTYPE = 2) array work will contain a number of text strings which must be decoded; subroutine UPHYSE is supplied for this purpose.

UPHYSESubroutineDecode physical property names

CALL UPHYSE(WORK,IWDIM,MAXNAM,NNAMES,LNAMES,CNAMES,IERR)


\begin{parameters}
\param{WORK}{Real Array}{In}{Output from UPHYS3 when IPTYPE =...
 ...begin{tabular}
{ll}
0 & OK\\ 1 & No names found\\ \end{tabular}}\end{parameters}

This routine may be used to extract a list of names (MAXNAM being the maximum allowed) from the work array output of UPHYS3. This routine is provided because the names and number of names are packed into array work.

These names can be used in any way to reference an external physical file or database. Function KFVOPN described in chapter 5 should be used to open any additional files.

Parameter MAXNAM was added to UPHYSE at version 2.1 of the FEMGEN user routines, dimension of LNAMES and CNAMES was previously set to 4.

UPNT2SubroutineGet point data

CALL UPNT2(INO,ANAME,PNTS,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Point sequence number (see USIZE)}
\...
 ...oint sequence number\\ 2 & Point does not exist\\ \end{tabular}}\end{parameters}

The point coordinates are expressed in the global cartesian coordinate system regardless of the system used to define the point.

UPRESCSubroutineGet a prescribed degree of freedom

CALL UPRESC(ICO,ANAME,IPATY,IPANO,IDOF,VALUE,LCAS,IERR)


\begin{parameters}
\param{ICO}{Integer}{In}{Constraint sequence number (see USIZ...
 ...s not exist \\ 2 & Constraint is not prescribe \\ \end{tabular}}\end{parameters}

This routine is used to get a prescribed degree of freedom for a constraint. The nodes to which it applies may be determined using UNODEG. This routine should be used for prescribing degrees of freedom where the analysis package does not support a single point constraint definition or where a zero definition is not sensible (e.g. for temperatures). Prescribed values will normally hold for an entire analysis but where it is desired to vary these conditions for a series of loadcases the LCAS parameter is provided to enable this level of control. Degrees of freedom have fixed meanings for freedoms 1-11, degrees of freedom 12 to 16 can be programmed to mean anything using the FEMGV resource file femsys.ini (see chapter 3).

URBEAMSubroutineGet Node connections for MPC RBEAM

CALL URBEAM(ICO,IWORK,IWDIM,IDOF,IERR)


\begin{parameters}
\param{ICO}{Integer}{In}{Boundary condition sequence number (...
 ...straint is not RBEAM \\ 9 & IWORK is too small \\ \end{tabular}}\end{parameters}

MPC RBEAM nodes are connected as a many to one relationship (like a bicycle wheel). Node pairs are output as Slave_node, Nmastr, mastr1-n and for this routine Nmastr will always be equal to 1. The list is terminated by a slave node ID of zero.

URBODYSubroutineGet Node connections for MPC RBODY

CALL URBODY(ICO,IWORK,IWDIM,IM,IDOFM,COEF,NSLAVE,IDOFS,IERR)


\begin{parameters}
\param{ICO}{Integer}{In}{Boundary condition sequence number (...
 ... is not RBODY MASTER \\ 9 & IWORK is too small \\ \end{tabular}}\end{parameters}

For MPC RBODY the slave node groups are output as Nslave, slave1-n. The list is terminated by Nslave = 0

USET2SubroutineGet the part numbers within a set

CALL USET2(INO,IWANT,ANAME,IWORK,IWDIM,NPART,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Set sequence number (see USIZE)}
\pa...
 ...9 & IWORK is too small to hold all part numbers\\ \end{tabular}}\end{parameters}

USETLSubroutineGet an ordered list of elements on loaded geometry

CALL USETL(INO,IWORK,IWDIM,NELEMS,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Valid moving load sequence number (s...
 ...op in loaded geometry \\ 9 & IWORK is too small\\ \end{tabular}}\end{parameters}

This routine should be used for loads which are validated by routine ULOADM. The routine returns an ordered list of elements on the lines which make up the loaded geometry. The elements in this list should be used in conjunction with the moving load definitions from ULOADT in order to determine which elements are affected by the moving load.

USHPE2SubroutineGet shape data

CALL USHPE2(INO,ANAME,ISHTY,KPNTS,RADS,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Shape sequence number (see USIZE)}
\...
 ...NTS}{Integer Array Size 5}{Out}{Defining point sequence numbers}\end{parameters}

If plane then
1 origin point or coordinate system (if type 11)
2 x direction point (type 1 only)
3 y direction point (type 1 only)

If sphere then If cylinder then If cone then
1 origin point origin point origin point
2 axis direction point axis direction point

If nurb curve then If nurb surface then
1 Upper index (number of control points - 1) (K) Upper index in first parametric direction
(number of control points - 1) (K1)
2 Degree of basis functions (M) Upper index in second parametric direction (K2)
3 Type: (as for nurb surface) Degree of basis functions in first direction (M1)
4 Degree of basis functions in second direction (M2)
5 Type:- 1 : uniform
:- 2 : non-uniform (with knots)
:- 3 : rational (with knots and weights)

If intersection curve If box then
1 first shape origin point (types 301,311,321)
2 second shape x-direction point (type 301) or diagonal point (type 311)
3 y-direction point (type 301)
4 z-direction point (type 301)
5 Coordinate system (types 311,321,331)


\begin{parameters}
\param{RADS}{Real Array}{Out}{Defining radii}\end{parameters}

If plane then
1 x component of normal (if type 11)
2 y component of normal (type 11)
3 z component of normal (type 11)
4 normal distance to origin (type 11)

If sphere then If cylinder then If cone then
1 radius radius radius at origin point
2 length (type 23) radius at axis direction point
3 offset (type 23) length (type 24)
4 offset (type 24)

If nurb curve then If nurb surface then
1 (K+M+2)*(values of knot sequences) (K1+M1+2)*(values of knot sequences first direction)
(K+1)*(weights) (K2+M2+2)*(values of knot sequences second direction)
(K+1)*(x,y,z coordinates of control points) (K1+1)*(K2+1)*(weights)
start value of parameter (K1+1)*(K2+1)*(x,y,z coordinates of control points)
end value of parameter start value of parameter in first direction
end value of parameter in first direction
start value of parameter in second direction
end value of parameter in second direction

If intersection curve If box then
1 not defined x origin (types 321,331)
2 y origin (types 321,331)
3 z origin (types 321,331)
4 x length (types 321,331)
5 y length (types 321,331)
6 z length (types 321,331)


\begin{parameters}
\param{IERR}{Integer}{Out}{Return Status}
\param{}{}{}{\begin...
 ...hape sequence number\\ 2 & Shape does not exist\\ \end{tabular}}\end{parameters}

Shape types include:

Real array RADS can potentially be very large if nurb curves or nurb surfaces are present in the model.

USIZESubroutineGet structure size data

CALL USIZE(NCONST)


\begin{parameters}
\param{NCONST}{Integer Array Size 20}{Out}{Vector with size p...
 ... element groups\\ 20 & Maximum load-case number\\ \end{tabular}}\end{parameters}

The maximum numbers output by this routine do not take into account any deleted entities. This is determined later on in subsequent routines. The numbers output by this routine thus indicate the range of entity numbers over which to search when scanning the database.

USTRT2SubroutineOpen a database

CALL USTRT2(FILNAM,IWORK,IWDIM,IERR)


\begin{parameters}
\param{FILNAM}{Character*79}{In}{Full FEMGEN model database n...
 ...\ 9 & IWORK is too small to initialise database\\ \end{tabular}}\end{parameters}

The full file name including extension should be passed to this routine. The file name is case sensitive. This routine is not needed for internal interfaces. In this case, FEMGEN performs all file opening and naming functions.

Channel numbers: FEMGV will perform its own file management and it is assumed that the pre-connected channel numbers for terminal I/O are available. Any additional channel numbers required by the user should be obtained using function KFVOPN after the call to USTRT2 has been made.

USURF2SubroutineGet surface data

CALL USURF2(INO,ANAME,ISUR,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Surface sequence number (see USIZE)}...
 ...ce sequence number\\ 2 & Surface does not exist\\ \end{tabular}}\end{parameters}

The first and last element numbers include the element number offset NEBAS. ISHPE and ITRF are respectively the shape sequence number and the transformation sequence number used to define the surface.

UTITL2SubroutineGet model description

CALL UTITL2(TNAME)


\begin{parameters}
\param{TNAME}{Character*240}{Out}{Model Title} \end{parameters}

Returns the model description or blank if none entered. This routine replaces UTITLE which was limited to a 20 character title.

UTRANSubroutineGet transformation data

CALL UTRAN(INO,ANAME,ITRTY,KPNTS,RDATA,IERR)


\begin{parameters}
\param{INO}{Integer}{In}{Transformation sequence number} 
\pa...
 ...TS}{Integer Array size 4}{Out}{Defining point sequence numbers} \end{parameters}

If translation then If rotation then If mirror or scale then
1 from point origin point origin point origin point origin point
2 to point axis direction point from point axis direction point axis direction point
3 to point from point
3 to point


\begin{parameters}
\param{RDATA}{Real Array size 3}{Out}{Defining real parameters} \end{parameters}

If translation then If rotation then If mirror then If scale then
1 x component angle not defined axial scale
2 y component radial scale
3 z component


\begin{parameters}
\param{IERR}{Integer}{Out}{Return Status}
\param{}{}{}{\begin...
 ...{ll}
0 & OK\\ 2 & Transformation does not exist\\ \end{tabular}}\end{parameters}


next up previous contents
Next: Customised Analysis Environments Up: FG-User-Routines Previous: Array Size Considerations

Femsys Limited
8/18/1999