siconos.kernel.OSNSMatrix (Python class)

class siconos.kernel.OSNSMatrix(*args)[source]

Bases: object

Interface to some specific storage types for matrices used in OneStepNSProblem.

This class is used to define an interface for various storage methods used for matrices in OneStepNSProblem. Its aim is to fill the Numerics structure NumericsMatrix, required in many XXX_problem structures of Numerics as input argument for drivers.

The idea is to remove all matrix storage management problems from OSNS classes
(LCP …) and to leave it into this class.
Two main functions:
  • fill(indexSet, interactionBlocks): fill the matrix using a list of “active” Interaction, in indexSet, and a MapOfMapOfInteractionMatrices, interactionBlocks, which determines which Interaction are connected or not (ie have common DynamicalSystem). - convert(): fill the NumericsMatrix structure (indeed only pointers links

    to the components of the present class)

Note that OSNSMatrix are square.

For example, if in a LCP, constraints of interest are indexSet={inter2,inter3,inter8,inter12}, whith common DynamicalSystem between 2 and 3, 2 and 8 and 8 and 12.

interactionBlocks contains matrices for all (interi,interj) which have common DS, for (interi,interj) in I0, the set of all Interaction.

(for details on how interactionBlocks is computed see OneStepNSProblem.h).

We denote interactionBlocks[interi][interj] = mij
Then, a call to fill(indexSet, interactionBlock) results in a matrix which

looks like:

M=\left\lbrace\begin{array}{cccc} m22 & m23 & m28 & 0 \\ m32 & m33 & 0 & 0 \\ 0 & 0 & m88 & m812 \\ 0 & 0 & m128& m1212 \end{array}\right.

Note: at the time the available storage types are:

  • full matrix in a SiconosMatrix (_storageType = 0). In this case, for each call to fill(), the SiconosMatrix M is resized according to the sizes of the Interaction present in indexSet and then all the required interactionBlocks mij are COPIED into M.
  • Sparse Block Storage (_storageType = 1): corresponds to SparseBlockStructuredMatrix structure of Numerics. Only non-null interactionBlocks are saved in the matrix M and there is no copy of sub- interactionBlocks, only links thanks to pointers.
  • Sparse matrix (_storageType = 2): at the time of writting, only csc (compressed-sparse column). Could also be triplet (coo or coordinate) or csr (compressed-sparse row).

Generated class (swig), based on C++ header Program listing for file kernel/src/simulationTools/OSNSMatrix.hpp.

Constructors

OSNSMatrix()

Default constructor -> empty matrix.

OSNSMatrix(int n, int stor)

Constructor with _dimRow.

of the matrix

Parameters:
  • n – size of the square matrix
  • stor – storage type (0:dense, 1:sparse interactionBlock)
OSNSMatrix(int n, int m, int stor)

Constructor with _dimRow and DimColumn of the matrix.

Parameters:
  • n – row sizes of the rectangle matrix
  • m – column size of the rectangle matrix
  • stor – storage type (0:dense, 1:sparse interactionBlock)
OSNSMatrix(InteractionsGraph indexSet, int stor)

Constructor from index set and map.

Parameters:
  • indexSet – InteractionsGraph* the index set of the active constraints
  • stor – storage type
OSNSMatrix(array_like (np.float64, 2D) MSource)

Constructor with copy of a SiconosMatrix => _storageType = 0.

Parameters:MSource – matrix to be copied
convert() → None[source]

fill the numerics structure _numericsMatSparse using MBlockCSR

defaultMatrix() -> array_like (np.float64, 2D)[source]

get the matrix used for default storage

Returns:SP::NumericsMatrix
display() → None[source]

display the current matrix

fillH(DynamicalSystemsGraph DSG, InteractionsGraph indexSet, bool update=True) → None[source]

fill the current class using an index set

Parameters:
  • DSG – the index set of the dynamicalSystems
  • indexSet – the index set of the Interactions
  • update – if true update the size of the Matrix (default true)
fillM(DynamicalSystemsGraph DSG, bool update=True) → None[source]

fill the current class using an index set

Parameters:
  • DSG – the index set of the dynamicalSystems
  • update – if true update the size of the Matrix (default true)
fillW(InteractionsGraph indexSet, bool update=True) → None[source]

fill the current class using an index set

Parameters:
  • indexSet – the index set of the active constraints
  • update – if true update the size of the Matrix (default true)
numericsMatrix() → NumericsMatrix[source]

get the numerics-readable structure

Returns:SP::NumericsMatrix
setStorageType(int i) → None[source]

set which type of storage will be used for current matrix

Parameters:i – the type of storage
size() → int[source]

get dimension of the square matrix

Returns:unsigned int
sizeColumn() → int[source]

get dimension of the square matrix

Returns:unsigned int
storagetype() → int[source]

get the type of storage for current matrix

Returns:unsigned int