SDT-base         Contents     Functions         Previous Next     PDF Index



Utilities for finite element model reduction.


 SE = fe_reduc('command options',model)
 TR = fe_reduc('command options',model)


fe_reduc provides standard ways of creating and handling bases (rectangular matrix T) of real vectors used for model reduction (see details in section 6.2). Input arguments are a command detailed later and a model (see section 7.6). Obsolete low level calls are detailed at the end of this section. Generic options for the command are

When using a model with pre-assembled matrices in the .K field, boundary conditions must not be eliminated to avoid reassembly in fe_reduc which is indicated by the message Assembling model.

 [SE,CE] = fe_case(model,'assemble -matdes 2 1 -SE -NoT');
 SE=stack_set(SE,'case','Case 1',CE);

Accepted fe_reduc commands are

Static, CraigBampton

Static computes static or Guyan condensation. CraigBampton appends fixed interface modes to the static condensation.

Given a set of interface DOFs, indexed as I, and other DOFs C, the static responses to unit displacements are given by


which is the static basis (also called constraint modes in the Component Mode Synthesis literature). For Craig-Bampton (6.89), one appends fixed interface modes (with qI=0). Note that you may get an error if the interface DOFs do not constrain rigid body motion so that KCC is singular.

The interface DOFs should be specified using a DofSet case entry. The interface DOFs are defined as those used in the DofSet. The complementary DOF are determined by exclusion of the interface DOF from the remaining active DOFs.

% Define interface to be xyz DOF at nodes 2,3
model=fe_case(model,'DofSet','IN', ...
% statically reduced model
% For Craig Bampton specify eigenvalue options
model=stack_set(model,'info','EigOpt',[5 10 0]);

Available command options are

mdl=fesuper(mdl,'setTR',name,'fe_reduc command') calls fe_reduc to assemble and reduce the superelement. For example
mdl=fesuper(mdl,'SetTR','SE1','CraigBampton -UseDof -drill');

Switching to out of core solver using .mat files is based on the value of sdtdef('OutOfCoreBufferSize') given in Mb. For a sufficiently large RAM, you may want to use larger values sdtdef('OutOfCoreBufferSize',1024*8) for 8 GB.

Free ...

The standard basis for modal truncation with static correction discussed in section 6.2.3 (also known as McNeal reduction). Static correction is computed for the loads defined in the model case (see fe_case). Accepted command options are

dynamic w

[T,rbdof,rb]=fe_reduc('dynamic freq', ...) computes the dynamic response at frequency w to loads b. This is really the same as doing (-w^2*m+k)\b but can be significantly faster and is more robust.

flex [,nr]

[T,rbdof,rb]=fe_reduc('flex', ...) computes the static response of flexible modes to load b (which can be given as bdof)


where NR is the number of rigid body modes. These responses are also called static flexible responses or attachment modes (when forces are applied at interface DOFs in CMS problems).

The flexible response is computed in three steps:

where it clearly appears that the knowledge of rigid body modes and of an isostatic constraint is required, while the knowledge of all flexible modes is not (see [44] for more details).

By definition, the set of degrees of freedom R (with other DOFs noted Iso) forms an isostatic constraint if the vectors found by


span the full range of rigid body modes (kernel of the stiffness matrix). In other words, displacements imposed on the DOFs of an isostatic constraint lead to a unique response with no strain energy (the imposed displacement can be accommodated with a unique rigid body motion).

If no isostatic constraint DOFs rdof are given as an input argument, a lu decomposition of k is used to find them. rdof and rigid body modes rb are always returned as additional output arguments.

The command flexnr can be used for faster computations in cases with no rigid body modes. The static flexible response is then equal to the static response and fe_reduc provides an optimized equivalent to the MATLAB command k\b.


[rb,rbdof]=fe_reduc('rb',m,k,mdof,rbdof) determines rigid body modes (rigid body modes span the null space of the stiffness matrix). The DOFs rbdof should form an isostatic constraint (see the flex command above). If rbdof is not given as an input, an LU decomposition of k is used to determine a proper choice.

If a mass is given (otherwise use an empty [ ] mass argument), computed rigid body modes are mass orthonormalized (φRTMφR=I). Rigid body modes with no mass are then assumed to be computational modes and are removed.

obsoletem,k,mdof (obsolete format)

Low level calling formats where matrices are provided are still supported but should be phased out since they do not allow memory optimization needed for larger models.

mmass matrix (can be empty for commands that do not use mass)
kstiffness matrix and
mdofassociated DOF definition vector describing DOFs in m and k. When using a model with constraints, you can use mdof=fe_case(model,'gettdof').
binput shape matrix describing unit loads of interest. Must be coherent with mdof.
bdofalternate load description by a set of DOFs (bdof and mdof must have different length)
rdofcontains definitions for a set of DOFs forming an iso-static constraint (see details below). When rdof is not given, it is determined through an LU decomposition done before the usual factorization of the stiffness. This operation takes time but may be useful with certain elements for which geometric and numeric rigid body modes don't coincide.

For CraigBampton, the calling format was fe_reduc('CraigBampton NM Shift Options',m,k,mdof,idof);.

See also

fe2ss, fe_eig, section 6.2

©1991-2024 by SDTools
Previous Up Next