Skip to content

HDF5 File Structure

Each simulation is stored as a self-contained HDF5 file (~35 MB). This page documents the complete structure.

File Organization

simulation_{id}.h5
├── Attributes (root level)
│   ├── Geometry_Parameters: [radius, bottom_radius, wall_angle]
│   └── Material_Parameters: [MAT, FC, SHTK, BF]
├── OP10/ (deep drawing operation)
│   ├── blank/   → Sheet metal workpiece
│   ├── die/     → Lower tool
│   ├── punch/   → Upper tool
│   ├── binder/  → Blank holder
│   └── general/ → Simulation metrics
└── OP20/ (cutting operation)
    └── blank/   → Part after cutting

Inspecting Structure

Use the display_structure function to inspect any HDF5 file:

from ddacs import display_structure
display_structure("path/to/simulation.h5")

Field Reference

Node Fields

Field Shape Description
node_ids (n,) Unique integer identifiers for each node
node_coordinates (n, 3) Initial XYZ positions [mm]
node_displacement (t, n, 3) Position at each timestep [mm]
node_velocity (t, n, 3) Velocity vectors [mm/s]
node_acceleration (t, n, 3) Acceleration vectors [mm/s²]

Element Fields

Field Shape Description
element_shell_ids (m,) Unique element identifiers
element_shell_node_ids (m, 4) Global node IDs defining each element
element_shell_node_indexes (m, 4) Node indices for each quad element
element_shell_part_indexes (m,) Part membership labels
element_shell_thickness (t, m) Current thickness [mm]

Stress and Strain Fields

Field Shape Description
element_shell_stress (t, m, 3, 6) Stress tensor at 3 integration points
element_shell_strain (t, m, 2, 6) Strain tensor at 2 integration points
element_shell_stress_all_ipt (m, 7, 6) Stress at all 7 through-thickness points
element_shell_stress_all_ipt_thickness (1, 7) Normalized positions of integration points
element_shell_effective_plastic_strain (t, m, 3) Effective plastic strain
element_shell_effective_plastic_strain_all_ipt (m, 7) Plastic strain at all integration points

Stress/strain tensor components: [σxx, σyy, σzz, τxy, τyz, τzx]

Integration point layers:

  • Index 0: Bottom surface
  • Index 1: Middle (most representative for overall behavior)
  • Index 2: Top surface

Force Fields

Field Shape Description
element_shell_bending_moment (t, m, 3) Bending moments [N·mm]
element_shell_normal_force (t, m, 3) Normal forces [N]
element_shell_shear_force (t, m, 2) Shear forces [N]
element_shell_internal_energy (t, m) Internal energy [mJ]

Global Fields (in general/ group)

Field Shape Description
global_timesteps (t,) Simulation time values
global_internal_energy (t,) Total internal energy [mJ]
global_kinetic_energy (t,) Total kinetic energy [mJ]
global_total_energy (t,) Sum of all energy [mJ]
global_velocity (t, 3) Global velocity [mm/s]
part_internal_energy (t, 4) Internal energy per part
part_kinetic_energy (t, 4) Kinetic energy per part
part_hourglass_energy (t, 4) Hourglass energy (mesh quality)
part_mass (t, 4) Mass per part [kg]

Shape Notation

  • t = number of timesteps (3 for tools, 4 for OP10/blank, 2 for OP20/blank)
  • n = number of nodes
  • m = number of elements

Component Availability

Not all fields are available for all components:

Field Category blank die punch binder
Node data
Element connectivity
Stress/strain - - -
Thickness - - -
Forces - - -

Example: Reading Data

import h5py
import numpy as np

with h5py.File("simulation.h5", "r") as f:
    # Get thickness after springback (last timestep)
    thickness = np.array(f["OP10/blank/element_shell_thickness"])[-1]

    # Get Von Mises stress at middle integration point
    stress = np.array(f["OP10/blank/element_shell_stress"])[-1, :, 1, :]

    # Get node positions at final timestep
    positions = np.array(f["OP10/blank/node_displacement"])[-1]