## Description

One must inherit from this and implement ComputeQ() directly. The ComputeQ() must write the generalized forces Q into the "load_Q" vector of this object. Given that multiple ChLoadable objects are referenced here, their sub-forces Q are assumed appended in sequence in the "load_Q" vector, in the same order that has been used in the std::vector "mloadables" for ChLoadCustomMultiple creation. The same applies for the order of the sub-matrices of jacobians K,R etc.

#include <ChLoad.h>

## Public Member Functions

Gets the number of DOFs affected by this load (position part)

Gets the number of DOFs affected by this load (speed part)

Gets all the current DOFs packed in a single vector (position part)

Gets all the current DOFs packed in a single vector (speed part)

virtual void LoadStateIncrement (const ChState &x, const ChStateDelta &dw, ChState &x_new)
Increment a packed state (ex. More...

Number of coordinates in the interpolated field, ex=3 for a tetrahedron finite element or a cable, = 1 for a thermal problem, etc. More...

virtual void ComputeQ (ChState *state_x, ChStateDelta *state_w)=0
Compute Q, the generalized load. More...

virtual void ComputeJacobian (ChState *state_x, ChStateDelta *state_w, ChMatrix<> &mK, ChMatrix<> &mR, ChMatrix<> &mM)
Compute jacobians (default fallback). More...

Adds the internal loads Q (pasted at global nodes offsets) into a global vector R, multiplied by a scaling factor c, as R += forces * c.

virtual bool IsStiff ()=0
Return true if stiff load. More...

virtual void CreateJacobianMatrices ()
Create the jacobian loads if needed, and also set the ChVariables referenced by the sparse KRM block. More...

virtual ChVectorDynamicGetQ ()
Access the generalized load vector Q.

Public Member Functions inherited from chrono::ChLoadBase
Access the jacobians (if any, i.e. if this is a stiff load)

virtual void Update ()
Update: this is called at least at each time step. More...

virtual void InjectKRMmatrices (ChSystemDescriptor &mdescriptor)
Tell to a system descriptor that there are item(s) of type ChKblock in this object (for further passing it to a solver) Basically does nothing, but inherited classes must specialize this. More...

virtual void KRMmatricesLoad (double Kfactor, double Rfactor, double Mfactor)
Adds the current stiffness K and damping R and mass M matrices in encapsulated ChKblock item(s), if any. More...

## Public Attributes

std::vector< std::shared_ptr

## Member Function Documentation

 virtual void chrono::ChLoadCustomMultiple::ComputeJacobian ( ChState * state_x, ChStateDelta * state_w, ChMatrix<> & mK, ChMatrix<> & mR, ChMatrix<> & mM )
virtual

Compute jacobians (default fallback).

Compute the K=-dQ/dx, R=-dQ/dv , M=-dQ/da jacobians. Uses a numerical differentiation for computing K, R, M jacobians, if stiff load. If possible, override this with an analytical jacobian. NOTE: Given that multiple ChLoadable objects are referenced here, sub-matrices of mK,mR are assumed pasted in i,j block-positions where i,j reflect the same order that has been used in the std::vector "mloadables" at ChLoadCustomMultiple creation. Called automatically at each Update().

Parameters
 state_x state position to evaluate jacobians state_w state speed to evaluate jacobians mK result dQ/dx mR result dQ/dv mM result dQ/da

 virtual void chrono::ChLoadCustomMultiple::ComputeQ ( ChState * state_x, ChStateDelta * state_w )
pure virtual

Called automatically at each Update(). NOTE: The computed Q must be stored in this->load_Q. NOTE: Given that multiple ChLoadable objects are referenced here, their sub-forces Q are assumed appended in sequence in the "load_Q" vector, in the same order that has been used in the std::vector "mloadables" at ChLoadCustomMultiple creation. MUST BE IMPLEMENTED BY CHILDREN CLASSES!!!

Parameters
 state_x state position to evaluate Q state_w state speed to evaluate Q

virtual

Create the jacobian loads if needed, and also set the ChVariables referenced by the sparse KRM block.

pure virtual

MUST BE LOAD BY CHILDREN CLASSES!!!

virtual

Number of coordinates in the interpolated field, ex=3 for a tetrahedron finite element or a cable, = 1 for a thermal problem, etc.