3个版本

0.0.3 2023年2月2日
0.0.2 2022年9月1日
0.0.1 2021年10月8日

#1799 in 算法


2 个crate中使用

MIT/Apache

24KB
516

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使我们能够将更多时间用于解决有趣和复杂的问题(有趣的方面),而将更少时间用于处理由语言缺陷引起的辅助问题(烦人的方面)。

技术目标摘要

  • 提供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。提交拉取请求被视为同意这些许可条款。

依赖项

~6MB
~127K SLoC