3 个版本

0.0.3 2023 年 6 月 16 日
0.0.2 2023 年 2 月 27 日
0.0.1 2021 年 10 月 8 日

#913并发


用于 3 个 Crates(直接使用 2 个)

MIT/Apache

48KB
946

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或类似的库竞争,这些库允许用户提供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页)。

贡献

除了轻微的bug修复或更改外,我们目前不接受源代码贡献。然而,我们愿意鼓励大胆的用户尝试我们的库,并在我们的问题跟踪器上报告问题。

我们有一些尚未实现的计划,需要重新设计库的某些部分。一旦库达到更稳定的状态,我们将感激社区的贡献。

许可证

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


lib.rs:

paradis

并行处理不相交子集。

依赖关系

~1.6–2.3MB
~49K SLoC