<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">GMD</journal-id><journal-title-group>
    <journal-title>Geoscientific Model Development</journal-title>
    <abbrev-journal-title abbrev-type="publisher">GMD</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Geosci. Model Dev.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">1991-9603</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/gmd-19-9781-2026</article-id><title-group><article-title>High-performance geodynamics on GPUs using  the PETSc CUDA backend (GAUZZ v1.0.0)</article-title><alt-title>High-performance geodynamics on GPUs using the PETSc CUDA backend (GAUZZ v1.0.0)</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Lee</surname><given-names>Kyeong-Min</given-names></name>
          
        <ext-link>https://orcid.org/0009-0003-2583-0772</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Jang</surname><given-names>Deok-Kyu</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff4">
          <name><surname>Thieulot</surname><given-names>Cedric</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-6636-2862</ext-link></contrib>
        <contrib contrib-type="author" corresp="yes" rid="aff1 aff2">
          <name><surname>So</surname><given-names>Byung-Dal</given-names></name>
          <email>bdso@kangwon.ac.kr</email>
        <ext-link>https://orcid.org/0000-0002-9294-7896</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Interdisciplinary Program in Earth Environmental System Science &amp; Engineering,  Kangwon National University, Chuncheon, Republic of Korea</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Department of Geophysics, Kangwon National University, Chuncheon, Republic of Korea</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Research Institute for Mathematical Sciences, Kangwon National University, Chuncheon, Republic of Korea</institution>
        </aff>
        <aff id="aff4"><label>4</label><institution>Department of Earth Sciences, Utrecht University, Princetonlaan 8A, Utrecht, the Netherlands</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Byung-Dal So (bdso@kangwon.ac.kr)</corresp></author-notes><pub-date><day>13</day><month>October</month><year>2026</year></pub-date>
      
      <volume>19</volume>
      <issue>19</issue>
      <fpage>9781</fpage><lpage>9805</lpage>
      <history>
        <date date-type="received"><day>1</day><month>May</month><year>2026</year></date>
           <date date-type="rev-request"><day>20</day><month>May</month><year>2026</year></date>
           <date date-type="rev-recd"><day>25</day><month>September</month><year>2026</year></date>
           <date date-type="accepted"><day>28</day><month>September</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Kyeong-Min Lee et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026.html">This article is available from https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026.html</self-uri><self-uri xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026.pdf">The full text article is available as a PDF file from https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e133">GPUs provide much higher memory bandwidth than CPUs. Data-parallel computations with regular memory access patterns exploit the GPU architecture efficiently. To solve the Stokes equations, we apply a preconditioned conjugate-gradient (PCG) method to the Schur complement system. The algorithm is dominated by sparse matrix-vector products, vector inner products, vector updates, and repeated velocity subproblem solves, all of which map onto GPU architectures. We implement the solver in GAUZZ v1.0.0 on GPUs by coupling CUDA-enabled PETSc with FEniCS. PETSc AIJCUSPARSE matrices with CUDA vectors keep operators and field vectors resident in VRAM, which limits CPU-GPU transfers. The <inline-formula><mml:math id="M1" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> mass matrix, the gradient operator, and the divergence operator are reused in the pressure-correction <inline-formula><mml:math id="M2" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection step. HYPRE BoomerAMG was adopted for preconditioning the velocity-only subproblem. Accuracy and performance are evaluated on a manufactured solution, the SolCx benchmark, the sticky-air benchmark, 2D Rayleigh–Taylor instabilities, 3D thermo-mechanical convection, and a 2D subduction model with nonlinear viscosity. We confirm that the GPU-based implementation reproduces CPU solutions. Performance is quantified by the execution time of the pressure-correction step and by throughput, defined as the number of Stokes degrees of freedom divided by the execution time of one Stokes solve. A single GPU delivers 6–<inline-formula><mml:math id="M3" display="inline"><mml:mrow><mml:mn mathvariant="normal">11</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the throughput of a 32-core CPU across the Stokes benchmarks. Two GPUs increase the throughput at sufficiently large problem sizes, reaching up to <inline-formula><mml:math id="M4" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.1</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the single-GPU throughput. The two-GPU configuration also extends the maximum problem size to <inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.5</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs, beyond the 48 GB VRAM limit of a single GPU.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>National Research Foundation of Korea</funding-source>
