Trixi.jl 是一个用于守恒律自适应高阶数值模拟的 Julia 包。它旨在易于学生和研究人员使用,可扩展以用于研究和教学,以及高效且适用于高性能计算。
难度:中等(取决于所选子任务,最高可达困难)
项目规模:175 小时或 350 小时,取决于所选子任务
Enzyme.jl 是 Enzyme 的 Julia 前端,Enzyme 是一个现代的自动微分 (AD) 框架,在 LLVM 代码级别工作。它可以提供快速的前向和反向模式 AD,并且与一些其他 AD 包不同,它支持突变操作。由于 Trixi.jl 依赖于突变操作和缓存以提高性能,因此此功能对于获得有效运行模拟和 AD 的实现至关重要。
该项目的总体目标是创建一个使用 Enzyme.jl 进行 AD 的 Trixi.jl(或其子集)的工作原型,并尽可能支持 Trixi 的许多高级功能,例如自适应网格细化、冲击捕捉等。
该项目中可能包含的子任务包括
探索并通过 Enzyme.jl 实现一维平流方程或一维可压缩欧拉方程的简化模拟的前向/反向模式 AD(例如,计算右侧评估 Trixi.rhs!
在简单网格上的雅可比矩阵,在串行执行中)
探索并通过 Enzyme.jl 实现 Trixi.jl 提供的半离散化的前向模式 AD,模仿已经 通过 ForwardDiff.jl 可用 的功能
探索并通过 Enzyme.jl 实现将 Trixi.jl 的半离散化与 OrdinaryDiffEq.jl 的时间积分方法相结合的完整模拟的 AD
该项目中与 Enzyme.jl 无直接关系但使用其他包的相关子任务包括
探索并实施方法以改进当前对缓存的处理,以简化 AD 和 Trixi.jl 的半离散化的可微编程,例如,通过 PreallocationTools.jl。
将当前基于 ForwardDiff.jl 的 AD 支持扩展到 Trixi.jl 的其他功能,例如,冲击捕捉离散化、MPI 并行模拟,以及其他 当前不支持的功能
该项目适合对数值分析和科学机器学习领域感兴趣的软件工程师,以及对在该领域进行研究生研究感兴趣的学生。
推荐技能:至少熟悉一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分);自动微分方面的初步知识;最好具备(或渴望学习)编写快速代码的能力
预期成果:为 Trixi.jl 贡献最先进的、生产质量的自动微分工具
导师:Hendrik Ranocha、Michael Schlottke-Lakemper
难度:中等
项目规模:175 小时或 350 小时,取决于所选子任务
可视化和记录结果是科学过程的关键部分。在 Trixi.jl 中,我们依赖于纯 Julia 包(例如 Plots.jl 和 Makie.jl)和开源科学可视化套件 ParaView 的组合进行可视化。虽然 Julia 解决方案非常适合可视化一维和二维数据,但 ParaView 是从三维数据创建出版质量图形的首选。
目前,使用 ParaView 进行可视化只能在模拟完成后进行,并且需要额外的后处理步骤,在该步骤中,使用 Trixi2Vtk.jl 将 Trixi.jl 的本机输出文件转换为 VTK 文件。此额外步骤使其使用起来有些不便,尤其是在需要在长时间的、多小时的模拟运行过程中检查数值解的当前状态时。
因此,该项目的目的是通过引入两个重大改进,使此类可视化变得更加容易
添加在模拟期间直接写入本机 VTKHDF 文件的功能,在串行和并行中。
启用结果的并行原位可视化,即通过使用 Catalyst API 将 ParaView 连接到当前正在运行的并行 Trixi.jl 模拟来可视化结果。
这两项任务都与学生需要熟悉 Trixi.jl 内部使用的数据格式以及 VTK/ParaView 的可视化管道相关。但是,它们可以独立执行,因此该项目适合 175 小时或 350 小时的承诺,具体取决于要处理的任务数量。
该项目适合对可视化和科学数据分析领域感兴趣的软件工程师,以及对数值分析和高性能计算领域进行研究生研究感兴趣的学生。
推荐技能:至少熟悉一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分)会有所帮助;可视化或并行处理方面的初步知识;最好具备(或渴望学习)编写快速代码的能力。
预期成果:为 Trixi.jl 提供可扩展的、生产质量的科学结果可视化。
导师:Michael Schlottke-Lakemper、Benedict Geihe、Johannes Markert