Finite Element Model

Overview

The Model class is designed to provide a convenient encapsulation of all objects which define an entire finite element model. This includes such information as element connectivity, node coordinates in Mesh, element and material properties in ElementProperty and MaterialProperty, load in LoadCase, restraint and initial condition cases in RestraintCase and InitialConditionCase, etc. It provides a single container for all other core objects required to describe a finite element model.

The functions associated with a Model object are the following.

Use setMesh() to register the Mesh and/or setMeshInterface() to register MeshInterface objects which define the element connectivity and associations and node coordinates. If a Mesh object is registered and a MeshInterface object is not registered, Model will internally create and register a MeshInterface object tied to the Mesh object. The Mesh or MeshInterface object currently registered with the Model object can be queried using getMesh() or getMeshInterface() respectively. The GlobalProperty object is used to define global properties. The Units object is used to define the units for physical quantities.

Node sets, element sets, element edge and face sets are entered into series of IdTranslator objects. A name associated with each set may be specified using the setName() function. The node and element indices (not user Id) are entered into the IdTranslator objects. The IdTranslator objects are, in turn, entered into HashTable objects with a user defined integer key. If there is a useful integer associated with the node or element set, this integer should be used as the HashTable key otherwise use keys starting from one. The HashTable objects of node set, element set, element edge and face set are registered in the Model object using setNodeSets(), setElementSets() and setElementEntitySets() respectively.

Element and material properties are entered into one or more ElementProperty and MaterialProperty objects respectively. There should be an ElementProperty object for each element property identifier and a MaterialProperty object for each material property identifier. The ElementProperty objects are then entered into a HashTable object using the element property identifier as a key. The MaterialProperty objects are also entered into a HashTable object using the associated material property identifier as a key. The two HashTable objects containing the ElementProperty and MaterialProperty objects are then registered in the Model object using setElementProperties() and setMaterialProperties().

Certain vector valued functions may be stored in one or more TableFunction objects. These functions may represent relationships such as temperature dependent material properties or load factor time functions. The TableFunction objects are entered into a HashTable object in a manner similar to ElementProperty and MaterialProperty objects using an integer curve identifier as key. The HashTable object containing the TableFunction objects is then registered in the Model object using setTableFunctions().

Analytical surfaces may be stored in one or more AnalyticSurface objects. There should be an AnalyticSurface object for each analytical surface in the model. Each AnalyticSurface object is stored into a HashTable with an integer key. This HashTable, in turn, is stored in the Model object using setAnalyticSurfaces().

Rigid bodies may be stored in one or more RigidBody objects. There should be a RigidBody object for each rigid body in the model. Each RigidBody object is stored into a HashTable with an integer key. This HashTable, in turn, is stored in the Model object using setRigidBodies().

Some element properties, such as shell thickness or offset vectors, may be specified on an element-by-element basis using ElementData objects. Each element property so defined is installed in a HashTable object using the property type as a key. Currently supported property types are as follows:

To obtain the thickness at all nodes of a given element, use the function getElementThickness(). Similarly, to obtain the offset vectors at each node of a given element, use the function getElementOffset().

A similar technique is used for load, restraint and initial condition cases. A LoadCase object is instanced for each load case and entered into a HashTable object using the load case identifier as a key. A RestraintCase object is instanced for each restraint case and entered into a HashTable object using the restraint case identifier as a key. A MultipointConstraintCase object is instanced for each multipoint constraint case and entered into a HashTable object using the multipoint constraint case identifier as a key. An InitialConditionCase object is instanced for each initial condition case and entered into a HashTable object using the initial condition case identifier as a key. Register these HashTable objects with the Model using setLoadCases(), setRestraintCases(), setMultipointConstraintCases() and setInitialConditionCases().

Contact pairs, or more generally interaction pairs, may be entered into sets of InteractionPair objects. The InteractionPair objects are entered into a HashTable object using an integer key. Register this HashTable object with the Model using setInteractionPairs().

The properties of solution steps are entered into a sequence of SolutionProperty objects. The sequence of SolutionProperty objects is entered into a List object in the order in which the solution steps are to be performed. The first solution step is given identifier 1 in the List object, the second step identifier 2, etc. Register this List object with the Model using setSolutionPropertiesList(). Any List object registered with the Model object can be queried using getSolutionPropertiesList().

