FEDEM Solver
R8.0
Source code of the dynamics solver
|
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... | |
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.
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.
[in] | mprbar | Matrix of RBAR element indices |
[in] | mprgd | Matrix of RGD element indices |
[in] | minex | Matrix of internal to external node number |
[in] | mpmnpc | Matrix of pointers to MNPCs |
[in] | mmnpc | Matrix of nodal point correspondances |
[in] | madof | Matrix of accumulated DOFs |
[in] | msc | Matrix of status codes |
[in] | nodeStatus | Nodal status flags |
[in] | lpu | File unit number for res-file output |
[out] | numErr | Error 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:
If rotational dependent DOFs exist on 3-DOF nodes, a warning is issued.
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.
[in] | mprgd | Matrix of RGD element indices |
[in] | mprbar | Matrix of RBAR element indices |
[in] | mpam | Matrix of WAVGM element indices |
[out] | meldep | RGD element chain definition (see below) |
[in] | minex | Matrix of internal to external node number |
[in] | mpmnpc | Matrix of pointers to MNPCs |
mmnpc | Matrix of nodal point correspondances | |
nodeStatus | Nodal status flags | |
[out] | numErr | Error flag |
The RGD elements are checked against the following rules:
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.
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.
[in] | iDofS | The dependent DOF to generate constriant equation for |
[in] | iDofM | Array of independent DOFs to be coupled to DOF iDofS |
[in] | C | Array of constraint equation coefficients |
[in] | mpmcex | Matrix of pointers to external MCEQs |
[in] | mmcex | Matrix of external constraint equation definitions |
[in] | ttccx | Table of external constraint equation coefficients |
msc | Matrix of status codes | |
mpmceq | Matrix of pointers to MCEQs | |
mmceq | Matrix of constraint equation definitions | |
ttcc | Table of constraint equation coefficients | |
iceq | Running constraint equation counter | |
ipcur | Running index into MMCEQ | |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error flag |
The dependent DOF (IDOFS) is coupled to the independent DOFs (DOF numbers in array IDOFM) through the following equation:
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.
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.
[in] | minex | Matrix of internal to external node number |
[in] | madof | Matrix of accumulated DOFs |
[in] | mpam | Matrix of WAVGM element indices |
[in] | mpmnpc | Matrix of pointers to MNPCs |
[in] | mmnpc | Matrix of nodal point correspondances |
[in] | txc | Table of x-coordinates for the nodal points |
[in] | tyc | Table of Y-coordinates for the nodal points |
[in] | tzc | Table of Z-coordinates for the nodal points |
mpar | Matrix of parameters | |
msc | Matrix of status codes | |
[out] | mpmceq | Matrix of pointers to MCEQs |
[out] | mmceq | Matrix of constraint equation definitions |
[out] | ttcc | Table of constraint equation coefficients |
[in] | ipsw | Print switch |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error 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).
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.
[in] | dofNumbs | The m-set number |
[in] | iel | Element index |
[in] | lpu | File unit number for res-file output |
[out] | dofs | Array of boolean DOF flags (on/off) |
[out] | ierr | Error flag |
If dofNumbs is zero, all DOFs are flagged as .true.
|
private |
Processes the component definition of an RBAR element.
[in] | rgdComp | Dependent/independent DOFs at each node |
[in] | iel | Element index |
[out] | d1 | Array of independent DOFs at node 1 |
[out] | d2 | Array of independent DOFs at node 2 |
[out] | d3 | Array of dependent DOFs at node 1 |
[out] | d4 | Array of dependent DOFs at node 2 |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error flag |
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.
[in] | mprbar | Matrix of RBAR element indices |
msc | Matrix of status codes | |
[in] | mpmcex | Matrix of pointers to external MCEQs |
[in] | mmcex | Matrix of external constraint equation definitions |
[in] | ttccx | Table of external constraint equation coefficients |
mpmceq | Matrix of pointers to MCEQs | |
mmceq | Matrix of constraint equation definitions | |
[in] | mpmnpc | Matrix of pointers to MNPCs |
[in] | mmnpc | Matrix of nodal point correspondances |
ttcc | Table of constraint equation coefficients | |
[in] | madof | Matrix of accumulated DOFs |
[in] | txc | Table of x-coordinates for the nodal points |
[in] | tyc | Table of Y-coordinates for the nodal points |
[in] | tzc | Table of Z-coordinates for the nodal points |
[in] | minex | Matrix of internal to external node number |
iceq | Running constraint equation counter | |
ipcur | Running index into MMCEQ | |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error flag |
|
private |
Construct the constraint equations for RGD (or RBE2) elements.
[in] | mprgd | Matrix of RGD element indices |
[in] | elDepth | Depth of each RGD element in chains |
[in] | meldep | RGD element couplings |
msc | Matrix of status codes | |
[in] | mpmcex | Matrix of pointers to external MCEQs |
[in] | mmcex | Matrix of external constraint equation definitions |
[in] | ttccx | Table of external constraint equation coefficients |
mpmceq | Matrix of pointers to MCEQs | |
mmceq | Matrix of constraint equation definitions | |
[in] | mpmnpc | Matrix of pointers to MNPCs |
[in] | mmnpc | Matrix of nodal point correspondances |
ttcc | Table of constraint equation coefficients | |
[in] | madof | Matrix of accumulated DOFs |
[in] | txc | Table of x-coordinates for the nodal points |
[in] | tyc | Table of Y-coordinates for the nodal points |
[in] | tzc | Table of Z-coordinates for the nodal points |
[in] | minex | Matrix of internal to external node number |
iceq | Running constraint equation counter | |
ipcur | Running index into MMCEQ | |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error 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).
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.
[in] | mprgd | Matrix of RGD element indices |
[in] | mprbar | Matrix of RBAR element indices |
meldep | RGD element couplings | |
[in] | minex | Matrix of internal to external node number |
[in] | madof | Matrix of accumulated DOFs |
[in] | mpmnpc | Matrix of pointers to MNPCs |
[in] | mmnpc | Matrix of nodal point correspondances |
[in] | mpmcex | Matrix of pointers to external MCEQs |
[in] | mmcex | Matrix of external constraint equation definitions |
[in] | txc | Table of x-coordinates for the nodal points |
[in] | tyc | Table of Y-coordinates for the nodal points |
[in] | tzc | Table of Z-coordinates for the nodal points |
[in] | ttccx | Table of external constraint equation coefficients |
mpar | Matrix of parameters | |
msc | Matrix of status codes | |
[out] | mpmceq | Matrix of pointers to MCEQs |
[out] | mmceq | Matrix of constraint equation definitions |
[out] | ttcc | Table of constraint equation coefficients |
[in] | ipsw | Print switch |
[in] | lpu | File unit number for res-file output |
[out] | ierr | Error 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.
integer, parameter, public rigidmodule::krbar = 62 |
Type id for rigid bars.
integer, parameter, public rigidmodule::krigid = 61 |
Type id for rigid elements.
integer, parameter, public rigidmodule::kwavgm = 63 |
Type id for constraint elements.