1个不稳定发布
0.0.1 | 2021年10月8日 |
---|
#9 in #fenris
36 每月下载量
在 5 个crate中使用 (3 直接使用)
6KB
144 代码行
Fenris是一个Rust库,用于构建使用有限元方法(FEM)的复杂应用程序。
尽管Fenris的开发特别注重计算机图形中的固体力学,但它是一个高度通用和灵活的库,适用于许多其他领域。
状态
截至2021年10月,Fenris与我们的几个正在进行的研究项目一起得到了大量开发,总体目标是支持我们的研究努力。
我们的目标是于2022年重新设计、编写文档并完善该库以供外部用户使用。在当前状态下,我们不推荐Fenris 一般使用。我们目前 不提供任何API稳定性,文档严重不足,并且只有库的部分被广泛测试。此外,库的一些部分可能会在未来的版本中完全删除。
目标
Fenris旨在提供一套开源的、可组合的、灵活的且高效的库,用于Rust中的高级有限元计算。
Fenris主要作为C++ FEM库的替代品。使用Fenris,用户可以利用Rust的现代编程语言提供的显著的生产力提升,Rust具有业界最佳的依赖关系管理系统和革命性的内存安全、高性能系统编程模型。
这一声明源于我们自己在Rust中编写FEM代码的经验:不再需要花费数小时与CMake斗争以集成外部库。此外,Rust使用的表达性类型系统和借用检查器模型鼓励了良好的设计,这些设计免受与(即使是现代的)C++相关的无数陷阱的影响。也许更重要的是,Rust中发现的出色的泛型特质系统(类型检查是在编译时进行的)允许我们编写高度泛型的代码,类型系统中明确编码的不变量在生成的文档中自动且正确地表示。
简而言之,我们发现Rust允许我们将更多时间花在解决有趣且复杂的问题(有趣的部分)上,而不是花费大量时间处理由语言缺陷引起的辅助问题(烦人的部分)。
技术目标总结
- 提供2D和3D中各种几何形状的低阶和高阶标准拉格朗日元素(至少包括三角形、四边形、四面体和六面体)。
- 用于汇编的高性能共享内存并行处理。
- 可组合架构:通过组合较低级的特性来构建高级功能。用户可以选择他们需要工作的层级。
- 促进通用编程:编写一次代码,使其能够在多个不同的元素、维度和算子上工作。
- 便捷的输入/输出,目前以导出到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(第39卷,第8期,第157-169页)。
贡献
除了微小的错误修复或更改,我们目前不接受源代码的贡献。然而,我们非常愿意让那些想尝试我们库的勇敢用户在我们的问题跟踪器上报告问题。
我们有一些尚未实现的计划,这些计划将需要对库的部分进行重大重写。一旦库达到更稳定的状态,我们将非常欢迎社区的贡献。
许可证
Fenris在MIT许可证和Apache许可证(版本2.0)的条款下分发。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。打开pull请求被视为同意这些许可条款。
依赖项
~0.4–1MB
~24K SLoC