# Parts and Instances

The Parts and Instances functionality can be used to combine independently created substructures (or, parts) into a single model.

This feature allows greater flexibility in the creation of a finite element model. By following a few simple numbering requirements, you can define independent substructures which in turn can be easily combined into a final bigger model using simple translational and rotational transformations. Explicit instancing of parts can be achieved, as explained in the Instances section. This functionality is available for all analysis solution sequences and is currently not supported for optimization runs. OptiStruct-Multibody Dynamics (OS-MBD) and Geometric Nonlinear Analysis are not supported.

## Motivation

There are various advantages to defining a large finite element model as a combination of substructures or parts:
1. Model complexity is reduced as the structure is segregated into manageable substructures which are interconnected using simple transformations.
2. Individual part modules can be locally updated without having to make cascading edits to the entire structure.
3. Each substructure can be independently developed in a modular environment and later assembled into a single structure. This allows various departments working on a project to focus on independent modules, while following a few simple numbering requirements.

## Numbering Requirements

In this implementation, specific ID control for grid points and elements (including rigid elements) is not required. Refer to ID Resolution Guidelines for a detailed explanation of part numbering and how this influences the various other data entries in the model. The following simple numbering requirements should be enforced for any solver deck containing multiple parts:

1. Entities which are part specific, like grid points and elements, are numbered by part based local numbering.
2. Global entities such as properties, materials, loads and boundary conditions are defined in the global numbering system.
3. The individual parts forming the total structure can be combined without any changes in format if the numbering requirements (1) and (2) are met.

## Parts

A part can be visualized as an independent entity which is connected to a global structure during assembly (The global structure is also considered to be a part).

Each part can be defined as a section of the entire finite element model that is used for a specific purpose. For example, a door of an automobile can be defined as a part and multiple instances of this part can be instantiated (refer to Instances for a detailed explanation of part instancing) to save time during modeling.

### Definition

A part is included in the global structure between BEGIN and END Bulk Data Entries potentially using the INCLUDE entry. The INCLUDE entry accepts a string that references the file name (filename.fem) of a specific part. Parts are defined as separate solver decks and could be included within the same working directory. Multiple INCLUDE entries can be used within a single set of BEGIN and END entries to add multiple sections of a single part (refer to Instances for a detailed explanation of part instancing). A part can also be split between separate BEGIN and END entries with the same part name.

### Format

BEGIN and END Bulk Data Entries mark the start and end of the definition of a part in the global structure. A part is defined as a separate file which is included in the global structure using the INCLUDE Bulk Data Entry (The entire solver deck of the part can also be inserted between the BEGIN and END entries, instead of using the INCLUDE entry).

The format used to include a part in a global structure is as follows:
BEGIN, FEMODEL, name INCLUDE "filename.fem" END, FEMODEL, name

The second field of the BEGIN entry should be set to FEMODEL and the third field should contain the name of the part. This part name will be used to define fully qualified references to local entries within the part from anywhere in the model. All part names in the model should be unique. Part names are not case sensitive and should start with a letter. They can contain letters, digits, and underscores, only. filename.fem follows standard requirements for INCLUDE, that is, it can refer to a local file or contain the full path. No other BEGIN or END entries are allowed between BEGIN and END. All Bulk Data Entries should be located between BEGIN, FEMODEL and END, FEMODEL. A full model consists of several parts. One part is designated as global. The other parts can be moved to arbitrary locations using the INSTNCE Bulk Data Entry and connected to each other using connector elements or CONNECT Bulk Data Entries.

## Local and Global Entries

Local entries, as their name suggests, are data entries that can be defined locally within a specific part.

Local entries are currently limited to the following (refer to the Appendix for a list of all local entries).

### Grid Point Definition

GRID Bulk Data Entry

### Rigid Elements

RROD Bulk Data Entry

RBAR Bulk Data Entry

RBE1 Bulk Data Entry

RBE2 Bulk Data Entry

### Elements

CHEXA Bulk Data Entry