<award-id>RS-2025-02293161</award-id>
<award-id>RS-2022-NR069527</award-id>
<award-id>RS-2019-NR040076</award-id>
<award-id>RS-2025-25428518</award-id>
<award-id>RS-2025-00519120</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e202">Numerical geodynamic modelling has advanced the understanding of plate tectonics and planetary interior physics, including subduction (Yoshida et al., 2012; Keum and So, 2021, 2023; Seong et al., 2026), rifting (Huismans and Beaumont, 2003; Brune et al., 2012; Wolf et al., 2022), folding (Schmalholz, 2008; Do et al., 2023, 2025), plumes (d'Acremont et al., 2003; Gerya et al., 2015; Wang and Li, 2021), and convection (Davies and Gurnis, 1986; Crameri and Tackley, 2015). Over geological time scales spanning millions of years, solid planetary materials flow at low Reynolds numbers due to high viscosity (Gassmöller et al., 2020; Pysklywec and Shahnas, 2003). Thermal heterogeneity and density contrasts drive buoyant flow, governing the heat and material redistribution (Kronbichler et al., 2012; Adams et al., 2023; Regorda et al., 2023; Schools and Smrekar, 2024).</p>
      <p id="d2e205">Geodynamic fluid motion is represented by creeping Stokes flow at an infinite Prandtl number (Tan and Gurnis, 2007; Liao and Gerya, 2015). The velocity field obtained from the Stokes equations drives the advection of heat and mantle material, capturing the evolution of planetary interiors from the surface to the core (Schmeling, 2010; Burstedde et al., 2013; Lee et al., 2024). Resolving the coupled, time-dependent Stokes-advection system requires repeated solutions of the Stokes operator. At each time step, the viscosity and density fields are updated. Viscosity often depends nonlinearly on temperature, pressure, composition, and strain rate, which substantially increases the computational cost. Strategies for solving the Stokes equations include direct factorization methods such as LU or LDL<sup><italic>T</italic></sup> decomposition (Amestoy et al., 2001; Schenk et al., 2001) and iterative Krylov subspace methods that converge within a specified tolerance (Hestenes and Stiefel, 1952; Saad and Schultz, 1986; Muzhinji et al., 2016).</p>
      <p id="d2e217">Efficient solvers for the nonlinear Stokes equations remain essential for numerical simulations of mantle flow with temperature- and strain-rate-dependent viscosity. The strength of mantle and lithospheric rock follows a power-law rheology that links stress to strain-rate, rendering viscosity a function of the strain-rate invariant derived from velocity gradients. Newton and Picard iterations are used to solve for the velocity field. For each nonlinear iteration, the solver linearizes the strongly nonlinear Stokes system and updates viscosity based on the most recent velocity estimate. The iterative procedure repeats until velocity and pressure converge, constituting a principal source of computational expense in geodynamic models due to the tight coupling between viscosity and velocity.</p>
      <p id="d2e220">Three-dimensional (3D) geodynamic simulations resolved on a <inline-formula><mml:math id="M7" display="inline"><mml:mrow><mml:mi>N</mml:mi><mml:mo>×</mml:mo><mml:mi>N</mml:mi><mml:mo>×</mml:mo><mml:mi>N</mml:mi></mml:mrow></mml:math></inline-formula> grid with finite elements <inline-formula><mml:math id="M8" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> yield <inline-formula><mml:math id="M9" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi>N</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> degrees of freedom (DOFs). A direct solver requires memory that grows as <inline-formula><mml:math id="M10" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi>N</mml:mi><mml:mn mathvariant="normal">4</mml:mn></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> (Chen et al., 2018). To overcome memory limitations, Krylov methods such as GMRES or MINRES are commonly used for the full saddle-point Stokes system, while CG is typically applied to symmetric positive-definite sub-blocks (e.g., velocity blocks or Schur complements). The convergence rate of an iterative solver depends critically on the choice of preconditioner. Multigrid preconditioning represents standard practice for simulations at high spatial resolution. Algebraic multigrid (AMG) accelerates convergence by automatically constructing a hierarchy of coarse level representations from the matrix coefficients alone, without requiring an explicit coarse mesh. This property makes AMG particularly suitable for unstructured finite-element discretization.</p>
      <p id="d2e292">Many geodynamic problems, such as incompressible viscoelasticity (Zhong et al., 2003; Beuchert and Podladchikov, 2010) and the Stokes equations (Tan and Gurnis, 2007), are formulated as saddle-point problems imposing an incompressibility constraint. Eliminating the velocity unknown from the saddle-point system yields the Schur complement equation for pressure, which can be solved iteratively (Uzawa, 1989; Moresi et al., 1996; Leng and Zhong, 2008). At each iteration, the current pressure <inline-formula><mml:math id="M11" display="inline"><mml:mi>p</mml:mi></mml:math></inline-formula> enters the source term, and the algorithm subsequently computes the velocity components <inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>u</mml:mi><mml:mo>,</mml:mo><mml:mi>v</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> from the velocity-only submatrix. The velocity-only submatrix of the Stokes system is symmetric positive definite. AMG-preconditioned CG or GMRES solves the velocity subproblem efficiently (Clevenger and Heister, 2021). Each pressure-correction iteration requires one such velocity subproblem solve, making it the dominant computational cost. A widely used alternative is to solve the full saddle-point system with block-preconditioned FGMRES, where the Schur complement is approximated by a viscosity-weighted mass matrix or BFBT-type preconditioner (Benzi et al., 2005; May and Moresi, 2008; Rudi et al., 2017). However, even with restart, FGMRES stores substantially more Krylov basis vectors per cycle than the CG-based approach and restart itself may degrade convergence. Additional memory is required to store the Krylov basis vectors generated during each FGMRES restart cycle. In contrast, short-recurrence Krylov methods such as BiCGStab and IDR(s) maintain a fixed storage requirement independent of the iteration number. Clevenger and Heister (2021) used BiCGStab and IDR(s) to solve the full Stokes system in 3D mantle convection simulations. Applying CG to the pressure Schur complement system forms a nested iteration structure. The outer CG iteration updates the pressure, while each Schur-complement evaluation requires an inner linear solve with the velocity stiffness matrix. Despite the nested structure, the outer iteration requires only a fixed, small number of pressure- and velocity-space vectors. The inner velocity solve adds separate Krylov storage. As problem size grows in 3D, where DOFs scale as <inline-formula><mml:math id="M13" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi>N</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, the velocity subproblem solve increasingly dominates the total computation time, and efficient preconditioning becomes essential. Several CPU-based geodynamic community codes have been developed to handle such complex systems, including ASPECT (Kronbichler et al., 2012), Fluidity (Davies et al., 2011), CitcomS (Zhong et al., 2008), FANTOM (Thieulot, 2011), Underworld2 (Mansour et al., 2020), and pTatin3D (May et al., 2015). Such packages have been widely applied to simulate large-scale geodynamic processes, such as continental rifting (Neuharth et al., 2021; Chang and So, 2025; Jang and So, 2026), subduction (Suchoy et al., 2021), and mantle plume dynamics (Xie et al., 2024; Roy et al., 2024). Parallel execution is typically achieved through MPI (Message Passing Interface) libraries such as MPICH and Open MPI (Thakur et al., 2005; Graham et al., 2006). The MPI-based architecture delivers strong scalability, yielding near-linear speedup on thousands of CPU cores (Burstedde et al., 2013).</p>
      <p id="d2e339">A GPU integrates thousands of arithmetic units designed for massively parallel computation (Ta et al., 2015). A CPU uses a few complex cores designed for fast sequential computation. The GPU also accesses memory at a higher bandwidth than the CPU, with theoretical peaks of 960 and 153.6 <inline-formula><mml:math id="M14" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> for the NVIDIA RTX 6000 Ada Generation and the Xeon Gold 6338 workstation used in this study, respectively. Sparse matrix–vector products and vector updates dominate the cost of Krylov solvers (May et al., 2015). Both operations perform approximately one multiplication and one addition per value read from memory (Williams et al., 2009). The low ratio of arithmetic to memory traffic, termed arithmetic intensity, makes memory bandwidth, rather than the number of arithmetic units or cores, a strong control on the cost of the two operations. Preconditioning and other solver steps also contribute to the time per Krylov iteration.</p>
      <p id="d2e359">To date, GPU-based solutions of the Stokes equations in geodynamic modelling have often used pseudo-transient (PT) methods (Räss et al., 2022), which have also been extended to fluid flow and to elastic, viscoelastic, and hydromechanical problems (Wang et al., 2022; Alkhimenkov and Podladchikov, 2025). PT methods augment the governing equations with pseudo-time derivatives and integrate them explicitly until the residuals are reduced below a prescribed tolerance. In the cited Stokes implementations, the explicit update applies local finite-difference stencils on regular staggered grids, requiring no assembly of global matrices. The matrix-free formulation keeps the memory footprint small, which suits GPUs with limited device memory. The accelerated PT method adds pseudo-time terms that give rise to damped-wave dynamics (Räss et al., 2022). With near-optimal iteration parameters, the iteration count grows approximately linearly, rather than quadratically, with the number of grid cells along one dimension. Räss et al. (2022) demonstrated convergence for viscosity contrasts of up to nine orders of magnitude. Convergence slowed in some of the high-contrast cases. In contrast, GPU implementations of Krylov solvers with algebraic multigrid preconditioning, the standard approach in finite-element geodynamic codes, have received less attention.</p>
      <p id="d2e362">PETSc (Portable, Extensible Toolkit for Scientific Computation; Balay et al., 2025) provides a unified interface to Krylov subspace solvers, sparse matrix storage, and external preconditioner packages across both CPU and GPU environments. Among its external interfaces, the HYPRE library and its BoomerAMG algebraic multigrid preconditioner (Falgout et al., 2006) are particularly relevant to geodynamic applications, where viscosity contrasts of <inline-formula><mml:math id="M15" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>–<inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> render the discretized Stokes system highly ill-conditioned. Since version 3.16 (released in September 2021), PETSc has supported GPU-resident execution of HYPRE preconditioners, enabling the entire Krylov iteration, including matrix–vector products, vector operations, and AMG preconditioning cycles, to remain on the GPU, minimising host–device data transfer. However, in geodynamic modelling, the performance of BoomerAMG on GPUs has not yet been systematically evaluated, and quantitative comparisons between the GPU and CPU environments remain limited.</p>
      <p id="d2e387">In this study, we developed a solver for the Stokes system using FEniCS, an open-source finite element platform (Alnæs et al., 2015). The saddle-point system is reduced via the Schur complement, and the resulting pressure equation is solved by a preconditioned conjugate-gradient (PCG) method with the inverse viscosity mass matrix. Both CPU and GPU execution paths are provided. The CPU path links against PETSc 3.15.5, while the GPU path links against PETSc 3.23.2 compiled with CUDA support, storing all matrices and vectors in GPU VRAM using the AIJCUSPARSE and CUDA vector types. To benchmark CPU and GPU performance, we selected a suite of benchmark problems from computational geodynamics, including manufactured solutions, the SolCx viscosity-discontinuity benchmark, sticky-air free-surface tests, 2D Rayleigh–Taylor instabilities, 3D thermo-mechanical convection, and a subduction scenario with nonlinear mantle viscosity. For problems that involve advection, we also evaluated the performance of the advection equation solver. A comparison with block-preconditioned Stokes solvers widely adopted in geodynamic community codes is presented in Sect. 5.4. All experiments were performed on three machines with different performance characteristics. The first workstation used an Intel Xeon Gold 6338 processor (2.00 GHz, 48 MB cache, 32 physical cores and 64 threads). The second workstation used an Intel Xeon w5-2465X processor (3.10 GHz, 33.75 MB cache, 16 physical cores and 32 threads) and an NVIDIA RTX 6000 Ada Generation GPU with 48 GB of memory. The third workstation used the same processor but was paired with two NVIDIA RTX 6000 Ada Generation GPUs, each with 48 GB of memory (96 GB in total). The Xeon Gold 6338 supports eight DDR4-3200 memory channels, six of which are populated in the CPU workstation used here, giving a theoretical memory bandwidth of 153.6 <inline-formula><mml:math id="M17" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. The theoretical bandwidth per NVIDIA RTX 6000 Ada Generation is 960 <inline-formula><mml:math id="M18" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. We measured the sustained bandwidth with a memory benchmark based on the vector update <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:mi>a</mml:mi><mml:mo>=</mml:mo><mml:mi>a</mml:mi><mml:mo>+</mml:mo><mml:mi>s</mml:mi><mml:mo>⋅</mml:mo><mml:mi>b</mml:mi></mml:mrow></mml:math></inline-formula>, following the approach of Deakin et al. (2018). The benchmark sustained 824.0 <inline-formula><mml:math id="M20" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on a single GPU (86 % of the peak) and 113.2 <inline-formula><mml:math id="M21" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU (74 % of the peak) (Table S1 in the Supplement). All CPU execution times reported in this study were measured on the first workstation, with one MPI rank assigned to each physical core. The second and third workstations were used for the single-GPU and two-GPU calculations, respectively. In both GPU systems, the Xeon w5-2465X processor handled matrix assembly, mesh-related operations, and CPU–GPU data management, while the linear solves were executed on the GPU. Unlike previous GPU-based geodynamic studies, which primarily rely on PT formulations, our study directly evaluates the performance of Krylov solvers with algebraic multigrid preconditioning for mixed finite-element Stokes systems on GPUs.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methods</title>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Governing equations</title>
      <p id="d2e493">Lithospheric deformation and mantle flow associated with geodynamic processes are described by the Stokes equations for incompressible viscous creeping flow (Eqs. 1 and 2). We incorporated the thermal (<inline-formula><mml:math id="M22" display="inline"><mml:mi mathvariant="italic">Ra</mml:mi></mml:math></inline-formula>) and compositional (<inline-formula><mml:math id="M23" display="inline"><mml:mi mathvariant="italic">Rb</mml:mi></mml:math></inline-formula>) Rayleigh numbers (Eq. 3) into the buoyancy term (e.g., van Keken et al., 1997; Tan et al., 2011). Equations (1) and (4) assume a general form, with each benchmark activating only the terms required by the physical setting. Thermal-buoyancy cases set <inline-formula><mml:math id="M24" display="inline"><mml:mrow><mml:mi mathvariant="italic">Rb</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>, while compositional-buoyancy cases set <inline-formula><mml:math id="M25" display="inline"><mml:mrow><mml:mi mathvariant="italic">Ra</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> in the absence of a temperature field. The presence of a temperature field determines whether Eq. (4) enters the solution. Each calculation adopts one of the two settings alone, keeping the thermal and compositional drivers separate.

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M26" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E1"><mml:mtd><mml:mtext>1</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mtable columnspacing="1em" rowspacing="0.2ex" class="aligned" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>+</mml:mo><mml:mfenced close="]" open="["><mml:mrow><mml:mi mathvariant="italic">Ra</mml:mi><mml:mi>T</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="italic">Rb</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi>C</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mover accent="true"><mml:mi mathvariant="bold-italic">z</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mtext>where  </mml:mtext><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">η</mml:mi><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mtext>  and  </mml:mtext><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mo mathsize="1.1em">(</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup><mml:mo mathsize="1.1em">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E2"><mml:mtd><mml:mtext>2</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E3"><mml:mtd><mml:mtext>3</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="italic">Ra</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mi>g</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>T</mml:mi><mml:msup><mml:mi>h</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:mi mathvariant="italic">κ</mml:mi><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mtext>  and  </mml:mtext><mml:msub><mml:mi mathvariant="italic">Rb</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mi>g</mml:mi><mml:msup><mml:mi>h</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:mi mathvariant="italic">κ</mml:mi><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          <inline-formula><mml:math id="M27" display="inline"><mml:mi>p</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M28" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M29" display="inline"><mml:mi mathvariant="bold-italic">τ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M30" display="inline"><mml:mi mathvariant="italic">η</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M31" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">z</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula>, and <inline-formula><mml:math id="M32" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:math></inline-formula> denote pressure, velocity vector, the deviatoric stress tensor, shear viscosity, the upward unit vector, and the deviatoric strain-rate tensor, respectively. <inline-formula><mml:math id="M33" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M34" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula> refer to the temperature and composition fields, respectively. <inline-formula><mml:math id="M35" display="inline"><mml:mi mathvariant="italic">κ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M36" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M37" display="inline"><mml:mi>h</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M38" display="inline"><mml:mi>g</mml:mi></mml:math></inline-formula> are thermal diffusivity, reference viscosity, the depth of the domain, and gravitational acceleration, respectively. <inline-formula><mml:math id="M39" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M40" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M41" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> represent the thermal expansivity, reference density, temperature contrast between the bottom and top, and the density contrast of the <inline-formula><mml:math id="M43" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>th composition relative to <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, respectively. For the Stokes system, we employ two mixed finite-element pairs, the Taylor–Hood element (<inline-formula><mml:math id="M45" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) and the MINI element (<inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>). Both discretizations use the same <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> pressure space, while the <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> velocity space enriches <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> with bubble functions. The pair <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is commonly referred to as the MINI element in the geodynamics literature (Thieulot and Bangerth, 2025). The MINI element was adopted to reduce the total number of DOFs in high-resolution and 3D simulations. The thermal evolution of the system is governed by the advection-diffusion equation (Eq. 4).

            <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M51" display="block"><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi>T</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1043">The temporal evolution of the multi-composition field depends only on advection through the velocity field. We adopted a level-set method to reduce oscillations and numerical diffusion of the compositional field under advection-dominated conditions (Hillebrand et al., 2014; Wú et al., 2023). The advection of the level-set function <inline-formula><mml:math id="M52" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula> governs the evolution of the composition field (Eq. 5). The level-set function is reinitialized to a signed-distance function satisfying <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:mo>|</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> by solving the reinitialization equation (Eq. 6) using second-order ENO spatial discretization, a Godunov Hamiltonian, and RK2 pseudo-time integration. 

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M54" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E5"><mml:mtd><mml:mtext>5</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E6"><mml:mtd><mml:mtext>6</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="italic">τ</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:mi>S</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mo>|</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>|</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mtext>where</mml:mtext><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>S</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:msqrt><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">0</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mfrac></mml:mstyle></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          <inline-formula><mml:math id="M55" display="inline"><mml:mi>S</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M56" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M57" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula> denote the smoothed sign function, the level-set function before reinitialization, and the smoothing parameter, respectively, with <inline-formula><mml:math id="M58" display="inline"><mml:mrow><mml:mi mathvariant="italic">ε</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.5</mml:mn><mml:mo>min⁡</mml:mo><mml:mo mathsize="1.1em">(</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo mathsize="1.1em">)</mml:mo></mml:mrow></mml:math></inline-formula>. <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are the numbers of grid cells in the <inline-formula><mml:math id="M61" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M62" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> directions, respectively. The level-set function <inline-formula><mml:math id="M63" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula> is a continuous scalar field with the interface defined by <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>. The different material domains are distinguished by <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>. Using the composition field obtained via the level-set functions, density and the logarithm of viscosity were linearly interpolated. To define <inline-formula><mml:math id="M67" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> compositions, <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> level-set functions are required. We employed one to four level-set functions (one for Rayleigh–Taylor instability and four for the subduction model).</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Saddle-point problem and Schur complement solver</title>
      <p id="d2e1384">Discretization of the incompressible Stokes equations yields a <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> block saddle-point system (Eq. 7).

            <disp-formula id="Ch1.E7" content-type="numbered"><label>7</label><mml:math id="M70" display="block"><mml:mrow><mml:mfenced close=")" open="("><mml:mtable class="matrix" columnalign="center center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold">K</mml:mi></mml:mtd><mml:mtd><mml:mi mathvariant="bold">G</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd><mml:mtd><mml:mn mathvariant="normal">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mfenced close=")" open="("><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">p</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>=</mml:mo><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">f</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1446">The velocity stiffness matrix <inline-formula><mml:math id="M71" display="inline"><mml:mi mathvariant="bold">K</mml:mi></mml:math></inline-formula> is symmetric and positive definite (Davies et al., 2011). <inline-formula><mml:math id="M72" display="inline"><mml:mi mathvariant="bold">G</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> represent the gradient and divergence operators for the pressure and velocity fields, respectively (Silvester and Wathen, 1994; Benzi et al., 2005; May and Moresi, 2008). <inline-formula><mml:math id="M74" display="inline"><mml:mi mathvariant="bold-italic">f</mml:mi></mml:math></inline-formula> denotes the body force vector. In geodynamic applications, the viscosity contrast ranges from <inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, which leads to an ill-conditioned system and slow convergence of iterative solvers. Furthermore, using a direct solver (e.g., MUMPS) on the full block system causes excessive memory consumption for large-scale problems. Therefore, iterative methods are essential for large-scale problems. One effective approach is to exploit the Schur complement structure of the saddle-point system.</p>
      <p id="d2e1504">With Schur complement reduction, the Stokes system is transformed into a block upper triangular form (Wathen and Silvester, 1993; Eq. 8).

            <disp-formula id="Ch1.E8" content-type="numbered"><label>8</label><mml:math id="M77" display="block"><mml:mrow><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold">K</mml:mi></mml:mtd><mml:mtd><mml:mi mathvariant="bold">G</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn mathvariant="normal">0</mml:mn></mml:mtd><mml:mtd><mml:mi mathvariant="bold">S</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">p</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>=</mml:mo><mml:mfenced close=")" open="("><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mi mathvariant="bold-italic">f</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo><mml:mi mathvariant="bold">S</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold-italic">f</mml:mi></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1602">To solve the equivalent system <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold">G</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold-italic">f</mml:mi></mml:mrow></mml:math></inline-formula>, we apply a PCG iteration with the inverse viscosity mass matrix as preconditioner (Eqs. 9–14; Jang et al., 2025).</p>
      <p id="d2e1647">Initialization:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M79" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E9"><mml:mtd><mml:mtext>9</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="bold">K</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold">G</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mo>(</mml:mo><mml:mtext>initial solve</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E10"><mml:mtd><mml:mtext>10</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mtable class="aligned" rowspacing="0.2ex" columnspacing="1em" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo><mml:mo>=</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>〈</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mfenced close="〉" open="〈"><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">η</mml:mi></mml:mfrac></mml:mstyle><mml:msup><mml:mi>w</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi></mml:mrow></mml:mfenced><mml:mo>=</mml:mo><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo><mml:mo>,</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>(</mml:mo><mml:mtext>initial residual and precond.</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          </p>
      <p id="d2e1818">For <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi></mml:mrow></mml:math></inline-formula>:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M81" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E11"><mml:mtd><mml:mtext>11</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">K</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">G</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi mathvariant="italic">α</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>w</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>〉</mml:mo></mml:mrow><mml:mrow><mml:mo>〈</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:msup><mml:mi>d</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>〉</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>(</mml:mo><mml:mtext>inner solve and step size</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E12"><mml:mtd><mml:mtext>12</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="italic">α</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="italic">α</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mo>(</mml:mo><mml:mtext>vector update</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E13"><mml:mtd><mml:mtext>13</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mtable columnspacing="1em" rowspacing="0.2ex" class="aligned" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo><mml:mo>=</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>〈</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo><mml:mo>,</mml:mo><mml:mfenced close="〉" open="〈"><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">η</mml:mi></mml:mfrac></mml:mstyle><mml:msup><mml:mi>w</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi></mml:mrow></mml:mfenced><mml:mo>=</mml:mo><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>r</mml:mi><mml:mo>〉</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>(</mml:mo><mml:mtext>divergence and precond.</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E14"><mml:mtd><mml:mtext>14</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msup><mml:mi mathvariant="italic">β</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>w</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>〉</mml:mo></mml:mrow><mml:mrow><mml:mo>〈</mml:mo><mml:msup><mml:mi>q</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>w</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>〉</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="italic">β</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>(</mml:mo><mml:mtext>CG update</mml:mtext><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula></p>
      <p id="d2e2243">The pressure is updated along the conjugate direction <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, while the velocity is updated using the corresponding velocity-space vector <inline-formula><mml:math id="M83" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>. The iteration stops when the divergence error (<inline-formula><mml:math id="M84" display="inline"><mml:mrow><mml:mo>∥</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>∥</mml:mo><mml:mo>/</mml:mo><mml:mo>∥</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>∥</mml:mo></mml:mrow></mml:math></inline-formula>) of velocity is lower than the divergence tolerance. The algorithm (Eqs. 9–14) requires only a fixed number of vectors in the outer PCG iteration: approximately four in the pressure space (<inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">q</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M86" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>) and two in the velocity space (<inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>). The inner velocity subproblem is solved with GMRES, requiring a separate Krylov basis. However, the symmetric positive definiteness of the velocity stiffness matrix <inline-formula><mml:math id="M91" display="inline"><mml:mi mathvariant="bold">K</mml:mi></mml:math></inline-formula> also permits CG as an alternative inner solver. CG uses a short recurrence with only a few stored vectors, offering a potential reduction in Krylov-vector memory. A further option applies a fixed number of BoomerAMG V-cycles directly as a spectrally equivalent approximation of <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> within the outer PCG iteration, removing the inner Krylov solver. Outside the velocity subproblem solve (Eq. 11), the remaining operations include vector inner products, scalar–vector multiplications, and vector additions (Eqs. 12 and 14). Memory bandwidth limits the speed of the three operations, which map directly onto GPU architectures. The dominant cost per iteration is the AMG-preconditioned GMRES solve of the velocity subproblem <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:mi mathvariant="bold">K</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">G</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> (Eq. 11), which involves repeated sparse matrix-vector products and preconditioner applications. The <inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection steps that apply the mass matrix and the inverse viscosity mass matrix (Eqs. 10 and 13) also offer substantial potential for GPU acceleration. Evaluating the GPU performance of the velocity subproblem solve and the <inline-formula><mml:math id="M95" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection is therefore essential for assessing the overall solver efficiency.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Numerical implementation</title>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Implementation algorithms on GPUs and CPUs</title>
      <p id="d2e2442">To evaluate the computational efficiency (parallel performance) and accuracy (regarding incompressibility) of solving 2D and 3D geodynamic problems, we established independent CPU-based and GPU-based computing environments. In both environments, we utilised FEniCS (ver. 2019.2.0.64), NumPy (ver. 1.23.5), and PETSc (ver. 3.15.5 on CPU and ver. 3.23.2 on GPU; Balay et al., 2025). Although early development of PETSc focused on MPI-based CPU parallel computing, CUDA-based GPU support was available in PETSc 3.4 (2013), whose documentation included the AIJCUSPARSE matrix type for sparse-matrix operations on NVIDIA GPUs using the cuSPARSE library. PETSc 3.9 (2018) made CUDA-based GPU backends available in the release version, rather than only in the development branch. PETSc 3.12 (2019) further refined the VecCUDA interface and introduced in-place vector-array access that avoids unnecessary data transfers from GPU to CPU. PETSc therefore provides GPU-resident vector and sparse-matrix operations required for efficient iterative linear solvers.</p>
      <p id="d2e2445">GPU acceleration is extendable to full Krylov iteration cycles, covering solvers such as CG and GMRES. Within the finite element framework of FEniCS, the PETSc backend provides access to the same Krylov subspace solvers (CG, GMRES, MINRES, and FGMRES) and a broad suite of preconditioners, ranging from incomplete LU to geometric or algebraic multigrid, in both GPU and CPU environments. A previous study (Zheng et al., 2013) reported up to a 4.8-fold speedup for a finite-difference Stokes problem on a single GPU (NVIDIA Tesla C2070) with a customised GMG solver implemented in MATLAB and CUDA, compared with an Intel i7 workstation (4 cores and 8 threads) running MATLAB with C extensions. Nevertheless, attempts to integrate GPU acceleration into well-established FEM software for high-performance geodynamic simulations remain limited.</p>
      <p id="d2e2448">In the pressure correction step of the iterative algorithm, an <inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection using the mass matrix repeatedly projects the divergence of the velocity field onto the <inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> space. With FEniCS GPU acceleration, matrix assembly is performed on CPU cores tied to MPI ranks mapped to GPUs. Although GPU-side matrix assembly has already been developed (Cecka et al., 2011; Markall et al., 2013), performing CPU assembly remains a limitation of our code implemented in FEniCS 2019. Under FEniCS GPU acceleration, sparse matrix assembly runs on the CPU using 1 to 16 cores. A matrix assembled on a single CPU core is solved on 1 GPU. Matrices assembled across multiple CPU cores are solved on 1 or 2 GPUs via NVIDIA Multi-Process Service (MPS). Reassembling the mass matrix at each iteration causes repeated GPU-CPU transfers and synchronization, increasing overhead and overall execution time. To minimise these bottlenecks in the GPU implementation, we adopted a pre-assembly strategy in which the <inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> mass matrix, together with differential operators (gradient and divergence), is assembled only once, then kept resident in GPU memory for reuse throughout subsequent iterations. The memory required for the pre-assembled matrices was 510 MB for <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs and 1.3 GB for <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:mn mathvariant="normal">8.9</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs (Table S2). For a fair comparison between CPU and GPU runs, the same pre-assembly strategy using system memory was also applied to the CPU implementation.</p>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>The BoomerAMG preconditioner in HYPRE</title>
      <p id="d2e2522">We employed the GMRES Krylov subspace solver to solve the system <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:mi mathvariant="bold">K</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">G</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> (Eq. 11) within the pressure Schur complement iteration. To accelerate GMRES convergence, the BoomerAMG algebraic multigrid (AMG) preconditioner from the HYPRE library was applied, interfaced through PETSc (Falgout et al., 2006). In different computing environments (i.e., CPU and GPU platforms), optimal convergence efficiency and computational performance depend on careful tuning of the BoomerAMG preconditioner hyperparameters, including coarsening schemes (e.g., Falgout, Parallel Modified Independent Set (PMIS), and Hybrid Modified Independent Set (HMIS)), smoothers (e.g., Chebyshev, Gauss-Seidel, Jacobi, symmetric SOR, and symmetric Jacobi), and interpolation options (e.g., L-shaped, Extended, and Direct). We optimised the BoomerAMG preconditioner settings by considering architectural differences between a 32-core CPU and a GPU with thousands of arithmetic units.</p>
      <p id="d2e2547">In the GPU environment, we found configurations that exploit massive parallelism while minimising communication and data dependencies. For coarsening, PMIS and HMIS reduced the computational time for coarse-grid construction (De Sterck et al., 2006; Alber and Olson, 2007). To enhance parallel implementation, we adopted the scaled Jacobi method and Extended+i for smoothing and interpolation, respectively (Offermans et al., 2020; Park et al., 2015). A V-cycle served as the multigrid schedule. In multi-core CPU environments, we selected solver configurations that provide strong per-iteration error reduction. We adopted the Falgout algorithm, a standard HYPRE BoomerAMG coarsening strategy, as the default option on the CPU (Falgout et al., 2006; Henson and Yang, 2002). To ensure fairness relative to GPU runs, the HMIS algorithm was tested as an additional coarsening option. Smoothing employed symmetric SOR and Jacobi smoothers, which provide substantial error reduction within a single iteration (Brandt, 1977; MacLachlan and Oosterlee, 2011). Classical interpolation, highly compatible with Falgout coarsening, served as the interpolation scheme (Brannick et al., 2018). As in the GPU configuration, a V-cycle was used for the multigrid schedule.</p>
      <p id="d2e2550">We evaluated the accuracy, execution time, and VRAM usage of the preconditioned conjugate-gradient solver on the GPU using manufactured solutions, the SolCx viscosity-contrast benchmark (Zhong, 1996; Thieulot and Bangerth, 2022), the sticky-air free-surface benchmark (Crameri et al., 2012; Hillebrand et al., 2014), 2D Rayleigh–Taylor instability tests (van Keken et al., 1997; Maljaars et al., 2021), and the thermo-mechanical convection benchmark of Blankenbach et al. (1989). In 3D runs, stable execution was achieved on a <inline-formula><mml:math id="M102" display="inline"><mml:mrow><mml:mn mathvariant="normal">100</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">40</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">100</mml:mn></mml:mrow></mml:math></inline-formula> grid under <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> element discretization on a single 48 GB GPU, despite the limited VRAM capacity of the GPU. Memory distribution efficiency in a two-GPU system was assessed for memory-demanding cases, including high-resolution 3D runs approaching <inline-formula><mml:math id="M104" display="inline"><mml:mrow><mml:mn mathvariant="normal">100</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">80</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">100</mml:mn></mml:mrow></mml:math></inline-formula> using the <inline-formula><mml:math id="M105" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Numerical results</title>
      <p id="d2e2634">To quantify GPU performance, we report execution time and throughput. Execution time refers to the time spent in the pressure-correction stage of one Stokes solve, including the inner GMRES iterations, vector updates, <inline-formula><mml:math id="M106" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projections, and the associated CPU and GPU overheads. Throughput is defined as the total number of Stokes degrees of freedom (velocity and pressure) divided by the execution time of one Stokes solve, in units of <inline-formula><mml:math id="M107" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. Execution time compares hardware configurations at a fixed problem size (Figs. 1–11). Throughput normalizes the cost by problem size. Throughput therefore allows comparison across mesh resolutions, element types, and single- and multi-GPU configurations (Fig. 12). For time-dependent cases (Sects. 4.3–4.6), execution time and throughput are evaluated per time step. For the nonlinear subduction model (Sect. 4.6), the execution time of one time step includes all Picard iterations within the step. Each PCG iteration (Eqs. 11–14) updates the pressure through one cycle of the preconditioned conjugate-gradient method. Within each PCG iteration, the velocity subproblem (Eq. 11) is solved by BoomerAMG-preconditioned GMRES (hereafter referred to as the inner GMRES solve).</p>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Velocity subproblem on GPUs</title>
      <p id="d2e2672">In the PCG solver for Stokes flow, the primary computational cost and memory bottleneck stem from solving the velocity-only submatrix system (Eq. 11). Therefore, to assess the GPU acceleration of the entire PCG solver, we first evaluated the performance of the GPU-based solver specifically for this submatrix system. Computational efficiency between CPU and GPU environments was compared using inner GMRES with the BoomerAMG preconditioner. Accuracy and convergence were verified through a manufactured solution prescribed on <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:msup><mml:mo>]</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, with the corresponding source term derived from the prescribed solution.

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M109" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E15"><mml:mtd><mml:mtext>15</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mtext>where</mml:mtext><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">η</mml:mi><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mtext>  and  </mml:mtext><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mo mathsize="1.1em">(</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup><mml:mo mathsize="1.1em">)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E16"><mml:mtd><mml:mtext>16</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="italic">η</mml:mi><mml:mo>=</mml:mo><mml:mi>exp⁡</mml:mi><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi>c</mml:mi><mml:mo>=</mml:mo><mml:mi>ln⁡</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          
          <inline-formula><mml:math id="M110" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M111" display="inline"><mml:mi mathvariant="italic">η</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M112" display="inline"><mml:mi mathvariant="bold-italic">f</mml:mi></mml:math></inline-formula> denote the velocity vector, viscosity, and prescribed source term, respectively. Viscosity increases exponentially along the <inline-formula><mml:math id="M113" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> direction (Eq. 16), yielding a viscosity contrast of <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. The exact solution <inline-formula><mml:math id="M115" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mtext>exact</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> (Fig. S1 in the Supplement) was prescribed as

            <disp-formula id="Ch1.E17" content-type="numbered"><label>17</label><mml:math id="M116" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mtext>exact</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mfenced close=")" open="("><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>≤</mml:mo><mml:mi>x</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>≤</mml:mo><mml:mi>y</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e2961">The term <inline-formula><mml:math id="M117" display="inline"><mml:mi mathvariant="bold-italic">f</mml:mi></mml:math></inline-formula> is derived by substituting the manufactured solution and viscosity into Eq. (15).

            <disp-formula id="Ch1.E18" content-type="numbered"><label>18</label><mml:math id="M118" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>=</mml:mo><mml:mfenced close=")" open="("><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">π</mml:mi><mml:mi>exp⁡</mml:mi><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>y</mml:mi><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:msup><mml:mi mathvariant="italic">π</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi>exp⁡</mml:mi><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e3084">Dirichlet boundary conditions were imposed on <inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="normal">Ω</mml:mi></mml:mrow></mml:math></inline-formula> as <inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mtext>exact</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e3112">Performance of the AMG-preconditioned GMRES solver was evaluated for single-GPU and multi-core CPU implementations. The velocity fields obtained in the GPU and CPU runs were identical, with the <inline-formula><mml:math id="M121" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error relative to the exact solution remaining on the order of <inline-formula><mml:math id="M122" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. Execution time and the GMRES iteration number were monitored. Comparison across various coarsening strategies showed architecture-dependent optimal choices (GPU versus CPU). In the GPU environment, HMIS converged in 17 iterations within 0.413 s, whereas PMIS required 20 iterations within 0.452 s (Table 1). In the CPU environment, PMIS, HMIS, and Falgout required 60 (21.92 s), 25 (9.76 s), and 13 (5.33 s) GMRES iterations, respectively, to reach convergence. Performance comparisons used the fastest setup on each architecture, with HMIS on GPU and Falgout on CPU. The GPU HMIS setup converged in four more GMRES iterations than the CPU Falgout setup, while achieving a <inline-formula><mml:math id="M123" display="inline"><mml:mrow><mml:mn mathvariant="normal">13</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> speedup in accumulated execution time (Table 2). In execution time comparisons between single-GPU and multi-core-CPU runs, the single-GPU HMIS setup ran faster than all CPU Falgout setups, except for the lowest resolution case (33 282 DOFs) (Fig. 1). For the largest DOF case (8 396 802 DOFs), the single-GPU required 0.413 s, corresponding to an approximately <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:mn mathvariant="normal">13</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> speedup over the 32-core CPU time of 5.331 s.</p>

<table-wrap id="T1"><label>Table 1</label><caption><p id="d2e3164">Comparison of AMG coarsening strategies on the single-GPU and 32-core CPU.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1">Configuration</oasis:entry>
         <oasis:entry colname="col2">Coarsening</oasis:entry>
         <oasis:entry colname="col3">Iterations</oasis:entry>
         <oasis:entry colname="col4">Time to</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">solution (s)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">32-core CPU</oasis:entry>
         <oasis:entry colname="col2">Falgout</oasis:entry>
         <oasis:entry colname="col3">13</oasis:entry>
         <oasis:entry colname="col4">5.331</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">32-core CPU</oasis:entry>
         <oasis:entry colname="col2">HMIS</oasis:entry>
         <oasis:entry colname="col3">25</oasis:entry>
         <oasis:entry colname="col4">9.756</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">32-core CPU</oasis:entry>
         <oasis:entry colname="col2">PMIS</oasis:entry>
         <oasis:entry colname="col3">60</oasis:entry>
         <oasis:entry colname="col4">21.915</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Single-GPU (1-core CPU)</oasis:entry>
         <oasis:entry colname="col2">HMIS</oasis:entry>
         <oasis:entry colname="col3">17</oasis:entry>
         <oasis:entry colname="col4">0.413</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Single-GPU (1-core CPU)</oasis:entry>
         <oasis:entry colname="col2">PMIS</oasis:entry>
         <oasis:entry colname="col3">20</oasis:entry>
         <oasis:entry colname="col4">0.452</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<table-wrap id="T2"><label>Table 2</label><caption><p id="d2e3292">Single-GPU performance and CPU scaling.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="3">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="center"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1">Configuration</oasis:entry>
         <oasis:entry colname="col2">Iterations</oasis:entry>
         <oasis:entry colname="col3">Time to</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">solution (s)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">1-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">52.032</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">2-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">27.400</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">4-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">15.175</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">8-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">9.281</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">16-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">6.391</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">32-core CPU (Falgout)</oasis:entry>
         <oasis:entry colname="col2">13</oasis:entry>
         <oasis:entry colname="col3">5.331</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Single-GPU (HMIS, 1-core CPU)</oasis:entry>
         <oasis:entry colname="col2">17</oasis:entry>
         <oasis:entry colname="col3">0.413</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <fig id="F1"><label>Figure 1</label><caption><p id="d2e3421">Inner GMRES solver execution time analysis for the velocity subproblem in single-GPU (HMIS) with 1-core CPU and multi-core CPU (Falgout) environments. Total execution time to convergence with respect to increasing mesh resolution for the GPU and CPU.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f01.png"/>

        </fig>

</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>SolCx problem</title>
      <p id="d2e3438">We used the 2D SolCx benchmark, which has been widely employed to assess the stability and convergence of GPU Stokes solvers with strong viscosity discontinuities (Zhong, 1996; Duretz et al., 2011; Kronbichler et al., 2012; Gerya et al., 2013). The computational domain is the unit square <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo><mml:mo>×</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> with free-slip boundary conditions on all four sides. The density field was prescribed to vary smoothly. In contrast, the viscosity exhibited a sharp jump at <inline-formula><mml:math id="M126" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula> (Eq. 19). We set <inline-formula><mml:math id="M127" display="inline"><mml:mi mathvariant="italic">Ra</mml:mi></mml:math></inline-formula> to 0 and <inline-formula><mml:math id="M128" display="inline"><mml:mi mathvariant="italic">Rb</mml:mi></mml:math></inline-formula> to a spatially varying field to generate buoyancy (Eq. 20). A single composition field was adopted with <inline-formula><mml:math id="M129" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>.

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M130" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E19"><mml:mtd><mml:mtext>19</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="italic">η</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mfenced open="{" close=""><mml:mtable rowspacing="0.2ex" class="cases" columnspacing="1em" columnalign="left left" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn mathvariant="normal">0</mml:mn><mml:mo>≤</mml:mo><mml:mi>x</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn mathvariant="normal">0.5</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>x</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E20"><mml:mtd><mml:mtext>20</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="italic">Rb</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>≤</mml:mo><mml:mi>x</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mn mathvariant="normal">0</mml:mn><mml:mo>≤</mml:mo><mml:mi>y</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula></p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e3663">Execution time analysis of the SolCx benchmark in GPU and CPU environments. <bold>(a)</bold> Accumulated execution times on the GPU and 32-core CPU under different AMG preconditioner coarsening schemes (Falgout, PMIS, and HMIS). <bold>(b)</bold> Accumulated execution time on the single-GPU (HMIS) and 32-core CPU (Falgout). <bold>(c)</bold> Execution time for five preconditioned conjugate-gradient (PCG) iterations with increasing mesh resolution on the single-GPU (HMIS) and 32-core CPU (Falgout).</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f02.png"/>

        </fig>

      <p id="d2e3681">The viscosity jump of <inline-formula><mml:math id="M131" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> restricts the flow to the low-viscosity half, with the pressure discontinuous across the interface (Fig. S2). We compared the performance of the GPU-accelerated finite-element model with that of the 32-core CPU. The GMRES solver employed a default relative tolerance of <inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. Performance was tested with varying GMRES relative tolerance and mesh resolution, based on the execution time of the PCG solver and velocity error relative to the analytical solution. The number of PCG iterations was fixed at five. After five PCG iterations, the <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error relative to the analytical solution was smaller than <inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> for both GPU and 32-core CPU configurations.</p>
      <p id="d2e3735">We found that the performance of the velocity-only subproblem translated directly into the PCG solver performance (Fig. 2a). HMIS on the GPU and Falgout on the CPU were the most effective choices. In all cases, PCG solver execution time on the single-GPU was shorter than that on the 32-core CPU (Fig. 2a). The GPU achieved an approximately <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:mn mathvariant="normal">8</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> speedup over the 32-core CPU, demonstrating the high efficiency of the GPU architecture. Based on the comparison in Fig. 2a, the HMIS and Falgout coarseners delivered the best performance on a single-GPU and a 32-core CPU, respectively. Thus, the HMIS and Falgout coarseners were used for single-GPU and 32-core CPU performance comparisons in Fig. 2b and c. Then, we compared accumulated execution times for five PCG iterations on a single-GPU and 32-core CPU (Fig. 2b). The single-GPU recorded the shortest execution time at 2.25 s.</p>
      <p id="d2e3748">The performance evaluation with increasing problem sizes exhibited a similar trend (Fig. 2c). As the resolution increased, the gap between the GPU and CPU execution times widened. For all resolutions, the single-GPU delivered shorter execution times than the 32-core CPU environment. This advantage of the GPU was more pronounced for larger problems (Fig. 2c). For the highest resolution (<inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:mn mathvariant="normal">1024</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1024</mml:mn></mml:mrow></mml:math></inline-formula>, 9 447 427 DOFs), the GPU required 2.25 s, while the 32-core CPU required 17.82 s, corresponding to a speedup of approximately <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.9</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula>. The single GPU reached a throughput of <inline-formula><mml:math id="M138" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M139" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, compared with <inline-formula><mml:math id="M140" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.3</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M141" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU. In the memory bandwidth benchmark (Table S1), the GPU sustains 824.0 <inline-formula><mml:math id="M142" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and the 32-core CPU sustains 113.2 <inline-formula><mml:math id="M143" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, a ratio of <inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.3</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula>. The sustained ratio exceeds the theoretical peak ratio of <inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:mn mathvariant="normal">6.25</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> (960 and 153.6 <inline-formula><mml:math id="M146" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GB</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>). The speedups measured across the Stokes benchmarks span 6–<inline-formula><mml:math id="M147" display="inline"><mml:mrow><mml:mn mathvariant="normal">11</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> and cluster around the sustained ratio. The cost of PCG and GMRES is dominated by sparse matrix-vector products, data-parallel operations that map onto the GPU, where high memory bandwidth sustains the streaming access pattern. The unequal fractions of peak bandwidth attained by the GPU and CPU (86 % and 74 %, respectively) widen the sustained ratio beyond the peak ratio. The CPU and GPU versions of BoomerAMG further adopt different coarsening strategies that shift the number of iterations. The measured speedup depends on the cost per iteration and on the number of iterations. The sustained ratio serves as an approximate reference rather than an upper bound.</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e3922">Performance benchmark and detailed execution time analysis of the preconditioned conjugate-gradient (PCG) iterations for the SolCx benchmark. <bold>(a)</bold> Comparison of accumulated execution time as a function of the number of PCG iterations for single-GPU (HMIS) with 1-core CPU, Underworld2 (Mansour et al., 2020; 32-core CPU), and 32-core CPU (Falgout) environments. <bold>(b)</bold> Comparison of the <inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error with respect to the analytical solution as a function of the number of PCG iterations for single-GPU (HMIS) with 1-core CPU, Underworld2 (32-core CPU), and 32-core CPU (Falgout) environments. <bold>(c)</bold> Breakdown of execution time over 3 PCG iterations for the single-GPU with 1-core CPU and 32-core CPU.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f03.png"/>

        </fig>

      <p id="d2e3951">Figure 3a presents the accumulated execution times for the PCG solver on a single-GPU (red line) and a 32-core CPU environment (orange line). Both environments fixed the number of PCG iterations at three. Underworld2 (Mansour et al., 2020) was evaluated on a 32-core CPU using the default settings, including <inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:mi>d</mml:mi><mml:msub><mml:mi>Q</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> quadrilateral elements, at a <inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:mn mathvariant="normal">2048</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2048</mml:mn></mml:mrow></mml:math></inline-formula> resolution. Three pressure-correction iterations were used to solve the Schur-complement system. The velocity-only subsystem was solved using GMG-preconditioned GMRES. In Underworld2, the cumulative execution time over the three iterations was 7.7 s. For comparison with Underworld2, our FEniCS calculations used triangular <inline-formula><mml:math id="M151" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements at the same <inline-formula><mml:math id="M152" display="inline"><mml:mrow><mml:mn mathvariant="normal">2048</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2048</mml:mn></mml:mrow></mml:math></inline-formula> resolution. Over three PCG iterations, the single GPU required 1.2 s, whereas the 32-core CPU required 9.96 s. The single GPU was therefore <inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:mn mathvariant="normal">6.42</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> faster than Underworld2 and <inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:mn mathvariant="normal">8.3</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> faster than the 32-core CPU implementation.</p>
      <p id="d2e4037">We measured the <inline-formula><mml:math id="M155" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error against the analytical solution with respect to PCG iteration number (Fig. 3b). All three configurations reduced the <inline-formula><mml:math id="M156" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error below <inline-formula><mml:math id="M157" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> after the second pressure-correction iteration. The final converged error from the PCG solver was lower than that of Underworld2. This difference is attributed to the larger number of DOFs associated with the <inline-formula><mml:math id="M158" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> element used in FEniCS (8 388 608 DOFs) compared to the <inline-formula><mml:math id="M159" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:msub><mml:mi>Q</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> element used in Underworld2 (4 194 304 DOFs).</p>
      <p id="d2e4101">We measured execution times for individual stages of the PCG solver algorithm (solving velocity-only subsystem, vector update, and projection) to quantify differences between the 32-core CPU run and the GPU run (Fig. 3c). The single-GPU achieved an overall speedup of <inline-formula><mml:math id="M160" display="inline"><mml:mrow><mml:mn mathvariant="normal">8.3</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> relative to the 32-core CPU. The velocity-only subsystem stage dominated the total cost, with 7.53 s of the 9.96 s on the CPU and 1.04 s of the 1.20 s on the GPU, a speedup of <inline-formula><mml:math id="M161" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.2</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula>. The speed of the vector update and projection stages is limited by memory bandwidth. The high memory bandwidth of the GPU reduced the time of the two stages from approximately 2.4 s on the CPU to 0.16 s.</p>
      <p id="d2e4124">We measured the execution time to convergence while decreasing the GMRES relative tolerance from <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> (Fig. 4a). The single-GPU and 32-core CPU configurations attain the minimum execution times at <inline-formula><mml:math id="M164" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, with execution time increasing at smaller tolerances. The single-GPU maintains the lowest execution time across the tested range, requiring 0.6–1.7 s compared with 5.4–15.2 s on the 32-core CPU. The number of outer PCG iterations decreases from seven at <inline-formula><mml:math id="M165" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> to two at <inline-formula><mml:math id="M166" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and remains at two for smaller tolerances. The 7 PCG iterations at <inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> cost more execution time than the 2 iterations at <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on both configurations. A GMRES relative tolerance smaller than <inline-formula><mml:math id="M169" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> delivers both the lower outer PCG iteration number and the shorter execution time. The single-GPU and 32-core CPU require an identical number of outer PCG iterations at each tolerance. For GMRES relative tolerances of <inline-formula><mml:math id="M170" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and smaller, the outer PCG iteration count remains fixed at two. Changes in total execution time therefore reflect the computational cost per outer iteration. We also calculated the <inline-formula><mml:math id="M171" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> errors relative to the analytical solution over the tested tolerance range (Fig. 4b). The velocity error generally decreases as the GMRES relative tolerance is tightened, reaching the order of <inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">11</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> at <inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and remaining at a similar level for tighter tolerances. Below <inline-formula><mml:math id="M174" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, the execution time continues to increase without further improvement in velocity accuracy. The pressure error plateaus near <inline-formula><mml:math id="M175" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> for GMRES relative tolerances below <inline-formula><mml:math id="M176" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. A GMRES relative tolerance of <inline-formula><mml:math id="M177" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> therefore provides converged accuracy without the additional computational cost associated with smaller tolerances. The outer PCG solver converged in two iterations across resolutions from 64<sup>2</sup> to 1024<sup>2</sup> on the single-GPU (Table 4) and 32-core CPU (Table 3), indicating mesh-independent convergence of the Schur-complement iteration. The lower convergence rate of the pressure <inline-formula><mml:math id="M180" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> error with mesh refinement reflects the pressure discontinuity in the SolCx benchmark and the use of a continuous <inline-formula><mml:math id="M181" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> pressure approximation.</p>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e4393">PCG solver performance across inner GMRES relative tolerances for the SolCx benchmark at a <inline-formula><mml:math id="M182" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">2</mml:mn><mml:mn mathvariant="normal">10</mml:mn></mml:msup><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">2</mml:mn><mml:mn mathvariant="normal">10</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> resolution. <bold>(a)</bold> Execution time to convergence on the single-GPU (HMIS, red line) and 32-core CPU (Falgout, blue line), with the number of outer PCG iterations (grey line). The number of outer PCG iterations for convergence is identical for both configurations. <bold>(b)</bold> <inline-formula><mml:math id="M183" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> errors of the velocity (solid) and pressure (dashed) solutions relative to the analytical solution for the single-GPU and 32-core CPU configurations.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f04.png"/>

        </fig>

<table-wrap id="T3" specific-use="star"><label>Table 3</label><caption><p id="d2e4440">Execution time, outer PCG iteration number, and <inline-formula><mml:math id="M184" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> errors with increasing mesh resolution for the SolCx benchmark on a 32-core CPU. The GMRES relative tolerance and divergence tolerance are <inline-formula><mml:math id="M185" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M186" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, respectively.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Resolution</oasis:entry>
         <oasis:entry colname="col2">Stokes DOFs</oasis:entry>
         <oasis:entry colname="col3">Execution time (s)</oasis:entry>
         <oasis:entry colname="col4">PCG iteration</oasis:entry>
         <oasis:entry colname="col5">Velocity <inline-formula><mml:math id="M187" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error</oasis:entry>
         <oasis:entry colname="col6">Pressure <inline-formula><mml:math id="M188" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">64<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">37 507</oasis:entry>
         <oasis:entry colname="col3">0.0679</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M190" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.2005</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.3786</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">128<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">148 739</oasis:entry>
         <oasis:entry colname="col3">0.1506</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.0030</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.0590</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">256<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">592 387</oasis:entry>
         <oasis:entry colname="col3">0.8070</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M196" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.0923</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.1497</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">512<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">2 364 419</oasis:entry>
         <oasis:entry colname="col3">4.0943</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.9689</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">11</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.5152</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">1024<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">9 447 427</oasis:entry>
         <oasis:entry colname="col3">11.0808</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.5796</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">11</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.0696</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<table-wrap id="T4" specific-use="star"><label>Table 4</label><caption><p id="d2e4864">Execution time, outer PCG iteration number, and <inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> errors with increasing mesh resolution for the SolCx benchmark on a single-GPU. The GMRES relative tolerance and divergence tolerance are <inline-formula><mml:math id="M205" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M206" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, respectively.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Resolution</oasis:entry>
         <oasis:entry colname="col2">Stokes DOFs</oasis:entry>
         <oasis:entry colname="col3">Execution time (s)</oasis:entry>
         <oasis:entry colname="col4">PCG iteration</oasis:entry>
         <oasis:entry colname="col5">Velocity <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error</oasis:entry>
         <oasis:entry colname="col6">Pressure <inline-formula><mml:math id="M208" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-error</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">64<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">37 507</oasis:entry>
         <oasis:entry colname="col3">0.0367</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.2005</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.3787</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">128<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">148 739</oasis:entry>
         <oasis:entry colname="col3">0.0439</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.0030</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M214" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.0590</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">256<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">592 387</oasis:entry>
         <oasis:entry colname="col3">0.1278</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M216" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.0928</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M217" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.1498</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">512<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">2 364 419</oasis:entry>
         <oasis:entry colname="col3">0.3383</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.9782</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">11</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M220" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.5152</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">1024<sup>2</sup></oasis:entry>
         <oasis:entry colname="col2">9 447 427</oasis:entry>
         <oasis:entry colname="col3">1.2556</oasis:entry>
         <oasis:entry colname="col4">2</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M222" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.5918</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">11</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M223" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.0696</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

</sec>
<sec id="Ch1.S4.SS3">
  <label>4.3</label><title>3D Thermo-mechanical convection</title>
      <p id="d2e5292">We extended the classical 2D thermo-mechanical convection benchmark of Blankenbach et al. (1989) to a 3D non-rotating Boussinesq fluid to evaluate the performance and memory usage of the GPU solver in three dimensions. The thermal and compositional Rayleigh numbers were set to <inline-formula><mml:math id="M224" display="inline"><mml:mrow><mml:mi mathvariant="italic">Ra</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M225" display="inline"><mml:mrow><mml:mi mathvariant="italic">Rb</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> in Eq. (1), isolating thermal effects by neglecting compositional buoyancy. A 3D rectangular domain (<inline-formula><mml:math id="M226" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">0.4</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>) was employed to quantitatively compare computational performance and velocity-field accuracy between the GPU and CPU environments. The grid resolution was set to <inline-formula><mml:math id="M227" display="inline"><mml:mrow><mml:mn mathvariant="normal">100</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">40</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">100</mml:mn></mml:mrow></mml:math></inline-formula> using the MINI element (<inline-formula><mml:math id="M228" display="inline"><mml:mrow><mml:msubsup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo></mml:msubsup><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>), yielding approximately 8.9 million DOFs for velocity and pressure. Free-slip boundary conditions were applied to all boundaries. For the temperature boundary conditions, nondimensional temperatures of <inline-formula><mml:math id="M229" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M230" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> were prescribed at the top and bottom boundaries, respectively. The initial temperature field <inline-formula><mml:math id="M231" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> consisted of a linear conductive profile with a superimposed long-wavelength perturbation of amplitude <inline-formula><mml:math id="M232" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.02</mml:mn></mml:mrow></mml:math></inline-formula> to initiate natural convection (Eq. 21). As time proceeds, thermal plumes rise from the lower boundary, which leads to a progressive reorganization of the internal temperature field and the heat-flow pattern at the boundaries (Fig. 5).

            <disp-formula id="Ch1.E21" content-type="numbered"><label>21</label><mml:math id="M233" display="block"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi>z</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>z</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula></p>

      <fig id="F5" specific-use="star"><label>Figure 5</label><caption><p id="d2e5467">Time evolution of the temperature field from the single-GPU (HMIS) with 1-core CPU. Snapshots of 3D temperature isosurfaces at nondimensional times <inline-formula><mml:math id="M234" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.019</mml:mn></mml:mrow></mml:math></inline-formula>, 0.063, and 0.248 (from left to right).</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f05.png"/>

        </fig>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e5490">Performance analysis and validation of the 3D thermo-mechanical convection simulation. <bold>(a)</bold> Execution time per step (solid lines) and averaged GMRES iteration numbers (inset bar chart) versus elapsed time. <bold>(b)</bold> Evolution of memory usage over elapsed time, showing GPU VRAM (dotted red line), system memory of the GPU workstation (solid red line), and system memory of the CPU workstation (solid blue line). <bold>(c)</bold> Peak memory usage with respect to increasing degrees of freedom (DOFs), with the dashed black line indicating the 48 GB VRAM capacity of the NVIDIA RTX 6000 Ada.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f06.png"/>

        </fig>

      <p id="d2e5509">We utilised a fixed time step (<inline-formula><mml:math id="M235" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.00025</mml:mn></mml:mrow></mml:math></inline-formula>) with the Crank–Nicolson scheme for time integration. We set the GMRES relative tolerance to <inline-formula><mml:math id="M236" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> for the velocity-only subsystem on both GPU and CPU, continuing the PCG iterations until the divergence error (<inline-formula><mml:math id="M237" display="inline"><mml:mrow><mml:mo>∥</mml:mo><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>∥</mml:mo><mml:mo>/</mml:mo><mml:mo>∥</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>∥</mml:mo></mml:mrow></mml:math></inline-formula>) fell below <inline-formula><mml:math id="M238" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">7</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. The energy equation (Eq. 4) was solved using GMRES with a relative tolerance of <inline-formula><mml:math id="M239" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, utilising BoomerAMG as the preconditioner, configured with HMIS for the GPU and Falgout for the CPU, respectively.</p>
      <p id="d2e5592">For the Stokes equations, the single-GPU (HMIS) achieved the lowest execution time with an average of 1.9 s (Fig. 6a; solid red line), compared with 17.1 s for the 32-core CPU (Falgout) (solid blue line). The speedup relative to the 32-core CPU was approximately <inline-formula><mml:math id="M240" display="inline"><mml:mrow><mml:mn mathvariant="normal">9</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula>. At <inline-formula><mml:math id="M241" display="inline"><mml:mrow><mml:mn mathvariant="normal">8.87</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs, the average execution time per step corresponds to a throughput of <inline-formula><mml:math id="M242" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.7</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M243" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the single GPU and <inline-formula><mml:math id="M244" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M245" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU. The average number of GMRES iterations per time step was 52 on the GPU and 23 on the 32-core CPU (Fig. 6a, coloured bars). The GPU exhibited shorter execution time per time step despite the iteration number being <inline-formula><mml:math id="M246" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.3</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> higher than the CPU baseline. Memory usage measurements for the GPU environment included both VRAM and system memory (RAM) of the workstation (Fig. 6b). The average VRAM and system memory usage per time step were 21.2 GB (dotted red line) and 17.4 GB (solid red line), respectively, for a total of 38.6 GB. In the CPU environment, the average memory usage was 46.3 GB on the 32-core CPU, approximately <inline-formula><mml:math id="M247" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.20</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the total memory usage of the single-GPU configuration.</p>
      <p id="d2e5705">The temporal evolution of the global root-mean-square velocity (<inline-formula><mml:math id="M248" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>) exhibited complete consistency between the GPU and 32-core CPU environments (see Fig. S3). The measurements converged to 42.848, consistent with the value of 42.865 reported by Blankenbach et al. (1989). A Nusselt number (<italic>Nu</italic>) of 4.881 was calculated at the final time step in both configurations, matching the value of 4.884 presented in benchmark studies (Blankenbach et al., 1989; Tackley and King, 2003; King, 2009). To assess memory constraints associated with the multi-level generation of the AMG preconditioner, we measured the maximum memory usage for each computing environment with increasing mesh resolution (Fig. 6c). Measurements for the GPU environment included both VRAM and system memory. At the lowest DOFs (3 352 864), VRAM and system memory usage were 14.5 and 5.7 GB, respectively. At the highest DOFs (8 872 964), VRAM usage reached 45.5 GB, while system memory usage reached 20.6 GB. The 32-core CPU registered 15.3 GB at the lowest DOFs and 47.3 GB at the highest, exhibiting levels comparable to the GPU VRAM usage.</p>
