Description
Base class for representing objects that introduce 'variables' and their associated mass submatrices.
Used for a sparse, distributed representation of the problem. See ChSystemDescriptor for more information about the overall problem and data representation.
Each ChVariables object must be able to define a mass submatrix, that will be assembled directly inside the global matrix Z (in particular, inside the block H or M). Because of this there is no need for ChVariables and derived classes to actually store their mass submatrix in memory: they just need to be able to compute with it.
Furthermore, the systemlevel mass matrix is not always formed explicitly. If a matrixfree solver is used, each ChVariables (and derived) object can be asked not to assemble its mass submatrix, but instead to provide operation related to it, Ee.g. M*x, M\x, +=M*x, and so on. Each derived class must implement these methods. Because of this, the ChVariables class does not include any mass submatrix by default.
#include <ChVariables.h>
Public Member Functions  
ChVariables (unsigned int dof)  
ChVariables &  operator= (const ChVariables &other) 
Assignment operator: copy from other object.  
void  SetDisabled (bool mdis) 
Deactivates/freezes the variable (these variables won't be modified by the system solver).  
bool  IsDisabled () const 
Check if the variables have been deactivated (these variables won't be modified by the system solver).  
bool  IsActive () const 
Check if these variables are currently active. More...  
unsigned int  GetDOF () const 
The number of scalar variables in the vector qb (dof=degrees of freedom).  
ChVectorRef  State () 
Get a reference to the differential states encapsulated by these variables. More...  
ChVectorRef  Force () 
Get a reference to the generalized force corresponding to these variables. More...  
virtual void  ComputeMassInverseTimesVector (ChVectorRef result, ChVectorConstRef vect) const =0 
Compute the product of the inverse mass matrix by a given vector and store in result. More...  
virtual void  AddMassTimesVector (ChVectorRef result, ChVectorConstRef vect) const =0 
Compute the product of the mass matrix by a given vector and increment result. More...  
virtual void  AddMassTimesVectorInto (ChVectorRef result, ChVectorConstRef vect, const double ca) const =0 
Add the product of the mass submatrix by a given vector, scaled by ca, to result. More...  
virtual void  AddMassDiagonalInto (ChVectorRef result, const double ca) const =0 
Add the diagonal of the mass matrix, as a vector scaled by ca, to result. More...  
virtual void  PasteMassInto (ChSparseMatrix &mat, unsigned int start_row, unsigned int start_col, const double ca) const =0 
Write the mass submatrix for these variables into the specified global matrix at the offsets of each variable. More...  
void  SetOffset (unsigned int moff) 
Set offset in the global state vector. More...  
unsigned int  GetOffset () const 
Get offset in the global state vector.  
virtual void  ArchiveOut (ChArchiveOut &archive_out) 
virtual void  ArchiveIn (ChArchiveIn &archive_in) 
Protected Attributes  
unsigned int  offset 
offset in global q state vector (needed by some solvers)  
unsigned int  ndof 
number of degrees of freedom (number of contained scalar variables)  
Member Function Documentation
◆ AddMassDiagonalInto()

pure virtual 
Add the diagonal of the mass matrix, as a vector scaled by ca, to result.
Note: 'result' is a systemlevel vector of appropriate size. This function must index into this vector using the offsets of each variable.
Implemented in chrono::ChVariablesBodySharedMass, chrono::ChVariablesBodyOwnMass, chrono::ChVariablesShaft, chrono::ChVariablesGeneric, chrono::ChVariablesNode, and chrono::ChVariablesGenericDiagonalMass.
◆ AddMassTimesVector()

pure virtual 
Compute the product of the mass matrix by a given vector and increment result.
This function must perform the operation result += M * vect
for a vector of same size as the variables state.
Implemented in chrono::ChVariablesBodySharedMass, chrono::ChVariablesBodyOwnMass, chrono::ChVariablesShaft, chrono::ChVariablesGeneric, chrono::ChVariablesNode, and chrono::ChVariablesGenericDiagonalMass.
◆ AddMassTimesVectorInto()

pure virtual 
Add the product of the mass submatrix by a given vector, scaled by ca, to result.
Note: 'result' and 'vect' are systemlevel vectors of appropriate size. This function must index into these vectors using the offsets of each variable.
Implemented in chrono::ChVariablesBodySharedMass, chrono::ChVariablesBodyOwnMass, chrono::ChVariablesShaft, chrono::ChVariablesGeneric, chrono::ChVariablesNode, and chrono::ChVariablesGenericDiagonalMass.
◆ ComputeMassInverseTimesVector()

pure virtual 
Compute the product of the inverse mass matrix by a given vector and store in result.
This function must calculate result = M^(1) * vect
for a vector of same size as the variables state.
Implemented in chrono::ChVariablesBodySharedMass, chrono::ChVariablesBodyOwnMass, chrono::ChVariablesShaft, chrono::ChVariablesGeneric, chrono::ChVariablesNode, and chrono::ChVariablesGenericDiagonalMass.
◆ Force()

inline 
Get a reference to the generalized force corresponding to these variables.
These variable forces are part of 'f' in the system:
 M Cq' * q  f = 0 , c>0, l>0, l*r=0;  Cq 0  l b c
◆ IsActive()

inline 
Check if these variables are currently active.
In general, tells if they must be included into the system solver or not.
◆ PasteMassInto()

pure virtual 
Write the mass submatrix for these variables into the specified global matrix at the offsets of each variable.
The masses will be scaled by the given factor 'ca'. The (start_row, start_col) pair specifies the topleft corner of the systemlevel mass matrix in the provided matrix. Assembling the systemlevel sparse matrix is required only if using a direct sparse solver or for debugging/reporting purposes.
Implemented in chrono::ChVariablesBodySharedMass, chrono::ChVariablesBodyOwnMass, chrono::ChVariablesShaft, chrono::ChVariablesGeneric, chrono::ChVariablesNode, and chrono::ChVariablesGenericDiagonalMass.
◆ SetOffset()

inline 
Set offset in the global state vector.
This offset if set automatically by the ChSystemDescriptor during set up.
◆ State()

inline 
Get a reference to the differential states encapsulated by these variables.
These variable states are part of 'q' in the system:
 M Cq' * q  f = 0 , c>0, l>0, l*r=0;  Cq 0  l b c
The documentation for this class was generated from the following files:
 /builds/uwsbel/chrono/src/chrono/solver/ChVariables.h
 /builds/uwsbel/chrono/src/chrono/solver/ChVariables.cpp