Skip to main content

Overview

The CHAMPS+ solver is driven by a single human-readable input file that specifies everything about a simulation case: physical parameters, geometry, mesh generation, numerical schemes, boundary conditions, time integration, and output controls.
This file is parsed at runtime and provides a reproducible record of every setting that influences the solution.

Format

The input file uses the Scientific Computing Input Data Format, which allows for command-line options, user functions, and C-style comments.

High-level Structure

The input file is divided into a series of top-level sections, each enclosed in braces and written in a simple key–value / nested-block syntax.
A typical input file might include:

Dictionary   { ... }
Geometries { ... }
Domain { ... }
Restart { ... }
Integration { ... }
IO { ... }

Each of these major blocks has its own purpose:

SectionPurpose
DictionaryDefines named constants and expressions for reuse anywhere in the file. Think of this as a lightweight variables-and-formulas block.
GeometriesImports and manipulates external CAD or surface meshes and allows you to group or replicate components via transforms and instances.
DomainSpecifies the computational domain, mesh generation, physics models, boundary conditions, and numerical algorithms. This is the heart of the solver setup.
RestartControls whether to read or write checkpoints for continuing a simulation.
IntegrationSets time-integration parameters such as CFL target, timestep strategy, and maximum step count.
IODefines output directories, slice/profile sampling, and how/when field data and derived quantities are written.

Relationship of Domain and Subdomains

The Domain block is the primary description of the CFD domain.
It contains:

  • Grid definition: block counts, extents, refinement strategies, adaptive mesh refinement, etc.
  • Physics and models: properties, turbulence or wall models.
  • Boundary conditions: farfield, wall, symmetry, or immersed-boundary options.
  • Initial conditions: initial fields for pressure, temperature, and velocity.
  • Numerical controls: flux schemes, stabilization parameters, and solver options.

Inside Domain, you may optionally define a Subdomains block:

Domain
{
...
Subdomains
{
blade1dom
{
Grid
{
num_blocks = [ ... ]
bounds = [ ... ]
Transforms { ... }
}
// other optional overrides...
}
// more subdomains...
}
}

A subdomain is a localized region of the main domain with its own grid and optional transforms.
This is especially useful for:

  • Refining the mesh or applying special refinement criteria around a specific body (e.g., around a blade tip).
  • Adding local moving frames or embedded overset grids.
  • Simulating a region of the domain using a different physical model than the primary domain.
Under construction

The subdomain / multi-domain capability in CHAMPS+ is still under development.

Inheritance and Overrides

Every subdomain inherits settings from its parent Domain block unless you explicitly override them.
This means:

  • Physics models (Properties, WallModel), numerical schemes (Numerical), and boundary-condition defaults defined at the domain level automatically apply to all subdomains.
  • A subdomain can override any subset of these if needed (for example, specifying a finer AMR threshold or different output frequency for a local region).

Different Physical Models

In addition to overriding numerical or grid-related parameters, a subdomain can solve a completely different physical model than its parent domain.
This capability allows for multi-physics simulations—for example:

  • Embedding a liquid droplet subdomain inside an external airflow domain, where the droplet uses a compressible liquid model while the parent uses a compressible-gas model.
  • Running a moving-frame subdomain around a rotating blade while the parent domain remains in an inertial frame.

Putting It Together

A typical input file therefore has a layered structure:

  1. Dictionary defines reusable values and expressions.
  2. Geometries describes the physical components and how they’re placed.
  3. Domain specifies the global simulation space and physics.
  4. Optional Subdomains inside Domain inherit and specialize those settings, and can even run different physics.
  5. Global runtime control blocks (Restart, Integration, IO).

Because all quantities are explicit and text-based, the input file doubles as a reproducible record of the simulation setup and can be version-controlled alongside code and meshes.