</sec>
<sec id="Ch1.S4.SS4">
  <label>4.4</label><title>2D Rayleigh–Taylor instability</title>
      <p id="d2e5731">The Rayleigh–Taylor instability is a buoyancy-driven flow widely used as a benchmark for evaluating the performance of various advection schemes. Representative approaches include Particle-In-Cell (PIC) methods (e.g., Gerya and Yuen, 2003; van Keken et al., 1997) and level-set methods (e.g., Bourgouin et al., 2006). We set <inline-formula><mml:math id="M249" display="inline"><mml:mrow><mml:mi mathvariant="italic">Ra</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M250" display="inline"><mml:mrow><mml:mi mathvariant="italic">Rb</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, indicating that only compositional buoyancy is activated. The initial interface between the two compositions is defined by a cosine function with an amplitude of 0.02 (Eq. 22). The level-set function was initialized (Eq. 23) from the interface at <inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>. The composition field was set to 1 and 0 where the level-set function was positive and negative (Eq. 24), respectively. The level-set function was reinitialised every 500 steps.

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M252" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E22"><mml:mtd><mml:mtext>22</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi>h</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.02</mml:mn><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi><mml:mo>/</mml:mo><mml:mn mathvariant="normal">0.9142</mml:mn><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="normal">0.2</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E23"><mml:mtd><mml:mtext>23</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mi>y</mml:mi><mml:mo>-</mml:mo><mml:mi>h</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E24"><mml:mtd><mml:mtext>24</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi>C</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mfenced open="{" close=""><mml:mtable class="cases" rowspacing="0.2ex" columnspacing="1em" columnalign="left left" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula></p>
      <p id="d2e5957">For resolving complex velocity and composition structures, we adopted uniform grids with <inline-formula><mml:math id="M253" display="inline"><mml:mrow><mml:mn mathvariant="normal">512</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula> resolution. The Taylor-Hood element (<inline-formula><mml:math id="M254" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) was applied to solve the Stokes equations. We compared the <inline-formula><mml:math id="M255" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> values computed by our FEniCS code with those from previous benchmark models (van Keken et al., 1997; Hillebrand et al., 2014). The advection equation for the level-set function was solved using GMRES preconditioned by HYPRE's BoomerAMG. The average per-step execution time was compared across GPU and CPU environments in the 2D benchmark (Fig. 7a). The GPU completed one step in 0.6 s on average (0.53 s for the Stokes equations and 0.07 s for advection), yielding speedups of <inline-formula><mml:math id="M256" display="inline"><mml:mrow><mml:mo>∼</mml:mo><mml:mn mathvariant="normal">11</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> relative to the 32-core CPU, which required 6.3 s per step. The per-step cost was dominated by solving the Stokes equations (6.2 s for the 32-core CPU). The Stokes solve at <inline-formula><mml:math id="M257" display="inline"><mml:mrow><mml:mn mathvariant="normal">512</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula> (<inline-formula><mml:math id="M258" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.36</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs) reached a throughput of <inline-formula><mml:math id="M259" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.5</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M260" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the single GPU and <inline-formula><mml:math id="M261" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.8</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M262" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU. Despite the substantial improvement in computational efficiency enabled by GPU acceleration, the solution accuracy remains comparable to that of the CPU implementation. This agreement is demonstrated by the time evolution of <inline-formula><mml:math id="M263" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>, which closely matches the CPU simulation (Fig. 7b). Snapshot comparisons at key times (<inline-formula><mml:math id="M264" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">208</mml:mn></mml:mrow></mml:math></inline-formula>, 699, 864, and 1500), when <inline-formula><mml:math id="M265" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> attains local maxima or minima, further support the model accuracy. In addition, the GPU-based model reproduces the reference <inline-formula><mml:math id="M266" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> values from Hillebrand et al. (2014) and van Keken et al. (1997). We also tested the Rayleigh–Taylor instability in 3D on a <inline-formula><mml:math id="M267" display="inline"><mml:mrow><mml:mn mathvariant="normal">65</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">65</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">65</mml:mn></mml:mrow></mml:math></inline-formula> mesh with the MINI element. The single GPU delivered a speedup of <inline-formula><mml:math id="M268" display="inline"><mml:mrow><mml:mo>∼</mml:mo><mml:mn mathvariant="normal">9</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> relative to the 32-core CPU across the entire time range, while the two configurations produced identical <inline-formula><mml:math id="M269" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> values (Fig. S4).</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e6192">Performance analysis and accuracy validation of single-GPU (HMIS) with 1-core CPU and 32-core CPU (Falgout) configurations for the 2D Rayleigh–Taylor instability benchmark. <bold>(a)</bold> Execution time per step for solving the Stokes equations (red bars) and the advection equation (blue bars) across GPU and 32-core CPU configurations. <bold>(b)</bold> Time evolution of the root-mean-square velocity (<inline-formula><mml:math id="M270" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mtext>rms</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>) compared with literature benchmarks (van Keken et al., 1997; Hillebrand et al., 2014). The inset snapshots represent the composition fields computed on the GPU at key time steps (<inline-formula><mml:math id="M271" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">208</mml:mn></mml:mrow></mml:math></inline-formula>, 699, 864, and 1500).</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f07.png"/>

        </fig>


