chrono::ChConstraintThreeGeneric Class Reference

Description

Constraint between three objects of type ChVariables(), with generic number of scalar variables each.

The constraint variables can be of type ChVariablesGeneric() or ChVariablesBody(). Defines three Jacobian matrices, whose column number automatically matches the number of elements in variables vectors. Before starting the solver one must provide the proper values in constraints (and update them if necessary), i.e. must set at least the c_i and b_i values, and Jacobians.

#include <ChConstraintThreeGeneric.h>

Inheritance diagram for chrono::ChConstraintThreeGeneric:
Collaboration diagram for chrono::ChConstraintThreeGeneric:

Public Member Functions

 ChConstraintThreeGeneric (ChVariables *mvariables_a, ChVariables *mvariables_b, ChVariables *mvariables_c)
 
 ChConstraintThreeGeneric (const ChConstraintThreeGeneric &other)
 
virtual ChConstraintThreeGenericClone () const override
 "Virtual" copy constructor (covariant return type).
 
ChConstraintThreeGenericoperator= (const ChConstraintThreeGeneric &other)
 Assignment operator: copy from other object.
 
virtual ChRowVectorRef Get_Cq_a () override
 Access Jacobian vector.
 
virtual ChRowVectorRef Get_Cq_b () override
 Access Jacobian vector.
 
virtual ChRowVectorRef Get_Cq_c () override
 Access Jacobian vector.
 
virtual ChVectorRef Get_Eq_a () override
 Access auxiliary vector (ex: used by iterative solvers).
 
virtual ChVectorRef Get_Eq_b () override
 Access auxiliary vector (ex: used by iterative solvers).
 
virtual ChVectorRef Get_Eq_c () override
 Access auxiliary vector (ex: used by iterative solvers).
 
virtual void SetVariables (ChVariables *mvariables_a, ChVariables *mvariables_b, ChVariables *mvariables_c) override
 Set references to the constrained ChVariables objects,automatically creating/resizing Jacobians as needed.
 
virtual void Update_auxiliary () override
 This function updates the following auxiliary data: More...
 
virtual double ComputeJacobianTimesState () override
 Compute the product between the Jacobian of this constraint, [Cq_i], and the vector of variables. More...
 
virtual void IncrementState (double deltal) override
 Increment the vector of variables with the quantity [invM]*[Cq_i]'*deltal. More...
 
virtual void AddJacobianTimesVectorInto (double &result, ChVectorConstRef vect) const override
 Add the product of the corresponding block in the system matrix by 'vect' and add to result. More...
 
virtual void AddJacobianTransposedTimesScalarInto (ChVectorRef result, double l) const override
 Add the product of the corresponding transposed block in the system matrix by 'l' and add to result. More...
 
virtual void PasteJacobianInto (ChSparseMatrix &mat, unsigned int start_row, unsigned int start_col) const override
 Write the constraint Jacobian into the specified global matrix at the offsets of the associated variables. More...
 
virtual void PasteJacobianTransposedInto (ChSparseMatrix &mat, unsigned int start_row, unsigned int start_col) const override
 Write the transposed Jacobian into the specified global matrix at the offsets of the associated variables.
 
virtual void ArchiveOut (ChArchiveOut &archive_out) override
 Method to allow serialization of transient data to archives.
 
virtual void ArchiveIn (ChArchiveIn &archive_in) override
 Method to allow de-serialization of transient data from archives.
 
- Public Member Functions inherited from chrono::ChConstraintThree
 ChConstraintThree ()
 Default constructor.
 
 ChConstraintThree (const ChConstraintThree &other)
 Copy constructor.
 
ChConstraintThreeoperator= (const ChConstraintThree &other)
 Assignment operator: copy from other object.
 
ChVariablesGetVariables_a ()
 Access the first variable object.
 
ChVariablesGetVariables_b ()
 Access the second variable object.
 
ChVariablesGetVariables_c ()
 Access the second variable object.
 
- Public Member Functions inherited from chrono::ChConstraint
 ChConstraint (const ChConstraint &other)
 
ChConstraintoperator= (const ChConstraint &other)
 Assignment operator: copy from other object.
 
bool operator== (const ChConstraint &other) const
 Comparison (compares only flags, not the Jacobians).
 
bool IsValid () const
 Indicate if the constraint data is currently valid.
 
void SetValid (bool mon)
 Set the "valid" state of this constraint.
 
bool IsDisabled () const
 Indicate if the constraint is currently turned on or off.
 
void SetDisabled (bool mon)
 
bool IsRedundant () const
 Indicate if the constraint is redundant or singular.
 
void SetRedundant (bool mon)
 Mark the constraint as redundant.
 
bool IsBroken () const
 Indicate if the constraint is broken, due to excess pulling/pushing.
 
void SetBroken (bool mon)
 Set the constraint as broken. More...
 
virtual bool IsUnilateral () const
 Indicate if the constraint is unilateral (typical complementarity constraint).
 
virtual bool IsLinear () const
 Indicate if the constraint is linear.
 
Mode GetMode () const
 Get the mode of the constraint. More...
 
void SetMode (Mode mmode)
 Set the mode of the constraint.
 
bool IsActive () const
 Indicate whether the constraint is currently active. More...
 
void SetActive (bool isactive)
 Set the status of the constraint to active.
 
virtual double ComputeResidual ()
 Compute the residual of the constraint using the linear expression. More...
 
double GetResidual () const
 Return the residual of this constraint.
 
void SetRightHandSide (const double mb)
 Sets the known term b_i in [Cq_i]*q + b_i = 0, where: c_i = [Cq_i]*q + b_i = 0.
 
