33 个版本

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.0 2021年4月6日

#92 in 科学

Download history 9/week @ 2024-03-07 2/week @ 2024-03-14 53/week @ 2024-03-28 47/week @ 2024-04-04 1/week @ 2024-05-16 2/week @ 2024-05-23

每月 127 次下载
fenris-solid 中使用

MIT/Apache

1MB
20K SLoC

Fenris logo

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

虽然 Fenris 侧重于计算机图形中的固体力学,但它是一个高度通用和灵活的库,适用于许多其他领域。

状态

截至 2021 年 10 月,Fenris 正在我们的一些正在进行的研究项目中进行大量开发,目标是支持我们的研究工作。

我们的目标是,在 2022 年对库进行重构、文档化和精炼,以便外部用户使用。在其当前状态下,Fenris 不推荐用于通用用途。我们目前没有任何 API 稳定性,文档严重不足,并且只有库的部分已得到广泛测试。此外,库的一些部分可能会在未来的版本中完全删除。

目标

通过 Fenris,我们旨在提供一个 开源可组合灵活高效 的 Rust 高级有限元计算库。

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

这一声明源于我们自己在 Rust 中编写 FEM 代码的经历:不再需要花费数小时与 CMake 斗争以集成外部库。此外,Rust 使用的表达性类型系统和借用检查模型鼓励设计良好的设计,这些设计没有与(即使是现代的)C++ 相关的无数陷阱。也许更重要的是,Rust 中的优秀泛型特质系统——重要的是在编译时进行类型检查——使我们能够编写高度泛型的代码,并在类型系统中编码显式的不变量,这些不变量在生成的文档中自动和正确地表示。

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

技术目标概述

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

非目标

  • Fenris的目的是与FEniCS或类似库竞争,这些库允许用户提供偏微分方程的高阶弱形式。相反,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。打开拉取请求被视为同意这些许可条款。

依赖关系

~11–18MB
~255K SLoC