CBC Software

A key mission of the Center is to developme useful and accessible tools to computational scientists and engineers at large through professional, open source software. This original software can help advancing many other scientific fields dealing with complex multi-physics problems.


Featured software

These are some of the main software productions from the Center for Biomedical Computing.


The FEniCS Project is a popular open-source (LGPLv3) computing platform for solving partial differential equations (PDEs). FEniCS enables users to quickly translate scientific models into efficient finite element code. With the high-level Python and C++ interfaces to FEniCS, it is easy to get started, but FEniCS offers also powerful capabilities for more experienced programmers. FEniCS runs on a multitude of platforms ranging from laptops to high-performance clusters. Navier Stokes Solution


The dolfin-adjoint project automatically derives the discrete adjoint and tangent linear models from a forward model written in the Python interface to DOLFIN. These adjoint and tangent linear models are key ingredients in many important algorithms, such as data assimilation, optimal control, sensitivity analysis, design optimisation, and error estimation. Such models have made an enormous impact in fields such as meteorology and oceanography, but their use in other scientific fields has been hampered by the great practical difficulty of their derivation and implementation. Dolfin-adjoint solves this problem by recording the sequence of forward model equations solved and using this to symbolically derive the corresponding adjoint model equations to be solved.
The CBC researchers Marie E. Rognes, Simon W. Funke and Patrick E. Farrell were together with Professor David Ham awarded the 2015 Wilkinson Prize for their development of dolphin-adjoint.


Complex scientific software is often built on "distributions", or "stacks", of software. Particulary as scientists and engineers work toward more integrated, and therefore more interdependennt, scientific software, they need the ability to setup scientific stacks in many different user and hardware environments and hardware. Scientific stacks must be reproducible in the sense that "regular" users should be able to install them and have them work as advertised. These stacks also need to work in challenging environments like cutting edge high performance commputers and handheld devices. Due to the authors« separate but similar ex- periences of the difficulty of buiding and maintaining scientific software stacks to support our own work, we worked together to build Hashdist, which is a a tool for building and managing custom software distributions based on a functional approach. It employs cryptographic hashing methods related to what are used in highly successful software source version control system to bring the same robust- ness to building and developing complex scientific software stacks.


cbcbeat is a Python module providing a problem and solver collection for cardiac electrophysiology models. The module combines core FEniCS functionality with dolfin-adjoint and the code generation tool Gotran. As such, it provides efficient forward solvers for all cardiac cell models available via CellML and the monodomain and the bidomain equations. Moreover consistent discrete adjoints are available for all its solvers. Ultimately, the software aims at being a top quality software framework for forward and backward electrophysiology simulations. The computation of functional derivatives in turn allows for automated and efficient solution of optimization problems such as those encountered in data assimilation or other inverse problems. Screenshot from cbcbeat


Wall Shear Stress in aneurysm modelled by cbcflow
cbcflow is a set of Navier-Stokes solvers with boundary conditions and postprocessing features motivated by blood flow applications.


A framework for postprocessing in time dependent FEniCS programs.


A fractional step Navier-Stokes solver with performance exceeding OpenFOAM and CDP.


Other CBC software

Researchers supported by CBC have produced a large number of open source software packages, many of them are listed here. Some focus on a particular method and others are application specific.


This is a specialized software package for High Resolution Data Assimilation of Cardiac Mechanics Applied to a Dyssynchronous Ventricle. It demonstrates a highly complex application of FEniCS and dolfin-adjoint to an advanced cardiac mechanics model with clinical data.


Polynomial Chaos Expansion in Python
Chaospy is a numerical tool for performing uncertainty quantification using polynomial chaos expansions and advanced Monte Carlo methods. (Formerly PolyChaos and RoseDist.)
Chaospy is a flexible and easy-to-use software library for quantifying stochastic uncertainty in computational science models. The library offers a high-level application programming interface where users can in a few lines of Python code implement non-intrusive, tailored Monte Carlo or polynomial chaos algorithms for any particular forward model.
The software contains a range of state-of-the-art tools for this purpose, like variance reduction techniques and full Rosenblatt transformation for dependency handling. It is designed for ease of use, large collection of tools, and high flexibility when doing custom implementation.
Caospy logo


