AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
agx::AddedMassInteraction Class Reference

Interface to write added mass matrices for one or two rigid bodies. More...

#include <AddedMassInteraction.h>

+ Inheritance diagram for agx::AddedMassInteraction:

Classes

class  Matrix6x6
 6x6 matrix class with blockwise interface to get or set 3x3 matrices: [ M(0, 0) M(0, 1) ] [ M(1, 0) M(1, 1) ] More...
 
class  RigidBodyStorage
 Class containing a rigid body and the 6x6 matrix to be written in the diagonal of the system matrix. More...
 

Public Member Functions

 AddedMassInteraction (agx::RigidBody *rb1, agx::RigidBody *rb2=nullptr)
 Construct given either one or two rigid bodies.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agx::AddedMassInteraction)
 
agx::AddedMassInteraction::Matrix6x6 & getOffDiagonalBlock ()
 Off diagonal block (6x6 matrix).
 
const agx::AddedMassInteraction::Matrix6x6 & getOffDiagonalBlock () const
 Off diagonal block (6x6 matrix).
 
virtual agx::RigidBody * getRigidBody1 () const override
 
agx::AddedMassInteraction::RigidBodyStorage * getRigidBody1Storage ()
 Storage of 'rb1' from construction containing the rigid body and a 6x6 matrix block.
 
const agx::AddedMassInteraction::RigidBodyStorage * getRigidBody1Storage () const
 Storage of 'rb1' from construction containing the rigid body and a 6x6 matrix block.
 
virtual agx::RigidBody * getRigidBody2 () const override
 
agx::AddedMassInteraction::RigidBodyStorage * getRigidBody2Storage ()
 Storage of 'rb2' from construction containing the rigid body and a 6x6 matrix block.
 
const agx::AddedMassInteraction::RigidBodyStorage * getRigidBody2Storage () const
 Storage of 'rb2' from construction containing the rigid body and a 6x6 matrix block.
 
void translateWorldDiagonalBlock (const agx::Vec3 cmOffset, agx::AddedMassInteraction::Matrix6x6 &matrix) const
 Transform the mass matrix according to a translate of center of mass.
 
void translateWorldDiagonalBlock (const agx::Vec3 cmOffsetRb1, const agx::Vec3 cmOffsetRb2, agx::AddedMassInteraction::Matrix6x6 &matrix) const
 
- Public Member Functions inherited from agx::StrongInteraction
virtual void addNlCallbacks (agx::SparseRangeReal &sparseRangeReal) const
 Interface for non-linear callback from solver.
 
virtual void addNotification () override
 Called when added to a simulation.
 
 AGXSTREAM_DECLARE_ABSTRACT_SERIALIZABLE (agx::StrongInteraction)
 
agx::Bool getEnable () const
 
virtual agx::RigidBody * getRigidBody1 () const =0
 
virtual agx::RigidBody * getRigidBody2 () const =0
 
agx::Bool getValid () const
 
virtual void postSystemCallback (agx::DynamicsSystem *dynamicsSystem) override
 Called after the solver is done.
 
virtual void prepare ()
 Prepares for solve.
 
virtual void preSystemCallback (agx::DynamicsSystem *dynamicsSystem) override
 Called before solver executes.
 
virtual void removeNotification () override
 Called when removed from a simulation.
 
virtual void render (agxRender::RenderManager *mgr, float scale)
 Render the interaction.
 
void setEnable (agx::Bool enable)
 Enable or disable this interaction.
 
virtual void writeMatrixData (agx::StrongInteraction::MatrixData rb1DiagonalBlock, agx::StrongInteraction::MatrixData rb2DiagonalBlock, agx::StrongInteraction::MatrixData offDiagonalBlock)=0
 Write data for dynamic bodies.
 