</sec>
<sec id="Ch1.S4.SS5">
  <label>4.5</label><title>Sticky-air benchmarks</title>
      <p id="d2e6240">In geodynamic numerical modelling, the sticky-air technique is a widely used approach for approximating a free surface. Crameri et al. (2012) suggested that to correctly represent a free-surface boundary condition, the sticky-air layer requires a viscosity contrast of <inline-formula><mml:math id="M272" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> relative to the underlying material and a thickness of 100 km, or alternatively a viscosity contrast of <inline-formula><mml:math id="M273" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and a thickness of 200 km. In our study, we set the viscosities of the lithospheric, mantle, and sticky-air layers (with a thickness of 100 km) to <inline-formula><mml:math id="M274" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>litho</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">23</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M275" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Pa</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M276" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>mantle</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">22</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M277" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Pa</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M278" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>air</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">18</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M279" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Pa</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>, respectively. Buoyancy in the sticky-air benchmark is purely compositional. The isothermal configuration of Crameri et al. (2012) fixes <inline-formula><mml:math id="M280" display="inline"><mml:mrow><mml:mi mathvariant="italic">Ra</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> in the absence of a temperature field, leaving Eq. (4) outside the solution. The benchmark constrains the free-surface response alone, with the thermo-mechanical benchmark held separate. The dimensional parameters for the sticky-air benchmark are presented in Table S3. We discretized the Stokes system using <inline-formula><mml:math id="M281" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> finite elements on a <inline-formula><mml:math id="M282" display="inline"><mml:mrow><mml:mn mathvariant="normal">1400</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">800</mml:mn></mml:mrow></mml:math></inline-formula> mesh. The boundary between the lithosphere and the sticky-air was assigned a cosine-shaped perturbation. We compared the maximum topography with the analytical solution from Crameri et al. (2012). The initial composition field (<inline-formula><mml:math id="M283" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula>) is defined as three layers separated by the upper and lower interfaces of the lithosphere (Eq. 25). <inline-formula><mml:math id="M284" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M285" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M286" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> denote sticky-air, lithosphere, and mantle, respectively. Two level-set functions (<inline-formula><mml:math id="M287" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M288" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) were defined for the two interfaces (Eqs. 26 and 27).

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M289" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E25"><mml:mtd><mml:mtext>25</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:mfenced open="{" close=""><mml:mtable columnspacing="1em" rowspacing="0.2ex" class="cases" columnalign="left left" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mtext>else</mml:mtext></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E26"><mml:mtd><mml:mtext>26</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">700</mml:mn><mml:mo>+</mml:mo><mml:mn mathvariant="normal">7</mml:mn><mml:mi>cos⁡</mml:mi><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">π</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mn mathvariant="normal">2800</mml:mn></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>-</mml:mo><mml:mi>y</mml:mi></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E27"><mml:mtd><mml:mtext>27</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mi>y</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">600</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula></p>
      <p id="d2e6673">An initial perturbation imposed on the lithosphere generates a lateral density gradient, which drives upwelling in the centre of the domain and downwelling on both sides, forming two convection cells (Fig. 8a). Advective transport progressively flattens the initial topographic perturbation. At 5.77 kyr, the decaying perturbation weakens the flow in the two convection cells (Fig. 8b). The surface recovers an almost flat geometry by the final time of 100 kyr (Fig. 8c). In contrast, the divergence-free dynamics of mantle and lithosphere flow advect the initially horizontal lithosphere–mantle boundary, producing a secondary perturbation by the final time (Fig. 8c). The maximum topography over the simulation time was identical between the GPU and CPU executions (Fig. 8). The topographies from the CPU and GPU are consistent with the analytical solution and the reported curve of Hillebrand et al. (2014), indicating that the physical solution on GPU remains consistent despite the larger number of GMRES iterations.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e6678">Evolution of maximum topography in the sticky-air benchmark. The dashed red line denotes the single-GPU (HMIS) with 1-core CPU, the solid blue line denotes the 32-core CPU computation, and the dotted black line denotes the analytical solution. <bold>(a–c)</bold> Temporal evolution of the compositional field at <inline-formula><mml:math id="M290" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>, 5.77, and 100 kyr, respectively, from the single-GPU (HMIS, 1-core CPU). The temporal evolution of maximum topography indicates close agreement between the GPU and CPU computations and with the analytical solution.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f08.png"/>

        </fig>

      <p id="d2e6703">Execution time comparison over the total steps shows that the GPU consistently outperformed the 32-core CPU (Fig. 9a). The GPU (HMIS) execution time remained stable within 4.7–11.1 s, whereas the CPU (Falgout) execution time increased from 30 s to more than 100 s (Fig. 9a; solid blue line), corresponding to an overall speedup of roughly 7–<inline-formula><mml:math id="M291" display="inline"><mml:mrow><mml:mn mathvariant="normal">8</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> for the GPU (solid red line). At <inline-formula><mml:math id="M292" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.01</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs, the per-step execution time corresponds to a throughput of 0.9–<inline-formula><mml:math id="M293" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M294" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the single GPU and 1.0–<inline-formula><mml:math id="M295" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M296" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU. The number of PCG iterations varied with simulation time, while the GPU and CPU generally required similar numbers of PCG iterations at each time step (Fig. 9b). Time steps with a larger number of PCG iterations also exhibited a larger number of GMRES iterations within the iteration loop. The GPU and CPU required 250–650 and 150–410 GMRES iterations, respectively.</p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e6799">Performance analysis and accuracy validation of the sticky-air benchmark. <bold>(a)</bold> Execution time per step over elapsed time for the single-GPU (HMIS) with 1-core CPU and 32-core CPU (Falgout). <bold>(b)</bold> Evolution of inner GMRES iteration numbers (left axis) and preconditioned conjugate-gradient (PCG) iteration numbers (right axis).</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f09.png"/>

        </fig>

</sec>
<sec id="Ch1.S4.SS6">
  <label>4.6</label><title>Subduction modelling</title>
      <p id="d2e6822">The subduction application targets 2D nonlinear viscous Stokes flow incorporating a plate interface where one plate descends into the mantle. The computational domain is a rectangle with a width of 3960 km and a depth of 660 km, which is then nondimensionalized (Enns et al., 2005; Capitanio et al., 2010; Sharples et al., 2014). Characteristic scales for nondimensionalization are listed in Table S4. The Stokes system was discretized with <inline-formula><mml:math id="M297" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements on a <inline-formula><mml:math id="M298" display="inline"><mml:mrow><mml:mn mathvariant="normal">1200</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">200</mml:mn></mml:mrow></mml:math></inline-formula> structured grid, where each rectangular cell was subdivided into two triangular elements along the lower left to upper right diagonal. The compositional structure is partitioned into five regions: mantle, overriding plate, upper slab layer, lower slab layer, and slab core. Four level-set functions, <inline-formula><mml:math id="M299" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> through <inline-formula><mml:math id="M300" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mn mathvariant="normal">4</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, delineate the region interfaces.</p>

      <fig id="F10" specific-use="star"><label>Figure 10</label><caption><p id="d2e6879">Temporal evolution of subduction modelling derived from the single-GPU (HMIS). <bold>(a)</bold> Initial model configuration at 0 Myr with the prescribed viscosity structure and buoyancy parameters. <bold>(b)</bold> Subduction geometry at 20 Myr after the slab descends into the upper mantle.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f10.png"/>

        </fig>

      <p id="d2e6894">The upper mantle serves as the reference fluid with viscosity <inline-formula><mml:math id="M301" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>UM</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M302" display="inline"><mml:mrow><mml:mi mathvariant="italic">ρ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>. The overriding plate has the viscosity <inline-formula><mml:math id="M303" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>OP</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">400</mml:mn></mml:mrow></mml:math></inline-formula>, yielding a viscosity contrast of 400 relative to the upper mantle, while its density matches the mantle value. The viscosity of the upper slab layer (<inline-formula><mml:math id="M304" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>US</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>) follows a Mohr–Coulomb plasticity law (Eq. 28).

            <disp-formula id="Ch1.E28" content-type="numbered"><label>28</label><mml:math id="M305" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>US</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mtext>II</mml:mtext></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mtext>II</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>:</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:mrow></mml:msqrt></mml:mrow></mml:math></disp-formula>

          <inline-formula><mml:math id="M306" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M307" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:math></inline-formula>, and <inline-formula><mml:math id="M308" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mtext>II</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> denote the plastic yield stress, strain-rate tensor, and the square root of its second invariant, respectively. <inline-formula><mml:math id="M309" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> was set to 0.06. <inline-formula><mml:math id="M310" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>US</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> is bounded between 1 and 1000 to improve numerical stability. Additionally, at nondimensional depth <inline-formula><mml:math id="M311" display="inline"><mml:mrow><mml:mi>y</mml:mi><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">0.7</mml:mn></mml:mrow></mml:math></inline-formula>, weakening is imposed by prescribing <inline-formula><mml:math id="M312" display="inline"><mml:mrow><mml:mi mathvariant="italic">η</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">50</mml:mn></mml:mrow></mml:math></inline-formula>. The viscosities of the slab core (<inline-formula><mml:math id="M313" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>SC</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>) and lower slab (<inline-formula><mml:math id="M314" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mtext>LS</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula>) are 1000 and 50, respectively. Mohr–Coulomb plasticity in the upper slab layer introduces nonlinear viscosity into the Stokes system, requiring Picard fixed-point iteration with a relative tolerance of <inline-formula><mml:math id="M315" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. As the viscosity contrast increases and compositional interfaces become more complex, the condition number of the discretized Stokes system tends to increase, degrading Krylov solver convergence. We therefore approximated the condition number at each time step using the ratio of the largest to smallest eigenvalues of the stiffness matrix and examined its relationship with the GMRES iteration number and execution time. An initial slab perturbation, pre-subducted to 200 km depth with a 29° dip, triggers subduction (Fig. 10a). The slab maintains a steep dip and ultimately reaches the base of the upper mantle (Fig. 10b).</p>
      <p id="d2e7140">The performance gap between the GPU and CPU persists in the subduction model. Over the full time-stepping sequence, the GPU reduces execution time by a factor of 6–7 relative to the 32-core CPU run (Fig. 11a). In geodynamic simulations, time evolution increases the spatial complexity of density and viscosity fields, often accompanied by large material contrasts. Such conditions worsen the system conditioning, increasing the condition number (purple line in Fig. 11a). Higher condition numbers require more GMRES iterations. In the subduction model, the estimated condition number increases with time step (Fig. 11a). As the condition number increases, execution time increases in both the GPU and CPU runs (Fig. 11b). However, the regression between GMRES iterations per step and condition number shows a steeper slope for the GPU (Fig. 11c). Despite this steeper slope, the GPU remains approximately <inline-formula><mml:math id="M316" display="inline"><mml:mrow><mml:mn mathvariant="normal">6</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> faster in execution time, as its lower per-iteration cost keeps the total execution time shorter. At <inline-formula><mml:math id="M317" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.17</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs, the throughput ranged from <inline-formula><mml:math id="M318" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M319" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.8</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M320" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the single GPU and from <inline-formula><mml:math id="M321" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M322" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M323" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> on the 32-core CPU. The Picard iterations within each step lower the throughput by an order of magnitude relative to the linear benchmarks.</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e7265">Analysis of GPU performance and matrix condition number for subduction modelling. <bold>(a)</bold> Evolution of the condition number and corresponding changes in execution time for single-GPU (HMIS) with 1-core CPU and 32-core CPU (Falgout) over time steps. <bold>(b)</bold> Correlation between the matrix condition number and execution time per step for the subduction model. <bold>(c)</bold> Correlation between the matrix condition number and inner GMRES iterations per step for the subduction model.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f11.png"/>

          
        </fig>

