HDF5 Composite CAE Specification#
This document describes the HDF5 Composite CAE file format specification. This format is used to exchange composite layup information between different CAE tools. The specification document is quite detailed. The most important items are:
The mesh is a set of nodes and elements on which you store the geometrical information of the layup
A component represents a layer in the layup. It always references a data_map and a mesh. The data_map contains the actual geometrical information for each element or node in the mesh. In the simplest case this is just the thickness and the reference direction/fiber direction.
Since hdf5 is a binary format you need a viewer to look at the file which you can find here:
https://www.hdfgroup.org/download-hdfview/
There are several libraries available to write hd5 files, for example:
Python: https://docs.h5py.org/en/stable/
Tree overview#
Click to view full size#
General information#
Node Types in HDF5 Tree#
Container Node#
Group node which contains a list of object nodes of the same type.
Examples: fabrics, meshes, rosettes
Named Object Node#
Node to specify an object. To avoid naming restrictions of HDF5 nodes, the external object name should be stored in the title attribute of the node.
The associated data of an object is stored in attributes of the object node or attached data nodes.
Examples: fabric, mesh, rosette
Link Node#
Dependencies between the different nodes in the tree are stored using link nodes.
Data Node#
Data nodes can either contain array data or scalar data in attributes.
Specification of Node Names#
To provide smooth interoperability with most high-level HDF5 interfaces (for example PyTables), the HDF node names must match the (perl regexp) pattern '^[a-zA-Z_][a-zA-Z0-9_]*$'. The names on the Nodes must be unique within each group.
General Comments#
The encoding of String attributes is UTF8.
Root level nodes#
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” |
All properties are optional, if no unit system is specified the unit system of the importer is used. The different *_unit attributes have higher priority than the unit_system attribute. E.g if unit_system is SI and length_unit is mm, mm is used as a length unit.
composite_cae->global_coord_sys#
4 by 3 array of double
[origin x] [origin y] [origin z]
[dir1 x] [dir1 y] [dir1 z]
[dir2 x] [dir2 y] [dir2 z]
[dir3 x] [dir3 y] [dir3 z]
Defines the origin and directions of the origin for the entire model. Currently not supported by ansys.
Material Data#
material_data->fabrics->fabric(named)#
material_data->fabrics->fabric(named)->orientations (Obsolete)#
Array of double
[0, 45, -45]
Note
This property is not written or read by ansys. It will be removed in the future.
material_data->fabrics->fabric(named)->mechanical#
Attribute |
Type |
Description |
|---|---|---|
|
string (optional) |
uni, woven |
|
double |
|
|
double |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
|
|
double (optional) |
material_data->fabrics->fabric(named)->cost#
Attribute |
Type |
Description |
|---|---|---|
|
string |
EUR, USD, etc |
|
double |
material_data->stackups->stackup(named)->cost#
Attribute |
Type |
Description |
|---|---|---|
|
string |
EUR, USD, etc |
|
double |
material_data->stackups->stackup(named)->fabric#
Attribute |
Type |
Description |
|---|---|---|
|
unsigned |
Determines order of fabrics within stackup |
|
double |
Angle of fabric within stackup |
Meshes#
meshes->mesh(named)->node_labels#
n by 1 array of int
[unique node id]
meshes->mesh(named)->nodes#
n by 3 array of doubles
[node x] [node y] [node z]
meshes->mesh(named)->element_labels#
n by 1 array of int
[unique element id]
meshes->mesh(named)->element_types#
n by 1 array of int
[element type]
Currently the following element types are defined:
3: 3 node shell
4: 4 node shell
6: 6 node shell
8: 8 node shell
The list of element types might be expanded in the future, for example using 108 and 120 for 8 and 20 node bricks.
meshes->mesh(named)->element_nodes#
n by m VLArray of int
[node 1] [node 2] … [node m]
Defines nodes of elements with node INDICES pointing directly to entries in the nodes/node_labels arrays.
The order of the nodes must correspond to the following indices:
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
Note
Here a VLArray data set is used since the mesh can contain element of different types (refer to meshes->mesh(named)->element_types)
meshes->mesh(named)->edge_sets->edge_set(named)#
Array of unsigned
Array with node INDICES referencing the nodes in this set.
meshes->mesh(named)->element_sets->element_set(named)#
Array of unsigned
Array with element INDICES referencing the elements in this set.
Components#
components->component(named)#
Attributes:
Attribute |
Type |
Description |
|---|---|---|
|
string |
ply, core, etc. |
|
integer |
aka step value. Global identifier. Determines the order of the plies (increasing from bottom to top) |
|
double |
nominal orientation angle relative to the reference direction |
|
string |
Note
The mapping_type is optional and will be detailed later. Since ACP allows to use multiple rosettes to define the reference direction within a ply, different mapping types (interpolation algorithms) are defined, such as “minimum distance”, “minimum angle”, etc.
components->component(named)->placement_coord_sys#
4 by 3 array of double
[origin x] [origin y] [origin z]
[dir1 x] [dir1 y] [dir1 z]
[dir2 x] [dir2 y] [dir2 z]
[normal x] [normal y] [normal z]
The placement_coord_sys is used for two things:
The normal of the placement coordinate system is used to define the default offset direction of the layup.
The origin and dir1 are used to define the starting point and the initial direction of the draping calculation, respectively.
components->component(named)->material#
Softlink
Defines the ply material and refers to an object in material_data->fabrics or material_data->stackups.
components->component(named)->element_set#
Softlink
Defines a link to an element set of a mesh and specifies the ply extent.
components->component(named)->data_map#
Softlink
Defines a link to the data map of this component.
The following restrictions and rules apply:
If the data_map contains a thickness, a “material” of type
material_data->stackupsis not supportedIf
data_map->thicknessis not defined the thickness is computed fromcured_thicknessif material is a “fabric” or the sum of thecured_thicknessfor all the “fabric” if material is amaterial_data->stackupIf matorient_1_angles is not present it set equal to
component->orientationIf matorient_2_angles is not present it is computed as: matorient_2_angles = matorient_1_angles + 90°
components->component(named)->rosettes->rosette(named)#
Softlink (Optional)
Defines a link to the rosettes of this component.
Rosettes#
rosettes->rosette(named)#
Attributes:
Attribute |
Type |
Description |
|---|---|---|
|
string |
Note
The possible values of the rosette mapping_type are not yet specified. FiberSIM defines “translational”, “standard”, and “rotational” mapping types. ACP defines “parallel”, “radial”, “cylindrical” and “spherical” as standard rosette types. The exact definition of this attribute has been postponed, because this is optional information to exchange, which it is not needed to map the orientation field of the plies correctly.
rosettes->rosette(named)->coord_sys#
4 by 3 array of double
[origin x] [origin y] [origin z]
[dir1 x] [dir1 y] [dir1 z]
[dir2 x] [dir2 y] [dir2 z]
[normal x] [normal y] [normal z]
Data Maps#
data_maps->data_map(named)->element_set/node/node_set#
Defines a link to an element set of a mesh or a link to an edge_set of a mesh. This defines the positions where the orientations, thicknesses etc are given.
data_maps->data_map(named)->reference_directions#
n by 3 array of double
Defines the reference directions absolutely with direction vectors.
data_maps->data_map(named)->normals#
n by 3 array of double (Optional)
Defines the normal directions absolutely with direction vectors. If present they can be used to project the reference direction onto the plane defined by the normal.
data_maps->data_map(named)->matorient_1_angles#
n by 1 array of double (Optional)
Defines the material orientation 1 angles with respect to the reference direction and the given normal.
data_maps->data_map(named)->matorient_2_angles#
n by 1 array of double (Optional)
Defines the material orientation 2 angles with respect to the reference direction and the given normal.
data_maps->data_map(named)->thicknesses#
n by 1 array of double (Optional)
Defines position dependent thickness values.
data_maps->data_map(named)->scalar_user_data->scalar_user_data(named)#
n by 1 array of double (Optional)
User defined scalar data fields. Only supported by ansys.
Attribute |
Type |
Values |
|---|---|---|
|
string |
“dimensionless”, “length”, “mass”, “time”, “temp” (default: “dimensionless”) |
Component Groups#
component_groups->component_group(named)#
Optional
Component groups can be defined to store grouping information of components.
Change Log#
Date |
Description |
Author |
|---|---|---|
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 Latest modifications from EVEN:
Latest modifications taken from Vistagy’s feedback of Aug 9 2010:
|
|
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)
|
|
February 17, 2022 |
Clarified units specification
|
|
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 |
Jan von Rickenbach |
April 14, 2024 |
Some clarifications |
|