sofa::component::mass::MatrixMass< DataTypes, MassType > Class Template Reference

Mass Matrices. More...

#include <MatrixMass.h>

Inheritance diagram for sofa::component::mass::MatrixMass< DataTypes, MassType >:

Inheritance graph
[legend]
Collaboration diagram for sofa::component::mass::MatrixMass< DataTypes, MassType >:

Collaboration graph
[legend]

Public Types

typedef
core::componentmodel::behavior::Mass
< DataTypes > 
Inherited
typedef DataTypes::VecCoord VecCoord
typedef DataTypes::VecDeriv VecDeriv
typedef DataTypes::Coord Coord
typedef DataTypes::Deriv Deriv
typedef DataTypes::Real Real
typedef helper::vector< MassType > VecMass

Public Member Functions

 MatrixMass ()
 ~MatrixMass ()
void clear ()
void resize (int vsize)
virtual void init ()
 Initialization method called at graph modification, during bottom-up traversal.
virtual void reinit ()
 Update method called when variables used in precomputation are modified.
void addMDx (VecDeriv &f, const VecDeriv &dx, double factor=1.0)
 f += factor M dx
void accFromF (VecDeriv &a, const VecDeriv &f)
 dx = M^-1 f
void addForce (VecDeriv &f, const VecCoord &x, const VecDeriv &v)
 Given the current position and velocity states, update the current force vector by computing and adding the forces associated with this ForceField.
void addGravityToV (double dt)
 perform v += dt*g operation. Used if mass wants to added G separately from the other forces to v.
double getKineticEnergy (const VecDeriv &v)
 vMv/2 using dof->getV()
double getPotentialEnergy (const VecCoord &x)
 Mgx potential in a uniform gravity field, null at origin.
void addMToMatrix (defaulttype::BaseMatrix *mat, double mFact, unsigned int &offset)
 Add Mass contribution to global Matrix assembling.
double getElementMass (unsigned int index)
 return the mass relative to the DOF index

Data Fields

Data< VecMass > f_mass
Data< bool > _lumped
Data< Real > _defaultValue
VecMass _lumpedMasses
 lumped mass matrices
const VecMass * _usedMassMatrices
 what VecMass is used to represent matrices ? f_mass.getValue() or _lumpedMasses ?

Protected Member Functions

MassType diagonalMass (const Real &m)
 return a diagonal matrix mass with value m on all the diagonal
MassType lump (const MassType &m)
 lump the matrix m, ie sum line on diagonal
void lumpMatrices ()
 lump all mass matrices
void defaultDiagonalMatrices ()
 compute default diagonal matrices

Protected Attributes

bool _usingDefaultDiagonalMatrices
 default diagonal matrices are used

Detailed Description

template<class DataTypes, class MassType>
class sofa::component::mass::MatrixMass< DataTypes, MassType >

Mass Matrices.

By default a diagonal matrix is created with diagonal to _defaultValue. Else matrices have to be given in the .scn file. It is possible to use lumped matrices.

Definition at line 54 of file MatrixMass.h.


Member Typedef Documentation

template<class DataTypes , class MassType >
typedef DataTypes::Coord sofa::component::mass::MatrixMass< DataTypes, MassType >::Coord

Reimplemented from sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 60 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef DataTypes::Deriv sofa::component::mass::MatrixMass< DataTypes, MassType >::Deriv

Reimplemented from sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 61 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef core::componentmodel::behavior::Mass<DataTypes> sofa::component::mass::MatrixMass< DataTypes, MassType >::Inherited

Definition at line 57 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef DataTypes::Real sofa::component::mass::MatrixMass< DataTypes, MassType >::Real

Definition at line 62 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef DataTypes::VecCoord sofa::component::mass::MatrixMass< DataTypes, MassType >::VecCoord

Reimplemented from sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 58 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef DataTypes::VecDeriv sofa::component::mass::MatrixMass< DataTypes, MassType >::VecDeriv

Reimplemented from sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 59 of file MatrixMass.h.

template<class DataTypes , class MassType >
typedef helper::vector<MassType> sofa::component::mass::MatrixMass< DataTypes, MassType >::VecMass

Definition at line 64 of file MatrixMass.h.


Constructor & Destructor Documentation

template<class DataTypes , class MassType >
sofa::component::mass::MatrixMass< DataTypes, MassType >::MatrixMass (  )  [inline]

template<class DataTypes , class MassType >
sofa::component::mass::MatrixMass< DataTypes, MassType >::~MatrixMass (  )  [inline]

Definition at line 57 of file MatrixMass.inl.


Member Function Documentation

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::accFromF ( VecDeriv &  a,
const VecDeriv &  f 
) [inline, virtual]

dx = M^-1 f

This method must be implemented by the component.

Implements sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 111 of file MatrixMass.inl.

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::addForce ( VecDeriv &  f,
const VecCoord &  x,
const VecDeriv &  v 
) [inline, virtual]

