### Overview

This free software consist of two complementary libraries, the first being fairly generic while the other targets more specific problems. Both are open-source and can be downloaded from the BitBucket repository.

#### bogus

is a template C++ 98 header-only **sparse block matrix** library. It allows to express in a concise way algebraic operations on sparse matrices whose elements can be a variety of block types, such as Eigen dense or sparse matrices.

#### So-bogus

is a library that uses and completes bogus to solve systems with **second order cone constraints**, such as **Coulomb friction problems**.

### Main features

#### bogus

- Simple creation of sparse block matrices with several storage options (row or column major, symmetric, ...)
- Complex arithmetic expressions using standard C++ operators
- Lazy evaluation
- Parallelization of most sparse block matrix operations using OpenMP (if available)
- Generic Gauss-Seidel and Projected Gradient solvers for linear problems under normal cone inclusions (such as LCP or Coulomb friction problems; see the documentation)
- Several linear iterative solvers ( Conjugate Gradient and variations, GMRES, ...)
- Support for matrix-free iterative solvers (using expression templates)
- Optional serialization using
`boost::serialization`

- Compatibility with standard Block Sparse Row storage

#### So-bogus

- Second Order Cone complementarity function with local root-finding solver
- Analytical solver for local Coulomb friction and SOC complementarity problems in 2d and 3d
- Global Coulomb friction and SOCQP solvers for arbitrary dimensions

### License

**bogus** is released under the terms of the Mozilla Public License v2.0.

**So-bogus** is released under the terms of the GNU General Public License version 2 or, at your option, any later version.

For more information, see LICENCE.md.

### Documentation

**bogus** includes documentation in the doxygen format, along with usage samples.
Run `doxygen`

from the `doc/doxygen`

folder, or browse it online.

### Requirements

Apart from a C++98 compiler, the only requirement is Eigen.

**bogus** has been successfully tested on a variety of Linux distributions with `gcc`

4.5+ and `clang`

3.5+,
and on Mac OSX 10.8+ with `clang`

3.2+.
Visual Studio 2012 ( and maybe earlier ) should also be able to compile and run the test suite, though no particular attention is given to this platform.

For more information, see INSTALL.md.

### About

**bogus** and **So-bogus** are Copyright 2013
Gilles Daviet gdaviet@gmail.com.

**So-bogus** implements some algorithms initially developed within the BiPop team at Inria RhÃ´nes-Alpes. Its name is derived from the main use case of the library, a **B**lock-**o**riented **G**a**u**ss-**S**eidel solver for **S**econd **O**rder cone problems.