SDT-rotor         Contents     Functions         Previous Next     PDF Index

fe_cyclicb

Purpose

Support for advanced cyclic symmetry computations.

Description

fe_cyclicb groups advanced commands used to build and manipulate reduced order models of single symmetric structures and their assemblies. For more details on the associated theory you can refer to [8].

Rotor Construction

DiskFromSector

This command builds a disk/rotor model from (a) physical sector model(s). Shafts can be generated by combining multiple calls to disk from sector. Once, disks are combine, their connection trough rim models is described in section 3.1.6.

Command DiskFromSector also handles the construction of the cyclic sector models. Cyclic symmetry information can be already given in the sector model (calls to fe_cyclic('build') done beforehand) or done in the command. In the later case, an optional epsl tol can be declared so that it is propagated to the subsequent call to fe_cyclic('build epsl tol',...), where tol is the desired tolerance for left-right interface node matching.

The example below demonstrates the capability of the function for two disks with 7 and 10 blades respectively.

 cf=demo_cyclic('buildstep0');
 sector1=cf.Stack{'disk1'};
 sector2=cf.Stack{'disk2'};

 % build disk1 from sector1
 model=fe_cyclicb('DiskFromSector epsl 1e-6',[],sector1);
 % build disk2 from sector2 and append to disk1
 model=fe_cyclicb('DiskFromSector epsl 1e-6',model,sector2);
 fe_cyclicb('DisplayFirst',model) % Avoids full display for large models

In cases when cf already contains one sector per disk, the shaft model can be created in a single operation with the command fe_cyclicb('diskfromsector',[],cf,{'sel_disk1','sel_disk2',...}); where sel_diski selects the sector model of disk i. The example below illustrate this by putting the two sector models into a single one prior to the rotor assembly.

 cf=demo_cyclic('buildstep0'); % See sdtweb demo_cyclic('Step0')
 sectors=cf.Stack{'disk1'}; % Build a model with two sectors
 sectors=feutil('addtest',sectors,cf.Stack{'disk2'});
 sectors.Stack={};
 cf.model=sectors;

 % build rotor from sectors and auto display
 fe_cyclicb('DiskFromSector epsl 1e-3',cf,{'group1:2','group3:4'});

During the build process, sectors are automatically renumbered so that node numbers are left interface, interior, right interface (in order matching that of the left interface). The renumbering can be forced with the -renumber option. This allows to have nodal overlap between the superelements of two adjacent sectors. The command then adds a mpc,diski_end multiple point constraint to account for the fact that the disk is closed circumferentially.

Mesh

Meshing utilities See fe_cyclicb Mesh.

ConnectionRing

ConnectionRing builds a "ring connection" where the structure is fixed axially and radially on a set of nodes and first point only in tangential direction

Display

Display commands group tools to build mesh views specific to disk assemblies.

Mono-harmonic solutions

These commands apply to sector models used to compute mono-harmonic eigensolutions.

ShaftEig,ShaftTEig,ShaftSolve

These commands compute mono-harmonic solutions with specified Fourier harmonics (classical cyclic solution for single stage models). For a tutorial on generating the proper models, see section 3.1.6. For the associated theory, please refer to [9].

The calling format is def=fe_cyclicb('shaft Teig delta_list',model);. ShatTeig accepts multiple diameters in the delta_list and packages individual calls that to ShatTeig. For a disk example section 3.5.2.

The main command options are

ShaftSeAssemble

fe_cyclicb('ShaftSeAssemble -force',cf.mdl,fname) is used to assemble superelement matrices of each of the disk* superelements. If a curve,StaticState is defined in the model stack, fe_cyclic assemble is used, otherwise SE=fe_mknl(SE,'NoT') is called.

If the -force option is omitted an attempt to reload the variable Stack_SE_diski from the file is first made and assembly is only performed if that variable does not contain the matrices.

If a mdl.Dbfile field is defined, the argument fname may be omitted.

-reset xxx.

Deflist,Def ...

Cyclic symmetry results can be stored in three main forms

DefDouble, DefLong, DefBasic commands allow transformations between formats while handling out-of-core files properly.

When reading results, def=fe_cyclicb('DefList','root'); reads all root*.mat files and combines the vectors into a single deformation set in the double vector format. Selection of diameters and frequency range during the read process is peformed using

