SDT-rotor         Contents     Functions         Previous Next     PDF Index

3.4  Frequency domain analysis, full model

Supported computations in fe_rotor, are

3.4.1  Campbell diagrams, full model

Campbell diagrams are implemented in the fe_rotor Campbell command.

model=d_rotor('TestShaftDiskMdl');
fe_rotor('Campbell -crit -cf100',model,linspace(0,8000,100));
figure(100);set(gca,'ylim',[0 200])

Command options are -cfi to define figure where to plot, -crit to compute critical speeds, -stability to display a stability diagram (damping-rotation speed).

The following is an example of a simple disk rotating at the end of a long rod. For other details see rotor2d.

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

 % automated building of Campbell diagram : XXX NEED REVISION
 RunOpt=struct('targ',1, ...
               'Range',linspace(0,1,30));
 cf.def=rotor2d('teig',cf,RunOpt);  
 d1=fe_def('subdof',cf.def,feutil('findnode r==0',SE));

3.4.2  Blade with centrifugal stiffening

One considers stiffness matrices that are dependent on the rotation speed. Assuming that a second order polynomial representation is sufficient, one can build a vector of weigthing coefficients

 
    (3.1)

Such that the stiffness at rotation speed Ω is approximated by

 
    (3.2)

The zCoef uses velocity Omega in rad/s.

This example now treats computation at variable rotation speeds

 % Model Initialization
 model=demo_cyclic('testblade');cf=feplot(model);
 % Compute matrix coefficients for a multi-stage rotor
 range=struct('data',[0 0 1;0 0 8e3;0 0 16e3],'unit','RPM');
 % Assembling in the feplot figure, allows memory offload
 fe_cyclicb('polyassemble -noT',cf,range);
 X=struct('data',linspace(0,16e3,10),'unit','RPM');
 fe_rotor('Campbell -cf1',cf.mdl,X);set(gca,'ylim',[0 3000])

Now a more standard non-linear static computation for a range or rotation speeds.

 model=demo_cyclic('testblade');cf=feplot(model);
 r2=linspace(1e3,15e3,20)';
 range=struct('data',r2*[0 0 1],'unit','RPM');
 model=stack_set(model,'info','Omega',range);
 model=fe_cyclic('LoadCentrifugal',model)
 opt=fe_simul('NLStaticOpt');
 opt.MaxIter=100;opt.JacobianUpdate=1; 
 def=fe_time(opt,model);def.data(:,1)=range.data(:,3); 
 def.LabFcn='sprintf(''%.1f RPM'',def.data(ch,1))';
 d_rotor('viewMises',cf,def);

3.4.3  Complex modes

To compute complex modes at a given rotation speed, one can use fe_rotor Campbell command with option -cmode. Complexe modes are the computed using a real mode basis projection. Mode options should be stored in the 'info' 'EigOpt' model stack entry. The complexe modes are return for the first rotation speed given as input argument.
Once modes are computed, you can display them in feplot. The fecom ShowTraj command displays trajectories. For example:

 model=d_rotor('TestShaftDiskMdl')
 model=fe_caseg('assemble -SE -secdof -matdes 2 1 70',model); % assemble model matrices
 def=fe_rotor('Campbell -cmode -cf100',model,100); % C modes at 100 RPM.
 cf=feplot(model,def); fecom('view3');iimouse('resetvie');
 fecom(cf,'ShowTraj')

Figure 3.6: Complex mode and trajectory.

3.4.4  Forced frequency response to unbalanced load

One can compute the frequency response to an unbalanced load, or to an asynchronous load using fe_rotor RotatingLoad and ForcedResponse command (see sdtweb('fe_rotor') for more details). Definition of the load is different in local rotating frame or global fixed frame. One can see the validation part of this document for various examples. Following example computes the response to an unbalanced mass on the 1D rotor model:

 model=d_rotor('TestShaftDiskMdl')
 model=fe_caseg('assemble -SE -secdof -matdes 2 1 70',model); % assemble model matrices
 mb=1e-4; db=0.15; % mass, distance to axis
 om=linspace(0,6000,201); % RPM
 model=fe_rotor(sprintf('RotatingLoad 2 %.15g -90 2',mb*db),model); % unbalanced mass
 r1=struct('Omega',om/60*2*pi,'w',om/60*2*pi); % Range
 model=stack_set(model,'info','Range',r1);
 R1=fe_rotor('ForcedResponse',model); % compute forced response
 iiplot(R1) % plot response

©1991-2023 by SDTools
Previous Up Next