SAMRAI(Structured Adaptive Mesh Refinement Application Infrastructure)是由劳伦斯利弗莫尔国家实验室(Lawrence Livermore National Laboratory, LLNL)开发的一套用于构建结构化自适应网格细化(Structured AMR)应用程序的 C++ 软件框架。它广泛应用于大规模科学计算领域,如计算流体力学(CFD)、燃烧模拟、天体物理、材料科学等,特别适用于需要高分辨率局部区域和高效并行计算的问题。


一、SAMRAI 的主要目标

  • 提供一个可扩展、模块化、面向对象的 AMR 基础设施;
  • 支持复杂的多物理场、多尺度模拟;
  • 实现高效的并行计算(基于 MPI);
  • 与底层物理求解器解耦,便于集成不同应用。

###二、核心概念

1. Patch(块/单元)
  • 是 SAMRAI 中最小的计算单元,对应于规则矩形(2D)或长方体(3D)的均匀网格区域。
  • 每个 Patch 拥有自己的数据(通过 VariablePatchData 管理)和几何信息(如格点间距、坐标范围)。
2. Patch Level(层级)
  • 由一组具有相同网格分辨率的 Patches 组成。
  • 在 AMR 框架中,不同 Level 对应不同细化级别(Level 0 通常为最粗网格,Level N 为最细)。
  • 同一层级中的 Patches 可以不连续,用于覆盖多个感兴趣区域。
3. Hierarchy(网格层级结构)
  • 是所有 Patch Levels 的集合,构成整个 AMR 网格结构。
  • 支持动态重构(regridding):根据误差指示器或用户定义的标记函数,在运行时创建/销毁细化层。
4. Variable 与 PatchData
  • Variable:声明数据的类型(如 cell-centered、node-centered、face-centered)和语义(如压力、速度)。
  • PatchData:Variable 在具体 Patch 上的实例,包含实际存储的数据(通常为 SAMRAI 自定义数组结构,如 CellData)。
5. Integrator(时间积分器)
  • 控制整个 AMR 模拟的时间推进逻辑。
  • 协调各层级的时间步长(通常细网格采用更小时间步,实现局部时间步)。
  • 常见策略包括 subcycling(细层多次步进以匹配粗层一步)。
6. Refine / Coarsen / Redistribute
  • RefineSchedule:定义如何将粗网格数据插值到细网格(如线性插值、守恒插值)。
  • CoarsenSchedule:定义如何将细网格数据限制(restrict)回粗网格(如平均、守恒限制)。
  • Redistribution:在并行环境下,当网格结构变化后重新分配 Patch 到各 MPI 进程。
7. Berger-Oliger 时间积分策略
  • SAMRAI 默认采用经典的 Berger-Oliger AMR 时间推进方法:
    • 粗层先推进一步;
    • 细层进行多次子步,期间边界从粗层插值得到;
    • 细层完成后,将其结果注入(或守恒修正)到粗层。

三、SAMRAI 的架构特点

  • 面向对象设计:核心类如 Hierarchy, PatchLevel, Variable, Integrator 等高度抽象,便于扩展。
  • 与物理求解器解耦:用户只需实现特定的数值方法类(如 hyperbolic solver、elliptic solver),无需关心 AMR 调度细节。
  • MPI 并行支持:Patch 自动分布到多个进程,支持负载均衡(通过 LoadBalancer 类)。
  • 灵活的 I/O 支持:可输出为 SAMRAI 自有格式、HDF5、VisIt 兼容格式等。

四、典型使用流程(简化)

  1. 定义物理变量(如 CellVariable<NDIM, double>);
  2. 初始化 AMR 层级(通过 GriddingAlgorithm 和初始标记函数);
  3. 构建时间积分器(继承 StandardTagAndInitStrategy 等接口);
  4. 在每个时间步中:
    • 标记需细化的区域;
    • 重构网格层级(regrid());
    • 在各级别上执行数值计算;
    • 执行插值(refine)和限制(coarsen)操作;
  5. 输出结果并推进时间。

五、与其他 AMR 框架对比

框架 语言 网格类型 并行模型 特点
SAMRAI C++ 结构化 AMR MPI 成熟、稳定,LLNL 支持,适合大规模科学计算
AMReX C++ 结构化 AMR MPI + OpenMP / CUDA 更现代,支持 GPU,社区活跃
Chombo C++ 结构化 AMR MPI 类似 SAMRAI,由 LBNL 开发
FLASH Fortran/C 结构化 AMR MPI 应用导向(天体物理等),内建物理模块

六、资源

  • 官方 GitHub(已开源):https://github.com/LLNL/SAMRAI
  • 文档:见 GitHub 中的 docs/ 目录或 LLNL 官网文档(部分需注册)
  • 示例examples/ 目录包含线性对流、泊松方程、多相流等典型 AMR 示例
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