Class LinearOSNS#

Defined in Program listing for file kernel/src/simulationTools/LinearOSNS.hpp

class LinearOSNS : public OneStepNSProblem#

Base (abstract) class for linear non-smooth problems.

Usually in the form:

\( w = q + M z \)

where

  • \( w \in R^{n} \) and \( z \in R^{n} \) are the unknowns,

  • \( M \in R^{n \times n } \) and \( q \in R^{n} \)

examples: LCP, FrictionContact

Subclassed by AVI, Equality, FrictionContact, GenericMechanical, GlobalFrictionContact, LCP, MLCP, MultipleImpact, Relay, RollingFrictionContact

Public Functions

inline LinearOSNS(SP::SolverOptions options, LINEAROSNS_ASSEMBLY_TYPE assemblyType = REDUCED_BLOCK)#

constructor from a pre-defined solver options set.

Parameters:
  • options – the options set

  • assemblytype – the method used to build the assembled matrix - default=REDUCED_BLOCK

inline virtual ~LinearOSNS()#

destructor

inline const SiconosVector getW() const#

copy of the current value of vector w

Returns:

a SiconosVector

inline SP::SiconosVector w() const#

current w vector (pointer link)

Returns:

pointer on a SiconosVector

inline void setWPtr(SP::SiconosVector newPtr)#

set w vector (pointer link)

Parameters:

newPtr – the new SP::SiconosVector

inline const SiconosVector getz() const#

copy of the current value of vector z

Returns:

a SiconosVector

inline SP::SiconosVector z() const#

current z vector (pointer link)

Returns:

pointer on a SiconosVector

inline void setzPtr(SP::SiconosVector newPtr)#

set z vector (pointer link)

Parameters:

newPtr – the new SP::SiconosVector

inline SP::OSNSMatrix M() const#

M matrix (pointer link)

Returns:

pointer on a OSNSMatrix

inline void setMPtr(SP::OSNSMatrix newM)#

set M to pointer newPtr

Parameters:

newM – the new M matrix

inline SP::OSNSMatrix H() const#

get H

Returns:

pointer on a OSNSMatrix

inline void setH(SP::OSNSMatrix H)#

set the value of H

Parameters:

H – the new matrix

inline const SiconosVector getQ() const#

get the value of q, the constant vector in the LinearOSNS

Returns:

SiconosVector

inline SP::SiconosVector q() const#

get q, the the constant vector in the LinearOSNS

Returns:

pointer on a SiconosVector

inline void setQPtr(SP::SiconosVector newQ)#

set q to pointer newPtr

Parameters:

newQ – the new q vector

inline NM_types getMStorageType() const#

get the type of storage used for M

Returns:

NM_types (NM_DENSE, NM_SPARSE_BLOCK)

inline void setMStorageType(NM_types i)#

set which type of storage will be used for M

Warning

this function does not allocate any memory for M, it just sets an indicator for future use

Parameters:

i – (NM_DENSE, NM_SPARSE_BLOCK)

inline void setAssemblyType(LINEAROSNS_ASSEMBLY_TYPE assemblyType)#

set which type of assembly will be used for M

void initVectorsMemory()#

Memory allocation or resizing for z,w,q.

virtual void initOSNSMatrix()#

initialize the _M matrix

virtual void initialize(SP::Simulation sim) override#

To initialize the LinearOSNS problem(computes topology …)

Parameters:

sim – the simulation owning this OSNSPB

virtual void computeInteractionBlock(const InteractionsGraph::EDescriptor &ed) override#

compute extra-diagonal interactionBlock-matrix

Parameters:

ed – an edge descriptor

virtual void computeDiagonalInteractionBlock(const InteractionsGraph::VDescriptor &vd) override#

compute diagonal Interaction block

Parameters:

vd – a vertex descriptor

virtual void computeM()#

compute matrix M

virtual void computeqBlock(InteractionsGraph::VDescriptor &vertex, unsigned int pos)#

To compute a part of the q vector of the OSNS.

Parameters:
  • vertex – vertex (interaction) which corresponds to the considered block

  • pos – the position of the first element of yOut to be set

virtual void computeq(double time)#

compute vector q

Parameters:

time – the current time

virtual bool preCompute(double time) override#

build problem coefficients (if required)

Parameters:

time – the current time

Returns:

true if the indexSet is not empty

virtual void postCompute() override#

update interactions variables (y and lambda) according to current problem found solutions.

virtual void display() const override#

print the data to the screen

inline void setKeepLambdaAndYState(bool val)#

choose initialisation behavior for w and z.

Parameters:

val – true: init w and z with previous values of y and lambda saved in interactions, false: init to 0.