1 个不稳定版本
0.1.0 | 2021年10月8日 |
---|
#8 在 #fenris 中
在 3 个软件包中使用(通过 fenris-quadrature)
6KB
92 行
Fenris 是一个 Rust 库,用于构建使用有限元素法 (FEM) 的先进应用程序。
尽管 Fenris 是在计算机图形学中特别关注固体力学的情况下开发的,但它是一个高度通用和灵活的库,适用于许多其他领域。
状态
截至 2021 年 10 月,Fenris 与我们的一些正在进行中的学术项目一起进行了大量开发,总体目标是支持我们的研究努力。
我们的目标是于 2022 年对库进行重构、编写文档和润色,以便外部用户使用。在其当前状态下,我们不推荐 Fenris 供一般使用。我们目前不提供任何 API 稳定性,文档严重不足,并且只有库的部分被广泛测试。此外,库的一些部分可能会在未来的版本中完全删除。
目标
使用 Fenris,我们旨在提供一个 开源、可组合、灵活 和 高效 的库,用于在 Rust 中进行高级有限元素计算。
Fenris 主要旨在作为 C++ FEM 库的替代品。使用 Fenris,用户可以利用 Rust 提供的显著的生产力提升,Rust 是一种具有一流的依赖项管理系统和革命性的内存安全、高性能系统编程模型的现代编程语言。
这一声明源于我们在 Rust 中编写 FEM 代码的经验:我们不再需要花费数小时与 CMake 拼搏以集成外部库。此外,Rust 使用的表达类型系统和借用检查模型鼓励编写没有(甚至现代)C++ 中的无数陷阱的良好设计。也许更重要的是,Rust 中发现的出色的泛型特质系统(重要的是在编译时进行类型检查)使我们能够编写高度泛型的代码,其中在类型系统中编码的显式不变式在生成的文档中得到自动和正确的表示。
简而言之,我们发现 Rust 允许我们将更多时间花在解决有趣和复杂的问题(有趣的部分)上,而将更少的时间花在处理由语言缺陷引起的辅助问题(讨厌的部分)上。
技术目标总结
- 提供二维和三维(至少包括三角形、四边形、四面体和六面体)各种几何形状的低阶和高阶标准拉格朗日单元的数量。
- 针对装配的高性能共享内存并行处理。
- 可组合的架构:高级功能是通过组合低级功能构建的。用户可以选择需要工作的级别。
- 促进泛型编程:一次编写代码,使其能够在多个不同元素、维度和算子上工作。
- 方便的I/O,目前以导出到VTK/VTU的形式,以便在ParaView中进行可视化。
非目标
- Fenris的目的是不与FEniCS或类似的库竞争,这些库允许用户提供PDEs的高级弱形式。相比之下,Fenris针对需要低级功能的使用者,也许更类似于deal.II。
- Fenris本身不提供求解(非)线性系统的功能,只提供组装(作为标量/向量/矩阵)和应用离散算子的功能。
- 我们目前没有支持分布式计算或GPU加速的计划。
出版物
Fenris的早期版本被用于以下学术论文的相关代码
- Longva, A.,Löschner, F.,Kugelstadt, T.,Fernández-Fernández, J. A.,& Bender, J. (2020). 嵌入式模拟的高阶有限元. ACM Transactions on Graphics (TOG),39(6),1-14。
- Löschner, F.,Longva, A.,Jeske, S.,Kugelstadt, T.,& Bender, J. (2020)。
可变形固体的高阶时间积分. 在Computer Graphics Forum(第39卷第8期,第157-169页)。
贡献
除了小的错误修复或更改外,我们目前不接受源代码贡献。然而,我们很乐意让敢于尝试我们库的用户在我们的问题跟踪器上报告问题。
我们有多个未实现计划,需要对库的部分进行大量重写。一旦库达到更稳定的状态,我们将非常感谢社区的贡献。
许可证
Fenris根据MIT许可证和Apache许可证(版本2.0)的条款分发。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。打开pull请求被视为同意这些许可条款。
lib.rs
:
针对polyquad求积文件输出的微小解析器。
此crate提供了解析2D和3D求积规则的解析器,这些规则以简单的文本文件格式格式化,并与论文捆绑在一起
Witherden, Freddie D., and Peter E. Vincent.
"On the identification of symmetric quadrature rules for finite element methods."
Computers & Mathematics with Applications 69, no. 10 (2015): 1232-1241.
它用作fenris-quadrature
的(构建)依赖项。
它仅进行了少量测试,因为生成的求积规则在fenris-quadrature
中进行了进一步测试。