GCON

The GCON statement introduces a constraint equation that must be satisfied by Adams Solver (C++) during the simulation. This allows you to specify both holonomic and non-holonomic constraints.

Format

GCON/id [, I=id], FUNCTION=exp

Arguments

 
I
If specified, the reaction force on this marker is measured and reported as part of standard results. The reaction force reported is the force that is exerted on the marker in order to satisfy the constraint equation. Note that if a marker is specified and the FUNCTION exp has no dependency on it, GCON reports a zero force.
Default value: the ground coordinate system (GCS)
FUNCTION
Expression that Adams Solver (C++) forces to zero during the simulation. See the Extended Definition for more information.

Extended Definition

While the JOINT statement describes a physically recognizable combination of constraints that are used to connect bodies together, the GCON statement enables you to define an arbitrary constraint specific to a particular model. The GCON statement is more general and can be used to equivalently define the existent JOINT elements. Therefore, the spherical joint
JOINT/11, SPHERICAL, I=2,J=3
could be equivalently replaced by the following set of three GCONs:
GCON/111, I=2, FUNC=DX(2,3)
GCON/112, I=2, FUNC=DY(2,3)
GCON/113, I=2, FUNC=DZ(2,3)
The GCON statement allows you to define both holonomic and non-holonomic constraints. Holonomic constraints only depend on position measures, like GCON/111 through GCON/113 above. A constraint is non-holonomic if (a) its expression exp1 contains velocity measures, and (b) there is no expression exp2 that is the time integral of exp1. An example of a non-holonomic constraint is a roll without slip condition
GCON/34, FUNC=VX(2) - WZ(2)*DY(2)
The GCON statement introduces a constraint to Adams Solver (C++) that is guaranteed to be handled correctly as long as the FUNCTION is in Pfaffian form. In this context, note that any holonomic expression is automatically in Pfaffian form. In the case of non-holonomic constraints, a Pfaffian constraint requires that the FUNCTION is limited to expressions that are linear in velocity quantities. In other words, if there are velocity quantities in the definition of the FUNCTION (as is the case in the previous GCON), a partial derivative of the FUNCTION with respect to any velocity quantity present in its definition should lead to an expression that does not depend on velocity quantities. The previous GCON is therefore in Pfaffian form, since , and , which makes the FUNC linear in velocity quantities.
Another example of a Pfaffian non-holonomic constraint is the perpendicularity condition
GCON/25, FU=VX(2,3)*DX(2,1)+ VY(2,3)*DY(2,1)+ VZ(2,3)*DZ(2,1)
that indicates that the velocity V(2,3) is orthogonal to the distance vector between markers I=2 and J=1.
An example of a non-Pfaffian GCON is
GCON/25,FU=VX(2,3)*VX(2,3)*DX(2,1)+VY(2,3)*DY(2,1)+ VZ(2,3)*DZ(2,1)
For this example, , which is an expression that depends on the velocity measure VX(2,3).
The FUNCTION expression exp can reference variables defined in the .adm file through the VARVAL construct. It should be stressed again that correct handling of the GCON requires that the expression defining the VARIABLE only depends on time, and position and velocity measures; in other words, the Pfaffian character of the GCON is not undermined by the presence of the VARVAL.
Discussion on non-holonomic constraints
In all cases, whether a constraint is holonomic or non-holonomic, Adams Solver (C++) handles the said constraint by adding the term to the governing equations of motion. For a thorough theoretical discussion on the handling of such constraints, see chapter 5 in reference [1] which is exclusively dedicated to the issue of non-holonomic constraints. The reader will find therein that the topic of handling non-holonomic constraints is still on the discussion table. Some researchers are of the opinion the physics of the model is correctly handled by adding the term to the governing equations, some researchers have no opinion on the subject.
References
John G. Papastavridis, Analytical Mechanics: A Comprehensive Treatise on the Dynamics of Constrained Systems; For Engineeers, Physicists, and Mathematicians. 1st Edition. Oxford University Press, 2002.
 
 
Tip:  
There is no dedicated function that returns the reaction force induced by a user constraint on a marker. You can invoke an existing function such as FX(I[; J][;K]) for this purpose. Note that FX(I[; J][;K]) reports the force that acts on the I marker as a result of both constraint and external forces applied to this marker. To only obtain the contribution of the GCON, the markers that appear in FX(I[; J][;K]) should be exclusively used to define the GCON, and no other elements such as applied forces, joints, or motions should refer them.
 
Caution:  
As mentioned in the Extended Definition, correct handling of a GCON element assumes a FUNCTION defined in Pfaffian form.
Kinematic models are incompatible with velocity constraints. If a model is rendered kinematic by displacement constraints, any additional velocity constraints will be either redundant or conflicting. In either case, Adams Solver (C++) is incapable of analyzing the model as explained in the Known Limitations. Consequently, a model that contains velocity constraints can only be simulated using the dynamic solver.
For a position-level GCON, the FUNCTION must be at least three times differentiable. If the GCON introduces a velocity-level constraint, then the FUNCTION should be at least twice differentiable. This requirement ensures that internally Adams Solver (C++) can take the necessary derivatives to perform certain types of analyses such as Acceleration/Force reconciliation, dynamic analysis, and so on. Note that if the expression provided for GCON is not continuously differentiable for the required number of times, the integrator will either fail, or have a difficult time finding the numerical solution.
The ability of the Adams Solver (C++) to handle function expressions to provide the necessary derivatives required by the GCON does not extend to user subroutines. Consequently, a VARIABLE can only be referenced in a GCON provided it is defined using function expressions, rather than a VARSUB subroutine.
Use the RESULTS/XRF statement in order to get the reaction force on marker I reported in the results file. This is the only output format currently able to handle GCON output.
Models with GCONs defining velocity constraints can't be linearized. This limitation will be removed in future releases.
GCONs defined with acceleration constraints are ignored by Solver. Avoid defining GCONs with accelerations.

