varnames.h File Reference

Detailed Description

Definition of macros to unify the name of the variables included in the cuiksystems.

Ensuring names are always the same, we can query the identifier of a variable by constructing its name and querying the corresponding cuiksystem.

Definition in file varnames.h.

Macros

#define IN_PATCH_DOF_VAR(vname, id, ln1, ln2, i)   sprintf(vname,"_n_%s_%s_%s_%u",ln1,ln2,(i==0?"x":"y"),id)
 Auxiliary variables for in_patch. More...
 
#define DOF_VAR(vname, id, ln1, ln2, i)   sprintf(vname,"_d_%s_%s_%u_%u",ln1,ln2,i,id)
 Name for the degrees of freedom. More...
 
#define LINK_ROT(vname, linkName, vn, cn)   sprintf(vname,"_%s_%s_%s",linkName,(vn==0?"u":(vn==1?"v":"w")),(cn==0?"x":(cn==1?"y":"z")))
 Frame of reference for a link. More...
 
#define LINK_ROT2(vname, linkName, vn, cn)   (vn<3?LINK_ROT(vname,linkName,vn,cn):sprintf(vname,"_%s_wp_%s",linkName,(cn==0?"x":(cn==1?"y":"z"))))
 Frame of reference for a link. More...
 
#define LINK_LENGTH(vname, linkName)   sprintf(vname,"_l_%s",linkName)
 Link length. More...
 
#define LINK_REST(vname, linkName)   sprintf(vname,"_r_%s",linkName)
 Rest variable. More...
 
#define LINK_MAX_FORCE(vname, linkName)   sprintf(vname,"_f_%s",linkName)
 Max force variable. More...
 
#define LINK_ROT3_E(vname, linkName, rn, cn)   (rn==cn?sprintf(vname,"_%s_qq_%u",linkName,rn):sprintf(vname,"_%s_qq_%u_%u",linkName,rn,cn))
 Frame of reference for a link using quaternions. More...
 
#define LINK_ROT3_Q(vname, linkName, j)   sprintf(vname,"_%s_q_%u",linkName,j)
 System variables for a rotation matrix using quaternions. More...
 
#define LINK_TRANS(vname, linkName, cn)   sprintf(vname,"_%s_r_%s",linkName,(cn==0?"x":(cn==1?"y":"z")))
 Translation part of the homogeneous transform defining the position of a link in global coordinates. More...
 
#define FREE_JOINT_VAR(vname, id, id1, ln1, id2, ln2, k)   (id1==0?LINK_TRANS(vname,ln2,k):(id2==0?LINK_TRANS(vname,ln1,k):sprintf(vname,"_%s_%s_%s_%u",ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)))
 Variables for a free joint. More...
 
#define PRS_JOINT_VAR(vname, id, ln1, ln2)   sprintf(vname,"_d_%s_%s_%u",ln1,ln2,id)
 One variable for each prismatic joint. More...
 
#define PRS_JOINT_VAR_SING_SIN(vname, id, ln1, ln2)   sprintf(vname,"_d_sing_sin_%s_%s_%u",ln1,ln2,id)
 One end-range singularity variable for each prismatic joint. More...
 
#define PRS_JOINT_VAR_SING_COS(vname, id, ln1, ln2)   sprintf(vname,"_d_sing_cos_%s_%s_%u",ln1,ln2,id)
 One end-range singularity variable for each prismatic joint. More...
 
#define UNV_JOINT_VAR(vname, id, ln1, ln2, i, k)   sprintf(vname,"_uni_%s_%s_%s_%s_%u",(i==0?"u":"v"),ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)
 Two vectors for each universal joint. More...
 
#define IN_PATCH_JOINT_CTRL_VAR(vname, id, ln1, ln2, i)   sprintf(vname,"_in_patch_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)
 Control variables defining a first order Bezier patch. More...
 
#define IN_PATCH_JOINT_CTRL_VAR_SING_SIN(vname, id, ln1, ln2, i)   sprintf(vname,"_in_patch_sing_sin_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)
 End-range singularity variable for each in_patch joint. More...
 
#define IN_PATCH_JOINT_CTRL_VAR_SING_COS(vname, id, ln1, ln2, i)   sprintf(vname,"_in_patch_sing_cos_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)
 End-range singularity variable for each in_patch joint. More...
 
