fe_cyclic#

Purpose

Support for cyclic symmetry computations.

Syntax

 model=fe_cyclic('build NSEC',model,LeftNodeSelect)
 def=fe_cyclic('eig NDIAM',model,EigOpt)

Description

fe_cyclic groups all commands needed to compute responses assuming cyclic symmetry. For more details on the associated theory you can refer to [54].

Assemble [,-struct]#

This command supports the computations linked to the assembly of gyroscopic coupling, gyroscopic stiffness and tangent stiffness in geometrically non-linear elasticity. The input arguments are the model and the rotation vector (in rad/s)

 model=demosdt('demo sector all');
 [K,model,Case]=fe_case('assemble -matdes 2 1 NoT -cell',model);
 SE=fe_cyclic('assemble -struct',model,[0 0 1000]); % 
 def=fe_eig({K{1:2},Case.T,model.DOF},[6 20 0]);% Non rotating modes
 def2=fe_eig({K{1},SE.K{4},Case.T,model.DOF},[6 20 0]); % Rotating mode shapes
 [def.data def2.data]

Note that the rotation speed can also be specified using a stack entry model=stack_set(model, 'info', 'Omega',[0 0 1000]).

Build ...#

model=fe_cyclic('build nsec epsl len',model,'LeftNodeSelect') adds a cyclic symmetry entry in the model case. It automatically rotates the nodes selected with LeftNodeSelect by 2π/nsec and finds the corresponding nodes on the other sector face. The default for LeftNodeSelect is 'GroupAll' which selects all nodes.

The alternate command model=fe_cyclic('build nsec epsl len -intersect',model,'LeftNodeSelect') is much faster but does not implement strict node tolerancing and may thus need an adjustement of epsl to higher values.

Command options are

  • nsec is the optional number of sectors. An automatic determination of the number of angular sectors is implemented from the angle between the left and right interface nodes with the minimum radius. This guess may fail in some situtations so that the argument may be necessary.
  • nsec=-1 is used for periodic structures and you should then provide the translation step. For periodic solutions, model=fe_cyclic('build -1 tx ty tz epsl len -intersect',model,'LeftNodeSelect') specifies 3 components for the spatial periodicity.
  • Fix will adjust node positions to make the left and right nodes sets match exactly.
  • epsllen gives the tolerance for edge node matching.
  • -equal can be used to build a simple periodicity condition for use outside of fe_cyclic. This option is not relevant for cyclic symmetry.
  • -ByMat is used to allow matching by MatId which allows for proper matching of coincident nodes.
model=demosdt('demo sector 5');
cf.model=fe_cyclic('build epsl 1e-6',model);

LoadCentrifugal#

The command is used to build centrifugal loads based on an info,Omega stack entry in the form

data=struct('data',[0 0 1000],'unit','RPM');
model=stack_set(model,'info','Omega',data);
model=fe_cyclic('LoadCentrifugal',model);

Eig#

def=fe_cyclic('eig ndiam',model,EigOpt) computes ndiam diameter modes using the cyclic symmetry assumption. For ndiam>0 these modes are complex to account for the inter-sector phase shifts. EigOpt are standard options passed to fe_eig.

This example computes the two diameter modes of a three bladed disk also used in the d_cms2 demo.

  model=demosdt('demo sector');
  model=fe_cyclic('build 3',model,'groupall');
  fe_case(model,'info')
  def=fe_cyclic('eig 2',model,[6 20 0 11]);
  fe_cyclic('display 3',model,def)

The basic functionality of this command is significantly extended in fe_cyclicb ShaftEig that is part of the SDT/Rotor toolbox.

Omega[,Group,GroupSet]#

Handling of dynamic rotating bodies. Warning At the moment only one rotation vector can be defined. It can either be applied to the whole model or to specified groups. At low level, information is located in the info,Omega entry of an SDT model. This entry is a structure with fields

  • .data provides the angular rotation vector whose norm is the angular velocity, defining the rotation axis.
  • .unit provies the unit system associated to the amplitude, eitherrad/s or RPM.
  • .group (optional) defines the model groups affected by the rotation, if omitted or left empty the whole model is affected.
  • .orig (optional) defines the origin rotation (a point of the axis).

Command Omega provides the current data associated to a model.
[omega,rot,data]=fe_cyclic('Omega',model);
model is a standard SDT model. The outputs are omega the rotation vector, rot the rotation matrix, and data a reconstructed info,Omega stack entry based on the current state.

Commands OmegaGroup provides tools for definition of models with specific rotor areas.

  • OmegaGroupSet provides an integrated definition forcing groups to be reset to conform with any FindElt selection. The specific group assignment is required due to low level assembly implementations.
    model=fe_cyclic('OmegaGroupSet',model,list);
    Input model is a standard SDT model, list is a three column cell-array with as many lines as declarations following the format {FindEltStr, Amplitude, Axis, Orig;...} respectively providing an element selection string, the angular velocity amplitude (scalar), the rotation axis (only the direction is used here), nx,ny,nz, and an origin point of the rotation axis ox,oy,oz. data can be directly placed as a stack entry named info,OmegaData in the model. The last column can be omitted, in which case the origin considered is the global frame one. At the moment all rotation axes and amplitudes must be the same for all lines. The output model is then a model with separated groups for (one for each element type) affected to the rotation and with a new stack entry info,Omega. Command option First will force the new groups to be the first ones in the model.
  • OmegaGroup is a lower level command without group modification.
    model=fe_cyclic('OmegaGroup',model,sel,data);
    Input model is a standard SDT model, sel is an element selection string, data is the omega structure with fields .data as defined at this command header.

See also

fe_cyclicb