Contents     Functions              PDF Index

## rigid

Purpose

Description

Rigid links are often used to model stiff connections in finite element models. One generates a set of linear constraints that relate the 6 DOFs of master M and slave S nodes by

{
 u v w rx ry rz
}S=[
 1 0 0 0 zMS −yMS 0 1 0 −zMS 0 xMS 0 0 1 yMS −xMS 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1
] {
 u v w rx ry rz
}M

Resolution of linear constraints is performed using fe_case or model assembly (see section 4.5.8) calls. The theory is discussed in section 7.14. Note that the master node of a rigid link as 6 DOF, even if the model may only need less (3 for volumes).

If coordinate systems are defined in field model.bas (see basis), PID (position coordinate system) and DID (displacement coordinate system) declarations in columns 2 and 3 of model.Node are properly handled.

You can use penalized rigid links (celas element) instead of truly rigid connections. This requires the selection of a stiffness constant but can be easier to manipulate. To change a group of rigid elements into celas elements change the element group name femesh('SetGroup rigid name celas') and set the stiffness constant FEelt(femesh('FindEltGroupi'),7) = Kv.

Although they are linear constraints rather than true elements, such connections can be declared using an element group of rigid connection with a header row of the form [Inf abs('rigid')] followed by as many element rows as connections of the form

[ n1 n2 DofSel MatId ProId EltId]

where node n2 will be rigidly connected to node n1 which will remain free. DofSel lets you specify which of the 3 translations and 3 rotations are connected (thus 123 connects only translations while 123456 connects both translations and rotations).

The other strategy is to store them as a case entry. rigid entries are rows of the Case.Stack cell array giving {'rigid', Name, Elt}. Name is a string identifying the entry. Elt is a model description matrix containing rigid elements. The elements can also be declared as standard elements as in the following example which generates the mesh of a square plate with a rigid edge

femesh('reset');

% Define a rigid edge
femesh('selelt seledge & innode{x==0}')
femesh('setgroupa1 name rigid')
FEel0(femesh('findel0 group1'),3)=123456; % all 6 DOF are slave
FEel0(femesh('findel0 group1'),4)=0;      % not a DOF equality

% alternative define as a case entry
%model=fe_case(model,'rigid','Rigid edge',FEel0);

% Compute and display modes
def=fe_eig(model,[6 20 1e3]);
feplot(model,def);fecom(';view3;ch8;scd.1');

An additional call is rigidAppend in order to simply add new rigid links. You may use a list of the form [MasterNode slaveDOF slaveNode_1 slaveNode_2 ... slaveNode_i] or of the form of an element matrix (containing a header).

The preceding call would be

model=fe_case(femesh,'rigidAppend','Rigid edge',FEel0);

or

model=fe_case(femesh,'rigidAppend','Rigid edge',...
[FEel0(2,2) .01 FEel0(2,2) FEel0(3,2)];

The rigid function is only used for low level access by generating the subspace T that verifies rigid constraints

[T,cdof] = rigid(node,elt,mdof)
[T,cdof] = rigid(Up)