The function deleteStorage() is provided as a convenient mechanism for deleting all objects set in the Model object. This includes all HashTable objects set and the objects they in turn contain, and all List objects set using getSolutionPropertiesList() and the objects they in turn contain.

The write() function is provided to write the contents of the model object to industry standard file formats. An example of such a format is ABAQUS input file or NASTRAN bulk data format:

Gap element property mapping

Gap element property mapping
Gap element ABAQUS NASTRAN
INITIAL_GAP   PGAP U0
PRELOAD_FORCE   PGAP F0
COMPRESSION_STIFFNESS (> 0) *SURFACE BEHAVIOR, PRESSURE-OVERCLOSURE=TABULAR PGAP KA
COMPRESSION_STIFFNESS (= 0) *SURFACE BEHAVIOR, PRESSURE-OVERCLOSURE=HARD  
TENSION_STIFFNESS   PGAP KB
TRANSVERSE_STIFFNESS   PGAP KT
STATIC_FRICTION_COEFFICIENT_Y_AXIS *FRICTION, ANISOTROPIC PGAP MU1
STATIC_FRICTION_COEFFICIENT_Z_AXIS (!= 0)   PGAP MU2 (TMAX = -1.)
STATIC_FRICTION_COEFFICIENT_Z_AXIS (!= 0)   PGAP MU2 (TMAX = 0.)
KINETIC_FRICTION_COEFFICIENT_Y_AXIS   ignored
KINETIC_FRICTION_COEFFICIENT_Z_AXIS   ignored
NO_SEPARATION *SURFACE BEHAVIOR, NO SEPARATION ignored
NO_SLIP *FRICTION, ROUGH ignored

If COMPRESSION_STIFFNESS > 0., then the INITIAL_GAP, PRELOAD_FORCE and TENSION_STIFFNESS properties are used to create a tabular pressure-overclosure definition under the *SURFACE BEHAVIOR keyword.

Note that the MASTER option does not exist for element constraints.

Class Members Descriptions

The currently available Model enumerations and functions are described in detail in this section.

class Model

Finite Element Model.

Public Types

enum class ElementDataType

Model element data properties.

Values:

enumerator THICKNESS

Thickness.

enumerator OFFSET

Nodal scalar offset.

enumerator NORMAL

Normal vector.

enumerator FIBER_BOTTOM

Location of shell bottom, usually for output.

enumerator FIBER_TOP

Location of shell top, usually for output.

enumerator ELEMENT_VECTOR

Element local system orientation vector.

enumerator MATERIAL_VECTOR

Material local system orientation vector.

enumerator END_A_VECTOR

End point A position or offset vector.

enumerator END_B_VECTOR

End point B position or offset vector.

enumerator OFFSET_VECTOR

Nodal offset vector.

Public Functions

ErrorCode getErrorCode()

Return the current ErrorCode of the Model object.

Returns: ErrorCode - The current error code, or NONE if no error.
Status setMesh(Mesh *mesh)

Set a pointer to a Mesh attribute object. By default, all finite element topology, connectivity, node coordinate and node and element association queries are made through the Mesh attribute object. If the MeshInterface object is registered, it is used by the write() function for basic finite model queries rather than the Mesh object.

See Also getMesh()

Parameters:mesh – Pointer to the Mesh object to be registered.
Returns:Status
Status getMesh(MeshPtr &mesh)

Get a pointer to a Mesh attribute object as an output argument.

See Also setMesh()

Parameters:mesh – The Mesh object registered.
Returns:Status
Status setUnits(Units *units)

Set a pointer to a Units attribute object. The Units object is useful for defining the units of physical quantities.

See Also getUnits()

Parameters:units – Pointer to the Units object to be registered.
Returns:Status
Status getUnits(UnitsPtr &units)

Get a pointer to a Units attribute object as an output argument.

See Also setUnits()

Parameters:units – The Units object registered.
Returns:Status
Status setGlobalProperties(GlobalProperty *properties)

Set a pointer to a GlobalProperty attribute object.

See Also getGlobalProperties()

