SDT-rotor         Contents     Functions         Previous Next     PDF Index

3.5  Solvers for models with cyclic symmetry

The SDT/Rotor module contains

3.5.1  Static response

Resolution of static responses is performed using fe_cyclicb ShaftSolve. You should be aware, that non-linear static iterations may fail to converge if you have rigid body modes in your system. In the example below, this is the reason for fixing the axial motion of point 136 in disk1 and using the -FixTan which adds a tangential translation constraint on the first disk.

 if 1==1 % One disk case
  if ishandle(2);delete(2);end
  cf=demo_cyclic('testrotor 7 -blade -cf 2');
  Sel={'disk1','groupall'};
 else % Two disk case
  cf=demo_cyclic('testrotor 7 10 -blade -cf 2 reset');
  Sel={'','EltName SE';
       'disk1(1:2)','groupall';'disk2(1:3)','groupall'};
 end
 cf.Stack{'disk1'}=fe_case(cf.Stack{'disk1'},'FixDof','Axial',136.03);

 % Linear static response 
 cf.Stack{'info','Omega'}=struct('data',250,'unit','RPM');
 d0=fe_cyclicb('shaftsolvestatic 0 -FixTan',cf.mdl) 
 d_rotor('viewMises');

 % Non-linear static response
 cf.Stack{'info','Omega'}=struct('data',250,'unit','RPM');
 d0=fe_cyclicb('shaftsolvestatic 0 -FixTan -nlstep 1e-10',cf.mdl) 
 fe_cyclicb('displaySel',cf,d0,Sel)
 fecom('ColorDataEvalRadZ')

XXX example with thermal loading xxx

Example with temperature dependent properties.

3.5.2  Single stage mode computations

As a first example one will consider computations of a single disk using mono harmonic solutions

Call shaftTeig in fe_cyclicballows to compute the specified mono-harmonic normal modes.

Mono-harmonic normal modes are recovered to the rotor with the help from command shaftdispay. If command option sel is specified and a selection of elements is provided, the shapes are recovered to that selection only. Selections are cell arrays with the typical entry Sel={'disk1',sel1} where sel1 is either a string (to select a subset of elements in the true mesh) or a list of elements (to build a reduced viewing mesh).

 % Model Initialization
 cf=demo_cyclic('testrotor 7 -blade -cf 2 reset');

 % Mono-harmonic Solutions
 model=stack_set(cf.mdl,'info','EigOpt',[5 5 -1e3 11 1e-8]);
 def=fe_cyclicb('shaft Teig 0 5',model);

 % partial display and computation of strain energy
 Sel={'disk1','withnode {r<130}'};
 fe_cyclicb('Displaysel',cf,def,Sel,'enerkdens');
 if 1==2 % total display if needed
  cf.sel='groupall';cf.def=fe_cyclicb('Display',cf,def);
 end

 cf.Stack{'info','StressCritFcn'}='fe_cyclicb(''StressRR'');'
 [dfull,STRESS]=fe_cyclicb('Displaysel',cf,def,Sel,'stress-gstate');
 z=STRESS.GroupInfo{1,5};figure(1);plot(squeeze(z.Y(1,1,:,7)))

This will be extended to full disk computations in section ??.

3.5.3  Multi-stage harmonic mode computations

Call shaftTeig in fe_cyclicb allow to compute the specified mono-harmonic solutions (multi-stage solutions for which disks share the same Fourier harmonic coefficient δ) in a single job.

Mono-harmonic eigensolutions are recovered using Dispay. If command option sel is specified and a selection of elements is provided, the shapes are recovered to that selection only. Selections are cell arrays with the typical entries:

