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 multiphysics problems.
Featured softwareThese are some of the main software productions from the Center for Biomedical Computing. 


FEniCS 
The FEniCS Project is a popular opensource (LGPLv3) computing platform for solving partial differential equations (PDEs). FEniCS enables users to quickly translate scientific models into efficient finite element code. With the highlevel 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 highperformance clusters.  
dolfinadjoint 
The dolfinadjoint 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. Dolfinadjoint 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 dolphinadjoint. 

hashdist 
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 
cbcbeat is a Python module providing a problem and solver collection for cardiac electrophysiology models. The module combines core FEniCS functionality with dolfinadjoint 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.  
cbcflow 
cbcflow is a set of NavierStokes solvers with boundary conditions and postprocessing features motivated by blood flow applications. 

cbcpost 
A framework for postprocessing in time dependent FEniCS programs.  
Oasis 
A fractional step NavierStokes solver with performance exceeding OpenFOAM and CDP. 
Other CBC softwareResearchers 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. 


cardiac_highres_dataassim 
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 dolfinadjoint to an advanced cardiac mechanics model with clinical data.  
chaospy 
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 easytouse software library for quantifying stochastic uncertainty in computational science models. The library offers a highlevel application programming interface where users can in a few lines of Python code implement nonintrusive, tailored Monte Carlo or polynomial chaos algorithms for any particular forward model. The software contains a range of stateoftheart 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. 

cbc.block 
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 
cutFEM is a project which aims at providing tools for cut finite element method for multiphysics 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) levelset function(s). Here, possible applications areas are twophase flows, flows in fractured media, fluidstructure 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 surfacebulk coupling problems.  
DocOnce 
DocOnce is a modestly tagged (Markdownlike) 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.  
haosolver 
A FEniCS based package to solve the quasistatic Holzapfel and Ogden Elasticity equations for cardiac mechanics modeling.  
fenicstools 
Tools for postprocessing in FEniCS based solvers.  
GAMer 
GAMer (Geometrypreserving Adaptive MeshER) is mesh generation tool that produces highquality simplex meshes of surfaces and volumes.  
GillStep 
A tool to define and solve discrete and stochastic Markov models using a modified Gillespie solver.  
GOSS 
A General ODE System Solver fro solving ODEs.  
Gotran 
A General ODE Translator for easy definition of ODE systems.  
Mint 
Mint is a sourcetosource 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 onchip 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 
Moola implements a set of optimisation algorithms with a special focus on PDEconstrained optimisation problems.  
OpenTidalFarm 
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.  
Panda 
A compiler framework for truly heterogeneous 3D stencil computation on GPU clusters. It consists of a simple directivebased programming model and a tightly integrated sourcetosource compiler. Annotated with a small number of directives, sequential stencil C codes can be automatically parallelized for largescale 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 
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 
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 
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.  
vmtk 
The Vascular Modeling Toolkit is a collection of libraries and tools for 3D reconstruction, geometric analysis, mesh generation and surface data analysis for imagebased modeling of blood vessels. CBC has contributed functionality for mesh file formats and setting boundary conditions on cerebrospinal fluid flow geometries. 