Ferrite.jl - 有限元工具箱 - 暑期代码项目

Ferrite.jl 是一个 Julia 包,提供开发偏微分方程有限元模拟的基本构建块。该包提供了大量的示例供您开始使用,并且旨在在简单性和通用性之间取得平衡,尝试以低级的方式将有限元概念与代码 1:1 映射。Ferrite 被多个国家/地区的几所大学(例如波鸿鲁尔大学和查尔默斯理工大学)积极用于教授有限元。其他基础设施以不同网格解析器和名为 FerriteViz.jl 的基于 Julia 的可视化工具的形式提供。

下面,我们提供了四个潜在的项目想法,这些想法可以在 Ferrite.jl 中实现。但是,感兴趣的学生可以自由探索他们感兴趣的想法。请联系下面列出的任何导师,或加入 Julia Slack 上的 #ferrite-fem 频道进行讨论。使用 FerriteViz.jl 进行有限元可视化的项目也是可能的。

流固耦合示例

难度:简单-中等(取决于您的具体背景)

项目规模:150-300 小时

问题Ferrite.jl 设计时考虑了在子域上定义偏微分方程的可能性。这使得它非常适合界面耦合的多物理场问题,例如流固耦合问题。但是,我们目前在我们的文档中没有显示此功能的示例。我们也没有提供界面耦合问题所需的所有实用程序。

最低目标:该项目的最低目标是创建一个功能齐全且有文档记录的线性流固耦合示例,该示例将线性弹性与简单设置中的斯托克斯流耦合。代码应具有适当的测试覆盖率。

扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化求解器或非线性流固耦合。

推荐技能:

导师Dennis OgiermannFredrik Ekre

高性能组装策略的研究

难度:中等

项目规模:250-350 小时

问题:由于精心消除了冗余工作负载,Ferrite.jl 在单线程有限元模拟中具有出色的性能。但是,我们最近发现单线程组装的工作方式使得并行组装受内存限制,导致“廉价”组装循环的实现无法在各种系统上扩展。这个问题也将转化为高阶方案,其中单线程策略本身阻止了某些常见的优化策略(例如求和因式分解)。

最低目标:作为迈向更好并行组装性能的第一步,是对不同组装策略的研究。局部和全局无矩阵方案是此处可以探索的可能性。代码必须进行适当的基准测试和测试以识别不同的性能问题。

扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化无矩阵求解器或 GPU 组装。

推荐技能:

导师Maximilian KöhlerDennis Ogiermann