LLNL/SAMRAI:介绍,核心概念
SAMRAI(Structured Adaptive Mesh Refinement Application Infrastructure)是由劳伦斯利弗莫尔国家实验室(Lawrence Livermore National Laboratory, LLNL)开发的一套用于构建结构化自适应网格细化(Structured AMR)应用程序的 C++ 软件框架。它广泛应用于大规模科学计算领域,如计算流
·
文章目录
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 拥有自己的数据(通过
Variable和PatchData管理)和几何信息(如格点间距、坐标范围)。
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 兼容格式等。
四、典型使用流程(简化)
- 定义物理变量(如
CellVariable<NDIM, double>); - 初始化 AMR 层级(通过
GriddingAlgorithm和初始标记函数); - 构建时间积分器(继承
StandardTagAndInitStrategy等接口); - 在每个时间步中:
- 标记需细化的区域;
- 重构网格层级(
regrid()); - 在各级别上执行数值计算;
- 执行插值(refine)和限制(coarsen)操作;
- 输出结果并推进时间。
五、与其他 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 示例
更多推荐


所有评论(0)