#define IN_PATCH_JOINT_SCALE_VAR(vname, id, ln1, ln2)   sprintf(vname,"_in_patch_%s_%s_l_%u",ln1,ln2,id)
 Scale factor for the normal vector to a first order Bezier patch. More...
 
#define ROT_JOINT_VAR_REF(vname, id, k, ln1, ln2, i)   sprintf(vname,"_%s_%s_%s_%s_%u",(k==0?"w1":"w2"),ln1,ln2,(i==0?"x":(i==1?"y":"z")),id)
 Two vectors to define the angle in a revolute joint. More...
 
#define UNV_JOINT_VAR_REF(vname, id, k, ln1, ln2, i)   sprintf(vname,"_%s_%s_%s_%s_%u",(k==0?"w1":"w2"),ln1,ln2,(i==0?"x":(i==1?"y":"z")),id)
 Two vectors to define the angle in a universal joint. More...
 
#define COS_VAR(vname, id, ln1, ln2)   sprintf(vname,"_cos_%s_%s_%u",ln1,ln2,id)
 Cosinus between two links for rotation/spherical joints. More...
 
#define COS_VAR_SING(vname, id, ln1, ln2)   sprintf(vname,"_cos_sing_%s_%s_%u",ln1,ln2,id)
 One end-range singularity variable for each revolute joint. More...
 
#define COS_VAR_UNI(vname, id, ln1, ln2, k)   sprintf(vname,"_cos_%u_%s_%s_%u",k,ln1,ln2,id)
 Cosinus between two links for universal joints. More...
 
#define COS_VAR_UNI_SING(vname, id, ln1, ln2, k)   sprintf(vname,"_cos_sing_%u_%s_%s_%u",k,ln1,ln2,id)
 End-range singularity variable for each universal joint. More...
 
#define SPH_JOINT_VAR_REF(vname, id, v, ln1, ln2, k)   sprintf(vname,"_sph_%s_%s_%s_%s_%u",(v==0?"w1":"w2"),ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)
 Two vectors defined for when limiting the movement of a spherical joints. More...
 

Macro Definition Documentation

#define IN_PATCH_DOF_VAR (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_n_%s_%s_%s_%u",ln1,ln2,(i==0?"x":"y"),id)

Auxiliary varibles for in_patch joints when CT_REPRESENTATION is REP_JOINTS.

Two variables are defined representing the inverse of the norm of the vector normal to the surface and the tangent vector along the 'u' parameter. These two vectors define a reference frame but can only be defined in un-normalized form. The inverse norm are used to normalize them.

Parameters
vnameString where to store the varaible name.
idThe joint identifier.
ln1Name of the first link involved in the joint.
ln2Name of the second link involved in the joint.
iComponent of the dof (0 for x, 1 for y).

Definition at line 37 of file varnames.h.

#define DOF_VAR (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_d_%s_%s_%u_%u",ln1,ln2,i,id)

Name given to the variables representing degrees of freedom. Only used if CT_REPRESENTATION is REP_JOINTS.

Parameters
vnameString where to store the varaible name.
idThe joint identifier.
ln1Name of the first link involved in the joint.
ln2Name of the second link involved in the joint.
iNumber of the degrees of freedom of this joint (many joints have more than one dof).

Definition at line 52 of file varnames.h.

Referenced by GenerateJointEquations(), and GetJointTransSeq().

#define LINK_ROT (   vname,
  linkName,
  vn,
  cn 
)    sprintf(vname,"_%s_%s_%s",linkName,(vn==0?"u":(vn==1?"v":"w")),(cn==0?"x":(cn==1?"y":"z")))

Three vectors (u,v,w) defining (in global coordinates) the frame of reference for a given link.

Note that this in only one of the ways to parametrize the rotation matrix. See LINK_ROT2 and LINK_ROT3_E for alternative ways.

Parameters
vnameString where to store the variable name.
linkNameName of the link.
vnVector identifier (0 for u, 1 for v, and 2 for w).
cnThe component of the vector (0 for x, 1 for y and 2 for z).

Definition at line 68 of file varnames.h.