cbc.block is a Python library for block linear algebra operations in DOLFIN. Block operators may be defined from standard DOLFIN matrices and vectors using compact notation. A good selection of iterative solvers is included, and both preconditioners, inverses, and inner solvers are supported.


cutFEM is a project which aims at providing tools for cut finite element method for multi-physics problems built upon the FEniCS project. The main focus lies at developing cutFEM methods where the boundary or interface is described by a (set of) level-set function(s). Here, possible applications areas are two-phase flows, flows in fractured media, fluid-structure interaction with embedded thin structures etc. At the moment cutFEM has successfully been applied to PDE problems with embedded unfitted boundaries and interfaces, surface PDEs and surface-bulk coupling problems.


DocOnce is a modestly tagged (Markdown-like) markup language targeting web pages, scientific reports, software documentation, books, and slides involving much math and code in the text. From DocOnce source you can generate LaTeX, Sphinx, HTML, IPython notebooks, Markdown, MediaWiki, and other formats.


A FEniCS based package to solve the quasi-static Holzapfel and Ogden Elasticity equations for cardiac mechanics modeling.


Tools for postprocessing in FEniCS based solvers.


GAMer (Geometry-preserving Adaptive MeshER) is mesh generation tool that produces high-quality simplex meshes of surfaces and volumes.


A tool to define and solve discrete and stochastic Markov models using a modified Gillespie solver.


A General ODE System Solver fro solving ODEs.


A General ODE Translator for easy definition of ODE systems.


Mint is a source-to-source code translator and optimizer targeting stencil methods. As input, a user only needs to provide a serial C code, which is annotated with a small number of pragmas. As output, CUDA code is automatically generated, which is also optimized with respect to using registers and shared memory of a GPU's on-chip resources. In addition, granularity of the CUDA threads can be automatically adjusted. Therefore, domain scientists can enjoy the performance benefits of GPUs without learning the details of GPU programming.


Moola implements a set of optimisation algorithms with a special focus on PDE-constrained optimisation problems.


OpenTidalFarm is a layout optimisation software for tidal turbine farms. This is a research project developed at Imperial College London, Simula Research Laboratory and Oxford University.


A compiler framework for truly heterogeneous 3D stencil computation on GPU clusters. It consists of a simple directive-based programming model and a tightly integrated source-to-source compiler. Annotated with a small number of directives, sequential stencil C codes can be automatically parallelized for large-scale GPU clusters. The most distinctive feature of the Panda compiler is its capability to generate hybrid MPI+CUDA+OpenMP code that uses concurrent CPU+GPU computing to unleash the full potential of powerful GPU clusters.


SciTools is a Python package containing many useful tools for scientific computing in Python. The package is built on top of other widely used packages such as NumPy, SciPy, ScientificPython, Matplotlib, Gnuplot, etc.


SubCell uses the finite element method to solve partial differential equations. A SubCell model is declared in a form file with intuitive syntax. The model is then run from a run script. Based on the model file, SubCell uses FEniCS to generate and solve the finite element problem.


Tanganyika implements mono- and multiadaptive Galerkin methods of arbitrary polynomial order for ODEs, ie. finite element time stepping methods. It has support for arbitrary arithmetic floating point precision. By solving an associated dual problem (the adjoint problem), Tanganyika can perform a detailed analysis of an ODE's stability and quantify the computability wrt. errors in the initial data, the discretization scheme or computational (round off) errors. We have used Tanganyika to study how the arithmetic precision limits the computability, defined the time interval on which accurate solutions can be computed.


The Vascular Modeling Toolkit is a collection of libraries and tools for 3D reconstruction, geometric analysis, mesh generation and surface data analysis for image-based modeling of blood vessels. CBC has contributed functionality for mesh file formats and setting boundary conditions on cerebrospinal fluid flow geometries.