Skip to content
Merged
Show file tree
Hide file tree
Changes from 87 commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
fd2ecc0
add paper again
albert-de-montserrat Jul 1, 2025
7661886
update MS and add figs
albert-de-montserrat Jul 2, 2025
54bebe3
fix IGG name
albert-de-montserrat Jul 2, 2025
d466e5d
a few fixes
aelligp Jul 9, 2025
3191721
update
aelligp Jul 9, 2025
e2002eb
add orcid and affiliations
aelligp Jul 9, 2025
39dd83f
add hugo
aelligp Jul 9, 2025
ec1c268
new fig
albert-de-montserrat Jul 14, 2025
3106526
update
albert-de-montserrat Jul 14, 2025
eacdeab
add ERC to funding
albert-de-montserrat Jul 14, 2025
77978a8
couple of changes
albert-de-montserrat Jul 14, 2025
b6fed07
typos
albert-de-montserrat Jul 14, 2025
2dc80f7
Add ENS to typo list
aelligp Jul 15, 2025
6caac7d
fix?
aelligp Jul 15, 2025
3affe80
fix again to allow white space
aelligp Jul 15, 2025
f5b8290
typos and small language improvements
Iddingsite Jul 16, 2025
1ca8cc0
use `k` for conductivity instead of kappa
albert-de-montserrat Jul 21, 2025
9746086
few changes
albert-de-montserrat Jul 21, 2025
02dc7ee
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
545546b
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
fb31763
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
088b921
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
321b3d8
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
ca3c301
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
a194b9b
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
1a5370d
up
albert-de-montserrat Aug 20, 2025
4b50a91
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
0d05cfd
up
albert-de-montserrat Aug 20, 2025
ca1ee2f
up
albert-de-montserrat Aug 20, 2025
dcc062e
up
albert-de-montserrat Aug 20, 2025
bd2c400
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
d84d789
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
92c4c89
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
3520d4c
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
638c697
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
0b0a608
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
1994f00
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
173282d
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
20bdee5
Update docs/paper/joss.md
albert-de-montserrat Aug 20, 2025
ef4945b
Apply suggestion from @luraess
albert-de-montserrat Aug 20, 2025
112e684
up
albert-de-montserrat Aug 20, 2025
802b376
up
albert-de-montserrat Aug 20, 2025
bea060e
Apply suggestion from @luraess
albert-de-montserrat Aug 20, 2025
63b4a41
up
albert-de-montserrat Aug 20, 2025
e772a0a
up
albert-de-montserrat Aug 20, 2025
7c1f95e
up
albert-de-montserrat Aug 20, 2025
ce9fabc
update MS and new figure
albert-de-montserrat Aug 21, 2025
04c8ffd
Merge branch 'main' into adm/JOSS
albert-de-montserrat Aug 21, 2025
a760ad6
3D weak scaling fig
albert-de-montserrat Aug 21, 2025
2e8f83f
typo
albert-de-montserrat Aug 21, 2025
5ebcdc9
up
albert-de-montserrat Aug 21, 2025
0cdf06b
rename files; add shearband figure more prominently
aelligp Aug 21, 2025
473f673
typo
aelligp Aug 21, 2025
b0351ee
ref ∂GPU4GEO
aelligp Aug 21, 2025
9afa5f0
fix name (oops)
aelligp Aug 21, 2025
c102499
update color
aelligp Aug 21, 2025
93b4e93
white circle around inclusion
aelligp Aug 21, 2025
25ed25e
update figure again
aelligp Aug 21, 2025
6a3bf31
update README accordingly
aelligp Aug 21, 2025
3198b12
Merge branch 'main' into adm/JOSS
aelligp Aug 25, 2025
5bf5441
Merge branch 'main' into adm/JOSS
albert-de-montserrat Sep 11, 2025
4e7d3f8
few text changes
albert-de-montserrat Sep 11, 2025
c0c6f88
typo
albert-de-montserrat Sep 11, 2025
9ea42a6
partials -> D()/D t
albert-de-montserrat Sep 11, 2025
64f29d1
up
albert-de-montserrat Sep 11, 2025
d379dad
add JOSS GH Action
albert-de-montserrat Sep 11, 2025
bb652e1
change eq format
albert-de-montserrat Sep 11, 2025
02736b2
fix broken refs
albert-de-montserrat Sep 11, 2025
5803031
fix refs
albert-de-montserrat Sep 11, 2025
22e2f31
fix some latex maths
albert-de-montserrat Sep 11, 2025
5ff6b0a
typo
albert-de-montserrat Sep 11, 2025
de49300
Merge branch 'main' into adm/JOSS
aelligp Sep 16, 2025
81112fa
Update terminology from 'visco-elasto-viscoelastic' to 'visco-elasto-…
albert-de-montserrat Oct 2, 2025
3b7b8fc
Merge branch 'main' into adm/JOSS
albert-de-montserrat Oct 12, 2025
d6e44f3
shortened paper
albert-de-montserrat Oct 13, 2025
edb819b
update shortened version
albert-de-montserrat Oct 13, 2025
65247b4
add missing DOI
aelligp Oct 13, 2025
4d0cbbd
update paper file names
albert-de-montserrat Oct 13, 2025
b50fde0
Merge branch 'main' into adm/JOSS
albert-de-montserrat Oct 20, 2025
fd16b77
even shorter paper for JOSS
aelligp Oct 21, 2025
b30dfb3
update figure
aelligp Oct 21, 2025
050322d
revised short paper
albert-de-montserrat Oct 21, 2025
f5de93c
Update docs/paper/paper.md
albert-de-montserrat Oct 21, 2025
dce746f
typo
albert-de-montserrat Oct 21, 2025
a7841fb
shorten even more
albert-de-montserrat Oct 21, 2025
02918ab
Merge branch 'main' into adm/JOSS
albert-de-montserrat Nov 25, 2025
4cbcaa9
update MS and refs
albert-de-montserrat Nov 25, 2025
303b1f1
add Hugo's suggestion
albert-de-montserrat Nov 25, 2025
e832d6e
update links to docs
albert-de-montserrat Nov 25, 2025
e79e643
update shear band docs
albert-de-montserrat Nov 25, 2025
ce1e3ba
update SB miniapp
albert-de-montserrat Nov 25, 2025
b431efc
Merge branch 'main' into adm/JOSS
albert-de-montserrat Nov 25, 2025
a5dd183
Ludovic editing suggestion
albert-de-montserrat Nov 27, 2025
2259462
update models figure & caption
albert-de-montserrat Dec 1, 2025
61eadb2
update parallel efficiency definition
albert-de-montserrat Dec 1, 2025
7732ac4
update fig background
albert-de-montserrat Dec 1, 2025
c15bdd7
crop figure...
albert-de-montserrat Dec 1, 2025
68f5449
Merge branch 'main' into adm/JOSS
albert-de-montserrat Dec 15, 2025
d50a52a
fix syntax in `plume3D.md`
albert-de-montserrat Dec 16, 2025
4c4c212
Implement most of Rene's suggestions (#399) & some grammar/typo fixes
albert-de-montserrat Dec 16, 2025
9468204
add last suggestion from Rene's comments
albert-de-montserrat Dec 17, 2025
8ce1a99
Merge branch 'main' into adm/JOSS
aelligp Dec 17, 2025
080fd8e
Merge branch 'main' into adm/JOSS
albert-de-montserrat Jan 6, 2026
7d580bd
fix markdown rendering
albert-de-montserrat Jan 6, 2026
325ad02
remove file
albert-de-montserrat Jan 6, 2026
7f5e2f9
fix fig 3 caption
albert-de-montserrat Jan 6, 2026
592b7d1
Merge branch 'main' into adm/JOSS
albert-de-montserrat Jan 6, 2026
5a8a874
fix references
albert-de-montserrat Jan 6, 2026
8ab4fa5
change lamem ref
albert-de-montserrat Jan 6, 2026
744d212
update CONTRIBUTING.md
albert-de-montserrat Jan 6, 2026
6fe59be
update PR template
albert-de-montserrat Jan 6, 2026
7e5bd0e
Merge branch 'main' into adm/JOSS
albert-de-montserrat Jan 6, 2026
7a846af
update URL to PR template
albert-de-montserrat Jan 6, 2026
84f7946
update AUTHORS.md
albert-de-montserrat Jan 6, 2026
04671c1
replace GLMakie by CairoMakie
albert-de-montserrat Jan 6, 2026
08677ce
small change to PR template
albert-de-montserrat Jan 6, 2026
2429ef0
fix references
albert-de-montserrat Jan 11, 2026
ea04195
Merge branch 'main' into adm/JOSS
albert-de-montserrat Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/workflows/draft-pdf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Draft PDF
on: [push]

