2个版本

0.0.2 2023年2月2日
0.0.1 2022年9月1日

#708 in 图形API

每月 36 次下载
5 库(4 个直接)中使用

MIT/Apache

5KB
79

Fenris logo

一个用于使用有限元法(FEM)构建高级应用的Rust库。

尽管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 (Vol. 39, No. 8, pp. 157-169)。

贡献

除了微小的错误修复或更改外,我们目前不接受源代码贡献。然而,我们非常乐意那些想要尝试我们的库的勇敢用户在我们的问题跟踪器上报告问题。

我们有许多未实现计划,这些计划将需要对库的部分进行大量重写。一旦库处于更稳定的状态,我们将非常感激社区的贡献。

许可证

Fenris根据MIT许可证和Apache许可证(版本2.0)的条款分发。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。打开拉取请求被视为同意这些许可条款。

依赖关系

~3MB
~57K SLoC