Grids and tiles

Grids

The following inputs are defined using the prefix amr:

Description

Type

Default

max_grid_size_x

Maximum number of cells in each grid in X. Can be specified per-level.

Ints

32

max_grid_size_y

Maximum number of cells in each grid in Y. Can be specified per-level.

Ints

32

max_grid_size_z

Maximum number of cells in each grid in Z. Can be specified per-level.

Ints

32

blocking_factor_x

Each grid in X must be divisible by blocking_factor_x. Can be specified per-level.

Ints

8

blocking_factor_y

Each grid in Y must be divisible by blocking_factor_y. Can be specified per-level.

Ints

8

blocking_factor_z

Each grid in Z must be divisible by blocking_factor_z.Can be specified per-level.

Ints

8

refine_grid_layout_x

If set, AMReX will attempt to chop new grids into smaller chunks along the x axis, ensuring at least one grid per MPI process, provided this does not violate the blocking factor constraint.

Bool

true

refine_grid_layout_y

If set, AMReX will attempt to chop new grids into smaller chunks along the y axis, ensuring at least one grid per MPI process, provided this does not violate the blocking factor constraint.

Bool

true

refine_grid_layout_z

If set AMReX will attempt to chop new grids into smaller chunks along the z axis, ensuring at least one grid per MPI process, provided this does not violate the blocking factor constraint.

Bool

true

Note, the default for max_grid_size is 64 for GPU runs.

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 prefix fabarray:

Description

Type

Default

mfiter_tile_size

Maximum number of cells in each direction for (logical) tiles.

Ints<3>

1024000 8 8

The following inputs are defined using the prefix particles:

Description

Type

Default

tile_size

Maximum number of cells in each direction for (logical) tiles in the ParticleBoxArray if load_balance is DualGrid

Ints<3>

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.

Mesh refinement

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

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

grid_eff

Threshold value to ensure grids do not contain too large a fraction of untagged cells.

Real

0.7

n_error_buf

Controls how many extra cells will be tagged around every tagged cell. For example, if set to 2 then tagging cell (i,j,k) will tag cells from (i-2,j-2,k-2( to (i+2,j+2,k+2). Used to ensure coarse-fine boundaries are not too close to tagged cells. Can be specified per-level.

Ints

1

n_error_buf_x

Controls how many extra cells will be tagged around every tagged cell along the x axis. For example, if set to 2 then tagging cell (i,j,k) will tag cells from i-2 to i+2. Used to ensure coarse-fine boundaries are not too close to tagged cells. Can be specified per-level.

Ints

1

n_error_buf_y

Controls how many extra cells will be tagged around every tagged cell along the y axis. For example, if set to 2 then tagging cell (i,j,k) will tag cells from j-2 to j+2. Used to ensure coarse-fine boundaries are not too close to tagged cells. Can be specified per-level.

Ints

1

n_error_buf_z

Controls how many extra cells will be tagged around every tagged cell along the z axis. For example, if set to 2 then tagging cell (i,j,k) will tag cells from k-2 to k+2. Used to ensure coarse-fine boundaries are not too close to tagged cells. Can be specified per-level.

Ints

1

ref_ratio_vect

If specified, sets thee refinement ratios between AMR levels. It’s an error if the size of the integer array, if present, is less than max_level*3. The first three numbers specify the refinement ratios in three dimensions between levels 0 and 1, the next three numbers specify the ratios for levels 1 and 2, etc.

Ints

ref_ratio

If ref_ratio_vect is not specified, this parameter will be used to set the refinement ratios between AMR levels. If there are more AMR levels than the size of the integer parameter array, the last integer will be used as the refinement ratio for the unspecified levels. For example, if max_level is 4 and the provided amr.ref_ratio is 2 4, the refinement ratios are 2, 4, 4 and 4, for levels 0/1, 1/2, 2/3, and 3/4, respectively.

Ints

2

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.

The following input is defined using the prefix mfix. It only applies to AMR level 0.

Description

Type

Default

grid_pruning

Remove fully covered grids from the box array to avoid allocating memory to them or looping over them.

Bool

false

The following input is defined using the prefix mfix. This inputs controls the automatic mesh refinement algorithm and is only applicable when amr.max_level > 0.

Description

Type

Default

regrid_int

How often to regrid (in number of steps at level 0). If regrid_int <= 0 then no regridding will occur. Only applies when amr.max_level > 0.

Int

0

Tagging for refinement

The following inputs are defined using the prefix mfix.tag. They control how cells are tagged for the mesh refinement algorithm and are only applicable when amr.max_level > 0.

Cells intersected by the embedded boundary are always tagged for refinement, regardless of these settings.

Description

Type

Default

rho

Tag cells for refinement when the fluid density is greater than the specified value.

  • To tag cells when density is less than the specified value, set mfix.tag.rho.less_than = true.

  • Values may be specified per level. If fewer than amr.max_level values are provided, the last value is used for all higher levels.

Reals

None

rho.less_than

Tag cells for refinement when the fluid density is less than the specified value.

Bool

false

grad_rho

Tag cells for refinement when the difference in fluid density between two adjacent cells is greater than the specified value.

  • To tag cells when the difference is less than the specified value, set mfix.tag.grad_rho.less_than = true.

  • Values may be specified per level. If fewer than amr.max_level values are provided, the last value is used for all higher levels.

Reals

None

grad_rho.less_than

Tag cells for refinement when the difference in fluid density between two adjacent cells is less than the specified value.

Bool

false

vel

Tag cells for refinement when the magnitude of fluid velocity is greater than the specified value.

  • To tag cells when the difference is less than the specified value, set mfix.tag.vel.less_than = true.

  • Values may be specified per level. If fewer than amr.max_level values are provided, the last value is used for all higher levels.

Reals

None

vel.less_than

Tag cells for refinement when fluid velocity magnitude is less than the specified value.

Bool

false

grad_vel

Tag cells for refinement when the difference in any fluid velocity component between two adjacent cells is greater than the specified value.

  • To tag cells when the difference is less than the specified value, set mfix.tag.grad_vel.less_than = true.

  • Values may be specified per level. If fewer than amr.max_level values are provided, the last value is used for all higher levels.

Reals

None

grad_vel.less_than

Tag cells for refinement when the difference in any fluid velocity component between two adjacent cells is less than the specified value.

Bool

false

regions

A list of predefined regions used to identify sections of the domain for mesh refinement.

Strings

None