virtual void writeRhs (agx::Physics::RigidBodyPtr rb1, agx::Real *rb1Rhs, agx::Physics::RigidBodyPtr rb2, agx::Real *rb2Rhs, agx::Bool isRestingSolve)=0
 Write data to the right hand side, for dynamic bodies.
 
- Public Member Functions inherited from agx::Interaction
 Interaction ()
 Default constructor.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agx::Interaction)
 
const agx::Name & getName () const
 
agx::PropertyContainer * getPropertyContainer ()
 
const agx::PropertyContainer * getPropertyContainer () const
 
agxSDK::SimulationProxy * getSimulationProxy () const
 
agx::Bool hasPropertyContainer () const
 
virtual void postSystemCallback (agx::DynamicsSystem *)
 Called after all post step events, after solve.
 
virtual void preSystemCallback (agx::DynamicsSystem *)
 Called after all pre step events, before solve.
 
void setName (const agx::Name &name)
 Name this interaction.
 
void setPropertyContainer (agx::PropertyContainer *propertyContainer)
 Assign a new property container.
 
virtual void updateForce (agx::DynamicsSystem *dynamicsSystem)
 This virtual method is implemented so that it computes the interaction forces on all the physical bodies implicated.
 
- Public Member Functions inherited from agx::Referenced
 Referenced ()
 Default constructor.
 
 Referenced (const Referenced &)
 
template<typename T >
T * as ()
 Subclass casting.
 
template<typename T >
const T * as () const
 
template<typename T >
T * asSafe ()
 Safe subclass casting, return nullptr if template type does not match.
 
template<typename T >
const T * asSafe () const
 
int getReferenceCount () const
 
template<typename T >
bool is () const
 Subclass test.
 
Referenced & operator= (const Referenced &)
 Assignment operator. Will increment the number of references to the referenced object.
 
void reference (void *ptr=nullptr) const
 Explicitly increment the reference count by one, indicating that this object has another pointer which is referencing it.
 
void unreference (void *ptr=nullptr) const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 
void unreference_nodelete () const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 
- Public Member Functions inherited from agxStream::Serializable
virtual ~Serializable ()
 Destructor for normal C++ use but hidden from SWIG bindings.
 
virtual const char * getClassName () const
 
bool getEnableSerialization () const
 
bool getEnableUuidGeneration ()
 
agx::UInt32 getIndex () const
 This index is given at creation of this object.
 
virtual StorageAgent * getStorageAgent () const =0
 
agx::Uuid getUuid () const
 
bool isFinished () const
 
void setEnableSerialization (bool flag)
 Set to false to disable serialization of this object.
 
void setFinished ()
 Tells this class that it is restored correctly and should not be deleted during destruction of an Archive.
 
void setUuid (const agx::Uuid &uuid)
 Explicitly set a Uuid on a serializable object.
 

Static Public Member Functions

