FEDEM Solver  R8.0
Source code of the dynamics solver
Functions/Subroutines
cmstrsmodule Module Reference

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...
 

Detailed Description

Module with subroutines for doing Component Mode Synthesis.

Function/Subroutine Documentation

◆ cmstrs()

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.

Parameters
[in]iopSingOption for handling matrix singularities
samData for managing system matrix assembly
bmatDiskDisplacement recovery matrix
SMIISystem mass matrix associated with internal DOFs
[in]SMIESystem mass matrix coupling the internal and external DOFs
[out]SMMATReduced mass matrix
[in]SMEESystem mass matrix associated with external DOFs
SKIISystem stiffness matrix associated with internal DOFs
[in]SKEESystem stiffness matrix associated with external DOFs
[out]SKMATReduced stiffness matrix
[in]PHIComputed eigenvectors (component mode shapes)
[in]fullRHSSystem right-hand-side vectors
[out]RHSReduced right-hand-side vectors
[out]VGIInternal displacements due to gravitational forces
[in]tolFactorizeZero pivot tolerance (singular system matrix)
iStiffFile handle for temporary storage of system stiffness matrix
[in]NGENNumber of component modes
[in]NRHSNumber of right-hand-side vectors
[in]LPUFile unit number for res-file output
[out]IERRError flag

CMS : "Component Mode Synthesis".

Author
Ketil Aamnes
Date
Oct 1988
Author
Knut Morten Okstad
Date
Mar 2003
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eigcms()

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.

Parameters
skDense superelement stiffness matrix
smDense superelement mass matrix
BmatMatrix relating the internal and external nodal DOFs
phiComponent mode shapes
[out]lambdaComputed eigenvalues
[out]ZequComputed eigenvectors
[in]meqn1Matrix of status 1 (internal) equation numbers
[in]meqn2Matrix of status 2 (external) equation numbers
[in]nDimension of the eigenvalue problem
[in]ndof1Number of internal nodal DOFs (status 1 equations)
[in]ndof2Number of external nodal DOFs (status 2 equations)
[in]nValNumber of eigenvalues to solve for
[in]ipswPrint switch for debug output
[in]lpuFile unit number for res-file output
[out]ierrError flag

The associated eigenvectors are optionally computed and expanded to all internal nodes of the superelement.

Author
Knut Morten Okstad
Date
Oct 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eigval()

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.

Parameters
[in]samData for managing system matrix assembly
SSMSystem stiffness matrix
SMMSystem mass matrix
[in]nEigValNumber of eigenvalues to compute
[in]factorMassIf .true., factorize the mass matrix
[in]iopSingOption for handling matrix singularities
[in]tolFactorizeZero pivot tolerance
[in]tolEigvalZero tolerance on eigenvalues
[in]eigShiftEigenvalue shift
[out]EVLComputed eigenvalues
[out]PHIAssociated eigenvectors
[in]IPSWPrint switch
[in]LPUFile unit number for res-file output
[out]IERRError 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.

Author
Ketil Aamnes
Date
Oct 1988
Author
Knut Morten Okstad
Date
Mar 2003
Here is the call graph for this function:
Here is the caller graph for this function:

◆ grav()

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.

Parameters
[in]samData for managing system matrix assembly
smmSystem mass matrix
BmatDiskDisplacement recovery matrix
[in]phiComputed eigenvectors (component mode shapes)
[out]gravgGravitational force vectors
[in]ndimSuperelement dimension
[in]ngenNumber of component modes
[in]lpuFile unit number for res-file output
[out]ierrError 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.

Author
Ketil Aamnes
Date
Oct 1988
Author
Bjorn Haugen
Date
Nov 1998
Author
Knut Morten Okstad
Date
Mar 2003
Here is the call graph for this function:
Here is the caller graph for this function:

◆ gravfull()

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.

Parameters
[in]samData for managing system matrix assembly
smmSystem mass matrix
[out]gravGravitational force vectors
[out]ierrError flag

The gravitatinal force vectors are calculated from the unit system mass matrix and unit accelerations:

    |g| = [M] |a|
Author
Knut Morten Okstad
Date
Feb 2018
Here is the caller graph for this function:

◆ jcms()

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.

Parameters
[in]MReduced dense superelement mass matrix
[in]UNDPOSPosition matrices for the supernodes
[in]MEDOFMatrix of External DOF indices for the supernodes
[in]NDIMDimension on the superelement matrices
[in]NENODNumber of supernodes
[out]MASSTotal mass of the superelement
[in]LPUFile unit number for res-file output
[out]IERRError flag
Author
Knut Morten Okstad
Date
July 2002
Here is the caller graph for this function:

◆ reportsingeqns()

subroutine, private cmstrsmodule::reportsingeqns ( character(len=*), intent(in)  mattype,
type(samtype), intent(in)  sam,
integer(ik), dimension(:), intent(in)  meqErr 
)
private

Prints an error message on singular system system.

Parameters
[in]mattypeType of system matrix (stiffness or mass)
[in]samData for managing system matrix assembly
[in]meqErrList of singular equation numbers
Author
Knut Morten Okstad
Here is the caller graph for this function: