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

Module with subroutines for setting up linear multi-point constraints. More...

Functions/Subroutines

subroutine, public multipointconstraints (MINEX, MADOF, MPAM, MPMNPC, MMNPC, TXC, TYC, TZC, MPAR, MSC, MPMCEQ, MMCEQ, TTCC, IPSW, LPU, IERR)
 Generates constraint equation arrays in the SAM datastructure. More...
 
subroutine, public checkrgdelements (mprgd, mprbar, mpam, meldep, minex, mpmnpc, mmnpc, nodeStatus, numErr)
 Checks the topology of the RGD elements. More...
 
subroutine, public checkrbarelements (mprbar, mprgd, minex, mpmnpc, mmnpc, madof, msc, nodeStatus, lpu, numErr)
 Checks consistency of RBAR elements. More...
 
subroutine, public rigid3d (mprgd, mprbar, meldep, minex, madof, mpmnpc, mmnpc, mpmcex, mmcex, txc, tyc, tzc, ttccx, mpar, msc, mpmceq, mmceq, ttcc, ipsw, lpu, ierr)
 Generates constraint equation arrays in the SAM datastructure. More...
 
subroutine rgdce (mprgd, elDepth, meldep, msc, mpmcex, mmcex, ttccx, mpmceq, mmceq, mpmnpc, mmnpc, ttcc, madof, txc, tyc, tzc, minex, iceq, ipcur, lpu, ierr)
 Construct the constraint equations for RGD (or RBE2) elements. More...
 
subroutine rbarce (mprbar, msc, mpmcex, mmcex, ttccx, mpmceq, mmceq, mpmnpc, mmnpc, ttcc, madof, txc, tyc, tzc, minex, iceq, ipcur, lpu, ierr)
 Constructs the constraint equations for RBAR elements. More...
 
subroutine defineconstrainteqn (iDofS, iDofM, C, mpmcex, mmcex, ttccx, msc, mpmceq, mmceq, ttcc, iceq, ipcur, lpu, ierr)
 Establishes the constraint equation for a given dependent DOF. More...
 
subroutine procdofcomp (dofNumbs, dofs, iel, lpu, ierr)
 Processes an m-set number of RGD and RBAR elements. More...
 
subroutine procrbardef (rgdComp, d1, d2, d3, d4, iel, lpu, ierr)
 Processes the component definition of an RBAR element. More...
 

Variables

integer, parameter, public krigid = 61
 Type id for rigid elements. More...
 
integer, parameter, public krbar = 62
 Type id for rigid bars. More...
 
integer, parameter, public kwavgm = 63
 Type id for constraint elements. More...
 

Detailed Description

Module with subroutines for setting up linear multi-point constraints.

This module contains a collection of subroutines for processing the rigid coupling elements (RGD, RBAR, etc.) for generation of the equivalent constraint equations (CE) of the algebraic system.

Function/Subroutine Documentation

◆ checkrbarelements()

subroutine, public rigidmodule::checkrbarelements ( integer, dimension(:), intent(in)  mprbar,
integer, dimension(:), intent(in)  mprgd,
integer, dimension(:), intent(in)  minex,
integer, dimension(:), intent(in)  mpmnpc,
integer, dimension(:), intent(in)  mmnpc,
integer, dimension(:), intent(in)  madof,
integer, dimension(:), intent(in)  msc,
integer, dimension(:), intent(in)  nodeStatus,
integer, intent(in)  lpu,
integer, intent(out)  numErr 
)

Checks consistency of RBAR elements.

Parameters
[in]mprbarMatrix of RBAR element indices
[in]mprgdMatrix of RGD element indices
[in]minexMatrix of internal to external node number
[in]mpmnpcMatrix of pointers to MNPCs
[in]mmnpcMatrix of nodal point correspondances
[in]madofMatrix of accumulated DOFs
[in]mscMatrix of status codes
[in]nodeStatusNodal status flags
[in]lpuFile unit number for res-file output
[out]numErrError flag

This subroutine checks that RBAR and RGD elements have no common nodes, and that no RBAR nodes are external.

The subroutine also checks DOF components of RBAR elements to ensure that:

  • No DOF is defined to be both dependent and independent.
  • Independent DOFs jointly define any rigid body motion.
  • No rotational independent DOFs exist on 3-DOF nodes.

If rotational dependent DOFs exist on 3-DOF nodes, a warning is issued.

Author
Tommy Jorstad
Date
29 Sep 2002
Here is the caller graph for this function:

◆ checkrgdelements()

subroutine, public rigidmodule::checkrgdelements ( integer, dimension(:), intent(in)  mprgd,
integer, dimension(:), intent(in)  mprbar,
integer, dimension(:), intent(in)  mpam,
integer, dimension(:), intent(out)  meldep,
integer, dimension(:), intent(in)  minex,
integer, dimension(:), intent(in)  mpmnpc,
integer, dimension(:), intent(inout)  mmnpc,
integer, dimension(:), intent(inout)  nodeStatus,
integer, intent(out)  numErr 
)

Checks the topology of the RGD elements.

Parameters
[in]mprgdMatrix of RGD element indices
[in]mprbarMatrix of RBAR element indices
[in]mpamMatrix of WAVGM element indices
[out]meldepRGD element chain definition (see below)
[in]minexMatrix of internal to external node number
[in]mpmnpcMatrix of pointers to MNPCs
mmnpcMatrix of nodal point correspondances
nodeStatusNodal status flags
[out]numErrError flag

The RGD elements are checked against the following rules:

  • Only one node per RGD element may be on a triad (external DOFs).
  • If a dependent node (and only one) is on a triad, the independent node of that element cannot be a dependent in another constraint element.
  • Common dependent nodes is allowed in two RGD elements only if they also share a common independent node.
  • An independent node of a RGD-element may be the dependent node in only one other element.

If a dependent node (and only one) is on a triad, and the second condition above is satisfied, that dependent node and the independent node of the element are swapped.

This subroutine also establishes the topology of chained RGD elements. The output array meldep is a mapping ielA-->ielB, where RGD element ielB is the element in which the reference node of RGD element ielA is a dependent node. If the reference node of element ielA is not dependent, then ielB=0.

Author
Knut Morten Okstad
Date
21 Aug 2003
Here is the caller graph for this function:

◆ defineconstrainteqn()