Parameters:properties – Pointer to the GlobalProperty object to be registered.
Returns:Status
Status getGlobalProperties(GlobalPropertyPtr &properties)

Get a pointer to a GlobalProperty attribute object as an output argument.

See Also setGlobalProperties()

Parameters:properties – The GlobalProperty object registered.
Returns:Status
Status setCoordinateSystems(HashTable<CoordinateSystem> *coordinateSystems)

Set a pointer to a HashTable container object. The hashtable object must contain all CoordinateSystem objects required to describe the model.

See Also getCoordinateSystems()

Parameters:coordinateSystems – Pointer to the HashTable object to be registered.
Returns:Status
Status getCoordinateSystems(HashTablePtr<CoordinateSystem> &coordinateSystems)

Get as an output argument a pointer to the HashTable container that stores all CoordinateSystem objects.

See Also setCoordinateSystems()

Parameters:coordinateSystems – The HashTable object registered.
Returns:Status
Status setRestraintCases(HashTable<RestraintCase> *restraintCases)

Set a pointer to a HashTable container object. The hashtable object must contain all RestraintCase objects required to describe the model.

See Also getRestraintCases()

Parameters:restraintCases – Pointer to the HashTable object to be registered.
Returns:Status
Status getRestraintCases(HashTablePtr<RestraintCase> &restraintCases)

Get as an output argument a pointer to the HashTable container that stores all RestraintCase objects.

See Also setRestraintCases()

Parameters:restraintCases – The HashTable object registered.
Returns:Status
Status setMultipointConstraintCases(HashTable<MultipointConstraintCase> *multipointConstraintCases)

Set a pointer to a HashTable container object. The hashtable object must contain all MultipointConstraintCase objects required to describe the model.

See Also getMultipointConstraintCases()

Parameters:multipointConstraintCases – Pointer to the HashTable object to be registered.
Returns:Status
Status getMultipointConstraintCases(HashTablePtr<MultipointConstraintCase> &multipointConstraintCases)

Get as an output argument a pointer to the HashTable container that stores all MultipointConstraintCase objects.

See Also setMultipointConstraintCases()

Parameters:multipointConstraintCases – The HashTable object registered.
Returns:Status
Status setLoadCases(HashTable<LoadCase> *loadCases)

Set a pointer to a HashTable container object. The hashtable object must contain all LoadCase objects required to describe the model.

See Also getLoadCases()

Parameters:loadCases – Pointer to the HashTable object to be registered.
Returns:Status
Status getLoadCases(HashTablePtr<LoadCase> &loadCases)

Get as an output argument a pointer to the HashTable container that stores all LoadCase objects.

See Also setLoadCases()

Parameters:loadCases – The HashTable object registered.
Returns:Status
Status setInitialConditionCases(HashTable<InitialConditionCase> *initialConditionCases)

Set a pointer to a HashTable container object. The hashtable object must contain all InitialConditionCase objects required to describe the model.

See Also getInitialConditionCases()

Parameters:initialConditionCases – Pointer to the HashTable object to be registered.
Returns:Status
Status getInitialConditionCases(HashTablePtr<InitialConditionCase> &initialConditionCases)

Get as an output argument a pointer to the HashTable container that stores all InitialConditionCase objects.

See Also setInitialConditionCases()

Parameters:initialConditionCases – The HashTable object registered.
Returns:Status
Status setMaterialProperties(HashTable<MaterialProperty> *materialProperties)

Set a pointer to a HashTable container object. The hashtable object must contain all MaterialProperty objects required to describe the model.

See Also getMaterialProperties()

Parameters:materialProperties – Pointer to the HashTable object to be registered.
Returns:Status
Status getMaterialProperties(HashTablePtr<MaterialProperty> &materialProperties)

Get as an output argument a pointer to the HashTable container that stores all MaterialProperty objects.

See Also setMaterialProperties()

Parameters:materialProperties – The HashTable object registered.
Returns:Status
Status setElementProperties(HashTable<ElementProperty> *elementProperties)

Set a pointer to a HashTable container object. The hashtable object must contain all ElementProperty objects required to describe the model.

See Also getElementProperties()

Parameters:elementProperties – Pointer to the HashTable object to be registered.
Returns:Status
Status getElementProperties(HashTablePtr<ElementProperty> &elementProperties)

Get as an output argument a pointer to the HashTable container that stores all ElementProperty objects.

See Also setElementProperties()

Parameters:elementProperties – The HashTable object registered.
Returns:Status
Status setTableFunctions(HashTable<TableFunction> *tableFunctions)

Set a pointer to a HashTable container object. The hashtable object must contain all TableFunction objects required to describe the model.

See Also getRestraintCases()

Parameters:tableFunctions – Pointer to the HashTable object to be registered.
Returns:Status
Status getTableFunctions(HashTablePtr<TableFunction> &tableFunctions)

Get as an output argument a pointer to the HashTable container that stores all TableFunction objects.

See Also setTableFunctions()

Parameters:tableFunctions – The HashTable object registered.
Returns:Status
Status setElementData(HashTable<ElementData> *elementData)

Set a pointer to a HashTable container object. The hashtable object must contain all ElementData objects required to describe the model. The list of element data types available are defined in: ElementDataType

See Also getElementData()

Parameters:elementData – Pointer to the HashTable object to be registered.
Returns:Status
Status getElementData(HashTablePtr<ElementData> &elementData)

Get as an output argument a pointer to the HashTable container that stores all ElementData objects.

See Also setElementData()

Parameters:elementData – The HashTable object registered.
Returns:Status
Status setNodeSets(HashTable<IdTranslator> *nodeSets)

Set a pointer to a HashTable container object. The hashtable object must contain all node set IdTranslator objects required to describe the model.

See Also getNodeSets()

Parameters:nodeSets – Pointer to the HashTable object to be registered.
Returns:Status
Status getNodeSets(HashTablePtr<IdTranslator> &nodeSets)

Get as an output argument a pointer to the HashTable container that stores all node set IdTranslator objects.

See Also setNodeSets()

Parameters:nodeSets – The HashTable object registered.
Returns:Status
Status setElementSets(HashTable<IdTranslator> *elementSets)

Set a pointer to a HashTable container object. The hashtable object must contain all element set IdTranslator objects required to describe the model.

See Also getElementSets()

Parameters:elementSets – Pointer to the HashTable object to be registered.
Returns:Status
Status getElementSets(HashTablePtr<IdTranslator> &elementSets)

Get as an output argument a pointer to the HashTable container that stores all element set IdTranslator objects.

See Also setElementSets()

Parameters:elementSets – The HashTable object registered.
Returns:Status
Status setElementEntitySets(HashTable<IdTranslator> *elementEntitySets)

Set a pointer to a HashTable container object. The hashtable object must contain all element entity set IdTranslator objects required to describe the model.

See Also getElementEntitySets()

Parameters:elementEntitySets – Pointer to the HashTable object to be registered.
Returns:Status
Status getElementEntitySets(HashTablePtr<IdTranslator> &elementEntitySets)

Get as an output argument a pointer to the HashTable container that stores all element entity set IdTranslator objects.

See Also setElementEntitySets()

Parameters:elementEntitySets – The HashTable object registered.
Returns:Status
Status setInteractionPairs(HashTable<InteractionPair> *interactionPairs)

Set a pointer to a HashTable container object. The hashtable object must contain all InteractionPair objects required to describe the model.

See Also getInteractionPairs()

Parameters:InteractionPairs – Pointer to the HashTable object to be registered.
Returns:Status
Status getInteractionPairs(HashTablePtr<InteractionPair> &interactionPairs)

Get as an output argument a pointer to the HashTable container that stores all InteractionPair objects.

See Also setInteractionPairs()

Parameters:InteractionPairs – The HashTable object registered.
Returns:Status
Status setRigidBodies(HashTable<RigidBody> *rigidBodies)

Set a pointer to a HashTable container object. The hashtable object must contain all RigidBody objects required to describe the model.

See Also getRigidBodies()

Parameters:rigidBodies – Pointer to the HashTable object to be registered.
Returns:Status
Status getRigidBodies(HashTablePtr<RigidBody> &rigidBodies)

Get as an output argument a pointer to the HashTable container that stores all RigidBody objects.

See Also setRigidBodies()

