How to define an Optistruct FRF simulation?

Starting from v1.06.02, MANATEE includes a TCL code generator to be used in HyperMesh preprocessor. With this feature you can automatically create the Load Collectors and Load Steps in HyperMesh to run different structural simulation in Optistruct, namely modal analysis and Frequency Response Function dedicated to Electromagnetic Vibration Synthesis.

First you need to copy/paste the template located in Mechanics\HyperMesh\Projects\default_TCL_gen.m. To activate the simulation generation you need to set:

Input.Simu.HM.is_simu_gen = 1;

Simulation types

First you need to choose the type of simulation you want with Input.Simu.HM.type_FRF. There are 4 available:

  • Direct method
  • Wave FRF
  • Tooth FRF
  • Modal analysis

In this article we will only details the setup of the three first types. The modal analysishas its own dedicated article. The different simulation types are detailed in this paper: Numerical simulation of structural-borne vibrations due to electromagnetic forces in electric machines – coupling between Altair Optistruct and Manatee software

Excitation and "T-set"

For all simulation types, you need to say if the excitation is radial or tangential with:

Input.Simu.HM.is_rad=1;% 1: Radial excitation, 0: Tangential

The Maxwell force excitation is the only thing that is geometrically dependent. You can apply the generated TCL code to any Optistruct model as long as you follow these constraints:

  • The model contains some load application sets named "TX" containing nodes equally distributed over a cylindrical surface (see geometry TCL article)
  • The load application nodal sets "TX" belong to a cylinder whose axis is along Z
  • The first set of application nodes T0 has nodes with polar coordinates of form (Rint, 0, z)

To generate the excitation we create a load collector for each T-set with a constraint following these equation:

% Radial
x = cos(2*pi*ii*step/Zs+alphaT)
y = sin(2*pi*ii*step/Zs+alphaT)
% Tangential
x = sin(2*pi*ii*step/Zs+alphaT)
y = cos(2*pi*ii*step/Zs+alphaT)


  • ii : index of the tooth
  • step = 1/kf (to skip tooth)
  • alphaT is an advance feature to introduce an angular offset if needed

This way, as long as all the three constraints on the T-sets are fulfilled, the generated simulation code can be applied on complex structures that cannot be generated by MANATEE. As an example, here is a complex Optistruct model on which the FRF functions have been calculated:

Complex topology with frame
Complex topology with frame

Boundary conditions

Another load collector using the sets created during the geometry generation part is the boundary condition one. To set the boundary condition you must set:

Input.Simu.HM.type_mechBC = 10;

It follows the same convention as in a "normal" MANATEE simulation.

This parameter is flexible enough to enable you to use it even with your own topology:

  • If both ends are free: no load collector will be created
  • If one end is not free: the condition is applied on a set named "Lam_Bottom"
  • If both ends are not free: the condition is applied on the sets "Lam_Bottom" and "Lam_Top"

This way, boundary conditions can be applied automatically to your own model as long as you follow the same naming convention for the sets of nodes.

If your boundary conditions are too complex for this process, you can specify the id of a Load Collector as a string to enforce its use:

Input.Simu.HM.type_mechBC = '53';

uses the existing load collector with id 53 as boundary condition.

Frequency and Damping

For all the three simulation types you need to set your frequency array and your damping:

Input.Simu.HM.freq = 100:50:2000;% Frequency array [Hz]
Input.Simu.HM.ksi = 0.02; % Damping coefficient

The FRF is computed on frequencies defined by the freq vector. For the damping, you can either enter a scalar that will be applied for every frequency or enter a matrix with the damping (second column) as a function of the frequency (first column).

The frequency is set in a Load Collector named "freq".
The damping is set in a Load Collector named "TDamp".

Direct method

With this method you can specify the amplitude and the phase of the applied harmonic force waves. First enter the list of wavenumbers that you want to simulate:

Input.Simu.HM.r = [2,-4];

Then for each wavenumber, you have to set the amplitude and phase as a function of the frequency defined by Input.Simu.HM.freq. For instance:

Input.Simu.HM.freq = [550,2500];
Input.Simu.HM.A = {[3200,0],[0,5244]}
Input.Simu.HM.Phi = {[pi/4,0],[0,pi/2]};

will inject a wave of order 2 with an amplitude of 3200 and a phase of pi/4 at frequency 550 Hz and a wave of order -4 with an amplitude of 5244 and a phase of pi/2 at frequency 2500 Hz. Only one Load Step gathering all the waves will be created.

Rotating wave FRF

For the rotating wave excitation method, you only need to provide the wavenumber list:

Input.Simu.HM.r = [2,-4];

One Load Step will be created for each wavenumber with unit magnitude.

Tooth FRF

Finally for the tooth excitation method you can provide a amplitude coefficient that will be applied to all the teeth:

Input.Simu.HM.A = 1;

One Load Step is created for each tooth.

Output cards

Input.Simu.HM.is_oload = 1; % 1: activate OLOAD and set Displacement to "ALL" Input.Simu.HM.out_set_id = NaN; % Id of the output set (is_oload=0)

Object counter

This section is only interesting if you want to use MANATEE generated TCL with an existing Optistuct project.

To generate the TCL code we need to keep track of the number of most of the HyperMesh entities. In fact in the TCL we can’t say (for instance) "set the value X of the last generated load collector" but "set value X of the load collector number Y". So we keep track of every entity (set, load collector, load step...) to always know the current index to set.

To use MANATEE generated TCL on an existing HyperMesh project, you have to provide us the highest index of your existing entities thought the variable:

Input.Simu.HM.obj_cpt.Comp = 0;% Number of existing Component
Input.Simu.HM.obj_cpt.Prop = 0;% Number of existing Properties
Input.Simu.HM.obj_cpt.Mat = 0;% Number of existing Material
Input.Simu.HM.obj_cpt.Set = 0;% Number of existing Set  
Input.Simu.HM.obj_cpt.LC = 0;% Number of existing Load Collector
Input.Simu.HM.obj_cpt.LS = 0;% Number of existing Load Step
Input.Simu.HM.obj_cpt.Card = 0;% Number of existing Card

Advanced parameters

For all simulation, by default MANATEE creates a Eigrl Load collector to carry modal condensation by setting fmin=0, fmax=max(freq) and ND=50. You can, of course edit the Load collector if you need at the end of the script execution. If you want we provide 2 advanced parameters to adapt the Eigrl generation:

Input.Simu.HM.Eigrl_id = NaN;% Id of the Eigrl Load Collector
Input.Simu.HM.ND = 50;% Number of modes for eigrl

The first one allow you to select an existing Eigrl Load collector by its id to be used (MANATEE won’t generate a new one). The second one enables to change the default generation of the Eigrl.

Input.Simu.HM.is_resvec = 1;                    % 1 To add the RESVEC (resudual vector) option in LoadStep
Previous Next