subroutine rigidmodule::defineconstrainteqn ( integer, intent(in)  iDofS,
integer, dimension(:), intent(in)  iDofM,
real(dp), dimension(:), intent(in)  C,
integer, dimension(:), intent(in)  mpmcex,
integer, dimension(:), intent(in)  mmcex,
real(dp), dimension(:), intent(in)  ttccx,
integer, dimension(:), intent(inout)  msc,
integer, dimension(:), intent(inout)  mpmceq,
integer, dimension(:), intent(inout)  mmceq,
real(dp), dimension(:), intent(inout)  ttcc,
integer, intent(inout)  iceq,
integer, intent(inout)  ipcur,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Establishes the constraint equation for a given dependent DOF.

Parameters
[in]iDofSThe dependent DOF to generate constriant equation for
[in]iDofMArray of independent DOFs to be coupled to DOF iDofS
[in]CArray of constraint equation coefficients
[in]mpmcexMatrix of pointers to external MCEQs
[in]mmcexMatrix of external constraint equation definitions
[in]ttccxTable of external constraint equation coefficients
mscMatrix of status codes
mpmceqMatrix of pointers to MCEQs
mmceqMatrix of constraint equation definitions
ttccTable of constraint equation coefficients
iceqRunning constraint equation counter
ipcurRunning index into MMCEQ
[in]lpuFile unit number for res-file output
[out]ierrError flag

The dependent DOF (IDOFS) is coupled to the independent DOFs (DOF numbers in array IDOFM) through the following equation:

d-idofs = c1*(d-idofm1) + c2*(d-idofm2) + ... + c<n>*(d-idofm<n>)

The equation is stored in the MMCEQ and TTCC arrays, from index IPCUR onwards. The IPCUR and ICEQ indices are then updated.

This implementation is based on the SAM routine RGDCE3.

Author
Knut Morten Okstad
Date
22 Jul 2002
Here is the caller graph for this function:

◆ multipointconstraints()

subroutine, public rigidmodule::multipointconstraints ( integer, dimension(:), intent(in)  MINEX,
integer, dimension(:), intent(in)  MADOF,
integer, dimension(:), intent(in)  MPAM,
integer, dimension(:), intent(in)  MPMNPC,
integer, dimension(:), intent(in)  MMNPC,
real(dp), dimension(:), intent(in)  TXC,
real(dp), dimension(:), intent(in)  TYC,
real(dp), dimension(:), intent(in)  TZC,
integer, dimension(:), intent(inout)  MPAR,
integer, dimension(:), intent(inout)  MSC,
integer, dimension(:), intent(out)  MPMCEQ,
integer, dimension(:), intent(out)  MMCEQ,
real(dp), dimension(:), intent(out)  TTCC,
integer, intent(in)  IPSW,
integer, intent(in)  LPU,
integer, intent(out)  IERR 
)

Generates constraint equation arrays in the SAM datastructure.

Parameters
[in]minexMatrix of internal to external node number
[in]madofMatrix of accumulated DOFs
[in]mpamMatrix of WAVGM element indices
[in]mpmnpcMatrix of pointers to MNPCs
[in]mmnpcMatrix of nodal point correspondances
[in]txcTable of x-coordinates for the nodal points
[in]tycTable of Y-coordinates for the nodal points
[in]tzcTable of Z-coordinates for the nodal points
mparMatrix of parameters
mscMatrix of status codes
[out]mpmceqMatrix of pointers to MCEQs
[out]mmceqMatrix of constraint equation definitions
[out]ttccTable of constraint equation coefficients
[in]ipswPrint switch
[in]lpuFile unit number for res-file output
[out]ierrError flag

This subroutine generates the constraint information arrays, MPMCEQ, MMCEQ and TTCC, that account for implicitly defined constraints via the interpolation constraint elements (WAVGM or RBE3) and any other explicitly defined linear multi-point constraints.

Status codes in MSC are updated and the final number of constraint equations (NCEQ) is stored in MPAR(7). The actual number of elements in MMCEQ and TTCC containing relevant information (NMMCEQ) is also determined and returned in MPAR(16).

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

◆ procdofcomp()

subroutine rigidmodule::procdofcomp ( integer, intent(in)  dofNumbs,
logical, dimension(6), intent(out)  dofs,
integer, intent(in)  iel,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Processes an m-set number of RGD and RBAR elements.

Parameters
[in]dofNumbsThe m-set number
[in]ielElement index
[in]lpuFile unit number for res-file output
[out]dofsArray of boolean DOF flags (on/off)
[out]ierrError flag

If dofNumbs is zero, all DOFs are flagged as .true.

Author
Tommy Jorstad
Date
18 Jul 2002
Here is the caller graph for this function:

◆ procrbardef()

subroutine rigidmodule::procrbardef ( integer, dimension(4), intent(in)  rgdComp,
logical, dimension(6), intent(out)  d1,
logical, dimension(6), intent(out)  d2,
logical, dimension(6), intent(out)  d3,
logical, dimension(6), intent(out)  d4,
integer, intent(in)  iel,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)
private

Processes the component definition of an RBAR element.

Parameters
[in]rgdCompDependent/independent DOFs at each node
[in]ielElement index
[out]d1Array of independent DOFs at node 1
[out]d2Array of independent DOFs at node 2
[out]d3Array of dependent DOFs at node 1
[out]d4Array of dependent DOFs at node 2
[in]lpuFile unit number for res-file output
[out]ierrError flag
Author
Tommy Jorstad
Date
18 Jul 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rbarce()

subroutine rigidmodule::rbarce ( integer, dimension(:), intent(in)  mprbar,
integer, dimension(:), intent(inout)  msc,
integer, dimension(:), intent(in)  mpmcex,
integer, dimension(:), intent(in)  mmcex,
real(dp), dimension(:), intent(in)  ttccx,
integer, dimension(:), intent(inout)  mpmceq,
integer, dimension(:), intent(inout)  mmceq,
integer, dimension(:), intent(in)  mpmnpc,
integer, dimension(:), intent(in)  mmnpc,
real(dp), dimension(:), intent(inout)  ttcc,
integer, dimension(:), intent(in)  madof,
real(dp), dimension(:), intent(in)  txc,
real(dp), dimension(:), intent(in)  tyc,
real(dp), dimension(:), intent(in)  tzc,
integer, dimension(:), intent(in)  minex,
integer, intent(inout)  iceq,
integer, intent(inout)  ipcur,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Constructs the constraint equations for RBAR elements.

Parameters
[in]mprbarMatrix of RBAR element indices
mscMatrix of status codes
[in]mpmcexMatrix of pointers to external MCEQs
[in]mmcexMatrix of external constraint equation definitions
[in]ttccxTable of external constraint equation coefficients
mpmceqMatrix of pointers to MCEQs
mmceqMatrix of constraint equation definitions
[in]mpmnpcMatrix of pointers to MNPCs
[in]mmnpcMatrix of nodal point correspondances
ttccTable of constraint equation coefficients
[in]madofMatrix of accumulated DOFs
[in]txcTable of x-coordinates for the nodal points
[in]tycTable of Y-coordinates for the nodal points
[in]tzcTable of Z-coordinates for the nodal points
[in]minexMatrix of internal to external node number
iceqRunning constraint equation counter
ipcurRunning index into MMCEQ
[in]lpuFile unit number for res-file output
[out]ierrError flag
Author
Tommy Jorstad
Date
18 Jul 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rgdce()

subroutine rigidmodule::rgdce ( integer, dimension(:), intent(in)  mprgd,
integer, dimension(:), intent(in)  elDepth,
integer, dimension(:), intent(in)  meldep,
integer, dimension(:), intent(inout)  msc,
integer, dimension(:), intent(in)  mpmcex,
integer, dimension(:), intent(in)  mmcex,
real(dp), dimension(:), intent(in)  ttccx,
integer, dimension(:), intent(inout)  mpmceq,
integer, dimension(:), intent(inout)  mmceq,
integer, dimension(:), intent(in)  mpmnpc,
integer, dimension(:), intent(in)  mmnpc,
real(dp), dimension(:), intent(inout)  ttcc,
integer, dimension(:), intent(in)  madof,
real(dp), dimension(:), intent(in)  txc,
real(dp), dimension(:), intent(in)  tyc,
real(dp), dimension(:), intent(in)  tzc,
integer, dimension(:), intent(in)  minex,
integer, intent(inout)  iceq,
integer, intent(inout)  ipcur,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)
private

Construct the constraint equations for RGD (or RBE2) elements.

Parameters
[in]mprgdMatrix of RGD element indices
[in]elDepthDepth of each RGD element in chains
[in]meldepRGD element couplings
mscMatrix of status codes
[in]mpmcexMatrix of pointers to external MCEQs
[in]mmcexMatrix of external constraint equation definitions
[in]ttccxTable of external constraint equation coefficients
mpmceqMatrix of pointers to MCEQs
mmceqMatrix of constraint equation definitions
[in]mpmnpcMatrix of pointers to MNPCs
[in]mmnpcMatrix of nodal point correspondances
ttccTable of constraint equation coefficients
[in]madofMatrix of accumulated DOFs
[in]txcTable of x-coordinates for the nodal points
[in]tycTable of Y-coordinates for the nodal points
[in]tzcTable of Z-coordinates for the nodal points
[in]minexMatrix of internal to external node number
iceqRunning constraint equation counter
ipcurRunning index into MMCEQ
[in]lpuFile unit number for res-file output
[out]ierrError flag

Chained RGD elements are detected and handled correctly (chains are traversed by depth such that all elements of depth i are processed prior to any element of depth i+1).

Author
Tommy Jorstad
Date
18 Jul 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rigid3d()

subroutine, public rigidmodule::rigid3d ( integer, dimension(:), intent(in)  mprgd,
integer, dimension(:), intent(in)  mprbar,
integer, dimension(:), intent(inout)  meldep,
integer, dimension(:), intent(in)  minex,
integer, dimension(:), intent(in)  madof,
integer, dimension(:), intent(in)  mpmnpc,
integer, dimension(:), intent(in)  mmnpc,
integer, dimension(:), intent(in)  mpmcex,
integer, dimension(:), intent(in)  mmcex,
real(dp), dimension(:), intent(in)  txc,
real(dp), dimension(:), intent(in)  tyc,
real(dp), dimension(:), intent(in)  tzc,
real(dp), dimension(:), intent(in)  ttccx,
integer, dimension(:), intent(inout)  mpar,
integer, dimension(:), intent(inout)  msc,
integer, dimension(:), intent(out)  mpmceq,
integer, dimension(:), intent(out)  mmceq,
real(dp), dimension(:), intent(out)  ttcc,
integer, intent(in)  ipsw,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Generates constraint equation arrays in the SAM datastructure.

Parameters
[in]mprgdMatrix of RGD element indices
[in]mprbarMatrix of RBAR element indices
meldepRGD element couplings
[in]minexMatrix of internal to external node number
[in]madofMatrix of accumulated DOFs
[in]mpmnpcMatrix of pointers to MNPCs
[in]mmnpcMatrix of nodal point correspondances
[in]mpmcexMatrix of pointers to external MCEQs
[in]mmcexMatrix of external constraint equation definitions
[in]txcTable of x-coordinates for the nodal points
[in]tycTable of Y-coordinates for the nodal points
[in]tzcTable of Z-coordinates for the nodal points
[in]ttccxTable of external constraint equation coefficients
mparMatrix of parameters
mscMatrix of status codes
[out]mpmceqMatrix of pointers to MCEQs
[out]mmceqMatrix of constraint equation definitions
[out]ttccTable of constraint equation coefficients
[in]ipswPrint switch
[in]lpuFile unit number for res-file output
[out]ierrError flag

This subroutine generates new versions of the constraint information arrays MPMCEQ, MMCEQ and TTCC, that account for both implicitly defined constraints via rigid and semi-rigid elements (RGD and RBAR) and explicitly defined constraints recorded in arrays MPMCEX, MMCEX and TTCCX.

The RGD element is a completely rigid or semi-rigid 3D element with 6 DOFs, an arbitrary number of nodes and all independent DOFs associated with the first (reference) node. The DOFs of the remaining element nodes may then be coupled to the independent node, making them dependent DOFs. However, not all DOFs in these nodes need not be dependent.

The RBAR element is a completely rigid or semi-rigid two-noded element with independent DOFs in both nodes, and an arbitrary number of dependent DOFs.

Status codes in MSC are updated and the final number of constraint equations (NCEQ) is stored in MPAR(7). The actual number of elements in MMCEQ and TTCC containing relevant information (NMMCEQ) is also determined and returned in MPAR(16).

This subroutine is an extended version of the SAM routine RGD3D.

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

Variable Documentation

◆ krbar

integer, parameter, public rigidmodule::krbar = 62

Type id for rigid bars.

◆ krigid

integer, parameter, public rigidmodule::krigid = 61

Type id for rigid elements.

◆ kwavgm

integer, parameter, public rigidmodule::kwavgm = 63

Type id for constraint elements.