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 collection of free software with an extensive list of features for automated, efficient solution of differential equations.  
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.  
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. 


CamFIN 
A framework for the simulation and optimization of the mechanical activity of the heart.  
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.  
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.  
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.  
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.  
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 
A problem solving environment for subcellular problems.  
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.  
uflacs 
Algorithms for effective translation of symbolic equations with complicated tensor algebra expressions to high performance low level code.  
vmtk 
The vascular modeling toolkit has received CBC contributions for setting boundary conditions on cerebrospinal fluid flow geometries. 