double GetRightHandSide () const
 Return the known term b_i in [Cq_i]*q + b_i = 0, where: c_i= [Cq_i]*q + b_i = 0.
 
void SetComplianceTerm (const double mcfm)
 Set the constraint force mixing term (default=0). More...
 
double GetComplianceTerm () const
 Return the constraint force mixing term.
 
void SetLagrangeMultiplier (double ml_i)
 Set the value of the corresponding Lagrange multiplier (constraint reaction).
 
double GetLagrangeMultiplier () const
 Return the corresponding Lagrange multiplier (constraint reaction).
 
double GetSchurComplement () const
 Return the 'g_i' product, that is [Cq_i]*[invM_i]*[Cq_i]' (+cfm)
 
void SetSchurComplement (double m_g_i)
 Usually you should not use the SetSchurComplement function, because g_i should be automatically computed during the Update_auxiliary() .
 
virtual void Project ()
 Project the value of a possible 'l_i' value of constraint reaction onto admissible orthant/set. More...
 
virtual double Violation (double mc_i)
 Return the constraint violation. More...
 
void SetOffset (unsigned int off)
 Set offset in global q vector (set automatically by ChSystemDescriptor)
 
unsigned int GetOffset () const
 Get offset in global q vector.
 

Protected Attributes

ChRowVectorDynamic< double > Cq_a
 [Cq_a] Jacobian of the constraint
 
ChRowVectorDynamic< double > Cq_b
 [Cq_b] Jacobian of the constraint
 
ChRowVectorDynamic< double > Cq_c
 [Cq_c] Jacobian of the constraint
 
ChVectorDynamic< double > Eq_a
 [Eq_a] product [Eq_a]=[invM_a]*[Cq_a]'
 
ChVectorDynamic< double > Eq_b
 [Eq_a] product [Eq_b]=[invM_b]*[Cq_b]'
 
ChVectorDynamic< double > Eq_c
 [Eq_a] product [Eq_c]=[invM_b]*[Cq_c]'
 
- Protected Attributes inherited from chrono::ChConstraintThree
ChVariablesvariables_a
 The first constrained object.
 
ChVariablesvariables_b
 The second constrained object.
 
ChVariablesvariables_c
 The third constrained object.
 
- Protected Attributes inherited from chrono::ChConstraint
double c_i
 constraint residual (if satisfied, c must be 0)
 
double l_i
 Lagrange multiplier (reaction)
 
double b_i
 right-hand side term in [Cq_i]*q+b_i=0 , note: c_i= [Cq_i]*q + b_i
 
double cfm_i
 Constraint force mixing if needed to add some numerical 'compliance' in the constraint. More...
 
Mode mode
 mode of the constraint
 
double g_i
 product [Cq_i]*[invM_i]*[Cq_i]' (+cfm)
 
unsigned int offset
 offset in global "l" state vector (needed by some solvers)
 

Additional Inherited Members

- Public Types inherited from chrono::ChConstraint
enum  Mode { Mode::FREE, Mode::LOCK, Mode::UNILATERAL, Mode::FRICTION }
 Constraint mode. More...
 

Member Function Documentation

◆ AddJacobianTimesVectorInto()

void chrono::ChConstraintThreeGeneric::AddJacobianTimesVectorInto ( double &  result,
ChVectorConstRef  vect 
) const
overridevirtual

Add the product of the corresponding block in the system matrix by 'vect' and add to result.

Note: 'vect' is assumed to be of proper size; the procedure uses the ChVariable offsets to index in 'vect'.

Implements chrono::ChConstraint.

◆ AddJacobianTransposedTimesScalarInto()

void chrono::ChConstraintThreeGeneric::AddJacobianTransposedTimesScalarInto ( ChVectorRef  result,
double  l 
) const
overridevirtual

Add the product of the corresponding transposed block in the system matrix by 'l' and add to result.

Note: 'result' is assumed to be of proper size; the procedure uses the ChVariable offsets to index in 'result'.

Implements chrono::ChConstraint.

◆ ComputeJacobianTimesState()

double chrono::ChConstraintThreeGeneric::ComputeJacobianTimesState ( )
overridevirtual

Compute the product between the Jacobian of this constraint, [Cq_i], and the vector of variables.

In other words, perform the operation:

  CV = [Cq_i] * v

Implements chrono::ChConstraint.

◆ IncrementState()

void chrono::ChConstraintThreeGeneric::IncrementState ( double  deltal)
overridevirtual

Increment the vector of variables with the quantity [invM]*[Cq_i]'*deltal.

In other words, perform the operation:

   v += [invM] * [Cq_i]' * deltal
or else
   v+=[Eq_i] * deltal

Implements chrono::ChConstraint.

◆ PasteJacobianInto()

void chrono::ChConstraintThreeGeneric::PasteJacobianInto ( ChSparseMatrix mat,
unsigned int  start_row,
unsigned int  start_col 
) const
overridevirtual

Write the constraint Jacobian into the specified global matrix at the offsets of the associated variables.

The (start_row, start_col) pair specifies the top-left corner of the system-level constraint Jacobian in the provided matrix.

Implements chrono::ChConstraint.

◆ Update_auxiliary()

void chrono::ChConstraintThreeGeneric::Update_auxiliary ( )
overridevirtual

This function updates the following auxiliary data:

  • the Eq_a and Eq_b matrices
  • the g_i product

Reimplemented from chrono::ChConstraint.


The documentation for this class was generated from the following files:
  • /builds/uwsbel/chrono/src/chrono/solver/ChConstraintThreeGeneric.h
  • /builds/uwsbel/chrono/src/chrono/solver/ChConstraintThreeGeneric.cpp