File kernel/src/utils/SiconosAlgebra/BlockVector.hpp#

Go to the source code of this file

Object to handle vectors of vectors.

class BlockVector
#include <BlockVector.hpp>

“Block” vector : container (list) of SiconosVector

A block vector is a stl vector that handles pointers to SiconosVector.

Insertion of nullptr SP::SiconosVector is not allowed.

Public Functions

BlockVector()

default contructor

BlockVector(const BlockVector &v)

copy contructor

Parameters:

vBlockVector&

BlockVector(SP::SiconosVector v1, SP::SiconosVector v2)

contructor with 2 SiconosVectors

Parameters:
  • v1 – first vector

  • v2 – second vector

BlockVector(unsigned int numberOfBlocks, unsigned int dim)

contructor with a BlockVector of n (numberOfBlocks) blocks of the same size (dim) filled with a new vector

Parameters:
  • numberOfBlocks – number of blocks

  • dim – dimension of the vector

BlockVector(unsigned int numberOfBlocks)

contructor with a BlockVector of n (numberOfBlocks) blocks that point on nullptr

Parameters:

numberOfBlocks – number of blocks

inline ~BlockVector()

destructor

void setBlock(const SiconosVector &input, unsigned int size_block, unsigned int start_in, unsigned int start_out)

Set a subblock of the current vector with the content (copy) of a SiconosVector.

Parameters:
  • input – the vector to be copied

  • size_block – size of the block to be copied

  • start_in – starting position in input vector of the block to be copied

  • start_out – starting position in current vector of the block to be filled in.

inline unsigned int size() const
Returns:

the size of the vector (sum of the sizes of all its blocks)

inline VectorOfVectors::iterator begin()
Returns:

an iterator pointing to the first block in the container.

inline VectorOfVectors::iterator end()
Returns:

an iterator referring to the past-the-end element in the container.

inline VectorOfVectors::const_iterator begin() const
Returns:

an iterator pointing to the first block in the container.

inline VectorOfVectors::const_iterator end() const
Returns:

an iterator referring to the past-the-end element in the container.

inline VectorOfVectors getAllVect() const
Returns:

the complete stl container

inline Index::size_type numberOfBlocks() const
Returns:

the number of SiconosVectors in the container

bool isDense() const
Returns:

true if all SiconosVector in the container are dense

void zero()

sets all the values of the vector to 0.0

void fill(double a)

set all values of the vector component to value.

Parameters:

a – double

void display(void) const

display data on standard output

std::string toString() const

put data of the vector into a std::string

Returns:

std::string

double getValue(unsigned int i) const

Get a component of the vector.

Parameters:

i – index of the required component

Returns:

the component value

void setValue(unsigned int i, double value)

set a component of the vector

Parameters:
  • i – index of the required component

  • value – of the component

double &operator()(unsigned int i)

get a component of the vector

Parameters:

i – index of the required component

Returns:

value of the component

double operator()(unsigned int i) const

get a component of the vector

Parameters:

i – index of the required component

Returns:

value of the component

inline SP::SiconosVector vector(unsigned int pos)

get a block (SiconosVector) of the vector

Parameters:

pos – index of the required block

Returns:

the expected block

inline SPC::SiconosVector vector(unsigned int pos) const

gets a block (SiconosVector) of the vector

Parameters:

pos – index of the required block

Returns:

the expected block

void setVector(unsigned int pos, const SiconosVector &v)

set a block with a given vector (copy!)

Parameters:
  • pos – index of the block to set

  • v – source vector to be copied at position i

void setVectorPtr(unsigned int pos, SP::SiconosVector v)

set a block with a given vector (pointer link!)

Parameters:
  • pos – index of the block to set

  • v – source vector to be inserted at position i

void setAllVect(VectorOfVectors &v)

Fill the container with a list of SiconosVector.

Warning: pointer links, no copy

Parameters:

v – the vectors to be inserted

inline const SP::Index tabIndex() const
Returns:

a pointer to the index tab

unsigned int getNumVectorAtPos(unsigned int pos) const

get the number of the vector that handles element at position “pos”

Parameters:

pos – unsigned int, position of the element

Returns:

unsigned int number of the searched vector

BlockVector &operator=(const BlockVector &vIn)

Assignment operator.

Parameters:

vIn – the vector to be copied

Returns:

BlockVector&

BlockVector &operator=(const double *data)

Assignment operator.

Parameters:

data – data to put in the BlockVector

Returns:

BlockVector&

BlockVector &operator=(const SiconosVector &vIn)

Assignment operator.

Parameters:

vIn – the vector to be copied

Returns:

BlockVector&

BlockVector &operator-=(const BlockVector &vIn)

Subtract in place operator.

Parameters:

vIn – rhs of the operator

Returns:

BlockVector&

BlockVector &operator+=(const BlockVector&)

Add in place operator.

Parameters:

vIn – rhs of the operator

Returns:

BlockVector&

BlockVector &operator+=(const SiconosVector &vIn)

Add in place operator.

Parameters:

vIn – rhs of the operator

Returns:

BlockVector&

BlockVector &operator-=(const SiconosVector &vIn)

Subtract in place operator.

Parameters:

vIn – rhs of the operator

Returns:

BlockVector&

BlockVector &operator*=(double s)

multiply by a scalar, result in place

Parameters:

s – the scalar factor

Returns:

BlockVector&

BlockVector &operator/=(double s)

divide by a scalar, result in place

Parameters:

s – the scalar factor

Returns:

BlockVector&

void insertPtr(SP::SiconosVector v)

Insert a new block (no allocation and nor copy)

Parameters:

v – the vector to be inserted

double norm2() const
Returns:

the Euclidian norm of the vector

double normInf() const
Returns:

the infinite norm of the vector

SP::SiconosVector prepareVectorForPlugin() const

Tranform a BlockVector into a SiconosVector.

Required for plugins, that need contiguous memory for their parameters.

Returns:

a vector (the result depends on the number of blocks in input. 1 block : link to first component of the container, more : copy of all components into a SiconosVector)

ACCEPT_NONVIRTUAL_VISITORS()#

Private Functions

ACCEPT_SERIALIZATION(BlockVector)#
void _update()#

Private Members

unsigned int _sizeV = 0#

Size (ie total number of scalar elements, not number of blocks)

VectorOfVectors _vect#

A container of pointers on SiconosVector.

SP::Index _tabIndex#

tabindex[i] = tabindex[i-1] + ni, ni being the size of block[i].

Friends

friend std::ostream &operator<<(std::ostream &os, const BlockVector &bv)

offstream operator

Parameters:
Returns:

The same output stream