网格创建
要运行 MFIX-Exa,您必须在输入文件中指定 n_cell
—— 这是在第0级每个坐标方向上跨越域的单元格数量。
用户通常也会指定 max_grid_size
。默认的负载平衡算法会在每个方向上划分域,使得每个网格在该方向上的长度不超过 max_grid_size
。
如果用户未指定,max_grid_size
在二维中默认值为128,三维中为32(在每个坐标方向上)。
另一个常用的输入是 blocking_factor
。 blocking_factor
的值对网格创建施加了约束,
即每个网格必须能被 blocking_factor
整除。
请注意,域(在每一级)和 max_grid_size
都必须能被 blocking_factor
整除。
如果用户未指定,blocking_factor
在每个坐标方向上的默认值为8。
blocking_factor
的典型目的是确保网格在多重网格性能方面具有足够的粗化能力。
还有一个默认行为需要注意。布尔变量 refine_grid_layout
默认为 true,但可以在运行时被覆盖。
如果 refine_grid_layout
为 true 并且创建的网格数量少于处理器数量(Ngrids < Nprocs),
那么网格将被进一步细分,直到 Ngrids >= Nprocs。
注意:如果细分网格以实现 Ngrids >= Nprocs 会违反 blocking_factor
标准,
则不会创建额外的网格,网格数量将保持少于处理器数量。
请注意,n_cell
必须作为三个独立的整数给出,每个坐标方向一个。
然而,max_grid_size
和 blocking_factor
可以指定为单个值,适用于所有坐标方向,
也可以为每个方向指定不同的值。
如果
max_grid_size
(或blocking_factor
)被指定为多个整数, 则第一个整数适用于第0级,第二个适用于第1级,等等。 如果您没有指定与级数相同数量的整数,最后一个值将用于剩余的级别。如果希望为每个坐标方向指定不同的
max_grid_size
(或blocking_factor
)值, 则必须使用max_grid_size_x
、max_grid_size_y
和max_grid_size_z
(或blocking_factor_x
、blocking_factor_y
和blocking_factor_z
)。 如果您没有指定与级数相同数量的整数,最后一个值将用于剩余的级别。请注意,
max_grid_size
只是一个上限;在n_cell = 48
和max_grid_size = 32
时, 我们通常会有一个长度为32的网格和一个长度为16的网格。
如果不使用 KD-tree 方法,第0级的网格创建过程如下:
域最初由一个大小为
n_cell
的单一网格定义。如果
n_cell
大于max_grid_size
,则网格将被细分,直到每个网格在每一侧的单元格数不超过max_grid_size
。 在这个过程中,满足blocking_factor
标准(即每个网格每一侧的长度在该方向上能被blocking_factor
整除)。接下来,如果
refine_grid_layout = true
且该级别上的处理器数量多于网格数量, 则该级别上的网格将被进一步划分,直到 Ngrids >= Nprocs (除非这样做会违反blocking_factor
标准)。