SDT-base Contents   Functions      PDF Index |
After a description of standard input forms in section 4.6, this section is a reference for sensor definition strategies in SDT. Sensors are used for
The underlying idea of sensors is that outputs are related to degree of freedom or state through an observation equation {y}=[c]{q}. This general objective is supported by the use of SensDof entries.
This section lists the main commands used to build the observation matrix once sensors are defined :
Once sensors defined (see trans, ...), sensors must be matched to elements of the mesh. This is done using
model = fe_case(model,'sensmatch',SensDofEntryName);
You may omit to provide the name if there is only one sensor set. The command builds the observation matrix associated to each sensor of the entry Name, and stores it as a .cta field, and associated .DOF, in the sensor stack.
Storing information in the stack allows multiple partial matches before generating the global observation matrix. The observation matrix is then obtained using
Sens = fe_case(model,'sens',SensDofEntryName);
The matching operation requires finding the elements that contain each sensor and the position within the reference element shape so that shape functions can be used to interpolate the response. Typical variants are
model=fe_case(model,'sensmatch radius1.0',Name)
For fine match strategies a second radius value corresponding to the maximum distance allowed to match a point can be provided : all matches above this distance are not retained and the match search procedure continues.
To avoid evaluating the match for all the elements inside the search radius, which could take long time, the algorithm starts with the element whose center of gravity is the closest to the node to match. If the match is below the maximum distance, it is validated. If not, nearby elements are iteratively detected and evaluated for match. For computational speed matters, only 5 iterations can be performed for each point to match but this can be increased using the SearchIter option. The line below for example looks iteratively at elements in the sphere of radius 1 (from the closest one to all nearby ones) and stops as soon as a match distance below 0.1 is reached.
model=fe_case(model,'SensMatch radius 1 .1 -SearchIter Inf',Name);
Note that this selection does not yet let you selected implicit elements within a superelement.
In an automated match, the sensor is not always matched to the correct elements on which the sensor is glued, you may want to ensure that the observation matrices created by these commands only use nodes associated to a subset of elements.
You can use a selection to define element subset on which perform the match. If you want to match one or more specific sensors to specific element subset, you can give cell array with SensId of sensor to match in a first column and with element string selector in a second column.
model=fe_case(model,'SensMatch',Name,{SensIdVector,'FindEltString'});
This is illustrated below in forcing the interpolation of test node 1206 to use FEM nodes in the plane where it is glued.
cf=demosdt('DemoGartDataCoshape plot'); fe_case(cf,'sensmatch -near') sdth.urn('Tab(Cases,sensors){Proview,on}',cf); % use fecom CursorSelOn to see how each sensor is matched. cf.CStack{'sensors'}.Stack{18,3} % modify link to 1206 to be on proper surface cf.mdl=fe_case(cf.mdl,'SensMatch-near',... 'sensors',{1206.03,'withnode {z>.16}'}); cf.CStack{'sensors'}.Stack{18,3} % force link to given node (may need to adjust distance) cf.mdl=fe_case(cf.mdl,'SensMatch-rigid radius .5','sensors',{1205.08,21}); cf.CStack{'sensors'}.Stack{19,3} fecom('showlinks sensors');fecom('textnode',[1206 1205])
This command is used after SensMatch to build the observation equation that relates the response at sensors to the response a DOFs
(4.1) |
where the c matrix in stored in the sens.cta field and DOFs expected for q are given in sens.tdof.
After the matching phase, one can build the observation matrix with
SensFull=fe_case(model,'sens',SensDofEntryName)
or when using a reduced superelement model
SensRed=fe_case(model,'sensSE',SensDofEntryName). Note that with superelements, you can also define a field .UseSE=1 in the sensor entry to force use of the reduced model. This is needed for the generation of reduced selections in feplot (typically cf.sel='-Test').
The following example illustrates nominal strategies to generate the observed shape, here for a static response.
model=demosdt('demoUbeamSens'); def=fe_simul('static',model); % Manual observation, using {y} = [c] {q} sens=fe_case(model,'sens'); def=feutilb('placeindof',sens.DOF,def); % If DOF numbering differs % could use sens=feutilb('placeindof',def.DOF,sens); if all DOF present y=sens.cta*def.def % Automated curve generation C1=fe_case('sensObserve',model,'sensor 1',def)
The generation of loads is less general than that of sensors. As a result it may be convenient to use reciprocity to define a load by generating the collocated sensor. When a sensor is defined, and the topology correlation performed with SensMatch, one can define an actuator from this sensor using
model=fe_case(model,'DofLoad SensDof',Input_Name,'Sens_Name:Sens_Nb') or for model using superelements
model=fe_case(model,'DofLoad SensDofSE',Input_Name,'Sens_Name:Sens_Nb').
Sens_Name is the name of the sensor set entry in the model stack of the translation sensor that defines the actuator, and Sens_Nb is its number in this stack entry. Thus Sensors:1 2 5 will define actuators with sensors 1, 2 and 5 for SensDof entry Sensors.
Input_Name is the name of the DofLoad entry that will be created in the model stack to describe the actuator.
Note that a verification of directions can be performed a posteriori using feutilb GeomRB.
This is discussed in section 2.8.3.
SDT 5.3 match strategies are still available. Only the arigid match has not been ported to SDT 6.1. This section thus documents SDT 5.3 match calls.
For topology correlation, the sensor configuration must be stored in the sens.tdof field and active FEM DOFs must be declared in sens.DOF. If you do not have your analysis modeshapes yet, you can use sens.DOF=feutil('getdof',sens.DOF). With these fields and a combined test/FEM model you can estimate test node motion from FEM results. Available interpolations are
At each point, you can see which interpolations you are using with
fe_sens('info',sens). Note that when defining test nodes in a local basis, the node selection commands are applied in the global coordinate system.
The interpolations are stored in the sens.cta field. With that information you can predict the response of the FEM model at test nodes. For example
[model,def]=demosdt('demo GartDataCoshape'); model=fe_sens('rigid sensors',model); % link sensors to model % display sensor wire-frame and animate FEM modes cf=feplot; cf.model=model; cf.sel='-sensors'; cf.def=def;fecom(';undefline;scd.5;ch7')