SDT-rotor         Contents     Functions         Previous Next     PDF Index

fe_cyclicb Mesh

Purpose

MeshAddRim

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

MeshRim

This command is used to mesh rims as volumes or penalty springs.

MeshSecAddNode

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

  1. automatically deals with the specified direction of measure (column 'DirSpec') by detecting the normals, computing vectors from the latter, etc.,
  2. builds the observation matrix at each sensor (cta entries) that relates the DOF of the matched surface to the observation at this sensor along the measurement direction.
 % 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};

MeshSensMatch

supports topology correlation for a SensDof entry defined on a multi-stage shaft model.

MeshSurfSet

generates standard surface sets for a sector.

MeshCylSurf

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).

MeshFixTheta

provides handling utilities for slanted sectors, see section 3.1.5.

MeshFixRadial

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"');

©1991-2023 by SDTools
Previous Up Next