|
| subroutine, public | alloceigenmatrices (modes, neq, neqEig, ierr) |
| | Allocates internal work arrays used by the eigenvalue solver. More...
|
| |
| subroutine | filleigensystem (modes, neq, M, C, K, Q, ierr) |
| | Builds the full matrices of the generalized eigenvalue problem. More...
|
| |
| subroutine | bubbelsort (V, ind) |
| | Sorts a real array in ascending order. More...
|
| |
| subroutine | findrealeigenvalues (sam, modes, normFactor, modeOrder, iprint, io, ierr) |
| | Extracts the real eigenvalues and associated eigenvectors. More...
|
| |
| subroutine | findeigenvalues (sam, modes, iprint, io, ierr) |
| | Extracts the complex eigenvalues and associated eigenvectors. More...
|
| |
| subroutine, public | printmodes (sam, modes, time, iprint, io) |
| | Prints the eigenvalues and eigenvectors to unit IO. More...
|
| |
| subroutine, public | eigenmodes (sam, modes, sys, mech, ctrl, pCS, iprint, ierr) |
| | Calculates damped or undamped eigenvalues and eigenvectors. More...
|
| |
| subroutine | modalmasses (sups, modes, sam, eigVectors, normFactors, modeOrder, ierr) |
| | Calculates effective modal masses for the eigenmodes. More...
|
| |
| subroutine | addunitdisplvector (samData, sup, ttcc_0, sysV, ierr) |
| | Adds a superelement unit displacement vector into the system vector. More...
|
| |
| subroutine, public | exportmodes (yamlFile, modelFile, modes, triads, sups, iStep, time, ierr) |
| | Exports mode shapes with associated beam section forces to YAML. More...
|
| |
| subroutine | writeyamlheader (iYaml, prog, modelFile, istep, time) |
| | Writes the header of a YAML frequency response file. More...
|
| |
| subroutine | writeyamldispl (iYaml, triads, iMod, eigVal, eigVec) |
| | Writes the mode shape eigenvector to a YAML frequency response file. More...
|
| |
| subroutine | writeyamlforces (iYaml, sups, eigScale, iDbg, ierr) |
| | Writes beam sectional forces to a YAML frequency response file. More...
|
| |
Module with subroutines for the system-level eigenvalue analysis.
- Author
- Knut Morten Okstad
- Date
- 23 Mar 2000
| subroutine modesroutinesmodule::filleigensystem |
( |
type(modestype), intent(inout) |
modes, |
|
|
integer, intent(in) |
neq, |
|
|
type(sysmatrixtype), intent(in) |
M, |
|
|
type(sysmatrixtype), intent(in) |
C, |
|
|
type(sysmatrixtype), intent(in) |
K, |
|
|
type(sysmatrixtype), intent(in) |
Q, |
|
|
integer, intent(out) |
ierr |
|
) |
| |
Builds the full matrices of the generalized eigenvalue problem.
- Parameters
-
| modes | Eigenmode data container |
| [in] | neq | Number of equations, i.e., dimension of system matrices |
| [in] | M | System mass matrix |
| [in] | C | System damping matrix |
| [in] | K | System stiffness matrix |
| [in] | Q | System steady-state error elimination matrix |
| [out] | ierr | Error flag |
The generalized eigenvalue problem is on the form A z = λ B z
Without damping:
[K]*{z} = lambda*[M]*{z}
With damping (2n state-space form):
| K 0 |*{z} = lambda * | -C -M |*{z}
| 0 -M | | -M 0 |
With damping and/or steady-state error elimination (3n state-space form):
| Q 0 0 |*{z} = lambda * | -K -C -M |*{z}
| 0 K 0 | | K 0 0 |
| 0 0 M | | 0 M 0 |
- Note
- The 3n state-space method does not work quite yet. No eigenvalues are obtained for unknown reasons. However, the A and B matrices seems to be correct. The method has been proven valid in MATLAB. But the A and B matrices obtained through this code yield the same eigenvalue results in MATLAB. Can it be due to singular or very sparse matrices?
- Author
- Knut Morten Okstad
- Date
- 22 Mar 2000
- Author
- Magne Bratland
- Date
- 8 Oct 2010
| subroutine modesroutinesmodule::modalmasses |
( |
type(supeltype), dimension(:), intent(in) |
sups, |
|
|
type(modestype), intent(inout) |
modes, |
|
|
type(samtype), intent(in) |
sam, |
|
|
real(dp), dimension(:,:), intent(in) |
eigVectors, |
|
|
real(dp), dimension(:), intent(in) |
normFactors, |
|
|
integer, dimension(:), intent(in) |
modeOrder, |
|
|
integer, intent(out) |
ierr |
|
) |
| |
Calculates effective modal masses for the eigenmodes.
- Parameters
-
| [in] | sups | All superelements in the model |
| modes | Eigenmode data |
| [in] | sam | Data for managing system matrix assembly |
| [in] | eigVectors | The eigenvectors |
| [in] | normFactors | Scaling factors for normalizing the eigenmode shapes |
| [in] | modeOrder | Order of the modes with respect to eigenfrequency |
| [out] | ierr | Error flag |
This subroutine is used to judge the significance of each vibration mode for each translation- and rotation component. Modes with relatively high effective masses can be readily excited by base exitation in the actual direction, while modes with lower effective masses may not be that critical. This is a commonly used feature, e.g. in NASTRAN.
The calculation is as follows:
[temp] = [Φ]^t[M]*[R]
M_eff(i,j) = temp(i,j)^2
where the eigenvector matrix, [Φ], is transposed and assumed to be mass-normalized, [M] is the compact mass matrix, and [R] is the influence matrix representing a rigid body unit displacement of the mechanism. Finally, [M_eff] is a nModes×6 matrix of the effective modal masses. The results are stored in the array modestypemodule::modestype::effmass.
- Todo:
- It works now for LANCZ2 and for the -undamped solvers (although I encountered something that looks like a bug in the -undamped calculation of the eigenvectors). Furthermore, local orientation of triads are not (yet) taken into account, but should normally not be critical as long as the local triad masses are the same in all coordinate directions (for inertias it will induce errors, however). Component modes seems to be treated correctly, but has not been tested too much. Some more elegance could also be put into the creation of unit displacement vectors, just to make sure that all kinds of joints and boundary conditions are treated correctly. In fact, there might be a better and easier solution to this than the approach I have used here.
- Author
- Leif Ivar Myklebust
- Date
- 2 Jul 2003