CBUSH Bulk Data Entry

and so on

All other data entries are considered global and should be defined in the global structure. Even if they are located within BEGIN - END entries in a different part, they are still interpreted as if they are in the global part. Some global data entries can reference local data entries (see above list) using fully-qualified references.

## Fully-Qualified References

The same ID number can be used for non-unique local data entries defined in multiple parts. Fully-qualified references contain information about both the local data entry and its corresponding part.

Such IDs cannot be referenced by entries in the global structure without the use of fully-qualified references.

Numeric Reference Fully-Qualified Reference
A numeric reference on a local entry references another local entity within the same part, or a global entity. A numeric reference can be used to reference a global entry only if another entry of the same type and with the same ID does not exist within the current part. References a local entry defined within any part.
A numeric reference on a global entry references an entity within the global part only. A fully-qualified reference can be used to reference an entry when another entry of the same type and with the same ID exists within the model.
Format: A <number> equal to the set ID of a non-local entry that is to be referenced is input in the corresponding field(s) of the referencing entry. Format: This is similar to the format of a numeric reference. The difference is that <PartName.number> is input in the corresponding field(s) of the referencing entry. The PartName is the name specified on the BEGIN entry for the part that contains the referenced entry.
Example:

RBE2, 16, 9, 123, 10

This connects grid points 9 and 10 located in the same part as the RBE2 entry (RBE2 is a local entry).

CHEXA, 5, 9, …

This references global material 9 irrespective of where the MAT#, 9 entry is located (Currently, all Material entries are global entries).

Example:

RBE2, 16, door.9, 123, bpillar.1

This connects grid points 9 and 10 located in part “door” and part “bpillar”, respectively.

This RBE2 entry can be located in any part.

## ID Resolution Guidelines

The following guidelines can be used to implement proper ID resolution in a model containing multiple parts and instances.
1. Each part can be included only once within a specific set of BEGIN and END Bulk Data Entries. Inclusion of multiple copies of a single part is known as instancing (refer to Instances).
2. All references to properties and materials are resolved in a standard way. These entities are global and should be defined only once anywhere in the model.
3. Subcase information and I/O Options Entries are also handled similarly. These entries refer only to numeric ID of entries in the global part (for example, SPC=5 will expect SPCADD, 5 or SPC, 5 within the global part). SPC's, MPC's, SPCADD and MPCADD are local entries and they allow fully-qualified referencing of local entries anywhere in the model. SPCADD and MPCADD entries in parts are allowed but will not be used in the solution as they cannot be activated by subcase selectors.
4. Fully-qualified references are allowed in some data entries (refer to the latest OptiStruct Reference Guide to check if a data entry accepts fully-qualified references). Not all entries and not all fields within these entries allow fully-qualified references.
5. This generalized syntax is allowed in all four bulk formats - fixed small field, fixed large field, free and free large field. As fully-qualified references are usually longer than 8 characters, free formats are more useful for this purpose.
6. As a general practice, all data entries using fully-qualified references are placed inside the global part. This is not mandatory.
7. The own ID of each data entry (usually the second field after the card name) cannot be a fully-qualified reference.
8. As explained previously, for local entries, their own IDs within a particular part cannot be equal. Whereas, similar data entries can be the same own ID if they are defined in different parts. In such cases they are completely independent entities and their ID's are resolved by using fully-qualified references. The same rules apply to set ID's, for example, in SPC's or MPC's - the same SID in different parts represent completely independent entities.
9. Any reference to a global entry must be a numeric reference regardless of whether it is being referred to from a global or a local part.
10. A fully-qualified reference (if allowed) is resolved to a specific instance defined by part name and ID within that part.
11. If a local entry contains a numeric reference (instead of a fully-qualified reference), OptiStruct resolves the reference to a local entry within the same part. If the part does not contain an entry (of the required type) with the ID equal to the numeric reference, OptiStruct looks in the global part for a possible match. If the entry is not available in the global part also, then the program errors out, regardless of whether the required entry (with same ID) is available locally in a different part. For example:
This entry is located in local part "grip":
RBE2, 15, 5, 123, 7, 8
Grid points 1,3,5 are included in part “grip”
Grid points 1,3,5,7,8 are included in local part “frame”
Grid points 3,5,7 are included in global part “racquet”

