2个版本
0.1.1 | 2024年1月30日 |
---|---|
0.1.0 | 2024年1月30日 |
#604 在 数学
180KB
2.5K SLoC
外表面
外表面
为使用离散外微分学(DEC)数学框架对偏微分方程进行离散化提供构建块。这些构建块包括稀疏矩阵算子(外导数、霍奇星)和与任何维度的单纯形网格相关的矢量运算符(协链)。努力提供尽可能多的编译时检查和类型推断机会,以产生简洁且正确的代码。
此外,外表面
在可选的visuals
模块中提供了一些用于实时可视化的工具,与wgpu一起使用。
当前状态
这个库正在为作者的博士研究而构建,因此首先考虑的是它们的使用案例。主库已经在开发中取得了相当大的进展,实现了与偏微分方程相关的PyDEC的大部分功能,但尚未在许多情况下进行测试。还有一些已知的问题尚未解决。可视化crate目前相当有限,仅支持少数2D用例,但已考虑到最终扩展到3D的可能性。
示例
为了让您了解基本功能,以下代码实现了一个简单的声波模拟
use dexterior as dex;
// type aliases for simulation variables ease readability
type Pressure = dex::Cochain<0, dex::Primal>;
type Velocity = dex::Cochain<1, dex::Primal>;
// meshes can be loaded from files generated with `gmsh`
let msh_bytes = include_bytes!("./examples/meshes/2d_square_pi_x_pi.msh");
let mesh = dex::gmsh::load_trimesh_2d(msh_bytes).expect("Failed to load mesh");
let dt = 0.1;
// generic operator expressed with its input and output type.
// type inference figures out which dimensions of `star` and `d` we need
// to make this expression match the type
let p_step: dex::Op<Velocity, Pressure> =
-dt * mesh.star() * mesh.d() * mesh.star();
// type inference also knows which `d` we mean here
// because we multiply `p` by this operator later
let v_step = dt * mesh.d();
// integrate an initial state function into discrete cochains
let mut p: Pressure = mesh.integrate_cochain(|v| {
f64::sin(3.0 * v[0].x) * f64::sin(2.0 * v[0].y)
});
let mut v: Velocity = mesh.new_zero_cochain();
// step the simulation forward in time
for _step in 0..10 {
p += &p_step * &v;
v += &v_step * &p;
}
带有可视化的更完整版本在crates/dexterior/examples/membrane.rs
中。如果您运行它,它应该看起来像这样(但为动画)
请注意,这些示例需要visuals
功能,该功能默认未启用,因此您需要使用标志来启用它
cargo run --features visuals --example membrane
# or:
cargo run --all-features --example membrane
参考文献和推荐阅读
dexterior
主要受到了 Python 库 PyDEC 的启发,这是我所知的 DEC(离散微分几何)最全面实现。随附的论文 PyDEC: Software and Algorithms for Discretization of Exterior Calculus,由 Hirani 和 Bell (2012)撰写,对开发工作非常有帮助。
需要感谢的更多文章
- Desbrun, M., Hirani, A., Leok, M. & Marsden, J. (2005). 离散外微分几何
- Hirani, A., Kalyanaraman, K. & VanderZee, E. (2012). Delaunay Hodge 星
关于 DEC 基础知识以及本仓库中声学示例的深入解释,请参阅我的硕士论文
- Myyrä, M. (2023). 离散外微分几何和时间谐波声波模拟的精确可控性
针对新手或有复习需求的读者,提供以下额外推荐
- Desbrun, M., Kanso, E. & Tong, Y. (2006). 离散微分形式用于计算建模
- Blair Perot, J. & Zusi, C. (2014). 为科学家和工程师的微分形式
- Crane, K., de Goes, F., Desbrun, M. & Schröder, P. (2013). 使用离散外微分几何进行数字几何处理
许可证
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则任何有意提交以包含在你的作品中的贡献,根据 Apache-2.0 许可证定义,将如上双许可,不附加任何额外条款或条件。
依赖
~5–38MB
~600K SLoC