跳转至

区域划分

在使用多个进程对大规模网格进行并行分析时,需要先将单一区域的网格划分为多个子域,并预先生成各进程负责的区域以及域间通信所需的信息。这个预处理过程称为区域划分。

在 FrontISTR 的并行计算中,hecmw_part1 将单一区域网格划分为多个子域并生成分布式网格数据。生成的分布式网格数据由并行 fistr1 读取,并与域间通信所需的信息一起供并行求解器使用。

本页说明区域划分中可选择的划分类型、划分方法、重叠深度以及接触点的处理。有关 hecmw_part1 的执行步骤、控制文件的具体格式和错误消息,请参阅相关项目。

功能概览

区域划分是将单一区域网格分成多个子域的过程。FrontISTR 通过组合划分类型、划分方法、区域数和重叠深度来生成分布式网格数据。

选择项 主要选项 作用
划分类型 基于节点的划分、基于单元的划分 决定以节点还是单元作为归属判定单位。
划分方法 RCB、METIS(pMETIS / kMETIS) 决定区域边界的生成方式。
区域数 任意正整数(RCB 中为 \(2^n\) 决定分布式网格数据中的子域数量。通常与 MPI 进程数一致。
重叠深度 1 以上的整数 决定相邻区域重复保留的范围。用于基于节点的划分。
通信表 导入/导出信息、共享信息 定义相邻子域之间所需的数据交换。在区域划分时自动生成。

通信表包含在分布式网格数据中,因此在通常的分析中用户无需直接编辑。并行 fistr1 读取该分布式网格数据,并使用 MUMPS 等并行直接法或迭代法求解线性方程组。

区域划分的选择方法

对于通常的结构分析和热传导分析,首先应考虑基于节点的划分。基于节点的划分便于处理并行有限元分析中所需的节点值通信,也可以指定重叠深度。基于单元的划分适用于耦合分析等希望以单元为中心处理划分后信息的用途。

划分方法应根据几何形状和区域数选择。对于简单形状且区域数可设为 \(2^n\) 的情况,RCB 是简洁且稳定的选择。对于复杂形状或希望划分为任意区域数的情况,可考虑基于图划分的 METIS。

问题特征 推荐选择
结构分析、热传导分析的标准并行分析 基于节点的划分
耦合分析等使用以单元为中心的分布式信息的用途 基于单元的划分
接近长方体的简单形状,区域数为 \(2^n\) RCB
复杂形状或任意区域数 METIS
使用 SAINV 预处理器的接触问题或 MPC 约束问题 采用基于节点的划分,并将重叠深度设为2以上

区域数通常与 MPI 进程数一致。有关并行执行步骤和进程数的指定,请参阅并行处理分析。有关 SAINV 预处理器与重叠深度的关系,也请参阅求解器与预处理

划分类型

划分类型用于决定网格中的哪一类实体被赋予唯一的所属子域。基于节点的划分决定节点归属,基于单元的划分决定单元归属。两种情况下,与相邻子域计算所需的信息都作为重叠数据保留。

基于节点的划分

在基于节点的划分中,为每个节点确定唯一的所属子域。在相邻子域中,单元以重叠方式保留。输入中通过 !PARTITION, TYPE=NODE-BASED 指定。

基于节点划分的概念

图10.1 基于节点划分的概念

每个子域保留内部节点、包含这些内部节点的单元,以及构成这些单元的节点。

基于节点划分时各子域保留的节点和单元

图10.2 基于节点划分时各子域保留的节点和单元

基于节点划分的通信表包含以下信息。

  • 导入节点:子域内使用的节点中,归属于其他子域的节点。
  • 导出节点:作为其他子域导入节点的内部节点。
  • 共享单元:与其他子域共享的单元。

基于节点划分的导入节点

图10.3 基于节点划分的导入节点

基于节点划分的导出节点

图10.4 基于节点划分的导出节点

基于节点划分的共享单元

图10.5 基于节点划分的共享单元

基于单元的划分

在基于单元的划分中,为每个单元确定唯一的所属子域。在相邻子域中,节点以重叠方式保留。输入中通过 !PARTITION, TYPE=ELEMENT-BASED 指定。

基于单元划分的概念

图10.6 基于单元划分的概念

每个子域保留内部单元、构成内部单元的节点,以及包含这些节点的单元。

基于单元划分时各子域保留的节点和单元

图10.7 基于单元划分时各子域保留的节点和单元

基于单元划分的通信表包含以下信息。

  • 导入单元:子域内使用的单元中,归属于其他子域的单元。
  • 导出单元:作为其他子域导入单元的内部单元。
  • 共享节点:与其他子域共享的节点。

基于单元划分的导入单元

图10.8 基于单元划分的导入单元

基于单元划分的导出单元

图10.9 基于单元划分的导出单元

基于单元划分的共享节点

图10.10 基于单元划分的共享节点

无论采用哪种划分类型,通信表都由 hecmw_part1 自动生成并写入分布式网格数据。因此,通常的分析中用户无需直接创建导入/导出信息。

划分方法

划分方法表示如何确定子域边界。FrontISTR 可使用基于坐标值的 RCB 和基于图划分的 METIS。

划分方法 特点 主要限制和注意事项
RCB 根据坐标值大小递归二分。对于简单形状可高速划分。 区域数限制为 \(2^n\)。需要指定划分轴。
pMETIS 基于图划分,并考虑区域间连接关系进行划分。 可在启用 METIS 的构建中使用。
kMETIS 基于多区域图划分,即使对于复杂形状也较容易生成区域边界。 可在启用 METIS 的构建中使用。

RCB 是 Recursive Coordinate Bisection 的缩写,重复执行沿坐标轴将网格一分为二的操作。适用于区域数可设为 \(2^n\) 的情况,对于长方体状的简单几何形状易于使用。

METIS 将网格连接关系视为图,并通过图划分生成子域。几何形状复杂或不希望将区域数限制为 \(2^n\) 时可考虑使用 METIS。使用 METIS 时,构建时必须启用 METIS 库。有关依赖库的处理,请参阅必需和可选依赖库

重叠深度

重叠深度表示相邻子域重复保留范围的层数。在基于节点的划分中,可通过 !PARTITIONDEPTH 参数指定1以上的整数。省略时的重叠深度为1。

对于通常的并行分析,DEPTH=1 即可。另一方面,当在接触问题或 MPC 约束问题中使用 SAINV 等 SAI 系预处理器时,将重叠深度增加到2以上有时可改善预处理质量。

此外,当在 MPI 并行中对四面体一次单元341使用选择性边/节点平滑公式(FORM341=SELECTIVE_ESNS)时,重叠深度也必须设为2以上。边基/节点基平滑会对目标单元相邻单元的量进行平均,因此在子域内组装刚度时需要“相邻单元的相邻单元”信息,默认的 DEPTH=1 会导致区域边界附近的平滑不足。有关单元公式的详细说明,请参阅单元库

增加重叠深度会增加相邻子域保留的节点和单元数量,因此内存使用量和通信量也会增加。应权衡收敛性的改善与计算成本的增加进行设置。有关预处理器的选择,请参阅求解器与预处理

接触点的处理

划分包含接触对的网格时,可通过 !PARTITIONCONTACT 参数指定接触点的区域配置策略。接触点的配置会影响包含接触搜索和接触约束的并行分析的稳定性与通信量。

定位
DEFAULT 使用标准配置策略。
SIMPLE 不对接触点赋予特殊权重,采用接近普通划分的配置。
AGGREGATE 朝着将与接触对相关的节点组聚合在一起的方向进行划分。
DISTRIBUTE 进行划分,使接触主侧节点不容易在子域之间产生偏聚。

对于不包含接触的网格,无需特别关注 CONTACT 参数。若包含接触的并行分析在收敛性或负载均衡方面存在问题,应重新检查接触点的配置策略。有关输入格式的详细说明,请参阅 !PARTITION

输出区域划分图像

指定 !PARTITIONUCD 参数后,可输出用于确认划分结果的 UCD 文件。UCD 文件可用于在 MicroAVS 等可视化工具中查看区域编号和划分边界。

修改区域数、划分方法或重叠深度后,重要的是确认划分后的区域是否存在偏斜或不自然的细分。UCD 输出是在运行并行分析前确认划分合理性的辅助功能。

相关项目

  • 并行处理分析hecmw_part1 的执行步骤、输入文件以及分布式网格数据输出的确认。
  • 求解器与预处理 — 并行求解器、预处理器,以及 SAINV 与重叠深度的关系。
  • 错误消息列表hecmw_part1fistr1 的典型错误消息。
  • 并行有限元法 — 区域划分方法和并行有限元法的理论背景。
  • !PARTITION — 区域划分实用程序控制数据的输入格式。