static agxStream::Serializable * create (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agx::Interaction
static agxStream::Serializable * create (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agx::Referenced
template<typename T >
static bool ValidateCast (const Referenced *object)
 
- Static Public Member Functions inherited from agxStream::Serializable
static void setEnableUuidGeneration (bool flag)
 Specify if there should be UUID:s generated for each new Serializable object. By default it is enabled.
 

Protected Member Functions

 AddedMassInteraction ()
 Default constructor used by serialization.
 
virtual ~AddedMassInteraction ()
 Reference counted object, protected destructor.
 
virtual void prepare () override
 Checks if this interaction is valid for the solver.
 
virtual void writeMatrixData (agx::StrongInteraction::MatrixData rb1DiagonalBlock, agx::StrongInteraction::MatrixData rb2DiagonalBlock, agx::StrongInteraction::MatrixData offDiagonalBlock) override
 Call from the direct solver with pointers where to write diagonal block(s) and the off diagonal block.
 
virtual void writeRhs (agx::Physics::RigidBodyPtr rb1, agx::Real *rb1Rhs, agx::Physics::RigidBodyPtr rb2, agx::Real *rb2Rhs, agx::Bool isRestingSolve) override
 Right hand side update.
 
- Protected Member Functions inherited from agx::StrongInteraction
 StrongInteraction ()
 Construct given one or two rigid bodies.
 
virtual ~StrongInteraction ()
 Reference counted object, protected destructor.
 
virtual void restore (agxStream::InputArchive &in) override
 Restore local content.
 
void setValid (agx::Bool valid)
 Valid if enable and configuration is ok for solver.
 
virtual void store (agxStream::OutputArchive &out) const override
 Store local content.
 
- Protected Member Functions inherited from agx::Interaction
virtual ~Interaction ()
 Reference counted object, protected destructor.
 
virtual void addNotification ()
 Called when added to a simulation.
 
virtual void removeNotification ()
 Called when removed from a simulation.
 
virtual void setSimulation (agxSDK::Simulation *simulation)
 Assign simulation.
 
- Protected Member Functions inherited from agx::Referenced
virtual ~Referenced ()
 Destructor.
 
void allocateObserverVector () const
 
void deleteUsingDeleteHandler () const
 
- Protected Member Functions inherited from agxStream::Serializable
 Serializable ()
 Default constructor.
 
 Serializable (const Serializable &other)
 Copy constructor.
 
void generateUuid ()
 

Additional Inherited Members

- Static Protected Member Functions inherited from agx::Referenced
static DeleteHandler * getDeleteHandler ()
 
static void setDeleteHandler (DeleteHandler *handler)
 Internal: Set a DeleteHandler to which deletion of all referenced counted objects will be delegated to.
 
- Protected Attributes inherited from agx::Referenced
Mutex m_mutex
 
ObserverContainer m_observers
 
AtomicValue m_refCount
 

Detailed Description

Interface to write added mass matrices for one or two rigid bodies.

For two dynamic rigid bodies an off diagonal block may be written as well: [ M_0 ] [ . . ] [ . . ] [ . . ] [ A_i0 M_i ] [ . ] [ . ] [ . ]

Definition at line 39 of file AddedMassInteraction.h.

Constructor & Destructor Documentation

◆ AddedMassInteraction() [1/2]

agx::AddedMassInteraction::AddedMassInteraction ( agx::RigidBody *  rb1,
agx::RigidBody *  rb2 = nullptr 
)

Construct given either one or two rigid bodies.

Parameters
rb1- first rigid body
rb2- second rigid body

◆ AddedMassInteraction() [2/2]

agx::AddedMassInteraction::AddedMassInteraction ( )
protected

Default constructor used by serialization.

◆ ~AddedMassInteraction()

virtual agx::AddedMassInteraction::~AddedMassInteraction ( )
protectedvirtual

Reference counted object, protected destructor.

Member Function Documentation

◆ AGXSTREAM_DECLARE_SERIALIZABLE_BASE()

agx::AddedMassInteraction::AGXSTREAM_DECLARE_SERIALIZABLE_BASE ( agx::AddedMassInteraction  )

◆ create()

static agxStream::Serializable * agx::AddedMassInteraction::create ( agxStream::InputArchive &  )
inlinestatic

Definition at line 307 of file AddedMassInteraction.h.

◆ getOffDiagonalBlock() [1/2]

AddedMassInteraction::Matrix6x6 & agx::AddedMassInteraction::getOffDiagonalBlock ( )

Off diagonal block (6x6 matrix).

Defines how acceleration of the first body results in a force acting on the second body.

Returns
the off diagonal block storage (6x6 matrix)

Definition at line 436 of file AddedMassInteraction.h.

◆ getOffDiagonalBlock() [2/2]

const AddedMassInteraction::Matrix6x6 & agx::AddedMassInteraction::getOffDiagonalBlock ( ) const

Off diagonal block (6x6 matrix).

Defines how acceleration of the first body results in a force acting on the second body.

Returns
the off diagonal block storage (6x6 matrix)

Definition at line 431 of file AddedMassInteraction.h.

◆ getRigidBody1()

virtual agx::RigidBody * agx::AddedMassInteraction::getRigidBody1 ( ) const
overridevirtual
Returns
first rigid body of this interaction

Implements agx::StrongInteraction.

◆ getRigidBody1Storage() [1/2]

agx::AddedMassInteraction::RigidBodyStorage * agx::AddedMassInteraction::getRigidBody1Storage ( )

Storage of 'rb1' from construction containing the rigid body and a 6x6 matrix block.

Returns
storage of rigid body 1

◆ getRigidBody1Storage() [2/2]

const agx::AddedMassInteraction::RigidBodyStorage * agx::AddedMassInteraction::getRigidBody1Storage ( ) const

Storage of 'rb1' from construction containing the rigid body and a 6x6 matrix block.

Returns
storage of rigid body 1

◆ getRigidBody2()

virtual agx::RigidBody * agx::AddedMassInteraction::getRigidBody2 ( ) const
overridevirtual
Returns
second rigid body of this interaction

Implements agx::StrongInteraction.

◆ getRigidBody2Storage() [1/2]

agx::AddedMassInteraction::RigidBodyStorage * agx::AddedMassInteraction::getRigidBody2Storage ( )

Storage of 'rb2' from construction containing the rigid body and a 6x6 matrix block.

Returns
storage of rigid body 2

◆ getRigidBody2Storage() [2/2]

const agx::AddedMassInteraction::RigidBodyStorage * agx::AddedMassInteraction::getRigidBody2Storage ( ) const

Storage of 'rb2' from construction containing the rigid body and a 6x6 matrix block.

Returns
storage of rigid body 2

◆ prepare()

virtual void agx::AddedMassInteraction::prepare ( )
overrideprotectedvirtual

Checks if this interaction is valid for the solver.

Reimplemented from agx::StrongInteraction.

◆ translateWorldDiagonalBlock() [1/2]

void agx::AddedMassInteraction::translateWorldDiagonalBlock ( const agx::Vec3  cmOffset,
agx::AddedMassInteraction::Matrix6x6 &  matrix 
) const

Transform the mass matrix according to a translate of center of mass.

◆ translateWorldDiagonalBlock() [2/2]

void agx::AddedMassInteraction::translateWorldDiagonalBlock ( const agx::Vec3  cmOffsetRb1,
const agx::Vec3  cmOffsetRb2,
agx::AddedMassInteraction::Matrix6x6 &  matrix 
) const

◆ writeMatrixData()

virtual void agx::AddedMassInteraction::writeMatrixData ( agx::StrongInteraction::MatrixData  rb1DiagonalBlock,
agx::StrongInteraction::MatrixData  rb2DiagonalBlock,
agx::StrongInteraction::MatrixData  offDiagonalBlock 
)
overrideprotectedvirtual

Call from the direct solver with pointers where to write diagonal block(s) and the off diagonal block.

Note
rb1DiagonalBlock and rb2DiagonalBlock can/will come in a different order than what m_rb1Storage and m_rb2Storage are.
Parameters
rb1DiagonalBlock- block for what the solver thinks is rb1
rb2DiagonalBlock- block for what the solver thinks is rb2 (data is zero if the solver doesn't need the data to be written)
offDiagonalBlock- off diagonal block. Location of this block in the system matrix is defined by blockRowIndex fields in rb1DiagonalBlock and rb2DiagonalBlock.

Implements agx::StrongInteraction.

◆ writeRhs()

virtual void agx::AddedMassInteraction::writeRhs ( agx::Physics::RigidBodyPtr  rb1,
agx::Real *  rb1Rhs,
agx::Physics::RigidBodyPtr  rb2,
agx::Real *  rb2Rhs,
agx::Bool  isRestingSolve 
)
overrideprotectedvirtual

Right hand side update.

Implements agx::StrongInteraction.


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