eval(demosdt('echoon'));comgui('close all clear'); % Demonstration of the model updating capabilities of the SDT % for a basic truss based example. % % Note : the UPCOM interface was fully revised between versions 3.0 and 3.1 % % See also : the GARTUP demo % initialization (see the D_TRUSS, DEMO_FE, DEMO_ID demos) format short e; femesh('reset');; iiplot; load sdt_up FEnode=[1 0 0 0 0 0 0; 2 0 0 0 0 1 0; 3 0 0 0 1 0 0; 4 0 0 0 1 1 0]; femesh(';objectbeamline 1 3 0 2 4 0 3 4 0 1 4;'); femesh(';repeatsel 10 1 0 0;'); FEelt=FEel0; FEel0= [ Inf abs('mass1') 0 % add a 100 grams at node 6 21 .1 .1 .1 0 0 0]; femesh('addsel'); model=femesh('model') model.pl = m_elastic('dbval 1 aluminum'); typ=fe_mat('p_beam','SI',1); % standard beam model.il = [1 typ 5.0000e-09 5.0000e-09 5.0000e-09 2.0000e-05; 4 typ 5.0000e-09 5.0000e-09 5.0000e-09 2.0000e-05]; cf=feplot;cf.model=model; demosdt('pause');%------------------------------------------------ % The first step of an FE update problem is to assemble the parametrized % superelement if ~exist('FileName','var')|(exist(FileName)~=2 & exist([FileName '.mat'])~=2) FileName = tempname; end warning(sprintf(['The superelement will be stored ' ... '%s.mat\n REMEMBER to delete it\n'],FileName)); upcom(['load ' FileName]); % define Case for 2-D clamped truss and assemble model=fe_case(model,'addtocase1','fixdof','2D + clamp',[1 2 .03 .04 .05]'); upcom('set nominal',model) demosdt('pause');%------------------------------------------------ % On can then compute modes and analyze test/analysis correlation mode=upcom('compute mode full 2 10'); t_mode=struct('po',poID,'def',mID,'DOF',XFdof); % one can compare modes figure(1);subplot(121); ii_mac(t_mode,mode,'indb',[1:4],'mac error') ii_mac(1,'mac error table') % expand modeshapes at all sensors (see also the GARTCO demo) and use % the mass wheighted MAC figure(1);subplot(121); [m,k]=upcom('assemble'); mExp=fe_exp(t_mode.def, ... % test mode shape fe_c(mode.DOF,t_mode.DOF)*mode.def(:,1:4), ... ... % observation of analysis mode.def(:,1:4)); % analysis modes figure(1);subplot(122); ii_mac(mode,mExp,m,'inda',1:4,'mac plot') % Notes % - The high terms on the MAC diagonal tell that modeshapes of our current % model are not too bad. % - The high off-diagonal terms in the MAC tell that the number of sensors % is insufficient for a good modeshape separation. So, the modeshapes may not % be that good after all. demosdt('pause');%------------------------------------------------ % The frequency response functions (see DEMO_FE for more details on how % those should be created) can also be compared. % Here one considers 1 input and 10 outputs given in XFdof c=fe_c(Up.DOF,XFdof(:,1)); % sensors observed during test (see fe_exp) b=fe_c(Up.DOF,XFdof(1,2))'; % shaker used for test IIxe = upcom('compute modal full',0.01,b,c,IIw); iicom(';submagpha;iixfon;iixeon'); demosdt('pause');%------------------------------------------------ % To perform an update, one must then select parameters that will be updated % this is here done based on the group number or ProID (positive value) or EGID % negative value) of the various elements upcom('parstack reset'); upcom('parstackadd m','Group2 mass','group2'); upcom('parstackadd k','Cut batten stiffness','InNode 5 8'); upcom('parstackadd m','Cut battens mass','InNode 5 8'); % To compute the modes at a given value of the parameters you set the parameter % coefficients and compute the modes upcom('parcoef',[1 1 1]); md2=upcom('compute mode full 2 10'); demosdt('pause');%------------------------------------------------ % The easiest method for model updating is the frequency sensitivity method. % Once the different parameters selected and the proper ranges set using the % 'ParStack' command, you can give the measured frequencies and modeshapes % as well as the observation matrix associated to the test configuration % (see fe_exp for more details) upcom('opt eprint 0'); sens = fe_c(Up.DOF,XFdof(:,1)); % for more complex configurations use FE_SENS % Now set min/max values [coef,par]=upcom('parcoef'); % get values par(:,2)=1; % set current par(:,3)=1e-6; % set min par(:,4)=2; % set max upcom('parcoef',par); % set coefficient range [coef,mdf,ff] = up_freq('basic',poID,mID,sens); [coef,mdf,ff] = up_freq('basic',poID,mID,sens); disp(coef) [IIxh,aa,bb] = upcom('compute modal full 2',0.01,b,c,IIw); iicom(';submagpha;iixeon;iixhon') % The true final values are [2 0 0] so the results is quite good. % Don't fool yourself however, UP_FREQ is not a very robust algorithm and % it only gives good results for a good selection of the variable parameters. demosdt('pause');%------------------------------------------------ % For realistic finite element models, computing the exact modes of the full % order model is generally too expensive. It is thus proposed to project the % model on a constant basis. % See also sdtweb('dupcom')) and the GARTUP demo. upcom('parcoef',[1 1 1]); [fsen,mdsen,mode,freq] = upcom('sens mode full',eye(3),7:20); [m,k]=upcom('assemble');[T] = fe_norm([mdsen mode],m,k); upcom('par red',[T(:,1:20)]) % A call to the very crude UP_IXF function would take the form % % b=fe_c(mdof,XFdof(1,1))'; c=fe_c(mdof,XFdof(:,1)); % indw = [1:40:600]; % upcom(';opt model 1;opt omethod 3;opt gprint 0') % upcom('parcoef',[1 1 1]);coef = up_ixf('basic',b,c,IIw,IIxf,indw); % % But this method is not very good so you should wait till it gets better or % take the algorithm as a starting point to devise your own algorithms % --------------------------------------------------------------------------- eval(demosdt('echooff')) % Etienne Balmes 02/1/92, 21/02/03 % Copyright (c) 1990-2003 by SDTools, All Rights Reserved % $Revision: 1.7 $ $Date: 2006/02/23 07:47:08 $