Referenced by ApplyLinkRotAxisX(), ApplyLinkRotDeformX(), ApplyLinkRotFLinks(), GenerateLinkRotAxisX(), GenerateLinkRotFLinks(), GenerateLinkRotLinks(), GetRotVarIDAxisX(), and GetRotVarIDFLinks().

#define LINK_ROT2 (   vname,
  linkName,
  vn,
  cn 
)    (vn<3?LINK_ROT(vname,linkName,vn,cn):sprintf(vname,"_%s_wp_%s",linkName,(cn==0?"x":(cn==1?"y":"z"))))

Three vectors in the form of (u,v,w-wp) defining (in global coordinates) the frame of reference for a given link.

The third vector w-wp are dummified forms of the cross product of u and v.

Note that this in only one of the ways to parametrize the rotation matrix. See LINK_ROT and LINK_ROT3_E for alternative ways.

Parameters
vnameString where to store the variable name.
linkNameName of the link.
vnVector identifier (0 for u, 1 for v, and 2 for w, and 3 for w_b).
cnThe component of the vector (0 for x, 1 for y and 2 for z).

Definition at line 86 of file varnames.h.

Referenced by ApplyLinkRotLinks(), GenerateLinkRotLinks(), and GetRotVarIDLinks().

#define LINK_LENGTH (   vname,
  linkName 
)    sprintf(vname,"_l_%s",linkName)

A variable representing the variable length for a link. Only used in tensegrities (and for DeformX links).

Parameters
vnameString where to store the variable name.
linkNameName of the link.

Definition at line 97 of file varnames.h.

Referenced by ApplyLinkRotDeformX(), GenerateLinkConf(), GetLinkTransSeq(), and GetRotVarIDAxisX().

#define LINK_REST (   vname,
  linkName 
)    sprintf(vname,"_r_%s",linkName)

A variable representing the variable rest for a link. Only used in tensegrities.

Parameters
vnameString where to store the variable name.
linkNameName of the link.

Definition at line 108 of file varnames.h.

Referenced by GenerateLinkConf(), and GetRotVarIDAxisX().

#define LINK_MAX_FORCE (   vname,
  linkName 
)    sprintf(vname,"_f_%s",linkName)

A variable representing the maximum compression/tension force on a link. Only used in tensegrities.

Parameters
vnameString where to store the variable name.
linkNameName of the link.

Definition at line 119 of file varnames.h.

Referenced by GenerateLinkConf(), GetRotVarIDAxisX(), and JointForceEquation().

#define LINK_ROT3_E (   vname,
  linkName,
  rn,
  cn 
)    (rn==cn?sprintf(vname,"_%s_qq_%u",linkName,rn):sprintf(vname,"_%s_qq_%u_%u",linkName,rn,cn))

Rotation matrix represented using quaternions.

This macro only gives the name the qq_ij variables (i,j=0..3) derived from the q_i, i=0..3, quaternion variables. If i=j then only one sub-index is used.

Note that this in only one of the ways to parametrize the rotation matrix. See LINK_ROT and LINK_ROT2 for alternative ways.

Parameters
vnameString where to store the variable name.
linkNameName of the link.
rnRow number.
cnColumn number.

Definition at line 138 of file varnames.h.

Referenced by ApplyLinkRotQLinks(), GenerateLinkRotQLinks(), and GetRotVarIDQLinks().

#define LINK_ROT3_Q (   vname,
  linkName,
 
)    sprintf(vname,"_%s_q_%u",linkName,j)

LINK_ROT3_E give the name for the variables used in the rotation matrics when using quaternions as a representation tool. However, these variables are not the basic varaiables of the quaternion but combinations of them.

This macro gives the name of the original quaternion variables q_i (i=0..3)

The variables defined with LINK_ROT3_E are related with the q_i variables by

e_ij=q_i*q_j

These relations appear in the form of dummy equations in the quaternion-based systems.

Definition at line 153 of file varnames.h.

Referenced by GenerateLinkRotQLinks(), and GetRotVarIDQLinks().

#define LINK_TRANS (   vname,
  linkName,
  cn 
)    sprintf(vname,"_%s_r_%s",linkName,(cn==0?"x":(cn==1?"y":"z")))

The vectors defined in LINK_ROT define the rotatin of a link in global coordinates. These variables define the translation part of the homogenous transform placing the link in the global frame of reference.

