网格创建

要运行 MFIX-Exa,您必须在输入文件中指定 n_cell —— 这是在第0级每个坐标方向上跨越域的单元格数量。

用户通常也会指定 max_grid_size 。默认的负载平衡算法会在每个方向上划分域,使得每个网格在该方向上的长度不超过 max_grid_size 。 如果用户未指定,max_grid_size 在二维中默认值为128,三维中为32(在每个坐标方向上)。

另一个常用的输入是 blocking_factorblocking_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_sizeblocking_factor 可以指定为单个值,适用于所有坐标方向, 也可以为每个方向指定不同的值。

  • 如果 max_grid_size (或 blocking_factor )被指定为多个整数, 则第一个整数适用于第0级,第二个适用于第1级,等等。 如果您没有指定与级数相同数量的整数,最后一个值将用于剩余的级别。

  • 如果希望为每个坐标方向指定不同的 max_grid_size (或 blocking_factor )值, 则必须使用 max_grid_size_xmax_grid_size_ymax_grid_size_z (或 blocking_factor_xblocking_factor_yblocking_factor_z )。 如果您没有指定与级数相同数量的整数,最后一个值将用于剩余的级别。

  • 请注意,max_grid_size 只是一个上限;在 n_cell = 48max_grid_size = 32 时, 我们通常会有一个长度为32的网格和一个长度为16的网格。

如果不使用 KD-tree 方法,第0级的网格创建过程如下:

  1. 域最初由一个大小为 n_cell 的单一网格定义。

  2. 如果 n_cell 大于 max_grid_size ,则网格将被细分,直到每个网格在每一侧的单元格数不超过 max_grid_size 。 在这个过程中,满足 blocking_factor 标准(即每个网格每一侧的长度在该方向上能被 blocking_factor 整除)。

  3. 接下来,如果 refine_grid_layout = true 且该级别上的处理器数量多于网格数量, 则该级别上的网格将被进一步划分,直到 Ngrids >= Nprocs (除非这样做会违反 blocking_factor 标准)。