RO=struct('Fmax',8000,'diams',[0 1 5 18]);
d1=fe_cyclicb('DefList','root',RO);

Specific cases require to sort the output vectors according to the list of diameters specified in the .diams field, especially when one wants to put fixed interfaces solutions first for reduction purposes. The command to use becomes DefListSortDiam.

Full rotor SE model

ShaftPrep

fe_cyclicb('ShaftPrep',cf,def); generates reduced sector super-elements.

Each bladed sector is divided into two regions. A first super-element is attached to the elements with the left interface nodes, it is called the inter-sector super-element. A second one is attached to the remaining elements to form the sector super-element.

A reduced kinematic subspace of the sector super-element (with the definition above) is built from def, disk by disk.

Vectors are first sorted with respect to their contribution to the considered disk if the -svdtruncate option is used.

Then, they are sorted according to their contribution to subsets of physical DOF of the initial sector. If one specifies -mseq 0 (default call), these subsets are

  1. DOFs within either the inter-sector interface (right interface) or the inter-stage interface(s),
  2. remaining DOFs (left interface and interior DOF).

If -mseq 1 is enforced, these subsets are

  1. DOFs common to the inter-stage and inter-sector interface(s),
  2. DOFs within the inter-sector interface (right interface),
  3. DOFs within the inter-stage interfaces,
  4. remaining DOFs (left interface and interior DOFs).

Both these sortings make the subsets of vectors linearly independent from each other. They require that fixed edge solutions are stored at the beginning in def.

The following step is to make the vectors linearly independent within each set. Vectors in sets (1.), (2.) and (4.), when applicable, are processed with an Iterative Maximum Sequence Algorithm ([10]). Vectors in set (3.), when applicable, are processed with a Singular Value Decomposition.

See Ref. [5] for details.

-handle option controls whether the resulting bases are stored in memory or on the disk.

-norestit suppresses the explicit construction of the Restit variable, normally stored in cf.mdl.Stack.

Once the sector superelements have been generated, the disk model is assembled using the subsequent fesuper('fassemble',cf) call which generates the reduced disk model in cf.Stack{'SE','MVR'}.

A compact example is provided below. A fully developed example can be found in demo_cyclic ShaftMulti.

 [cf,def]=demo_cyclic('buildstep1');
 fe_cyclicb('ShaftPrep -svdtruncate -mseq1 -norestit',cf,def);
 fesuper('fassemble',cf);

ShaftLoad,ShaftSELoad

fe_cyclicb('ShaftLoadMulti',cf,data); generates a reduced mono-harmonic load for each disk specified in data. It is a cell array whose a typical line is {'diski',def_i,delta_i} where for each disk i, the shape def_i and harmonic coefficient delta_i are specified.

fe_cyclicb('ShaftSELoad',cf,def); generates a reduced load from its physical counterpart. In practice, it is used for very specific loading cases, e.g. single DOF load or random load.

Developed examples are presented in demo_cyclic ShaftMulti.

% define model
cf=demo_cyclic('buildstep4');

% build the excitation on first all sectors, with specified
% diameters 3 on disk1 and 4 on disk 2
data={'disk1',cf.Stack{'disk1'}.Stack{'Enforce_mode_7'},3;
      'disk2',cf.Stack{'disk2'}.Stack{'Enforce_mode_7'},4
      'disk1l',struct('def',1,'DOF',cf.Stack{'disk1l'}.Elt(2,1)+.01),3;
      'disk2l',struct('def',1,'DOF',cf.Stack{'disk2l'}.Elt(2,1)+.01),4};
def34=fe_cyclicb('ShaftLoadMulti',cf,data); 
def34.def=sum(def34.def,2); % one column in def34.def per row in data
def34.data=[0 0];
fe_cyclicb('fourier 1 -red -cf 1',cf,def34); % checkout shape

% now keep the same shapes but force delta=0 on both disks
data(:,3)={0};
def00=fe_cyclicb('ShaftLoadMulti',cf,data);
def00.def=sum(def00.def,2); % one column in def00.def per row in data
def00.data=[0 0];
fe_cyclicb('fourier 1 -red -cf 1',cf,def00); % checkout shape