Parameters
vnameString where to store the variable name.
linkNameName of the link.
cnThe component of the vector (0 for x, 1 for y and 2 for z).

Definition at line 168 of file varnames.h.

Referenced by GenerateEquationsFromBranch(), GenerateWorldSingularityEquations(), GenerateWorldTWSEquations(), SetTransVars(), WorldDOF2Sol(), and WorldFixTensegrityAddon().

#define FREE_JOINT_VAR (   vname,
  id,
  id1,
  ln1,
  id2,
  ln2,
 
)    (id1==0?LINK_TRANS(vname,ln2,k):(id2==0?LINK_TRANS(vname,ln1,k):sprintf(vname,"_%s_%s_%s_%u",ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)))

A free vector defining a generic the translation from link 1 to link 2.

Note that the name of the variables generated for a free joint when one of the links involved is the ground link is the same as the name generated for the translation component of this link (see LINK_TRANS).

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
id1Identifier of the first link involved in the joint.
ln1Name of the first link involved in the joint.
id2Identifier of the first link involved in the joint.
ln2Name of the second link involved in the joint.
kComponent of the vector (0 for x, 1 for y and 2 for z).

Definition at line 187 of file varnames.h.

Referenced by GenerateJointEquations(), GenerateJointEquationsInBranch(), and GenerateJointSolution().

#define PRS_JOINT_VAR (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_d_%s_%s_%u",ln1,ln2,id)

One variable for each prismatic joint: the displacement along the sliding axis.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 200 of file varnames.h.

Referenced by GenerateJointEquationsInBranch(), GenerateJointRangeEquations(), GenerateJointRangeSingularityEquations(), and GenerateJointSolution().

#define PRS_JOINT_VAR_SING_SIN (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_d_sing_sin_%s_%s_%u",ln1,ln2,id)