Parameters:rigidBodies – The HashTable object registered.
Returns:Status
Status setAnalyticSurfaces(HashTable<AnalyticSurface> *analyticSurfaces)

Set a pointer to a HashTable container object. The hashtable object must contain all AnalyticSurface objects required to describe the model.

See Also getAnalyticSurfaces()

Parameters:analyticSurfaces – Pointer to the HashTable object to be registered.
Returns:Status
Status getAnalyticSurfaces(HashTablePtr<AnalyticSurface> &analyticSurfaces)

Get as an output argument a pointer to the HashTable container that stores all AnalyticSurface objects.

See Also setAnalyticSurfaces()

Parameters:analyticSurfaces – The HashTable object registered.
Returns:Status
Status setSolutionPropertiesList(List<SolutionProperty> *propertyList)

Set a pointer to a List object. The list object must contain all solution property SolutionProperty objects, with a positional index corresponding to the order in which the solution steps must be performed.

See Also getSolutionPropertiesList()

Parameters:propertyList – Pointer to the List object to be registered.
Returns:Status
Status getSolutionPropertiesList(ListPtr<SolutionProperty> &propertyList)

Get as an output argument a pointer to a List object.

See Also setSolutionPropertiesList()

Parameters:propertyList – The List object registered.
Returns:Status
Status setMeshInterface(MeshInterface *functions)

Set a pointer to the MeshInterface attribute object.

See Also getMeshInterface()

Parameters:functions – Pointer to the MeshInterface object to be registered.
Returns:Status
Status getMeshInterface(MeshInterfacePtr &functions)

Get as an output argument a pointer to the MeshInterface attribute object.

See Also setMeshInterface()

Parameters:functions – The MeshInterface object registered.
Returns:Status
Status setSourceType(FileFormat libraryType)

Set the data source library type.

Parameters:libraryType FileFormat
Returns:Status
Status getSourceType(FileFormat *libraryType)

Get the data source library type.

See Also setSourceType() .

Parameters:libraryType FileFormat
Returns:Status
Status write(FileFormat libraryType, const char *path)

Write Model to industry standard file formats. If a MeshInterface object is set in Model using setMesh() then it is used for basic finite element model queries rather than the Mesh object. As a general rule, only those objects registered in the Model object are written. For example, if only load cases are to be written then only the HashTable of LoadCase objects and a MeshInterface object should be set in Model.

The model entities supported at any one time may vary. Please contact Tech Soft 3D for details.

Errors
  • FILE is generated if the file can not be opened.
  • NULLOBJECT is generated if a required object has not been set.

Parameters:
Returns:

Status

Status deleteStorage()

Delete all objects which have been “Set” in the Model object. This includes all attribute objects set using setMesh() , setUnits() , setGlobalProperties() and setMeshInterface() , all HashTable objects set using setCoordinateSystems() , setRestraintCases() , setMultipointConstraintCases() , setLoadCases() , setInitialConditionCases() , setMaterialProperties() , setElementProperties() , setTableFunctions() , setElementData() , setNodeSets() , setElementSets() , setElementEntitySets() , setInteractionPairs() , setRigidBodies() or setAnalyticSurfaces() and all List objects set using setSolutionPropertiesList() and the objects they may in turn contain.

Status print()

Print the content of the Model object.

Returns:Status
Status printSummary()

Print only a summary of the Model object’s contents.

Returns:Status
Status getElementThickness(int id, double thickness[])

Get the thicknesses at all nodes of the element id. The thickness is computed by first testing for an ElementData object stored under the THICKNESS key in the HashTable set using setElementData() . If a non-zero thickness is not defined then a SHELL type ElementProperty object is tested for thickness using the element property identifier. If no thickness are defined they are all returned as zero.

Parameters:
  • id – Element index
  • thickness[out] Vector of element nodal thicknesses
Returns:

Status

Status getElementOffset(int id, double offset[])

Get the offsets at all nodes of the element id. The offset is computed by first testing for an ElementData object stored under the OFFSET key in the HashTable set using setElementData() . If a non-zero offset is not defined then a SHELL type ElementProperty object is tested for offset using the element property identifier. If no offsets are defined they are all returned as zero.

Parameters:
  • id – Element index
  • offset[out] Vector of element nodal offsets
Returns:

Status