Skip to content

Code Structure

The DINO source tree follows a modular and organized structure based on common scientific programming practices. Understanding the directory layout will help new users navigate the codebase, locate relevant files, and efficiently modify or extend the solver.

The top-level directory of the project is referred to as $DINO_HOME.
It contains the core source code, build system files, documentation, and auxiliary tools.


Directory Overview

CMakeLists.txt

This is the main CMake configuration file that defines how DINO is built and installed. It specifies compiler options, dependencies, build targets, and installation paths.


DOCUMENTATION/

Contains the DINO user and developer documentation, including build guides, module descriptions, and references to related scientific materials.


SOURCES/

Holds all Fortran source files of DINO.The code is divided into subdirectories corresponding to functional modules, such as solvers, I/O routines, and physical models. Each subdirectory represents a module that encapsulates a specific part of the solver (e.g., chemistry, turbulence, multiphase flow).


TOOLS/

Includes pre- and post-processing tools shipped with DINO. These utilities support tasks such as:

  • Generating FPI tables,,
  • Preparing initial and boundary conditions,
  • Analyzing or visualizing simulation results.

Most tools are implemented as small standalone scripts or executables.


WORK/

This directory contains reference material and input data required to set up and run simulations.
It includes several useful subdirectories:

  • TESTS/ – Validation and demonstration cases for learning or verifying DINO installations.
  • RUNS/ - Examplary input files for various applications.
  • MECHANISMS/ – Chemical kinetic mechanisms for various fuels.
  • FPI_TABLES/ – Precomputed Flamelet/Progress Variable (FPI) chemistry tables, provided as a faster alternative to detailed kinetics.
  • IBGEOM_INPUT/ – Input files and utilities for the Direct Boundary Immersed Boundary Method (DB-IBM), including geometry generation tools.

You can also create your own simulation setups within WORK/, although it is recommended to keep your custom cases outside $DINO_HOME for easier maintenance and version control.


CMAKE/

Contains all custom CMake modules used by DINO. These include:

  • Definitions for specific HOSTTYPE configurations (compiler and library settings),
  • Helper modules for locating third-party libraries such as FFTW, HDF5, or Cantera.

Advanced users can extend or modify these modules to adapt DINO to new platforms or compilers.


build/

This directory is created manually by the user during compilation. It is where CMake generates Makefiles and where the code is compiled. Keeping this directory separate from the source ensures a clean and reproducible build environment.


bin/

After installation, this directory contains the DINO executables and associated command-line tools. Add this path to your shell’s PATH variable to easily invoke DINO from any location.


lib/

Stores internal and third-party libraries built as part of the DINO installation, such as:

  • 2DECOMP&FFT (domain decomposition and FFT),
  • Eglib (embedded general-purpose numerical library),
  • DCS (DINO core support library).

Summary

The directory structure of DINO is designed for clarity and modularity:

$DINO_HOME/
├── CMakeLists.txt # Main build configuration
├── DOCUMENTATION/ # User and developer documentation
├── SOURCES/ # Fortran source code organized by modules
├── TOOLS/ # Pre/post-processing scripts and utilities
├── WORK/ # Reference cases, chemistry, FPI tables, geometry input
├── CMAKE/ # Custom CMake modules and HOSTTYPE definitions
├── build/ # Build directory (created by user)
├── bin/ # Installed executables
└── lib/ # Compiled libraries (2DECOMP, Eglib, DCS)

You can understand how the modules are structured and what they offer in the modules section of this documentation.