FEDEM Solver
R8.0
Source code of the dynamics solver
|
Module with subroutines for doing Component Mode Synthesis. More...
Functions/Subroutines | |
subroutine | eigval (sam, SSM, SMM, nEigVal, factorMass, iopSing, tolFactorize, tolEigval, eigShift, EVL, PHI, IPSW, LPU, IERR) |
Solves the eigenvalue problem of the FE model. More... | |
subroutine | gravfull (sam, smm, grav, ierr) |
Establishes the full gravitational force vectors. More... | |
subroutine | grav (sam, smm, BmatDisk, phi, gravg, ndim, ngen, lpu, ierr) |
Computes the gravitation force vector for the superelement DOFs. More... | |
subroutine | cmstrs (iopSing, sam, bmatDisk, SMII, SMIE, SMEE, SMMAT, SKII, SKEE, SKMAT, PHI, fullRHS, RHS, VGI, tolFactorize, iStiff, NGEN, NRHS, LPU, IERR) |
Performs CMS-transformation on the system matrices. More... | |
subroutine | jcms (M, UNDPOS, MEDOF, NDIM, NENOD, MASS, LPU, IERR) |
Computes and prints the inertia properties of the superelement. More... | |
subroutine | eigcms (sk, sm, Bmat, phi, lambda, Zequ, meqn1, meqn2, n, ndof1, ndof2, nVal, ipsw, lpu, ierr) |
Computes and prints the eigenvalues of the reduced system. More... | |
subroutine, private | reportsingeqns (mattype, sam, meqErr) |
Prints an error message on singular system system. More... | |
Module with subroutines for doing Component Mode Synthesis.
subroutine cmstrsmodule::cmstrs | ( | integer, intent(in) | iopSing, |
type(samtype), intent(inout) | sam, | ||
type(diskmatrixtype), intent(inout) | bmatDisk, | ||
type(sysmatrixtype), intent(inout) | SMII, | ||
type(sparsematrixtype), intent(in) | SMIE, | ||
real(dp), dimension(:,:), intent(in) | SMEE, | ||
real(dp), dimension(:,:), intent(out) | SMMAT, | ||
type(sysmatrixtype), intent(inout) | SKII, | ||
real(dp), dimension(:,:), intent(in) | SKEE, | ||
real(dp), dimension(:,:), intent(out) | SKMAT, | ||
real(dp), dimension(:,:), intent(in) | PHI, | ||
real(dp), dimension(:,:), intent(in) | fullRHS, | ||
real(dp), dimension(:,:), intent(out) | RHS, | ||
real(dp), dimension(:,:), intent(out) | VGI, | ||
real(dp), intent(in) | tolFactorize, | ||
integer, intent(inout) | iStiff, | ||
integer, intent(in) | NGEN, | ||
integer, intent(in) | NRHS, | ||
integer, intent(in) | LPU, | ||
integer, intent(out) | IERR | ||
) |
Performs CMS-transformation on the system matrices.
[in] | iopSing | Option for handling matrix singularities |
sam | Data for managing system matrix assembly | |
bmatDisk | Displacement recovery matrix | |
SMII | System mass matrix associated with internal DOFs | |
[in] | SMIE | System mass matrix coupling the internal and external DOFs |
[out] | SMMAT | Reduced mass matrix |
[in] | SMEE | System mass matrix associated with external DOFs |
SKII | System stiffness matrix associated with internal DOFs | |
[in] | SKEE | System stiffness matrix associated with external DOFs |
[out] | SKMAT | Reduced stiffness matrix |
[in] | PHI | Computed eigenvectors (component mode shapes) |
[in] | fullRHS | System right-hand-side vectors |
[out] | RHS | Reduced right-hand-side vectors |
[out] | VGI | Internal displacements due to gravitational forces |
[in] | tolFactorize | Zero pivot tolerance (singular system matrix) |
iStiff | File handle for temporary storage of system stiffness matrix | |
[in] | NGEN | Number of component modes |
[in] | NRHS | Number of right-hand-side vectors |
[in] | LPU | File unit number for res-file output |
[out] | IERR | Error flag |
CMS : "Component Mode Synthesis".
subroutine cmstrsmodule::eigcms | ( | real(dp), dimension(:,:), intent(inout) | sk, |
real(dp), dimension(:,:), intent(inout) | sm, | ||
type(diskmatrixtype), intent(inout) | Bmat, | ||
real(dp), dimension(:,:), intent(in) | phi, | ||
real(dp), dimension(:), intent(out) | lambda, | ||
real(dp), dimension(:,:), intent(out) | Zequ, | ||
integer, dimension(:), intent(in) | meqn1, | ||
integer, dimension(:), intent(in) | meqn2, | ||
integer, intent(in) | n, | ||
integer, intent(in) | ndof1, | ||
integer, intent(in) | ndof2, | ||
integer, intent(in) | nVal, | ||
integer, intent(in) | ipsw, | ||
integer, intent(in) | lpu, | ||
integer, intent(out) | ierr | ||
) |
Computes and prints the eigenvalues of the reduced system.
sk | Dense superelement stiffness matrix | |
sm | Dense superelement mass matrix | |
Bmat | Matrix relating the internal and external nodal DOFs | |
phi | Component mode shapes | |
[out] | lambda | Computed eigenvalues |
[out] | Zequ | Computed eigenvectors |
[in] | meqn1 | Matrix of status 1 (internal) equation numbers |
[in] | meqn2 | Matrix of status 2 (external) equation numbers |
[in] | n | Dimension of the eigenvalue problem |
[in] | ndof1 | Number of internal nodal DOFs (status 1 equations) |
[in] | ndof2 | Number of external nodal DOFs (status 2 equations) |
[in] | nVal | Number of eigenvalues to solve for |
[in] | ipsw | Print switch for debug output |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error flag |
The associated eigenvectors are optionally computed and expanded to all internal nodes of the superelement.
subroutine cmstrsmodule::eigval | ( | type(samtype), intent(in) | sam, |
type(sysmatrixtype), intent(inout) | SSM, | ||
type(sysmatrixtype), intent(inout) | SMM, | ||
integer, intent(in) | nEigVal, | ||
logical, intent(in) | factorMass, | ||
integer, intent(in) | iopSing, | ||
real(dp), intent(in) | tolFactorize, | ||
real(dp), intent(in) | tolEigval, | ||
real(dp), intent(in) | eigShift, | ||
real(dp), dimension(:), pointer | EVL, | ||
real(dp), dimension(:,:), pointer | PHI, | ||
integer, intent(in) | IPSW, | ||
integer, intent(in) | LPU, | ||
integer, intent(out) | IERR | ||
) |
Solves the eigenvalue problem of the FE model.
[in] | sam | Data for managing system matrix assembly |
SSM | System stiffness matrix | |
SMM | System mass matrix | |
[in] | nEigVal | Number of eigenvalues to compute |
[in] | factorMass | If .true., factorize the mass matrix |
[in] | iopSing | Option for handling matrix singularities |
[in] | tolFactorize | Zero pivot tolerance |
[in] | tolEigval | Zero tolerance on eigenvalues |
[in] | eigShift | Eigenvalue shift |
[out] | EVL | Computed eigenvalues |
[out] | PHI | Associated eigenvectors |
[in] | IPSW | Print switch |
[in] | LPU | File unit number for res-file output |
[out] | IERR | Error flag |
The nEigVal lowest eigenvalues and associated eigenvectors are computed using the Lanczos eigenvalue solver. The LAPack solver is used if the system matrices are dense/full, or if tolEigval is non-positive.
subroutine cmstrsmodule::grav | ( | type(samtype), intent(in) | sam, |
type(sysmatrixtype), intent(inout) | smm, | ||
type(diskmatrixtype), intent(inout) | BmatDisk, | ||
real(dp), dimension(:,:), intent(in) | phi, | ||
real(dp), dimension(:,:), intent(out) | gravg, | ||
integer, intent(in) | ndim, | ||
integer, intent(in) | ngen, | ||
integer, intent(in) | lpu, | ||
integer, intent(out) | ierr | ||
) |
Computes the gravitation force vector for the superelement DOFs.
[in] | sam | Data for managing system matrix assembly |
smm | System mass matrix | |
BmatDisk | Displacement recovery matrix | |
[in] | phi | Computed eigenvectors (component mode shapes) |
[out] | gravg | Gravitational force vectors |
[in] | ndim | Superelement dimension |
[in] | ngen | Number of component modes |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error flag |
First, compute the full gravitation force vector (g) based on unit acceleration vectors (a) and the mass matrix (M):
g = M*a or |g_i| = | M_ii M_ie ||a_i| |g_e| | M_ei M_ee ||a_e|
Note that the internal and external DOFs can be mixed, i.e., not necessarily having the nice 2*2 block structure indicated above.
Then transform this to the reduced DOF set for the superelement through the virtual work equation:
dvs'*gs = dv'*g where v = H*vs or |v_i| = | B phi ||vs_e| |v_e| | I 0 ||vs_g|
This gives the transformation of the force vector as
gs = H'*g or |gs_e| = | B' I ||g_i| |gs_g| = | phi' 0 ||g_e|
where (gs) is the superelement force vector, _e indicates external DOFs, _i indicates internal DOFs, and _g indicates generalized DOFs.
subroutine cmstrsmodule::gravfull | ( | type(samtype), intent(in) | sam, |
type(sysmatrixtype), intent(inout) | smm, | ||
real(dp), dimension(:,:), intent(out) | grav, | ||
integer, intent(out) | ierr | ||
) |
Establishes the full gravitational force vectors.
[in] | sam | Data for managing system matrix assembly |
smm | System mass matrix | |
[out] | grav | Gravitational force vectors |
[out] | ierr | Error flag |
The gravitatinal force vectors are calculated from the unit system mass matrix and unit accelerations:
|g| = [M] |a|
subroutine cmstrsmodule::jcms | ( | real(dp), dimension(:,:), intent(in) | M, |
real(dp), dimension(:,:), intent(in) | UNDPOS, | ||
integer, dimension(:), intent(in) | MEDOF, | ||
integer, intent(in) | NDIM, | ||
integer, intent(in) | NENOD, | ||
real(dp), intent(out) | MASS, | ||
integer, intent(in) | LPU, | ||
integer, intent(out) | IERR | ||
) |
Computes and prints the inertia properties of the superelement.
[in] | M | Reduced dense superelement mass matrix |
[in] | UNDPOS | Position matrices for the supernodes |
[in] | MEDOF | Matrix of External DOF indices for the supernodes |
[in] | NDIM | Dimension on the superelement matrices |
[in] | NENOD | Number of supernodes |
[out] | MASS | Total mass of the superelement |
[in] | LPU | File unit number for res-file output |
[out] | IERR | Error flag |
|
private |
Prints an error message on singular system system.
[in] | mattype | Type of system matrix (stiffness or mass) |
[in] | sam | Data for managing system matrix assembly |
[in] | meqErr | List of singular equation numbers |