Contents     Functions     Index     Previous Next     PDF

6.9  Data structure reference



6.9.1  Dynamic stiffness coefficients zCoefFcn

The normal mode of operation is to display your full model in an feplot figure. The first step is to define a set of parameters, which is used to decompose the full model matrix in a linear combination. The elements are grouped in non overlapping sets, indexed m, and using the fact that element stiffness depend linearly on the considered moduli, one can represent the dynamic stiffness matrix of the parametrized structure as a linear combination of constant matrices
  [Z(Gm,s)]=s2 [M]+[Ke]+
 
m
pm[Kvm]     (6.29)

By convention, Ke represents the stiffness of all elements not in any other set. While the architecture is fully compatible there is no simplified mechanism to parametrize the mass.

The full contant matrices M,Ke,Kvm can be assembled using fevisco MakeModel or are generated within NASTRAN. Reduced models can be generated with fe2xf direct commands, or with a NASTRAN DMAP step12, matrices are stored in the model stack as an 'SE','MVR' entry and information on how to build the coefficients of the linear combination in 'info','zCoef' viewed in the figure below.

The columns of the cf.Stack{'info','zCoef'} cell array, which can be modified with the feplot interface, give The problems handled by fe2xf and computations at multiple frequencies and design points. Frequencies are either stored in the model using a call of the form model=stack_set(model,'info','Freq',w_hertz_colum) or given explicitly as an argument (the unit is then rad/s).

Design points (temperatures, optimization points, ...) are stored as rows of the info,Range entry, see fevisco Range for generation.

When computing a response, fe2xf zCoef starts by putting frequencies in a local variable w (which by convention is always in rd/s), and the current design point (row of 'info','Range' entry or row of its .val field if it exists) in a local variable par. zCoef2:end,4 is then evaluated to generate weighting coefficients zCoef giving the weighting needed to assemble the dynamic stiffness matrix (6.29). For example in a parametric analysis, where the coefficient par(1) stored in the first column of Range. One defines the ratio of current stiffness to nominal Kvcurrent=par(1)*Kv(nominal) as follows
% external to fexf
 zCoef={'Klab','mCoef','zCoef0','zCoefFcn';
        'M'    1       0        '-w.^2';
        'Ke'   0       1        1+i*fe_def('DefEta',[]);
        'Kv'   0       1        'par(1)'};
model=struct('K',{cell(1,3)});
model=stack_set(model,'info','zCoef',zCoef);
model=stack_set(model,'info','Range',[1;2;3]);

%Within fe2xf
w=[1:10]'*2*pi;  % frequencies in rad/s
model.Range=stack_get(model,'info','Range','getdata');
for jPar=1:size(model.Range,1)
 zCoef=fe2xf('zcoef',model,w,model.Range(jPar,:));
 disp(zCoef)
  % some work gets done here ... 
end
To use a viscoelastic material, you can simply declare it using an AddMat command and use a '_visc' entry in the zCoefFcn column (the stack name for the material and the zCoef matrix name must match).
cf=fevisco('testplateLoadMV feplot');
% define material with a unit conversion
mat=m_visco('convert INSI',m_visco('database Soundcoat-DYAD609'));
%                 MatId for original, name of parameter
cf.mdl = fevisco('addmat 101',cf.mdl,'Constrained 101',mat);
cf.Stack{'zCoef'}(4,4)={'_visc'};
% Third coefficient will use material with name 
cf.Stack{'zCoef'}{4,1}
fe2xf('zcoef',cf,500:10:4000,5);
At time of computation, the matrix coefficient in  (6.29) is found as Gm(s,T,0)/Gm0 where the reference modulus is found in the cf.Stack{'Constraint 101'}.pl entry. For such materials one assumes Poisson's ratio to be real and the considered viscoelastic material to have its stiffness dominated by either shear or compression. Based on this assumption, one considers the frequency dependence of either the shear or Young's modulus. The error associated to neglecting the true variation of other moduli is assumed to be negligible (methodologies to treat cases where this is not true are not addressed here).

6.9.2  Format reference

A viscoelastic model (see section 6.10.3 for the typical generation procedure), stores the information needed to compute (6.29) in a data structure (generic type 1 superelement handled by fe_super) with the following fields


.Opt Options characterizing the model. In particular the second row describes the type of each matrix in model.K (1 for stiffness, 2 for mass, ... )
.K a cell array of matrices giving the constant matrices in (6.29). One normally uses M,Ke,Kvm, .... These matrices should be real and only the combination coefficients should be complex.
.Klab a cell array giving a labels for matrices in the .K field.
.kd optional static preconditioner (nominally equal to ofact(k0)) use to compute static response based on a known residue
.DOF DOF definition vector associated with matrices in .K
.Mt a cell array of data structures describing viscoelastic materials. This cell array is generated automatically by fevisco MakeModel but can also be built with direct calls to m_visco. For example model.Mt={m_visco('database ISD112')}.
.Stack standard model stack where one defines viscoelastic materials (see fevisco AddMat), frequencies, zCoef, reduced model, range (see fevisco Range) ... as well as the case that contains descriptions for loads, sensors, parameters, ...

Additional fields used than may be used by reduced models are


.br input shape matrix for reduced model
.cr input shape matrix for reduced model

6.9.3  Input definitions

Inputs at DOFs are declared as fe_case entries.

If you have stored full basis vectors when building a reduced model (MVR.TR field), you may often be interested in redefining your inputs. To do so, you can use fe_case commands to define your loads, and MVR=fe_sens('br&lab',MVR,model), to redefine the reduced inputs accordingly.

6.9.4  Sensor definitions

MV=fevisco('testplate');
MV=fe_case(MV,'SensDof','BasicAtDof',[1;246]+.03);
% Surface velocity
'xxx'
% 4 strain sensors along a line
pos=linspace(.5,1,4)';pos(:,2)=.75; pos(:,3)=.006;
data=struct('Node',pos,'dir',ones(size(pos,1),1)*[1 0 0]);
MV=fe_case(MV,'SensStrain','ShearInLayer',data)
Sens=fe_case(MV,'sens')
If you have stored full basis vectors when building a reduced model (MVR.TR field), you may often be interested in redefining your sensors. To do so, you can use the fe_case commands to set your sensors, and fe_sens('cr&lab',cf) to redefine the reduced sensors accordingly (this calls Sens=fe_case('sens',model) to generate the data structure combining the observation equations of all your sensors).
 [MV,cf]=fevisco('TestPlateLoadMVR');cf.Stack{'MVR'}
 % redefine sensors
 i1=feutil('findnode x==0 & z==0 epsl1e-3',MV);
 MV=fe_case(MV,'SensDof','Sensors',i1+.03);
 % reset reduced sensor representation
 fe_sens('cr&lab',cf);cf.Stack{'MVR'}

6.9.5  Response post-processing options

For a given reduced (or full) model you may want to post-process the computed frequency responses before saving them. This is in particular important to analyze responses on large sensor sets (panel velocities, stresses, ...) which would require a lot of storage space if saved at all frequencies.

The list MifDes xxx

©1991-2007 by SDTools
Previous Up Next