MBSVT 1.0
Functions/Subroutines | Variables
CONSTRAINTS Module Reference

Module that manages the constraints. More...

Functions/Subroutines

subroutine, public ADDConstr_UnitEulParam (body)
 Adds an unitary vector constraint to the Euler parameters of one body. It's NOT a user function, it's intended to be called by the solver.
subroutine, public ADDConstr_dot1 (body1, body2, vector1, vector2)
 Adds a dot-1 joint between two bodies or between the ground and one body.
subroutine, public ADDConstr_SpheJoint (body1, body2, point1, point2)
 Adds a sphercal joint between two bodies or between the ground and one body.
subroutine, public ADDConstr_RevJoint (body1, body2, point1, point2, vect1, vect2)
 Adds a revolute joint between two bodies or between the ground and one body.
subroutine, public ADDConstr_TransJoint (body1, body2, point1, point2, vect1x, vect1y, vect2x, vect2y)
 Adds a translational joint between two bodies or between the ground and one body.
subroutine, public ADDConstr_Drive_rgx (body, i_MOTOR)
 Adds a driving constraint to the x-coordinate of the CDM of a body.
subroutine, public ADDConstr_Drive_rgy (body, i_MOTOR)
 Adds a driving constraint to the y-coordinate of the CDM of a body.
subroutine, public ADDConstr_Drive_rgz (body, i_MOTOR)
 Adds a driving constraint to the z-coordinate of the CDM of a body.
subroutine, public ADDConstr_Drive_eu0 (body, i_MOTOR)
 Adds a driving constraint to the 1st Euler parameter of a body.
subroutine, public ADDConstr_Drive_eu1 (body, i_MOTOR)
 Adds a driving constraint to the 2nd Euler parameter of a body.
subroutine, public ADDConstr_Drive_eu2 (body, i_MOTOR)
 Adds a driving constraint to the 3rd Euler parameter of a body.
subroutine, public ADDConstr_Drive_eu3 (body, i_MOTOR)
 Adds a driving constraint to the 4rd Euler parameter of a body.
subroutine ADDConstr_Drive_rgEul (ind, i_MOTOR)
 Adds a driving constraint to any body coordinate. It's NOT a user function, it's intended to be called by other user constraints.
subroutine, public ADDConstr_Drive_dist (body1, body2, point1, point2, i_MOTOR)
 Adds a driving constraint to a distance between two points in two different bodies.
subroutine, public evalconstraints
 Subroutine that evaluates the constraints vector ( $ \bm \Phi $). It's NOT a user function, it's intended to be called by the solver.
subroutine, public evaljacobian
 Subroutine that evaluates the jacobian of the constraints vector ( $ {\bm \Phi}_{\bf q} $). It's NOT a user function, it's intended to be called by the solver.
subroutine, public evalderjacobianqp
 Subroutine that evaluates the term $ \dot{\bm \Phi}_{\bf q} {\dot{\bf q}} $. It's NOT a user function, it's intended to be called by the solver.
subroutine, public evalderjacobian
 Subroutine that evaluates the term $ {\dot{\bm \Phi}}_{\bf q} $. It's NOT a user function, it's intended to be called by the solver.
subroutine, public evalderderjacobian
 Subroutine that evaluates the term $ {\ddot{\bm \Phi}}_{\bf q} $. It's NOT a user function, it's intended to be called by the solver.
subroutine, public evaljacobderjacobianqp
subroutine, public evalfit
subroutine, public evalfitp
subroutine, public evaljacob_jacob (lb)
subroutine, public evaljacobT_jacob (lb)
subroutine, public CONSTRAINTS_Setup

Variables

