For Tessellation
A file can be exported based on surfaces created by tessellation.
When the mesh used by the layup model is created by Tessellation
- The underlying surfaces of the selection are identified and cut in turn by all
associated ply boundaries. This forms regions of constant stacking between the ply
boundaries.
- Each of these regions is then tessellated with Sag Value.
- A core sampling is performed once on each region to determine the extent of each
ply.
For use in manufacturing, such as laser projection or stress recovery, it is possible
- To export target points and references in the layup file.
- To export surface offsets in the export file or not. The seed point of the offset is
defined at the origin of the rosette.
The fiber angles for each ply are then regenerated by running the simulation on the ply.
- With Regenerated (Theoretical), projected plies are created.
The fiber angles are determined by projecting the rosette x-axis onto the element and
applying an angular rotation given by the angular rotation of the ply.
- With Regenerated (Actual), a draping simulation is undertaken,
if possible. If the referenced material is unidirectional, the simulation is uniaxial,
otherwise it is biaxial. If the draping simulation fails, the ply reverts to a projected
type.
A typical tessellated mesh with a fiber simulation performed on it is shown below.
- The tessellation is done individually on areas of constant stacking, to correctly
reflect the ply boundaries.
- The triangular elements are topologically congruent at ply boundaries as
required.
- The exported layup file contains all the information to rerun the draping simulation
as appropriate.
External Mesh File
A file can be exported based on an alternative mesh.
Alternative mesh file can be:
- Nastran Bulk Data File (.dat or .nas)
- Existing Layup file format (.Layup)
- Abaqus input file (.inp)
The exported mesh is based on the imported mesh, which is displayed superimposed onto the
geometry.
A Core Sample Range value is required.
Composites Link goes to the centroid of each analysis element, obtains the element normal,
and uses this to run a core sampling using the input Core Sample
Range to limit how far from the centroid to look. Composites Link does not
use any ply surfaces further than this distance from the mesh. Enter a value sufficiently
large to accommodate differences between the CAD model and the mesh surfaces, but not so
large that more than one surface could be detected for a given centroid. Note:
This can be a
time-consuming exercise for large models.
After this, the extent of the ply is known and the ply can be regenerated using Theoretical
or Actual angles as with Tessellation. Note:
The finite elements are
not guaranteed to follow the ply boundaries, so features like splits may be lost in this
process, and producibility may be altered or fail.
The resulting Layup file
contains a full set of information based on the ply layup. However, in general the ply
boundaries are not followed and so the element-based ply boundaries may be jagged.
Solid Core within a laminate stack can also be included in the export if Export
Cores is selected, in which case the core sample measures the actual thickness
of the core at element centroids.
Formats and Options
Output options vary with the selected export format.
By default, plies are exported using Simulayt's Layup file format. This file format defines
a shell mesh on which a ply layup is defined. This file can be used by applications using
Simulayt's Layup technology, as well as third-party applications that support this
format.
Composites HDF5 Export
HDF5 is a standard file format that is commonly used for transferring datasets between
software packages. The following options are available to control export of data to be
used in monitoring and comparing simulation data with measurements made during manufacturing.
- Target & Result locations
- To be selected as required.
- Export Manufacturing Surfaces
- Results are exported only if the manufacturing surfaces are selected for export.
The manufacturing surfaces are the plies with offsets resulting from underlying
plies, and also the full surface after the addition of each ply.
The output file is a binary file format where data is stored in a directory-like
structure as shown in the example below. The "composite_cae" schema is supported by a
number of third-party tools. Notes:
- The example below is not exhaustive.
- Actual numerical data is stored only on the leaf nodes.
- ‘m’ indicates that there could be multiple entries.
- Each node can also have attribute data attached.
composite_cae (Container: all data necessary for FE analysis)
components (Container: ordered linear list of plies)
Ply.n m (Container: set of links to data for ply)
Attributes:
“Description” string (fixed length) Expected
“PlyGroup” string (fixed length) Expected – else use ‘Undefined group’
“PlySequence” string (fixed length) Expected – else use ‘Undefined sequence’
“PlyParent” string (fixed length) Optional
“TITLE” string (fixed length) mandatory
“layer_id” 32-bit integer mandatory
“orientation” 64-bit floating point mandatory
“type” string (fixed length) mandatory
data_map (soft link to an entry in the data_maps list)
element_set (soft link to an entry in the meshes/exported_meshes list)
flatten (Container: flattened ply for this ply) may account for ply offset in stack
points_2d (Data: double[n,3], locations of edge vertices)
points_per_contour (Data: integer, number of edge vertices)
transform_2d_to_3d (Data: double[4,3], transformation matrix)
material (soft link to an entry in the materials list)
placement_coord_sys (Data: double[4,3], origin and axes)
rosettes (Container: axis systems referenced by plies)
Axis System.n m (soft link to an entry in the rosettes list)
data_maps (Container: ordered linear list of plies)
Mapn m (Container: set of links to data for ply)
element_set (soft link to an entry in the meshes/exported_mesh list)
matorient_1_angles (fibre angle for each element in ply)
normal (normal for each element in ply)
reference_directions (reference direction mapped onto each element in ply)
thicknesses (thickness for each element in ply)
material_data (Container: list of all materials)
fabrics (Container: list of fabric materials)
materialName m (soft link to an entry in the meshes/exported_meshes list)
mechanical (Data: empty), attributes contain material mechanical properties as key-value pairs
meshes (Container: meshes used in model)
exported_mesh (Container: meshes for plies)
element_labels (Data: integer[n]), labels for ‘n’ elements
element_nodes (Data: integer[n x variable_length])– ids of node index for elements’ connectivity.
element_sets (Container: sets of element ids that make up each ply.)
PlyName m (Data: integer[num_elements in ply]), ids of elements in set
element_types (Data: integer[num_elements]), number of nodes in each element
node_labels (Data: integer[num_nodes]), ids of the nodes
nodes (Data: double[num_nodes x 3]), locations of nodes
rosettes (Container: ordered linear list of rosettes)
Axis System.N m (Name of axis system)
coord_sys (Data: double[4,3])
Items can be added to the schema and the following entities have been added by Composites
Link to support group/sequence and cut-pieces. Notes:
- This is a heterogeneous list of items, where each item has an attribute that
specifies the type.
- * except for a parent ply, which is created directly as soft links to entries in
the data_maps, material maps, meshes, and rosettes lists.
composite_cae (Container: all data necessary for FE analysis)
stacking (Container: ordered hierarchical list of groups / sequences / plies / cut pieces)
Plies Group.NNNN m (Container: ordered hierarchical list of sequences), Ply group. Attributes:
“Description” (string)
“TITLE” (string) name of the group
Seq.NNNN m (Container: ordered hierarchical list of plies) Sequence. Attributes:
“Description” (string)
“TITLE” (string) name of the ply sequence
Ply.NNNN m (soft link to an entry in the components list*) Ply or cut-piece. Attributes:
“Description” string (fixed length) Expected
“PlyGroup” string (fixed length) Expected
“PlySequence” string (fixed length) Expected
“PlyParent” string (fixed length) Optional
“TITLE” string (fixed length) mandatory
“layer_id” 32-bit integer mandatory (indicates order in the stack)
“orientation” 64-bit floating point mandatory
“type” string (fixed length) mandatory
A "composites_manufacturing" schema is supported when the user chooses the option to
Export Manufacturing Surfaces. A partial list of data supported by this schema is shown
below. Additional entities can be readily added to address end-user requirements.
composite_manufacturing (Container: All data to pass to and from manufacturing processes) Attributes:
TITLE = Composite CAE specification
file_creation_time = YYYY-MM-DD hh:mm:ss
file_creator = name
format_last_modified = YYYY-MM-DD hh:mm:ss
schema_version = 1.0.0
last_editor = name
plies (Container: All plies for manufacturing processes)
plyName m (Container: Ply surface data as laid down – with thickness and stacking effects)
ply_surface (Container: surface mesh)
element_labels (Data: integer[num_elements_in_ply])
element_nodes (Data: integer[num_elements_in_ply,variable_length])
– ids of node index for each elements’ connectivity.
element_types (Data: integer[num_elements]) number of nodes in each element
node_labels (Data: integer[num_nodes_in_ply])
node_normals (Data: double[num_nodes_in_ply,3]) surface normal at nodes
nodes (Data: double[num_nodes_in_ply,3]) locations of nodes
measured_ply_surface (Container: surface mesh)
element_labels (Data: integer[num_elements_in_ply])
element_nodes (Data: integer[num_elements_in_ply,variable_length])
– ids of node index for each elements’ connectivity.
element_types (Data: integer[num_elements]) number of nodes in each element
node_labels (Data: integer[num_nodes_in_ply])
nodes (Data: double[num_nodes_in_ply,3]) locations of nodes
ply_boundary (Data: integer[num_points_in_edge]) Index of nodes that make boundary
measured_ply_boundary (OPTIONAL soft link to entry in
composite_manufacturing/features/manufactured/ply_based/plyName )
ply_results (OPTIONAL soft link to entry in
composite_cae/composite_manufacturing/field_result_sets/ply_based_results)
fe_ply (OPTIONAL soft link to entry in composite_cae/components)
To allow mapping of manufactured data to the correct ply in CAE
seed_point (Data: double[3], location of the seed point on the 3D surface)
x_ref (Data: double[3], direction of the x-axis at the seed point on the 3D surface)
surfaces m (Soft links to ply_surface that is the complete intermediate surface at each layer)
base Surface The definition for the bottom surface of the stack
element_labels (Data: integer[num_elements_in_ply])
element_nodes (Data: integer[num_elements_in_ply,variable_length])
– ids of node index for each elements’ connectivity.
element_types (Data: integer[num_elements]) number of nodes in each element
node_labels (Data: integer[num_nodes_in_ply])
node_normals (Data: double[num_nodes_in_ply,3]) surface normal at nodes
nodes (Data: double[num_nodes_in_ply,3]) locations of nodes
intermediate surface The envelope surface – the whole surface after the addition of this ply.
element_labels (soft link to entry in surfaces/base surface/element_labels)
element_nodes (soft link to entry in surfaces/base surface/element_nodes)
element_types (soft link to entry in surfaces/base surface/element_types)
node_labels (soft link to entry in surfaces/base surface/node_labels)
node_normals (Data: double[num_nodes_in_ply,3]) surface normal at nodes
nodes (Data: double[num_nodes_in_ply,3]) offset locations of nodes
Note: if the offset of the nodes are known for each ply, the program writing the
the data to should calculate the new nodal locations.
composite_manufacturing
datum_points (Container: list of points)
datum.N m (Data: double[d,6], location of datum point in space + local normal)
laser_guidance_points (Container: list of points)
laserPoint.N m (soft link to entry in datum_points)
result_points (Container: sets of lists of points)
result_location.N m (Container: a number of sets of points where results exist – no connectivity )
attributes: TITLE (location set name), GROUPID (integer), GROUPNAME (string), (multiple) names for sensor points (key = location.N) in order of data in tables.
location_xyz Data: double[r,3], locations of results in space
location_normal Data: double[r,3], surface normal at locations of results
result_paths (Container: curves for result data)
result_path.N m (Container: a set of points which define a path where results exist)
attributes: TITLE string: location set name;
location_xyz Data: double[r,3], locations of results in space
Note: These should be the vertices of the curve defining the path in order form start to end.
location_normal Data: double[r,3], surface normal at locations of results
result_points_meshes (Container: a number of sets of points and connectivity where results exist)
result_point_mesh.N m (Container: set of points, normal and connectivity),
element_labels (Data: integer[num_elements_in_point_mesh])
element_no (Data: integer[num_elements_in_point_mesh,variable_length])
– ids of node index for each elements’ connectivity.
element_types (Data: integer[num_elements]) number of nodes in each element
node_labels (Data: integer[num_nodes_in_ply])
node_normals (Data: double[num_nodes_in_ply,3]) surface normal at nodes
nodes (Data: double[num_nodes_in_ply,3]) locations of nodes
result_elements (Container: sets of lists of element indices)
result_location_element_indicesN m (Data: integer[r], indices of elements where results are located),
attributes: location set name, path to mesh for these elements
result_nodes (Container: sets of lists of node indices)
result_location_node_indicesN m (Data: integer[r], indices of nodes where results are located),
attributes: location set name, path to mesh for these nodes
tape_centrelines (Container: sets of centreline data, organised by ply.)
plyName m (Container: Ply tape centrelines)
centrelineN m (Data: double[r,3], locations of vertices of curve), attributes: centreline name
tape_contours (Container: sets of tape boundary data, organised by ply.)
plyName m (Container: Ply tape contours)
contourN m (Data: double[r,3], locations of vertices of curve), attributes: contour name
composite_manufacturing
field_result_sets
ply_based_results m (Container of all results associated with a specific ply)
plyName (Container: list of field results sets)
result.N m (Container: result set),
attributes:
‘Location’ location-name,
‘numPoints’ number of data points ‘r’,
‘Datatype’ number of values per result: Scalar=1, Vector=3,
‘TITLE’ unique label for results, used on plots
‘Description’ longer descriptive title.
‘source’ localisation of the results: allowable values
“XYZ” (non-connected points) (ensure result_points is present)
“POINT” (set of points with connectivity)
(ensure entry in composite_manufacturing/result_points_meshes is present.)
“ELEMENT” (results on element: point_mesh should point to a ply mesh)
“NODE” (results at node: point_mesh should point to a ply mesh),
“PATH” (results on a line: result_path should point to a sensor path),
‘result-data-label’ (e.g. 2D coordinates),
‘result-location-association’ (e.g. “Ply 1”),
‘dimensionality’ (e.g. pressure, temperature, stress etc. Should match an entry
Units branch. Results should be stored in the units listed there.)
result-location-association (e.g. “Ply 1”))
unit (Soft-link to entry in composite_manufacturing/unit_system)
(Note: this may be used by graphing and tolerance tools)
point_mesh (Soft-link to entry that contains mesh information: i.e. tables for :
element_labels, element_nodes, element_types, node_labels, nodes)
result_points (Soft-link to entry in composite_manufacturing/result_points)
result_path (Soft-link to entry in composite_manufacturing/result_paths)
simulated_layer_values (Data: double[s]): if the results are given with [optional: position, time]
(e.g. “Through-thickness”, “Time-history”), this table will contain the
values of the position or time steps.
attributes: label, dimensionality (e.g. time; length),
units (e.g. s, timestamp; mm)
measured_layer_values (Data: double[s]): if the results are given with [optional: position, time]
(e.g. “Through-thickness”, “Time-history”), this table will contain the
values of the position or time steps.
attributes: label, dimensionality, units
difference_layer_values (Data: double[s]): if the results are given with [optional: position, time]
(e.g. “Through-thickness”, “Time-history”), this table will contain the
values of the position or time steps.
attributes: label, dimensionality, units,
datumevent (name of the event that has the zero-time timestamp)
simulated_result_indices (Data: integer[r], index of result location for each result)
measured_result_indices (Data: integer[r], index of result location for each result)
difference_result_indices (Data: integer[r], index of result location for each result)
simulated_result (Data: double[r, data_size, [optional: position, time]], data at result locations),
attributes: label, data-type (“Static”, “Through-thickness”, “Time-history” ),
data_size, units
Note: for ‘event’ results, such as resin-arrival time, there should be one result value
per result location. For times a negative value would indicate the resin has not yet
arrived.
measured_result (Data: double[r, data_size, [optional: position, time]], data at result locations),
attributes: label, data-type (“Static”, “Through-thickness”, “Time-history”),
data_size, units
Note: for ‘event’ results, such as resin-arrival time, there should be one result value
per result location. As the data will be updated as time progresses, a negative value
can be used until the time the event is recorded.
difference_result (Data: double[r, data_size, [optional: position, time]], data at result locations),
attributes: label, data-type (“Static”, “Through-thickness”, “Time-history”),
data_size, units, source of difference calculation, type of difference calculation,
tolerances for difference.
simulated_datums (Soft-link to entry in composite_manufacturing/datum_points)
measured_datums (Soft-link to entry in composite_manufacturing/datum_points)
composite_manufacturing
units MANDATORY. Unit system used for all data stored in the database.
It is the responsibility of the creator of the database to set this information.
It is the responsibility of updaters of the database to read this information,
applying any scale factors necessary to data before it is written to the database.
Note that derived dimensions – e.g. pressure or density, should be consistent
with the base dimensions.
angles Attributes: TITLE = angle, unit (allowable values: radian, degrees)
area Attributes: TITLE = area, unit (allowable values: length_ unit+^2, e.g. m^2)
force Attributes: TITLE = force, unit (allowable values: N, lb)
length Attributes: TITLE = length, unit (allowable values: m, mm, inch, foot)
mass Attributes: TITLE = mass, unit (allowable values: kg, g, tonne, lb, oz)
resistance Attributes: TITLE = resistance, unit (allowable values: radian, degrees)
temperature Attributes: TITLE = temperature, unit (allowable values: K, C, F)
time Attributes: TITLE = time, unit (allowable values: s, min, hr, timestamp )
pressure Attributes: TITLE = pressure, unit (allowable values: Pa, psi, bar,
force_unit/length_ unit^2, e.g. N/mm^2)
|