SDT-visc
Contents  
Functions  
 ![]() ![]() |
Purpose
Main function of SDT/ZParam for reduced parametric dynamic analysis This function is part of the viscoelastic tools.
The other purpose is the direct computation of frequency response functions.
Syntax
cases = fe2xf('command',model,case);
Description
This command supports direct frequency response computations and post-processing for reduced models. For a given input, the response is fully characterized by the response at DOFs {q} (state vector in control theory), which dependence on the load is defined by an evolution equation (equation of dynamics in mechanics)
(5.1) |
Unit inputs [b] describe the spatial content of loads (see more details in section ??). The frequency content is described at each frequency by specifying an input {u} or the associated covariance matrix Σuu. Cases with enforced displacements require a few additional manipulations discussed in ?? but leads to similar equation forms.
Outputs are characterized by a vector {y} that is supposed to be linearly related to DOFs through an observation equation (see more details in section ??)
(5.2) |
where the y components can be translations, rotations, normal velocities, strains, ...
The first step of an analysis is to define the input shape matrix b and possibly the inputs u. The second step is to define the outputs.
fe2xf provides a fairly large set of response processing options for full and reduced models, through specification of a 'info','MifDes' entry in the model stack. This entry should contain a cell array, each row describing a response processing with {post_name,copt}. post_name is the string identifier of the post ('frf', 'svd', ...) and copt contains the options related to the post (see below). For example
MVR=fevisco('TestPlateLoadMVR'); MVR=stack_set(MVR,'info','Freq',[30:1:500]'); MVR=stack_set(MVR,'info','MifDes',{'frf',[]}); RESP=fe2xf(horzcat('frfzr -file',nas2up('tempname RESP.mat')),MVR); R1=RESP(1);R1.xf=abs(R1.xf);fe_curve('plot -fig11 ylog xtight',R1);
These low level commands are used, given a reduced model, to compute FRFs for a frequency/parameter range. The reduced model uses the standard fields used to describe parametric models (see section ??). It must at least contain the following fields .Range, .cr,.lab_out .br,.lab_in, zCoefFcn, .K.
Given a FileName, results are saved every 30 seconds to allow post-processing during the evaluation.
Without output argument, one can specify the identifier of an iiplot or feplot figure (whose stack will store results of computation) using a -cf i command option.
Accepted post-processing options given in an info,MifDes entry
(5.3) |
(5.4) |
(5.5) |
(5.6) |
(5.7) |
cf=fevisco('TestPlateLoadMVR feplot'); MV=cf.mdl; MAP=feutil('getnormalnode map',cf.mdl); ind=find(ismember(MAP.ID,feutil('getnode MatId1',cf.mdl))); MAP.ID=MAP.ID(ind); MAP.normal=MAP.normal(ind,:); tdof=[MAP.ID MAP.ID MAP.normal]; cf.mdl=fe_case(cf.mdl,'remove','Sensors','SensDof','Sensors',tdof); cf.Stack{'info','MifDes'}={ ... 'mean -vel',struct('group',{{'main',[1:size(tdof,1)]'}}); % mean velocity 'frf -vel',[]}; % all response i1=feutil('findnode x==0 & z==0 epsl1e-3',MV); MV=fe_case(MV,'DofLoad','Inputs',i1(1:2)+.03); fe_sens('cr&lab',cf); fe_sens('br&lab',cf) R1=fe2xf('frfzr',cf); % compare mean and frf r1=squeeze(mean(abs(R1(2).Y).^2,2)); r2=squeeze(R1(1).Y); if norm(r1./r2-1)>1e-10;error('Mismatch in mean computation');end
(5.8) |
Following example computes a set of responses
cf=fevisco('TestPlateLoadMVR feplot'); MV=cf.mdl; % redefine sensors i1=feutil('findnode x==0 & z==0 epsl1e-3',MV); MV=fe_case(MV,'SensDof','Sensors',i1+.03); MV=fe_case(MV,'DofLoad','Inputs',i1(1:2)+.03); MV=fe_case(MV,'setcurve','Inputs',{'input';'input'}); % reset reduced sensor representation fe_sens('cr&lab',cf) fe_sens('br&lab',cf) MV=stack_set(MV,'info','Freq',[30:.5:32]'); % Target frequencies % define the time-dependent load data.X{1}=linspace(0,200*1e-4,201); data.Xlab{1}=fe_curve('datatypecell','freq'); data.Y=ones(1,length(data.X{1})); MV=fe_curve(MV,'set','input',data); % define model selection for energy computation mo1=feutil('rmfield',MV.GetData,'file','wd','Opt','Stack'); mo1.Elt=feutil('selelt matid103',mo1); % define responses to be computed MV=stack_set(MV,'info','MifDes',{'frf',[]; 'svd',struct('ind',2);'svdu',1;'usvd',[]; 'frf -acc',struct('out',1:2); 'frf -vel',struct('out',2); 'frfu',[]; 'enerk',mo1;'enerm',mo1; 'mean -vel',struct('group',{{'all',[1:10]}}); 'impe',[]}); % compute responses fe2xf('frfzr',cf);
The commands fe_sens('br&lab') and fe_sens('cr&lab') are used to compute respectively the reduced load matrix br and the reduced observation matrix cr, and their associated labels. If a load is time dependent, the associated curve must be linked to it before calling fe_sens('br&lab'). However there is no need to call again fe_sens('br&lab') if the curve is changed provided that the name of the curve stays the same.
direct commands are used for direct frequency response computations. It is assumed that loads and sensors are defined using entries in the model case.
[XF,def]=fe2xf('DirectFull',model) calls a direct full order complex sparse solver. With no output argument, the FRFs are displayed in iiplot.
model is a structure array that describes the impedance of the model whose response is to be computed. It is typically generated using the fevisco MakeModel command which describes the fields used by fe2xf direct commands (see section ??).
DirectFirst builds a reduction basis containing nominal normal modes and a first order correction for damping effects. DirectFirst zCoef0 generates zCoef0 based on the actual contents of zCoef rather than the values stored in the info:zCoef stack entry.
DirectReduced assumes the model already contains a reduced model, as illustrated in section ??.
These commands are illustrated in section ??.
[xf,po]=fe2xf('frfpolesearch',rmodel,w,ind)
This low level command is used, given a reduced model, to track poles in the same range. The reduced model uses the standard fields used to describe parametric models (see section ??). It must at least contain the following fields .Range, .cr,.br, zCoefFcn, .K.
The pole tracking algorithm assumes that the modeshape is well approximated by the reduction vector with the same index.
Performance map of a single mode in the E,h plane.
Interpolation based search for dependence of poles on temperature (the FrfPoleSearch is a slower alternative). xxx example needed xxx
RO=struct('ind',1:10, ... % selected modes for output 'Temp',50:110, ... % temperatures 'Freq',logspace(log10(1000),log10(20e3),30)'); % target range of frequencies Po=fe2xf('poletemp',MV2,'Visco',RO); hist=fe2xf('PoleRange',MVR,ind); fe2xf('plotpolesearch',hist);
This command supports a parametric study on the poles of frequency invariant damped model. Variable coefficients must be defined by a zCoef stack entry. The mass column in particular should be filled correctly and matrix types should be found in model.Opt(2,:) so that the stiffness can be found by setting to zero coefficients of mass matrices in zCoef.
If the provided superlement has an nmap field with key Map:CurPar or CurParHandle defining an nmap, the pointed nmap will be set with keys Range the current DoE and jPar the current design point. This allows implicit matrices using parameter interpolation to be updated during the procedure.
Options can be specified in an option structure RR in the example below or set in the command string
Is the general interface to display pole histories. Accepted options are
If a hist.faces is defined, these are used to connect points of the parametric study.
For an example, see fe2xf PoleRange.
This command is used to generate the weighting coefficients in (??), more details are given in section ??.
model=fe2xf('zcoef -default',model); is used to analyze the model and define a default info,zCoef entry. fe2xf('zcoef',model); displays the values. If a parameter range is defined, you can specify the parameter to use with the -jpar i option and all parameters with -jpar -1.
When reading shapes for the purpose of generating reduced models, def=fe2xf('DefList','root*.mat'); reads all files matching root*.mat and combines the shapes in a v_handle def.def field. Selection of diameters and frequency range during the read process is performed using
RO=struct('Fmax',8000); d1=fe_cyclicb('DefList','root*.mat',RO);
Optional argument RO can have following fields
Utilities for reduced parametric model (MVR) generation. The parametric model is assumed to be a pre-assembled parametric model. It consists in a model containing assembled matrices, the assembled matrices can be split into different contributions relative to specific parameters, see fe_case par for parameter definition and mattyp for reference on split assemblies.
The multi-model reduction then considers an orthonormalized basis concatenating the real modal bases of a subset of chosen design points, possibly enhanced with inelastic contributions.
Command BuildList packages the input to command Build. It aims at defining the subset of design points used for the modal basis reduction. The set of design points is in the Range format (see sdtweb fe_range).
The default syntax is [RunOpt,zCoef]=fe2xf('BuildList',model,RunOpt)', with model a SDT model with pre-defined matrices and resolved Case. RunOpt is a structure providing options, with at least field .EigOpt that defined the real mode basis computation strategy. By default, this corresponds to the options vector of fe_eig , but it can also be the content of the Mode tab (sdtroot initMode), or a cell array for callback definition.
The Range data must be defined, either with the direct Range format or as a cell array of parameters in the fe_range Vect format. This data can exist at several places, it is sequentially searched as
By default, it is assumed that the provided Range data is the parameter subset so that all points will be used to generate the reduction list.
Command BuildListRstra, will consider a reduction of a global Range entry by generating new points based on the parameter variations. The syntax is the same, RunOpt=fe2xf('BuildListRMinMax',model,RA)' and stra is a strategy token to define chosen design points. This is based on fe_range BuildR functionality. Command option -given forces the use of the provided Range for the list. Command option -flip will flip the design points list. As for some procedures the list first point defines the mass and stiffnesses used for normalization this can have an impact on the reduction basis.
Amongst all the generated design points (1+the number of varying parameters) only the ones with a variation on elastic matrices (types 2, 20 1, 5, see mattyp are kept. Command option allp forces to keep all design points is implicit variations are present.
Command option -Firsttyp will add to the end of the list a series of first order corrections for the provided matrix types in ty.
The output is the input structure RunOpt with additional field .list compatible with Build command. The second output is the zCoef data for the model, see sdtweb zCoef.
This command generates a multi-model reduction basis, and can generate the associated reduced model (MVR).
To work with feplot the syntax is fe2xf('build',cf,R0)', with cf is a handle to the feplot figure that contains the initial model. In such case, the built reduced model is stored in cf.Stack{'SE','MVR'}. If cf is replaced by a standard SDT model, the output is directly the reduced model: MVR=fe2xf('build',model,R0)'.
RO is a data structure with fields defining the options
Basis building calls in .list, the cell can contain
For use with fe_reduc use an info,Fe2xfBuild entry.
Following example builds a reduced model using RO.list:
model=fevisco('TestCantilever'); cf=feplot(model); mat=m_visco('convert INSI',m_visco('database Soundcoat-DYAD609')) cf.mdl=fevisco('addmat 101',cf.mdl,'visco',mat); RO=struct('list',{{'eig 5 10 0',[0 1 1]; 'eig 5 10 0',[0 1 .1]; 'first', [0 0 1]}}); fe2xf('build',cf,RO);
Another example with a call using a parameter Range:
model=fevisco('TestCantilever'); cf=feplot(model) mat=m_visco('convert INSI',m_visco('database Soundcoat-DYAD609')) cf.mdl=fevisco('addmat 101',cf.mdl,'visco',mat); Range=struct('val',[0 1 1;0 1 .1],'lab',{{'m' 'k' 'visco'}}) RO=struct('EigOpt',[5 10 0],'Range',Range); fe2xf('build',cf,RO);
When starting from a model without pre-defined matrices (cf.mdl.K does not exist), one assembles mass, stiffness and parameter matrices assemble -matdes 2 1 -1 -se NoT and removes the nominal parameter matrices from the base stiffness. The nominal model is thus associated with coefficients 1 for all parameters.
This command handles reduction basis enhancement adapted to inelastic contributions. Starting from a reduction basis T, one generate the enhanced basis
(5.9) |
where Kit is the sum of all matrices found of type t (or each matrix with option diffMat, KS is a symmetric positive definite matrix (usually a shifted stiffness matrix), and orthonormalization uses a fe_norm call with a mass and stiffness matrix.
The syntax is TR=fe2xf('BuildTrEnh',TR,model,Case,RO,kd,K)', with TR a reduction basis in the format, model a SDT model with pre-defined matrices (see command Build), Case the resolved case entry associated to the assembled modal, RO if an option structure with field .enhtyp containing the matrix types to be considered as a line vector, see mattyp, kd is a matrix factor (see ofact) representing KS−1, and K is a 2x1 cell array containing a mass and stiffness matrix for normalization.
Entries kd and K can be omitted. In such case, kd will be generated as the shifted elastic matrix of the model, the shift being used as found in either the info,EigOpt model entry (see fe_eig) or 1000 if undefined. If K is undefined, K1 will be the system mass matrix (types 2 or 20) and K2 will be elastic stiffness matrix (types 1 or 5).
Structure RO can contain other optional fields that if undefined can also be passed as command options,
See also