INTEGER nConstr_UnitEulParam = 0
INTEGER nConstr_dot1GB = 0
INTEGER nConstr_dot1 = 0
INTEGER nConstr_SpheJointGB = 0
INTEGER nConstr_SpheJoint = 0
INTEGER nConstr_RevJointGB = 0
INTEGER nConstr_RevJoint = 0
INTEGER nConstr_TransJointGB = 0
INTEGER nConstr_TransJoint = 0
INTEGER nConstr_Drive_rgEul = 0
INTEGER nConstr_Drive_distGB = 0
INTEGER nConstr_Drive_dist = 0
TYPE(typeConstr_UnitEulParam),
dimension(:), allocatable 
Constr_UnitEulParam
TYPE(typeConstr_dot1),
dimension(:), allocatable 
Constr_dot1GB
TYPE(typeConstr_dot1),
dimension(:), allocatable 
Constr_dot1
TYPE(typeConstr_SpheJoint),
dimension(:), allocatable 
Constr_SpheJointGB
TYPE(typeConstr_SpheJoint),
dimension(:), allocatable 
Constr_SpheJoint
TYPE(typeConstr_RevJoint),
dimension(:), allocatable 
Constr_RevJointGB
TYPE(typeConstr_RevJoint),
dimension(:), allocatable 
Constr_RevJoint
TYPE(typeConstr_TransJoint),
dimension(:), allocatable 
Constr_TransJointGB
TYPE(typeConstr_TransJoint),
dimension(:), allocatable 
Constr_TransJoint
TYPE(typeconstr_Drive_rgEul),
dimension(:), allocatable 
Constr_Drive_rgEul
TYPE(typeconstr_Drive_Dist),
dimension(:), allocatable 
Constr_Drive_DistGB
TYPE(typeconstr_Drive_Dist),
dimension(:), allocatable 
Constr_Drive_Dist

Detailed Description

Module that manages the constraints.

This module:

1)Authomatically creates the rigid body constraints, associated to the redundant Euler parameters.
2)Add joints to the model (requested by the user), translating them into primitive constraints for each type of joint.
3)Manages the evaluation of the constraints vector, its jacobian matrix and all its associated derivatives.


Function/Subroutine Documentation

subroutine,public CONSTRAINTS::ADDConstr_dot1 ( INTEGER,intent(in)  body1,
INTEGER,intent(in)  body2,
real(8),dimension(3),intent(in)  vector1,
real(8),dimension(3),intent(in)  vector2 
)

Adds a dot-1 joint between two bodies or between the ground and one body.

