The methods associated with a MPC object are the following.
*vfe_MPCBegin - create an instance of a MPC object vfe_MPCEnd - destroy an instance of a MPC object vfe_MPCError - return MPC object error flag
vfe_MPCDef - specify constraint type Inq - inquire constraint type vfe_MPCSetParami - set integer parameters vfe_MPCSetParamd - set real parameters vfe_MPCSetDist - set ABAQUS distributed coupling properties vfe_MPCSetGround - set ground properties vfe_MPCSetJoint - set joint properties vfe_MPCSetKine - set kinematic coupling properties vfe_MPCSetLink - set inextensional coupling properties vfe_MPCSetPlane - set plane properties vfe_MPCSetPntSurf - set point on surface coupling properties vfe_MPCSetRBE3 - set NASTRAN RBE3 properties vfe_MPCSetSlider - set slider coupling properties vfe_MPCSetStan - set standard MPC properties
vfe_MPCDofMap - query element degree of freedom map vfe_MPCNumDof - query number of element degrees of freedom vfe_MPCNumDepDof - query number of dependent degrees of freedom vfe_MPCDofPrimMap - query primary element degree of freedom map vfe_MPCNumPrimDof - query number of primary element degrees of freedom
vfe_MPCPrimReact - constraint reaction vector. vfe_MPCPrimReactStiff - constraint reaction vector, stiffness matrix. vfe_MPCPrimStiff - constraint linear stiffness. vfe_MPCPrimCoeff - primary constraint coefficients. vfe_MPCReact - reaction vector vfe_MPCReactStiff - reaction vector, stiffness matrix vfe_MPCStiff - linear stiffness matrix
vfe_MPCSetDirCos - set direction cosine matrices.
Constraints may be imposed using either a penalty method or a direct transformation. If the penalty method is used then the penalty factor used to impose the constraint using a penalty function method is specified using vfe_MPCSetParamd. The effective stiffness used to enforce the constraint and the force of constraint are computed using vfe_MPCStiff, vfe_MPCReactStiff and vfe_MPCReact.
By default, a penalty function method is used to impose the constraint. A Lagrange multiplier method may be chosen by calling vfe_MPCSetParami with type VFE_LAGMULT. The Lagrange multiplier may be augmented by penalty stiffness if desired. If the Lagrange multiplier method is enabled, a Lagrange multiplier freedom type SYS_DOF_LAGM is added to the constraint degree of freedom map. This freedom type indicates an element local freedom type which must not be assembled to any other freedoms. The element "stiffness" matrix for a constraint satisfied with Lagrange multipliers will contain zeros on the diagonal. Care must be taken to process Lagrange multiplier freedoms when solving the global equation system to account for the zero diagonal entry at these freedoms. Usually this means that the global equation number for a Lagrange multiplier freedom must be after all other freedoms involved in its constraint equation. Also note that each Lagrange multiplier freedom will result in a negative root in the global system matrix. The coefficients of the Lagrange multiplier stiffness are scaled by the penalty factor.
Constraint calculations may be performed involving degrees of freedom in rotated coordinate systems. Use the function vfe_MPCSetDirCos to set the direction cosine matrices for each degree of freedom location which is rotated. As a result of this feature, the stiffness matrix or transformation matrix representing the constraint will be expressed in the rotated degree of freedom system rather than the global coordinate system.
For cases where the MPC generates more than one constraint, it is more efficient to generate stiffness matrices and/or reaction forces one dependent degree of freedom at a time. The number of primary degrees of freedom for a specific dependent degree of freedom can be obtained with vfe_MPCNumPrimDof, the the degree of freedom map is obtained with vfe_MPCDofPrimMap. One then loops over each dependent degree of freedom and queries for reactions with vfe_MPCPrimReact, linear stiffness with vfe_MPCPrimStiff, or both with vfe_MPCPrimReactStiff.
Use vfe_MPCPrimCoeff to retrieve the primary constraint coefficients for each dependent degree of freedom for use in a direct substitution approach.
For example, a set of statically determinant constraints in 3D structural analysis may be applied by a combination of the following six single point constraints on three node locations, a,b and c, which define a plane. Three translations are grounded at node a, normal translations are constrained at nodes b and c and a tangential translation is constrained at node b.
The sliding coupling restrains a node to be on a line connecting two other nodes. The node may slide along the line and the line is free to change length. The sliding coupling is similar to the ABAQUS MPC SLIDER Use vfe_MPCSetSlider to define sliding couplings.
Two forms of the ABAQUS distributed coupling constraint are implemented, one for 3D analysis and another specifically useful for 2D analysis. The ABAQUS distributed coupling type is specified using vfe_MPCSetDist. The NASTRAN RBE3 interpolation constraint type is specified using vfe_MPCSetRBE3.
A closely related constraint is the point on surface constraint implemented with vfe_MPCSetPntSurf. This constraint couples the translations and rotations of a node to the translations of the nodes on an element face.
C1*U1 + C2*U2 + ... + Ci*Ui + ... + Cn*Un = Rwhere Ui represents a degree of freedom at a node and Ci is the associated coefficient. The multipoint constraint may be contain an inhomogeneity, R. The first degree of freedom, U1, is defined to be the dependent freedom. This implies that C1 must not be zero. The standard form type is specified using vfe_MPCSetStan.
*vfe_MPCBegin - create an instance of a MPC object
vfe_MPC *vfe_MPCBegin ()
None
Destroy an instance of a MPC object using
void vfe_MPCEnd (vfe_MPC *mpc)
Return the current value of a MPC object error flag using
Vint vfe_MPCError (vfe_MPC *mpc)
vfe_MPCDef - specify constraint type
void vfe_MPCDef (vfe_MPC *mpc, Vint type)
mpc Pointer to MPC object. type Constraint type =MPC_DIST ABAQUS Distributed coupling =MPC_GROUND Ground =MPC_PLANE Plane =MPC_JOINT Rigid joint =MPC_KINE Kinematic coupling =MPC_LINK Inextensional coupling =MPC_PNTSURF Point to surface =MPC_RBE3 NASTRAN RBE3 =MPC_SLIDER Slider coupling =MPC_STAN Standard form
None
Inquire of a defined type as an output argument using
void vfe_MPCInq (vfe_MPC *mpc, Vint *type)
vfe_MPCSetParami - set integer parameters
void vfe_MPCSetParami (vfe_MPC *mpc, Vint type, Vint iparam)
mpc Pointer to MPC object. type Type of formulation parameter to set =VFE_LAGMULT Lagrange multiplier =VFE_USEOFFSET Toggle inclusion of point to surface coupling offset. =VFE_SCALEPENALTY Scale penalty to normalize constraints iparam Integer parameter value. =SYS_OFF Toggle off =SYS_ON Toggle on =VFE_LAGMULT_NONE Lagrange multiplier off, penalty only =VFE_LAGMULT_ONLY Lagrange multiplier only =VFE_LAGMULT_AUGMENT Lagrange multiplier and penalty
None
Use VFE_USEOFFSET to toggle the inclusion of an offset in the point to surface coupling using vfe_MPCSetPntSurf. If disabled then the constraint is generated assuming the dependent node location has been projected to the surface. If enabled an additional offset constraint is added to the point on surface constraint to account for the offset of the dependent node from its projection point on the surface. By default VFE_USEOFFSET is SYS_OFF.
Use VFE_SCALEPENALTY to toggle the scaling of the penalty factor so that the maximum diagonal on the stiffness matrix is equal to the penalty. If disabled, the penalty is not scaled and magnitude of the stiffness terms will be generally dependent upon the coordinate units. By default VFE_SCALEPENALTY is SYS_OFF.
vfe_MPCSetParamd - set real parameters
void vfe_MPCSetParamd (vfe_MPC *mpc, Vint type, Vdouble dparam)
mpc Pointer to MPC object. type Type of formulation parameter to set =MPC_PENALTY Penalty used to enforce constraint dparam Double parameter value.
None
vfe_MPCSetDist - set distributed coupling type constraint
void vfe_MPCSetDist (vfe_MPC *mpc, Vint type, Vint ndistpnts, Vint wflag, Vdouble w[])
mpc Pointer to MPC object. type Type of distributed coupling =MPC_DIST_2D 2D distributed coupling =MPC_DIST_3D 3D distributed coupling =MPC_DIST_3DROT 3D distributed stabilized coupling ndistpnts Number of coupling points to which load is distributed. wflag User supplied weights flag =SYS_OFF No weights provided =SYS_ON Weights provided w Vector of user supplied weights at coupling nodes
None
The constraint is intended to be used to distribute forces and moments from a point to forces at a set of coupling nodes. In the special cases in which the coupling nodes are co-linear a rotation stabilization option is available.
This constraint does not impose rigid body constraints on the coupling nodes. The coupling nodes are free to deform and as such this makes this constraint more flexible in comparison to a set of rigid link constraints. A vector of user supplied weights, w, for each of the ndistpnts coupling nodes may be supplied by setting the flag, wflag. If wflag is zero then w is ignored and a set of equal weights is used internally. In this case w may be entered as NULL. Internally all user input weights are scaled to sum to unity.
If type MPC_DIST_2D is specified, ndistpnts must be at least 2 and the points may not be coincident. If type MPC_DIST_3D is specified, ndistpnts must be at least 3 and the points may not be colinear. If type MPC_DIST_3DROT is specified, ndistpnts must be at least 2 and the points may be colinear. This constraint must only be used when rotational degrees of freedom are active at the independent coupling nodes, ie. are connected to shell or beam type elements.
This constraint utilizes ndistpnts+1 coordinates, the first being the dependent node containing the force to be distributed and the subsequent coordinates being the coupling nodes.
The directions of the degrees of freedom at the degree of freedom locations may be specified using vfe_MPCSetDirCos.
vfe_MPCSetGround - set ground type constraint
void vfe_MPCSetGround (vfe_MPC *mpc, Vint tag)
mpc Pointer to MPC object. tag Degree of freedom at node
None
SYS_DOF_TX SYS_DOF_TY SYS_DOF_TZ SYS_DOF_RX SYS_DOF_RY SYS_DOF_RZ
vfe_MPCSetJoint - set joint type constraint
void vfe_MPCSetJoint (vfe_MPC *mpc, Vint ntags, Vitn tags[])
mpc Pointer to MPC object. ntag Number of degrees of freedom to match tags List of degrees of freedom to match
None
SYS_DOF_TX SYS_DOF_TY SYS_DOF_TZ SYS_DOF_RX SYS_DOF_RY SYS_DOF_RZ
vfe_MPCSetKine - set kinematic coupling type properties
void vfe_MPCSetKine (vfe_MPC *mpc, Vint loc[6], Vint tag[6], Vint ntagdep, Vint locdep[], Vint tagdep[])
mpc Pointer to MPC object. loc Locations of 6 independent degrees of freedom tag Types of 6 independent degrees of freedom ntagdep Number of degrees of freedom at dependent location locdep Locations of ntagdep dependent degrees of freedom tagdep Types of ntagdep dependent degrees of freedom
None
The directions of the degrees of freedom at the degree of freedom locations may be specified using vfe_MPCSetDirCos.
vfe_MPCSetLink - set inextensional coupling type properties
void vfe_MPCSetLink (vfe_MPC *mpc, Vint locdep, Vint tagdep)
mpc Pointer to MPC object. locdep Location of dependent degree of freedom tagdep Type of dependent degree of freedom
None
vfe_MPCSetPlane - set plane type properties
void vfe_MPCSetPlane (vfe_MPC *mpc, Vint type)
mpc Pointer to MPC object. type Type of plane oriented constraint =MPC_PLANE_NORM3D Constraint normal to plane =MPC_PLANE_TANG3D Constraint tangential to plane =MPC_PLANE_TANG2D Constraint tangential to line
None
The 2D plane type constraint, MPC_PLANE_TANG2D, is meant for 2D analysis and defines a directional constraint specified by two nodes which define a line.
The constraint type MPC_PLANE_NORM3D constrains the displacement at the first node normal to the plane. The constraint type MPC_PLANE_TANG3D constrains the displacement at the first node tangent to the plane and normal to the line between the first and second node. The constraint type MPC_PLANE_TANG2D constrains the displacement at the first node tangent to the line between the first and second node.
vfe_MPCSetRBE3 - set NASTRAN RBE3 properties
void vfe_MPCSetRBE3 (vfe_MPC *mpc, Vint ndepdofs, Vint tagsdep[], Vint ndistdofs, Vint indeplocs[], Vint indeptags[], Vint wflag, Vdouble w[])
mpc Pointer to MPC object. ndepdof Number of dependent degrees of freedom 1 <= ndepdof <= 6 tagsdep Types of ndepdof dependent degrees of freedom ndistdofs Number of independent interpolation degrees of freedom indeplocs Locations of ndistdofs interpolation degrees of freedom indeptags Types of ndistdofs degrees of freedom wflag User supplied weights flag =SYS_OFF No weights provided =SYS_ON Weights provided w Vector of ndistdofs user supplied weights
None
A vector of user supplied weights, w, for each of the ndistdofs interpolation degrees of freedom may be supplied by setting the flag, wflag. If wflag is zero then w is ignored and a set of equal weights is used internally. In this case w may be entered as NULL.
The directions of the degrees of freedom at the degree of freedom locations may be specified using vfe_MPCSetDirCos.
vfe_MPCSetPntSurf - set point on surface coupling type properties
void vfe_MPCSetPntSurf (vfe_MPC *mpc, Vint shape, Vint maxi, Vint maxj)
mpc Pointer to MPC object. shape The topological shape for the surface =SYS_SHAPETRI Triangle =SYS_SHAPEQUAD Quadrilateral maxi The number of points along the i direction. If maxi = 0 then the linear Serendipity element form of the specified shape is assumed. maxj The number of points along the j direction. If maxj = 0 then a Serendipity element surface is assumed. If 2 <= maxj <= 3 and 2 <= maxi <= 3, then a Lagrange element surface is assumed. If maxi != 0 then maxj = 0 or maxj = maxi.
None
The directions of the degrees of freedom at the degree of freedom locations may be specified using vfe_MPCSetDirCos.
vfe_MPCSetSlider - set slider coupling type properties
void vfe_MPCSetSlider (vfe_MPC *mpc, Vint tagdep[2])
mpc Pointer to MPC object. tagdep Type of two dependent degrees of freedom
None
The directions of the degrees of freedom at the degree of freedom locations may be specified using vfe_MPCSetDirCos.
vfe_MPCSetStan - set standard MPC properties
void vfe_MPCSetStan (vfe_MPC *mpc, Vint nterms, Vint tag[], Vdouble c[], Vdouble r)
mpc Pointer to MPC object. nterms Number of terms in standard form tag Types of nterms degrees of freedom c Coefficients r Inhomogeneity
None
vfe_MPCDofMap - query element degree of freedom map
void vfe_MPCDofMap (vfe_MPC *mpc, Vint analysistype, Vint loc[], Vint tag[])
mpc Pointer to MPC object. analysistype The type of analysis =VFE_ANALYSIS_STRUCTURAL Structural analysis =VFE_ANALYSIS_THERMAL Thermal analysis
loc Vector of degree of freedom locations tag Vector of degree of freedom types
The length of the loc and tag vectors is equal to the number of element degrees of freedom. Use vfe_MPCNumDof to return the number of element degrees of freedom. Note that VFE_ANALYSIS_THERMAL is only appropriate for a MPC_STAN type constraint.
vfe_MPCNumDof - query number of element degrees of freedom
void vfe_MPCNumDof (vfe_MPC *mpc, Vint analysistype, Vint *nedofs)
mpc Pointer to MPC object. analysistype The type of analysis =VFE_ANALYSIS_STRUCTURAL Structural analysis =VFE_ANALYSIS_THERMAL Thermal analysis
nedofs Number of element degrees of freedom
vfe_MPCNumDepDof - query number of dependent degrees of freedom
void vfe_MPCNumDepDof (vfe_MPC *mpc, Vint analysistype, Vint *ndepdofs)
mpc Pointer to MPC object. analysistype The type of analysis =VFE_ANALYSIS_STRUCTURAL Structural analysis =VFE_ANALYSIS_THERMAL Thermal analysis
ndepdofs Number of element dependent degrees of freedom
vfe_MPCNumPrimDof - query number of primary degrees of freedom
void vfe_MPCNumPrimDof (vfe_MPC *mpc, Vint *nprimdofs)
mpc Pointer to MPC object.
nprimdofs Number of primary degrees of freedom
NONE
AQUI
vfe_MPCSetDirCos - set direction cosine matrices.
void vfe_MPCSetDirCos (vfe_MPC *mpc, Vint nlocs, Vint locs[], Vdouble rot[][3][3])
mpc Pointer to MPC object. nlocs Number of location points locs Location points
rot nlocs direction cosine matrices
NONE
vfe_MPCDofPrimMap - query primary element degree of freedom map
void vfe_MPCDofPrimMap (vfe_MPC *mpc, Vint id, Vint loc[], Vint tag[])
mpc Pointer to MPC object. id Dependent degree of freedom id
loc Vector of degree of freedom locations tag Vector of degree of freedom types
NONE
The length of the loc and tag vectors is equal to the number of element primary degrees of freedom. Use vfe_MPCNumPrimDof to return the number of primary element degrees of freedom.id <= ndepdofs
vfe_MPCPrimCoeff - standard constraint coefficients for a dependent dof
void vfe_MPCPrimCoeff (vfe_MPC *mpc, Vint iddof Vdouble x[][3], Vdouble bm[], Vdouble *c)
mpc Pointer to MPC object. iddof Dependent degree of freedom x Array of node locations.
bm Coefficients of standard constraint c Non-homogeneous coefficient for standard constraint
vfe_MPCPrimReact - reaction vector for a dependent dof
void vfe_MPCPrimReact (vfe_MPC *mpc, Vdouble x[][3], Vdouble u[], Vint iddof, Vdouble r[])
mpc Pointer to MPC object. x Array of node locations. u Degree of freedom vector of displacements iddof Dependent degree of freedom
r Degree of freedom reaction vector
vfe_MPCPrimReactStiff - reaction vector, stiffness matrix for a dependent dof
void vfe_MPCPrimReactStiff (vfe_MPC *mpc, Vdouble x[][3], Vdouble u[], Vint iddof, Vdouble kflag, Vdouble r[], Vdouble k[])
mpc Pointer to MPC object. x Array of node locations. u Degree of freedom vector of displacements iddof Dependent degree of freedom kflag Flag to compute stiffness matrix, k =SYS_OFF Do not compute stiffness matrix =SYS_ON Compute and return stiffness matrix
r Degree of freedom reaction vector k Degree of freedom stiffness matrix
vfe_MPCPrimStiff - linear stiffness matrix for a dependent dof
void vfe_MPCPrimStiff (vfe_MPC *mpc, Vdouble x[][3], Vint iddof, Vdouble kl[])
mpc Pointer to MPC object. x Array of node locations. iddof Dependent degree of freedom
kl Degree of freedom stiffness matrix
vfe_MPCReact - reaction vector
void vfe_MPCReact (vfe_MPC *mpc, Vdouble x[][3], Vdouble u[], Vdouble r[])
mpc Pointer to MPC object. x Array of node locations. u Degree of freedom vector of displacements
r Degree of freedom reaction vector
vfe_MPCReactStiff - reaction vector, stiffness matrix
void vfe_MPCReactStiff (vfe_MPC *mpc, Vdouble x[][3], Vdouble u[], Vdouble kflag, Vdouble r[], Vdouble k[])
mpc Pointer to MPC object. x Array of node locations. u Degree of freedom vector of displacements kflag Flag to compute stiffness matrix, k =SYS_OFF Do not compute stiffness matrix =SYS_ON Compute and return stiffness matrix
r Degree of freedom reaction vector k Degree of freedom stiffness matrix
vfe_MPCStiff - linear stiffness matrix
void vfe_MPCStiff (vfe_MPC *mpc, Vdouble x[][3], Vdouble kl[])
mpc Pointer to MPC object. x Array of node locations.
kl Degree of freedom stiffness matrix