In the above example, on the RBE2 element, grid point 5 refers to grid grip.5, grid point 7 refers to racquet.8 and grid point results in an error.

12. OptiStruct allows repetition of some global data entries, even if only unique ID's are allowed, only if the content of such cards is identical (for example, material and property entries).

### Logical Sets

The SET Bulk Data Entry can be used in the global part to reference SET's defined within different parts. These SET entries in the global part can contain fully-qualified references to part-specific SET data only if logical operators (OPERATOR field on the SET entry) are used.

The following SET entry exists in part "A":
BEGIN, FEMODEL, A
SET, 29, ELEM, LIST
15 through 30
…
END, FEMODEL, A
Referencing SET, 29 in the global part "G":
BEGIN, FEMODEL, G
SET, 78, ELEM, OR
A.29
…
END, FEMODEL, G

This process can be used to reference local sets in the global part on entries which do not support fully-qualified referencing of local sets (like, output entries).

The following SET entry exists in part "A":
BEGIN, FEMODEL, A
SET, 3, GRID, LIST
15 through 30
…
END, FEMODEL, A
In the global part "G":
Incorrect
BEGIN, FEMODEL, G
DISPLACEMENT(H3D)=part.3
or
DISPLACEMENT(H3D)=3
…
END, FEMODEL, G  
Correct
BEGIN, FEMODEL, G
DISPLACEMENT(H3D)=3
SET, 3, GRID, OR
A.3
…
END, FEMODEL, G 

## Relocation

Relocation involves the positioning of parts within the model relative to each other or the global structure.

A full model in a OptiStruct Parts and Instances consists of a collection of parts. These parts are inserted into the global structure automatically (without relocation) or by using entries which allow relocation (RELOC and INSTNCE). Currently relocation of parts included in the full structure can be accomplished using the INSTNCE and RELOC Bulk Data Entries. Relocation involves translational and rotational movement of parts relative to their initial position.

### INSTNCE Bulk Data Entry

The full model consists of several parts. One part is designated as global and the rest of the included parts are relatively positioned with respect to the global part with the help of the INSTNCE entry. The INSTNCE entry references the RELOC Bulk Data Entry that defines the relocation or mapping of grid points from one position to another.

Format

A INSTNCE Bulk Data Entry can be specified only within the global part. No INSTNCE entry can reference the global part. Each INSTNCE entry should reference a unique part name, however, it is not required that every part is positioned using an INSTNCE entry. Parts which are not specified on the INSTNCE entry are included in the full model without any relocation.

INSTNCE, SID, name, NN

The third field "name" specifies the name of the part defined via the BEGIN, FEMODEL, name entry and NN references the ID of the RELOC Bulk Data Entry. The RELOC Bulk Data Entry defines the actual location of the part in the final model. Refer to the OptiStruct Reference Guide for detailed information.

### RELOC Bulk Data Entry

Defines relocation or mapping of grid points from one position to another. It can be used in conjunction with the INSTNCE entry to relocate parts relative to each other or to the global structure.

Format

RELOC entries are used to relocate grid points within the full model. RELOC defines independent transformation of each part, not the transformation of one part with respect to another. In particular, it does define that two parts should be connected together and then relocated as an assembly. It can be specified in the global part and is referred to by part specific entries like INSTNCE.

RELOC, ID, type, GID# ...

The third field "type" specifies the type of relocation: MOVE, MATCH, ROTATE, or MIRROR. There are multiple formats of the RELOC entry depending on the specified type. Refer to the OptiStruct Reference Guide for detailed information.

## Connectivity

The final step in the part assembly process is connection.