</sec>
<sec id="Ch1.S4.SS7">
  <label>4.7</label><title>Multi-GPU implementation</title>
      <p id="d2e7293">A multi-GPU configuration is essential to overcome the VRAM limit of a single-GPU. At high resolution, the growth in DOFs substantially increases the memory requirements for the stiffness matrix, the preconditioner, and the global force vector. Multi-GPU execution distributes VRAM usage via MPI-based domain decomposition, which also enables additional speedup through parallel execution. Inter-GPU communication and synchronization, however, introduce extra computational costs. We evaluated how throughput varies with resolution by comparing single-GPU and two-GPU configurations across six benchmarks in Sects. 4.1–4.6. In the velocity subproblem using <inline-formula><mml:math id="M324" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements, the single-GPU delivered higher throughput than the two-GPU configuration at the lowest resolution of <inline-formula><mml:math id="M325" display="inline"><mml:mrow><mml:mn mathvariant="normal">128</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn></mml:mrow></mml:math></inline-formula> (<inline-formula><mml:math id="M326" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.32</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs) (Fig. 12a). In the low-resolution regime, communication and synchronization overhead exceeded the performance gain from parallelization. At resolutions of <inline-formula><mml:math id="M327" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">256</mml:mn></mml:mrow></mml:math></inline-formula> and higher, however, the two-GPU configuration delivered higher throughput than the single-GPU. In the high-resolution regime, the increased computational workload sufficiently outweighed the overhead, yielding a clear performance advantage for two-GPU runs. In addition, memory capacity limited the single-GPU to a maximum resolution of <inline-formula><mml:math id="M328" display="inline"><mml:mrow><mml:mn mathvariant="normal">1152</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1152</mml:mn></mml:mrow></mml:math></inline-formula> (<inline-formula><mml:math id="M329" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.06</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs), whereas the two-GPU configuration ran up to <inline-formula><mml:math id="M330" display="inline"><mml:mrow><mml:mn mathvariant="normal">1536</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1536</mml:mn></mml:mrow></mml:math></inline-formula> (<inline-formula><mml:math id="M331" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.89</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs). We compared the throughput of single-GPU runs with two-GPU runs across mesh resolutions for the SolCx benchmark using <inline-formula><mml:math id="M332" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements (Fig. 12b). In the high-resolution regime (<inline-formula><mml:math id="M333" display="inline"><mml:mrow><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">512</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula>, corresponding to <inline-formula><mml:math id="M334" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.36</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs), the two-GPU configuration outperformed the single-GPU by a factor of 1.03 (for <inline-formula><mml:math id="M335" display="inline"><mml:mrow><mml:mn mathvariant="normal">640</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">640</mml:mn></mml:mrow></mml:math></inline-formula>) to 1.31 (for <inline-formula><mml:math id="M336" display="inline"><mml:mrow><mml:mn mathvariant="normal">1024</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1024</mml:mn></mml:mrow></mml:math></inline-formula>). The two-GPU configuration supported a maximum resolution of <inline-formula><mml:math id="M337" display="inline"><mml:mrow><mml:mn mathvariant="normal">1664</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1664</mml:mn></mml:mrow></mml:math></inline-formula> (24 936 707 DOFs), whereas the single GPU was limited by memory capacity to <inline-formula><mml:math id="M338" display="inline"><mml:mrow><mml:mn mathvariant="normal">1152</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1152</mml:mn></mml:mrow></mml:math></inline-formula> (11 955 459 DOFs).</p>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e7499">Performance comparison between single-GPU (1-core CPU) and two-GPU (2-core CPU) configurations in this study. <bold>(a–f)</bold> Comparison of throughput for the velocity subproblem, SolCx, 3D thermo-mechanical convection, 2D Rayleigh–Taylor instability, sticky-air benchmark, and subduction model, respectively. Horizontal axes represent mesh resolution and degrees of freedom; vertical axes represent throughput (<inline-formula><mml:math id="M339" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">DOFs</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/9781/2026/gmd-19-9781-2026-f12.png"/>

          
        </fig>

      <p id="d2e7530">For the 3D thermo-mechanical convection using the MINI element, the grid resolutions in the <inline-formula><mml:math id="M340" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M341" display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> directions were held fixed at 100 cells (Fig. 12c), while the <inline-formula><mml:math id="M342" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> direction resolution increased from 10 to 80. The two-GPU configuration delivered higher throughput at every resolution. The throughput ratio increased from 1.07 to 1.64 as the resolution increased. The 2D Rayleigh–Taylor instability test with <inline-formula><mml:math id="M343" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements followed the same pattern as the 2D SolCx benchmark (Fig. 12d). The single-GPU delivered higher throughput at low resolution, whereas the two-GPU throughput exceeded the single-GPU throughput beyond <inline-formula><mml:math id="M344" display="inline"><mml:mrow><mml:mn mathvariant="normal">512</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula>. In the sticky-air benchmark, the two-GPU configuration delivered higher throughput than the single-GPU at all resolutions (Fig. 12e). The throughput ratio ranged from 1.5 to 2.1. In the subduction model with nonlinear viscosity, the two-GPU throughput exceeded the single-GPU throughput beyond <inline-formula><mml:math id="M345" display="inline"><mml:mrow><mml:mn mathvariant="normal">900</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">150</mml:mn></mml:mrow></mml:math></inline-formula>. Then, the two-GPU throughput reached 1.4 times the single-GPU throughput (Fig. 12f). The single-GPU delivered higher throughput at low resolution in the SolCx, 2D Rayleigh–Taylor, and subduction benchmarks. Once the DOFs exceeded a threshold, the computational workload dominated, reducing the relative impact of overhead, and the two-GPU configuration became more effective. In 3D problems, the number of DOFs increases more rapidly with mesh resolution, yielding a consistent advantage for the two-GPU configuration across the tested resolutions.</p>
</sec>
</sec>
<sec id="Ch1.S5">
  <label>5</label><title>Discussion</title>
<sec id="Ch1.S5.SS1">
  <label>5.1</label><title>Efficiency of pre-assembled operators</title>
      <p id="d2e7614">In this study, we present a practical strategy to reduce bottlenecks in a single-GPU workflow, where one CPU core assembles matrices and the GPU performs iterative solves. Before performing GPU-based PCG solves, the <inline-formula><mml:math id="M346" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection mass matrix, gradient operator, and divergence operator are assembled once on the CPU and stored in GPU VRAM. Pre-assembly of the three operators removes the assembly cost from every PCG iteration. The end-to-end throughput of each time step therefore increases. The approach becomes increasingly beneficial when many PCG steps are nested inside Picard iterations. The benefits are most pronounced for iteration-heavy workloads, such as the Picard iterations for the nonlinear-viscosity subduction model (Sect. 4.6). We note that the stiffness matrix must still be reassembled when viscosity changes between time steps. Storing preassembled operators increases VRAM requirements as the number of DOFs increases. For an incompressible Stokes system on a fixed mesh, the gradient and divergence operators for velocity–pressure coupling remain constant across iterations. For example, at a <inline-formula><mml:math id="M347" display="inline"><mml:mrow><mml:mn mathvariant="normal">100</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">40</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">100</mml:mn></mml:mrow></mml:math></inline-formula> resolution with the MINI element for the 3D thermo-mechanical convection benchmark (Sect. 4.3), storing these operators and associated vectors requires approximately 1.3 GB of VRAM (Table S2), which is a modest fraction of the <inline-formula><mml:math id="M348" display="inline"><mml:mrow><mml:mo>∼</mml:mo><mml:mn mathvariant="normal">46</mml:mn></mml:mrow></mml:math></inline-formula> GB peak VRAM usage recorded.</p>
      <p id="d2e7654">Nonlinear Stokes systems with strain-rate-dependent viscosity require repeated assembly of the stiffness matrix. FEniCS 2019 performs each assembly on the CPU, adding a CPU–GPU data transfer at every nonlinear iteration. In multi-GPU runs, stiffness matrix assembly can be distributed across multiple CPU cores via MPI parallelism, offering additional assembly-speed improvements. GPUs are designed to maximise performance by executing large numbers of operations simultaneously. When many CPU cores assemble MPI-distributed matrix data and offload computations to a small number of GPUs (two in our study), technologies such as NVIDIA MPS (Multi-Process Service) become essential. MPS collects computation requests from multiple MPI processes and forwards them to the GPU. The GPU then executes the distributed matrix operations concurrently via MPS. In both 2D and 3D tests, the 16-core CPU with one or two GPUs achieved higher end-to-end throughput than the 1-core CPU with a single GPU. For the sticky-air benchmark at a <inline-formula><mml:math id="M349" display="inline"><mml:mrow><mml:mn mathvariant="normal">1400</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">800</mml:mn></mml:mrow></mml:math></inline-formula> resolution, the end-to-end throughput of the 16-core CPU with two GPUs was twice that of the single GPU with a 1-core CPU (Fig. S5). Across the time-dependent benchmarks, the single GPU with a 1-core CPU delivered 1.14–<inline-formula><mml:math id="M350" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.46</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the end-to-end throughput of the 32-core CPU. The 16-core CPU with two GPUs delivered <inline-formula><mml:math id="M351" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.19</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the end-to-end throughput of the 32-core CPU (Table S5). This indicates that for 3D high-resolution problems, an MPS-based multi-core CPU and multi-GPU setup is most effective. A key limitation of the multi-GPU implementation based on FEniCS is the incompatibility between FEniCS's high-level function layer and GPU-aware MPI protocols. When GPU-direct communication is enabled, ghost-node values at MPI partition interfaces are incorrectly set to zero. FEniCS's topology handling and DOF mapping depend on system-memory data structures, while the underlying PETSc backend operates on CUDA vectors. During ghost-value synchronization, FEniCS relies on system memory for scatter/gather operations, whereas GPU-aware MPI relies on device-pointer communication (Mills et al., 2021). This mismatch causes memory incoherence, preventing correct updates of interface values. We addressed this issue by using native PETSc calls for pre-assembly. We constructed the force vector directly via differential and projection operators, bypassing the problematic FEniCS layer. This approach preserves correct boundary synchronization via PETSc-GPU communication protocols while maintaining GPU-aware MPI performance.</p>
      <p id="d2e7689">Recently, finite element codes have incorporated GPU acceleration through global sparse matrix assembly and matrix-free evaluation. GPU-accelerated finite-element assembly has been demonstrated in FEniCS (Trotter et al., 2023). Matrix-free GPU evaluation is available in deal.II and MFEM (Kronbichler and Ljungkvist, 2019; Anderson et al., 2021). MFEM additionally assembles global sparse matrices on the GPU. A longer-term goal is a fully GPU-resident workflow that performs both assembly and linear solves on the GPU, further reducing transfer overhead. Until GPU-side global matrix assembly becomes widely adopted in the geodynamics community, our approach offers a practical alternative by keeping assembly and host–device transfer costs modest while delivering <inline-formula><mml:math id="M352" display="inline"><mml:mrow><mml:mo>∼</mml:mo><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the end-to-end throughput of the 32-core CPU-only configuration with a 16-core CPU and two GPUs.</p>
</sec>
<sec id="Ch1.S5.SS2">
  <label>5.2</label><title>Computational efficiency of multi-GPU configurations</title>
      <p id="d2e7712">Multi-GPU execution is essential for high-resolution geodynamics, as the approach shortens execution time while extending the maximum mesh resolution and total DOFs depending on VRAM capacity. Our benchmark tests show a clear path towards higher-resolution Stokes modelling in both 2D and 3D through single-GPU speedups and multi-GPU scaling. Recent 2D geodynamics studies increasingly use finer meshes to represent subduction zones, plate boundaries, shear zones, and boundary layers near free surfaces without sacrificing local resolution. For example, a high-resolution rifting setup uses 0.5 km spacing at depths shallower than 200 km (Yu et al., 2025). High-resolution 2D subduction and continental collision studies employed a mesh of <inline-formula><mml:math id="M353" display="inline"><mml:mrow><mml:mn mathvariant="normal">1024</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula> elements, extending to <inline-formula><mml:math id="M354" display="inline"><mml:mrow><mml:mn mathvariant="normal">2048</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1024</mml:mn></mml:mrow></mml:math></inline-formula> elements for resolution-sensitivity tests (Laik et al., 2023). Under such high-resolution settings, Stokes DOFs and preconditioner memory requirements increase sharply, making GPU VRAM capacity and solver execution time key constraints. In our 2D SolCx benchmarks, the two-GPU configuration outperformed a single-GPU configuration above <inline-formula><mml:math id="M355" display="inline"><mml:mrow><mml:mn mathvariant="normal">512</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">512</mml:mn></mml:mrow></mml:math></inline-formula> elements. Between <inline-formula><mml:math id="M356" display="inline"><mml:mrow><mml:mn mathvariant="normal">640</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">640</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M357" display="inline"><mml:mrow><mml:mn mathvariant="normal">1024</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1024</mml:mn></mml:mrow></mml:math></inline-formula>, the two-GPU configuration delivered 1.03–<inline-formula><mml:math id="M358" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.31</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the single-GPU throughput. These speedup factors enable higher resolution 2D rifting and subduction simulations under tight VRAM limits.</p>
      <p id="d2e7786">In 3D, the number of DOFs increases more rapidly with mesh resolution, leading to memory bottlenecks due to the stiffness matrix, preconditioner, and force vector. Building the preconditioner also consumes extra VRAM through coarsening levels, pushing a single-GPU to its memory limit at relatively modest resolutions. Ultra-large 3D Stokes problems therefore require massive multi-GPU execution. Räss et al. (2022) used a pseudo-transient method on 2197 GPUs to solve 3D variable-viscosity Stokes flow at <inline-formula><mml:math id="M359" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">4995</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> resolution, reaching 1.2 tera-DOFs. The pseudo-transient framework targets ultra-high-resolution finite-difference simulations at extreme multi-GPU scale. We propose that multi-GPU scaling directly supports larger DOF targets within available VRAM. An extrapolation based on our 3D DOF scaling suggests that eight RTX 6000 Ada cards (48 GB VRAM each) would support roughly <inline-formula><mml:math id="M360" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.0</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs. Replacing this configuration with RTX PRO 6000 cards (96 GB VRAM each) would yield a total of 768 GB VRAM, enabling over <inline-formula><mml:math id="M361" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">8</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs under the same extrapolation.</p>
      <p id="d2e7830">Krylov solvers for the Stokes system benefit mainly from high memory bandwidth and large device memory. HPC-class GPUs such as the NVIDIA H200 provide 4.8 <inline-formula><mml:math id="M362" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">TB</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and 141 GB for the two quantities, approximately <inline-formula><mml:math id="M363" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M364" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.9</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the values of the RTX 6000 Ada, respectively. The higher bandwidth of the H200 is expected to lower the cost of operations limited by memory bandwidth. The overall gain for the Stokes solver requires direct measurement on the H200. The larger device memory increases the maximum problem size per GPU. H200-class GPUs offer a path toward higher-resolution simulations of global mantle convection and complex crustal deformation.</p>
</sec>
<sec id="Ch1.S5.SS3">
  <label>5.3</label><title>Potential benefits of large-scale geodynamic models</title>
      <p id="d2e7878">GPU acceleration reduces the execution time of Stokes solves in both single- and multi-GPU configurations. Single-GPU execution reduces the time per solve, while multi-GPU execution also increases the maximum DOFs that can be handled by distributing memory demand across GPUs. This combination enables high-resolution forward modelling and inverse problems that are difficult to run within the execution time and memory limits of conventional CPU clusters. Multi-GPU configurations further support scaling from local domains to global models by combining larger total VRAM with parallel execution.</p>
      <p id="d2e7881">Accurate simulation of narrow shear zones or thin lower-mantle thermal boundary layers in a 3D spherical-shell domain often requires grid spacing on the order of tens of kilometers (Taiwo et al., 2023; Murphy and King, 2024), which drives the Stokes system to very large DOF. In this setting, the GPU-based PCG solver tested in our study remains effective at large 3D scales and is expected to be important for future global simulations. Li et al. (2023) reconstructed the subduction history of the North American plate using plate-reconstruction-driven data assimilation and emphasised the high computational cost associated with realistic 3D buoyancy and viscosity structures. The study combined seafloor-age constraints and lithosphere-density profiles to build spatially variable buoyancy forcing and viscosity fields. The resulting configuration increased computational cost by more than an order of magnitude relative to simplified models. Such cost limits further extensions, including coupling with surface processes or increasing spatial resolution in global simulations. Faster Stokes solves on GPUs, together with multi-GPU scaling that supports larger DOF cases, are therefore critical for making such high-fidelity data-assimilation models more practical.</p>
      <p id="d2e7884">GPU acceleration also reduces the cost of adjoint inversion. Adjoint inversion minimises the misfit between an observed mantle state and a model prediction by iteratively updating initial conditions or model parameters. Each iteration computes the misfit through a forward simulation, then solves the adjoint equations backwards in time to obtain sensitivity information used to update the model. Since one iteration requires both forward and adjoint integrations over the full time window, the total cost scales with the number of iterations and the length of the assimilation period. Colli et al. (2020) limited the inversion window to 50 Myr (rather than 100 Myr) to manage the computational cost and excluded an inner loop for calibrating parameters (e.g., viscosity). The GPU speedups demonstrated in our study increase the number of forward-adjoint cycles that fit within a fixed runtime budget. This improvement supports longer assimilation windows. The same improvement also makes repeated parameter-calibration loops, including viscosity updates, more practical. GPU acceleration therefore provides the computational basis for extended inversion workflows that better constrain uncertain material properties and initial conditions in high-resolution geodynamics.</p>
</sec>
<sec id="Ch1.S5.SS4">
  <label>5.4</label><title>State-of-the-art Stokes solver using a block preconditioner</title>
      <p id="d2e7895">In computational geodynamics, one of the state-of-the-art Stokes solvers is based on Schur-complement block preconditioners, which are widely used in major community codes such as ASPECT (Kronbichler et al., 2012). A block preconditioner handles the saddle-point problem, with an AMG (or GMG) preconditioner applied to the velocity block and the pressure Schur complement approximated by a viscosity-weighted mass matrix or a BFBT-type scheme. This configuration delivers mesh-independent convergence and excellent scalability on large parallel systems (Benzi et al., 2005; May and Moresi, 2008; Rudi et al., 2017). In contrast, the PCG solver adopted in this study applies a conjugate-gradient iteration to the pressure Schur complement system. The outer iteration stores only a fixed number of vectors, requiring less memory than block-preconditioned FGMRES, which accumulates Krylov vectors as the iteration proceeds. However, the inner velocity subproblem is solved with GMRES and requires additional Krylov-vector storage. As a result, the overall memory saving is smaller than that suggested by the outer iteration alone.</p>
      <p id="d2e7898">To evaluate this solver's effectiveness, we compared a FEniCS-based PCG implementation with ASPECT's block preconditioned solver for the 3D thermo-mechanical convection benchmark (Table S5). The FEniCS implementation was tested on a two-GPU configuration with a 16-core CPU, a single-GPU configuration with a 16-core CPU, and a 32-core CPU, while ASPECT was run on the 32-core CPU. The ASPECT calculation used the single-Advection, single-Stokes nonlinear solver scheme with the block-AMG Stokes solver. The Stokes linear solver tolerance was set to <inline-formula><mml:math id="M365" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, with a GMRES restart length of 100, while the temperature solver tolerance was <inline-formula><mml:math id="M366" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. To enable a fair comparison with ASPECT, which provides <inline-formula><mml:math id="M367" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> elements, we used a <inline-formula><mml:math id="M368" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> discretization in FEniCS with a resolution of <inline-formula><mml:math id="M369" display="inline"><mml:mrow><mml:mn mathvariant="normal">40</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">40</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">40</mml:mn></mml:mrow></mml:math></inline-formula>. The simulation covered a total nondimensional time of 0.25 over 1000 steps. On the 32-core CPU, ASPECT required an execution time of 471 s to solve the Stokes system over the full elapsed run. Our PCG solver on the 32-core CPU required an execution time of 961 s, indicating that ASPECT's block-preconditioned Stokes solver outperforms our PCG solver on CPUs in this configuration. However, with a single GPU and a 16-core CPU, the same case required 247 s, corresponding to speedups of approximately <inline-formula><mml:math id="M370" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.89</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M371" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.91</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> relative to our 32-core PCG run and the 32-core ASPECT run, respectively. With two GPUs and a 16-core CPU, the Stokes solving time decreased to approximately 126 s, delivering an additional <inline-formula><mml:math id="M372" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.0</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> speedup over the single-GPU case and overall speedups of <inline-formula><mml:math id="M373" display="inline"><mml:mrow><mml:mn mathvariant="normal">7.63</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M374" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.74</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> relative to our 32-core CPU run and ASPECT, respectively.</p>
      <p id="d2e8032">A block-preconditioned formulation solves the full Stokes system with block preconditioned FGMRES, and a carefully tuned GPU implementation of this strategy may ultimately be faster than the PCG splitting approach. At the same time, the full Stokes system is larger and each FGMRES iteration must store multiple Krylov vectors, which can lead to higher memory usage, especially in multi-GPU configurations. The velocity-only submatrix is symmetric positive definite, allowing CG to replace GMRES for the velocity subproblem. CG stores fewer Krylov vectors than GMRES, whereas the dominance of the BoomerAMG hierarchy in solver memory limits the overall memory reduction. Selecting the most effective solver requires a systematic comparison of PCG splitting and block-preconditioned FGMRES in execution time and memory usage.</p>
</sec>
</sec>
<sec id="Ch1.S6" sec-type="conclusions">
  <label>6</label><title>Conclusions</title>
      <p id="d2e8044">In this study, we implemented a preconditioned conjugate-gradient solver to solve finite-element Stokes equations in FEniCS on GPUs using PETSc configured with CUDA and validated both performance and accuracy through quantitative comparisons with CPU runs. We adopted the PCG variant, in which the pressure update follows a preconditioned conjugate-gradient scheme that limits the number of stored vectors, producing an algorithm better suited to GPU memory constraints. By using PETSc AIJCUSPARSE matrices and CUDA vectors, we stored matrices and vectors on the GPU. To reduce the <inline-formula><mml:math id="M375" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>-projection bottleneck that recurs within PCG iterations, we preassembled and reused the mass matrix and the gradient and divergence operators. As a preconditioner, we employed HYPRE BoomerAMG, with optimal configurations varying by hardware architecture. On GPUs, HMIS or PMIS coarsening reduced the cost of coarse-grid construction, while the combination of scaled Jacobi smoothing and Extended+i interpolation improved parallel efficiency. We validated the GPU solver across six benchmarks: a manufactured solution, SolCx, the sticky-air benchmark, 2D Rayleigh–Taylor instability, 3D thermo-mechanical convection, and a subduction model with nonlinear viscosity. GPU-based solutions maintained accuracy comparable to analytical solutions and CPU results. Robust convergence was also observed in cases featuring strong viscosity contrasts and sharp compositional boundaries. As problem size increased, the GPU advantage became more pronounced. The single GPU delivered 6–<inline-formula><mml:math id="M376" display="inline"><mml:mrow><mml:mn mathvariant="normal">11</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the throughput of the 32-core CPU across the Stokes benchmarks. Even when GMRES required more iterations on the GPU, the lower cost per iteration kept the GPU throughput higher. Experiments with single-GPU and two-GPU configurations of RTX 6000 Ada cards showed that the VRAM capacity of a single GPU limits the achievable resolution. Multi-GPU domain decomposition extended the problem size to <inline-formula><mml:math id="M377" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.5</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> DOFs. The two-GPU configuration further increased the throughput at large problem sizes, reaching up to <inline-formula><mml:math id="M378" display="inline"><mml:mrow><mml:mn mathvariant="normal">2.1</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the single-GPU throughput. Coordinating a 16-core CPU with two GPUs through NVIDIA MPS delivered <inline-formula><mml:math id="M379" display="inline"><mml:mrow><mml:mn mathvariant="normal">5.19</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math></inline-formula> the end-to-end throughput of the 32-core CPU in the 3D thermo-mechanical convection benchmark.</p>
</sec>

      
      </body>
    <back><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e8107">GAUZZ 1.0.0, comprising the FEniCS-based source code, the simulation input scripts used to reproduce all benchmark cases in this study, and a Dockerfile that builds the full computational environment, is archived at Zenodo (<ext-link xlink:href="https://doi.org/10.5281/zenodo.19936267" ext-link-type="DOI">10.5281/zenodo.19936267</ext-link>, Lee et al., 2026) under the GNU General Public License v3.0. Active development of GAUZZ continues at <uri>https://github.com/kmlee-geo/gauzz</uri>, where issues and contributions are welcomed. The large analytical reference solutions for the SolCx benchmark (p_a1024.h5 and u_a1024.h5) are provided in the Zenodo deposit only, owing to GitHub's per-file size limits; they are required to reproduce the SolCx error analysis. Simulations were performed with FEniCS 2019.2.0.64, NumPy 1.23.5, PETSc 3.15.5 (CPU) and 3.23.2 (GPU) compiled with CUDA support, and HYPRE BoomerAMG via the PETSc interface. The CPU runs were executed on an Intel Xeon Gold 6338 processor, while the Intel Xeon w5-2465X served as the host CPU of the GPU workstations; the GPU runs were executed on NVIDIA RTX 6000 Ada (48 GB VRAM) workstations.</p>
  </notes><app-group>
        <supplementary-material position="anchor"><p id="d2e8116">The supplement related to this article is available online at <inline-supplementary-material xlink:href="https://doi.org/10.5194/gmd-19-9781-2026-supplement" xlink:title="pdf">https://doi.org/10.5194/gmd-19-9781-2026-supplement</inline-supplementary-material>.</p></supplementary-material>
        </app-group><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e8125">KML designed the algorithms, implemented the GPU-accelerated PCG solver, carried out all numerical experiments, performed the performance analyses, and prepared the first draft of the manuscript. DKJ contributed to the mathematical formulation of the preconditioned conjugate-gradient algorithm and the Schur complement reduction. CT contributed substantially to shaping the core ideas of the paper through revisions, provided expertise on the geodynamic benchmark setups, and provided major input during the manuscript editing process. BDS supervised the project, acquired funding, and revised the manuscript. All authors discussed the results and contributed to the final version of the paper.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e8131">The contact author has declared that none of the authors has any competing interests.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e8137">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e8143">We thank Topic Editor Ludovic Räss, Christian Hüttig, and an anonymous reviewer for their constructive comments, which improved the manuscript. Kyeong-Min Lee was supported by the Ministry of the Interior and Safety through the Human Resource Development Project in Disaster Management. Model visualisation was performed using ParaView (<uri>https://www.paraview.org</uri>, last access: 8 October 2026). Byung-Dal So was supported by the “Ocean Research Facility and Equipment sharing Program” of the Korea Institute of Marine Science &amp; Technology Promotion (KIMST), with funding from the Ministry of Oceans and Fisheries, Republic of Korea.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e8151">This research has been supported by the National Research Foundation of Korea (NRF) grants funded by the Korean Government (grant nos. RS-2025-02293161, RS-2022-NR069527, RS-2019-NR040076, and RS-2025-25428518). Deok-Kyu Jang was supported by the National Research Foundation of Korea (NRF) grant funded by the Korean Government (grant no. RS-2025-00519120).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e8158">This paper was edited by Ludovic Räss and reviewed by Christian Hüttig and one anonymous referee.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bib1"><label>1</label><mixed-citation>Adams, A. C., Stegman, D. R., Mohammadzadeh, H., Smrekar, S. E., and Tackley, P. J.: Plume-Induced Delamination Initiated at Rift Zones on Venus, J. Geophys. Res.-Planet., 128, e2023JE007879, <ext-link xlink:href="https://doi.org/10.1029/2023JE007879" ext-link-type="DOI">10.1029/2023JE007879</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib2"><label>2</label><mixed-citation>Alber, D. M. and Olson, L. N.: Parallel coarse-grid selection, Numer. Linear Algebr., 14, 611–643, <ext-link xlink:href="https://doi.org/10.1002/nla.541" ext-link-type="DOI">10.1002/nla.541</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bib3"><label>3</label><mixed-citation>Alkhimenkov, Y. and Podladchikov, Y. Y.: Accelerated pseudo-transient method for elastic, viscoelastic, and coupled hydromechanical problems with applications, Geosci. Model Dev., 18, 563–583, <ext-link xlink:href="https://doi.org/10.5194/gmd-18-563-2025" ext-link-type="DOI">10.5194/gmd-18-563-2025</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib4"><label>4</label><mixed-citation>Alnæs, M. S., Blechta, J., Hake, J., Johansson, A., Kehlet, B., Logg, A., Richardson, C., Ring, J., Rognes, M. E., and Wells, G. N.: The FEniCS project version 1.5, Archive of Numerical Software, 3, <ext-link xlink:href="https://doi.org/10.11588/ans.2015.100.20553" ext-link-type="DOI">10.11588/ans.2015.100.20553</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib5"><label>5</label><mixed-citation>Amestoy, P. R., Duff, I. S., L'Excellent, J.-Y., and Koster, J.: MUMPS: a general purpose distributed memory sparse solver, in: Applied Parallel Computing. New Paradigms for HPC in Industry and Academia, edited by: Sørevik, T., Manne, F., Gebremedhin, A. H., and Moe, R., Springer, Berlin, Heidelberg, 121–130, <ext-link xlink:href="https://doi.org/10.1007/3-540-70734-4_16" ext-link-type="DOI">10.1007/3-540-70734-4_16</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bib6"><label>6</label><mixed-citation>Anderson, R., Andrej, J., Barker, A., Bramwell, J., Camier, J.-S., Cerveny, J., Dobrev, V., Dudouit, Y., Fisher, A., Kolev, T., Pazner, W., Stowell, M., Tomov, V., Akkerman, I., Dahm, J., Medina, D., and Zampini, S.: MFEM: A modular finite element methods library, Comput. Math. Appl., 81, 42–74, <ext-link xlink:href="https://doi.org/10.1016/j.camwa.2020.06.009" ext-link-type="DOI">10.1016/j.camwa.2020.06.009</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib7"><label>7</label><mixed-citation>Balay, S., Abhyankar, S., Adams, M. F., Benson, S., Brown, J., Brune, P., Buschelman, K., Constantinescu, E. M., Dalcin, L., Dener, A., Eijkhout, V., Faibussowitsch, J., Gropp, W. D., Hapla, V., Isaac, T., Jolivet, P., Karpeev, D., Kaushik, D., Knepley, M. G., Kong, F., Kruger, S., May, D. A., McInnes, L. C., Mills, R. T., Mitchell, L., Munson, T., Roman, J. E., Rupp, K., Sanan, P., Sarich, J., Smith, B. F., Suh, H., Zampini, S., Zhang, H., Zhang, H., and Zhang, J.: PETSc/TAO Users Manual, Tech. Rep. ANL-21/39 – Revision 3.23, Argonne National Laboratory, Argonne, IL, USA, <ext-link xlink:href="https://doi.org/10.2172/2565610" ext-link-type="DOI">10.2172/2565610</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib8"><label>8</label><mixed-citation>Benzi, M., Golub, G. H., and Liesen, J.: Numerical solution of saddle point problems, Acta Numer., 14, 1–137, <ext-link xlink:href="https://doi.org/10.1017/S0962492904000212" ext-link-type="DOI">10.1017/S0962492904000212</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib9"><label>9</label><mixed-citation>Beuchert, M. J. and Podladchikov, Y. Y.: Viscoelastic mantle convection and lithospheric stresses, Geophys. J. Int., 183, 35–63, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.2010.04708.x" ext-link-type="DOI">10.1111/j.1365-246X.2010.04708.x</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bib10"><label>10</label><mixed-citation>Blankenbach, B., Busse, F., Christensen, U., Cserepes, L., Gunkel, D., Hansen, U., Harder, H., Jarvis, G., Koch, M., Marquart, G., Moore, D., Olson, P., Schmeling, H., and Schnaubelt, T.: A benchmark comparison for mantle convection codes, Geophys. J. Int., 98, 23–38, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.1989.tb05511.x" ext-link-type="DOI">10.1111/j.1365-246X.1989.tb05511.x</ext-link>, 1989.</mixed-citation></ref>
      <ref id="bib1.bib11"><label>11</label><mixed-citation>Bourgouin, L., Mühlhaus, H. B., Hale, A. J., and Arsac, A.: Towards realistic simulations of lava dome growth using the level set method, Acta Geotech., 1, 225–236, <ext-link xlink:href="https://doi.org/10.1007/s11440-006-0016-6" ext-link-type="DOI">10.1007/s11440-006-0016-6</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bib12"><label>12</label><mixed-citation>Brandt, A.: Multi-level adaptive solutions to boundary-value problems, Math. Comput., 31, 333–390, <ext-link xlink:href="https://doi.org/10.1090/S0025-5718-1977-0431719-X" ext-link-type="DOI">10.1090/S0025-5718-1977-0431719-X</ext-link>, 1977.</mixed-citation></ref>
      <ref id="bib1.bib13"><label>13</label><mixed-citation>Brannick, J., Cao, F., Kahl, K., Falgout, R. D., and Hu, X.: Optimal interpolation and compatible relaxation in classical algebraic multigrid, SIAM J. Sci. Comput., 40, A1473–A1493, <ext-link xlink:href="https://doi.org/10.1137/17M1123456" ext-link-type="DOI">10.1137/17M1123456</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib14"><label>14</label><mixed-citation>Brune, S., Popov, A. A., and Sobolev, S. V.: Modeling suggests that oblique extension facilitates rifting and continental break-up, J. Geophys. Res.-Sol. Ea., 117, <ext-link xlink:href="https://doi.org/10.1029/2011JB008860" ext-link-type="DOI">10.1029/2011JB008860</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib15"><label>15</label><mixed-citation>Burstedde, C., Stadler, G., Alisic, L., Wilcox, L. C., Tan, E., Gurnis, M., and Ghattas, O.: Large-scale adaptive mantle convection simulation, Geophys. J. Int., 192, 889–906, <ext-link xlink:href="https://doi.org/10.1093/gji/ggs070" ext-link-type="DOI">10.1093/gji/ggs070</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bib16"><label>16</label><mixed-citation>Capitanio, F. A., Stegman, D. R., Moresi, L. N., and Sharples, W.: Upper plate controls on deep subduction, trench migrations and deformations at convergent margins, Tectonophysics, 483, 80–92, <ext-link xlink:href="https://doi.org/10.1016/j.tecto.2009.08.020" ext-link-type="DOI">10.1016/j.tecto.2009.08.020</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bib17"><label>17</label><mixed-citation>Cecka, C., Lew, A. J., and Darve, E.: Assembly of finite element methods on graphics processors, Int. J. Numer. Meth. Eng., 85, 640–669, <ext-link xlink:href="https://doi.org/10.1002/nme.2989" ext-link-type="DOI">10.1002/nme.2989</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib18"><label>18</label><mixed-citation>Chang, J. and So, B.-D.: Partial Nonlinear Iteration During Early Continental Rifting for Symmetric Surface Topography and Heat Flux, Ocean Sci. J., 60, 38, <ext-link xlink:href="https://doi.org/10.1007/s12601-025-00232-y" ext-link-type="DOI">10.1007/s12601-025-00232-y</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib19"><label>19</label><mixed-citation>Chen, C., Pouransari, H., Rajamanickam, S., Boman, E. G., and Darve, E.: A distributed-memory hierarchical solver for general sparse linear systems, Parallel Comput., 74, 49–64, <ext-link xlink:href="https://doi.org/10.1016/j.parco.2017.12.004" ext-link-type="DOI">10.1016/j.parco.2017.12.004</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib20"><label>20</label><mixed-citation>Clevenger, T. C. and Heister, T.: Comparison between algebraic and matrix-free geometric multigrid for a Stokes problem on adaptive meshes with variable viscosity, Numer. Linear Algebr., 28, e2375, <ext-link xlink:href="https://doi.org/10.1002/nla.2375" ext-link-type="DOI">10.1002/nla.2375</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib21"><label>21</label><mixed-citation>Colli, L., Bunge, H. P., and Oeser, J.: Impact of model inconsistencies on reconstructions of past mantle flow obtained using the adjoint method, Geophys. J. Int., 221, 617–639, <ext-link xlink:href="https://doi.org/10.1093/gji/ggaa023" ext-link-type="DOI">10.1093/gji/ggaa023</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib22"><label>22</label><mixed-citation>Crameri, F. and Tackley, P. J.: Parameters controlling dynamically self-consistent plate tectonics and single-sided subduction in global models of mantle convection, J. Geophys. Res.-Sol. Ea., 120, 3680–3706, <ext-link xlink:href="https://doi.org/10.1002/2014JB011664" ext-link-type="DOI">10.1002/2014JB011664</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib23"><label>23</label><mixed-citation>Crameri, F., Schmeling, H., Golabek, G. J., Duretz, T., Orendt, R., Buiter, S. J. H., May, D. A., Kaus, B. J. P., Gerya, T. V., and Tackley, P. J.: A comparison of numerical surface topography calculations in geodynamic modelling: an evaluation of the “sticky air” method, Geophys. J. Int., 189, 38–54, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.2012.05388.x" ext-link-type="DOI">10.1111/j.1365-246X.2012.05388.x</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib24"><label>24</label><mixed-citation>d'Acremont, E., Leroy, S., and Burov, E. B.: Numerical modelling of a mantle plume: the plume head-lithosphere interaction in the formation of an oceanic large igneous province, Earth Planet. Sc. Lett., 206, 379–396, <ext-link xlink:href="https://doi.org/10.1016/S0012-821X(02)01058-0" ext-link-type="DOI">10.1016/S0012-821X(02)01058-0</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib25"><label>25</label><mixed-citation>Davies, D. R., Wilson, C. R., and Kramer, S. C.: Fluidity: A fully unstructured anisotropic adaptive mesh computational modeling framework for geodynamics, Geochem. Geophy. Geosy., 12, <ext-link xlink:href="https://doi.org/10.1029/2011GC003551" ext-link-type="DOI">10.1029/2011GC003551</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib26"><label>26</label><mixed-citation>Davies, G. F. and Gurnis, M.: Interaction of mantle dregs with convection: Lateral heterogeneity at the core-mantle boundary, Geophys. Res. Lett., 13, 1517–1520, <ext-link xlink:href="https://doi.org/10.1029/GL013i013p01517" ext-link-type="DOI">10.1029/GL013i013p01517</ext-link>, 1986.</mixed-citation></ref>
      <ref id="bib1.bib27"><label>27</label><mixed-citation>Deakin, T., Price, J., Martineau, M., and McIntosh-Smith, S.: Evaluating attainable memory bandwidth of parallel programming models via BabelStream, International Journal of Computational Science and Engineering, 17, 247–262, <ext-link xlink:href="https://doi.org/10.1504/IJCSE.2018.095847" ext-link-type="DOI">10.1504/IJCSE.2018.095847</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib28"><label>28</label><mixed-citation>De Sterck, H., Yang, U. M., and Heys, J. J.: Reducing complexity in parallel algebraic multigrid preconditioners, SIAM J. Matrix Anal. A., 27, 1019–1039, <ext-link xlink:href="https://doi.org/10.1137/040615729" ext-link-type="DOI">10.1137/040615729</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bib29"><label>29</label><mixed-citation>Do, S. H., So, B. D., Kim, Y. G., and Kim, G. B.: Lithospheric strength inferred from modeling of buckling structure: Implications for stress state of the East Sea (Japan Sea), Tectonophysics, 858, 229859, <ext-link xlink:href="https://doi.org/10.1016/j.tecto.2023.229859" ext-link-type="DOI">10.1016/j.tecto.2023.229859</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib30"><label>30</label><mixed-citation>Do, S. H., So, B. D., and Shin, Y. H.: Degree of coupling in 3D multilayer continental lithospheric buckling: Implications for tectonic underpressure, J. Geophys. Res.-Sol. Ea., 130, e2024JB029465, <ext-link xlink:href="https://doi.org/10.1029/2024JB029465" ext-link-type="DOI">10.1029/2024JB029465</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib31"><label>31</label><mixed-citation>Duretz, T., May, D. A., Gerya, T. V., and Tackley, P. J.: Discretization errors and free surface stabilization in the finite difference and marker-in-cell method for applied geodynamics: A numerical study, Geochem. Geophy. Geosy., 12, <ext-link xlink:href="https://doi.org/10.1029/2011GC003567" ext-link-type="DOI">10.1029/2011GC003567</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib32"><label>32</label><mixed-citation>Enns, A., Becker, T. W., and Schmeling, H.: The dynamics of subduction and trench migration for viscosity stratification, Geophys. J. Int., 160, 761–775, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.2005.02519.x" ext-link-type="DOI">10.1111/j.1365-246X.2005.02519.x</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib33"><label>33</label><mixed-citation>Falgout, R. D., Jones, J. E., and Yang, U. M.: The design and implementation of hypre, a library of parallel high performance preconditioners, in: Numerical Solution of Partial Differential Equations on Parallel Computers, edited by: Bruaset, A. M. and Tveito, A., Lecture Notes in Computational Science and Engineering, 51, Springer, Berlin, Heidelberg, 267–294, <ext-link xlink:href="https://doi.org/10.1007/3-540-31619-1_8" ext-link-type="DOI">10.1007/3-540-31619-1_8</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bib34"><label>34</label><mixed-citation>Gassmöller, R., Dannberg, J., Bangerth, W., Heister, T., and Myhill, R.: On formulations of compressible mantle convection, Geophys. J. Int., 221, 1264–1280, <ext-link xlink:href="https://doi.org/10.1093/gji/ggaa078" ext-link-type="DOI">10.1093/gji/ggaa078</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib35"><label>35</label><mixed-citation>Gerya, T. V. and Yuen, D. A.: Characteristics-based marker-in-cell method with conservative finite-differences schemes for modeling geological flows with strongly variable transport properties, Phys. Earth Planet. In., 140, 293–318, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2003.09.006" ext-link-type="DOI">10.1016/j.pepi.2003.09.006</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib36"><label>36</label><mixed-citation>Gerya, T. V., May, D. A., and Duretz, T.: An adaptive staggered grid finite difference method for modeling geodynamic Stokes flows with strongly variable viscosity, Geochem. Geophy. Geosy., 14, 1200–1225, <ext-link xlink:href="https://doi.org/10.1002/ggge.20078" ext-link-type="DOI">10.1002/ggge.20078</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bib37"><label>37</label><mixed-citation>Gerya, T. V., Stern, R. J., Baes, M., Sobolev, S. V., and Whattam, S. A.: Plate tectonics on the Earth triggered by plume-induced subduction initiation, Nature, 527, 221–225, <ext-link xlink:href="https://doi.org/10.1038/nature15752" ext-link-type="DOI">10.1038/nature15752</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib38"><label>38</label><mixed-citation>Graham, R. L., Woodall, T. S., and Squyres, J. M.: Open MPI: A Flexible High Performance MPI, in: Parallel Processing and Applied Mathematics, edited by: Wyrzykowski, R., Dongarra, J., Meyer, N., and Waśniewski, J., Springer Berlin Heidelberg, Berlin, Heidelberg, 228–239, <ext-link xlink:href="https://doi.org/10.1007/11752578_29" ext-link-type="DOI">10.1007/11752578_29</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bib39"><label>39</label><mixed-citation>Henson, V. E. and Yang, U. M.: BoomerAMG: A parallel algebraic multigrid solver and preconditioner, Appl. Numer. Math., 41, 155–177, <ext-link xlink:href="https://doi.org/10.1016/S0168-9274(01)00115-5" ext-link-type="DOI">10.1016/S0168-9274(01)00115-5</ext-link>, 2002.</mixed-citation></ref>
      <ref id="bib1.bib40"><label>40</label><mixed-citation>Hestenes, M. R. and Stiefel, E.: Methods of conjugate gradients for solving linear systems, J. Res. Nat. Bur. Stand., 49, 409–436, <ext-link xlink:href="https://doi.org/10.6028/jres.049.044" ext-link-type="DOI">10.6028/jres.049.044</ext-link>, 1952.</mixed-citation></ref>
      <ref id="bib1.bib41"><label>41</label><mixed-citation>Hillebrand, B., Thieulot, C., Geenen, T., van den Berg, A. P., and Spakman, W.: Using the level set method in geodynamical modeling of multi-material flows and Earth's free surface, Solid Earth, 5, 1087–1098, <ext-link xlink:href="https://doi.org/10.5194/se-5-1087-2014" ext-link-type="DOI">10.5194/se-5-1087-2014</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bib42"><label>42</label><mixed-citation>Huismans, R. S. and Beaumont, C.: Symmetric and asymmetric lithospheric extension: Relative effects of frictional-plastic and viscous strain softening, J. Geophys. Res.-Sol. Ea., 108, <ext-link xlink:href="https://doi.org/10.1029/2002JB002026" ext-link-type="DOI">10.1029/2002JB002026</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib43"><label>43</label><mixed-citation>Jang, D.-K., Lee, K.-M., Thieulot, C., Choi, W.-H., and So, B.-D.: Efficient Uzawa algorithms with projection strategies for geodynamic Stokes flow, EGUsphere [preprint], <ext-link xlink:href="https://doi.org/10.5194/egusphere-2025-5480" ext-link-type="DOI">10.5194/egusphere-2025-5480</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib44"><label>44</label><mixed-citation>Jang, M.-S. and So, B.-D.: Generation of Channelized Mantle Flow Beyond the Rift Zone Accelerated by Thermal Heterogeneity and Rift Propagation, Geochem. Geophy. Geosy., 27, e2025GC012743, <ext-link xlink:href="https://doi.org/10.1029/2025GC012743" ext-link-type="DOI">10.1029/2025GC012743</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bib45"><label>45</label><mixed-citation>Keum, J. Y. and So, B. D.: Effect of buoyant sediment overlying subducting plates on trench geometry: 3D viscoelastic free subduction modeling, Geophys. Res. Lett., 48, e2021GL093498, <ext-link xlink:href="https://doi.org/10.1029/2021GL093498" ext-link-type="DOI">10.1029/2021GL093498</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib46"><label>46</label><mixed-citation>Keum, J. Y. and So, B. D.: Sediment buoyancy controls the effective slab pull force and deviatoric stress along trenches: Insights from 3D free-subduction model, Tectonophysics, 862, 229970, <ext-link xlink:href="https://doi.org/10.1016/j.tecto.2023.229970" ext-link-type="DOI">10.1016/j.tecto.2023.229970</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib47"><label>47</label><mixed-citation>King, S. D.: On topography and geoid from 2-D stagnant lid convection calculations, Geochem. Geophy. Geosy., 10, <ext-link xlink:href="https://doi.org/10.1029/2008GC002250" ext-link-type="DOI">10.1029/2008GC002250</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bib48"><label>48</label><mixed-citation>Kronbichler, M. and Ljungkvist, K.: Multigrid for Matrix-Free High-Order Finite Element Computations on Graphics Processors, ACM Transactions on Parallel Computing, 6, 2:1–2:32, <ext-link xlink:href="https://doi.org/10.1145/3322813" ext-link-type="DOI">10.1145/3322813</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib49"><label>49</label><mixed-citation>Kronbichler, M., Heister, T., and Bangerth, W.: High accuracy mantle convection simulation through modern numerical methods, Geophys. J. Int., 191, 12–29, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.2012.05609.x" ext-link-type="DOI">10.1111/j.1365-246X.2012.05609.x</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib50"><label>50</label><mixed-citation>Laik, A., Schellart, W. P., and Strak, V.: Sustained indentation in 2-D models of continental collision involving whole mantle subduction, Geophys. J. Int., 232, 343–365, <ext-link xlink:href="https://doi.org/10.1093/gji/ggac339" ext-link-type="DOI">10.1093/gji/ggac339</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib51"><label>51</label><mixed-citation>Lee, K.-M., Kim, H.-I., Jang, D.-K., and So, B.-D.: A Comparative Study of 2D Numerical Simulations Using Vector and Potential Methods for Extending 3D Modeling of Planetary Evolution, Geosci. J., 28, 465–481, <ext-link xlink:href="https://doi.org/10.1007/s12303-024-0013-5" ext-link-type="DOI">10.1007/s12303-024-0013-5</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib52"><label>52</label><mixed-citation>Lee, K.-M., Jang, D.-K., Thieulot, C., and So, B.-D.: Codes and Dockerfile for geodynamics simulations using PETSc with GPUs (GAUZZ 1.0.0), Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.19936267" ext-link-type="DOI">10.5281/zenodo.19936267</ext-link>, 2026 (code also available at: <uri>https://github.com/kmlee-geo/gauzz</uri>, last access: 8 October 2026).</mixed-citation></ref>
      <ref id="bib1.bib53"><label>53</label><mixed-citation>Leng, W. and Zhong, S.: Viscous heating, adiabatic heating and energetic consistency in compressible mantle convection, Geophys. J. Int., 173, 693–702, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.2008.03745.x" ext-link-type="DOI">10.1111/j.1365-246X.2008.03745.x</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bib54"><label>54</label><mixed-citation>Li, Y., Liu, L., Peng, D., Dong, H., and Li, S.: Evaluating tomotectonic plate reconstructions using geodynamic models with data assimilation, the case for North America, Earth-Sci. Rev., 244, 104518, <ext-link xlink:href="https://doi.org/10.1016/j.earscirev.2023.104518" ext-link-type="DOI">10.1016/j.earscirev.2023.104518</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib55"><label>55</label><mixed-citation>Liao, J. and Gerya, T.: From continental rifting to seafloor spreading: insight from 3D thermo-mechanical modeling, Gondwana Res., 28, 1329–1343, <ext-link xlink:href="https://doi.org/10.1016/j.gr.2014.11.004" ext-link-type="DOI">10.1016/j.gr.2014.11.004</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib56"><label>56</label><mixed-citation>MacLachlan, S. P. and Oosterlee, C. W.: Local Fourier analysis for multigrid with overlapping smoothers applied to systems of PDEs, Numer. Linear Algebr., 18, 751–774, <ext-link xlink:href="https://doi.org/10.1002/nla.762" ext-link-type="DOI">10.1002/nla.762</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib57"><label>57</label><mixed-citation>Maljaars, J. M., Richardson, C. N., and Sime, N.: LEoPart: A particle library for FEniCS, Comput. Math. Appl., 81, 289–315, <ext-link xlink:href="https://doi.org/10.1016/j.camwa.2020.04.023" ext-link-type="DOI">10.1016/j.camwa.2020.04.023</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib58"><label>58</label><mixed-citation>Mansour, J., Giordani, J., Moresi, L., Beucher, R., Kaluza, O., Velic, M., Farrington, R., Quenette, S., and Beall, A.: Underworld2: Python Geodynamics Modelling for Desktop, HPC and Cloud, Journal of Open Source Software, 5, 1797, <ext-link xlink:href="https://doi.org/10.21105/joss.01797" ext-link-type="DOI">10.21105/joss.01797</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib59"><label>59</label><mixed-citation>Markall, G. R., Slemmer, A., Ham, D. A., Kelly, P. H. J., Cantwell, C. D., and Sherwin, S. J.: Finite Element Assembly Strategies on MultiCore and Many-Core Architectures, Int. J. Numer. Meth. Fl., 71, 80–97, <ext-link xlink:href="https://doi.org/10.1002/fld.3648" ext-link-type="DOI">10.1002/fld.3648</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bib60"><label>60</label><mixed-citation>May, D. A. and Moresi, L.: Preconditioned iterative methods for Stokes flow problems arising in computational geodynamics, Phys. Earth Planet. In., 171, 33–47, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2008.07.036" ext-link-type="DOI">10.1016/j.pepi.2008.07.036</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bib61"><label>61</label><mixed-citation>May, D. A., Brown, J., and Le Pourhiet, L.: A scalable, matrix-free multigrid preconditioner for finite element discretizations of heterogeneous Stokes flow, Comput. Method. Appl. M., 290, 496–523, <ext-link xlink:href="https://doi.org/10.1016/j.cma.2015.03.014" ext-link-type="DOI">10.1016/j.cma.2015.03.014</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib62"><label>62</label><mixed-citation>Mills, R. T., Adams, M. F., Balay, S., Brown, J., Dener, A., Knepley, M., Kruger, S. E., Morgan, H., Munson, T., Rupp, K., Smith, B. F., Zampini, S., Zhang, H., and Zhang, J.: Toward performance-portable PETSc for GPU-based exascale systems, Parallel Comput., 108, 102831, <ext-link xlink:href="https://doi.org/10.1016/j.parco.2021.102831" ext-link-type="DOI">10.1016/j.parco.2021.102831</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib63"><label>63</label><mixed-citation>Moresi, L., Zhong, S., and Gurnis, M.: The accuracy of finite element solutions of Stokes's flow with strongly varying viscosity, Phys. Earth Planet. In., 97, 83–94, <ext-link xlink:href="https://doi.org/10.1016/0031-9201(96)03163-9" ext-link-type="DOI">10.1016/0031-9201(96)03163-9</ext-link>, 1996.</mixed-citation></ref>
      <ref id="bib1.bib64"><label>64</label><mixed-citation>Murphy, J. P. and King, S. D.: Reconciling Mars InSight Results, geoid, and melt evolution with 3D spherical models of convection, J. Geophys. Res.-Planet., 129, e2023JE008143, <ext-link xlink:href="https://doi.org/10.1029/2023JE008143" ext-link-type="DOI">10.1029/2023JE008143</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib65"><label>65</label><mixed-citation>Muzhinji, K., Shateyi, S., and Motsa, S. S.: The mixed finite element multigrid preconditioned MINRES method for Stokes equations, J. Appl. Fluid Mech., 9, 1285–1296, <ext-link xlink:href="https://doi.org/10.18869/acadpub.jafm.68.228.22805" ext-link-type="DOI">10.18869/acadpub.jafm.68.228.22805</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bib66"><label>66</label><mixed-citation>Neuharth, D., Brune, S., Glerum, A., Heine, C., and Welford, J. K.: Formation of continental microplates through rift linkage: Numerical modeling and its application to the Flemish Cap and Sao Paulo Plateau, Geochem. Geophy. Geosy., 22, e2020GC009615, <ext-link xlink:href="https://doi.org/10.1029/2020GC009615" ext-link-type="DOI">10.1029/2020GC009615</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib67"><label>67</label><mixed-citation>Offermans, N., Peplinski, A., Marin, O., Merzari, E., and Schlatter, P.: Performance of preconditioners for large-scale simulations using Nek5000, in: Spectral and High Order Methods for Partial Differential Equations ICOSAHOM 2018, edited by: Sherwin, S. J., Moxey, D., Peiró, J., Vincent, P. E., and Schwab, C., Lecture Notes in Computational Science and Engineering, 134, Springer, Cham, 263–272, <ext-link xlink:href="https://doi.org/10.1007/978-3-030-39647-3_20" ext-link-type="DOI">10.1007/978-3-030-39647-3_20</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib68"><label>68</label><mixed-citation>Park, J., Smelyanskiy, M., Yang, U. M., Mudigere, D., and Dubey, P.: High-performance algebraic multigrid solver optimized for multi-core based distributed parallel systems, in: Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, 1–12, <ext-link xlink:href="https://doi.org/10.1145/2807591.2807603" ext-link-type="DOI">10.1145/2807591.2807603</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib69"><label>69</label><mixed-citation>Pysklywec, R. N. and Shahnas, M. H.: Time-dependent surface topography in a coupled crust-mantle convection model, Geophys. J. Int., 154, 268–278, <ext-link xlink:href="https://doi.org/10.1046/j.1365-246X.2003.01987.x" ext-link-type="DOI">10.1046/j.1365-246X.2003.01987.x</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib70"><label>70</label><mixed-citation>Räss, L., Utkin, I., Duretz, T., Omlin, S., and Podladchikov, Y. Y.: Assessing the robustness and scalability of the accelerated pseudo-transient method, Geosci. Model Dev., 15, 5757–5786, <ext-link xlink:href="https://doi.org/10.5194/gmd-15-5757-2022" ext-link-type="DOI">10.5194/gmd-15-5757-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib71"><label>71</label><mixed-citation>Regorda, A., Thieulot, C., van Zelst, I., Erdős, Z., Maia, J., and Buiter, S.: Rifting Venus: Insights from numerical modeling, J. Geophys. Res.-Planet., 128, e2022JE007588, <ext-link xlink:href="https://doi.org/10.1029/2022JE007588" ext-link-type="DOI">10.1029/2022JE007588</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib72"><label>72</label><mixed-citation>Roy, A., Ghosh, D., and Mandal, N.: Dampening effect of global flows on Rayleigh–Taylor instabilities: implications for deep-mantle plumes vis-à-vis hotspot distributions, Geophys. J. Int., 236, 119–138, <ext-link xlink:href="https://doi.org/10.1093/gji/ggad414" ext-link-type="DOI">10.1093/gji/ggad414</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib73"><label>73</label><mixed-citation>Rudi, J., Stadler, G., and Ghattas, O.: Weighted BFBT preconditioner for Stokes flow problems with highly heterogeneous viscosity, SIAM J. Sci. Comput., 39, S272–S297, <ext-link xlink:href="https://doi.org/10.1137/16M108450X" ext-link-type="DOI">10.1137/16M108450X</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bib74"><label>74</label><mixed-citation>Saad, Y. and Schultz, M. H.: GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Sci. Stat. Comp., 7, 856–869, <ext-link xlink:href="https://doi.org/10.1137/0907058" ext-link-type="DOI">10.1137/0907058</ext-link>, 1986.</mixed-citation></ref>
      <ref id="bib1.bib75"><label>75</label><mixed-citation>Schenk, O., Gärtner, K., Fichtner, W., and Stricker, A.: PARDISO: a high-performance serial and parallel sparse linear solver in semiconductor device simulation, Future Gener. Comp. Sy., 18, 69–78, <ext-link xlink:href="https://doi.org/10.1016/S0167-739X(00)00076-5" ext-link-type="DOI">10.1016/S0167-739X(00)00076-5</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bib76"><label>76</label><mixed-citation>Schmalholz, S. M.: 3D numerical modeling of forward folding and reverse unfolding of a viscous single-layer: Implications for the formation of folds and fold patterns, Tectonophysics, 446, 31–41, <ext-link xlink:href="https://doi.org/10.1016/j.tecto.2007.09.005" ext-link-type="DOI">10.1016/j.tecto.2007.09.005</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bib77"><label>77</label><mixed-citation>Schmeling, H.: Dynamic models of continental rifting with melt generation, Tectonophysics, 480, 33–47, <ext-link xlink:href="https://doi.org/10.1016/j.tecto.2009.09.005" ext-link-type="DOI">10.1016/j.tecto.2009.09.005</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bib78"><label>78</label><mixed-citation>Schools, J. and Smrekar, S. E.: Formation of coronae topography and fractures via plume buoyancy and melting, Earth Planet. Sc. Lett., 633, 118643, <ext-link xlink:href="https://doi.org/10.1016/j.epsl.2024.118643" ext-link-type="DOI">10.1016/j.epsl.2024.118643</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib79"><label>79</label><mixed-citation>Seong, M., Kim, H.-S., Lee, K.-M., Kim, J., and So, B.-D.: Numerical Modeling of Subduction Zone Thermal Structure with Firedrake and Gmsh, Ocean Sci. J., 61, 43, <ext-link xlink:href="https://doi.org/10.1007/s12601-026-00292-8" ext-link-type="DOI">10.1007/s12601-026-00292-8</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bib80"><label>80</label><mixed-citation>Sharples, W., Jadamec, M. A., Moresi, L. N., and Capitanio, F. A.: Overriding plate controls on subduction evolution, J. Geophys. Res.-Sol. Ea., 119, 6684–6704, <ext-link xlink:href="https://doi.org/10.1002/2014JB011163" ext-link-type="DOI">10.1002/2014JB011163</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bib81"><label>81</label><mixed-citation>Silvester, D. and Wathen, A.: Fast iterative solution of stabilised Stokes systems Part II: Using general block preconditioners, SIAM J. Numer. Anal., 31, 1352–1367, <ext-link xlink:href="https://doi.org/10.1137/0731070" ext-link-type="DOI">10.1137/0731070</ext-link>, 1994.</mixed-citation></ref>
      <ref id="bib1.bib82"><label>82</label><mixed-citation>Suchoy, L., Goes, S., Maunder, B., Garel, F., and Davies, R.: Effects of basal drag on subduction dynamics from 2D numerical models, Solid Earth, 12, 79–93, <ext-link xlink:href="https://doi.org/10.5194/se-12-79-2021" ext-link-type="DOI">10.5194/se-12-79-2021</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib83"><label>83</label><mixed-citation>Ta, T., Choo, K., Tan, E., Jang, B., and Choi, E.: Accelerating DynEarthSol3D on tightly coupled CPU-GPU heterogeneous processors, Comput. Geosci., 79, 27–37, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2015.03.003" ext-link-type="DOI">10.1016/j.cageo.2015.03.003</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib84"><label>84</label><mixed-citation>Tackley, P. J. and King, S. D.: Testing the tracer ratio method for modeling active compositional fields in mantle convection simulations, Geochem. Geophy. Geosy., 4, <ext-link xlink:href="https://doi.org/10.1029/2001GC000214" ext-link-type="DOI">10.1029/2001GC000214</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib85"><label>85</label><mixed-citation>Taiwo, A., Bunge, H. P., Schuberth, B. S. A., Colli, L., and Vilacis, B.: Robust global mantle flow trajectories and their validation via dynamic topography histories, Geophys. J. Int., 234, 2160–2179, <ext-link xlink:href="https://doi.org/10.1093/gji/ggad188" ext-link-type="DOI">10.1093/gji/ggad188</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib86"><label>86</label><mixed-citation>Tan, E. and Gurnis, M.: Compressible thermochemical convection and application to lower mantle structures, J. Geophys. Res.-Sol. Ea., 112, <ext-link xlink:href="https://doi.org/10.1029/2006JB004505" ext-link-type="DOI">10.1029/2006JB004505</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bib87"><label>87</label><mixed-citation>Tan, E., Leng, W., Zhong, S., and Gurnis, M.: On the location of plumes and lateral movement of thermochemical structures with high bulk modulus in the 3-D compressible mantle, Geochem. Geophy. Geosy., 12, <ext-link xlink:href="https://doi.org/10.1029/2011GC003665" ext-link-type="DOI">10.1029/2011GC003665</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib88"><label>88</label><mixed-citation>Thakur, R., Rabenseifner, R., and Gropp, W.: Optimization of collective communication operations in MPICH, Int. J. High Perform. C., 19, 49–66, <ext-link xlink:href="https://doi.org/10.1177/1094342005051521" ext-link-type="DOI">10.1177/1094342005051521</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib89"><label>89</label><mixed-citation>Thieulot, C.: FANTOM: Two- and three-dimensional numerical modelling of creeping flows for the solution of geological problems, Phys. Earth Planet. In., 188, 47–68, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2011.06.011" ext-link-type="DOI">10.1016/j.pepi.2011.06.011</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib90"><label>90</label><mixed-citation>Thieulot, C. and Bangerth, W.: On the choice of finite element for applications in geodynamics, Solid Earth, 13, 229–249, <ext-link xlink:href="https://doi.org/10.5194/se-13-229-2022" ext-link-type="DOI">10.5194/se-13-229-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib91"><label>91</label><mixed-citation>Thieulot, C. and Bangerth, W.: On the choice of finite element for applications in geodynamics – Part 2: A comparison of simplex and hypercube elements, Solid Earth, 16, 457–476, <ext-link xlink:href="https://doi.org/10.5194/se-16-457-2025" ext-link-type="DOI">10.5194/se-16-457-2025</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib92"><label>92</label><mixed-citation>Trotter, J. D., Langguth, J., and Cai, X.: Targeting performance and user-friendliness: GPU-accelerated finite element computation with automated code generation in FEniCS, Parallel Comput., 118, 103051, <ext-link xlink:href="https://doi.org/10.1016/j.parco.2023.103051" ext-link-type="DOI">10.1016/j.parco.2023.103051</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib93"><label>93</label><mixed-citation>Uzawa, H.: Iterative methods for concave programming, in: Preference, Production and Capital: Selected Papers of Hirofumi Uzawa, Cambridge University Press, Cambridge, 135–148, <ext-link xlink:href="https://doi.org/10.1017/CBO9780511664496.011" ext-link-type="DOI">10.1017/CBO9780511664496.011</ext-link>, 1989.</mixed-citation></ref>
      <ref id="bib1.bib94"><label>94</label><mixed-citation>van Keken, P. E., King, S. D., Schmeling, H., Christensen, U. R., Neumeister, D., and Doin, M. P.: A comparison of methods for the modeling of thermochemical convection, J. Geophys. Res.-Sol. Ea., 102, 22477–22495, <ext-link xlink:href="https://doi.org/10.1029/97JB01353" ext-link-type="DOI">10.1029/97JB01353</ext-link>, 1997.</mixed-citation></ref>
      <ref id="bib1.bib95"><label>95</label><mixed-citation>Wang, L. H., Yarushina, V. M., Alkhimenkov, Y., and Podladchikov, Y.: Physics-inspired pseudo-transient method and its application in modelling focused fluid flow with geological complexity, Geophys. J. Int., 229, 1–20, <ext-link xlink:href="https://doi.org/10.1093/gji/ggab426" ext-link-type="DOI">10.1093/gji/ggab426</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib96"><label>96</label><mixed-citation>Wang, Y. and Li, M.: The interaction between mantle plumes and lithosphere and its surface expressions: 3-D numerical modelling, Geophys. J. Int., 225, 906–925, <ext-link xlink:href="https://doi.org/10.1093/gji/ggab014" ext-link-type="DOI">10.1093/gji/ggab014</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib97"><label>97</label><mixed-citation>Wathen, A. and Silvester, D.: Fast iterative solution of stabilised Stokes systems. Part I: Using simple diagonal preconditioners, SIAM J. Numer. Anal., 30, 630–649, <ext-link xlink:href="https://doi.org/10.1137/0730031" ext-link-type="DOI">10.1137/0730031</ext-link>, 1993.</mixed-citation></ref>
      <ref id="bib1.bib98"><label>98</label><mixed-citation>Williams, S., Waterman, A., and Patterson, D.: Roofline: an insightful visual performance model for multicore architectures, Commun. ACM, 52, 65–76, <ext-link xlink:href="https://doi.org/10.1145/1498765.1498785" ext-link-type="DOI">10.1145/1498765.1498785</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bib99"><label>99</label><mixed-citation>Wolf, L., Huismans, R. S., Rouby, D., Gawthorpe, R. L., and Wolf, S. G.: Links between faulting, topography, and sediment production during continental rifting: Insights from coupled surface process, thermomechanical modeling, J. Geophys. Res.-Sol. Ea., 127, e2021JB023490, <ext-link xlink:href="https://doi.org/10.1029/2021JB023490" ext-link-type="DOI">10.1029/2021JB023490</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib100"><label>100</label><mixed-citation>Wú, Q., Lin, S., and Unger, A.: Modeling multi-material structural patterns in tectonic flow with a discontinuous Galerkin level set method, J. Geophys. Res.-Sol. Ea., 128, e2023JB026806, <ext-link xlink:href="https://doi.org/10.1029/2023JB026806" ext-link-type="DOI">10.1029/2023JB026806</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib101"><label>101</label><mixed-citation>Xie, S., Cao, Z., Liu, L., Yang, D., Liu, M., Li, Y., and Qi, R.: The role of plume-lithosphere interaction in Hawaii-Emperor chain formation, Nat. Commun., 15, 6571, <ext-link xlink:href="https://doi.org/10.1038/s41467-024-51055-9" ext-link-type="DOI">10.1038/s41467-024-51055-9</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib102"><label>102</label><mixed-citation>Yoshida, M., Tajima, F., Honda, S., and Morishige, M.: The 3D numerical modeling of subduction dynamics: Plate stagnation and segmentation, and crustal advection in the wet mantle transition zone, J. Geophys. Res.-Sol. Ea., 117, <ext-link xlink:href="https://doi.org/10.1029/2011JB008989" ext-link-type="DOI">10.1029/2011JB008989</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib103"><label>103</label><mixed-citation>Yu, A. J., Gün, E., McCaffrey, K. J. W., and Heron, P. J.: A recipe for exotic continental fragment formation: Key constraints from numerical rift models, J. Geophys. Res.-Sol. Ea., 130, e2024JB030041, <ext-link xlink:href="https://doi.org/10.1029/2024JB030041" ext-link-type="DOI">10.1029/2024JB030041</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib104"><label>104</label><mixed-citation>Zheng, L., Gerya, T., Knepley, M., Yuen, D. A., Zhang, H., and Shi, Y.: GPU implementation of multigrid solver for Stokes equation with strongly variable viscosity, in: GPU Solutions to Multi-scale Problems in Science and Engineering, edited by: Yuen, D. A., Wang, L., Chi, X., Johnsson, L., Ge, W., and Shi, Y., Lecture Notes in Earth System Sciences, Springer, Berlin, Heidelberg, 321–333, <ext-link xlink:href="https://doi.org/10.1007/978-3-642-16405-7_21" ext-link-type="DOI">10.1007/978-3-642-16405-7_21</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bib105"><label>105</label><mixed-citation>Zhong, S.: Analytic solutions for Stokes' flow with lateral variations in viscosity, Geophys. J. Int., 124, 18–28, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.1996.tb06349.x" ext-link-type="DOI">10.1111/j.1365-246X.1996.tb06349.x</ext-link>, 1996. </mixed-citation></ref>
      <ref id="bib1.bib106"><label>106</label><mixed-citation>Zhong, S., Paulson, A., and Wahr, J.: Three-dimensional finite-element modelling of Earth's viscoelastic deformation: effects of lateral variations in lithospheric thickness, Geophys. J. Int., 155, 679–695, <ext-link xlink:href="https://doi.org/10.1046/j.1365-246X.2003.02084.x" ext-link-type="DOI">10.1046/j.1365-246X.2003.02084.x</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib107"><label>107</label><mixed-citation>Zhong, S., McNamara, A., Tan, E., Moresi, L., and Gurnis, M.: A benchmark study on mantle convection in a 3-D spherical shell using CitcomS, Geochem. Geophy. Geosy., 9, <ext-link xlink:href="https://doi.org/10.1029/2008GC002048" ext-link-type="DOI">10.1029/2008GC002048</ext-link>, 2008.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>High-performance geodynamics on GPUs using  the PETSc CUDA backend (GAUZZ v1.0.0)</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>1</label><mixed-citation>
       Adams, A. C., Stegman, D. R., Mohammadzadeh, H., Smrekar, S. E., and Tackley, P. J.:
Plume-Induced Delamination Initiated at Rift Zones on Venus, J. Geophys. Res.-Planet., 128, e2023JE007879, <a href="https://doi.org/10.1029/2023JE007879" target="_blank">https://doi.org/10.1029/2023JE007879</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>2</label><mixed-citation>
       Alber, D. M. and Olson, L. N.:
Parallel coarse-grid selection, Numer. Linear Algebr., 14, 611–643, <a href="https://doi.org/10.1002/nla.541" target="_blank">https://doi.org/10.1002/nla.541</a>, 2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>3</label><mixed-citation>
      
Alkhimenkov, Y. and Podladchikov, Y. Y.: Accelerated pseudo-transient method for elastic, viscoelastic, and coupled hydromechanical problems with applications, Geosci. Model Dev., 18, 563–583, <a href="https://doi.org/10.5194/gmd-18-563-2025" target="_blank">https://doi.org/10.5194/gmd-18-563-2025</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>4</label><mixed-citation>
       Alnæs, M. S., Blechta, J., Hake, J., Johansson, A., Kehlet, B., Logg, A., Richardson, C., Ring, J., Rognes, M. E., and Wells, G. N.:
The FEniCS project version 1.5, Archive of Numerical Software, 3, <a href="https://doi.org/10.11588/ans.2015.100.20553" target="_blank">https://doi.org/10.11588/ans.2015.100.20553</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>5</label><mixed-citation>
       Amestoy, P. R., Duff, I. S., L'Excellent, J.-Y., and Koster, J.:
MUMPS: a general purpose distributed memory sparse solver, in: Applied Parallel Computing. New Paradigms for HPC in Industry and Academia, edited by: Sørevik, T., Manne, F., Gebremedhin, A. H., and Moe, R., Springer, Berlin, Heidelberg, 121–130, <a href="https://doi.org/10.1007/3-540-70734-4_16" target="_blank">https://doi.org/10.1007/3-540-70734-4_16</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>6</label><mixed-citation>
       Anderson, R., Andrej, J., Barker, A., Bramwell, J., Camier, J.-S., Cerveny, J., Dobrev, V., Dudouit, Y., Fisher, A., Kolev, T., Pazner, W., Stowell, M., Tomov, V., Akkerman, I., Dahm, J., Medina, D., and Zampini, S.:
MFEM: A modular finite element methods library, Comput. Math. Appl., 81, 42–74, <a href="https://doi.org/10.1016/j.camwa.2020.06.009" target="_blank">https://doi.org/10.1016/j.camwa.2020.06.009</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>7</label><mixed-citation>
       Balay, S., Abhyankar, S., Adams, M. F., Benson, S., Brown, J., Brune, P., Buschelman, K., Constantinescu, E. M., Dalcin, L., Dener, A., Eijkhout, V., Faibussowitsch, J., Gropp, W. D., Hapla, V., Isaac, T., Jolivet, P., Karpeev, D., Kaushik, D., Knepley, M. G., Kong, F., Kruger, S., May, D. A., McInnes, L. C., Mills, R. T., Mitchell, L., Munson, T., Roman, J. E., Rupp, K., Sanan, P., Sarich, J., Smith, B. F., Suh, H., Zampini, S., Zhang, H., Zhang, H., and Zhang, J.:
PETSc/TAO Users Manual, Tech. Rep. ANL-21/39 – Revision 3.23, Argonne National Laboratory, Argonne, IL, USA, <a href="https://doi.org/10.2172/2565610" target="_blank">https://doi.org/10.2172/2565610</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>8</label><mixed-citation>
       Benzi, M., Golub, G. H., and Liesen, J.:
Numerical solution of saddle point problems, Acta Numer., 14, 1–137, <a href="https://doi.org/10.1017/S0962492904000212" target="_blank">https://doi.org/10.1017/S0962492904000212</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>9</label><mixed-citation>
       Beuchert, M. J. and Podladchikov, Y. Y.:
Viscoelastic mantle convection and lithospheric stresses, Geophys. J. Int., 183, 35–63, <a href="https://doi.org/10.1111/j.1365-246X.2010.04708.x" target="_blank">https://doi.org/10.1111/j.1365-246X.2010.04708.x</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>10</label><mixed-citation>
       Blankenbach, B., Busse, F., Christensen, U., Cserepes, L., Gunkel, D., Hansen, U., Harder, H., Jarvis, G., Koch, M., Marquart, G., Moore, D., Olson, P., Schmeling, H., and Schnaubelt, T.:
A benchmark comparison for mantle convection codes, Geophys. J. Int., 98, 23–38, <a href="https://doi.org/10.1111/j.1365-246X.1989.tb05511.x" target="_blank">https://doi.org/10.1111/j.1365-246X.1989.tb05511.x</a>, 1989.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>11</label><mixed-citation>
       Bourgouin, L., Mühlhaus, H. B., Hale, A. J., and Arsac, A.:
Towards realistic simulations of lava dome growth using the level set method, Acta Geotech., 1, 225–236, <a href="https://doi.org/10.1007/s11440-006-0016-6" target="_blank">https://doi.org/10.1007/s11440-006-0016-6</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>12</label><mixed-citation>
       Brandt, A.:
Multi-level adaptive solutions to boundary-value problems, Math. Comput., 31, 333–390, <a href="https://doi.org/10.1090/S0025-5718-1977-0431719-X" target="_blank">https://doi.org/10.1090/S0025-5718-1977-0431719-X</a>, 1977.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>13</label><mixed-citation>
       Brannick, J., Cao, F., Kahl, K., Falgout, R. D., and Hu, X.:
Optimal interpolation and compatible relaxation in classical algebraic multigrid, SIAM J. Sci. Comput., 40, A1473–A1493, <a href="https://doi.org/10.1137/17M1123456" target="_blank">https://doi.org/10.1137/17M1123456</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>14</label><mixed-citation>
       Brune, S., Popov, A. A., and Sobolev, S. V.:
Modeling suggests that oblique extension facilitates rifting and continental break-up, J. Geophys. Res.-Sol. Ea., 117, <a href="https://doi.org/10.1029/2011JB008860" target="_blank">https://doi.org/10.1029/2011JB008860</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>15</label><mixed-citation>
       Burstedde, C., Stadler, G., Alisic, L., Wilcox, L. C., Tan, E., Gurnis, M., and Ghattas, O.:
Large-scale adaptive mantle convection simulation, Geophys. J. Int., 192, 889–906, <a href="https://doi.org/10.1093/gji/ggs070" target="_blank">https://doi.org/10.1093/gji/ggs070</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>16</label><mixed-citation>
       Capitanio, F. A., Stegman, D. R., Moresi, L. N., and Sharples, W.:
Upper plate controls on deep subduction, trench migrations and deformations at convergent margins, Tectonophysics, 483, 80–92, <a href="https://doi.org/10.1016/j.tecto.2009.08.020" target="_blank">https://doi.org/10.1016/j.tecto.2009.08.020</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>17</label><mixed-citation>
       Cecka, C., Lew, A. J., and Darve, E.:
Assembly of finite element methods on graphics processors, Int. J. Numer. Meth. Eng., 85, 640–669, <a href="https://doi.org/10.1002/nme.2989" target="_blank">https://doi.org/10.1002/nme.2989</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>18</label><mixed-citation>
       Chang, J. and So, B.-D.:
Partial Nonlinear Iteration During Early Continental Rifting for Symmetric Surface Topography and Heat Flux, Ocean Sci. J., 60, 38, <a href="https://doi.org/10.1007/s12601-025-00232-y" target="_blank">https://doi.org/10.1007/s12601-025-00232-y</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>19</label><mixed-citation>
       Chen, C., Pouransari, H., Rajamanickam, S., Boman, E. G., and Darve, E.:
A distributed-memory hierarchical solver for general sparse linear systems, Parallel Comput., 74, 49–64, <a href="https://doi.org/10.1016/j.parco.2017.12.004" target="_blank">https://doi.org/10.1016/j.parco.2017.12.004</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>20</label><mixed-citation>
       Clevenger, T. C. and Heister, T.:
Comparison between algebraic and matrix-free geometric multigrid for a Stokes problem on adaptive meshes with variable viscosity, Numer. Linear Algebr., 28, e2375, <a href="https://doi.org/10.1002/nla.2375" target="_blank">https://doi.org/10.1002/nla.2375</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>21</label><mixed-citation>
       Colli, L., Bunge, H. P., and Oeser, J.:
Impact of model inconsistencies on reconstructions of past mantle flow obtained using the adjoint method, Geophys. J. Int., 221, 617–639, <a href="https://doi.org/10.1093/gji/ggaa023" target="_blank">https://doi.org/10.1093/gji/ggaa023</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>22</label><mixed-citation>
       Crameri, F. and Tackley, P. J.:
Parameters controlling dynamically self-consistent plate tectonics and single-sided subduction in global models of mantle convection, J. Geophys. Res.-Sol. Ea., 120, 3680–3706, <a href="https://doi.org/10.1002/2014JB011664" target="_blank">https://doi.org/10.1002/2014JB011664</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>23</label><mixed-citation>
       Crameri, F., Schmeling, H., Golabek, G. J., Duretz, T., Orendt, R., Buiter, S. J. H., May, D. A., Kaus, B. J. P., Gerya, T. V., and Tackley, P. J.:
A comparison of numerical surface topography calculations in geodynamic modelling: an evaluation of the “sticky air” method, Geophys. J. Int., 189, 38–54, <a href="https://doi.org/10.1111/j.1365-246X.2012.05388.x" target="_blank">https://doi.org/10.1111/j.1365-246X.2012.05388.x</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>24</label><mixed-citation>
       d'Acremont, E., Leroy, S., and Burov, E. B.:
Numerical modelling of a mantle plume: the plume head-lithosphere interaction in the formation of an oceanic large igneous province, Earth Planet. Sc. Lett., 206, 379–396, <a href="https://doi.org/10.1016/S0012-821X(02)01058-0" target="_blank">https://doi.org/10.1016/S0012-821X(02)01058-0</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>25</label><mixed-citation>
       Davies, D. R., Wilson, C. R., and Kramer, S. C.:
Fluidity: A fully unstructured anisotropic adaptive mesh computational modeling framework for geodynamics, Geochem. Geophy. Geosy., 12, <a href="https://doi.org/10.1029/2011GC003551" target="_blank">https://doi.org/10.1029/2011GC003551</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>26</label><mixed-citation>
       Davies, G. F. and Gurnis, M.:
Interaction of mantle dregs with convection: Lateral heterogeneity at the core-mantle boundary, Geophys. Res. Lett., 13, 1517–1520, <a href="https://doi.org/10.1029/GL013i013p01517" target="_blank">https://doi.org/10.1029/GL013i013p01517</a>, 1986.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>27</label><mixed-citation>
       Deakin, T., Price, J., Martineau, M., and McIntosh-Smith, S.:
Evaluating attainable memory bandwidth of parallel programming models via BabelStream, International Journal of Computational Science and Engineering, 17, 247–262, <a href="https://doi.org/10.1504/IJCSE.2018.095847" target="_blank">https://doi.org/10.1504/IJCSE.2018.095847</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>28</label><mixed-citation>
       De Sterck, H., Yang, U. M., and Heys, J. J.:
Reducing complexity in parallel algebraic multigrid preconditioners, SIAM J. Matrix Anal. A., 27, 1019–1039, <a href="https://doi.org/10.1137/040615729" target="_blank">https://doi.org/10.1137/040615729</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>29</label><mixed-citation>
       Do, S. H., So, B. D., Kim, Y. G., and Kim, G. B.:
Lithospheric strength inferred from modeling of buckling structure: Implications for stress state of the East Sea (Japan Sea), Tectonophysics, 858, 229859, <a href="https://doi.org/10.1016/j.tecto.2023.229859" target="_blank">https://doi.org/10.1016/j.tecto.2023.229859</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>30</label><mixed-citation>
       Do, S. H., So, B. D., and Shin, Y. H.:
Degree of coupling in 3D multilayer continental lithospheric buckling: Implications for tectonic underpressure, J. Geophys. Res.-Sol. Ea., 130, e2024JB029465, <a href="https://doi.org/10.1029/2024JB029465" target="_blank">https://doi.org/10.1029/2024JB029465</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>31</label><mixed-citation>
       Duretz, T., May, D. A., Gerya, T. V., and Tackley, P. J.:
Discretization errors and free surface stabilization in the finite difference and marker-in-cell method for applied geodynamics: A numerical study, Geochem. Geophy. Geosy., 12, <a href="https://doi.org/10.1029/2011GC003567" target="_blank">https://doi.org/10.1029/2011GC003567</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>32</label><mixed-citation>
       Enns, A., Becker, T. W., and Schmeling, H.:
The dynamics of subduction and trench migration for viscosity stratification, Geophys. J. Int., 160, 761–775, <a href="https://doi.org/10.1111/j.1365-246X.2005.02519.x" target="_blank">https://doi.org/10.1111/j.1365-246X.2005.02519.x</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>33</label><mixed-citation>
       Falgout, R. D., Jones, J. E., and Yang, U. M.:
The design and implementation of hypre, a library of parallel high performance preconditioners, in: Numerical Solution of Partial Differential Equations on Parallel Computers, edited by: Bruaset, A. M. and Tveito, A., Lecture Notes in Computational Science and Engineering, 51, Springer, Berlin, Heidelberg, 267–294, <a href="https://doi.org/10.1007/3-540-31619-1_8" target="_blank">https://doi.org/10.1007/3-540-31619-1_8</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>34</label><mixed-citation>
       Gassmöller, R., Dannberg, J., Bangerth, W., Heister, T., and Myhill, R.:
On formulations of compressible mantle convection, Geophys. J. Int., 221, 1264–1280, <a href="https://doi.org/10.1093/gji/ggaa078" target="_blank">https://doi.org/10.1093/gji/ggaa078</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>35</label><mixed-citation>
       Gerya, T. V. and Yuen, D. A.:
Characteristics-based marker-in-cell method with conservative finite-differences schemes for modeling geological flows with strongly variable transport properties, Phys. Earth Planet. In., 140, 293–318, <a href="https://doi.org/10.1016/j.pepi.2003.09.006" target="_blank">https://doi.org/10.1016/j.pepi.2003.09.006</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>36</label><mixed-citation>
       Gerya, T. V., May, D. A., and Duretz, T.:
An adaptive staggered grid finite difference method for modeling geodynamic Stokes flows with strongly variable viscosity, Geochem. Geophy. Geosy., 14, 1200–1225, <a href="https://doi.org/10.1002/ggge.20078" target="_blank">https://doi.org/10.1002/ggge.20078</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>37</label><mixed-citation>
       Gerya, T. V., Stern, R. J., Baes, M., Sobolev, S. V., and Whattam, S. A.:
Plate tectonics on the Earth triggered by plume-induced subduction initiation, Nature, 527, 221–225, <a href="https://doi.org/10.1038/nature15752" target="_blank">https://doi.org/10.1038/nature15752</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>38</label><mixed-citation>
       Graham, R. L., Woodall, T. S., and Squyres, J. M.:
Open MPI: A Flexible High Performance MPI, in: Parallel Processing and Applied Mathematics, edited by: Wyrzykowski, R., Dongarra, J., Meyer, N., and Waśniewski, J., Springer Berlin Heidelberg, Berlin, Heidelberg, 228–239, <a href="https://doi.org/10.1007/11752578_29" target="_blank">https://doi.org/10.1007/11752578_29</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>39</label><mixed-citation>
       Henson, V. E. and Yang, U. M.:
BoomerAMG: A parallel algebraic multigrid solver and preconditioner, Appl. Numer. Math., 41, 155–177, <a href="https://doi.org/10.1016/S0168-9274(01)00115-5" target="_blank">https://doi.org/10.1016/S0168-9274(01)00115-5</a>, 2002.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>40</label><mixed-citation>
       Hestenes, M. R. and Stiefel, E.:
Methods of conjugate gradients for solving linear systems, J. Res. Nat. Bur. Stand., 49, 409–436, <a href="https://doi.org/10.6028/jres.049.044" target="_blank">https://doi.org/10.6028/jres.049.044</a>, 1952.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>41</label><mixed-citation>
      
Hillebrand, B., Thieulot, C., Geenen, T., van den Berg, A. P., and Spakman, W.: Using the level set method in geodynamical modeling of multi-material flows and Earth's free surface, Solid Earth, 5, 1087–1098, <a href="https://doi.org/10.5194/se-5-1087-2014" target="_blank">https://doi.org/10.5194/se-5-1087-2014</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>42</label><mixed-citation>
       Huismans, R. S. and Beaumont, C.:
Symmetric and asymmetric lithospheric extension: Relative effects of frictional-plastic and viscous strain softening, J. Geophys. Res.-Sol. Ea., 108, <a href="https://doi.org/10.1029/2002JB002026" target="_blank">https://doi.org/10.1029/2002JB002026</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>43</label><mixed-citation>
      
Jang, D.-K., Lee, K.-M., Thieulot, C., Choi, W.-H., and So, B.-D.: Efficient Uzawa algorithms with projection strategies for geodynamic Stokes flow, EGUsphere [preprint], <a href="https://doi.org/10.5194/egusphere-2025-5480" target="_blank">https://doi.org/10.5194/egusphere-2025-5480</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>44</label><mixed-citation>
       Jang, M.-S. and So, B.-D.:
Generation of Channelized Mantle Flow Beyond the Rift Zone Accelerated by Thermal Heterogeneity and Rift Propagation, Geochem. Geophy. Geosy., 27, e2025GC012743, <a href="https://doi.org/10.1029/2025GC012743" target="_blank">https://doi.org/10.1029/2025GC012743</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>45</label><mixed-citation>
       Keum, J. Y. and So, B. D.:
Effect of buoyant sediment overlying subducting plates on trench geometry: 3D viscoelastic free subduction modeling, Geophys. Res. Lett., 48, e2021GL093498, <a href="https://doi.org/10.1029/2021GL093498" target="_blank">https://doi.org/10.1029/2021GL093498</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>46</label><mixed-citation>
       Keum, J. Y. and So, B. D.:
Sediment buoyancy controls the effective slab pull force and deviatoric stress along trenches: Insights from 3D free-subduction model, Tectonophysics, 862, 229970, <a href="https://doi.org/10.1016/j.tecto.2023.229970" target="_blank">https://doi.org/10.1016/j.tecto.2023.229970</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>47</label><mixed-citation>
       King, S. D.:
On topography and geoid from 2-D stagnant lid convection calculations, Geochem. Geophy. Geosy., 10, <a href="https://doi.org/10.1029/2008GC002250" target="_blank">https://doi.org/10.1029/2008GC002250</a>, 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>48</label><mixed-citation>
       Kronbichler, M. and Ljungkvist, K.:
Multigrid for Matrix-Free High-Order Finite Element Computations on Graphics Processors, ACM Transactions on Parallel Computing, 6, 2:1–2:32, <a href="https://doi.org/10.1145/3322813" target="_blank">https://doi.org/10.1145/3322813</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>49</label><mixed-citation>
       Kronbichler, M., Heister, T., and Bangerth, W.:
High accuracy mantle convection simulation through modern numerical methods, Geophys. J. Int., 191, 12–29, <a href="https://doi.org/10.1111/j.1365-246X.2012.05609.x" target="_blank">https://doi.org/10.1111/j.1365-246X.2012.05609.x</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib50"><label>50</label><mixed-citation>
       Laik, A., Schellart, W. P., and Strak, V.:
Sustained indentation in 2-D models of continental collision involving whole mantle subduction, Geophys. J. Int., 232, 343–365, <a href="https://doi.org/10.1093/gji/ggac339" target="_blank">https://doi.org/10.1093/gji/ggac339</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib51"><label>51</label><mixed-citation>
       Lee, K.-M., Kim, H.-I., Jang, D.-K., and So, B.-D.:
A Comparative Study of 2D Numerical Simulations Using Vector and Potential Methods for Extending 3D Modeling of Planetary Evolution, Geosci. J., 28, 465–481, <a href="https://doi.org/10.1007/s12303-024-0013-5" target="_blank">https://doi.org/10.1007/s12303-024-0013-5</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib52"><label>52</label><mixed-citation>
      
Lee, K.-M., Jang, D.-K., Thieulot, C., and So, B.-D.: Codes and Dockerfile for geodynamics simulations using PETSc with GPUs (GAUZZ 1.0.0), Zenodo [code], <a href="https://doi.org/10.5281/zenodo.19936267" target="_blank">https://doi.org/10.5281/zenodo.19936267</a>, 2026 (code also available at: <a href="https://github.com/kmlee-geo/gauzz" target="_blank"/>, last access: 8 October 2026).

    </mixed-citation></ref-html>
<ref-html id="bib1.bib53"><label>53</label><mixed-citation>
       Leng, W. and Zhong, S.:
Viscous heating, adiabatic heating and energetic consistency in compressible mantle convection, Geophys. J. Int., 173, 693–702, <a href="https://doi.org/10.1111/j.1365-246X.2008.03745.x" target="_blank">https://doi.org/10.1111/j.1365-246X.2008.03745.x</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib54"><label>54</label><mixed-citation>
       Li, Y., Liu, L., Peng, D., Dong, H., and Li, S.:
Evaluating tomotectonic plate reconstructions using geodynamic models with data assimilation, the case for North America, Earth-Sci. Rev., 244, 104518, <a href="https://doi.org/10.1016/j.earscirev.2023.104518" target="_blank">https://doi.org/10.1016/j.earscirev.2023.104518</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib55"><label>55</label><mixed-citation>
       Liao, J. and Gerya, T.:
From continental rifting to seafloor spreading: insight from 3D thermo-mechanical modeling, Gondwana Res., 28, 1329–1343, <a href="https://doi.org/10.1016/j.gr.2014.11.004" target="_blank">https://doi.org/10.1016/j.gr.2014.11.004</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib56"><label>56</label><mixed-citation>
       MacLachlan, S. P. and Oosterlee, C. W.:
Local Fourier analysis for multigrid with overlapping smoothers applied to systems of PDEs, Numer. Linear Algebr., 18, 751–774, <a href="https://doi.org/10.1002/nla.762" target="_blank">https://doi.org/10.1002/nla.762</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib57"><label>57</label><mixed-citation>
       Maljaars, J. M., Richardson, C. N., and Sime, N.:
LEoPart: A particle library for FEniCS, Comput. Math. Appl., 81, 289–315, <a href="https://doi.org/10.1016/j.camwa.2020.04.023" target="_blank">https://doi.org/10.1016/j.camwa.2020.04.023</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib58"><label>58</label><mixed-citation>
       Mansour, J., Giordani, J., Moresi, L., Beucher, R., Kaluza, O., Velic, M., Farrington, R., Quenette, S., and Beall, A.:
Underworld2: Python Geodynamics Modelling for Desktop, HPC and Cloud, Journal of Open Source Software, 5, 1797, <a href="https://doi.org/10.21105/joss.01797" target="_blank">https://doi.org/10.21105/joss.01797</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib59"><label>59</label><mixed-citation>
       Markall, G. R., Slemmer, A., Ham, D. A., Kelly, P. H. J., Cantwell, C. D., and Sherwin, S. J.:
Finite Element Assembly Strategies on MultiCore and Many-Core Architectures, Int. J. Numer. Meth. Fl., 71, 80–97, <a href="https://doi.org/10.1002/fld.3648" target="_blank">https://doi.org/10.1002/fld.3648</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib60"><label>60</label><mixed-citation>
       May, D. A. and Moresi, L.:
Preconditioned iterative methods for Stokes flow problems arising in computational geodynamics, Phys. Earth Planet. In., 171, 33–47, <a href="https://doi.org/10.1016/j.pepi.2008.07.036" target="_blank">https://doi.org/10.1016/j.pepi.2008.07.036</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib61"><label>61</label><mixed-citation>
       May, D. A., Brown, J., and Le Pourhiet, L.:
A scalable, matrix-free multigrid preconditioner for finite element discretizations of heterogeneous Stokes flow, Comput. Method. Appl. M., 290, 496–523, <a href="https://doi.org/10.1016/j.cma.2015.03.014" target="_blank">https://doi.org/10.1016/j.cma.2015.03.014</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib62"><label>62</label><mixed-citation>
       Mills, R. T., Adams, M. F., Balay, S., Brown, J., Dener, A., Knepley, M., Kruger, S. E., Morgan, H., Munson, T., Rupp, K., Smith, B. F., Zampini, S., Zhang, H., and Zhang, J.:
Toward performance-portable PETSc for GPU-based exascale systems, Parallel Comput., 108, 102831, <a href="https://doi.org/10.1016/j.parco.2021.102831" target="_blank">https://doi.org/10.1016/j.parco.2021.102831</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib63"><label>63</label><mixed-citation>
       Moresi, L., Zhong, S., and Gurnis, M.:
The accuracy of finite element solutions of Stokes's flow with strongly varying viscosity, Phys. Earth Planet. In., 97, 83–94, <a href="https://doi.org/10.1016/0031-9201(96)03163-9" target="_blank">https://doi.org/10.1016/0031-9201(96)03163-9</a>, 1996.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib64"><label>64</label><mixed-citation>
       Murphy, J. P. and King, S. D.:
Reconciling Mars InSight Results, geoid, and melt evolution with 3D spherical models of convection, J. Geophys. Res.-Planet., 129, e2023JE008143, <a href="https://doi.org/10.1029/2023JE008143" target="_blank">https://doi.org/10.1029/2023JE008143</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib65"><label>65</label><mixed-citation>
      
Muzhinji, K., Shateyi, S., and Motsa, S. S.: The mixed finite element multigrid preconditioned MINRES method for Stokes equations, J. Appl. Fluid Mech., 9, 1285–1296, <a href="https://doi.org/10.18869/acadpub.jafm.68.228.22805" target="_blank">https://doi.org/10.18869/acadpub.jafm.68.228.22805</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib66"><label>66</label><mixed-citation>
       Neuharth, D., Brune, S., Glerum, A., Heine, C., and Welford, J. K.:
Formation of continental microplates through rift linkage: Numerical modeling and its application to the Flemish Cap and Sao Paulo Plateau, Geochem. Geophy. Geosy., 22, e2020GC009615, <a href="https://doi.org/10.1029/2020GC009615" target="_blank">https://doi.org/10.1029/2020GC009615</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib67"><label>67</label><mixed-citation>
       Offermans, N., Peplinski, A., Marin, O., Merzari, E., and Schlatter, P.:
Performance of preconditioners for large-scale simulations using Nek5000, in: Spectral and High Order Methods for Partial Differential Equations ICOSAHOM 2018, edited by: Sherwin, S. J., Moxey, D., Peiró, J., Vincent, P. E., and Schwab, C., Lecture Notes in Computational Science and Engineering, 134, Springer, Cham, 263–272, <a href="https://doi.org/10.1007/978-3-030-39647-3_20" target="_blank">https://doi.org/10.1007/978-3-030-39647-3_20</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib68"><label>68</label><mixed-citation>
       Park, J., Smelyanskiy, M., Yang, U. M., Mudigere, D., and Dubey, P.:
High-performance algebraic multigrid solver optimized for multi-core based distributed parallel systems, in: Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, 1–12, <a href="https://doi.org/10.1145/2807591.2807603" target="_blank">https://doi.org/10.1145/2807591.2807603</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib69"><label>69</label><mixed-citation>
       Pysklywec, R. N. and Shahnas, M. H.:
Time-dependent surface topography in a coupled crust-mantle convection model, Geophys. J. Int., 154, 268–278, <a href="https://doi.org/10.1046/j.1365-246X.2003.01987.x" target="_blank">https://doi.org/10.1046/j.1365-246X.2003.01987.x</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib70"><label>70</label><mixed-citation>
      
Räss, L., Utkin, I., Duretz, T., Omlin, S., and Podladchikov, Y. Y.: Assessing the robustness and scalability of the accelerated pseudo-transient method, Geosci. Model Dev., 15, 5757–5786, <a href="https://doi.org/10.5194/gmd-15-5757-2022" target="_blank">https://doi.org/10.5194/gmd-15-5757-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib71"><label>71</label><mixed-citation>
       Regorda, A., Thieulot, C., van Zelst, I., Erdős, Z., Maia, J., and Buiter, S.:
Rifting Venus: Insights from numerical modeling, J. Geophys. Res.-Planet., 128, e2022JE007588, <a href="https://doi.org/10.1029/2022JE007588" target="_blank">https://doi.org/10.1029/2022JE007588</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib72"><label>72</label><mixed-citation>
       Roy, A., Ghosh, D., and Mandal, N.:
Dampening effect of global flows on Rayleigh–Taylor instabilities: implications for deep-mantle plumes vis-à-vis hotspot distributions, Geophys. J. Int., 236, 119–138, <a href="https://doi.org/10.1093/gji/ggad414" target="_blank">https://doi.org/10.1093/gji/ggad414</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib73"><label>73</label><mixed-citation>
       Rudi, J., Stadler, G., and Ghattas, O.:
Weighted BFBT preconditioner for Stokes flow problems with highly heterogeneous viscosity, SIAM J. Sci. Comput., 39, S272–S297, <a href="https://doi.org/10.1137/16M108450X" target="_blank">https://doi.org/10.1137/16M108450X</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib74"><label>74</label><mixed-citation>
       Saad, Y. and Schultz, M. H.:
GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Sci. Stat. Comp., 7, 856–869, <a href="https://doi.org/10.1137/0907058" target="_blank">https://doi.org/10.1137/0907058</a>, 1986.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib75"><label>75</label><mixed-citation>
       Schenk, O., Gärtner, K., Fichtner, W., and Stricker, A.:
PARDISO: a high-performance serial and parallel sparse linear solver in semiconductor device simulation, Future Gener. Comp. Sy., 18, 69–78, <a href="https://doi.org/10.1016/S0167-739X(00)00076-5" target="_blank">https://doi.org/10.1016/S0167-739X(00)00076-5</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib76"><label>76</label><mixed-citation>
       Schmalholz, S. M.:
3D numerical modeling of forward folding and reverse unfolding of a viscous single-layer: Implications for the formation of folds and fold patterns, Tectonophysics, 446, 31–41, <a href="https://doi.org/10.1016/j.tecto.2007.09.005" target="_blank">https://doi.org/10.1016/j.tecto.2007.09.005</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib77"><label>77</label><mixed-citation>
       Schmeling, H.:
Dynamic models of continental rifting with melt generation, Tectonophysics, 480, 33–47, <a href="https://doi.org/10.1016/j.tecto.2009.09.005" target="_blank">https://doi.org/10.1016/j.tecto.2009.09.005</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib78"><label>78</label><mixed-citation>
       Schools, J. and Smrekar, S. E.:
Formation of coronae topography and fractures via plume buoyancy and melting, Earth Planet. Sc. Lett., 633, 118643, <a href="https://doi.org/10.1016/j.epsl.2024.118643" target="_blank">https://doi.org/10.1016/j.epsl.2024.118643</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib79"><label>79</label><mixed-citation>
       Seong, M., Kim, H.-S., Lee, K.-M., Kim, J., and So, B.-D.:
Numerical Modeling of Subduction Zone Thermal Structure with Firedrake and Gmsh, Ocean Sci. J., 61, 43, <a href="https://doi.org/10.1007/s12601-026-00292-8" target="_blank">https://doi.org/10.1007/s12601-026-00292-8</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib80"><label>80</label><mixed-citation>
       Sharples, W., Jadamec, M. A., Moresi, L. N., and Capitanio, F. A.:
Overriding plate controls on subduction evolution, J. Geophys. Res.-Sol. Ea., 119, 6684–6704, <a href="https://doi.org/10.1002/2014JB011163" target="_blank">https://doi.org/10.1002/2014JB011163</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib81"><label>81</label><mixed-citation>
       Silvester, D. and Wathen, A.:
Fast iterative solution of stabilised Stokes systems Part II: Using general block preconditioners, SIAM J. Numer. Anal., 31, 1352–1367, <a href="https://doi.org/10.1137/0731070" target="_blank">https://doi.org/10.1137/0731070</a>, 1994.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib82"><label>82</label><mixed-citation>
      
Suchoy, L., Goes, S., Maunder, B., Garel, F., and Davies, R.: Effects of basal drag on subduction dynamics from 2D numerical models, Solid Earth, 12, 79–93, <a href="https://doi.org/10.5194/se-12-79-2021" target="_blank">https://doi.org/10.5194/se-12-79-2021</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib83"><label>83</label><mixed-citation>
       Ta, T., Choo, K., Tan, E., Jang, B., and Choi, E.:
Accelerating DynEarthSol3D on tightly coupled CPU-GPU heterogeneous processors, Comput. Geosci., 79, 27–37, <a href="https://doi.org/10.1016/j.cageo.2015.03.003" target="_blank">https://doi.org/10.1016/j.cageo.2015.03.003</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib84"><label>84</label><mixed-citation>
       Tackley, P. J. and King, S. D.:
Testing the tracer ratio method for modeling active compositional fields in mantle convection simulations, Geochem. Geophy. Geosy., 4, <a href="https://doi.org/10.1029/2001GC000214" target="_blank">https://doi.org/10.1029/2001GC000214</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib85"><label>85</label><mixed-citation>
       Taiwo, A., Bunge, H. P., Schuberth, B. S. A., Colli, L., and Vilacis, B.:
Robust global mantle flow trajectories and their validation via dynamic topography histories, Geophys. J. Int., 234, 2160–2179, <a href="https://doi.org/10.1093/gji/ggad188" target="_blank">https://doi.org/10.1093/gji/ggad188</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib86"><label>86</label><mixed-citation>
       Tan, E. and Gurnis, M.:
Compressible thermochemical convection and application to lower mantle structures, J. Geophys. Res.-Sol. Ea., 112, <a href="https://doi.org/10.1029/2006JB004505" target="_blank">https://doi.org/10.1029/2006JB004505</a>, 2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib87"><label>87</label><mixed-citation>
       Tan, E., Leng, W., Zhong, S., and Gurnis, M.:
On the location of plumes and lateral movement of thermochemical structures with high bulk modulus in the 3-D compressible mantle, Geochem. Geophy. Geosy., 12, <a href="https://doi.org/10.1029/2011GC003665" target="_blank">https://doi.org/10.1029/2011GC003665</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib88"><label>88</label><mixed-citation>
       Thakur, R., Rabenseifner, R., and Gropp, W.:
Optimization of collective communication operations in MPICH, Int. J. High Perform. C., 19, 49–66, <a href="https://doi.org/10.1177/1094342005051521" target="_blank">https://doi.org/10.1177/1094342005051521</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib89"><label>89</label><mixed-citation>
       Thieulot, C.:
FANTOM: Two- and three-dimensional numerical modelling of creeping flows for the solution of geological problems, Phys. Earth Planet. In., 188, 47–68, <a href="https://doi.org/10.1016/j.pepi.2011.06.011" target="_blank">https://doi.org/10.1016/j.pepi.2011.06.011</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib90"><label>90</label><mixed-citation>
      
Thieulot, C. and Bangerth, W.: On the choice of finite element for applications in geodynamics, Solid Earth, 13, 229–249, <a href="https://doi.org/10.5194/se-13-229-2022" target="_blank">https://doi.org/10.5194/se-13-229-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib91"><label>91</label><mixed-citation>
      
Thieulot, C. and Bangerth, W.: On the choice of finite element for applications in geodynamics – Part 2: A comparison of simplex and hypercube elements, Solid Earth, 16, 457–476, <a href="https://doi.org/10.5194/se-16-457-2025" target="_blank">https://doi.org/10.5194/se-16-457-2025</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib92"><label>92</label><mixed-citation>
       Trotter, J. D., Langguth, J., and Cai, X.:
Targeting performance and user-friendliness: GPU-accelerated finite element computation with automated code generation in FEniCS, Parallel Comput., 118, 103051, <a href="https://doi.org/10.1016/j.parco.2023.103051" target="_blank">https://doi.org/10.1016/j.parco.2023.103051</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib93"><label>93</label><mixed-citation>
       Uzawa, H.:
Iterative methods for concave programming, in: Preference, Production and Capital: Selected Papers of Hirofumi Uzawa, Cambridge University Press, Cambridge, 135–148, <a href="https://doi.org/10.1017/CBO9780511664496.011" target="_blank">https://doi.org/10.1017/CBO9780511664496.011</a>, 1989.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib94"><label>94</label><mixed-citation>
       van Keken, P. E., King, S. D., Schmeling, H., Christensen, U. R., Neumeister, D., and Doin, M. P.:
A comparison of methods for the modeling of thermochemical convection, J. Geophys. Res.-Sol. Ea., 102, 22477–22495, <a href="https://doi.org/10.1029/97JB01353" target="_blank">https://doi.org/10.1029/97JB01353</a>, 1997.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib95"><label>95</label><mixed-citation>
       Wang, L. H., Yarushina, V. M., Alkhimenkov, Y., and Podladchikov, Y.:
Physics-inspired pseudo-transient method and its application in modelling focused fluid flow with geological complexity, Geophys. J. Int., 229, 1–20, <a href="https://doi.org/10.1093/gji/ggab426" target="_blank">https://doi.org/10.1093/gji/ggab426</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib96"><label>96</label><mixed-citation>
       Wang, Y. and Li, M.:
The interaction between mantle plumes and lithosphere and its surface expressions: 3-D numerical modelling, Geophys. J. Int., 225, 906–925, <a href="https://doi.org/10.1093/gji/ggab014" target="_blank">https://doi.org/10.1093/gji/ggab014</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib97"><label>97</label><mixed-citation>
       Wathen, A. and Silvester, D.:
Fast iterative solution of stabilised Stokes systems. Part I: Using simple diagonal preconditioners, SIAM J. Numer. Anal., 30, 630–649, <a href="https://doi.org/10.1137/0730031" target="_blank">https://doi.org/10.1137/0730031</a>, 1993.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib98"><label>98</label><mixed-citation>
       Williams, S., Waterman, A., and Patterson, D.:
Roofline: an insightful visual performance model for multicore architectures, Commun. ACM, 52, 65–76, <a href="https://doi.org/10.1145/1498765.1498785" target="_blank">https://doi.org/10.1145/1498765.1498785</a>, 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib99"><label>99</label><mixed-citation>
       Wolf, L., Huismans, R. S., Rouby, D., Gawthorpe, R. L., and Wolf, S. G.:
Links between faulting, topography, and sediment production during continental rifting: Insights from coupled surface process, thermomechanical modeling, J. Geophys. Res.-Sol. Ea., 127, e2021JB023490, <a href="https://doi.org/10.1029/2021JB023490" target="_blank">https://doi.org/10.1029/2021JB023490</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib100"><label>100</label><mixed-citation>
       Wú, Q., Lin, S., and Unger, A.:
Modeling multi-material structural patterns in tectonic flow with a discontinuous Galerkin level set method, J. Geophys. Res.-Sol. Ea., 128, e2023JB026806, <a href="https://doi.org/10.1029/2023JB026806" target="_blank">https://doi.org/10.1029/2023JB026806</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib101"><label>101</label><mixed-citation>
       Xie, S., Cao, Z., Liu, L., Yang, D., Liu, M., Li, Y., and Qi, R.:
The role of plume-lithosphere interaction in Hawaii-Emperor chain formation, Nat. Commun., 15, 6571, <a href="https://doi.org/10.1038/s41467-024-51055-9" target="_blank">https://doi.org/10.1038/s41467-024-51055-9</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib102"><label>102</label><mixed-citation>
       Yoshida, M., Tajima, F., Honda, S., and Morishige, M.:
The 3D numerical modeling of subduction dynamics: Plate stagnation and segmentation, and crustal advection in the wet mantle transition zone, J. Geophys. Res.-Sol. Ea., 117, <a href="https://doi.org/10.1029/2011JB008989" target="_blank">https://doi.org/10.1029/2011JB008989</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib103"><label>103</label><mixed-citation>
       Yu, A. J., Gün, E., McCaffrey, K. J. W., and Heron, P. J.:
A recipe for exotic continental fragment formation: Key constraints from numerical rift models, J. Geophys. Res.-Sol. Ea., 130, e2024JB030041, <a href="https://doi.org/10.1029/2024JB030041" target="_blank">https://doi.org/10.1029/2024JB030041</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib104"><label>104</label><mixed-citation>
       Zheng, L., Gerya, T., Knepley, M., Yuen, D. A., Zhang, H., and Shi, Y.:
GPU implementation of multigrid solver for Stokes equation with strongly variable viscosity, in: GPU Solutions to Multi-scale Problems in Science and Engineering, edited by: Yuen, D. A., Wang, L., Chi, X., Johnsson, L., Ge, W., and Shi, Y., Lecture Notes in Earth System Sciences, Springer, Berlin, Heidelberg, 321–333, <a href="https://doi.org/10.1007/978-3-642-16405-7_21" target="_blank">https://doi.org/10.1007/978-3-642-16405-7_21</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib105"><label>105</label><mixed-citation>
       Zhong, S.:
Analytic solutions for Stokes' flow with lateral variations in viscosity, Geophys. J. Int., 124, 18–28, <a href="https://doi.org/10.1111/j.1365-246X.1996.tb06349.x" target="_blank">https://doi.org/10.1111/j.1365-246X.1996.tb06349.x</a>, 1996.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib106"><label>106</label><mixed-citation>
       Zhong, S., Paulson, A., and Wahr, J.:
Three-dimensional finite-element modelling of Earth's viscoelastic deformation: effects of lateral variations in lithospheric thickness, Geophys. J. Int., 155, 679–695, <a href="https://doi.org/10.1046/j.1365-246X.2003.02084.x" target="_blank">https://doi.org/10.1046/j.1365-246X.2003.02084.x</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib107"><label>107</label><mixed-citation>
       Zhong, S., McNamara, A., Tan, E., Moresi, L., and Gurnis, M.:
A benchmark study on mantle convection in a 3-D spherical shell using CitcomS, Geochem. Geophy. Geosy., 9, <a href="https://doi.org/10.1029/2008GC002048" target="_blank">https://doi.org/10.1029/2008GC002048</a>, 2008.

    </mixed-citation></ref-html>--></article>
