# Mesh, grids, and tiles

## Mesh

Level-0 mesh

The following inputs are defined using the `amr` prefix.

| Description | Type | Default
--- | --- | --- | ---
max_level | Maximum level of refinement. The default value, 0, means that there is one cell size covering the entire domain (i.e., single-level). | int | 0
n_cell | Number of cells at level 0 in each coordinate direction | ints | 0 0 0

The level 0 mesh spacing is computed for each direction by dividing the domain length by the number of cells. The mesh spacing is required to be the same in all directions:

\[\frac{\text{prob_hi[0] - prob_lo[0]}}{\text{n_cell[0]}} = \frac{\text{prob_hi[1] - prob_lo[1]}}{\text{n_cell[1]}} = \frac{\text{prob_hi[2] - prob_lo[2]}}{\text{n_cell[2]}}\]

The inputs for defining the mesh for a single-level simulation are demonstrated in the following example and illustrated in Fig. 4. In this example, the domain is a \(4 \times 1 \times 1\) cuboid, and there are \(32 \times 8 \times 8\) cells in the X, Y, and Z directions, respectively. The result is a uniform mesh spacing of \(0.125\) m in all three directions.

Listing 4 Snippet of intpus for mesh example. This is not a complete input file.

    # Define periodicity and domain extents
    # -------------------------------------------------------------
    geometry.coord_sys   =  0           # Cartesian coordinates
    geometry.is_periodic =  0   0   0   # periodicity for each direction
    geometry.prob_lo     =  0.  0.  0   # lo corner of physical domain.
    geometry.prob_hi     =  4.  1.  1.  # hi corner of physical domain

    # Define the maximum level of refinement and number of cells
    # -------------------------------------------------------------
    arm.max_level = 0
    arm.n_cell = 32  8  8

Fig. 4 Example of a single-level mesh.

Warning

MFIX-Exa simulations with a non-uniform mesh will not run.

Mesh refinement

The following inputs are defined using the `amr` prefix. These inputs control the automatic mesh refinement algorithm and are only applicable when `amr.max_level > 0`.

| Description | Type | Default
--- | --- | --- | ---
grid_eff | Threshold value to ensure grids do not contain too large a fraction of un-tagged cells. | Real | 0.7
n_error_buf | Controls the number of tagged cells before grids are defined. Used to ensure coarse/fine boundaries are not too close to tagged cells. | int | 1

Caution

Mesh refinement limitations:

- MFIX-Exa simulations with particles currently do not support mesh refinement.

See the AMReX documentation for details on the adaptive mesh refinement algorithms.

## Grids

The following inputs are defined using the `amr` prefix.

| Description | Type | Default
--- | --- | --- | ---
max_grid_size_x | Maximum number of cells at level 0 in each grid in X | int | 32
max_grid_size_y | Maximum number of cells at level 0 in each grid in Y | int | 32
max_grid_size_z | Maximum number of cells at level 0 in each grid in Z | int | 32
blocking_factor_x | Each grid in X must be divisible by `blocking_factor_x` | int | 8
blocking_factor_y | Each grid in Y must be divisible by `blocking_factor_y` | int | 8
blocking_factor_z | Each grid in Z must be divisible by `blocking_factor_z` | int | 8

The domain is decomposed into grids by dividing the number of cells by the max grid size for each direction (e.g., `n_cells[0]/max_grid_size_x`). The blocking factor ensures that the grids will be sufficiently coarsenable for good multigrid performance; therefore, the `max_grid_size` must be divisible by the corresponding `blocking_factor`.

Note

The AMReX documentation contains a significant amount of information on grid creation and load balancing. Users are strongly encouraged to read the relevant sections.

## Tiles

The following inputs are defined using the `fabarray` prefix.

| Description | Type | Default
--- | --- | --- | ---
mfiter_tile_size | Maximum number of cells in each direction for (logical) tiles | IntVect | 1024000,8,8

The following inputs are defined using the `particles` prefix.

| Description | Type | Default
--- | --- | --- | ---
tile_size | Maximum number of cells in each direction for (logical) tiles in the ParticleBoxArray if dual_grid is true. | IntVect | 1024000,8,8

When running on shared memory machines using an OpenMP enabled executable, grids are subdivided into tiles and iterated over to improve data locality by cache blocking.

Note

MFIX-Exa disables tiling when using GPU accelerators.