eval(demosdt('echoon')) % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % For the visualization of deformations, one needs at least a geometry (nodes % given in the universal file format) and the definition of DOFs. % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % The data used here corresponds to the two bay truss of DEMO_FE so that the % nodes are FEnode=[ 1 0 0 0 0 1 0 2 0 0 0 0 0 0 3 0 0 0 1 1 0 4 0 0 0 1 0 0 5 0 0 0 2 0 0 6 0 0 0 2 1 0]; % The five considered sensors are node 3 direction -x (DOF 3.07), node 6 % direction y (DOF 6.02), 6.01, 4.01 and 5.01 (see section 5.1 of the tutorial % for details on DOF definition vectors). sdof = [3.07 6.02 6.01 4.02 5.02]'; % In a modal test this information will typically be stored in the first % column of stored in the option variable XFdof (see xfopt for details). % With nodes and DOF definition one can create a sensor plot cf=feplot; cf.model={FEnode,[]}; cf.sens=sdof; fecom(';sub 1 1;show arrow') fecom(';undefline;view2;scaledef .4;centerscale .7;textnode') demosdt('pause'); %---------------------------------------------------------- % Usually you will want to connect the different nodes to make deformations % clearer. This can be done using a wire frame line where you declare a % the line as a series of node numbers with zeros for line breaks % as the possibility to have different line groups i1 = [1 3 2 4 3]; LDraw(1,[1 82+[1:length(i1)]]) = [length(i1) i1]; % group 1 i1 = [3 6 0 6 5 0 4 5 0 4 6]; LDraw(2,[1 82+[1:length(i1)]]) = [length(i1) i1]; % group 2 % The following initialize a model with two groups. % Groups can be selected using the fecom('group') commands cf=feplot; fecom(';textoff;showline'); cf.model={FEnode,LDraw}; fecom('scaledef .001'); demosdt('pause'); %---------------------------------------------------------- % The data set IIxf contains the results of a 2 input 5 output test. One can % easily display the first frequency point (first input) % which you can animate by clicking on the AN button load sdt_id IIxf XFdof cf.sens(1)=XFdof(1:5,1); fecom(';showarrow;scaledef .4'); cf.def={IIxf(126,1:5).',XFdof(1:5,1)}; %start/stop the animation by pressing the AN button % Note % -> the selection of the first input (indices 1:5) % -> the .' (transpose) because FRFs and residue matrices use one column per % sensor and not one row like deformations are supposed to. demosdt('pause'); %---------------------------------------------------------- % If showing a line plot at this point the animation will not be very good % because the number of sensors is insufficient. % You can use simple interpolations to get a idea of the motion of other % sensors for example, the y motion at node 3 can be assumed to be half of % that at node 6 using edof = [XFdof(1:5,1);3.02]; t = [eye(5);fe_c(XFdof(1:5,1),6.02)/2]; resp = IIxf(126,1:5)'; % or any other response % The expanded response can be shown using cf.def={t*resp,edof}; fecom('show line'); % or feplot('initdef',resp,XFdof(1:5,1),[Inf XFdof(1:5,1)';edof t]) % for more complex cases where the measured DOFs may be a subset of the % expansion DOFs. demosdt('pause'); %---------------------------------------------------------- % when an FE model is available, you should consider using better expansion % techniques on bases of modes or model responses (see FE_EXP) % here for example and expansion on the basis of the first 5 modes would % be given by load sdt_id mdof mode rexp = [fe_exp(resp,fe_c(mdof,XFdof(1:5,1))*mode(:,1:5),mode(:,1:5))]; % which we can compare with the interpolation considered before, and the % initial deformation rexp = [rexp fe_c(mdof,edof)'*t*resp fe_c(mdof,XFdof(1:5,1))'*resp]; cf.def={rexp,mdof};fecom(';show line;ch1:3'); % note how the simple interpolation give an acceptable result demosdt('pause'); %---------------------------------------------------------- % When you have modeshapes you should also consider sensor placement. For % example with the effective independence algorithm ind = fe_c(mdof,[.01;.02],'ind'); % select translation sensors sdof = fe_sens('ind',mode(ind,1:5),mdof(ind)); % sort sensors by influence cf.sens=sdof(1:5); fecom(';ch1;showarrow;plot;set o2 def0'); % display selection demosdt('pause'); %---------------------------------------------------------- % you should finally check that the chosen sensors (5 here) allow you to % distinguish the shape of the considered modes (5 here). This can be done % using the auto modal assurance criterion which should have off diagonal % terms below .1 c = fe_c(mdof,sdof(1:5)); ii_mac(c*mode(:,1:5),c*mode(:,1:5)) % For the example, the auto-MAC shows that the selection is a poor choice. % This comes from the fact that we only considered placing sensors at truss % nodes when sensors in the middle of beams would really be needed. %----------------------------------------------------------------- eval(demosdt('echooff')) % Etienne Balmes 07/14/93, 09/10/99 % Copyright (c) 1990-2004 by SDTools, % All Rights Reserved.