SDT-rotor Contents   Functions      PDF Index |
Purpose
MeshAddRim deals with already existing inter-disk volumic rings. It renumbers their model to be integrated with the already defined disk super-elements. Note that adjusting the geometric tolerance with option epsl val can be important.
cf=demo_cyclic('buildstep0');% See sdtweb('demo_cyclic.m#Step0') % Extract rim model into mo1 (would come from other reading) [cf.mdl.Elt,mo1.Elt]=feutil('RemoveElt EltName~=SE',cf.mdl); mo1.Node=cf.mdl.Node;mo1.Node=feutil('GetnodeGroupAll',mo1); cf.mdl.Node=[]; % Combine mo1 (rim) and cf.mdl (disks) fe_cyclicb('MeshAddRim epsl 1e-3',cf,mo1); cf.sel='EltName~=SE';fecom('showpatch');
Other commands documented in the tutorial are
This command is used to mesh rims as volumes or penalty springs.
MeshSecAddNode [epsl espl] is used to place sensors relatively to a disk/rotor model. It uses a cell array to define sensors (see sdtweb('sensor#scell')). It first matches each sensor to a surface in a sector of a disk with an optional tolerance epsl that allows to tune the research. It then adds these surface elements to the selection. The latter serves as the input of the subsequent SensMatch call that
% Load 360 reduced shaft model, sdtweb('demo_cyclic.m#Step2') cf=demo_cyclic('buildstep2'); sensors=cf.Stack('Test').tdof; disp(sensors); % display sensor properties % match sensors [sens,sel]=fe_cyclicb('MeshSecAddNode epsl 20',cf,sensors); cf.mdl=fe_case(cf.mdl,'SensDof','Test',sens); % display sensors fecom('showpatch'); fecom(cf,'curtab Cases','Test');
The model to which the sensors are matched is made of super-elements already reduced, call to MeshSecAddNode with the supplementary input of a generalized quantity (with a list of generalized coordinates stored in .DOF) automatically builds the observation matrix that expands the generalized modeshapes to the sensors along the measurement direction.
A first application of this is to animate generalized modeshapes on the experimental wire frame as proposed in the example below.
cf=demo_cyclic('buildstep4'); def=cf.Stack('def_mvr'); % match sensors sensors=stack_get(cf.mdl,'info','Test','GetData'); [r1,sel,sens]=fe_cyclicb('MeshSecAddNode epsl 20',cf,sensors.tdof,def); % add wireframe r1.Elt=[r1.Elt zeros(size(r1.Elt,1),1);cf.Stack('WireFrame')]; r1.Elt=feutil('setgroupall egid -1',r1); cf.mdl=fe_case(cf.mdl,'SensDof','Test',r1); % animate generalized modes at sensors cf.sel(1)='groupall'; cf.sel(2)='-Test'; cf.def=struct('def',sens.cta*def.def,... 'DOF',cf.CStack('Test').tdof(:,1),... 'data',def.data); cf.o(1)={'sel 2 def 1 ch 1 ty8 scc10','edgecolor','r','linewidth',2};
A second application is to display and animate generalized response or transfer functions.
cf=demo_cyclic('buildstep6'); xF=cf.Stack('xF_mvr'); % match sensors sensors=stack_get(cf.mdl,'info','Test','GetData'); [r1,sel,sens]=fe_cyclicb('MeshSecAddNode epsl 20',cf,sensors.tdof,xF); % add wireframe r1.Elt=[r1.Elt zeros(size(r1.Elt,1),1);cf.Stack('WireFrame')]; r1.Elt=feutil('setgroupall egid -1',r1); cf.mdl=fe_case(cf.mdl,'SensDof','Test',r1); % display responses xF=cf.Stack('xF_mvr'); ci=iiplot(3);iicom(ci,'curvereset'); r1=struct('X',{{xF.data(:) sens.lab}},'Xlab',{{'Freq','DOF'}}, ... 'Y',(sens.cta*xF.def).') iicom('curveInit','Test',r1) iicom('SubMagPha'); % animate response at sensors cf.sel(1)='groupall'; cf.sel(2)='-Test'; cf.def=struct('def',sens.cta*xF.def,... 'DOF',cf.CStack('Test').tdof(:,1),... 'data',xF.data); cf.o(1)={'sel 2 def 1 ch 1 ty8 scc10','edgecolor','r','linewidth',2};
supports topology correlation for a SensDof entry defined on a multi-stage shaft model.
generates standard surface sets for a sector.
model=fe_cyclicb('MeshCylSurf epsl val',model,NodeList) makes a surface perfectly cylindrical. The node list of nodes to be used on the left edge may be omitted (it will be found automatically).
provides handling utilities for slanted sectors, see section 3.1.5.
Generates MPC constraints for using DOFs given in radial coordinates: .01 is radial, .02 tangential, .03 axial.
The following example illustrates a case where tangential motion of nodes 5 and 6 is set.
cf=demo_cyclic(sprintf('testrotor %i -cf 5',5)); cf.Stack{'disk1'}=fe_cyclicb('MeshFixRadial', ... cf.Stack{'disk1'},'radial',[5.02;6.02]); def=fe_cyclicb('shaftteig 0 1', ... stack_set(cf.mdl.GetData,'info','EigOpt',[5 3 0])) fe_cyclicb('Display',cf,def); fecom('ColorDataEvalTanZ -ColorBarTitle"TanZ"');