Emmanuel Maitre - Homepage
Emmanuel Maitre - Homepage

BOMBEC : Benchmarking Of Models Based on Eulerian Coordinates

Bombec is a set of codes developed in Jean Kuntzmann Laboratory (LJK, U. Grenoble) and implementing the Eulerian approach to fluid-structure coupling problems. The sources can be downloaded by developers using svn on https://ljkforge.imag.fr/projects/bombec/. The main developers of these codes are Claire Bost, Georges-Henri Cottet, Emmanuel Maitre and Thomas Milcent. This Wiki aims at providing basic informations and usage guidelines about each tool included in the library. It is still under construction.

Acknowledgment: this project is supported by ANR COMMA.

Plume link: access to the Plume page of BOMBEC: French English

Library components

Elastic membrane interacting with a fluid

This set of codes implement the Level Set method developed in Cottet-Maitre (M3AS, 2006), and further developed in 3D by Thomas Milcent in his PhD thesis. Several codes are available:

  • FreeFEM++ Code: Quick-and-dirty implementation with adaptative mesh refinement.
Pressure field during the relaxation of an elastic membrane
Horizontal slice of pressure field



  • Matlab Code: For teaching usage, I included below two Octave/Matlab codes which implement our level-set algorithm to simulate the interaction of an immersed elastic membrane with a carrier fluid, in 2D. This is the standard test of the immersed boundary method of Peskin in which the membrane is initially stretched with respect to its rest configuration, and relax to a circle of same area. Two graphical outputs of the code under matlab are depicted below.

The method used is from the article Cottet&Maitre (M3AS, 2006) and was build upon the Navier-Stokes solver of Benjamin Seibold (MIT) and using the level-set package of Baris Sumengen (the latter was partly included in the file to provide standalone code). Two versions are proposed:

Pressure field and stream lines during the relaxation of an elastic membrane
Horizontal slice of pressure field



  • Membrane 2D: FORTRAN90 implementation of the level-set method in dimension 2, with membrane and curvature forces. Application to the simulation of the behavior of red blood cells in shear flow. Presently AMR techniques using AGRIF are under development.
  • Thomas 2D: C implementation of the same problem with different discretizations by Thomas Milcent.
  • Canal 2D (in progress): FORTRAN90 code for the motion of vesicles in Poiseuille flow. Pierre-Yves Gires presently develops this code in his PhD.
  • Instabilite 3D: Navier-Stokes 3D using projection method coupled with simple elastic energy of an immersed membrane (no curvature energy, C code). This code was developed to study the parametric instability of the coupling between the fluid and the elastic membrane starting from a work of Cortez et al (2002). See middle figure below, where an isovorticity surface is depicted (membrane not represented).
  • Thomas 3D: C implementation, in dimension 3, with membrane and flexural energy. Currently the code is able to find equilibrium shapes of vesicules in 3D, and to study trank-treading motion (picture on the right, below). The variable viscosity case is not yet implemented. Developer: Thomas Milcent.

Tank treading motion of a 3D vesicle in shear flow. Thomas Milcent. Vorticity plot of a 3D membrane.

Generic Fluid/Elastic structure coupling

Real geometry of a cardiomyocyteRigid sphere falling in a fluid. Claire Bost PhD Thesis.

In this generic case we write elasticity in Eulerian coordinates inside the solid and fluid equations outside. We use a Level Set function to ensure stress continuity at interface. Our application concerns the simulation of isolated cardiomyocyte contraction (see picture of a numerized cardiomycyte on the right. Experimental data from Yves Usson). For the theory behind the method we refer to an article in M2AN in 2008, and a special issue of MCM on computational biology in 2009.

  • cardio3d: is a computational code written in C which implements the method developed in the fore mentioned articles. It encompasses a coupling between the cardiomyocyte elasticity, the carrier fluid equation, and an active contraction triggered by a the propagation of a calcium wave.

Coupling between a rigid solid and a fluid

This part has been mainly developed by Georges-Henri Cottet using particle methods and Claire Bost during her PhD Thesis using a finite difference computational code in 2D and 3D. We use penalization techniques to enforce the velocity field to be rigid in the solid part. In fact the solid part is first considered as fluid; then we compute a mean velocity and vorticity on the solid domain and penalize in an implicit manner (as a damping term) the fluid velocity distance to that rigid field. We prove a convergence result in an article in SIAM J. Numerical Analysis where this method is developed.

  • Solide rigide: Is a computational code developed in C by Claire Bost to implement the method studied in this preprint which has since been published in SIAM J. Num. Anal 2010.

How to build and use Bombec ?

  1. The first thing to do is to get an up-to-date version of Bombec thanks to the following svn command:
    svn checkout svn+ssh://user@scm.ljkforge.imag.fr/svnroot/bombec

    where “user” is your login in LJKForge. This will create or update the directory bombec in your current location.

  2. Create at the same level as directory “sources” a directory named “build”. If this directory already exists, you can delete it to start from scratch.
  3. cd to directory “build” and type (need cmake version 2.6 or newer):
    cmake ../sources
    make
    make install

    Note: cmake selects automatically the C and Fortran 90 compilers. If it fails to choose the right compilers, you can force it. For instance on computer Abel to select Intel compilers you have to type:

    setenv FC /opt/intel/intel-fc/8.1.025/bin/ifort
    setenv CC /opt/intel/intel-cc/8.1.029/bin/icc
    setenv CXX /opt/intel/intel-cc/8.1.029/bin/icc

    before invoking cmake. If you first tried another compilers set, you have to start over from scratch by removing the “build” directory.

  4. cd to subdirectory corresponding to your application and launch the executable. For instance for membrane 2D:
    cd membrane2D
    ./membrane2d
  5. Visualize the results. Depending on the application this will require OpenDX or Paraview.

Work in progress / ToDo list

  • AMR using AGRIF on membrane2d and then membrane3d code. Collaboration with Laurent Debreu.
  • Device stable numerical schemes for stiff elastic interactions.
  • Adaptation of codes to model the motion of a cell on a substrate.
  • Motion of red blod cells in small vessels: behavior of vesicles in Poiseuille flow.
Back to top
softwares.txt · Last modified: 2014/12/08 18:36 by maitre