Contents     Functions              PDF Index

## 7.14Constraint and fixed boundary condition handling

### 7.14.1  Theory and basic example

rigid links, FixDof, MPC entries, symmetry conditions, continuity constraints in CMS applications, ... all lead to problems of the form

 [Ms2+Cs+K]{q(s)}=[b] {u(s)} {y(s)}= [c] {q(s)} [cint]{q(s)}=0
(7.1)

The linear constraints [cint]{q(s)}=0 can be integrated into the problem using Lagrange multipliers or constraint elimination. Elimination is done by building a basis T for the kernel of the constraint equations, that is such that

 range([T]N× (N−NC))=ker([cint]NS × N)     (7.2)

Solving problem

 [TTMTs2+TTCTs+TTKT]{qR(s)}=[TTb] {u(s)} {y(s)}= [cT] {qR(s)}

is then strictly equivalent to solving (7.1).

The basis T is generated using [Case,model.DOF]=fe_case(model,'gett') where Case.T gives the T basis and Case.DOF describes the active or master DOFs (associated with the columns of T) while model.DOF describes the full list of DOFs.

The assembly of unconstrained M, ... or constrained TTMT matrices can be controlled with appropriate options in fe_mknl, fe_load, ... Typically a NoT string is added to the command.

For the two bay truss example, can be written as follows :

``` femesh('reset');
model2 = femesh('test 2bay');
model2=fe_case(model, ...         % defines a new case
'FixDof','2-D motion',[.03 .04 .05]', ...  % 2-D motion
'FixDof','Clamp edge',[1 2]');             % clamp edge
Case=fe_case('gett',model2)  % Notice the size of T and
fe_c(Case.DOF)                % display the list of active DOFs
model2 = fe_mknl(model2)

% Now reassemble unconstrained matrices and verify the equality
% of projected matrices
[m,k,mdof]=fe_mknl(model2,'NoT');

norm(full(Case.T'*m*Case.T-model2.K{1}))
norm(full(Case.T'*k*Case.T-model2.K{2}))

```

### 7.14.2  Local coordinates

In the presence of local coordinate systems (non zero value of DID in node column 3), the Case.cGL matrix built during the gett command, gives a local to global coordinate transformation

 {qglobal} = [cGL] {qlocal}

Master DOFs (DOFs in Case.DOF) are defined in the local coordinate system. As a result, M is expected to be defined in the global response system while the projected matrix TTMT is defined in local coordinates. mpc constraints are defined using the local basis.

### 7.14.3  Enforced displacement

For a DofSet entry, one defines the enforced motion in Case.TIn and associated DOFs in Case.DofIn. The DOFs specified in Case.DofIn are then fixed in Case.T.

### 7.14.4  Low level examples

A number of low level commands (feutil GetDof, FindNode, ...) and functions fe_c can be used to operate similar manipulations to what fe_case GetT does, but things become rapidly complex. For example

``` femesh('reset'); model = femesh('test 2bay');
[m,k,mdof]=fe_mknl(model)

i1 = femesh('findnode x==0');
adof1 = fe_c(mdof,i1,'dof',1);             % clamp edge
adof2 = fe_c(mdof,[.03 .04 .05]','dof',1); % 2-D motion

mdof=mdof(ind); tmt=m(ind,ind); tkt=k(ind,ind);
```

Handling multiple point constraints (rigid links, ...) really requires to build a basis T for the constraint kernel. For rigid links the obsolete rigid function supports some constraint handling. The following illustrates restitution of a constrained solution on all DOFs

```% Example of a plate with a rigid edge

% select the rigid edge and set its properties
femesh(';selelt group1 & seledge & innode {x==0};addsel');
femesh('setgroup2 name rigid');
FEelt(femesh('findelt group2'),3)=123456;
FEelt(femesh('findelt group2'),4)=0;
model=femesh;

% Assemble
model.DOF=feutil('getdof',model);% full list of DOFs
[tmt,tkt,mdof] = fe_mknl(model); % assemble constrained matrices
Case=fe_case(model,'gett');      % Obtain the transformation matrix

[md1,f1]=fe_eig(tmt,tkt,[5 10 1e3]); % compute modes on master DOF

def=struct('def',Case.T*md1,'DOF',model.DOF) % display on all DOFs
feplot(model,def); fecom(';view3;ch7')
```