|Contents   Functions      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 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.107), 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.
model=demosdt('volbeam'); % Define interface to be xyz DOF at nodes 2,3 model=fe_case(model,'DofSet','IN', ... feutil('getdof',[2;3],[.01;.02;.03])); % statically reduced model ST=fe_reduc('Static',model); % For Craig Bampton specify eigenvalue options model=stack_set(model,'info','EigOpt',[5 10 0]); CB=fe_reduc('CraigBampton',model);
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.
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
Float=2 uses an inertia balancing with respect to computed modes.
[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.
[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  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.
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.
|m||mass matrix (can be empty for commands that do not use mass)|
|k||stiffness matrix and|
|mdof||associated DOF definition vector describing DOFs in m and k. When using a model with constraints, you can use mdof=fe_case(model,'gettdof').|
|b||input shape matrix describing unit loads of interest. Must be coherent with mdof.|
|bdof||alternate load description by a set of DOFs (bdof and mdof must have different length)|
|rdof||contains 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);.
fe2ss, fe_eig, section 6.2