In the same fashion, mono-harmonic static responses are returned by ShaftSolveStatic. This is of particular interest to compute the static deformation under the centrifugal loading (known to have a Fourier harmonic coefficient of δ=0) and built with command LoadCentrifugal within fe_cyclic.

 % Model Initialization
 cf=demo_cyclic('testrotor 7 10 -blade -cf 2');

 % Mono-harmonic Solutions
 model=stack_set(cf.mdl.GetData,'info','EigOpt',[5 5 -1e3 11 1e-8]);
 def=fe_cyclicb('shaft Teig 0 2',model);
 demo_cyclic('RefcheckDisk710',def) % non regression check
 cf.Stack{'disk1'}=fe_case(cf.Stack{'disk1'},'park','blade','innode{r>=200}');
 Curve=fe_cyclicb('fourier 1:13 -mono -egyfrac',cf,def); % check energies
 iiplot(Curve);colormap(flipud(hot));

 cf.def=fe_cyclicb('Display',cf,def);

 % static responses : sdtweb('freqcyclic#cyclic_static') 
 model=stack_set(model,'info','Omega',struct('data',1000,'unit','RPM'));
 model=stack_set(model,'curve','StaticState', ...
   fe_cyclicb('shaftsolvestatic 0',model)); 

 fe_cyclicb('DisplayFirst',model, ...
   stack_get(model,'curve','StaticState','get'));
 d_rotor('viewradz')

 % Pre-stressed modes
 dp=fe_cyclicb('shaft Teig 0 2',model);
 [def.data dp.data]

After full rotor assembly restitution is performed using _SeRestit.

3.5.4  Campbell diagrams

First example of the beam with single disk

 % Model Initialization
 model2D=rotor2d('test simpledisk -back');
 cf=feplot(rotor2d('buildFrom2D',model2D));
 SE=cf.Stack{'disk1'}; % enforce boundary cond. on sector and assemble
 SE=fe_case(SE,'FixDof','Base','z==1.01'); cf.Stack{'disk1'}=SE; 

 % Compute matrix coefficients for a multi-stage rotor
 range=struct('data',[0 0 1; 0 0 1000/2/pi*60],'unit','RPM');
 fe_cyclicb('polyassemble -noT',cf,range);

 % Now run a mono-harmonic computation returning reduced model
 cf.Stack{'info','Omega'}=struct('data',range.data(1,:),'unit','RPM');
 cf.Stack{'info','EigOpt'}=[5 20 0]; % define eigenvalue options
 MVR=fe_cyclicb('shafteig 1 -ReAssemble 2 -NoN -buildMVR',cf);
 MVR.Stack{end}(end+[-1:0],4)={'1';'0'};  % skip problem with geometric softening

rc=struct('data',linspace(0,8000*2*pi,50),'unit','RPM');
hist=fe_rotor('Campbell',MVR,rc);
fe_rotor('plotCampbell',hist,struct('fig',100,'axProp',{{'ylim',[0 250]}}))

Another example will be needed to treating the multi-stage case. This example needs further validation and rewrite.

 % Model Initialization
 model=demo_cyclic('testrotor 7 10 -blade');
 cf=feplot(model);
 
 % Compute matrix coefficients for a multi-stage rotor
 range=struct('data',[0 0 1;0 0 800;0 0 1600],'unit','RPM');
 % Assembling in the feplot figure, allows memory offload
 model=fe_cyclicb('shaftRimAsSe',model); % Needed for PolyAssemble
 fe_cyclicb('polyassemble -noT',cf,range);

 % Now run a mono-harmonic multi-speed computation
 cf.Stack{'info','Omega'}=struct('data',range.data(1,:),'unit','RPM');
 cf.Stack{'info','EigOpt'}=[5 20 -1e3]; % define eigenvalue options
 MVR=fe_cyclicb('shafteig 1 -ReAssemble 2 -NoN -buildMVR',cf);

 %MVR.Stack{end}(end+[-2:0],4)={'1';'0';'0'};  % skip problem with geometric softening

 rc=struct('data',linspace(1,8000,50),'unit','RPM');
 hist=fe_rotor('Campbell',MVR,rc);
 fe_rotor('plotCampbell',hist,struct('fig',100,'axProp',{{'ylim',[0 3e3]}}))

 %Sel={'disk1','groupall';'disk2','groupall'};
 %fe_cyclicb('Displaysel',cf,def,Sel)

3.5.5  Complex modes

Need documentation here.

3.5.6  Forced frequency response to unbalanced load

Need documentation here.


©1991-2023 by SDTools
Previous Up Next