Skip to content

Commit

Permalink
Update Trixi.jl GSoC projects (#2188)
Browse files Browse the repository at this point in the history
  • Loading branch information
ranocha authored Nov 24, 2024
1 parent 6313312 commit ea6ea17
Showing 1 changed file with 0 additions and 62 deletions.
62 changes: 0 additions & 62 deletions jsoc/gsoc/trixi.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,68 +6,6 @@ for students and researchers, extensible for research and teaching, as well as e
and suitable for high-performance computing.


## Compiler-based automatic differentiation with Enzyme.jl

**Difficulty**: Medium (up to hard, depending on the chosen subtasks)

**Project size**: 175 hours or 350 hours, depending on the chosen subtasks

[Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl) is the Julia frontend of Enzyme,
a modern automatic differentiation (AD) framework working at the level of LLVM code.
It can provide fast forward and reverse mode AD and - unlike some other AD packages -
supports mutating operations. Since [Trixi.jl](https://github.com/trixi-framework/Trixi.jl/)
relies on mutating operations and caches for performance, this feature is crucial to obtain
an implementation that works efficiently for both simulation runs and AD.

The overall goal of this project is to create a working prototype of
[Trixi.jl](https://github.com/trixi-framework/Trixi.jl/) (or a subset thereof)
using [Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl) for AD, and to support as
many of Trixi's advanced features as possible, such as adaptive mesh refinement, shock capturing etc.

Possible subtasks in this project include
- Explore and implement forward/backward mode AD via [Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl)
for a simplified simulation for the 1D advection equation or the 1D compressible Euler equations
(e.g., compute the Jacobian of the right-hand side evaluation `Trixi.rhs!` on a simple mesh in
serial execution)
- Explore and implement forward mode AD via
[Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl) of semidiscretizations
provided by [Trixi.jl](https://github.com/trixi-framework/Trixi.jl/),
mimicking the functionality that is already
[available via ForwardDiff.jl](https://trixi-framework.github.io/Trixi.jl/stable/tutorials/differentiable_programming/)
- Explore and implement reverse mode AD via
[Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl) of semidiscretizations
provided by [Trixi.jl](https://github.com/trixi-framework/Trixi.jl/) as required for modern machine learning tasks
- Explore and implement AD via [Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl)
of full simulations combining semidiscretizations of
[Trixi.jl](https://github.com/trixi-framework/Trixi.jl/) with time integration
methods of [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl)

Related subtasks in this project not related directly to [Enzyme.jl](https://github.com/EnzymeAD/Enzyme.jl)
but using other packages include
- Explore and implement means to improve the current handling of caches to
simplify AD and differentiable programming with semidiscretizations of
[Trixi.jl](https://github.com/trixi-framework/Trixi.jl/) in general, e.g.,
via [PreallocationTools.jl](https://github.com/SciML/PreallocationTools.jl).
- Extend the current AD support based on [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl)
to other functionality of [Trixi.jl](https://github.com/trixi-framework/Trixi.jl/), e.g.,
[shock capturing discretizations](https://github.com/trixi-framework/Trixi.jl/issues/1252),
[MPI parallel simulations](https://github.com/trixi-framework/Trixi.jl/issues/910),
and other [features currently not supported](https://github.com/trixi-framework/Trixi.jl/issues/462)

This project is good for both software engineers interested in the fields of
numerical analysis and scientific machine learning as well as those students who
are interested in pursuing graduate research in the field.

**Recommended skills**: Good knowledge of at least one numerical discretization scheme
(e.g., finite volume, discontinuous Galerkin, finite differences); initial knowledge
in automatic differentiation; preferably the ability (or eagerness to learn) to write fast code

**Expected results**: Contributions to state of the art and production-quality
automatic differentiation tools for Trixi.jl

**Mentors**: [Hendrik Ranocha](https://github.com/ranocha), [Michael Schlottke-Lakemper](https://github.com/sloede)


## Advanced visualization and in-situ visualization with ParaView

**Difficulty**: Medium
Expand Down

0 comments on commit ea6ea17

Please sign in to comment.