fe_eig
Purpose
Computation of normal modes associated to a second order undamped model.
Syntax
def = fe_eig(model,EigOpt)
def = fe_eig({m,k,mdof},EigOpt)
def = fe_eig({m,k,T,mdof},EigOpt)
[phi, wj] = fe_eig(m,k)
[phi, wj, kd] = fe_eig(m,k,EigOpt,imode)
Description
The normal modeshapes phi=φ and frequencies wj=sqrt(diag(Ω2)) are solution of the undamped eigenvalue problem (see section 5.2)
− [M] {φj}ωj2+[K] {φj}={0}
|
and verify the two orthogonality conditions
[φ] T [M] N× N [φ] N× N= [I]
N× N and [φ] T [K] [φ]= [\ Ωj2 \ ]
|
The outputs are the data structure def (which is more appropriate for use with high level functions feplot, nor2ss, ... since it keeps track of the signification of its content, frequencies in def.data are then in Hz) or the modeshapes (columns of phi) and frequencies wj in rad/s. Note how you provide {m,k,mdof} in a cell array to obtain a def structure without having a model.
The optional output kd corresponds to the factored stiffness matrix. It should be used with methods that do not renumber DOFs.
fe_eig implements various algorithms to solve this problem for modes and frequencies. Many options are available and it is important that you read the notes below to understand how to properly use them. The option vector EigOpt can be supplied explicitely or set using model=stack_set(model, 'info','EigOpt',EigOpt). Its format is
[method nm Shift Print Thres] (default values are [2 0 0 0 1e-5])
- method
-
2 default full matrix solution. Cannot be used for large models.
- 6 IRA/Sorensen solver. Faster than 5 but less robust.
- 5 Lanczos solver allows specification of frequency band rather than number of modes. To turn off convergence check add 2000 to the option (2105, 2005, ...).
- 50 Callback to let the user specify an external solver method using setpref('SDT','ExternalEig').
- 106, 104 same as 6,4 methods but no initial DOF renumbering. This is useless with the default ofact('methodspfmex') which renumbers at factorization time.
- 0 SVD based full matrix solution
- 1 subspace iteration which allows to compute the lowest
modes of a large problem where sparse mass and stiffness matrices are
used.
- 3 Same as 5 but using ofact('methodlu').
- 4 Same as 5 but using ofact('methodchol').
- nm number of modes to be returned. A non-integer or negative nm,
is used as the desired fmax in Hz for iterative solvers (method 5 only).
- shift value of mass shift (should be non-zero for systems with rigid body modes, see notes below). The subspace iteration method supports iterations without mass shift for structures with rigid body modes. This method is used by setting the shift value to Inf.
- print level of printout (0 none, 11 maximum)
- thres threshold for convergence of modes (default 1e-5 for the subspace iteration and Lanczos methods)
Finally, a set of vectors imode can be used as an initial guess for the subspace iteration method (method 1).
Notes
- The default full matrix algorithm (method=2) cleans results of the MATLAB eig function. Computed modes are mass normalized and complex parts, which are known to be spurious for symmetric eigenvalue problems considered here, are eliminated. The alternate algorithm for full matrices (method=0) uses a singular value decomposition to make sure that all frequencies are real. The results are thus wrong, if the matrices are not symmetric and positive definite (semi-positive definite for the stiffness matrix).
- The preferred partial solver is method 6 which calls eigs (ARPACK) properly and cleans up results. This solver sometimes fails to reach convergence, use method 5 then.
- The subspace iteration and Lanczos algorithms are rather free interpretation of the standard algorithms (see Ref. [37] for example).
- The Lanczos algorithm (methods 3,4,5) is much faster than the subspace iteration algorithm (method 1). A double Orthogonalization scheme and double restart usually detects multiple modes.
- For systems with rigid body modes, you must specify a mass-shift. A good value is about one tenth of the first flexible frequency squared, but the Lanczos algorithm tends to be sensitive to this value (you may occasionally need to play around a little). If you do not find the expected number of rigid body modes, this is can be reason.
- DOFs with zero values on the stiffness diagonal are eliminated by default. You can bypass this behavior by giving a shift with unit imaginary value (eigopt(3)=1e3+1i for example).
Example
Here is an example containing a high level call
model =demosdt('demo gartfe');
cf=feplot;cf.model=model;
cf.def=fe_eig(model,[6 20 1e3 11]);
fecom chc10
and the same example with low level commands
model =demosdt('demo gartfe');
[m,k,mdof] = fe_mknl(model);
cf=feplot;cf.model=model;
cf.def=fe_eig({m,k,mdof},[5 20 1e3]);fecom chc10
See also
fe_ceig, fe_mk, nor2ss, nor2xf
©1991-2016 by SDTools