32个版本

0.0.33 2023年9月25日
0.0.32 2023年7月20日
0.0.29 2023年6月16日
0.0.27 2023年3月16日
0.0.13 2021年11月17日

#213 in 图形API

每月35次下载

MIT/Apache

790KB
12K SLoC

Fenris logo

A Rust库,用于使用有限元方法(FEM)构建高级应用程序。

虽然Fenris主要针对计算机图形中的固体力学进行了开发,但它是一个高度通用和灵活的库,适用于许多其他领域。

状态

截至2021年10月,Fenris正与我们的几个正在进行中的学术项目一起大量开发,其总体目标是支持我们的研究工作。

我们的目标是于2022年重新设计、编写文档并完善该库以供外部用户使用。在其当前状态下,不建议一般使用 Fenris。我们目前没有任何API稳定性,文档严重不足,并且只有库的部分内容经过了广泛测试。此外,库的一些部分可能会在未来版本中完全删除。

目标

Fenris旨在为Rust中高级有限元计算提供一个开源、可组合、灵活且性能优异的库。

Fenris主要作为C++有限元库的替代品。使用Fenris,用户可以利用Rust提供的显著的生产力提升,Rust是一种具有一流依赖关系管理系统和革命性内存安全、高性能系统编程模型的现代编程语言。

本声明源于我们自己在 Rust 中编写有限元(FEM)代码的经验:不再需要花费数小时与 CMake 打交道来集成外部库。此外,Rust 使用的表达类型系统和借用检查模型鼓励编写无 Footguns 的良好设计,这些 Footguns 与(即使是现代的)C++ 相关联。也许更重要的是,Rust 中发现的出色的泛型特性和类型系统——重要的是它在编译时进行类型检查——允许我们编写高度泛型的代码,其中显式的不变量编码在类型系统中,并在生成的文档中自动且正确地表示。

简而言之,我们发现 Rust 允许我们花更多时间解决有趣和复杂的问题(有趣的部分),而花较少时间处理由语言缺陷引起的辅助问题(讨厌的部分)。

技术目标摘要

  • 提供二维和三维中各种几何形状的低阶和高阶标准拉格朗日元素(至少包括三角形、四边形、四面体和六面体)。
  • 高性能的共享内存并行化,用于组装。
  • 可组合的架构:高级功能是通过较低级功能的组合构建的。用户选择他们需要工作的级别。
  • 促进泛型编程:编写一次代码,使其在不同的元素、维度和算子上工作。
  • 方便的 I/O,目前以导出到 VTK/VTU 的形式,以便在 ParaView 中进行可视化。

非目标

  • Fenris 的目的不是与 FEniCS 或类似库竞争,这些库允许用户提供偏微分方程(PDE)的高层弱形式。相反,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 request 被视为同意这些许可条款。


lib.rs:

fenris 的固体力学功能。

依赖项

~12–18MB
~256K SLoC