jobs:
paper:
runs-on: ubuntu-latest
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
journal: joss
# This should be the path to the paper within your repo.
paper-path: docs/paper/paper.md
- name: Upload
uses: actions/upload-artifact@v4
with:
name: paper
# This is the output path where Pandoc will write the compiled
# PDF. Note, this should be the same directory as the input
# paper.md
path: docs/paper/paper.pdf
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,4 @@ Available miniapps can be found in the [miniapps folder](miniapps) and will be u
Current (Blankenback2D, Stokes 2D-3D, thermal diffusion, thermal stress) and future benchmarks can be found in the [Benchmarks](miniapps/benchmarks).

## Funding
The development of this package is supported by the [GPU4GEO](https://ptsolvers.github.io/GPU4GEO/) [PASC](https://www.pasc-ch.org) project.
The development of this package is supported by the [GPU4GEO & $\partial$GPU4GEO](https://gpu4geo.org/) [PASC](https://www.pasc-ch.org) project, and the European Research Council through the MAGMA project, ERC Consolidator Grant #771143.
5 changes: 5 additions & 0 deletions _typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,10 @@ Ths = "Ths"
oly = "oly"
iy = "iy"
pn = "pn"

[default]
extend-ignore-words-re = [
"(?i)normale\\s+supérieure"
]
nd = "nd"
Heros = "Heros"
Binary file added docs/assets/Blankenbach/Temp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/Blankenbach/Time_Series_V_Nu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/paper/figs/dependencies.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/paper/figs/efficiency_Stokes3D.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/paper/figs/models_JOSS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/paper/figs/weak_scaling_JR.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
242 changes: 242 additions & 0 deletions docs/paper/paper.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
@article{bezanson2017julia,
author = {Bezanson, Jeff and Edelman, Alan and Karpinski, Stefan and Shah, Viral B.},
title = {Julia: A Fresh Approach to Numerical Computing},
journal = {SIAM Review},
volume = {59},
number = {1},
pages = {65-98},
year = {2017},
doi = {10.1137/141000671},
URL = {https://doi.org/10.1137/141000671}
}

@article{GeoParams,
author = {Kaus, Boris and de Montserrat, Albert and Medinger, Nils and Aellig, Pascal and Dominguez, Hugo and Riel, Nicolas and Cosarinsky, Matias and Spang, Arne and Berlie, Nicolas and Kiss, Daniel and Ranocha, Hendrik and Fuchs, Lukas and Frasunkiewicz, Jacob and Räss, Ludovic and Lueder, Mona and Seiler, Alexander and Duretz, Thibault},
title = {GeoParams.jl: v0.7.4},
year = {2025},
URL = {https://doi.org/10.5281/zenodo.15719680}
}

@article{JustPIC,
author = {de Montserrat, Albert and Aellig, Pascal and Räss, Ludovic and Duretz, Thibault and Utkin, Ivan and Kaus, Boris and Ranocha, Hendrik},
title = {JustPIC.jl: v0.5.10},
year = {2025},
URL = {https://doi.org/10.5281/zenodo.15704602}
}

@article{WriteVTK,
author = {Polanco, J. I.},
title = {WriteVTK.jl: a Julia package for writing VTK XML files (v1.18.0)},
year = {2023},
URL = {https://doi.org/10.5281/zenodo.7804590}
}
@article{Byrne2021,
doi = {10.21105/jcon.00068},
url = {https://doi.org/10.21105/jcon.00068},
year = {2021},
publisher = {The Open Journal},
volume = {1},
number = {1},
pages = {68},
author = {Simon Byrne and Lucas C. Wilcox and Valentin Churavy},
title = {MPI.jl: Julia bindings for the Message Passing Interface},
journal = {Proceedings of the JuliaCon Conferences}
}

@article{besard2018juliagpu,
author = {Besard, Tim and Foket, Christophe and De Sutter, Bjorn},
title = {Effective Extensible Programming: Unleashing {Julia} on {GPUs}},
journal = {IEEE Transactions on Parallel and Distributed Systems},
year = {2018},
doi = {10.1109/TPDS.2018.2872064},
ISSN = {1045-9219},
archivePrefix = {arXiv},
eprint = {1712.03112},
primaryClass = {cs.PL},
}

@article{larionov2017variational,
author = {Larionov, Egor and Batty, Christopher and Bridson, Robert},
title = {Variational stokes: a unified pressure-viscosity solver for accurate viscous liquids},
year = {2017},
issue_date = {August 2017},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {36},
number = {4},
issn = {0730-0301},
url = {https://doi.org/10.1145/3072959.3073628},
doi = {10.1145/3072959.3073628},
}

@article{Harlow1965,
title = {{Numerical Calculation of Time‐Dependent Viscous Incompressible Flow of Fluid with Free Surface}},
year = {1965},
journal = {The Physics of Fluids},
author = {Harlow, Francis H. and Welch, J. Eddie},
number = {12},
month = {12},
pages = {2182--2189},
volume = {8},
publisher = {AIP Publishing},
doi = {10.1063/1.1761178},
issn = {0031-9171}
}

@article{Omlin2024,
doi = {10.21105/jcon.00137},
url = {https://doi.org/10.21105/jcon.00137},
year = {2024},
publisher = {The Open Journal},
volume = {6}, number = {65},
pages = {137},
author = {Samuel Omlin and Ludovic Räss and Ivan Utkin},
title = {Distributed Parallelization of xPU Stencil Computations in Julia},
journal = {Proceedings of the JuliaCon Conferences}
}

@article{i3elvis,
title={Robust characteristics method for modelling multiphase visco-elasto-plastic thermo-mechanical problems},
author={Gerya, Taras V and Yuen, David A},
journal={Physics of the Earth and Planetary Interiors},
volume={163},
number={1-4},
pages={83--105},
year={2007},
note = {Computational Challenges in the Earth Sciences},
issn = {0031-9201},
doi = {https://doi.org/10.1016/j.pepi.2007.04.015},
url = {https://www.sciencedirect.com/science/article/pii/S0031920107000969},
publisher={Elsevier}
}

@article{gerya2015plate,
title={Plate tectonics on the Earth triggered by plume-induced subduction initiation},
author={Gerya, Taras V and Stern, Robert J and Baes, Marzieh and Sobolev, Stephan V and Whattam, Scott A},
journal={Nature},
volume={527},
number={7577},
pages={221--225},
year={2015},
doi = {10.1038/nature15752},
url = {https://doi.org/10.1038/nature15752},
publisher={Nature Publishing Group UK London}
}

@article{Raess2022,
title={Assessing the robustness and scalability of the accelerated pseudo-transient method},
author={R{\"a}ss, Ludovic and Utkin, Ivan and Duretz, Thibault and Omlin, Samuel and Podladchikov, Yuri Y},
journal={Geoscientific Model Development},
volume={15},
number={14},
pages={5757--5786},
year={2022},
url = {https://gmd.copernicus.org/articles/15/5757/2022/},
doi = {10.5194/gmd-15-5757-2022},
publisher={Copernicus Publications G{\"o}ttingen, Germany}
}

@article{stagyy,
title={Modelling compressible mantle convection with large viscosity contrasts in a three-dimensional spherical shell using the yin-yang grid},
author={Tackley, Paul J},
journal={Physics of the Earth and Planetary Interiors},
volume={171},
number={1-4},
pages={7--18},
year={2008},
doi = {10.1016/j.pepi.2008.08.005},
publisher={Elsevier}
}


@inproceedings{lamem,
title={Forward and inverse modelling of lithospheric deformation on geological timescales},
author={Kaus, Boris JP and Popov, Anton A and Baumann, T and Pusok, A and Bauville, Arthur and Fernandez, Naiara and Collignon, Marine},
booktitle={Proceedings of nic symposium},
volume={48},
pages={978--983},
year={2016},
organization={John von Neumann Institute for Computing (NIC), NIC Series}
}

@article{citcom,
title={Role of temperature-dependent viscosity and surface plates in spherical shell models of mantle convection},
author={Zhong, Shijie and Zuber, Maria T and Moresi, Louis and Gurnis, Michael},
journal={Journal of Geophysical Research: Solid Earth},
volume={105},
number={B5},
pages={11063--11082},
year={2000},
doi = {https://doi.org/10.1029/2000JB900003},
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2000JB900003},
publisher={Wiley Online Library}
}

@inproceedings{ptatin,
title={pTatin3D: High-performance methods for long-term lithospheric dynamics},
author={May, Dave A and Brown, Jed and Le Pourhiet, Laetitia},
booktitle={SC'14: Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis},
pages={274--284},
year={2014},
organization={IEEE},
doi={10.1109/SC.2014.28}
}


@article{underworld,
title={Computational approaches to studying non-linear dynamics of the crust and mantle},
author={Moresi, L and Quenette, Steve and Lemiale, Vincent and Meriaux, C and Appelbe, B and M{\"u}hlhaus, H-B},
journal={Physics of the Earth and Planetary Interiors},
volume={163},
number={1-4},
pages={69--82},
year={2007},
doi = {10.1016/j.pepi.2007.06.009},
publisher={Elsevier}
}

@article{lacode,
title={LaCoDe: a Lagrangian two-dimensional thermo-mechanical code for large-strain compressible visco-elastic geodynamical modeling},
author={de Montserrat, Albert and Morgan, Jason P and Hasenclever, J{\"o}rg},
journal={Tectonophysics},
volume={767},
pages={228173},
year={2019},
doi = {10.1016/j.tecto.2019.228173},
url = {https://www.sciencedirect.com/science/article/pii/S004019511930280X},
publisher={Elsevier}
}

@misc{aspect,
title = {{{ASPECT}: Advanced Solver for Planetary Evolution, Convection, and Tectonics, User Manual}},
author = {Bangerth, Wolfgang and Dannberg, Juliane and Fraters, Menno and Gassmoeller, Rene and Glerum, Anne and Heister, Timo and Myhill, Robert and Naliboff, John},
year = {2024},
month = dec,
DOI = {10.6084/m9.figshare.4865333},
URL = {https://doi.org/10.6084/m9.figshare.4865333}
}

@article{CUDA.jl,
author={Besard, Tim and Foket, Christophe and De Sutter, Bjorn},
journal={IEEE Transactions on Parallel and Distributed Systems},
title={Effective Extensible Programming: Unleashing Julia on GPUs},
year={2019},
volume={30},
number={4},
pages={827-841},
keywords={Graphics processing units;Programming;Hardware;High level languages;Libraries;Graphics processors;very high-level languages;code generation;retargetable compilers},
doi={10.1109/TPDS.2018.2872064}
}

@article{MPI.jl,
doi = {10.21105/jcon.00068},
url = {https://doi.org/10.21105/jcon.00068},
year = {2021},
publisher = {The Open Journal},
volume = {1},
number = {1},
pages = {68},
author = {Simon Byrne and Lucas C. Wilcox and Valentin Churavy},
title = {MPI.jl: Julia bindings for the Message Passing Interface},
journal = {Proceedings of the JuliaCon Conferences}
}
95 changes: 95 additions & 0 deletions docs/paper/paper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
title: '`JustRelax.jl`: A Julia package for geodynamic modeling with matrix-free solvers'
tags:
- Julia
- Geosciences
- Geodynamics
- Tectonics
- Geophysics
- Computational geosciences
authors:
- name: Albert de Montserrat
orcid: 0000-0003-1694-3735
affiliation: 1
- name: Pascal S. Aellig
orcid: 0009-0008-9039-5646
affiliation: 2
- name: Christian Schuler
orcid: 0009-0004-9873-9774
affiliation: 2
- name: Ivan Navarrete
orcid: 0009-0004-9272-511X
affiliation: 3
- name: Ludovic Räss
orcid: 0000-0002-1136-899X
affiliation: 4
- name: Lukas Fuchs
orcid: 0000-0002-9165-6384
affiliation: 5
- name: Boris J.P. Kaus
orcid: 0000-0002-0247-8660
affiliation: 2
- name: Hugo Dominguez
orcid: 0009-0001-8425-0503
affiliation: 2

affiliations:
- name: ETH Zürich, Switzerland
index: 1
- name: Johannes Gutenberg-University Mainz, Germany
index: 2
- name: École Normale Supérieure - PSL University, France
index: 3
- name: University of Lausanne, Switzerland
index: 4
- name: Frankfurt University, Germany
index: 5

date: 21 October 2025
bibliography: paper.bib
---

# Summary

`JustRelax.jl` is an open source, highly portable, and high-performance [Julia](https://julialang.org/) [@bezanson2017julia] package designed for geodynamic modeling. It employs the Accelerated Pseudo-Transient (APT) method —a matrix-free, embarrassingly parallel iterative method— to solve the Stokes and diffusion equations, making it well-suited to exploit Graphics Processing Unit (GPU) hardware accelerators.

`JustRelax.jl` incorporates a wide range of features critical to computational geodynamics, including complex and highly non-linear rheologies, free surface, and a particle-in-cell method to advect material information. Several of the features available in `JustRelax.jl` are are outsourced to specialized external packages, reducing the core code base, and improving maintainability and reusability.

# Statement of Need

Simulating Earth's thermo-mechanical evolution requires solving coupled, nonlinear Stokes and heat‑diffusion problems across large domains with sharp material contrasts, complex rheologies and long time scales. These calculations are computationally demanding and traditionally rely on monolithic, CPU‑oriented codes built around matrix‑based linear solvers. Such designs are hard to port efficiently to modern heterogeneous HPC systems (e.g. multi‑GPU nodes).

`JustRelax.jl` addresses this gap by providing a compact, modular, GPU‑ready toolkit implemented in Julia. It implements a matrix‑free Accelerated Pseudo‑Transient (APT) solver that reduces global linear‑algebra bottlenecks and ports efficiently to accelerators, while outsourcing some physical calculations, parallalelization, and IO to other packages, shown in \ref{fig:dependencies}. This keeps the core solver as contained as possible and makes the software more flexible. Julia’s high‑level syntax and package manager simplify installation, scripting and extension, lowering the barrier for students and researchers to prototype and test new physics.

![Sketch of the main dependencies of `JustRelax.jl`: a) physics packages: material properties and rheology ([GeoParams.jl](https://github.com/JuliaGeodynamics/GeoParams.jl) [@GeoParams]), Particles-in-Cell based advection ([JustPIC.jl](https://github.com/JuliaGeodynamics/JustPIC.jl) [@JustPIC], where data structures are handled by [CellArrays.jl](https://github.com/omlins/CellArrays.jl)); b) parallelization: domain decomposition and distributed parallelism is handled by [ImplicitGlobalGrid.jl](https://github.com/eth-cscs/ImplicitGlobalGrid.jl) [@Omlin2024] and [MPI.jl](https://github.com/JuliaParallel/MPI.jl) [Byrne2021], and backend abstraction is implemented with [ParallelStencil.jl](https://github.com/omlins/ParallelStencil.jl) [@Omlin2024], which supports Julia's native multi-threading ([Threads.jl](https://docs.julialang.org/en/v1/manual/multi-threading/)), and NVIDIA ([CUDA.jl](https://github.com/JuliaGPU/CUDA.jl) [besard2018juliagpu]) and [AMDGPU.jl](https://github.com/JuliaGPU/AMDGPU.jl) GPU cards; and c) I/O and data visualization: HDF5 binary files ([HDF5.jl](https://github.com/JuliaIO/HDF5.jl) and [JLD2.jl](https://github.com/JuliaIO/JLD2.jl)), and VTK files for visualization ([WriteVTK.jl](https://github.com/JuliaVTK/WriteVTK.jl) [@WriteVTK]). \label{fig:dependencies}](figs/dependencies.png){width=75%}

In short, `JustRelax.jl` delivers a high‑performance, portable alternative to legacy geodynamics codes: it (i) exploits modern GPUs without extensive rewrites; (ii) avoids costly matrix assembly via matrix‑free algorithms; and (iii) promotes modularity, reproducibility, and rapid development. Together with CI, scalable I/O and checkpointing, these features make `JustRelax.jl` practical for both exploratory studies and production‑scale simulations on modern multi-XPU platforms.

# Methods

`JustRelax.jl` solves the (in)compressible Stokes equations, described by the equations of conservation of momentum and mass, as well as the conservation of energy equation. This system of equations is solved using the APT method [@Raess2022], which transforms the elliptic PDEs into damped wave equations by augmenting them with a second order pseudo-time derivative which should vanish upon convergence, thus recovering the original form of the PDE. For an in-depth description of this method, we refer the reader to @Raess2022.

# Package summary

`JustRelax.jl` features:

- **High-performance and scalable matrix-free solver**: `JustRelax.jl` implements the APT method for (in)compressible Stokes and diffusion problems to circumvent the need for computationally expensive linear algebra operations and direct solvers, significantly improving computational efficiency for large-scale simulations. The embarrassingly parallel nature of the APT method makes it an excellent solver to exploit hardware accelerators. The weak scaling curve of the 3D Stokes solver is shown in Fig. \ref{fig:scaling}, where the parallel efficiency is the wall-time of any simulation normalized against the wall-time of a simulation with a single process. Distributed parallelism across multiple CPU/GPU nodes is achieved with [ImplicitGlobalGrid.jl](https://github.com/eth-cscs/ImplicitGlobalGrid.jl) [@Omlin2024].

![GPU weak scaling performance of `JustRelax.jl` of the three-dimensional backend, demonstrating efficient parallelization and scalability of the Stokes solver. \label{fig:scaling}](figs/efficiency_Stokes3D.png){width=50%}

- **Advanced non-linear rheology**: The package supports a comprehensive suite of geologically relevant rheology models, such as visco-elasto-plastic and non-Newtonian constitutive laws, allowing for simulations with complex Earth-like materials, essential for modeling geological processes at a wide range of scales. All the local material physics calculations are computed by [GeoParams.jl](https://github.com/JuliaGeodynamics/GeoParams.jl) [@GeoParams].

- **Portability**: `JustRelax.jl` is designed to run efficiently on multiple hardware architectures, including CPUs, GPUs (CUDA and AMD), and on multi-node clusters. This portability is achieved through Julia's advanced meta-programming capabilities, which generate the code for the specific target hardware during compile or parse time. This abstraction of the hardware backend is implemented in [ParallelStencil.jl](https://github.com/omlins/ParallelStencil.jl) [@Omlin2024].

- **Continuous integration (CI) and testing**: The package is tested and validated against a suite of benchmarks and model examples to ensure correctness and performance on various hardware. The default CI/CD pipeline is implemented using GitHub Actions, automatically running tests on every commit and pull request. Single GPU CI is run on using JuliaGPU Buildkite and multi-GPU CI executes on the Swiss National Supercomputing Centre (CSCS) ALPS supercomputer. This ensures that the package remains robust and reliable across different hardware architectures and Julia versions.

# Examples

An extensive set of benchmarks and model examples are available in the GitHub repository of [`JustRelax.jl`](https://github.com/PTsolvers/`JustRelax.jl`). Some examples such as [shear band localization](https://ptsolvers.github.io/`JustRelax.jl`/dev/man/ShearBands), [2D subduction](https://ptsolvers.github.io/`JustRelax.jl`/dev/man/subduction2D/subduction2D) or the rise of a [3D plume](https://ptsolvers.github.io/`JustRelax.jl`/dev/man/plume3D/plume3D) are described in the [documentation](https://ptsolvers.github.io/`JustRelax.jl`/dev/). Here we limit ourselves to show some snapshots of the results of these examples in Fig. \ref{fig:examples}.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
An extensive set of benchmarks and model examples are available in the GitHub repository of [`JustRelax.jl`](https://github.com/PTsolvers/JustRelax.jl). Some examples such as [shear band localization](https://ptsolvers.github.io/JustRelax.jl/dev/man/ShearBands), [2D subduction](https://ptsolvers.github.io/JustRelax.jl/dev/man/subduction2D/subduction2D) or the rise of a [3D plume](https://ptsolvers.github.io/JustRelax.jl/dev/man/plume3D/plume3D) are described in the [documentation](https://ptsolvers.github.io/JustRelax.jl/dev/). Here we limit ourselves to show some snapshots of the results of these examples in Fig. \ref{fig:examples}.


![Model examples from the documentation: a) 2D shear band localization of a visco-elasto-viscoplastic body ($10240 \times 10240$ cells), b) 2D subduction ($512 \times 512$ cells), and c) raising of a hot plume in 3D ($128 \times 128 \times 128$ cells). All models were run on one NVIDIA GH200 Grace Hopper GPU. \label{fig:examples}](figs/models_JOSS.png)

# Acknowledgments
We acknowledge funding by the Swiss Platform for Advanced Scientific Computing (PASC) as part of the [GPU4GEO & $\partial$GPU4GEO](https://gpu4geo.org/) project, and the European Research Council through the MAGMA project, ERC Consolidator Grant #771143.

# References
Loading
Loading