Format specification#
This document defines the specification for the HDF5 composite CAE format. Use this format to exchange composite layup data between computer-aided engineering (CAE) tools.
Use the following concepts in this format:
Mesh: A mesh stores geometric information consisting of nodes and elements.
Component: A component represents a layer in the composite structure. Each component references a mesh and data map.
Data map: A data map stores data for each element or node in a mesh, including thickness, reference direction, and fiber direction.
Note
HDF5 is a binary format. Use a viewer such as HDFView to inspect file contents.
Tree overview#
Click to view full size.#
General information#
This section describes general information about the HDF5 composite CAE format.
Node types in HDF5 tree#
Node type |
Definition |
Examples |
|---|---|---|
Container node |
A group node that contains object nodes of the same type. |
fabrics, meshes, rosettes |
Named object node |
Represents a single object. To avoid HDF5 naming restrictions, store the external object name in the |
fabric, mesh, rosette |
Link node |
A link node stores dependencies between nodes in the tree. |
|
Data node |
A data node stores array or scalar values in its attributes. |
Important
To support interoperability with high-level interfaces such as PyTables, use HDF5 node names that match the Perl-compatible regular expression:
^[a-zA-Z_][a-zA-Z0-9_]*$
Node names must be unique within a group.
General rule: all string attributes use UTF-8 encoding.
Root-level nodes#
composite_cae#
Path: composite_cae
All attributes are optional.
Attribute |
Type |
Values |
|---|---|---|
|
string |
1.0 |
|
datestring |
“2010-08-23 13:31:13Z” |
|
string |
“ansys, inc.” |
|
string |
“SI”, “Imperial” |
|
string |
“m”, “cm”, “mm”, “um”, “in” |
|
string |
“kg”, “t”, “g”, “lbf”, “lbm” |
|
string |
“s” |
|
string |
“C”, “K”, “F” |
|
string |
“deg”, “rad” |
If unit_system is not specified, the importer uses its default unit system.
The *_unit attributes override unit_system.
For example, if unit_system is “SI” and length_unit is “mm”, the length unit is “mm”.
Global coordinate system#
Path: composite_cae → global_coord_sys
Field |
Type |
Description |
|---|---|---|
|
4×3 double array |
Defines origin and directions for the entire model: |
Ansys does not currently support this attribute.
Material data#
Fabric (named)#
Path: material_data → fabrics → fabric(named)
Orientations (obsolete)#
Path: material_data → fabrics → fabric(named) → orientations (obsolete)
Array of doubles.
[0, 45, -45]
Note
Ansys does not read or write this property. This property may be removed in a future release.
Mechanical#
Path: material_data → fabrics → fabric(named) → mechanical
Attribute |
Type |
Description |
|---|---|---|
|
string (optional) |
uni, woven |
|
double |
Weight per area |
|
double |
Cured thickness |
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
Cost#
Path: material_data → fabrics → fabric(named) → cost
Attribute |
Type |
Description |
|---|---|---|
|
string |
EUR, USD, etc. |
|
double |
Stackup (named)#
Path: material_data → stackups → stackup(named)
Cost#
Path: material_data → stackups → stackup(named) → cost
Attribute |
Type |
Description |
|---|---|---|
|
string |
EUR, USD, etc. |
|
double |
Fabric#
Path: material_data → stackups → stackup(named) → fabric
Attribute |
Type |
Description |
|---|---|---|
|
unsigned |
Defines the order of fabrics within the stackup. |
|
double |
Angle of the fabric within the stackup. |
Meshes#
Mesh (named)#
Path: meshes → mesh(named)
Node labels#
Path: meshes → mesh(named) → node_labels
Field |
Type |
Description |
|---|---|---|
|
n×1 integer array |
Unique node identifiers. |
Nodes#
Path: meshes → mesh(named) → nodes
Field |
Type |
Description |
|---|---|---|
|
n×3 double array |
Node coordinates |
Element labels#
Path: meshes → mesh(named) → element_labels
Field |
Type |
Description |
|---|---|---|
|
n×1 integer array |
Unique element identifiers. |
Element types#
Path: meshes → mesh(named) → element_types
Field |
Type |
Description |
|---|---|---|
|
n×1 integer array |
Element type identifier for each element. |
Supported element types:
3-node shell
4-node shell
6-node shell
8-node shell
The list of element types may expand in future releases, for example with 108 and 120 for 8-node and 20-node bricks.
Element nodes#
Path: meshes → mesh(named) → element_nodes
Field |
Type |
Description |
|---|---|---|
|
n×m variable-length integer array (VLArray) |
Node indices for each element. |
Defines element nodes. Node indices point directly to entries in the nodes and node_labels arrays.
Node order must follow the indices shown below:
3 nodes (linear triangle): I, J, K
4 nodes (linear rectangle): I, J, K, L
6 nodes (quadratic triangle): I, J, K, M, N, P
8 nodes (quadratic rectangle): I, J, K, L, M, N, O, P
Click to view full size.#
Note
A VLArray (variable length array) is used to support different element types (see meshes → mesh(named) → element_types).
Edge set (named)#
Path: meshes → mesh(named) → edge_sets → edge_set(named)
Field |
Type |
Description |
|---|---|---|
|
n×1 unsigned integer array |
Node indices that reference nodes in this set. |
Element set (named)#
Path: meshes → mesh(named) → element_sets → element_set(named)
Field |
Type |
Description |
|---|---|---|
|
n×1 unsigned integer array |
Element indices that reference elements in this set. |
Components#
Component (named)#
Path: components → component(named)
Attributes:
Attribute |
Type |
Description |
|---|---|---|
|
string |
ply, core, etc. |
|
integer |
The step value and global identifier. It defines ply order from bottom to top. |
|
double |
The nominal orientation angle relative to the reference direction. |
|
string |
Note
The mapping_type attribute is optional and is detailed later. Because ACP can use multiple rosettes to define a ply’s reference direction, several mapping types are defined, including interpolation algorithms such as “minimum distance” and “minimum angle.”
Placement coordinate system#
Path: components → component(named) → placement_coord_sys
Field |
Type |
Description |
|---|---|---|
|
4×3 double array |
Placement coordinate system rows: |
The placement_coord_sys has two purposes:
Its normal defines the default offset direction of the layup.
Its origin and dir1 define the starting point and initial direction of the draping calculation.
Material#
Path: components → component(named) → material
Softlink
Defines the ply material and refers to an object in material_data → fabrics or material_data → stackups.
Element set#
Path: components → component(named) → element_set
Softlink
Defines a link to an element set of a mesh and specifies the ply extent.
Data map#
Path: components → component(named) → data_map
Softlink
Defines a link to the data map of this component.
The following rules apply:
If the data map contains a thickness, a material of type
material_data → stackupsis not supported.If
data_map → thicknessis not defined, thickness is computed fromcured_thicknesswhen the material is a fabric, or from the sum of allcured_thicknessvalues whenmaterial_data → stackups.If
matorient_1_anglesis not present, it is set equal tocomponent → orientation.If
matorient_2_anglesis not present, it is computed as:matorient_2_angles = matorient_1_angles + 90°.
Rosette (named)#
Path: components → component(named) → rosettes → rosette(named)
Softlink (Optional)
Defines a link to the rosettes of this component.
Rosettes#
Rosette (named)#
Path: rosettes → rosette(named)
Attributes:
Attribute |
Type |
Description |
|---|---|---|
|
string |
Note
The possible values of the rosette mapping_type are not yet specified. FiberSIM defines the mapping types as “translational”, “standard”, or “rotational”. ACP defines the standard rosette types as “parallel”, “radial”, “cylindrical”, or “spherical”. The exact definition of this attribute has been postponed because this information is optional and is not required to map the ply orientation field correctly.
Coordinate system#
Path: rosettes → rosette(named) → coord_sys
Field |
Type |
Description |
|---|---|---|
|
4×3 double array |
Rosette coordinate system rows: |
Data maps#
Data map (named)#
Path: data_maps → data_map(named)
Element/node set link#
Path: data_maps → data_map(named) → element_set/node/node_set
Field |
Type |
Description |
|---|---|---|
|
softlink |
Link to a mesh element set or edge set where orientations, thicknesses, and other values are defined. |
Reference directions#
Path: data_maps → data_map(named) → reference_directions
Field |
Type |
Description |
|---|---|---|
|
n×3 double array |
Reference directions as absolute direction vectors. |
Normals#
Path: data_maps → data_map(named) → normals
Field |
Type |
Description |
|---|---|---|
|
n×3 double array (optional) |
Normal directions as absolute vectors used to project the reference direction onto the normal plane. |
Matorient 1 angles#
Path: data_maps → data_map(named) → matorient_1_angles
Field |
Type |
Description |
|---|---|---|
|
n×1 double array (optional) |
Material orientation 1 angles relative to the reference direction and given normal. |
Matorient 2 angles#
Path: data_maps → data_map(named) → matorient_2_angles
Field |
Type |
Description |
|---|---|---|
|
n×1 double array (optional) |
Material orientation 2 angles relative to the reference direction and given normal. |
Thicknesses#
Path: data_maps → data_map(named) → thicknesses
Field |
Type |
Description |
|---|---|---|
|
n×1 double array (optional) |
Position-dependent thickness values. |
Scalar user data (named)#
Path: data_maps → data_map(named) → scalar_user_data → scalar_user_data(named)
Field |
Type |
Description |
|---|---|---|
|
n×1 double array (optional) |
User-defined scalar data field. Only supported by Ansys. |
Attribute |
Type |
Values |
|---|---|---|
|
string |
“dimensionless”, “length”, “mass”, “time”, “temp” (default: “dimensionless”) |
Component groups#
Component group (named)#
Path: component_groups → component_group(named)
Component groups are optional. You can define them to store grouping information of components.
Change log#
Date |
Description |
|---|---|
May 5, 2010 |
ACP–FiberSIM Interface Format Specification Rev 01 |
June 5, 2010 |
HDF5 Composite CAE Data File Specification Proposal version 1.1 |
Aug 10, 2010 |
HDF5 Composite CAE Data File Specification Release Candidate 1 for stable version 1.0. |
Aug 11, 2010 |
Minor updates in “Open Questions”, added Section “Specification of Node Names” |
Aug 30, 2010 |
Upgrade specification to match all issues recently discussed with Vistagy via emails |
Mar 17, 2011 |
Cleanup the document a little |
Oct 17, 2014 |
Adding component_groups and component_group nodes |
June 28, 2019 |
Adding some additional information |
January 24, 2020 |
Corrected name for matorient_angles: “mat_orient1_angles” to “matorient_1_angles” and “mat_orient2_angles” to “matorient_2_angles”. Defined which fields in data_map are optional and specify what happens if optional nodes are missing. Clarified use of placement_coord_sys |
September 15, 2020 |
Mentioned that global_coord_sys is currently not supported. Correct what happens when matorient_1_angles are not present |
January 26, 2022 |
Mark |
February 4, 2022 |
Change Href to Softlink for items that have to be linked with a Softlink |
February 8, 2022 |
Correct datatype for element_labels, element_nodes and element_types (now int), clarified layer id |
February 17, 2022 |
Clarified units specification, Mark optional material properties as optional |
May 12, 2022 |
Add optional scalar_user_data data_map property |
May 31, 2022 |
Improved formatting, Removed outdated future plans section. Added missing rosettes in component |
May 22, 2023 |
Improve documentation of node order |
May 15, 2024 |
Complete supported units |
June 21, 2024 |
Clarified orientation |
April 14, 2024 |
Some clarifications |