Examples

The following example refers to a model that has two pendulums connected to ground through revolute joints 1 and 2 (markers 5 and 7 are ground markers). The motion of the two pendulums takes place in the Oxy plane. A rotational motion 17 is specified on the first revolute joint. The user defined constraint 23 enforces the second pendulum to follow the motion of the first pendulum:
JOINT/1, REVOLUTE, I = 5, J = 6
JOINT/2, REVOLUTE, I = 7, J = 8
MOTION/17, ROTATIONAL, JOINT = 1, FUNCTION = 30.0D*time
GCON/23, FUNC=AZ(6, 5)-AZ(8, 7)
The generalized constraint GCON/23 requires the rotation angle about the global z-axis of marker 8 to be identical to the same rotation angle for marker 6. The latter is the marker on which motion 17 acts. As a result, this motion will actually drive both pendulums. Consequently, the torque applied to induce the prescribed motion is going to be larger than when GCON 23 is not present in the model, because the motion effectively drives both pendulums.
The situation described above, namely the extra torque required to make the second pendulum follow the first pendulum, might not be what you want to see. In this case, the function AO, from Action Only, can be used to indicate that the reaction torque on the first pendulum induced by the motion of the second pendulum is to be ignored. Replacing GCON/23 with GCON/24:
GCON/24, FUNC=AO(AZ(6))-AZ(8)
will keep the torque necessary to drive the first pendulum unchanged from the case when the GCON is actually not present at all. Therefore, the second pendulum follows the motion of the first pendulum, but the reaction torque in MOTION/17 is shielded from this effect.
An equivalent way of imposing that the second pendulum will follow the motion of the first one is by replacing GCON 23 with the following user constraint:
GCON/25, FUNC=WZ(6)-WZ(8)
This user constraint indicates for the two markers that the angular velocity perpendicular to the plane of rotation should be identical. As pointed out in the Caution: section, keep in mind that for this simple model, the motion of the second pendulum is completely determined by the motion of the first pendulum. Nevertheless, the number of degrees of freedom at the position level is one, and therefore the system is not kinematically determinate. Consequently, simulation of this model requires the use of the dynamic solver.
The GEAR statement in the following .adm snippet:
JOINT/2,REVOLUTE,I=6,J=7
JOINT/3,REVOLUTE,I=8,J=9
GEAR/1 ,JOINTS=2,3, CV=10
could be replaced with a non-holonomic velocity based gear constraint:
GCON/1, I=6
,FUN=UVZ(10)*(WXYZ(6,7)%DXYZ(10,6)-WXYZ(8,9)%DXYZ(10,8))
The example also previews a 3D expression language extension wherein the UVZ(10) measure refers to a Unit Vector (UV) in the direction of the z-axis of marker 10, and the ’%’ corresponds to the cross product. Likewise, DXYZ(10,6) represents the three-dimensional distance vector between markers 10 and 6, while WXYZ(8,9) is the angular velocity of marker 8 with respect to marker 9.
Note that if the GEAR statement was changed to a GCON statement in a kinematically determinate model, that is, a zero degree of freedom model, the model would gain one degree-of-freedom and become a dynamic model. This is because one displacement constraint has been eliminated and replaced with a velocity constraint.

Applications

The user-defined constraint is intended to be used to prescribe simple algebraic equations in position and velocity measures that must be satisfied by Adams Solver (C++). The statement is a new feature added in Adams Solver (C++). Due to its complexity and extremely general nature, it is highly probable that not all possible applications have been anticipated and tested. Although models which exceed the capabilities of the system will, in most cases, be detected, this can not be completely guaranteed. It is advisable to use the GCON statement with a degree of caution. Some of the known limitations are listed below.
One possible use of this element is with complex models during preliminary setup stages. For example, components in a car model can be coerced to satisfy certain constraints during an initial ”settle down” equilibrium analysis prior to specifying a steady-state motion to the whole car. Note that the user constraints can be activated and deactivated through the Adams command language. Another possible use of GCON is to specify arbitrary user-defined motions that relate time and various position and velocity measures.

Known Limitations

Currently, there is no redundancy check for user constraints defined at the velocity level. Therefore, you can impose constraints that are not redundant at the position level, but lead to a set of redundant constraints when their time derivative is considered with other velocity level constraints during the velocity Initial Conditions (IC) analysis. Consider the situation when two constraints are defined as GCON/1, FU=DX(1,2), and GCON/2, FU=VX(1,2). Because the redundant constraint analysis only includes position level constraints, Adams Solver (C++) will not identify that a velocity-level constraint (GCON/2) induces a redundant constraint during the velocity computation. As a result, a model that contains these two user constraints will fail during the velocity analysis with a singular Jacobian error.
The GCON does not support the DIFF, LSE, GSE and TFSISO elements. If you use GCON to constrain the values of DIFF, LSE, GSE and TFSISO elements, note that they will not contribute degrees of freedom that are considered removed by a GCON element. The GCON statement functions properly for Pfaffian expressions depending on position and velocity measures and time, or as mentioned earlier, on VARVALs measures for VARIABLEs that only depend on position and velocity measures and time.
GCON does not support acceleration constraints. If acceleration terms are used in a GCON, they will be ignored by Solver.
See other Constraints available.