Skip to main content

Structural Rotor Samples

This showcase explains the structural rotor examples in eMachineSim. The sample is intended for electric-machine rotor design workflows where centrifugal force, shaft/support constraints, and simple contact diagnostics need to be checked before moving to more detailed verification.

The public examples are located under:

Examples/structural/rotor/

Representative JSON inputs are:

input_rotor_2d_1500rpm_smoke.json
input_rotor_2d_3000rpm_smoke.json
input_rotor_2d_1500rpm_shaft_bc_no_contact.json
input_rotor_core_only_2d_1500rpm.json
input_rotor_core_only_2d_modal.json
tip

Even when the input mesh uses first-order elements, setting "ELEMENT_ORDER": 2 in 6_Gaussian_Integral_Point converts the mesh to second-order elements during preprocessing. The post-processing mesh is also written as second-order elements.

Model Description

The example uses a 2D rotor cross-section model. It includes the rotor core, magnet-related regions, flux-barrier boundaries, and structural boundary conditions for a centrifugal-force load case. The current public mesh uses a merged magnet/core interface: the permanent-magnet nodes have been moved to the rotor-core side and node-merged at the interface. This represents the assumption that magnetic attraction keeps the magnet attached to the rotor core for this basic centrifugal-force sample.

The figure below shows the input mesh.

Structural rotor mesh

Static Structural Conditions

The primary static sample for the merged mesh is:

input_rotor_2d_1500rpm_shaft_bc_no_contact.json

The main settings are:

ItemSetting
Analysis typeStatic structural analysis
Structural assumption2D plane stress
Thickness1.0 m
Rotation speed1500 rpm equivalent
Angular velocity157.079632679 rad/s around the z-axis
Material Young's modulus205 GPa
Poisson's ratio0.3
Density7800 kg/m3
Magnet/core interfaceShared-node merged interface
Contact modelDisabled for the primary merged-mesh case

The sample includes displacement boundary conditions and a centrifugal body force. Because the magnet/core interface is node-merged, the primary case treats that interface as a tied or perfectly bonded interface. No penalty contact is assembled for that interface in input_rotor_2d_1500rpm_shaft_bc_no_contact.json.

Sector Model Constraints

For 45-degree, 90-degree, 120-degree, 180-degree, and similar sector models, STRUCTURAL_CYCLIC_SECTOR_BC can automatically extract the minimum-angle and maximum-angle periodic boundaries from the boundary nodes. For centrifugal-force rotor checks, a common setup is to allow radial displacement and constrain only the tangential direction on the sector boundaries.

When the shaft is not meshed in an inner-rotor model, STRUCTURAL_RADIAL_SUPPORT_BC can be used as a simplified shaft support. It removes the periodic-boundary nodes from the boundary-node candidates, extracts the minimum-radius node row for SIDE: "INNER", and applies the selected cylindrical-coordinate constraints with a penalty method.

Example settings for a 45-degree sector model:

"STRUCTURAL_CYCLIC_SECTOR_BC": {
"ENABLED": 1,
"AUTO_DETECT": 1,
"AXIS_POINT": [0.0, 0.0, 0.0],
"MIN_RADIUS": 1e-8,
"FIX_RADIAL": 0,
"FIX_TANGENTIAL": 1,
"FIX_UZ": 0,
"PENALTY_STIFFNESS": 1e15
},
"STRUCTURAL_RADIAL_SUPPORT_BC": {
"ENABLED": 1,
"AUTO_DETECT": 1,
"SIDE": "INNER",
"AXIS_POINT": [0.0, 0.0, 0.0],
"EXCLUDE_CYCLIC_SECTOR_NODES": 1,
"RADIUS_TOLERANCE_ABS": 1e-6,
"RADIUS_TOLERANCE_REL": 1e-4,
"FIX_RADIAL": 1,
"FIX_TANGENTIAL": 0,
"FIX_UZ": 0,
"PENALTY_STIFFNESS": 1e15
}

