SDT-rotor Contents   Functions      PDF Index |
The SDT/Rotor module contains
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.
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 ??.
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.
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)
Need documentation here.
Need documentation here.