Connectivity between parts can be achieved in three different ways:
• Using the CONNECT Bulk Data Entry
• Using connectors like rigid or bush elements that can explicitly reference grids in any part. Connectors can contain a mix of regular and fully qualified ID's. Regular IDs reference:
In a Local entry:
An entry with that ID in the same part, or to an entry with the same ID in the global part.
In a Global entry:
An entry with that ID in the global part.

Refer to comment 11 in the ID Resolution Guidelines section for information on how regular ID references in localized entries are resolved. The Appendix contains a list of supported Local entries which can be defined within a part.

• Use TIE or CONTACT entries to connect parts.

### CONNECT Bulk Data Entry

Defines equivalence for degrees of freedom between two parts. Using two forms of the entry, you can equivalence all degrees of freedom for grids of both parts within the specified tolerance distance from each other.

CONNECT always equivalences grid points located within two parts at the same location (X, Y, and Z) after all parts are moved to their final location using INSTNCE entries. If multiple grid points exist in both parts at the same location (within the specified tolerance), then they will be equivalenced together.

Format

The CONNECT entry can be used to define equivalence between two parts (name_a and name_b) by searching for all grid points within a specified tolerance (tol). The alternate form involves specifying a set of grid points at which to search for neighboring grids of either part "name_a" or part "name_b" within a specific tolerance (tol).

CONNECT, name_a, name_b, tol

The tolerance (tol) is a numeric value defining the maximum distance between two grid points to allow equivalence. All grids in "part_a" are considered, if the search in "part_b" finds a grid point matching the location (within the specified tolerance), then these two grids are equivalenced. Refer to the OptiStruct Reference Guide for detailed information.
Note: GRID's within a certain tolerance specified on CONNECT will be equivalenced. Equivalencing internally maps the degrees of freedom (DOF) of one GRID to another, such that both grids point to the same set of DOF. This approach avoids use of Lagrange multipliers or penalty method, since CONTACT's or MPC's are not involved, thus reducing the cost of pivoting and improving conditioning of the entire linear system of equations.

## Instances

Instances are multiple copies of a part that are exactly the same as the part itself in all respects.

Currently, part instancing in OptiStruct is available as a logical extension to the part inclusion process. A direct approach to part instancing will be available in a future release.

### Create instances of a Part

To create an additional instance of an existing part, the part inclusion process can be repeated.

For example, to create an additional instance of the part "CrankShaft", the BEGIN FEMODEL and END FEMODEL statements are repeated. The same set of include files (using the INCLUDE entry) are repeated inside multiple part definitions.

BEGIN, FEMODEL, CrankShaft_1 include "CrankS_a.fem" include "CrankS_b.fem" END, FEMODEL, CrankShaft

BEGIN, FEMODEL, CrankShaft_2 include "CrankS_a.fem" include "CrankS_b.fem" END, FEMODEL, CrankShaft

## Appendix

### Local Data Entries

A list of data entries which can currently be defined as local entries in OptiStruct are:

### Miscellaneous

GRID, SPC, MPC, SET

### Elements

CAABSF, CBAR, CBUSH1D, CBUSH, CDUM1, CELAS1, CELAS2, CELAS3, CELAS4, CFAST, CGAP, CGAPG, CGASK12, CGASK16, CGASK6, CGASK8, CHEXA, CONM1, CONM2, CONROD, CONV, CPENTA, CPYRA, CQUAD4, CQUAD8, CROD, CSEAM, CSHEAR, CTETRA, CTRIA3, CTRIA6, CTRIAX6, CTUBE, CVISC, CWELD, and PLOTEL

### Rigid Elements

RBAR, RROD, RBE1, and RBE2

### Entries which allow fully-qualified references

A list of data entries which currently allow fully-qualified references to grid points in OptiStruct are listed below:

To Grid Points:
Local entries
CBUSH1D
CBUSH
RBAR
RROD
RBE1
RBE2
RBE3
Global entries
SPC
MPC
FORCE
MOMENT
SPCD
RELOC
To Other Entities: