redistributePar 与 reconstructPar:按发行版选择并行数据工具
适用范围:命令示例以 OpenCFD 文档中的
redistributePar为主,并对照 OpenFOAM Foundation 13 源码。两个发行线的选项并不完全相同,执行前必须以本机-help-full为准。
核心区别
| 需求 | 首选工具 | 说明 |
|---|---|---|
将 processor* 中的场重构到未分解目录 |
reconstructPar |
传统的结果重构工具,常用于后处理和归档 |
按新的 decomposeParDict 重新划分已有网格和场 |
redistributePar |
并行读取、映射和写出新的分布 |
| 用一个并行工具完成分解或重构 | OpenCFD redistributePar -decompose/-reconstruct |
这些模式和参数应按 OpenCFD 对应版本文档使用 |
redistributePar 不是“更高级所以总该使用”的替代品。只需要重构少量结果时,reconstructPar -latestTime 更直接;需要改变分区或避免串行重构工作流时,才考虑 redistributePar。
常见命令
传统重构:
1 | reconstructPar -latestTime |
OpenCFD 文档给出的并行模式包括:
1 | # 并行分解 |
改变处理器数量时,要先修改 system/decomposeParDict 的 numberOfSubdomains,再按对应版本文档选择启动的 MPI 进程数。不要从另一发行线复制命令后直接用于生产算例。
-overwrite 需要谨慎
不能笼统说 reconstructPar “默认创建一个新时间步”或“需要 -overwrite 才能覆盖”。不同工具和版本对已有时间目录、mesh instance 与 -newTimes/-overwrite 的处理不同。
Foundation 13 的 redistributePar 源码中,非 overwrite 模式会推进写出 instance,而 overwrite 模式会写回原 instance。它改变的是网格和场的写出位置,不只是一个无害的输出选项。操作重要算例前应:
1 | redistributePar -help-full |
并先复制一个小算例验证目录变化。
不再采用的说法
reconstructPar并非天然“不支持 AMR”。动态网格能否重构取决于版本、各时间的 processor mesh 和拓扑数据是否完整。- 没有基准数据时,不能断言
redistributePar一定更快或一定更省主节点内存;网格、字段数量、文件处理器和存储系统都会影响结果。 - ParaView 可以直接读取分解算例,因此“看结果”不总是必须先重构。
redistributePar的功能和参数在 Foundation 与 OpenCFD 发行线之间存在差异,不能混成一套通用命令。
选择流程
- 只需查看分解结果:先尝试 ParaView 直接读取。
- 需要完整场用于归档/后处理:使用
reconstructPar,并限定需要的时间范围。 - 需要改变分区或处理器数:使用当前发行版的
redistributePar工作流。 - 动态网格、AMR 或超大算例:先在副本上验证 mesh、fields、lagrangian 数据和重启能力,再处理原算例。
参考
- OpenCFD:redistributePar
- OpenCFD:parallel tools overview
- OpenFOAM Foundation 13:redistributePar source
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 tttt's!
