SDT-rotor Contents   Functions      PDF Index |
Supported computations in fe_rotor, are
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));
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);
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')
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