Auxiliar variable to detect singularities in bounded prismatic joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 212 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define PRS_JOINT_VAR_SING_COS (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_d_sing_cos_%s_%s_%u",ln1,ln2,id)

Auxiliar variable to detect singularities in bounded prismatic joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 224 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define UNV_JOINT_VAR (   vname,
  id,
  ln1,
  ln2,
  i,
 
)    sprintf(vname,"_uni_%s_%s_%s_%s_%u",(i==0?"u":"v"),ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)

Two vectors for each universal joint defining the copunctual orthogonal rotation axis that define the universal joint.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
i0 for the first axis of the universal joint and 1 for the second.
kComponent of the vector (0 for x, 1 for y and 2 for z).

Definition at line 239 of file varnames.h.

Referenced by GenerateJointEquations(), GenerateJointRangeEquations(), and GenerateJointSolution().

#define IN_PATCH_JOINT_CTRL_VAR (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_in_patch_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)

A first order Bezier is defined with two variables (u,v). Here we additionally define a third variable w that is u*v so that all equations remain linear or bilinear.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
iThe control variable (0 for u, 1 for v and 2 for w).

Definition at line 254 of file varnames.h.

Referenced by GenerateJointEquations(), GenerateJointEquationsInBranch(), GenerateJointRangeEquations(), GenerateJointRangeSingularityEquations(), GenerateJointSolution(), RegenerateJointBox(), and RegenerateJointSolution().

#define IN_PATCH_JOINT_CTRL_VAR_SING_SIN (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_in_patch_sing_sin_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)

Auxiliar variable to detect singularities in in_patch joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
iThe control variable (0 for u, 1 for v and 2 for w).

Definition at line 267 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define IN_PATCH_JOINT_CTRL_VAR_SING_COS (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_in_patch_sing_cos_%s_%s_%s_%u",ln1,ln2,(i==0?"u":(i==1?"v":"w")),id)

Auxiliar variable to detect singularities in in_patch joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
iThe control variable (0 for u, 1 for v and 2 for w).

Definition at line 280 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define IN_PATCH_JOINT_SCALE_VAR (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_in_patch_%s_%s_l_%u",ln1,ln2,id)

When defining a IN_PATCH joint, the normal vectors at the two links in contact at the contact point are equated. In the first link this vector is constant but in the second link it is variable (depends on the control points defining the patch). This scale variable is used to make the two vectors equal.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 296 of file varnames.h.

Referenced by GenerateJointEquations(), and GenerateJointSolution().

#define ROT_JOINT_VAR_REF (   vname,
  id,
  k,
  ln1,
  ln2,
 
)    sprintf(vname,"_%s_%s_%s_%s_%u",(k==0?"w1":"w2"),ln1,ln2,(i==0?"x":(i==1?"y":"z")),id)

Two vectors (x-y-z variables) orthogonal to the rotation axis one attached to the 1st link and the another to the 2nd link.

A third vector aligned with the rotation axis used to define the cross product between the two first vectors.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
kNumber of the vector to which to variable is referred (0,1). The varible for 0 is named *_w1_* and for 1 we get *_w2_*
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
iComponent of the vector (0 for x, 1 for y and 2 for z).

Definition at line 316 of file varnames.h.

Referenced by GenerateJointRangeEquations(), and GenerateJointSolution().

#define UNV_JOINT_VAR_REF (   vname,
  id,
  k,
  ln1,
  ln2,
 
)    sprintf(vname,"_%s_%s_%s_%s_%u",(k==0?"w1":"w2"),ln1,ln2,(i==0?"x":(i==1?"y":"z")),id)

Two vectors (x-y-z variables) to define the angle in a universal joint. The first vector defines the first angle w.r.t. the second rotation axis of the universal joint. The second vector defines the first angle w.r.t. the first rotation axis of the universal joint.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
kNumber of the vector to which to variable is referred (0,1). The varible for 0 is named *_w1_* and for 1 we get *_w2_*
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
iComponent of the vector (0 for x, 1 for y and 2 for z).

Definition at line 337 of file varnames.h.

Referenced by GenerateJointRangeEquations(), and GenerateJointSolution().

#define COS_VAR (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_cos_%s_%s_%u",ln1,ln2,id)

Cosinus between two links articulated by a rotation/spherical joint (actually, cosinus between two vectors rigidly attached to two links).

In revolute/spherical joints only one angle is possible between two links for a give joint

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 354 of file varnames.h.

Referenced by GenerateJointRangeEquations(), GenerateJointRangeSingularityEquations(), and GenerateJointSolution().

#define COS_VAR_SING (   vname,
  id,
  ln1,
  ln2 
)    sprintf(vname,"_cos_sing_%s_%s_%u",ln1,ln2,id)

Auxiliar variable to detect singularities in bounded revolute/spherical joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.

Definition at line 367 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define COS_VAR_UNI (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_cos_%u_%s_%s_%u",k,ln1,ln2,id)

Cosinus between two links articulated by a universal joint. Two cosinus are defined, one for the first rotation and another for the second rotation of the universal joint.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
kIdentifier of the universal joint rotation (0 for the first rotation and 1 for the second one).

Definition at line 384 of file varnames.h.

Referenced by GenerateJointRangeEquations(), GenerateJointRangeSingularityEquations(), and GenerateJointSolution().

#define COS_VAR_UNI_SING (   vname,
  id,
  ln1,
  ln2,
 
)    sprintf(vname,"_cos_sing_%u_%s_%s_%u",k,ln1,ln2,id)

Auxiliar variables to detect singularities in bounded universal joints.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
kIdentifier of the universal joint rotation (0 for the first rotation and 1 for the second one).

Definition at line 398 of file varnames.h.

Referenced by GenerateJointRangeSingularityEquations().

#define SPH_JOINT_VAR_REF (   vname,
  id,
  v,
  ln1,
  ln2,
 
)    sprintf(vname,"_sph_%s_%s_%s_%s_%u",(v==0?"w1":"w2"),ln1,ln2,(k==0?"x":(k==1?"y":"z")),id)

We define two vectors, the first attached to link1 and the second to link2, that must coincide for angle 0.

Parameters
vnameString where to store the variable name.
idUnique identifier for the joint.
vVector identifier (0 for w1, 1 for w2).
ln1Identifier of the first link involved in the joint.
ln2Identifier of the second link involved in the joint.
kComponent of the vector (0 for x, 1 for y and 2 for z).

Definition at line 413 of file varnames.h.

Referenced by GenerateJointRangeEquations(), and GenerateJointSolution().