Revision as of 10:20, 23 March 2017 by Ribert (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Image of a 128^3 HIT

SiTCom-B (Simulation of Turbulent Combustion with Billions of points) is a finite volume code that solves the unsteady compressible reacting Navier-Stokes equations system on cartesian meshes.

It uses a structured formalism, which means that the data is organized in multidimensional arrays, according to the corresponding cell position in the physical space.

It is mainly design to perform DNS and highly resolved LES on thousands of processors.

It is a totally new version of the previous SiTCom code, written by P. Domingo and which has been the main tool over the past ten years to conduct numerical combustion research at CORIA.

The main interest of this version is that it uses the full power of the fortran 90/95 language : pointers, dynamic allocation and most important, object oriented programming.

The numerical code is managed by Pascale Domingo and Guillaume Ribert.

Main features

  • Finite volume discretization of Navier-Stokes equations
  • 4th and 2nd order central difference schemes
  • Runge-Kutta time-discretization (3rd and 4th order)
  • Full multispecies formulation
  • Realistic thermodynamics (CHEMKIN)
  • Realistic transport properties (Hirschfelder & Curtiss)
  • Multicomponent diffusion
  • Complex, tabulated and hybrid chemistry
  • Perfect gas, Peng-Robinson or SRK equation of state
  • NSCBC boundary treatment
  • Immersed Boundary Method
  • Lagrangian solver
  • Evaporation


The code is actually a library of modules which implements objects.

Examples of such modules/objects are:

  • data
  • block
  • inpufile
  • parameters
  • probes
  • species
  • numerics
  • ...

The main programs are simply built from this module library.

Important concepts


All input files make an extensive use of keywords. This is possible thanks to a simple parser implemented in parser_m

Chained lists

Nearly all objects can be put in chained lists which are very flexible and much easier to manipulate than arrays.


Blocks are sets of cells assigned to a single processor. Each cell of the blocks can be described by a set of 3 indices (ix,iy,iz) that represent its position in the block. Another important concept is the block_bound structure: it is an object that contains two sets of three indices (one for the lower corner and one for the upper corner). It is used everywhere to perform loops on the blocks.


It is possible to put numerical probes into the flow that will record the value of some variables at given positions for each time step.


Both Reynolds and Favre averaging are implemented, for any variables.


Second and Fourth order centered-interpolations are implemented in SiTCom-B. Moreover, convective fluxes can be computed in either convective, divergence or skew-symmetric form. Artificial Viscosity (based on Jameson formulation) is also available to stabilize the computation near steep gradients.


The code has been thought to work on thousands of processors via the MPI protocol. Parallel communications and I/O have been optimized to achieve this goal.


When running on thousands of processors, I/O may be a major bottleneck. I/O in SiTCom-B have been designed to overcome this limitation. Moreover, the HDF format is used to store meshes, solutions, ... which makes it easy to share on various platforms and people.


A few pictures of SiTCom-B computations are available in this gallery.