6个版本

0.0.6 2023年2月2日
0.0.5 2022年9月1日
0.0.4 2022年1月27日
0.0.3 2021年11月15日
0.0.1 2021年10月8日

#614 in 数学


2 个包中使用 (通过 fenris)

MIT/Apache

155KB
3K SLoC

Fenris logo

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

尽管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。打开拉取请求被视为同意这些许可条款。

依赖关系

~3.5–5MB
~102K SLoC