Mesh and gridding

Mesh, grids and tiles

Mesh

There are some settings we can specify for the mesh and the automatic mesh refinement algorithm. These settings must be preceded by “amr.” in the input file.

Description

Type

Default

max_level

Maximum level of refinement allowed (0 when single-level)

Int

0

grid_eff

Threshold value to ensure grids do not contain too large a fraction of un-tagged cells. Applicable only when mesh refinement is enabled (“max_level” > 0).

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. Applicable only when mesh refinement is enabled (“max_level” > 0).

Int

1

n_cell

Number of cells at level 0 in each coordinate direction

Ints

0 0 0

Grids

The following inputs must be preceded by “amr.” and determine how we create the grids.

Description

Type

Default

max_grid_size_x

Maximum number of cells at level 0 in each grid in x-direction

Int

32

max_grid_size_y

Maximum number of cells at level 0 in each grid in y-direction

Int

32

max_grid_size_z

Maximum number of cells at level 0 in each grid in z-direction

Int

32

blocking_factor_x

Each grid must be divisible by blocking_factor_x in x-direction

Int

8

blocking_factor_y

Each grid must be divisible by blocking_factor_y in y-direction

Int

8

blocking_factor_z

Each grid must be divisible by blocking_factor_z in z-direction

Int

8

The following inputs must be preceded by “particles.”

Description

Type

Default

max_grid_size_x

Maximum number of cells at level 0 in each grid in x-direction for grids in the ParticleBoxArray if dual_grid is true

Int

32

max_grid_size_y

Maximum number of cells at level 0 in each grid in y-direction for grids in the ParticleBoxArray if dual_grid is true

Int

32

max_grid_size_z

Maximum number of cells at level 0 in each grid in z-direction for grids in the ParticleBoxArray if dual_grid is true.

Int

32

Tiles

The following inputs must be preceded by “fabarray_mfiter.” and determine how we create the logical tiles:

Description

Type

Default

tile_size

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

(3D CPU-only)

IntVect

1024000 1024000,8,8

The following inputs must be preceded by “particles.”

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

Load balancing

Note that when running a granular simulation, i.e., no fluid phase, mfix.dual_grid must be 0. Hence, the particles.max_grid_size (in each direction) have no meaning. Therefore the fluid grid and tile sizes should be set for particle load balancing. It may also be necessary to set the blocking factors to 1.

The following inputs must be preceded by “mfix.” and determine how we load balance:

Description

Type

Default

dual_grid

If true then use the “dual_grid” approach for load balancing

Bool

False

regrid_int

How often to regrid (in number of steps at level 0) if regrid_int = -1 then no regridding will occur

Int

-1

load_balance_fluid

Only relevant if (dual_grid); if so do we also regrid mesh data

Int

0

load_balance_type

What strategy to use for load balancing Options are “KnapSack”, “SFC”, or “Greedy”

String

KnapSack

knapsack_weight_type

What weighting function to use if using Knapsack load balancing Options are “RunTimeCosts” or “NumParticles””

String

RunTimeCosts

knapsack_nmax

Maximum number of grids per MPI process if using knapsack algorithm

Int

128

greedy_dir

The direction in which the greedy algorithm cuts overloaded boxes

Int

0

greedy_min_grid_size

The minimum particle grid size in the greedy load balance algorithm

Int

2

greedy_3d

Partition particle grids in 3D with the greedy algorithhm

Bool

False

overload_tolerance*

The ratio between the maximum workload and the average workload in the greedy algorithm

Real

1.2

underload_tolerance*

The ratio between the minimum workload and the average workload in the greedy algorithm

Real

0.8

grid_pruning

Remove all covered grids from the base mesh; this may result in disjoined grids

Bool

False

* The greedy partitioning algorithm uses the tolerances to set the expected workload range for each rank but doesn’t strictly enforce them. The algorithm creates a partition as balance as possible even if the partition doesn’t meet the tolerances.

To allow a user to verify the breakdown of fluid grids created before running a full simulation, an input option, mfix.only_print_grid_report is supported. By default, it is False. When set to True, the run uses minimal memory to print the grid coverage report and exits immediately after that.