The run writes structural_cyclic_sector_constraints.csv and structural_radial_support_constraints.csv, which list the detected nodes, radius, angle, and constrained directions.

Run the static structural case from Python:

import eMachineSim

result = eMachineSim.structural.solve(
r"Examples\structural\rotor\input_rotor_2d_1500rpm_shaft_bc_no_contact.json",
r"Examples\structural\rotor",
)
print(result["success"])

Result Visualization

The structural post-processing path writes VTK files that can be opened in ParaView:

FilePurpose
mesh.vtkRotor mesh geometry and property IDs.
structural_displacement.vtkDisplacement vector, displacement magnitude, and von Mises stress arrays.
boundary_faces.vtkBoundary face visualization for constraints and diagnostics.
contact_debug.vtkContact visualization output when a contact-diagnostic variant is enabled.

Use ParaView's Warp By Vector filter with the displacement vector to view the deformed shape. The figure below shows a representative displacement result.

Structural rotor displacement result

This plot is useful for quickly checking:

  • whether the rotor deforms in the expected radial direction,
  • whether the displacement field is smooth,
  • whether constraints are too strong or too weak,
  • whether contact regions remain visually reasonable.

The absolute deformation shown in the figure depends on the chosen ParaView warp scale factor. Use the numerical output files for quantitative checks.

Load and Interface Diagnostics

After the run, inspect the CSV diagnostics in the same directory.

FilePurpose
structural_load_balance.csvApplied load and reaction-balance summary.
contact_state.csvContact gap, penetration, normal force, and pressure by contact entity, when a contact variant is enabled.
contact_penalty_assembly.csvContact penalty assembly diagnostics, when a contact variant is enabled.
boundary_faces.csvBoundary face table used for constraints and surface diagnostics.

For the current merged-mesh 1500 rpm no-contact case, representative load-balance values are:

QuantityFx [N]Fy [N]Fz [N]
Centrifugal body force1.1563e31.1683e30
Total applied1.1563e31.1683e30
Reaction balance estimate-1.1563e3-1.1683e30

The merged interface should be interpreted as a tied interface. In other words, the magnet and rotor-core nodes on the interface share the same displacement unknowns. This avoids the artificial "floating magnet" behavior that can appear when a separated magnet body is loaded by centrifugal force without a physically appropriate retaining path. The contact-enabled JSON files are retained as diagnostic variants, but they are no longer the recommended interpretation for this merged-interface showcase.

Case Variants

The rotor directory contains several variants:

JSON filePurpose
input_rotor_2d_1500rpm_smoke.jsonContact-diagnostic variant retained for implementation checks.
input_rotor_2d_3000rpm_smoke.jsonHigher-speed centrifugal-force variant.
input_rotor_2d_1500rpm_shaft_bc_no_contact.jsonPrimary merged-interface centrifugal-force case.
input_rotor_core_only_2d_1500rpm.jsonCore-only centrifugal structural case.
input_rotor_core_only_2d_modal.jsonCore-only modal check.

Use these variants to separate effects:

  • compare 1500 rpm and 3000 rpm to check centrifugal-force scaling,
  • use the no-contact merged-interface case for the basic magnet/core attached assumption,
  • use contact variants only when you intentionally want to inspect the current penalty-contact diagnostic path,
  • use core-only cases for simpler baseline debugging.

Interpretation Notes

This showcase is designed to demonstrate workflow and diagnostics. Before using similar inputs for design decisions, review:

  • material properties and density,
  • plane-stress or plane-strain assumption,
  • actual rotor axial length or thickness,
  • shaft and support boundary conditions,
  • contact stiffness and tolerance,
  • mesh density around magnets and bridges.
note

The mesh used in this showcase is derived from a magnetic-field-analysis mesh. It may therefore be relatively coarse at structural stress-concentration locations. If the von Mises stress appears concentrated in a single element, use a refined structural mesh around the local stress-gradient region before drawing quantitative design conclusions.

For publication-quality or design-signoff stress values, use a sufficiently refined model and validate boundary conditions against the intended operating condition.