4.9  Stress observation#

Observation of stress and resultant fields is an application that requires specific tools for performance. A number of commands are thus available for this purpose. The two main commands are fe_caseg StressCut for generation of the observation and fe_caseg StressObserve for the generation of a curve Multi-dim curve showing observations as a table.

This functionality has been significantly stabilized for SDT 6.5 but improvements and minor format changes are still likely for future releases.

4.9.1  Building view mesh#

Stresses can be observed at nodes of arbitrary meshes (view meshes that are very much related to test wireframes). You should look-up feutil('object') commands for ways to build simple shapes. A few alternate model generation calls are provided in fe_caseg StressCut as illustrated below and in the example for resultant sensors.

% Build straight line by weighting of two nodes
VIEW=fe_caseg('stresscut', ...
  struct('Origin',[0 0 0;0 0 1], ... % [n1,n2]
  'steps',linspace(0,1,10)))

% Automated build of a cut (works on convex cuts) model=demosdt('demoubeam-pro');cf=feplot; RO=struct('Origin',[0 0 .5],'axis',[0 0 1]); VIEW=fe_caseg('StressCut',RO,cf); feplot(VIEW) % note problem due to non convex cut

%View at Gauss points model=demosdt('demoubeam-pro');cf=feplot; cut=fe_caseg('StressCut-SelOut',struct('type','Gauss'),model); cuts= fe_caseg('stresscutToStrain',cut);

% Observe beam strains at Gauss points [model,def]=beam1t('testeig') mo1=fe_caseg('StressCut',struct('type','BeamGauss'),model); cut=fe_caseg('StressCut -radius 10 -SelOut',mo1,model); C1=fe_caseg('StressObserve -crit""',cut,def) % Observation as CURVE

Generic command is :
VIEW=fe_caseg('StressCut',RO,model);
RO is a data structure defining the view mesh. Different views are available according to RO.type or RO fields:

  • RO.type='conform' When one wants to define a mesh that is a subpart of the model, there is no need to perform the match step, and the type 'conform' can be used. The selection of the subpart of the model is performed through a FindElt command provided in RO.sel.
  • RO.type='gauss' Gauss points of the elements. A FindElt command can be provided in RO.sel (if omitted, all Gauss point are computed). For mechanical problems, to obtain the displacement gradient rather than the usual strain set il(6)=100.
  • RO.type='beamgauss' : Gauss points of a beam model.
  • Plane cut mesh. RO.Origin and RO.axis must be filled. Cut is done in the plane defined by RO.Origin and RO.axis. If RO.planes is defined, as many planes (orthogonal to axis) as positions from the RO.Origin are defined.
  • Cut line : RO.Origin defining line extremities (each row defines an extremity position, 3 columns for X Y and Z) and RO.steps defining the number of observation nodes must be filled.

4.9.2  Building and using a selection for stress observation#

The first use of StressCut is to build a feplot selection to be used to view/animate stress fields on the view mesh. A basic example is shown below.

% build model
model=demosdt('volbeam');cf=feplot(model);

% build view mesh VIEW=fe_caseg('stresscut', ... struct('Origin',[0 .05 .05;1 .05 .05], ... % [n1,n2] 'steps',linspace(1,0,10))) % build stress cut view selection sel=fe_caseg('stresscut -selout',VIEW,cf);cla(cf.ga);feplot % generation observation

cf.def=fe_eig(model,[5 10 0]); fe_caseg('stresscut',sel,cf) % Overlay view and nominal mesh fecom('scc2') % Force equal scaling

The result of StressCut is found in sel.StressObs.cta which is an observation matrix giving the linear relation between motion at DOF of the elements connected to target points, to stress components at these target points. The procedure used to build this observation matrix in fe_caseg is as follows

  • match desired nodes to the interior of elements and keep the resulting element coordinates. One then adds to the selected element set, one layer of elements with the same material and property ID (all elements that have one node in common with the matched elements);
  • generate stress observation at Gauss points of the selected elements;
  • for each stress component compute the stress at nodes that would lead to the same values at Gauss points. In other words one resolves
     
        (4.2)
  • finally use the element shape functions to interpolate each stress component from nodal values to values at the desired points using element coordinates found at the first step.

Note that typically, a sel.StressObs.trans field gives the observation matrix associated with translations at the target points to allow animation of positions as well as colors.

4.9.3  Observing resultant fields#

StressCut sensors provide stress post-treatments in model cutoffs. The command interprets a data structure with fields


.EltSelFindElt command that gives the elements concerned by the resultant.
.SurfSelFindNode command that gives the selection where the resultant is computed.
.typecontains the string 'resultant'.

Following example defines a StressCut call to show modal stresses in an internal surface of a volume model

demosdt('demoubeam')
cf=feplot;fecom('showpatch')
cf.mdl=feutil('lin2quad',cf.mdl); % better stress interpolation
def=fe_eig(cf.mdl,[5 10 1e3]);
cf.def=def;
r1=struct('EltSel','withnode {z<2}', ...
    'SurfSel','inelt{innode{z==2}}', ...
    'type','Resultant');
fe_caseg('stresscut',r1,cf);
% adapt transparencies
fecom(cf,'SetProp sel(1).fsProp','FaceAlpha',0.01,'EdgeAlpha',0.2);

The observation in feplot is performed on the fly, with data stored in cf.sel(2).StressObs (for the latter example).

Command option -SelOut allows recovering the observation data. Field .cta is here compatible with general sensors, for customized observation.

cta=fe_caseg('StressCut-SelOut',r1,cf);