% now try a random load
r1=fesuper('fnode',cf.mdl);
r1=[r1(:,1)'+.01;r1(:,1)'+.02;r1(:,1)'+.03];
defrnd=struct('DOF',r1(:),'def',[]);
defrnd.def=randn(length(defrnd.DOF),1);
defrnd=fe_cyclicb('ShaftSELoad',cf,defrnd);
defrnd.data=[0 0];
fe_cyclicb('fourier 1 -red -cf 1',cf,defrnd); % checkout shape

% now consider a physical load on first sector of disk 1
r1=fesuper('fnode',cf.mdl);
r1=[r1(:,1)'+.01;r1(:,1)'+.02;r1(:,1)'+.03];
defsp=struct('DOF',r1(:),'def',[]);
defsp.def=fe_c(defsp.DOF,1+[.01;.02;.03])'*randn(3,1);
defsp=fe_cyclicb('ShaftSELoad',cf,defsp);
defsp.data=[0 0];
fe_cyclicb('fourier 1 -red -cf 1',cf,defsp); % retrieve a Dirac's comb

ShaftFRF [, D, MS, -rest]

This command allows to build the Frequency Response Functions of a rotor model, either full or reduced. A load and a set of observation DOF have to be defined and added to the model with fe_case. The frequency range is stored in the stack as a 'info','Freq' entry.

The general call is

 
 xF=fe_cyclicb('ShaftFRFD',disk,lossfac)
 xF=fe_cyclicb('ShaftFRFD -rest',disk,lossfac,cf,sel)
 xF=fe_cyclicb('ShaftFRFMS',disk,def,damp)
 xF=fe_cyclicb('ShaftFRFMS -rest',disk,def,damp,cf,sel)

The command FRFD assembles the matrices of the model then uses them to compute the response. An optional loss factor can be specified.

The command FRFMS synthetizes the response from a set of modeshapes. A damping ratio for all modes can be specified.

The option -rest restores the response computed on the reduced model to a given selection of physical DOF. Without selection, the response is restored to the whole physical DOF set. This option must be disabled when dealing with a full rotor model.

The example developed in demo_cyclic ShaftMulti builds the sythetized response of a reduced rotor model to a random excitation.

% define model
[cf,load,def]=demo_cyclic('buildstep5');

% Compute the response to the random excitation
mdl=fe_case(cf.Stack('mvr'),'dofload','Load',load);
mdl=stack_set(mdl,'info','Freq',linspace(900,2000,2201));
xF=fe_cyclicb('shaft frfms',mdl,def,.001); 

% select where to restore (upper blade corner)
Sel1={'','eltname SE';'disk1','selface & withnode{NodeId 154}'};
Sel1=fesuper('SeBuildSel -initrot',cf,Sel1);
Sel2={'','eltname SE';'disk2','selface & withnode{NodeId 154}'};
Sel2=fesuper('SeBuildSel -initrot',cf,Sel2);
% ... and do restore
xF1=fesuper('SeDef',Sel1.cna{1},xF);
xF2=fesuper('SeDef',Sel2.cna{1},xF);

% plot responses
ci=iiplot(3);
XF=iicom(ci,'curveXF');
XF('Disk1')=struct('w',xF.data,'xf',xF1.def','dof',xF1.DOF);
XF('Disk2')=struct('w',xF.data,'xf',xF2.def','dof',xF2.DOF);
iicom('subMagPha')
iicom(ci,'IIxOnly',{'Disk1','Disk2'});
ii_plp(def.data);

Fourier [,ind], ... [-phys, -mono, -red, -egy, -egyfrac, -sortbyd]

This command allows to perform a 3D Fourier analysis of given modeshapes. The maximum norm of each harmonic is plotted against the harmonic coefficient. The plot is different when dealing with a single modeshape or a set of modeshapes.

Accepted options are

[cf,def]=demo_cyclic('buildstep1'); % sdtweb demo_cyclic('step1')

Curve=fe_cyclicb('fourier 1:50 -mono -egyfrac',cf,...
           fe_def('subdef',def,def.data(:,2)~=-1));
'xxx'%fe_cyclicb('fourier -mono -egyfrac -cf 3',Curve);
%  sdtweb demo_cyclic('step4') multi-harmonic analysis
[cf,def]=demo_cyclic('buildstep4'); %
fe_cyclicb('fourier 7:25 -red -egyfrac -cf 11',cf,def);
fe_cyclicb('fourier 7:25 -red -egyfrac -sortbyd -cf 13',cf,def);

See also

fe_cyclic


©1991-2023 by SDTools
Previous Up Next