A software package for the modeling and simulation of nonsmooth dynamical systems in C++ and Python.
π Examples and Tutorials: Most examples and tutorials are in the separate siconos-tutorials repository. Please ensure you use consistent versions of siconos and siconos-tutorials (e.g., both
mainbranch or both same release version).
Homepage | Documentation | Tutorials | GitLab
Siconos is an open-source scientific software package designed for modeling and simulating nonsmooth dynamical systems - systems where the dynamics are not continuous due to phenomena like impacts, friction, switches, or constraints.
| Domain | Examples |
|---|---|
| Mechanical Systems | Rigid body dynamics with contact and friction, multibody systems, granular materials |
| Electrical Circuits | Power converters, rectifiers, PLLs, ADCs with ideal components |
| Control Systems | Sliding mode control, hybrid systems |
| Biology | Gene regulatory networks |
| Optimization | Complementarity systems, variational inequalities |
Run Siconos directly in your browser via Binder:
Best for: Testing the software, tutorials, lightweight demos
Prerequisite: Docker
# Jupyter Lab with Siconos and tutorials
docker run --rm -p 8888:8888 -ti \
gricad-registry.univ-grenoble-alpes.fr/nonsmooth/siconos-tutorials/siconoslab-main:latest
# Or command-line only
docker run --rm --entrypoint /bin/bash -ti \
gricad-registry.univ-grenoble-alpes.fr/nonsmooth/siconos-tutorials/siconoslab-main:latest# Clone the repository
git clone https://github.com/siconos/siconos.git
cd siconos
# Configure and build
cmake -S . -B build -DUSER_OPTIONS_FILE=config_samples/default.cmake
cmake --build build -j$(nproc)
# Run tests (optional)
ctest --test-dir build
# Install
cmake --install buildπ Detailed installation guide
Each component can be used from C/C++ or Python.
siconos/numerics (C)
Low-level numerical algorithms for solving optimization problems:
- Complementarity problems: LCP, MLCP, NCP
- Friction-contact problems: 2D/3D with Coulomb friction, rolling friction
- Variational inequalities: AVI, VI
- Second-order cone programming (SOCP)
- Relay problems
siconos/kernel (C++)
Core library for modeling and simulation:
- Dynamical systems: Lagrangian, Newton-Euler, first-order formulations
- Numerical integration: Event-driven and time-stepping schemes
- Nonsmooth laws: Impact, friction, complementarity, relay
siconos/mechanics (C++)
Mechanical simulation with contact detection:
- Collision detection (native and Bullet3)
- CAD integration (Open CASCADE)
siconos/control (C++)
Control systems with sliding mode control and implicit discretization.
siconos/io (C++)
Serialization and visualization:
- HDF5 import/export
- VTK visualization
The siconos-tutorials repository contains comprehensive examples for each application area:
| Domain | Example Topics | Link |
|---|---|---|
| Mechanics | Bouncing ball, slider-crank, gear transmission, robotics, granular materials | Mechanics Tutorials |
| Electronics | Power converters, rectifiers, PLLs, circuit simulation | Electronics Tutorials |
| Control | Sliding mode control, state observers, hybrid systems | Control Tutorials |
| Numerics | LCP solvers, friction contact, optimization problems | Numerics Tutorials |
π Browse all examples: siconos-tutorials repository
import siconos.modeling as sm
import siconos.simulation as ss
import numpy as np
# Parameters
t0, T, h = 0, 10, 0.005 # Time settings
r, g, m = 0.1, 9.81, 1 # Ball properties
e = 0.9 # Restitution coefficient
# Create dynamical system (ball)
pos
AAF0
ition = [1, 0, 0]
velocity = [0, 0, 0]
mass = np.eye(3) * m
mass[2, 2] = 2./5 * r * r
ball = sm.LagrangianLinearTIDS(position, velocity, mass)
ball.set_constant_fext(np.array([-m * g, 0, 0]))
# Interaction with floor
nslaw = sm.NewtonImpactNSL(e)
relation = sm.LagrangianLinearTIR(np.array([[1, 0, 0]]))
interaction = sm.Interaction(nslaw, relation)
# Model
model = sm.NonSmoothDynamicalSystem(t0, T)
model.insert_dynamical_system(ball)
model.link(interaction, ball)
# Simulation
osi = ss.MoreauJeanOSI(0.5)
td = ss.TimeDiscretisation(t0, h)
osnspb = ss.LCP()
sim = ss.TimeStepping(model, td, osi, osnspb)
# Run simulation
while sim.has_next_event():
sim.compute_one_step()
sim.next_step()| Resource | Link |
|---|---|
| User Guide | https://nonsmooth.gricad-pages.univ-grenoble-alpes.fr/siconos |
| Tutorials | https://nonsmooth.gricad-pages.univ-grenoble-alpes.fr/siconos-tutorials |
| API Reference (Doxygen) | https://nonsmooth.gricad-pages.univ-grenoble-alpes.fr/siconos/doxygen |
| Bug Reports | GitHub Issues |
If you use Siconos in your research, please cite:
@software{siconos,
title = {Siconos: A Software Package for Modeling and Simulation of Nonsmooth Dynamical Systems},
author = {{Siconos Team}},
url = {http://siconos.org},
year = {2024}
}Siconos is distributed under the Apache License, Version 2.0.
Maintained by: The Siconos Development Team
Contact: GitHub Issues