FEDEM Solver
R8.0
Source code of the dynamics solver
|
Module with subroutines for the system-level eigenvalue analysis. More...
Functions/Subroutines | |
subroutine, public | alloceigenmatrices (modes, neq, ierr) |
Allocates internal work arrays used by the eigenvalue solver. More... | |
subroutine | filleigensystem (modes, neq, M, C, K, 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, iprint, ierr) |
Calculate 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, iel, eV, sysV, ierr) |
Adds an element 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, scale, iDbg, ierr) |
Writes beam sectional forces to a YAML frequency response file. More... | |
Module with subroutines for the system-level eigenvalue analysis.
subroutine modesroutinesmodule::addunitdisplvector | ( | type(samtype), intent(in) | samData, |
integer, intent(in) | iel, | ||
real(dp), dimension(:,:), intent(in) | eV, | ||
real(dp), dimension(:,:), intent(inout) | sysV, | ||
integer, intent(out) | ierr | ||
) |
Adds an element unit displacement vector into the system vector.
[in] | samData | Data for managing system matrix assembly |
[in] | iel | Element index |
[in] | eV | Element displacement vector |
sysV | System displacement vector | |
[out] | ierr | Error flag |
subroutine, public modesroutinesmodule::alloceigenmatrices | ( | type(modestype), intent(inout) | modes, |
integer, intent(in), optional | neq, | ||
integer, intent(out), optional | ierr | ||
) |
Allocates internal work arrays used by the eigenvalue solver.
modes | Eigenmode data container | |
[in] | neq | Number of equations, i.e., dimension of system matrices |
[out] | ierr | Error flag |
subroutine modesroutinesmodule::bubbelsort | ( | real(dp), dimension(:), intent(in) | V, |
integer, dimension(:), intent(inout) | ind | ||
) |
Sorts a real array in ascending order.
[in] | V | Array of real values to sort |
ind | Array of indices defining the sorted order |
subroutine, public modesroutinesmodule::eigenmodes | ( | type(samtype), intent(in) | sam, |
type(modestype), intent(inout) | modes, | ||
type(systemtype), intent(inout) | sys, | ||
type(mechanismtype), intent(inout) | mech, | ||
integer, intent(in) | iprint, | ||
integer, intent(out) | ierr | ||
) |
Calculate damped or undamped eigenvalues and eigenvectors.
[in] | sam | Data for managing system matrix assembly |
modes | Eigenmode data | |
sys | System level model data | |
mech | Mechanism components of the model | |
[in] | iprint | Print switch for additional output |
[out] | ierr | Error flag |
This is the main driver of the system-level eigenvalue analysis. The parameter modestypemodule::modestype::solver determines which actual subroutine to be used, as follows:
subroutine, public modesroutinesmodule::exportmodes | ( | character(len=*), intent(in) | yamlFile, |
character(len=*), intent(in) | modelFile, | ||
type(modestype), intent(in) | modes, | ||
type(triadtype), dimension(:), intent(inout) | triads, | ||
type(supeltype), dimension(:), intent(inout) | sups, | ||
integer(i8), intent(in) | istep, | ||
real(dp), intent(in) | time, | ||
integer, intent(out) | ierr | ||
) |
Exports mode shapes with associated beam section forces to YAML.
[in] | yamlFile | Name of the YAML-file top write |
[in] | modelFile | Name of the model file |
[in] | modes | Eigenmode data |
triads | All triads in the model | |
sups | All superelements in the model | |
[in] | iStep | Time increment counter |
[in] | time | Current simulation time |
[out] | ierr | Error flag |
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, | ||
integer, intent(out) | ierr | ||
) |
Builds the full matrices of the generalized eigenvalue problem.
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 |
[out] | ierr | Error flag |
The generalized eigenvalue problem is on the form A z = λ B z
With damping:
| K 0 |*{z} = lambda * | -C -M |*{z} | 0 -M | | -M 0 |
Without damping:
[K]*{z} = lambda*[M]*{z}
subroutine modesroutinesmodule::findeigenvalues | ( | type(samtype), intent(in) | sam, |
type(modestype), intent(inout) | modes, | ||
integer, intent(in) | iprint, | ||
integer, intent(in) | io, | ||
integer, intent(out) | ierr | ||
) |
Extracts the complex eigenvalues and associated eigenvectors.
[in] | sam | Data for managing system matrix assembly |
modes | Eigenmode data | |
[in] | iprint | Print switch for additional output |
[in] | io | File unit number to write to |
[out] | ierr | Error flag |
|
private |
Extracts the real eigenvalues and associated eigenvectors.
[in] | sam | Data for managing system matrix assembly |
modes | Eigenmode data | |
[out] | normFactor | Scaling factors for normalizing the eigenmode shapes |
[out] | modeOrder | Order of the modes with respect to eigenfrequency |
[in] | iprint | Print switch for additional output |
[in] | io | File unit number to write to |
[out] | ierr | Error flag |
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.
[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 modestypemodule::modestype::effmass.
subroutine, public modesroutinesmodule::printmodes | ( | type(samtype), intent(in) | sam, |
type(modestype), intent(in) | modes, | ||
real(dp), intent(in) | time, | ||
integer, intent(in) | iprint, | ||
integer, intent(in) | io | ||
) |
Prints the eigenvalues and eigenvectors to unit IO.
[in] | sam | Data for managing system matrix assembly |
modes | Eigenmode data | |
[in] | time | Current simulation time |
[in] | iprint | Print switch for additional output |
[in] | io | File unit number to write to |
subroutine modesroutinesmodule::writeyamldispl | ( | integer, intent(in) | iYaml, |
type(triadtype), dimension(:), intent(in) | triads, | ||
integer, intent(in) | iMod, | ||
real(dp), intent(in) | eigVal, | ||
real(dp), dimension(:), intent(in) | eigVec | ||
) |
Writes the mode shape eigenvector to a YAML frequency response file.
[in] | iYaml | File unit number of the YAML-file to write |
[in] | triads | All triads in the model |
[in] | iMod | Mode shape index |
[in] | eigVal | Associated eigenvalue |
[in] | eigVec | Associated eigenvector |
subroutine modesroutinesmodule::writeyamlforces | ( | integer, intent(in) | iYaml, |
type(supeltype), dimension(:), intent(inout) | sups, | ||
real(dp), intent(in) | scale, | ||
integer, intent(in) | iDbg, | ||
integer, intent(out) | ierr | ||
) |
Writes beam sectional forces to a YAML frequency response file.
[in] | iYaml | File unit number of the YAML-file to write |
sups | All superelements in the model | |
[in] | scale | Scaling factor for the eigenvector |
[in] | iDbg | File unit number of debug output |
[in] | ierr | Error flag |
|
private |
Writes the header of a YAML frequency response file.
[in] | iYaml | File unit number of the YAML-file to write |
[in] | prog | Program name |
[in] | modelFile | Name of the model file |
[in] | iStep | Time increment counter |
[in] | time | Current simulation time |