5个版本
0.0.5 | 2023年6月16日 |
---|---|
0.0.4 | 2023年2月27日 |
0.0.3 | 2023年2月2日 |
0.0.2 | 2022年9月1日 |
0.0.1 | 2021年10月8日 |
#1388 in 算法
在 2 个crate中使用(通过 fenris)
71KB
1.5K SLoC
一个用于构建使用有限元方法(FEM)的先进应用的Rust库。
尽管Fenris是在计算机图形学中特别强调固体力学的情况下开发的,但它是一个高度通用和灵活的库,适用于许多其他领域。
状态
截至2021年10月,Fenris与我们的几个正在进行中的学术项目一起得到了大量开发,总体目标是支持我们的研究工作。
我们的目标是于2022年对库进行重构、文档化和精炼,以供外部用户使用。在其当前状态下,Fenris不建议用于通用用途。我们目前没有任何API稳定性,文档严重不足,并且只有库的一部分得到了广泛的测试。此外,库的一些部分可能会在未来的版本中完全删除。
目标
通过Fenris,我们旨在提供一个开源的、可组合的、灵活的、高效的Rust库,用于高级有限元计算。
Fenris主要作为C++有限元库的替代品。使用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(第39卷第8期,第157-169页)。
贡献
除了微小的错误修复或更改外,我们目前不接受源代码的贡献。然而,我们欢迎勇敢的用户尝试我们的库,并在我们的问题跟踪器上报告问题。
我们有多个未实现计划,需要重写库的某些部分。一旦库达到更稳定的状态,我们将非常感谢社区的贡献。
许可证
Fenris根据MIT许可证和Apache许可证(版本2.0)的条款分发。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。打开pull请求被视为同意这些许可条款。
依赖关系
~5.5MB
~111K SLoC