Given the current position and velocity states, update the current force vector by computing and adding the forces associated with this ForceField.

If the ForceField can be represented as a matrix, this method computes $ f += B v + K x $

This method must be implemented by the component, and is usually called by the generic ForceField::addForce() method.

Implements sofa::core::componentmodel::behavior::ForceField< DataTypes >.

Definition at line 151 of file MatrixMass.inl.

References sofa::component::mass::MatrixMass< DataTypes, MassType >::_usedMassMatrices, sofa::core::objectmodel::BaseObject::getContext(), sofa::core::objectmodel::BaseContext::getPositionInWorld(), sofa::core::objectmodel::Data< T >::getValue(), sofa::core::objectmodel::BaseContext::getVelocityBasedLinearAccelerationInWorld(), sofa::core::objectmodel::BaseContext::getVelocityInWorld(), sofa::core::componentmodel::behavior::inertiaForce(), and sofa::core::componentmodel::behavior::BaseMass::m_separateGravity.

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::addGravityToV ( double  dt  )  [inline, virtual]

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::addMDx ( VecDeriv &  f,
const VecDeriv &  dx,
double  factor = 1.0 
) [inline, virtual]

f += factor M dx

This method must be implemented by the component.

Implements sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 91 of file MatrixMass.inl.

References sofa::component::mass::MatrixMass< DataTypes, MassType >::_usedMassMatrices.

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::addMToMatrix ( defaulttype::BaseMatrix *  mat,
double  mFact,
unsigned int &  offset 
) [inline, virtual]

Add Mass contribution to global Matrix assembling.

Implements sofa::core::componentmodel::behavior::BaseMass.

Definition at line 179 of file MatrixMass.inl.

References sofa::component::mass::MatrixMass< DataTypes, MassType >::_usedMassMatrices.

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::clear (  )  [inline]

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::defaultDiagonalMatrices (  )  [inline, protected]

template<class DataTypes , class MassType >
MassType sofa::component::mass::MatrixMass< DataTypes, MassType >::diagonalMass ( const Real &  m  )  [inline, protected]

return a diagonal matrix mass with value m on all the diagonal

Definition at line 251 of file MatrixMass.inl.

Referenced by sofa::component::mass::MatrixMass< DataTypes, MassType >::defaultDiagonalMatrices().

template<class DataTypes , class MassType >
double sofa::component::mass::MatrixMass< DataTypes, MassType >::getElementMass ( unsigned int  index  )  [inline, virtual]

template<class DataTypes , class MassType >
double sofa::component::mass::MatrixMass< DataTypes, MassType >::getKineticEnergy ( const VecDeriv &  v  )  [inline, virtual]

vMv/2 using dof->getV()

Implements sofa::core::componentmodel::behavior::Mass< DataTypes >.

Definition at line 117 of file MatrixMass.inl.

template<class DataTypes , class MassType >
double sofa::component::mass::MatrixMass< DataTypes, MassType >::getPotentialEnergy ( const VecCoord &  x  )  [inline, virtual]

Mgx potential in a uniform gravity field, null at origin.

Implements sofa::core::componentmodel::behavior::ForceField< DataTypes >.

Definition at line 124 of file MatrixMass.inl.

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::init ( void   )  [inline, virtual]

template<class DataTypes , class MassType >
MassType sofa::component::mass::MatrixMass< DataTypes, MassType >::lump ( const MassType &  m  )  [inline, protected]

lump the matrix m, ie sum line on diagonal

Definition at line 259 of file MatrixMass.inl.

Referenced by sofa::component::mass::MatrixMass< DataTypes, MassType >::lumpMatrices().

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::lumpMatrices (  )  [inline, protected]

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::reinit (  )  [inline, virtual]

template<class DataTypes , class MassType >
void sofa::component::mass::MatrixMass< DataTypes, MassType >::resize ( int  vsize  )  [inline]


Field Documentation

template<class DataTypes , class MassType >
Data< Real > sofa::component::mass::MatrixMass< DataTypes, MassType >::_defaultValue

template<class DataTypes , class MassType >
Data< bool > sofa::component::mass::MatrixMass< DataTypes, MassType >::_lumped

template<class DataTypes , class MassType >
VecMass sofa::component::mass::MatrixMass< DataTypes, MassType >::_lumpedMasses

template<class DataTypes , class MassType >
const VecMass* sofa::component::mass::MatrixMass< DataTypes, MassType >::_usedMassMatrices

template<class DataTypes , class MassType >
bool sofa::component::mass::MatrixMass< DataTypes, MassType >::_usingDefaultDiagonalMatrices [protected]

template<class DataTypes , class MassType >
Data< VecMass > sofa::component::mass::MatrixMass< DataTypes, MassType >::f_mass


The documentation for this class was generated from the following files:

Generated on Sun Nov 23 04:21:13 2008 for Sofa by  doxygen 1.5.7.1