Parameters:
body1first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground.
body2second body involved. It cannot be the ground.
vector1vector in the first body/ground in the body reference frame.
vector2vector in the second body in the body reference frame.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_dist ( INTEGER,intent(in)  body1,
INTEGER,intent(in)  body2,
REAL(8),dimension(3),intent(in)  point1,
REAL(8),dimension(3),intent(in)  point2,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to a distance between two points in two different bodies.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu3.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_eu0 ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the 1st Euler parameter of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu0.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_eu1 ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the 2nd Euler parameter of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu1.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_eu2 ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the 3rd Euler parameter of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu2.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_eu3 ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the 4rd Euler parameter of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu3.

Here is the call graph for this function:

subroutine CONSTRAINTS::ADDConstr_Drive_rgEul ( INTEGER,intent(in)  ind,
INTEGER,intent(in)  i_MOTOR 
) [private]

Adds a driving constraint to any body coordinate. It's NOT a user function, it's intended to be called by other user constraints.

Parameters:
indindex of the coordinate involved.
i_MOTORindex of the kinematic actuator.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_rgx ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the x-coordinate of the CDM of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgx.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_rgy ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the y-coordinate of the CDM of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgy.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_Drive_rgz ( INTEGER,intent(in)  body,
INTEGER,intent(in)  i_MOTOR 
)

Adds a driving constraint to the z-coordinate of the CDM of a body.

Parameters:
bodybody involved.
i_MOTORindex of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgz.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_RevJoint ( INTEGER,intent(in)  body1,
INTEGER,intent(in)  body2,
REAL(8),dimension(3),intent(in)  point1,
REAL(8),dimension(3),intent(in)  point2,
REAL(8),dimension(3),intent(in)  vect1,
REAL(8),dimension(3),intent(in)  vect2 
)

Adds a revolute joint between two bodies or between the ground and one body.

Parameters:
body1first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground.
body2second body involved. It cannot be the ground.
point1point in the first body/ground in the body reference frame.
point2point in the second body in the body reference frame.
vect1vector in the first body/ground in the body reference frame.
vect2vector in the second body in the body reference frame.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_SpheJoint ( INTEGER,intent(in)  body1,
INTEGER,intent(in)  body2,
real(8),dimension(3),intent(in)  point1,
real(8),dimension(3),intent(in)  point2 
)

Adds a sphercal joint between two bodies or between the ground and one body.

Parameters:
body1first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground.
body2second body involved. It cannot be the ground.
point1point in the first body/ground in the body reference frame.
point2point in the second body in the body reference frame.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_TransJoint ( INTEGER,intent(in)  body1,
INTEGER,intent(in)  body2,
REAL(8),dimension(3),intent(in)  point1,
REAL(8),dimension(3),intent(in)  point2,
REAL(8),dimension(3),intent(in)  vect1x,
REAL(8),dimension(3),intent(in)  vect1y,
REAL(8),dimension(3),intent(in)  vect2x,
REAL(8),dimension(3),intent(in)  vect2y 
)

Adds a translational joint between two bodies or between the ground and one body.

Parameters:
body1first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground.
body2second body involved. It cannot be the ground.
point1point in the first body/ground in the body reference frame.
point2point in the second body in the body reference frame.
vect1yvector along the tranlating direction in the first body/ground in the body reference frame.
vect1xvector perpendicular to vect1y in the first body/ground in the body reference frame.
vect2yvector along the tranlating direction in the second body in the body reference frame.
vect2xvector perpendicular to vect1y and parallel to vect1x in the second body in the body reference frame.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::ADDConstr_UnitEulParam ( INTEGER,intent(in)  body)

Adds an unitary vector constraint to the Euler parameters of one body. It's NOT a user function, it's intended to be called by the solver.

Parameters:
bodycorresponding body

Here is the call graph for this function:

subroutine,public CONSTRAINTS::CONSTRAINTS_Setup ( )

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evalconstraints ( )

Subroutine that evaluates the constraints vector ( $ \bm \Phi $). It's NOT a user function, it's intended to be called by the solver.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evalderderjacobian ( )

Subroutine that evaluates the term $ {\ddot{\bm \Phi}}_{\bf q} $. It's NOT a user function, it's intended to be called by the solver.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evalderjacobian ( )

Subroutine that evaluates the term $ {\dot{\bm \Phi}}_{\bf q} $. It's NOT a user function, it's intended to be called by the solver.

subroutine,public CONSTRAINTS::evalderjacobianqp ( )

Subroutine that evaluates the term $ \dot{\bm \Phi}_{\bf q} {\dot{\bf q}} $. It's NOT a user function, it's intended to be called by the solver.

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evalfit ( )

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evalfitp ( )

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evaljacob_jacob ( real(8),dimension(dim),intent(in)  lb)

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evaljacobderjacobianqp ( )

Here is the call graph for this function:

subroutine,public CONSTRAINTS::evaljacobian ( )

Subroutine that evaluates the jacobian of the constraints vector ( $ {\bm \Phi}_{\bf q} $). It's NOT a user function, it's intended to be called by the solver.

subroutine,public CONSTRAINTS::evaljacobT_jacob ( real(8),dimension(nrt),intent(in)  lb)

Here is the call graph for this function:


Variable Documentation

TYPE (typeConstr_dot1),dimension(:),allocatable CONSTRAINTS::Constr_dot1
TYPE (typeConstr_dot1),dimension(:),allocatable CONSTRAINTS::Constr_dot1GB
TYPE (typeconstr_Drive_Dist),dimension(:),allocatable CONSTRAINTS::Constr_Drive_Dist
TYPE (typeConstr_RevJoint),dimension(:),allocatable CONSTRAINTS::Constr_RevJoint
TYPE (typeConstr_RevJoint),dimension(:),allocatable CONSTRAINTS::Constr_RevJointGB
TYPE (typeConstr_SpheJoint),dimension(:),allocatable CONSTRAINTS::Constr_SpheJoint
TYPE (typeConstr_SpheJoint),dimension(:),allocatable CONSTRAINTS::Constr_SpheJointGB
TYPE (typeConstr_TransJoint),dimension(:),allocatable CONSTRAINTS::Constr_TransJoint