Modules Overview¶
The DINO code is organized into modular Fortran components, each dedicated to a specific physical or numerical aspect of the solver.
All source files are located in:
This modular design allows users to easily identify where key computations are implemented — from initialization and mesh generation to chemistry, turbulence, and data output.
1. Main Program and Initialization¶
MAIN/¶
Contains the main entry point of DINO: the dino.f90 subroutine.
All program execution starts and ends here.
Users can trace the complete computational sequence — from initialization to time advancement and data output — beginning at this file.
INIT/¶
Handles initialization of the simulation.
This includes reading input files, setting initial fields, and defining restart conditions.
The subdirectory INIT_PROFILES/ provides various predefined initialization routines (e.g., for planar jets, shear layers, or premixed flames).
MODULES/¶
Defines global variables, constants, and Fortran modules that are shared across DINO.
It also contains the namelist sections used in the main input file (DINO_IN), allowing the user to control runtime parameters.
2. Numerical and Physical Model Components¶
MESH/¶
Responsible for mesh generation and management. Includes all variables and routines for grid creation, cell indexing, and metric definitions. DINO primarily operates on structured Cartesian meshes, which can be refined and adapted for specific cases.
FLOW_FIELD/¶
Implements subroutines for computing flow-field quantities such as vorticity, Q-criterion, and derived diagnostic fields used for analysis and visualization.
THERMODYNAMICS/¶
Computes all thermodynamic properties, including enthalpy, heat release, temperature, and density (for low-Mach solvers). This module ensures thermodynamic consistency across detailed-chemistry and tabulated approaches.
TRANSPORT/¶
Contains the routines for computing transport properties such as viscosity, diffusivity, and thermal conductivity. These properties are used in molecular transport and diffusion flux computations.
CHEMISTRY/¶
Handles all computations related to chemical kinetics, including species mole fractions, reaction rates, and source terms. The chemistry module interacts closely with Cantera or EGLib for property evaluation and reaction mechanism data.
FPI/¶
Implements tabulated chemistry via the Flamelet/Progress Variable (FPI) approach. This allows DINO to compute thermochemical quantities based on pre-tabulated flamelet libraries instead of direct chemistry integration, significantly reducing computational cost.
TURBULENCE/¶
Provides routines for generating and handling pseudo-turbulent velocity fields, used in specific studies such as inflow forcing or turbulence reconstruction.
RHS/¶
Computes the right-hand sides (RHS) of the governing equations for mass, momentum, energy, and species transport.
PREPARE_RHS/¶
Acts as an interface between the physical models and the time integration routines. It gathers all contributions (advection, diffusion, chemistry, source terms) to form the final RHS used during time advancement.
DERIV/¶
Contains numerical differentiation routines for computing first and second derivatives in all three spatial directions (x, y, z). These derivatives are used in gradient, divergence, and Laplacian operators throughout the solver.
3. Time Integration and Pressure Solver¶
RUNGE_KUTTA/¶
Implements several high-order time integration schemes:
- 4th-order explicit Runge–Kutta for non-stiff systems,
- 3rd-order semi-implicit Runge–Kutta, and
- RADAU5 semi-implicit method for stiff reacting flows.
Users can select the scheme depending on the problem stiffness and desired accuracy.
POISSON/¶
Solves the pressure Poisson equation that enforces mass conservation.
This module uses FFT-based methods in combination with the 2DECOMP&FFT library for parallel efficiency, even under non-periodic boundary conditions.
4. Parallelization and Decomposition¶
2DECOMP/¶
Integrates the 2DECOMP&FFT library, which handles domain decomposition and distributed FFT operations. It ensures efficient communication and scalability on parallel architectures.
PARALLEL/¶
Implements MPI-based communication routines and synchronization mechanisms. This module coordinates data exchange between subdomains and manages global reductions (e.g., for norms and time-step control).
5. Boundary Conditions and Extended Physics¶
BOUNDARY/¶
Implements a wide range of boundary condition types (inlet, outlet, wall, symmetry, periodic, etc.). Boundary treatment is consistent with the numerical schemes and compatible with the low-Mach and incompressible formulations.
IBM/¶
Contains the implementation of the Immersed Boundary Method (IBM), allowing the simulation of complex geometries on fixed Cartesian meshes. It includes both the Direct Boundary (DB-IBM) approach and force-based IBM formulations for moving or deformable boundaries.
TWOPHASE/¶
Handles the modeling of two-phase flows, including solid particles, evaporating or reacting droplets, and other dispersed phases. Both resolved (large particles) and point-particle (sub-grid) representations are supported.
6. Auxiliary Libraries and Utilities¶
UTILS/¶
Includes general-purpose utility subroutines used throughout DINO, such as:
- Initialization and termination messages,
- Random number generation,
- Debugging and error handling,
- Time measurement and performance monitoring.
INCLUDE/¶
Contains .inc files that define global variables and compile-time constants shared between different modules.
EGLIB/¶
Wraps the EGLib library for transport property computation (diffusion coefficients, thermal conductivities, viscosities). Used as an alternative or complement to Cantera.
ERRORS/¶
Implements error and convergence analysis tools. Includes routines to assess DINO’s spatial and temporal order of accuracy, useful for validation and verification studies.
SAVE/¶
Manages data input/output, including:
- Writing simulation results in various formats (HDF5, VTK, ASCII, binary),
- Handling restart and checkpoint files,
- Managing parallel I/O operations.
flameletconfig/¶
Contains routines for reading and interpolating flamelet lookup tables provided by the user. These are used in FPI-based tabulated chemistry simulations.
Summary¶
The modular architecture of DINO separates distinct physical, numerical, and I/O components into well-defined directories. This makes it easier for new users to locate specific functionalities, and for developers to extend or modify individual features — whether adding a new chemistry model, turbulence closure, or immersed boundary formulation.
Together, these modules form the computational backbone of DINO, enabling high-fidelity DNS of turbulent reacting and multiphase flows across a wide range of scientific applications.