<?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-5343-2026</article-id><title-group><article-title>Automatic tuning of iterative pseudo-transient solvers for modeling the deformation of heterogeneous media</article-title><alt-title>Autotuning pseudo-transient method</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1">
          <name><surname>Duretz</surname><given-names>Thibault</given-names></name>
          <email>duretz@uni-frankfurt.de</email>
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff2">
          <name><surname>de Montserrat</surname><given-names>Albert</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-1694-3735</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Sevilla</surname><given-names>Rubén</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff4">
          <name><surname>Räss</surname><given-names>Ludovic</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-1136-899X</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff5">
          <name><surname>Utkin</surname><given-names>Ivan</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-5233-6783</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff6">
          <name><surname>Spang</surname><given-names>Arne</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-6107-0403</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Institut für Geowissenschaften, Goethe‐Universität Frankfurt, Frankfurt, Germany</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Geophysical Fluid Dynamics, Institute of Geophysics, ETH Zurich, Zurich, Switzerland</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Zienkiewicz Centre for Computational Engineering, Faculty of Science and Engineering, Swansea University, Wales, UK</institution>
        </aff>
        <aff id="aff4"><label>4</label><institution>Institute of Earth sciences, University of Lausanne, Lausanne, Switzerland</institution>
        </aff>
        <aff id="aff5"><label>5</label><institution>Laboratory of Hydraulics, Hydrology and Glaciology (VAW), ETH Zurich, Zurich, Switzerland</institution>
        </aff>
        <aff id="aff6"><label>6</label><institution>Bayerisches Geoinstitut, Universität Bayreuth, Bayreuth, Germany</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Thibault Duretz (duretz@uni-frankfurt.de)</corresp></author-notes><pub-date><day>22</day><month>June</month><year>2026</year></pub-date>
      
      <volume>19</volume>
      <issue>12</issue>
      <fpage>5343</fpage><lpage>5362</lpage>
      <history>
        <date date-type="received"><day>13</day><month>November</month><year>2025</year></date>
           <date date-type="rev-request"><day>9</day><month>December</month><year>2025</year></date>
           <date date-type="rev-recd"><day>23</day><month>March</month><year>2026</year></date>
           <date date-type="accepted"><day>11</day><month>May</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Thibault Duretz 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/5343/2026/gmd-19-5343-2026.html">This article is available from https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026.html</self-uri><self-uri xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026.pdf">The full text article is available as a PDF file from https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e161">Geodynamic modeling has become a crucial tool for investigating the dynamics of Earth deformation across various scales. Such simulations often involve solving mechanical problems with significant material heterogeneities (e.g. strong viscosity contrasts) under nearly incompressible conditions. Recent advancements have enabled the development of iterative solvers based on Dynamic Relaxation (DR) or Pseudo-Transient schemes, which require minimal global communication and exhibit quasi-linear scaling on GPU and supercomputing architectures. These solvers incorporate automatic tuning of iterative parameters, including pseudo-time steps and damping coefficients, based on spectral estimates of the discrete operators, ensuring both robust and rapid convergence. We demonstrate the effectiveness of this approach on discretized problems with finite-difference and face-centered finite volume methods, including heterogeneous incompressible Stokes flows. Moreover, the relative algorithmic simplicity of DR-based methods allows straightforward extensions to compressible flow, multiphase flow, and nonlinear constitutive laws, opening promising avenues for large-scale, high-resolution simulations of geoscientific problems.</p>
  </abstract>
    </article-meta>
  </front>
<body>
      

      
<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e175">Geodynamic modeling has become an indispensable tool for simulating tectonic processes at various scales, ranging from the rock sample <xref ref-type="bibr" rid="bib1.bibx39" id="paren.1"><named-content content-type="pre">e.g.</named-content></xref> and outcrop levels <xref ref-type="bibr" rid="bib1.bibx57" id="paren.2"><named-content content-type="pre">e.g.</named-content></xref> to regional <xref ref-type="bibr" rid="bib1.bibx25" id="paren.3"/>, global <xref ref-type="bibr" rid="bib1.bibx21" id="paren.4"><named-content content-type="pre">e.g.</named-content></xref>, and planetary scales <xref ref-type="bibr" rid="bib1.bibx67" id="paren.5"><named-content content-type="pre">e.g.</named-content></xref>. Geodynamic modeling tools aim to solve the conservation equations of linear momentum, mass, and energy to produce full-field solutions for velocity, pressure, and temperature fields in space and time <xref ref-type="bibr" rid="bib1.bibx24" id="paren.6"/>.</p>
      <p id="d2e205">While 2D geodynamic simulations can effectively leverage solvers that employ sparse-direct or direct-iterative schemes <xref ref-type="bibr" rid="bib1.bibx10 bib1.bibx26 bib1.bibx22 bib1.bibx48" id="paren.7"><named-content content-type="pre">e.g.</named-content></xref>, 3D simulations generally require iterative solvers as direct methods become prohibitively expensive. Most approaches in this context rely on multigrid solvers <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx65 bib1.bibx37 bib1.bibx35 bib1.bibx4 bib1.bibx70 bib1.bibx62" id="paren.8"><named-content content-type="pre">e.g.</named-content></xref>, spectral methods <xref ref-type="bibr" rid="bib1.bibx3" id="paren.9"><named-content content-type="pre">e.g.</named-content></xref>, or pseudo-transient integration techniques <xref ref-type="bibr" rid="bib1.bibx16 bib1.bibx52" id="paren.10"/> to achieve efficient solutions.</p>
      <p id="d2e226">In geodynamic models, the viscosity field may exhibit smooth (i.e. thermal variations) and sharp (i.e. material interfaces) spatial variations of several orders of magnitude. This peculiarity makes the iterative solution procedure of the near-incompressible and incompressible Stokes equation particularly challenging <xref ref-type="bibr" rid="bib1.bibx65 bib1.bibx41 bib1.bibx52 bib1.bibx62" id="paren.11"><named-content content-type="pre">e.g.</named-content></xref>.</p>
      <p id="d2e234">Iterative solvers based on pseudo-transient integration or Dynamic Relaxation (DR) have been employed to solve compressible and incompressible geomechanical and geodynamical problems <xref ref-type="bibr" rid="bib1.bibx9 bib1.bibx47 bib1.bibx32" id="paren.12"><named-content content-type="pre">e.g.</named-content></xref>. These methods exhibit interesting parallel scaling properties on hardware accelerators such as Graphics Processing Units (GPU) and have therefore recently been applied to study incompressible Stokes flow and multi-physics coupled problems  <xref ref-type="bibr" rid="bib1.bibx52 bib1.bibx16 bib1.bibx51 bib1.bibx30 bib1.bibx64" id="paren.13"><named-content content-type="pre">e.g.</named-content></xref>. These solvers implement coupled solving strategies that involve iterative updates of both the velocity and pressure fields within a single iteration loop. Despite their algorithmic simplicity, their application to heterogeneous mechanical problems remains challenging <xref ref-type="bibr" rid="bib1.bibx30" id="paren.14"><named-content content-type="pre">e.g.</named-content></xref>. One strategy relies on smoothing sharp contrasts in material properties; however, this approach requires the use of a very fine spatial resolution to match exact flow solutions <xref ref-type="bibr" rid="bib1.bibx52 bib1.bibx30" id="paren.15"><named-content content-type="pre">e.g.</named-content></xref>. In practice, Stokes solvers are typically coupled with Marker-In-Cell or Level-Set approaches <xref ref-type="bibr" rid="bib1.bibx26 bib1.bibx33 bib1.bibx55 bib1.bibx58" id="paren.16"><named-content content-type="pre">e.g.</named-content></xref> to handle large viscous deformations and to represent heterogeneous materials. In the latter case, the degree to which discontinuities in material properties are smoothed depends on the spatial extent (or support) of the interpolant basis functions <xref ref-type="bibr" rid="bib1.bibx14" id="paren.17"><named-content content-type="pre">e.g.</named-content></xref>. The degree of smoothing is therefore not defined ad hoc and must be based on a narrow interpolation basis to best match the exact flow solution <xref ref-type="bibr" rid="bib1.bibx14" id="paren.18"/>. Moreover, current geodynamic pseudo-transient solvers rely on either empirical tuning of iterative parameters <xref ref-type="bibr" rid="bib1.bibx16" id="paren.19"><named-content content-type="pre">e.g.</named-content></xref> or exact derivation of optimal parameters based on simplified model configurations <xref ref-type="bibr" rid="bib1.bibx52 bib1.bibx1" id="paren.20"><named-content content-type="pre">e.g.</named-content></xref>. This situation hinders their applicability in solving “real-life” geodynamic problems, as optimal parameters may adapt to the evolving internal model state and material configuration. Exploring dynamic strategies to select optimal iterative parameters is a motivation to overcome current limitations.</p>
      <p id="d2e282">In this study, we aim to solve quasi-steady mechanical problems with large and sharp variations in material properties using DR-like iterative solvers and automatic tuning of iterative parameters. We present a decoupled solution strategy that combines Schur-complement reduction, Powell–Hestenes iterations, and DR-type of iterative solvers.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Mechanical equilibrium</title>
      <p id="d2e293">The equations governing quasi-static mechanical equilibrium in a classical continuum medium may be expressed as:

              <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M1" 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 displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mi>P</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn><mml:mo>,</mml:mo></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 displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>K</mml:mi></mml:mfrac></mml:mstyle><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

        where <inline-formula><mml:math id="M2" display="inline"><mml:mi mathvariant="bold-italic">τ</mml:mi></mml:math></inline-formula> is the deviatoric stress tensor, <inline-formula><mml:math id="M3" display="inline"><mml:mi>P</mml:mi></mml:math></inline-formula> is pressure, and <inline-formula><mml:math id="M4" display="inline"><mml:mi mathvariant="bold-italic">v</mml:mi></mml:math></inline-formula> is the velocity vector. The term <inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="italic">ρ</mml:mi><mml:mi mathvariant="bold-italic">g</mml:mi></mml:mrow></mml:math></inline-formula> is a forcing term, where <inline-formula><mml:math id="M6" display="inline"><mml:mi mathvariant="italic">ρ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M7" display="inline"><mml:mi mathvariant="bold-italic">g</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M8" display="inline"><mml:mi>K</mml:mi></mml:math></inline-formula> correspond to density, gravitational acceleration, and bulk modulus, respectively. The incompressible limit is reached if <inline-formula><mml:math id="M9" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>→</mml:mo><mml:mi mathvariant="normal">∞</mml:mi></mml:mrow></mml:math></inline-formula>. The isotropic viscous constitutive relationship takes the form of:

          <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M10" display="block"><mml:mrow><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:mspace width="0.125em" linebreak="nobreak"/><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">η</mml:mi><mml:mfenced open="[" close="]"><mml:mrow><mml:mi mathvariant="bold">D</mml:mi><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>)</mml:mo><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

        where <inline-formula><mml:math id="M11" 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> is the deviatoric strain rate tensor,  <inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:mi mathvariant="bold">D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mfenced close=")" open="("><mml:mrow><mml:mi mathvariant="bold">∇</mml:mi><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mi mathvariant="bold-italic">v</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M13" display="inline"><mml:mi mathvariant="bold">I</mml:mi></mml:math></inline-formula> is the identity matrix and <inline-formula><mml:math id="M14" display="inline"><mml:mi mathvariant="italic">η</mml:mi></mml:math></inline-formula> is the dynamic viscosity. In the following, the Stokes equations will be solved for velocity and pressure fields over a domain <inline-formula><mml:math id="M15" display="inline"><mml:mi mathvariant="normal">Π</mml:mi></mml:math></inline-formula>, accounting for Neumann boundary conditions (<inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mi mathvariant="normal">N</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) on the boundary <inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="normal">Π</mml:mi><mml:mi mathvariant="normal">N</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and Dirichlet boundary conditions (<inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">D</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) on the boundary <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="normal">Π</mml:mi><mml:mi mathvariant="normal">D</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Discretizations</title>
      <p id="d2e630">We consider two different types of numerical discretization of the Stokes equations, the staggered-grid Finite-Difference (FD) and Face-Centered Finite Volume (FCFV) Method. With either discretization, both the components of the velocity vector and the pressure will constitute the primitives, which we aim to solve for.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Staggered-Grid Finite-Differences Method</title>
      <p id="d2e640">The staggered-grid finite-difference is a popular approach to discretizing the Stokes equation originally proposed by <xref ref-type="bibr" rid="bib1.bibx31" id="text.21"/>. This scheme is constructed using conservative second-order finite difference and a staggered arrangement of both velocity and pressure (Fig. <xref ref-type="fig" rid="F1"/>a, b). The strong form of the Stokes equations (Eq. <xref ref-type="sec" rid="Ch1.S2"/>) is discretized using central finite differences:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M20" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E4"><mml:mtd><mml:mtext>4</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">mom</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold">∇</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold">∇</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mi>P</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E5"><mml:mtd><mml:mtext>5</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>K</mml:mi></mml:mfrac></mml:mstyle><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold">∇</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>,</mml:mo></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 class="stylechange" displaystyle="true"/><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:mfenced open="[" close="]"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold">D</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</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">3</mml:mn></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold">∇</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>)</mml:mo><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where the hat symbol denotes the discrete representation of the differential operators. The primitive solution fields <inline-formula><mml:math id="M21" display="inline"><mml:mi mathvariant="bold-italic">v</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M22" display="inline"><mml:mi>p</mml:mi></mml:math></inline-formula> are obtained by minimizing the momentum and continuity residuals (<inline-formula><mml:math id="M23" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">mom</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M24" display="inline"><mml:mrow><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). The staggered FD scheme represents, to our knowledge, the most computationally efficient stencil that satisfies the Inf-Sup stability condition in regular meshes <xref ref-type="bibr" rid="bib1.bibx63" id="paren.22"/>. For flows with smooth viscosity variations, FD achieves second-order accuracy in the L1 norm, while in the presence of sharp material heterogeneities, its accuracy reduces to first-order <xref ref-type="bibr" rid="bib1.bibx14" id="paren.23"/>. Geometrically, FD has been successfully implemented in Cartesian and polar coordinates <xref ref-type="bibr" rid="bib1.bibx50" id="paren.24"><named-content content-type="pre">e.g.</named-content></xref>, spherical configurations <xref ref-type="bibr" rid="bib1.bibx66 bib1.bibx40" id="paren.25"><named-content content-type="pre">e.g.</named-content></xref>, and on adaptively refined meshes <xref ref-type="bibr" rid="bib1.bibx25 bib1.bibx28" id="paren.26"><named-content content-type="pre">e.g.</named-content></xref>. However, its application in non-orthogonal meshes remains rare <xref ref-type="bibr" rid="bib1.bibx12" id="paren.27"><named-content content-type="pre">e.g.</named-content></xref> due to the need for extended stencils and the associated increase in algorithmic complexity. Consequently, the treatment of free-surface boundary conditions remains a notable challenge <xref ref-type="bibr" rid="bib1.bibx15 bib1.bibx38 bib1.bibx29" id="paren.28"><named-content content-type="pre">e.g.</named-content></xref>.</p>

      <fig id="F1"><label>Figure 1</label><caption><p id="d2e866">Grids employed for the discretization of mechanical problems. <bold>(a)</bold> 2D FD staggered grid, <bold>(b)</bold> 3D staggered grid, <bold>(c)</bold> 2D FCFV grid and <bold>(d)</bold> 3D FCFV grid.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f01.png"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Face-Centered Finite Volume Method (FCFV)</title>
      <p id="d2e895">The Face-Centered Finite-Volume (FCFV) method is an emerging discretization scheme rooted in the principles of the hybridizable discontinuous Galerkin (HDG) method <xref ref-type="bibr" rid="bib1.bibx8" id="paren.29"/>. This approach has been successfully employed to achieve full-field solutions for the Stokes equations in various types of viscosity distribution, including constant <xref ref-type="bibr" rid="bib1.bibx61" id="paren.30"/>, discontinuous <xref ref-type="bibr" rid="bib1.bibx59" id="paren.31"/>, and smoothly varying fields <xref ref-type="bibr" rid="bib1.bibx60" id="paren.32"/>. The FCFV scheme satisfies the Inf-Sup stability condition, making it particularly suitable for solving the Stokes equations. The discrete system of equations is derived from the weak formulation of the Stokes problem, using a constant degree of approximation for both velocity and pressure fields:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M25" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E7"><mml:mtd><mml:mtext>7</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">mom</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="normal">Γ</mml:mi><mml:mfenced open="[" close="]"><mml:mrow><mml:mfenced close=")" open="("><mml:mrow><mml:mfenced open="[" close="]"><mml:mrow><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mfenced open="[" close="]"><mml:mi mathvariant="bold-italic">τ</mml:mi></mml:mfenced><mml:mspace width="-0.125em" linebreak="nobreak"/></mml:mrow></mml:mfenced><mml:mo>+</mml:mo><mml:mfenced open="[" close="]"><mml:mrow><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mfenced close="]" open="["><mml:mi>P</mml:mi></mml:mfenced><mml:mspace width="-0.125em" linebreak="nobreak"/></mml:mrow></mml:mfenced><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:mfenced><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi>s</mml:mi><mml:mfenced close=")" open="("><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mo mathvariant="italic">{</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo mathvariant="italic">}</mml:mo><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mo mathvariant="italic">}</mml:mo><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:mrow></mml:mfenced><mml:mo>-</mml:mo><mml:mi mathvariant="italic">χ</mml:mi><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mi mathvariant="normal">N</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E8"><mml:mtd><mml:mtext>8</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">fac</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:msub><mml:mi mathvariant="normal">Γ</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mfenced open="(" close=")"><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>K</mml:mi></mml:mfrac></mml:mstyle><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E9"><mml:mtd><mml:mtext>9</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><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:mfenced close="]" open="["><mml:mrow><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">fac</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Γ</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="normal">Ω</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mfenced close=")" open="("><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>⊗</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>i</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mi>i</mml:mi></mml:msub><mml:mo>⊗</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:mfrac></mml:mstyle><mml:msub><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>i</mml:mi></mml:msub><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:mfenced><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 displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>a</mml:mi></mml:mfrac></mml:mstyle><mml:mfenced close=")" open="("><mml:mrow><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>+</mml:mo><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">fac</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:msub><mml:mi mathvariant="normal">Γ</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mi>s</mml:mi><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          The primitive variables, namely the hybrid velocity vector (<inline-formula><mml:math id="M26" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula>) and pressure (<inline-formula><mml:math id="M27" display="inline"><mml:mi>P</mml:mi></mml:math></inline-formula>), are obtained by minimizing the momentum and continuity residuals (<inline-formula><mml:math id="M28" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">mom</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M29" display="inline"><mml:mrow><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). The hybrid velocity is an independent variable defined on element faces, different from the element-wise velocity. It serves as a Lagrange multiplier–type trace variable that enforces weak continuity of the velocity field across elements. The symbol <inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">fac</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> corresponds to the number of faces of an element. <inline-formula><mml:math id="M31" display="inline"><mml:mrow><mml:mfenced open="[" close="]"><mml:mrow><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mfenced open="[" close="]"><mml:mo>⋅</mml:mo></mml:mfenced><mml:mspace width="-0.125em" linebreak="nobreak"/></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula> is the jump operator defined as <inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:mfenced open="[" close="]"><mml:mrow><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mfenced open="[" close="]"><mml:mo>⊙</mml:mo></mml:mfenced><mml:mspace width="-0.125em" linebreak="nobreak"/></mml:mrow></mml:mfenced><mml:mo>=</mml:mo><mml:msub><mml:mo>⊙</mml:mo><mml:mi mathvariant="normal">R</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mo>⊙</mml:mo><mml:mi mathvariant="normal">L</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M33" display="inline"><mml:mo>⊙</mml:mo></mml:math></inline-formula> denotes quantities defined on elements located to the right (R) and left (L) of an interface. <inline-formula><mml:math id="M34" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mo mathvariant="italic">{</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>⋅</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo mathvariant="italic">}</mml:mo><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> is the average operator defined as <inline-formula><mml:math id="M35" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mo mathvariant="italic">{</mml:mo><mml:mo>⊙</mml:mo><mml:mo mathvariant="italic">}</mml:mo><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mo mathvariant="italic">}</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mfenced open="(" close=")"><mml:mrow><mml:msub><mml:mo>⊙</mml:mo><mml:mi mathvariant="normal">R</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mo>⊙</mml:mo><mml:mi mathvariant="normal">L</mml:mi></mml:msub></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula>. The discretization requires the outward-pointing normal to each face (<inline-formula><mml:math id="M36" display="inline"><mml:mi mathvariant="bold-italic">n</mml:mi></mml:math></inline-formula>), the face area (<inline-formula><mml:math id="M37" display="inline"><mml:mi mathvariant="normal">Γ</mml:mi></mml:math></inline-formula>), the volume of the element (<inline-formula><mml:math id="M38" display="inline"><mml:mi mathvariant="normal">Ω</mml:mi></mml:math></inline-formula>), the stabilization parameter (<inline-formula><mml:math id="M39" display="inline"><mml:mi>s</mml:mi></mml:math></inline-formula>), the factor <inline-formula><mml:math id="M40" display="inline"><mml:mi>a</mml:mi></mml:math></inline-formula> (<inline-formula><mml:math id="M41" display="inline"><mml:mrow><mml:mi>a</mml:mi><mml:mo>=</mml:mo><mml:msubsup><mml:mo>∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">fac</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi mathvariant="normal">Γ</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mi>s</mml:mi></mml:mrow></mml:math></inline-formula>), the traction vector (<inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mi mathvariant="normal">N</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), and the function <inline-formula><mml:math id="M43" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> that indicates the presence of applied traction (<inline-formula><mml:math id="M44" display="inline"><mml:mn mathvariant="normal">0</mml:mn></mml:math></inline-formula> or <inline-formula><mml:math id="M45" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula>). The FCFV scheme requires the storage of the hybrid velocity vector and momentum residual at the midpoint of each element face, while the pressure, the deviatoric stress tensor and the continuity residual are stored in the centroids of the elements (Fig. <xref ref-type="fig" rid="F1"/>c, d). The discretization considered here yields a first-order approximation of velocity and pressure fields <xref ref-type="bibr" rid="bib1.bibx61" id="paren.33"/>, nevertheless second-order solutions can be constructed without altering the sparsity of the discretization <xref ref-type="bibr" rid="bib1.bibx27 bib1.bibx68" id="paren.34"/>. In this study, we implement the FCFV approach using structured quadrangular meshes, although the method is versatile and supports arbitrary element geometries, exhibiting low sensitivity to mesh distortions <xref ref-type="bibr" rid="bib1.bibx61" id="paren.35"/>. Additionally, FCFV can naturally handle internal boundaries and traction boundary conditions, such as free surfaces. Due to these features, the FCFV method is becoming increasingly popular in the geodynamics community, as highlighted by <xref ref-type="bibr" rid="bib1.bibx6" id="text.36"/>.</p>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Dynamic Relaxation with automatic tuning</title>
      <p id="d2e1527">In this section, we discuss the principles behind the Dynamic Relaxation method and illustrate its basic properties using a simple 1D Poisson example.</p>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Principle</title>
      <p id="d2e1537">The dynamic relaxation method is designed to iteratively solve both linear and nonlinear problems. The iterative procedure resembles an explicit time integration scheme, which is why it is also often referred to as a pseudo-transient integration method. As in classical iterative procedures, the DR method iteratively refines the unknown <inline-formula><mml:math id="M46" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula> until the magnitude of the residual of the partial differential operator <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> drops below a given tolerance. Once this criterion is met, <inline-formula><mml:math id="M48" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula> is considered a solution satisfying <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula>. Note that the function <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> may include physical transient terms; thus, this method is not limited to solving quasi-static problems <xref ref-type="bibr" rid="bib1.bibx52" id="paren.37"><named-content content-type="pre">e.g.</named-content></xref>. The algorithm is formulated by introducing the first and second-order derivative of the solution <inline-formula><mml:math id="M51" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula> in pseudo-time <xref ref-type="bibr" rid="bib1.bibx19" id="paren.38"/>:

            <disp-formula id="Ch1.E11" content-type="numbered"><label>11</label><mml:math id="M52" display="block"><mml:mrow><mml:mi mathvariant="bold">M</mml:mi><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msup><mml:mi mathvariant="normal">d</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:msup><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:mi mathvariant="bold">M</mml:mi><mml:mi>c</mml:mi><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M53" display="inline"><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula> refers to pseudo-time, <inline-formula><mml:math id="M54" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> is a damping parameter, and <inline-formula><mml:math id="M55" display="inline"><mml:mi mathvariant="bold">M</mml:mi></mml:math></inline-formula> is a preconditioner. Following previous work <xref ref-type="bibr" rid="bib1.bibx46 bib1.bibx44" id="paren.39"><named-content content-type="pre">e.g.</named-content></xref>, the second derivative is taken as the central derivative of the first derivative and the first derivative is taken as the average of the new and old values:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M56" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E12"><mml:mtd><mml:mtext>12</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msup><mml:mi mathvariant="normal">d</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:msup><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>≈</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mfenced open="(" close=")"><mml:mrow><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">old</mml:mi></mml:msup></mml:mrow></mml:mfenced></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"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><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:mfenced open="(" close=")"><mml:mrow><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">old</mml:mi></mml:msup></mml:mrow></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          This leads to update rules for the rate of change of <inline-formula><mml:math id="M57" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M58" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula> itself:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M59" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E14"><mml:mtd><mml:mtext>14</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi>b</mml:mi><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi>a</mml:mi><mml:msup><mml:mi mathvariant="bold">M</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E15"><mml:mtd><mml:mtext>15</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mspace linebreak="nobreak" width="0.25em"/><mml:msup><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="normal">new</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:mi>a</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>+</mml:mo><mml:mi>c</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M61" display="inline"><mml:mrow><mml:mi>b</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>-</mml:mo><mml:mi>c</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>)</mml:mo><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>+</mml:mo><mml:mi>c</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. Alternatively, the DR algorithm can be expressed in analogy to the conjugate gradient (CG) method <xref ref-type="bibr" rid="bib1.bibx18" id="paren.40"/>, using the variable  <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo>=</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="italic">β</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M63" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E16"><mml:mtd><mml:mtext>16</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="bold">M</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E17"><mml:mtd><mml:mtext>17</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M64" display="inline"><mml:mi mathvariant="bold-italic">p</mml:mi></mml:math></inline-formula> is analogous to the search direction, <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mi>a</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></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:mi>b</mml:mi></mml:mrow></mml:math></inline-formula>. The main difference is that the CG method involves different expressions for the parameters <inline-formula><mml:math id="M67" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M68" display="inline"><mml:mi mathvariant="italic">β</mml:mi></mml:math></inline-formula>, which need to be reevaluated at each iteration, requiring computationally expensive reduction operations (e.g. vector norms).</p>
      <p id="d2e2242">In either case, two iteration parameters need to be determined as a function of the minimum (<inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and maximum (<inline-formula><mml:math id="M70" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) eigenvalues of the discrete problem <xref ref-type="bibr" rid="bib1.bibx46 bib1.bibx44" id="paren.41"/>:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M71" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E18"><mml:mtd><mml:mtext>18</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="normal">Δ</mml:mi><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">2</mml:mn><mml:msqrt><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mfrac></mml:mstyle></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E19"><mml:mtd><mml:mtext>19</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi>c</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">damp</mml:mi></mml:msub><mml:mn mathvariant="normal">2</mml:mn><mml:msqrt><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M72" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">damp</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are scalar adjustment parameters. Whereas <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is strictly bounded (<inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>), no analogous upper bound applies to <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">damp</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. In our experiments, values in the range <inline-formula><mml:math id="M77" display="inline"><mml:mrow><mml:mo>≈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> were found to provide robust performance. For optimal convergence, at least in the case of linear problems, <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> should be chosen as large as possible (e.g.  <inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">CFL</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.999</mml:mn></mml:mrow></mml:math></inline-formula>). In theory <xref ref-type="bibr" rid="bib1.bibx44" id="paren.42"><named-content content-type="pre">e.g.</named-content></xref>, the optimal value of <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">damp</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is <inline-formula><mml:math id="M81" display="inline"><mml:mn mathvariant="normal">1.0</mml:mn></mml:math></inline-formula>. Nevertheless, we empirically observed that slightly lower values may further enhance convergence.</p>
      <p id="d2e2462">The maximum eigenvalue is found using the Gershgorin circle theorem:

            <disp-formula id="Ch1.E20" content-type="numbered"><label>20</label><mml:math id="M82" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>max⁡</mml:mo></mml:msub><mml:mo>=</mml:mo><mml:munder><mml:mo movablelimits="false">max⁡</mml:mo><mml:mi>i</mml:mi></mml:munder><mml:mfenced open="(" close=")"><mml:mrow><mml:mfenced open="|" close="|"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>+</mml:mo><mml:munder><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>≠</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:munder><mml:mfenced open="|" close="|"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced></mml:mrow></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          The minimum eigenvalue can only be approximated, using, for example, a Rayleigh quotient approach <xref ref-type="bibr" rid="bib1.bibx34 bib1.bibx53 bib1.bibx44" id="paren.43"><named-content content-type="pre">e.g.</named-content></xref>:

            <disp-formula id="Ch1.E21" content-type="numbered"><label>21</label><mml:math id="M83" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfenced close="|" open="|"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mi mathvariant="bold">M</mml:mi><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M84" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The evaluation of iterative parameters requires two reductions. Reduction operations should be avoided when possible given that reduction algorithms in shared memory architectures are not embarrassingly parallel, and global communication between different nodes is needed in distributed memory architectures. Nevertheless, this procedure can be performed every <inline-formula><mml:math id="M86" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> iterations, together with the evaluation of the stopping criteria. This approach provides successful convergence while minimizing the cost of global communication. It should be noted that the estimate of <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>min⁡</mml:mo></mml:msub></mml:mrow></mml:math></inline-formula> relies on differences in the residual. Before the iteration is initiated, this quantity is set to zero by default.</p>
      <p id="d2e2666">Lastly, the DR method requires the definition of a preconditioner,  typically defined as the Jacobi or diagonal preconditioner:

            <disp-formula id="Ch1.E22" content-type="numbered"><label>22</label><mml:math id="M88" display="block"><mml:mrow><mml:mi mathvariant="bold">M</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="normal">diag</mml:mi><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="bold-italic">r</mml:mi></mml:mrow><mml:mrow><mml:mo>∂</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          While this choice allows for trivial inversion and parallelisation, it restricts the convergence property of the iteration scheme. In the context of matrix-free schemes, both the evaluation of the preconditioner and maximum eigenvalue estimates can be achieved by using automatic differentiation of the residual function.</p>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Example: 1D Poisson problem</title>
      <p id="d2e2704">An example of the application of the DR method to a variable coefficient Poisson problem is depicted in Fig. <xref ref-type="fig" rid="F2"/>. The problem is defined as:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M89" display="block"><mml:mtable displaystyle="true"><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="bold-italic">r</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="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">q</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mspace width="0.25em" linebreak="nobreak"/><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 class="stylechange" displaystyle="true"/><mml:mi mathvariant="bold-italic">q</mml:mi><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi mathvariant="normal">∇</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The differential operators are discretized with both the FD and the FCFV over a 1D domain <inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>=</mml:mo><mml:mfenced close="]" open="["><mml:mrow><mml:mo>-</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula> and Dirichlet boundary conditions <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:mi>u</mml:mi><mml:mfenced close=")" open="("><mml:mrow><mml:mo>-</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:mi>u</mml:mi><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F2"/>a). The coefficient <inline-formula><mml:math id="M94" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula> varies with <inline-formula><mml:math id="M95" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F2"/>b) and is expressed as

            <disp-formula id="Ch1.Ex1"><mml:math id="M96" display="block"><mml:mtable rowspacing="0.2ex" class="split" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mi>f</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:mn mathvariant="normal">100</mml:mn><mml:mo mathsize="1.5em">(</mml:mo><mml:msup><mml:mfenced open="[" close="]"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:mi>exp⁡</mml:mi><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">200</mml:mn><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">0.1</mml:mn><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:msup><mml:mfenced open="[" close="]"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:mi>exp⁡</mml:mi><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">200</mml:mn><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.1</mml:mn><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo mathsize="1.5em">)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

          The forcing term  is set to zero so that <inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:mi>b</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>. The problem converges for different resolutions to a relative residual of <inline-formula><mml:math id="M98" 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>, with evaluation of iterative parameters and convergence check every 100 iterations. The frequency with which the parameters are reevaluated can influence the convergence behavior. In the present study, a value of 100 was empirically determined to provide an appropriate compromise.  The typical convergence behavior of the DR method is shown in Fig. <xref ref-type="fig" rid="F2"/>c. As a consequence of diagonal preconditioning, the number of iterations needed to reach convergence depends linearly on the size of the problem (Fig. <xref ref-type="fig" rid="F2"/>d). It is worth noting that for the 1D Poisson case, the FD and the FCFV deliver very similar results, both in terms of the numerical solution and convergence behavior.</p>
      <p id="d2e3015">The DR method is particularly well-suited to solving symmetric positive-definite problems. The solution of indefinite problems, such as those arising in saddle-point systems such as the Stokes equations, requires additional modifications.</p>

      <fig id="F2"><label>Figure 2</label><caption><p id="d2e3020">Properties of the DR method for the solution of a 1D Poisson problem with variable coefficient using both FD and FCFV. <bold>(a)</bold> Solution field in space. <bold>(b)</bold> Spatial distribution of the conductivity coefficient <inline-formula><mml:math id="M99" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>. <bold>(c)</bold> Convergence history for three different resolutions. <bold>(d)</bold> Linear scaling of the iteration count versus the resolution. The dashed line corresponds to a linear scaling trend. In all panels, the colored scatter points correspond to the FD results, while the solid black line represents the FCFV result. </p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f02.png"/>

        </fig>

</sec>
</sec>
<sec id="Ch1.S5">
  <label>5</label><title>Solution of mechanical problems: a decoupled Powell–Hestenes strategy</title>
      <p id="d2e3057">Geodynamic problems often rely on mixed velocity–pressure formulations, and solvers must be able to perform robustly under both weakly compressible and incompressible conditions. These problems are generally <italic>indefinite</italic> or even <italic>singular</italic>, making them well-suited for Schur complement-based approaches <xref ref-type="bibr" rid="bib1.bibx42 bib1.bibx23 bib1.bibx56" id="paren.44"><named-content content-type="pre">e.g.</named-content></xref>, such as the Powell–Hestenes iteration method <xref ref-type="bibr" rid="bib1.bibx10 bib1.bibx50" id="paren.45"/>.</p>
      <p id="d2e3074">Powell–Hestenes iterations provide a solution strategy based on the augmented Lagrangian formulation, <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:mi mathvariant="script">L</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>,</mml:mo><mml:mi>P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: 

          <disp-formula id="Ch1.E25" content-type="numbered"><label>25</label><mml:math id="M101" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mi mathvariant="script">L</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>,</mml:mo><mml:mi>P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><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:munder><mml:mo movablelimits="false">∫</mml:mo><mml:mi mathvariant="normal">Ω</mml:mi></mml:munder><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">η</mml:mi><mml:msup><mml:mfenced close="|" open="|"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>-</mml:mo><mml:munder><mml:mo movablelimits="false">∫</mml:mo><mml:mi mathvariant="normal">Ω</mml:mi></mml:munder><mml:mi>P</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi mathvariant="italic">γ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:munder><mml:mo movablelimits="false">∫</mml:mo><mml:mi mathvariant="normal">Ω</mml:mi></mml:munder><mml:msup><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mo>-</mml:mo><mml:munder><mml:mo movablelimits="false">∫</mml:mo><mml:mi mathvariant="normal">Ω</mml:mi></mml:munder><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:munder><mml:mo movablelimits="false">∫</mml:mo><mml:mi mathvariant="normal">Γ</mml:mi></mml:munder><mml:msub><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mi mathvariant="normal">BC</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">Γ</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
      <p id="d2e3255">This approach regularizes the original indefinite problem by adding a positive penalization term, <inline-formula><mml:math id="M102" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, which can be interpreted as a numerical bulk viscosity. Powell–Hestenes iterations involve successive decoupled solutions of the velocity and pressure fields (see Algorithm <xref ref-type="other" rid="Ch1.Prog1"/>). Each velocity update requires the solution of a velocity Schur complement. In matrix–free context, the residual of the velocity Schur complement can be formulated as a modified momentum equation:

          <disp-formula id="Ch1.E26" content-type="numbered"><label>26</label><mml:math id="M103" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">SCR</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="bold">∇</mml:mi><mml:msubsup><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msubsup><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></disp-formula>

        where the superscript <italic>old</italic> denotes values from the previous Powell–Hestenes iteration. This problem is typically positive semi-definite, and can therefore be directly tackled using the previously described DR method. Moreover, this solve does not need to be exact, which is particularly desirable in the context of iterative methods. After each inexact velocity solve, the pressure is updated using the following:

          <disp-formula id="Ch1.E27" content-type="numbered"><label>27</label><mml:math id="M104" display="block"><mml:mrow><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">old</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">new</mml:mi></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula>

        Powell–Hestenes iterations are performed until the residuals of the momentum and continuity equations are satisfied to a given tolerance. A known drawback of Powell–Hestenes iterations is their sensitivity to the choice of <inline-formula><mml:math id="M105" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, which is further explored in this study. Typically, this parameter is defined globally, such that a single value of <inline-formula><mml:math id="M106" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> is used for the entire computational domain.</p>
      <p id="d2e3389">In the following, we will use the DR method to solve for velocity updates within Powell–Hestenes iterations. We refer to this as the PH/DR scheme. For compressible models, the numerical bulk viscosity used in the Powell–Hestenes method is set to equal the local value of the physical (or effective) bulk viscosity which may thus vary in space. In this case, the iterative procedure converges in a single step.</p><boxed-text content-type="algorithm" position="float" id="Ch1.Prog1"><label>Algorithm 1</label><caption><p id="d2e3394">Powell–Hestenes with inner Dynamic Relaxation velocity solve (PH/DR).</p></caption><disp-quote content-type="algorithmic" specific-use="numbering{1}"><list>

    <list-item><label><bold>Require:</bold></label>

      <p id="d2e3404" specific-use="REQUIRE">Initial guess for velocity <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, pressure <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:msup><mml:mi>P</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, penalty parameter <inline-formula><mml:math id="M109" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>, tolerance <inline-formula><mml:math id="M110" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">PH</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></p>
          </list-item>

    <list-item>

      <p id="d2e3454" specific-use="STATE"><inline-formula><mml:math id="M111" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>←</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula></p>
          </list-item>

    <list-item>

      <p id="d2e3470" specific-use="REPEAT"><bold>repeat</bold> <list>
    <list-item>
      <p id="d2e3478" specific-use="STATE">Compute continuity residual: <inline-formula><mml:math id="M112" display="inline"><mml:mrow><mml:msubsup><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi><mml:mi>k</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:msup><mml:mi>P</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e3533" specific-use="STATE">Inner DR solve for velocity <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">v</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:math></inline-formula>:</p>
      <p id="d2e3552" specific-use="STATE">Initialize <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M115" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M116" display="inline"><mml:mi>a</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M117" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula></p>
      <p id="d2e3604" specific-use="STATE"><bold>repeat</bold></p>
      <p id="d2e3609" specific-use="STATE">(a) Compute Schur complement residual:</p>
      <p id="d2e3613" specific-use="STATE"><inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">SCR</mml:mi><mml:mi>m</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi>m</mml:mi></mml:msup><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:msup><mml:mi>P</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="bold">∇</mml:mi><mml:msubsup><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi><mml:mi>k</mml:mi></mml:msubsup><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">b</mml:mi></mml:mrow></mml:math></inline-formula></p>
      <p id="d2e3673" specific-use="STATE">(b) Update pseudo-rate of velocity:</p>
      <p id="d2e3677" specific-use="STATE"><inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:msup><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="italic">τ</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mi>b</mml:mi><mml:msup><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="italic">τ</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mi>m</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi>a</mml:mi><mml:msup><mml:mi mathvariant="bold">M</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">SCR</mml:mi><mml:mi>m</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula></p>
      <p id="d2e3743" specific-use="STATE">(c) Update velocity:</p>
      <p id="d2e3747" specific-use="STATE"><inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mrow><mml:mi>m</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">v</mml:mi><mml:mi>m</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>t</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="italic">τ</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></p>
      <p id="d2e3800" specific-use="STATE">(d) Every <inline-formula><mml:math id="M121" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> iterations, update DR parameters <inline-formula><mml:math id="M122" display="inline"><mml:mi>a</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M123" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula></p>
      <p id="d2e3824" specific-use="STATE">(e) <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>←</mml:mo><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula></p>
      <p id="d2e3844" specific-use="STATE">(f) <bold> until</bold> <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:mo>‖</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">SCR</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mo>&lt;</mml:mo><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>
 Set <inline-formula><mml:math id="M126" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">v</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">v</mml:mi><mml:mi>m</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e3899" specific-use="STATE">Update continuity residual: <inline-formula><mml:math id="M127" display="inline"><mml:mrow><mml:msubsup><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:msup><mml:mi>P</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</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:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e3964" specific-use="STATE">Update pressure: <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:msup><mml:mi>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>P</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msubsup><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e4008" specific-use="STATE"><inline-formula><mml:math id="M129" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>←</mml:mo><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula></p></list-item></list></p>
          </list-item>

    <list-item>

      <p id="d2e4028" specific-use="UNTIL"><bold>until</bold>  <inline-formula><mml:math id="M130" display="inline"><mml:mrow><mml:mo>‖</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="normal">mom</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mo>&lt;</mml:mo><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">PH</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M131" display="inline"><mml:mrow><mml:mo>‖</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi mathvariant="normal">cont</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mo>&lt;</mml:mo><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">PH</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></p>
          </list-item>

    <list-item>

      <p id="d2e4079" specific-use="RETURN"><bold>return</bold>  (<bold>v</bold><sup><italic>k</italic></sup>, <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:msup><mml:mi>P</mml:mi><mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>)</p>
          </list-item>
        </list></disp-quote></boxed-text>
      <p id="d2e4108">The model implementation is performed in the Julia language <xref ref-type="bibr" rid="bib1.bibx5" id="paren.46"/> using the <monospace>ParallelStencil.jl</monospace> package <xref ref-type="bibr" rid="bib1.bibx45" id="paren.47"/>, which allows to effectively target different CPU and GPU hardware backends. The computations were performed on a single NVIDIA V100 SXM2 GPU with 32 GB of DRAM.</p>
</sec>
<sec id="Ch1.S6">
  <label>6</label><title>Solution of mechanical problems: a pathological case</title>
      <p id="d2e4129">In this section, we present the model configuration used to test the PH/DR solver in the context of the FD. We then provide several analyzes that provide quantitative insight into the scaling behavior of the PH/DR scheme.</p>
<sec id="Ch1.S6.SS1">
  <label>6.1</label><title>Model configuration: multiple inclusions</title>
      <p id="d2e4139">In order to test the robustness of the proposed solution procedure and to evaluate its scaling behavior, we have designed a model configuration that combines known challenging elements for geodynamic flow solvers. These elements include the presence of large and sharp viscosity variations, as well as the enforcement of the incompressibility constraint. This type of flow problem is known to be pathological for geodynamic solvers that rely on iterative solution procedures <xref ref-type="bibr" rid="bib1.bibx43 bib1.bibx54 bib1.bibx52" id="paren.48"/>.</p>
      <p id="d2e4145">Both viscosity variations and incompressibility contribute to a deterioration in the conditioning of the discrete system. While this does not pose a problem for direct solvers, it is problematic for iterative solvers, whose performance strongly depends on the spectral properties of the discrete system.</p>
      <p id="d2e4148">The selected model configuration consists of a unit volume cubic domain, centered at the origin. The viscosity within the inclusions varies according to the viscosity contrast (<inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></inline-formula>). The background viscosity <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">ref</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is defined as <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">ref</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and is set to 1. A total of <inline-formula><mml:math id="M137" display="inline"><mml:mn mathvariant="normal">50</mml:mn></mml:math></inline-formula> spherical inclusions, with variable radii and positions, are distributed throughout the domain (see Appendix <xref ref-type="sec" rid="App1.Ch1.S1"/>). Weak inclusions have their viscosity set to the minimum viscosity value (<inline-formula><mml:math id="M138" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">weak</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), while strong inclusions have their viscosity set to the maximum viscosity value (<inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">strong</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). The flow is driven by boundary conditions that prescribe pure shear deformation in the <inline-formula><mml:math id="M140" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>–<inline-formula><mml:math id="M141" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> plane, with extension along the <inline-formula><mml:math id="M142" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>-axis. No flow occurs across the <inline-formula><mml:math id="M143" display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> boundaries, and free-slip conditions are applied to all faces of the domain.</p>
      <p id="d2e4309">An example of the model results is presented in Fig. <xref ref-type="fig" rid="F3"/>, showcasing the model configuration and the resulting flow field structure for a viscosity contrast spanning four orders of magnitude. The computations were performed with a numerical resolution of <inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">320</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells (<inline-formula><mml:math id="M145" display="inline"><mml:mn mathvariant="normal">66</mml:mn></mml:math></inline-formula> Mdof) for the FD (Fig. <xref ref-type="fig" rid="F3"/>a) and <inline-formula><mml:math id="M146" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">256</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells (<inline-formula><mml:math id="M147" display="inline"><mml:mn mathvariant="normal">168</mml:mn></mml:math></inline-formula> Mdof) for the FCFV (Fig. <xref ref-type="fig" rid="F3"/>b). These resolutions correspond to the largest resolution that can be achieved on a single GPU with 32 GB of DRAM (NVIDIA Tesla V100-SXM2-32GB).</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e4358">Example of multiple inclusion simulation result. Panels <bold>(a)</bold> and <bold>(b)</bold> shows the resulting flow field for the FD (<inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">320</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells and the FCFV (<inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">256</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells). The inclusions are coloured by the magnitude of the velocity vector (range: <inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.75</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>). The black arrows indicate the velocity vectors.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f03.png"/>

        </fig>

      <p id="d2e4411">Overall, the two methods exhibit a consistent and satisfactory qualitative agreement. Small differences between the two methods can be observed, particularly in regions where inclusions are in close proximity. These discrepancies stem from the different  spatial resolution used for the FD and the FCFV methods, their different order of accuracy, and their different treatments of interfaces. A more detailed comparison of the FD and FCFV results is provided in the Appendix <xref ref-type="sec" rid="App1.Ch1.S2"/>. The stopping criteria of the PH/DR scheme was set to <inline-formula><mml:math id="M151" 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>, the inner DR stropping criteria was set to <inline-formula><mml:math id="M152" 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>, the penalty parameter was set to <inline-formula><mml:math id="M153" display="inline"><mml:mn mathvariant="normal">15</mml:mn></mml:math></inline-formula> times the mean of the viscosity field (<inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">15</mml:mn><mml:mo>〈</mml:mo><mml:mi mathvariant="italic">η</mml:mi><mml:mo>〉</mml:mo></mml:mrow></mml:math></inline-formula>).</p>
<sec id="Ch1.S6.SS1.SSS1">
  <label>6.1.1</label><title>Scaling: problem size</title>
      <p id="d2e4476">The first test investigates the effect of problem size. To this end, we vary the model resolution by increasing the number of cells (<inline-formula><mml:math id="M155" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) uniformly along each dimension. The lowest resolution is <inline-formula><mml:math id="M156" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">32</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells, while the highest resolution is <inline-formula><mml:math id="M157" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">320</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells (131 <inline-formula><mml:math id="M158" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Mdof</mml:mi></mml:mrow></mml:math></inline-formula>) for the FD and <inline-formula><mml:math id="M159" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">256</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells (168 <inline-formula><mml:math id="M160" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Mdof</mml:mi></mml:mrow></mml:math></inline-formula>) for the FCFV.</p>
      <p id="d2e4540">The results show that for both the FD and the FCFV methods,  <inline-formula><mml:math id="M161" display="inline"><mml:mn mathvariant="normal">4</mml:mn></mml:math></inline-formula> to <inline-formula><mml:math id="M162" display="inline"><mml:mn mathvariant="normal">7</mml:mn></mml:math></inline-formula> Powell–Hestenes iterations are required to reach convergence, regardless of the value of <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. This number of Powell–Hestenes iterations appears to be largely insensitive to the problem size (Fig. <xref ref-type="fig" rid="F4"/>a). In contrast, the total number of DR iterations accumulated throughout the solution process increases linearly with the problem size (Fig. <xref ref-type="fig" rid="F4"/>b). This scaling behavior is consistent with that observed for the 1D Poisson problem discussed earlier (Sect. <xref ref-type="sec" rid="Ch1.S4"/>), and reflects the influence of the diagonal preconditioner. When normalized by the number of cells along one axis, the number of DR iterations required for convergence falls between <inline-formula><mml:math id="M164" display="inline"><mml:mn mathvariant="normal">70</mml:mn></mml:math></inline-formula> and <inline-formula><mml:math id="M165" display="inline"><mml:mn mathvariant="normal">30</mml:mn></mml:math></inline-formula> per <inline-formula><mml:math id="M166" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The iteration count per <inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> tends to decrease at higher resolutions, where the flow field is better resolved (Fig. <xref ref-type="fig" rid="F4"/>c). The wall-time is reported as a function of the total number of degrees of freedom, <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi mathvariant="normal">dof</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. For both FD and FCFV, the observed scaling is approximately linear with respect to the problem size, which can be attributed to the combined effects of diagonal preconditioning and GPU parallelism (Fig. <xref ref-type="fig" rid="F4"/>d). Interestingly, both FCFV and FD achieve comparable wall times for similar number of degrees of freedom and iterative tolerance (<inline-formula><mml:math id="M169" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>).</p>

      <fig id="F4"><label>Figure 4</label><caption><p id="d2e4647">Influence of problem size on the convergence of the PH/DR flow solver for a viscosity contrast of <inline-formula><mml:math id="M170" display="inline"><mml:mrow><mml:mn mathvariant="normal">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> using the FD and the FCFV methods. Panel <bold>(a)</bold> reports the total number of Powell–Hestenes iterations, <bold>(b)</bold> the total number of DR iterations for the entire solution procedure, <bold>(c)</bold> the number of DR iterations per grid point along one dimension, and <bold>(d)</bold> the wall-time.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f04.png"/>

          </fig>

</sec>
<sec id="Ch1.S6.SS1.SSS2">
  <label>6.1.2</label><title>Scaling: penalty factor</title>
      <p id="d2e4691">We further explore the influence of the penalty factor on the scaling of the PH/DR solver. In contrast to the previous tests, we vary the value of <inline-formula><mml:math id="M171" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> independently of the values of the viscosity field. We perform the computations for three different values of <inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e4711">The number of Powell–Hestenes iterations strongly depends on the magnitude of the penalty parameter <inline-formula><mml:math id="M173" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>. In particular, very small values of <inline-formula><mml:math id="M174" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> lead to a large number of Powell–Hestenes iterations that exceed <inline-formula><mml:math id="M175" display="inline"><mml:mn mathvariant="normal">50</mml:mn></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F5"/>a). This number decreases to fewer than <inline-formula><mml:math id="M176" display="inline"><mml:mn mathvariant="normal">10</mml:mn></mml:math></inline-formula> when <inline-formula><mml:math id="M177" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">100</mml:mn></mml:mrow></mml:math></inline-formula>, across all values of <inline-formula><mml:math id="M178" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula>. The total number of DR iterations is also higher for small values of <inline-formula><mml:math id="M179" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, reflecting the increased number of Powell–Hestenes iterations required for convergence. However, excessively large values of <inline-formula><mml:math id="M180" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> also degrade convergence. Specifically, higher values of <inline-formula><mml:math id="M181" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> increase the spectral radius of the discrete velocity Schur complement, which in turn increases the number of DR iterations needed to reach convergence (Fig. <xref ref-type="fig" rid="F5"/>b). An optimal range for <inline-formula><mml:math id="M182" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> is found between <inline-formula><mml:math id="M183" display="inline"><mml:mn mathvariant="normal">10</mml:mn></mml:math></inline-formula> and <inline-formula><mml:math id="M184" display="inline"><mml:mn mathvariant="normal">1000</mml:mn></mml:math></inline-formula>, depending on the value of <inline-formula><mml:math id="M185" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula>. The wall-time exhibits a similar dependence on <inline-formula><mml:math id="M186" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, closely following the behavior of the total number of DR iterations, with minimum values observed within the range <inline-formula><mml:math id="M187" display="inline"><mml:mn mathvariant="normal">10</mml:mn></mml:math></inline-formula>–<inline-formula><mml:math id="M188" display="inline"><mml:mn mathvariant="normal">1000</mml:mn></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F5"/>c).</p>

      <fig id="F5"><label>Figure 5</label><caption><p id="d2e4848">Influence of the penalty factor on the convergence of the PH/DR flow solver for a resolution of <inline-formula><mml:math id="M189" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">128</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells and <inline-formula><mml:math id="M190" display="inline"><mml:mn mathvariant="normal">3</mml:mn></mml:math></inline-formula> values of <inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula>. Panel <bold>(a)</bold> reports the total number of Powell–Hestenes iterations, <bold>(b)</bold> the total number of DR iteration for the entire solution procedure, <bold>(c)</bold> the wall time, and <bold>(d)</bold> the optimal value of <inline-formula><mml:math id="M192" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> as function of <inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula></p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f05.png"/>

          </fig>

      <p id="d2e4915">The magnitude of the penalty factor must be selected carefully to avoid an excessive number of iterations, which would degrade the wall-time. To guide this choice, we systematically varied the viscosity contrast and computed the optimal penalty value (<inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">opt</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>) for each corresponding <inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula>. The results reveal a linear relationship between <inline-formula><mml:math id="M196" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">opt</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula> in <inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>–<inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> space (Fig. <xref ref-type="fig" rid="F5"/>d). This relationship allows for a least-squares fit with a slope of <inline-formula><mml:math id="M200" display="inline"><mml:mn mathvariant="normal">0.3</mml:mn></mml:math></inline-formula> and an intercept of <inline-formula><mml:math id="M201" display="inline"><mml:mn mathvariant="normal">0.575</mml:mn></mml:math></inline-formula>. The resulting fit can be used to select an appropriate penalty parameter when varying the viscosity contrast. This particular scaling produces the best performance for the given model configuration; however, it should not be regarded as generally applicable to all cases. In most of the examples presented hereafter, we choose <inline-formula><mml:math id="M202" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> to be proportional to the mean of the viscosity field (<inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>∝</mml:mo><mml:mo>〈</mml:mo><mml:mi mathvariant="italic">η</mml:mi><mml:mo>〉</mml:mo></mml:mrow></mml:math></inline-formula>).</p>
</sec>
<sec id="Ch1.S6.SS1.SSS3">
  <label>6.1.3</label><title>Scaling: viscosity contrast</title>
      <p id="d2e5030">We investigate the effect of viscosity contrast on the PH/DR solver by systematically varying it over a range spanning two to six orders of magnitude. As expected, increasing the viscosity contrast impacts the performance of the PH/DR solver.</p>
      <p id="d2e5033">The number of Powell–Hestenes iterations required for convergence ranges from <inline-formula><mml:math id="M204" display="inline"><mml:mn mathvariant="normal">6</mml:mn></mml:math></inline-formula> to <inline-formula><mml:math id="M205" display="inline"><mml:mn mathvariant="normal">9</mml:mn></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F6"/>a). The decrease in the number of Powell–Hestenes iterations with increasing <inline-formula><mml:math id="M206" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula> is attributed to the scaling of the penalty factor with the mean of the viscosity field. Therefore, higher values of <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</mml:mi></mml:mrow></mml:math></inline-formula> lead to higher values of <inline-formula><mml:math id="M208" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, which in turn reduces the number of Powell–Hestenes iterations required for convergence. The total number of DR iterations scales approximately linearly with the viscosity contrast (Fig. <xref ref-type="fig" rid="F6"/>b). Consequently, the wall-time also exhibits a linear dependency on the viscosity contrast (Fig. <xref ref-type="fig" rid="F6"/>c).</p>

      <fig id="F6"><label>Figure 6</label><caption><p id="d2e5086">Influence of viscosity contrast on the convergence of the PH/DR flow solver for a resolution of <inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">128</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells and using <inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">opt</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>. Panel <bold>(a)</bold> reports the total number of Powell–Hestenes iterations, <bold>(b)</bold> the total number of DR iteration for the whole solution procedure, <bold>(c)</bold> the wall time.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f06.png"/>

          </fig>


</sec>
<sec id="Ch1.S6.SS1.SSS4">
  <label>6.1.4</label><title>Scaling: DR solve tolerance</title>
      <p id="d2e5136">Another important numerical parameter of the PH/DR procedure is the tolerance <inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> selected to exit the inner DR iterations (<inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). We have systematically varied the value of <inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> from <inline-formula><mml:math id="M214" 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> to <inline-formula><mml:math id="M215" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e5200">The magnitude of <inline-formula><mml:math id="M216" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> has a significant impact on the number of Powell–Hestenes iterations. Small values lead to more accurate inner DR solves, resulting in fewer Powell–Hestenes iterations. In contrast, increasing <inline-formula><mml:math id="M217" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> causes a quadratic increase in the number of Powell–Hestenes iterations (Fig. <xref ref-type="fig" rid="F7"/>a). The trend differs for the total number of DR iterations. Very small and very large values of <inline-formula><mml:math id="M218" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> lead to a high total iteration count, while a minimum is observed for <inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> in the range <inline-formula><mml:math id="M220" 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> to <inline-formula><mml:math id="M221" 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>. High values of <inline-formula><mml:math id="M222" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> result in inaccurate inner solves, increasing the number of Powell–Hestenes iterations. In contrast, very low values lead to over-solving of the inner system, unnecessarily increasing the total DR iterations (Fig. <xref ref-type="fig" rid="F7"/>b). This behavior directly affects the wall-time, which can vary by up to a factor of 2 depending on the choice of <inline-formula><mml:math id="M223" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. Therefore, <inline-formula><mml:math id="M224" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϵ</mml:mi><mml:mi mathvariant="normal">DR</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> must be carefully tuned to avoid these two limiting cases.</p>

      <fig id="F7"><label>Figure 7</label><caption><p id="d2e5315">Influence of the inner DR solve tolerance on the convergence of the PH/DR flow solver for a resolution of <inline-formula><mml:math id="M225" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">128</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells and <inline-formula><mml:math id="M226" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">η</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>. Panel <bold>(a)</bold> reports the total number of Powell–Hestenes iterations, <bold>(b)</bold> the total number of DR iteration for the whole solution procedure, <bold>(c)</bold> the wall time. <bold>(d)</bold> Influence of the viscosity contrast.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f07.png"/>

          </fig>

</sec>
</sec>
</sec>
<sec id="Ch1.S7">
  <label>7</label><title>Compressibility, multi-physics and nonlinear models</title>
      <p id="d2e5375">In this section, we show how the proposed PH/DR solution strategy can be further extended to solve steady mechanical problems that involve enriched physical models. These models are performed using the FD method, as the FCFV method still needs to be developed to tackle two-phase flow and nonlinear mechanical problems.</p>
<sec id="Ch1.S7.SS1">
  <label>7.1</label><title>Compressible mechanical problem</title>
      <p id="d2e5385">Although the previous examples were performed in the incompressible limit, the PH/DR scheme can adequately handle compressible deformation or flow. Here, we show examples of compressible flow performed in 2D, using FD. The model configuration consists of a domain <inline-formula><mml:math id="M227" 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 a circular inclusion of radius <inline-formula><mml:math id="M228" display="inline"><mml:mn mathvariant="normal">0.2</mml:mn></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F8"/>a). The background viscosity is set to <inline-formula><mml:math id="M229" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula> and the inclusion viscosity is <inline-formula><mml:math id="M230" display="inline"><mml:mn mathvariant="normal">100</mml:mn></mml:math></inline-formula>. Pure shear background deformation is applied at the boundaries. Compressibility is accounted for by including a bulk viscosity term:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M231" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E28"><mml:mtd><mml:mtext>28</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mi>P</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E29"><mml:mtd><mml:mtext>29</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi>P</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          The degree of compressibility varies with the value of bulk viscosity (<inline-formula><mml:math id="M232" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). To solve this problem, one can use PH/DR, setting the penalty factor independently of the bulk viscosity. Here, we express the penalty factor as the quasi-harmonic average of a reference numerical bulk viscosity (<inline-formula><mml:math id="M233" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">num</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">60</mml:mn><mml:mo>〈</mml:mo><mml:mi mathvariant="italic">η</mml:mi><mml:mo>〉</mml:mo></mml:mrow></mml:math></inline-formula>) and the physical bulk viscosity, <inline-formula><mml:math id="M234" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">phys</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, so that  <inline-formula><mml:math id="M235" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mfenced open="(" close=")"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">phys</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">num</mml:mi></mml:msub></mml:mrow></mml:mfenced><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. In this case, several Powell–Hestenes iterations will be needed to reach convergence. Alternatively, one can set the penalty factor to the bulk viscosity (<inline-formula><mml:math id="M236" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). In that case, PH/DR becomes equivalent to a basic DR scheme and only one Powell–Hestenes iteration is needed to reach convergence. We observe that in the case of compressible problems (<inline-formula><mml:math id="M237" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2.0</mml:mn></mml:mrow></mml:math></inline-formula>, equivalent to a Poisson ratio of 0.286), the basic DR can be beneficial, leading to a lower number of iterations compared to PH/DR (Fig. <xref ref-type="fig" rid="F8"/>b). The PH/DR solver exhibits a characteristic sawtooth convergence history that reflects the update of pressure at each Powell–Hestenes iteration (Fig. <xref ref-type="fig" rid="F8"/>b). In contrast, in weakly compressible cases (<inline-formula><mml:math id="M238" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, equivalent to a Poisson ratio of 0.499), the PH/DR schemes outperform the standard DR iteration approach. In the context of geodynamic problems involving weakly compressible-to-incompressible materials, PH/DR is preferred.</p>

      <fig id="F8"><label>Figure 8</label><caption><p id="d2e5655">Example of compressible flow: pure shear deformation with viscosity heterogeneity. <bold>(a)</bold> Divergence field either compressible case (<inline-formula><mml:math id="M239" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula>) or weakly compressible case (<inline-formula><mml:math id="M240" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>). Convergence history of DR and PH/DR for the <bold>(b)</bold> compressible and <bold>(c)</bold> weakly compressible case. For the PH/DR case, the solid line represents the velocity error norm and the dotted line corresponds to the pressure error norm. For the PH/DR case, iterations are summed over the Powell–Hestenes needed for converging the problem. In <bold>(a)</bold> and <bold>(b)</bold>, <inline-formula><mml:math id="M241" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M242" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> have arbitrary units.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f08.png"/>

        </fig>

</sec>
<sec id="Ch1.S7.SS2">
  <label>7.2</label><title>Hydro-mechanical coupling</title>
      <p id="d2e5739">We further applied the PH/DR scheme to the solution of a coupled multi-physics problem. The equations governing deformation and fluid flow in a Darcy poro-viscous medium can be expressed following <xref ref-type="bibr" rid="bib1.bibx69" id="text.49"/>: 

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M243" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E30"><mml:mtd><mml:mtext>30</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">τ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mi mathvariant="bold">∇</mml:mi><mml:mover accent="true"><mml:mi>P</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E31"><mml:mtd><mml:mtext>31</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mover accent="true"><mml:mi>P</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>)</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E32"><mml:mtd><mml:mtext>32</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">q</mml:mi><mml:mi mathvariant="normal">D</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mover accent="true"><mml:mi>P</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>)</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          Here, the Darcy flux is expressed as <inline-formula><mml:math id="M244" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">q</mml:mi><mml:mi mathvariant="normal">D</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msup><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup><mml:mo>/</mml:mo><mml:msup><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup><mml:mi mathvariant="bold">∇</mml:mi><mml:msup><mml:mi>P</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>. The overbar denotes phase-averaged quantities, <inline-formula><mml:math id="M245" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula> is porosity, and the superscripts <inline-formula><mml:math id="M246" display="inline"><mml:mi mathvariant="normal">s</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M247" display="inline"><mml:mi mathvariant="normal">f</mml:mi></mml:math></inline-formula> indicate solid and fluid properties, respectively. <inline-formula><mml:math id="M248" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M249" display="inline"><mml:mi mathvariant="italic">η</mml:mi></mml:math></inline-formula> refer to permeability and viscosity. An elliptic equation for fluid pressure can be obtained by substituting the Darcy flux into Eq. (<xref ref-type="disp-formula" rid="Ch1.E32"/>).</p>
      <p id="d2e5966">The PH/DR scheme is extended by including fluid pressure updates within the inner DR iterations. The update parameters for fluid pressure are obtained from the automatic DR procedure described in Sect. <xref ref-type="sec" rid="Ch1.S4"/>. The pseudo-time steps and damping coefficients for velocity and fluid pressure are determined independently, with each variable assigned its own value.  As in previous examples, the total pressure is updated at each Powell–Hestenes iteration.</p>
      <p id="d2e5971">The test case we consider uses a configuration similar to that in the previous example (Sect. <xref ref-type="sec" rid="Ch1.S7.SS1"/>). The shear viscosity of the inclusion is assigned a value 100 times greater than that of the matrix, while the bulk viscosity is taken as twice the shear viscosity. In addition, the background porosity is set to <inline-formula><mml:math id="M250" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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>, and the fluid permeability-viscosity ratio <inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:mfenced open="(" close=")"><mml:mrow><mml:msup><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup><mml:mo>/</mml:mo><mml:msup><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula> is set to <inline-formula><mml:math id="M252" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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>. The penalty factor is defined as

            <disp-formula id="Ch1.Ex2"><mml:math id="M253" display="block"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mfenced close=")" open="("><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">phys</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">num</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M254" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">phys</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>)</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M255" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">γ</mml:mi><mml:mi mathvariant="normal">num</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn><mml:mo>〈</mml:mo><mml:msup><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:msup><mml:mo>〉</mml:mo></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e6127">Figure <xref ref-type="fig" rid="F9"/> shows examples of solution fields and the scaling properties of the PH/DR scheme. We compute the two-phase flow problem with a resolution varying from <inline-formula><mml:math id="M256" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">31</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M257" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">992</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells and apply a tolerance of <inline-formula><mml:math id="M258" 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>. For the chosen parameters, pronounced differences are observed between the total and fluid pressure fields (Fig. <xref ref-type="fig" rid="F9"/>a, b). The total pressure field is sharply defined and zero inside the stiff inclusion, in contrast to the fluid pressure field, which is smoother and diffuses within the inclusion. We observe the characteristic sawtooth convergence history for both momentum and fluid continuity (Fig. <xref ref-type="fig" rid="F9"/>c).</p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e6176">Poro-viscous hydro-mechanical simulation. <bold>(a)</bold> Total pressure field. <bold>(b)</bold> Fluid pressure field. <bold>(c)</bold> Convergence history for a resolution of <inline-formula><mml:math id="M259" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">992</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. <bold>(d)</bold> Scaling of iterations relative to the problem size.  In <bold>(a)</bold> and <bold>(b)</bold>, <inline-formula><mml:math id="M260" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M261" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> have arbitrary units.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f09.png"/>

        </fig>

      <p id="d2e6229">We find that low-resolution models require a relatively high number of iterations (Fig. <xref ref-type="fig" rid="F9"/>d). Nevertheless, the number of DR iterations per <inline-formula><mml:math id="M262" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> drops to a stable low value (approximately 20) for resolutions greater than <inline-formula><mml:math id="M263" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">100</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> cells. This indicates a linear dependence of the number of iterations on the problem size, which is consistent with the behavior documented in the previous examples.</p>
</sec>
<sec id="Ch1.S7.SS3">
  <label>7.3</label><title>Visco-elasto-viscoplasticity</title>
      <p id="d2e6264">In this example, we show how nonlinear material properties can be incorporated into the PH/DR solution strategy, considering the case of non-associated plasticity.  With such nonlinear problems, parameters such as the effective viscosity vary throughout the nonlinear solution procedure, which directly affects the eigenvalues of the discrete operator. It is thus important to reevaluate the maximum pseudo-time step (Eq. <xref ref-type="disp-formula" rid="Ch1.E18"/>) during the iterations to ensure stability of the procedure. Here, we reevaluate the pseudo-time step every 100 iterations by applying the Gershgorin circle theorem (Eq. <xref ref-type="disp-formula" rid="Ch1.E21"/>).</p>
      <p id="d2e6271">We adopt a single-phase formulation and apply a visco-elasto-viscoplastic material model <xref ref-type="bibr" rid="bib1.bibx11" id="paren.50"/>. An additive decomposition of the deviatoric strain rate and the divergence rate is assumed:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M264" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E33"><mml:mtd><mml:mtext>33</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">v</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">e</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ε</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">p</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E34"><mml:mtd><mml:mtext>34</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow></mml:mfenced><mml:mi mathvariant="normal">e</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="bold">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi></mml:mrow></mml:mfenced><mml:mi mathvariant="normal">p</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where the superscripts <inline-formula><mml:math id="M265" display="inline"><mml:mi mathvariant="normal">v</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M266" display="inline"><mml:mi mathvariant="normal">e</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M267" display="inline"><mml:mi mathvariant="normal">p</mml:mi></mml:math></inline-formula> correspond to the viscous, elastic, and plastic components, respectively.</p>
      <p id="d2e6385">The viscoplastic Drucker–Prager yield and potential functions are defined as:

                <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M268" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E35"><mml:mtd><mml:mtext>35</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi>f</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi mathvariant="normal">II</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:mi>P</mml:mi><mml:mi>sin⁡</mml:mi><mml:mi mathvariant="normal">Φ</mml:mi><mml:mo>-</mml:mo><mml:mi>C</mml:mi><mml:mi>cos⁡</mml:mi><mml:mi mathvariant="normal">Φ</mml:mi><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="italic">λ</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:msup><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">vp</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E36"><mml:mtd><mml:mtext>36</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi mathvariant="normal">II</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:mi>P</mml:mi><mml:mi>sin⁡</mml:mi><mml:mi mathvariant="normal">Ψ</mml:mi></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M269" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">τ</mml:mi><mml:mi mathvariant="normal">II</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M270" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M271" display="inline"><mml:mi mathvariant="normal">Φ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M272" display="inline"><mml:mi mathvariant="normal">Ψ</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M273" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">vp</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> denote the second deviatoric stress invariant, the cohesion, the friction angle, the dilatancy angle, and the viscoplastic viscosity, respectively.</p>
      <p id="d2e6507">The model domain is  <inline-formula><mml:math id="M274" 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">2</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> <inline-formula><mml:math id="M275" display="inline"><mml:mrow class="unit"><mml:msup><mml:mi mathvariant="normal">km</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> and contains a circular inclusion of radius <inline-formula><mml:math id="M276" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M277" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F10"/>a). A pure shear loading rate of <inline-formula><mml:math id="M278" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</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">15</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> s<sup>−1</sup> is applied, inducing horizontal extension. The inclusion has a low viscosity (<inline-formula><mml:math id="M280" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">10</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> Pa s), while the surrounding matrix is effectively elasto-plastic (<inline-formula><mml:math id="M281" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><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="M282" 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>). Both shear and bulk moduli are set to <inline-formula><mml:math id="M283" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">10</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M284" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">Pa</mml:mi></mml:mrow></mml:math></inline-formula>. The cohesion is set to 50 <inline-formula><mml:math id="M285" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">MPa</mml:mi></mml:mrow></mml:math></inline-formula>, the friction and dilatancy angles are set to 35 and 5°, respectively, and the viscoplastic viscosity is <inline-formula><mml:math id="M286" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">20</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M287" 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>. The simulation proceeds over 50 time steps, each of size <inline-formula><mml:math id="M288" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">10</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M289" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>.</p>

      <fig id="F10"><label>Figure 10</label><caption><p id="d2e6746">Visco-Elasto-Viscoplastic shear banding. <bold>(a, b, c)</bold> Model evolution (strain rate field). <bold>(d)</bold> Evolution of the mean stress. <bold>(e)</bold> Number of iteration per grid point in <inline-formula><mml:math id="M290" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> over simulation time. <bold>(f)</bold> Convergence history for the most demanding time step.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f10.png"/>

        </fig>

      <p id="d2e6774">The temporal evolution of the second invariant of the deviatoric strain rate is shown in Fig. <xref ref-type="fig" rid="F10"/>a, b, and c, while the evolution of the mean stress is shown in Fig. <xref ref-type="fig" rid="F10"/>d. The model undergoes an initial phase of elastic loading (Fig. <xref ref-type="fig" rid="F10"/>a), after which shear banding initiates, propagates (Fig. <xref ref-type="fig" rid="F10"/>b), and reflects off  the domain boundaries (Fig. <xref ref-type="fig" rid="F10"/>c). As a result, stress is limited after 30 <inline-formula><mml:math id="M291" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">kyr</mml:mi></mml:mrow></mml:math></inline-formula> and undergoes minor fluctuations witnessing underlying structural softening (Fig. <xref ref-type="fig" rid="F10"/>d).  With a relative tolerance of <inline-formula><mml:math id="M292" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, the number of iterations per <inline-formula><mml:math id="M293" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> varies between 5 and 25 (Fig. <xref ref-type="fig" rid="F10"/>e). Low iteration counts correspond to linear-elastic steps, while higher counts occur during nonlinear steps involving significant changes in the solution pattern (e.g. reflections). The convergence history for the most challenging step is shown in Fig. <xref ref-type="fig" rid="F10"/>f, where the typical sawtooth convergence pattern of the PH/DR is also observed.</p>
      <p id="d2e6831">Overall, the model converges reliably without the need for manual tuning of numerical parameters throughout the simulation.</p>
</sec>
<sec id="Ch1.S7.SS4">
  <label>7.4</label><title>Practical Performance of the PH/DR Method</title>
      <p id="d2e6843">In this section, we investigate the benefits of the proposed PH/DR method for solving two practical geodynamic problems. The main benefit of the PH/DR method over the APT approach is its ability to automatically adapt to transient changes in solution patterns, caused by variation of the model geometry or by the emergence of internal features. The PH/DR approach can therefore determine parameters that ensure convergence while also significantly reducing the overall wall time. The results presented below are intended to be indicative. In principle, the APT method could deliver results that are at least as good as those of the PH/DR method. However, this would require manually tuning the iteration parameters at every time step, which is not a desirable task. Several simulations were performed using the open-source code <monospace>JustRelax.jl</monospace> <xref ref-type="bibr" rid="bib1.bibx13" id="paren.51"/>, which features both the PH/DR solver and the Accelerated Pseudo-Transient (APT) method <xref ref-type="bibr" rid="bib1.bibx52" id="paren.52"/>.</p>
      <p id="d2e6855">The first model is a simplified subduction setup based on the configuration of <xref ref-type="bibr" rid="bib1.bibx58" id="text.53"/>. Simulations were performed over a model duration of 25 Myr, after which the slab tip reaches a depth of approximately 500 km (Fig. <xref ref-type="fig" rid="F11"/>). We observe that the use of the PH/DR scheme significantly reduces cumulative wall time compared to the APT method (Fig. <xref ref-type="fig" rid="F11"/>a). The number of iterations per grid point in one dimension is also well behaved, fluctuating around 20 iterations per grid point. For the same tolerance, the APT scheme requires about 200 iterations per grid point and exhibits larger fluctuations (Fig. <xref ref-type="fig" rid="F11"/>b). Overall, both approaches converge at each iteration and yield similar results (Fig. <xref ref-type="fig" rid="F11"/>c, d).</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e6871"><bold>(a)</bold> Cumulative wall times over 25 Myr of model simulation steps using both PH/DR and APT methods at various resolutions. <bold>(b)</bold> Iterations per time step for the two methods. <bold>(c)</bold> Map of material phases at 25 Myr using the PH/DR method.  The mantle is green, the slab is pink and the sticky air is blue. <bold>(d)</bold> Same as <bold>(c)</bold> for the APT method.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f11.png"/>

        </fig>

      <p id="d2e6895">The second model is a crustal-scale shear banding setup, which features a visco-elasto-viscoplastic rheology and temperature-dependent creep laws. The reader is referred to <xref ref-type="bibr" rid="bib1.bibx17" id="text.54"/> for the detailed model configuration and material parameters. The simulations are run for 100 time steps, in which the solution pattern evolves significantly in response to shear banding and frictional viscoplasticity. The results presented in Fig. <xref ref-type="fig" rid="F12"/> show the cumulative wall time and the number of iterations over 100 time steps for various model resolutions. Models performed with the PH/DR scheme consistently result in 2 to 12 times shorter wall times (Fig. <xref ref-type="fig" rid="F12"/>a). Unlike APT models, simulations using the PH/DR method provide a reliable and well-defined range of iterations per time step. Nevertheless, the overall shear banding patterns are similar (Fig. <xref ref-type="fig" rid="F12"/>c, d). The minor differences may be attributed to the fact that APT models could not reach convergence at every time step.</p>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e6909"><bold>(a)</bold> Cumulative wall times over 100 time steps for both PH/DR and APT methods at various resolutions. <bold>(b)</bold> Iterations per time step for the two methods. The number of pseudo-transient iterations per time step was capped at <inline-formula><mml:math id="M294" display="inline"><mml:mrow><mml:mn mathvariant="normal">250</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>; as a result, some APT simulations did not reach the convergence criteria (relative tolerance of <inline-formula><mml:math id="M295" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>). <bold>(c)</bold> Map of the second deviatoric strain rate invariant at time step 100 (1 Myr) obtained with the PH/DR method. <bold>(d)</bold> Same as <bold>(c)</bold> for the APT method.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f12.png"/>

        </fig>


</sec>
</sec>
<sec id="Ch1.S8">
  <label>8</label><title>Discussion</title>
      <p id="d2e6977">Our study presents a quantitative assessment of the performance of the DR method, extends it to incompressible flow problems through a Powell–Hestenes strategy, and demonstrates its applicability to nonlinear and multiphysics problems.</p>
      <p id="d2e6980">The efficiency of pseudo-transient (PT) solvers relies on a careful selection of iterative parameters (see Appendix <xref ref-type="sec" rid="App1.Ch1.S3"/>). The proposed DR and PHDR solvers are not expected to outperform standard PT solvers with optimally chosen parameters. However, the DR-based methods introduced here are designed to automatically determine these iterative parameters. This automated selection introduces only a minor computational overhead and has a negligible impact on the convergence history compared to an optimally tuned PT solver (see Appendix <xref ref-type="sec" rid="App1.Ch1.S4"/>). In practice, DR-based schemes can offer substantial advantages over standard pseudo-transient solvers that do not feature automatic tuning of iteration parameters.</p>
      <p id="d2e6987">Unlike multigrid methods, DR-based approaches exhibit a total iteration count that increases linearly with problem size (see Figs. <xref ref-type="fig" rid="F2"/> and <xref ref-type="fig" rid="F4"/>b). Although this behavior may appear disadvantageous, the DR methods are straightforward to parallelize and require only a few global communication steps. In all the examples presented, global communication operations (e.g., norms and inner products) and iterative parameter updates were performed every 100 DR iterations. This makes DR-based methods particularly suitable for GPU parallelism.</p>
      <p id="d2e6994">In particular, we show that, when using a single GPU, the wall time for three-dimensional incompressible and heterogeneous Stokes problems scales quasi-linearly with problem size (Fig. <xref ref-type="fig" rid="F4"/>d). This property is attractive for large-scale 3D geodynamic simulations and makes DR-based algorithms competitive with legacy multigrid-based solvers.</p>
      <p id="d2e7000">Furthermore, DR-based solvers can be naturally extended to multi-GPU parallelism. Computational frameworks such as <monospace>ImplicitGlobalGrid.jl</monospace> <xref ref-type="bibr" rid="bib1.bibx45" id="paren.55"/> provide efficient communication scheduling schemes, enabling near-ideal scaling behavior in modern computing clusters <xref ref-type="bibr" rid="bib1.bibx52" id="paren.56"/>. In the future, several improvements may be envisaged, in particular regarding preconditioning. To our knowledge, Jacobi preconditioning is known to be relatively inefficient in comparison to other preconditioners (e.g. incomplete Cholesky). Nevertheless, the application of Jacobi is fully parallel, and thus efficiently implemented on GPUs. Recently, iterative implementations of incomplete LU and Cholesky preconditioners have been introduced <xref ref-type="bibr" rid="bib1.bibx2 bib1.bibx7" id="paren.57"/>. Although these methods are fully parallel, achieving effective preconditioning requires accurate application of the LU/Cholesky operators, often necessitating many iterations. Whether such an approach would offer benefits within the framework of DR solvers remains to be established. Multigrid preconditioning represents another possible avenue. In principle, it could maintain a constant iteration count as the resolution increases. However, its implementation requires hierarchical data structures and coarse-grid solvers on GPUs, and it remains uncertain whether this added complexity would yield tangible reductions in wall time or enhance the already quasi-linear wall time scaling.</p>
      <p id="d2e7015">DR solvers are traditionally used in conjunction with the Finite Element Method (FEM) <xref ref-type="bibr" rid="bib1.bibx44 bib1.bibx34" id="paren.58"><named-content content-type="pre">e.g.</named-content></xref>. Here, we have shown that such solvers can also be applied to finite difference methods, as well as finite volume or low-order discontinuous Galerkin methods. In practice, efficient implementation is facilitated by the structured nature of these problems, which allows information from neighboring cells to be easily gathered for stencil evaluations. Extending DR solvers to unstructured FEM or FCFV discretizations in the context of GPU computing requires specialized algorithms to improve memory access <xref ref-type="bibr" rid="bib1.bibx20 bib1.bibx36" id="paren.59"><named-content content-type="pre">e.g.</named-content></xref>. The combination of these approaches with DR solvers may provide an alternative to traditionally employed solvers, a possibility that remains to be explored.</p>
      <p id="d2e7028">The relatively low algorithmic complexity of DR methods makes them particularly attractive for solving nonlinear and multiphysics coupled problems. While we have focused on basic hydro-mechanical and linear plasticity models, future implementations could naturally extend these solvers to include thermal or chemical couplings.</p>
</sec>
<sec id="Ch1.S9" sec-type="conclusions">
  <label>9</label><title>Conclusions</title>
      <p id="d2e7040">In this contribution, we have employed DR-based techniques to develop robust and high-performance solvers for geodynamic problems. These solvers incorporate automatic tuning of iterative parameters, including pseudo-time steps and damping coefficients based on estimates of the spectral bounds of the discrete operators.</p>
      <p id="d2e7043">The approach was applied to problems discretized on structured grids using both finite-difference (FD) and face-centered finite-volume/discontinuous Galerkin (FCFV) methods. To handle incompressible deformations, DR-based solvers were combined with Powell–Hestenes iterations, enabling the successful solution of heterogeneous Stokes problems.</p>
      <p id="d2e7046">When implemented on GPU accelerators, the solvers exhibit a quasi-linear scaling of solution time with problem size, demonstrating excellent computational efficiency. Moreover, the method can be trivially extended to handle compressible flow, multiphase flow, and nonlinear constitutive laws.</p>
      <p id="d2e7049">This flexibility stems from the algorithmic simplicity of the DR-based methods, which makes them particularly well-suited for large-scale geoscientific simulations and opens new paths for exploring complex coupled physical processes.</p>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title>Three-dimensional multiple inclusion problem</title>
      <p id="d2e7065">The position and type of inclusion used in the example in the main text are provided in the following table (Table <xref ref-type="table" rid="TA1"/>). The extent of the model domain and the viscosity contrast are detailed in the main text.</p>

<table-wrap id="TA1"><label>Table A1</label><caption><p id="d2e7074">Tabulated values of <inline-formula><mml:math id="M296" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M297" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M298" display="inline"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M299" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula>, and type (weak/strong). Each block of 5 rows is shown side by side.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="10">
     <oasis:colspec colnum="1" colname="col1" align="right"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="left" colsep="1"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:colspec colnum="7" colname="col7" align="right"/>
     <oasis:colspec colnum="8" colname="col8" align="right"/>
     <oasis:colspec colnum="9" colname="col9" align="right"/>
     <oasis:colspec colnum="10" colname="col10" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><inline-formula><mml:math id="M300" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M301" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M302" display="inline"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M303" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5">type</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M304" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M305" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M306" display="inline"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col9"><inline-formula><mml:math id="M307" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col10">type</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">0.333</oasis:entry>
         <oasis:entry colname="col2">0.123</oasis:entry>
         <oasis:entry colname="col3">0.436</oasis:entry>
         <oasis:entry colname="col4">0.134</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6">0.337</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M308" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.037</oasis:entry>
         <oasis:entry colname="col8">0.339</oasis:entry>
         <oasis:entry colname="col9">0.133</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.153</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M309" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.427</oasis:entry>
         <oasis:entry colname="col3">0.431</oasis:entry>
         <oasis:entry colname="col4">0.149</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.326</oasis:entry>
         <oasis:entry colname="col7">0.296</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M310" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.209</oasis:entry>
         <oasis:entry colname="col9">0.104</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.079</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M311" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.367</oasis:entry>
         <oasis:entry colname="col3">0.318</oasis:entry>
         <oasis:entry colname="col4">0.053</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.148</oasis:entry>
         <oasis:entry colname="col7">0.138</oasis:entry>
         <oasis:entry colname="col8">0.047</oasis:entry>
         <oasis:entry colname="col9">0.086</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M312" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.217</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M313" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.020</oasis:entry>
         <oasis:entry colname="col3">0.319</oasis:entry>
         <oasis:entry colname="col4">0.030</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M314" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.144</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M315" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.041</oasis:entry>
         <oasis:entry colname="col8">0.090</oasis:entry>
         <oasis:entry colname="col9">0.094</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">0.328</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M316" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.128</oasis:entry>
         <oasis:entry colname="col3">0.302</oasis:entry>
         <oasis:entry colname="col4">0.103</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M317" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.394</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M318" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.197</oasis:entry>
         <oasis:entry colname="col8">0.060</oasis:entry>
         <oasis:entry colname="col9">0.109</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M319" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.337</oasis:entry>
         <oasis:entry colname="col2">0.244</oasis:entry>
         <oasis:entry colname="col3">0.123</oasis:entry>
         <oasis:entry colname="col4">0.114</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6">0.293</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M320" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.456</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M321" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.114</oasis:entry>
         <oasis:entry colname="col9">0.026</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M322" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.152</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M323" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.347</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M324" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.493</oasis:entry>
         <oasis:entry colname="col4">0.045</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M325" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.479</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M326" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.123</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M327" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.069</oasis:entry>
         <oasis:entry colname="col9">0.033</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M328" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.039</oasis:entry>
         <oasis:entry colname="col2">0.359</oasis:entry>
         <oasis:entry colname="col3">0.077</oasis:entry>
         <oasis:entry colname="col4">0.112</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6">0.478</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M329" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.103</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M330" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.098</oasis:entry>
         <oasis:entry colname="col9">0.046</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M331" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.463</oasis:entry>
         <oasis:entry colname="col2">0.289</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M332" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.317</oasis:entry>
         <oasis:entry colname="col4">0.110</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M333" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.495</oasis:entry>
         <oasis:entry colname="col7">0.189</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M334" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.309</oasis:entry>
         <oasis:entry colname="col9">0.086</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">0.280</oasis:entry>
         <oasis:entry colname="col2">0.260</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M335" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.373</oasis:entry>
         <oasis:entry colname="col4">0.131</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M336" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.064</oasis:entry>
         <oasis:entry colname="col7">0.386</oasis:entry>
         <oasis:entry colname="col8">0.034</oasis:entry>
         <oasis:entry colname="col9">0.098</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M337" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.209</oasis:entry>
         <oasis:entry colname="col2">0.470</oasis:entry>
         <oasis:entry colname="col3">0.245</oasis:entry>
         <oasis:entry colname="col4">0.110</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M338" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.474</oasis:entry>
         <oasis:entry colname="col7">0.403</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M339" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.387</oasis:entry>
         <oasis:entry colname="col9">0.030</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.302</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M340" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.241</oasis:entry>
         <oasis:entry colname="col3">0.099</oasis:entry>
         <oasis:entry colname="col4">0.080</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M341" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.227</oasis:entry>
         <oasis:entry colname="col7">0.025</oasis:entry>
         <oasis:entry colname="col8">0.456</oasis:entry>
         <oasis:entry colname="col9">0.048</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M342" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.159</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M343" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.379</oasis:entry>
         <oasis:entry colname="col3">0.434</oasis:entry>
         <oasis:entry colname="col4">0.009</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.323</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M344" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.293</oasis:entry>
         <oasis:entry colname="col8">0.446</oasis:entry>
         <oasis:entry colname="col9">0.008</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M345" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.356</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M346" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.048</oasis:entry>
         <oasis:entry colname="col3">0.309</oasis:entry>
         <oasis:entry colname="col4">0.129</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M347" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.293</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M348" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.331</oasis:entry>
         <oasis:entry colname="col8">0.225</oasis:entry>
         <oasis:entry colname="col9">0.072</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><inline-formula><mml:math id="M349" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.047</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M350" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.326</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M351" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.434</oasis:entry>
         <oasis:entry colname="col4">0.113</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M352" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.364</oasis:entry>
         <oasis:entry colname="col7">0.014</oasis:entry>
         <oasis:entry colname="col8">0.270</oasis:entry>
         <oasis:entry colname="col9">0.096</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M353" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.289</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M354" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.273</oasis:entry>
         <oasis:entry colname="col3">0.458</oasis:entry>
         <oasis:entry colname="col4">0.083</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6">0.298</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M355" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.073</oasis:entry>
         <oasis:entry colname="col8">0.390</oasis:entry>
         <oasis:entry colname="col9">0.079</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M356" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.482</oasis:entry>
         <oasis:entry colname="col2">0.327</oasis:entry>
         <oasis:entry colname="col3">0.168</oasis:entry>
         <oasis:entry colname="col4">0.033</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6">0.462</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M357" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.020</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M358" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.047</oasis:entry>
         <oasis:entry colname="col9">0.036</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M359" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.145</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M360" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.190</oasis:entry>
         <oasis:entry colname="col3">0.389</oasis:entry>
         <oasis:entry colname="col4">0.111</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M361" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.084</oasis:entry>
         <oasis:entry colname="col7">0.479</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M362" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.000</oasis:entry>
         <oasis:entry colname="col9">0.133</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.440</oasis:entry>
         <oasis:entry colname="col2">0.226</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M363" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.178</oasis:entry>
         <oasis:entry colname="col4">0.054</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M364" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.381</oasis:entry>
         <oasis:entry colname="col7">0.448</oasis:entry>
         <oasis:entry colname="col8">0.218</oasis:entry>
         <oasis:entry colname="col9">0.008</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><inline-formula><mml:math id="M365" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.471</oasis:entry>
         <oasis:entry colname="col2">0.265</oasis:entry>
         <oasis:entry colname="col3">0.311</oasis:entry>
         <oasis:entry colname="col4">0.056</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M366" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.123</oasis:entry>
         <oasis:entry colname="col7">0.103</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M367" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.014</oasis:entry>
         <oasis:entry colname="col9">0.039</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.091</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M368" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.407</oasis:entry>
         <oasis:entry colname="col3">0.242</oasis:entry>
         <oasis:entry colname="col4">0.013</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.477</oasis:entry>
         <oasis:entry colname="col7">0.380</oasis:entry>
         <oasis:entry colname="col8">0.386</oasis:entry>
         <oasis:entry colname="col9">0.082</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M369" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.402</oasis:entry>
         <oasis:entry colname="col2">0.069</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M370" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.425</oasis:entry>
         <oasis:entry colname="col4">0.137</oasis:entry>
         <oasis:entry colname="col5">weak</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M371" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.430</oasis:entry>
         <oasis:entry colname="col7">0.403</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M372" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.313</oasis:entry>
         <oasis:entry colname="col9">0.027</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M373" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.198</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M374" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.122</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M375" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.371</oasis:entry>
         <oasis:entry colname="col4">0.035</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M376" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.134</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M377" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.081</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M378" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.222</oasis:entry>
         <oasis:entry colname="col9">0.018</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M379" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.114</oasis:entry>
         <oasis:entry colname="col2">0.403</oasis:entry>
         <oasis:entry colname="col3">0.414</oasis:entry>
         <oasis:entry colname="col4">0.091</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.353</oasis:entry>
         <oasis:entry colname="col7">0.131</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M380" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.090</oasis:entry>
         <oasis:entry colname="col9">0.095</oasis:entry>
         <oasis:entry colname="col10">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M381" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.332</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M382" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.051</oasis:entry>
         <oasis:entry colname="col3">0.374</oasis:entry>
         <oasis:entry colname="col4">0.014</oasis:entry>
         <oasis:entry colname="col5">strong</oasis:entry>
         <oasis:entry colname="col6">0.218</oasis:entry>
         <oasis:entry colname="col7">0.146</oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M383" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.143</oasis:entry>
         <oasis:entry colname="col9">0.002</oasis:entry>
         <oasis:entry colname="col10">strong</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>


</app>

<app id="App1.Ch1.S2">
  <label>Appendix B</label><title>Two-dimensional heterogeneous Stokes flow with FD and FCFV</title>
      <p id="d2e8568">To verify our implementation of PH/DR iterative solvers, the results were compared against solutions obtained using direct solvers. This verification could only be conducted in 2D due to the prohibitive computational cost of direct solvers in 3D. Both FD and FCFV models were executed using configurations analogous to the 3D setups. The inclusion positions are given in the table below (Table <xref ref-type="table" rid="TB1"/>): weak inclusions have a viscosity of <inline-formula><mml:math id="M384" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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>, while strong inclusions have a viscosity of 1000. No smoothing of the viscosity contrast was applied. A background pure shear rate and free-slip boundary conditions were imposed on the box boundaries.</p>
      <p id="d2e8591">FD models solved with a direct solver follow the approach of <xref ref-type="bibr" rid="bib1.bibx50" id="text.60"/>, whereas the FCFV direct-solver implementation is based on <xref ref-type="bibr" rid="bib1.bibx59" id="text.61"/>. All simulations were performed on meshes of 128<sup>2</sup> cells. The resulting pressure fields are shown in Fig. <xref ref-type="fig" rid="FB1"/>.</p>
      <p id="d2e8611">For both discretizations, good agreement is obtained between models solved iteratively and those solved directly, demonstrating that the FD and FCFV implementations are consistent with previous studies. In addition, this comparison highlights differences between the two schemes: while the FD approach exhibits spurious oscillations at sharp viscosity contrasts, the FCFV method yields a smoother pressure field. It should be noted that the mesh used in the FCFV simulations is similar to that of the FD models and does not explicitly capture the material interface through traction continuity enforcement.</p>

<table-wrap id="TB1"><label>Table B1</label><caption><p id="d2e8618">Tabulated values of <inline-formula><mml:math id="M386" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M387" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M388" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula>, and type (weak/strong). Each block of 5 rows is shown side by side.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="right"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><inline-formula><mml:math id="M389" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M390" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M391" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">type</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">0.0</oasis:entry>
         <oasis:entry colname="col2">0.0</oasis:entry>
         <oasis:entry colname="col3">0.2</oasis:entry>
         <oasis:entry colname="col4">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.2</oasis:entry>
         <oasis:entry colname="col2">0.4</oasis:entry>
         <oasis:entry colname="col3">0.09</oasis:entry>
         <oasis:entry colname="col4">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M392" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.3</oasis:entry>
         <oasis:entry colname="col2">0.4</oasis:entry>
         <oasis:entry colname="col3">0.05</oasis:entry>
         <oasis:entry colname="col4">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M393" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.4</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M394" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.3</oasis:entry>
         <oasis:entry colname="col3">0.08</oasis:entry>
         <oasis:entry colname="col4">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.0</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M395" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.2</oasis:entry>
         <oasis:entry colname="col3">0.08</oasis:entry>
         <oasis:entry colname="col4">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M396" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.3</oasis:entry>
         <oasis:entry colname="col2">0.2</oasis:entry>
         <oasis:entry colname="col3">0.1</oasis:entry>
         <oasis:entry colname="col4">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.4</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M397" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.2</oasis:entry>
         <oasis:entry colname="col3">0.07</oasis:entry>
         <oasis:entry colname="col4">strong</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.3</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M398" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.4</oasis:entry>
         <oasis:entry colname="col3">0.08</oasis:entry>
         <oasis:entry colname="col4">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">0.35</oasis:entry>
         <oasis:entry colname="col2">0.2</oasis:entry>
         <oasis:entry colname="col3">0.07</oasis:entry>
         <oasis:entry colname="col4">weak</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M399" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.1</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M400" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.4</oasis:entry>
         <oasis:entry colname="col3">0.07</oasis:entry>
         <oasis:entry colname="col4">strong</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<fig id="FB1"><label>Figure B1</label><caption><p id="d2e8916"><bold>(a)</bold> Pressure field obtained with FD using a PH/DR scheme. <bold>(b)</bold> Pressure field obtained with a direct solution scheme. <bold>(c)</bold> Pressure field obtained with FCFV using a PH/DR scheme. <bold>(d)</bold> Pressure field obtained with FCFV using a direct solution scheme. In all panels, <inline-formula><mml:math id="M401" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M402" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> have arbitrary units.</p></caption>
        <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f13.png"/>

      </fig>


</app>

<app id="App1.Ch1.S3">
  <label>Appendix C</label><title>Comparison with the pseudo-transient formulation</title>
      <p id="d2e8960">The DR and PH/DR schemes are formulated in a manner similar to pseudo-transient (PT) solvers. The solution fields are updated iteratively, with update steps determined through stability analysis to ensure stable integration in pseudo-time. Most importantly, damping is applied, which effectively modifies the form of the equation to be integrated in pseudo-time, resulting in a second-order integration scheme following <xref ref-type="bibr" rid="bib1.bibx19" id="text.62"/>. The pseudo-time step and damping parameters constitute the two numerical parameters that control the convergence behavior.</p>
      <p id="d2e8966">Optimal values for these parameters can be derived analytically (e.g. <xref ref-type="bibr" rid="bib1.bibx52" id="altparen.63"/>). However, they depend on the spectral properties of the discrete operator <xref ref-type="bibr" rid="bib1.bibx46 bib1.bibx44" id="text.64"/>. Consequently, determining iteration parameters a priori that remain optimal throughout simulations involving evolving geometry or time-dependent material properties is highly challenging. This may result in degraded convergence, stagnation, or even divergence.</p>
      <p id="d2e8975">The DR and PH/DR schemes address this difficulty by estimating spectral bounds and adjusting the iteration parameters accordingly. In practice, the main additional components are: <list list-type="order"><list-item>
      <p id="d2e8980">a routine to estimate the maximum eigenvalue (Gershgorin analysis),</p></list-item><list-item>
      <p id="d2e8984">a routine to approximate the minimum eigenvalue (Rayleigh quotient), and</p></list-item><list-item>
      <p id="d2e8988">a recalculation of the iteration parameters based on these estimates.</p></list-item></list></p>
      <p id="d2e8991">In addition, the PH/DR scheme features an outer loop for pressure updates. During the velocity update cycles, the pressure is held fixed. At the end of each such cycle, the pressure is updated using a numerical bulk viscosity and the continuity residual, following the classical Powell–Hestenes approach. The pressure is thus updated less frequently than the velocity, which constitutes a key difference from the pseudo-transient approach presented in <xref ref-type="bibr" rid="bib1.bibx52" id="text.65"/>.</p>
</app>

<app id="App1.Ch1.S4">
  <label>Appendix D</label><title>Comparison with the pseudo-transient formulation and the results of Räss et al. (2022)</title>
      <p id="d2e9007">We employed the PT solvers developed by <xref ref-type="bibr" rid="bib1.bibx52" id="text.66"/> to assess the relative performance of the PH/DR solver, using the single-inclusion benchmark configuration. The inclusion has a viscosity of <inline-formula><mml:math id="M403" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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>, while the surrounding matrix has a viscosity of 1. A smoothing of the viscosity contrast similar to that used in <xref ref-type="bibr" rid="bib1.bibx52" id="text.67"/> was applied. Both the PT and PH/DR models were run to the same relative tolerance of <inline-formula><mml:math id="M404" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</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">6</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. The resulting model fields are shown in Fig. <xref ref-type="fig" rid="FD1"/>.</p>
      <p id="d2e9054">The PT models of <xref ref-type="bibr" rid="bib1.bibx52" id="text.68"/> were computed using optimally tuned iterative parameters and thus represent the best possible performance bound. The present results demonstrate that the additional computational cost associated with the automatic parameter selection inherent to the PH/DR scheme is very small. Both methods converge in fewer than 20 iterations per grid point for this model configuration. Because pressure updates are less frequent than velocity updates, the convergence of the pressure residual does not closely track that of the momentum residuals.</p>

      <fig id="FD1"><label>Figure D1</label><caption><p id="d2e9062"><bold>(a)</bold> Pressure field obtained by <xref ref-type="bibr" rid="bib1.bibx52" id="text.69"/>. <bold>(b)</bold> Pressure field obtained in this study. <bold>(c)</bold> Convergence of momentum and continuity residuals. In <bold>(a)</bold> and <bold>(b)</bold>, <inline-formula><mml:math id="M405" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M406" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> have arbitrary units.</p></caption>
        <graphic xlink:href="https://gmd.copernicus.org/articles/19/5343/2026/gmd-19-5343-2026-f14.png"/>

      </fig>


</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e9109">The different software packages developed and used in this study are licensed under MIT License. The latest versions of the code is available in Zenodo <xref ref-type="bibr" rid="bib1.bibx49" id="paren.70"><named-content content-type="pre"><ext-link xlink:href="https://doi.org/10.5281/zenodo.20269899" ext-link-type="DOI">10.5281/zenodo.20269899</ext-link>,</named-content></xref>. The scripts can also be accessed there: <uri>https://github.com/PTsolvers/AutoTuningGMD</uri> (last access: 15 May 2026). No data sets were used in this article.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e9125">TD – Original study design, code and algorithm development, simulations, figures, writing, review. AdM – Development, study design, writing, review. RS – Development of discretization, verification, writing, and review. LR – Writing, figures, concept, and review. IU – Writing, concept, review. AS – Code testing, writing, review.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e9131">At least one of the (co-)authors is a member of the editorial board of <italic>Geoscientific Model Development</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e9140">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="d2e9146">We thank the Geocomputing Centre at the University of Lausanne for providing access to the Octopus supercomputer. LR and IU gratefully acknowledge funding from the Swiss University Conference and the Swiss Council of Federal Institutes of Technology through the Platform for Advanced Scientific Computing (PASC) program. This research was also supported by the Swiss National Supercomputing Centre (CSCS) under project ID c23 and c44, awarded via the PASC projects GPU4GEO and ∂GPU4GEO. We thank Pascal Aellig for providing access to a GH200 node.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e9151">This research has been supported by the Swiss University Conference and the Swiss Council of Federal Institutes of Technology through the Platform for Advanced Scientific Computing (PASC), obtained via the PASC project ∂GPU4GEO (c44). Arne Spang was funded by the DFG Emmy Noether grant TH 2076/8-1.This open-access publication was funded  by Goethe University Frankfurt.</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e9162">This paper was edited by Mauro Cacace and reviewed by Anthony Jourdon and two anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Alkhimenkov et al.(2021)Alkhimenkov, Räss, Khakimova, Quintal, and Podladchikov</label><mixed-citation>Alkhimenkov, Y., Räss, L., Khakimova, L., Quintal, B., and Podladchikov, Y.: Resolving Wave Propagation in Anisotropic Poroelastic Media Using Graphical Processing Units (GPUs), J. Geophys. Res.-Sol. Ea., 126, <ext-link xlink:href="https://doi.org/10.1029/2020JB021175" ext-link-type="DOI">10.1029/2020JB021175</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Anzt et al.(2016)Anzt, Chow, Saak, and Dongarra</label><mixed-citation>Anzt, H., Chow, E., Saak, J., and Dongarra, J.: Updating incomplete factorization preconditioners for model order reduction, Numer. Algorithms, 73, 611–630, <ext-link xlink:href="https://doi.org/10.1007/s11075-016-0110-2" ext-link-type="DOI">10.1007/s11075-016-0110-2</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Balachandar and Yuen(1994)</label><mixed-citation>Balachandar, S. and Yuen, D. A.: Three-dimensional fully spectral numerical method for mantle convection with depth-dependent properties, J. Comput. Phys., 113, <ext-link xlink:href="https://doi.org/10.1006/jcph.1994.1118" ext-link-type="DOI">10.1006/jcph.1994.1118</ext-link>, 1994.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Baumgardner(1985)</label><mixed-citation>Baumgardner, J. R.: Three-dimensional treatment of convective flow in the earth's mantle, J. Stat. Phys., 39, 501–511, <ext-link xlink:href="https://doi.org/10.1007/BF01008348" ext-link-type="DOI">10.1007/BF01008348</ext-link>, 1985.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Bezanson et al.(2017)Bezanson, Edelman, Karpinski, and Shah</label><mixed-citation>Bezanson, J., Edelman, A., Karpinski, S., and Shah, V. B.: Julia: A Fresh Approach to Numerical Computing, SIAM Rev., 59, 65–98, <ext-link xlink:href="https://doi.org/10.1137/141000671" ext-link-type="DOI">10.1137/141000671</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Burcet et al.(2024)Burcet, Oliveira, Afonso, and Zlotnik</label><mixed-citation>Burcet, M., Oliveira, B., Afonso, J. C., and Zlotnik, S.: A face-centred finite volume approach for coupled transport phenomena and fluid flow, Appl. Math. Model., 125, 293–312, <ext-link xlink:href="https://doi.org/10.1016/j.apm.2023.08.031" ext-link-type="DOI">10.1016/j.apm.2023.08.031</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Chow et al.(2018)Chow, Anzt, Scott, and Dongarra</label><mixed-citation>Chow, E., Anzt, H., Scott, J., and Dongarra, J.: Using Jacobi iterations and blocking for solving sparse triangular systems in incomplete factorization preconditioning, J. Parallel Distr. Com., 119, 219–230, <ext-link xlink:href="https://doi.org/10.1016/j.jpdc.2018.04.017" ext-link-type="DOI">10.1016/j.jpdc.2018.04.017</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Cockburn and Gopalakrishnan(2005)</label><mixed-citation>Cockburn, B. and Gopalakrishnan, J.: New hybridization techniques, GAMM-Mitteilungen, 28, 154–182, <ext-link xlink:href="https://doi.org/10.1002/gamm.201490017" ext-link-type="DOI">10.1002/gamm.201490017</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Cundall and Board(1988)</label><mixed-citation> Cundall, P. and Board, M.: A microcomputer program for modelling large-strain plasticity problems, Proceedings of the Sixth International Conference on Numerical Methods in Geomechanics, 11–15 April 1988, Innsbruck, Austria, Vols. 1–3, ISBN 978-90-6191-80, 1988.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Dabrowski et al.(2008)Dabrowski, Krotkiewski, and Schmid</label><mixed-citation>Dabrowski, M., Krotkiewski, M., and Schmid, D. W.: MILAMIN: MATLAB-based finite element method solver for large problems, Geochem. Geophy. Geosy., 9, <ext-link xlink:href="https://doi.org/10.1029/2007GC001719" ext-link-type="DOI">10.1029/2007GC001719</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>de Borst and Duretz(2020)</label><mixed-citation>de Borst, R. and Duretz, T.: On viscoplastic regularisation of strain-softening rocks and soils, Int. J. Numer. Anal. Met., 44, 890–903, <ext-link xlink:href="https://doi.org/10.1002/nag.3046" ext-link-type="DOI">10.1002/nag.3046</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>de la Puente et al.(2014)de la Puente, Ferrer, Hanzich, Castillo, and Cela</label><mixed-citation>de la Puente, J., Ferrer, M., Hanzich, M., Castillo, J. E., and Cela, J. M.: Mimetic seismic wave modeling including topography on deformed staggered grids, Geophysics, <ext-link xlink:href="https://doi.org/10.1190/geo2013-0371.1" ext-link-type="DOI">10.1190/geo2013-0371.1</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>de Montserrat et al.(2026)</label><mixed-citation>de Montserrat, A., Aellig, P. S., Schuler, C., Navarrete, I., Räss, L., Fuchs, L., Kaus, B. J. P., and Dominguez, H.: JustRelax.jl: A Julia package for geodynamic modeling with matrix-free solvers, Journal of Open Source Software, 11, 9365, <ext-link xlink:href="https://doi.org/10.21105/joss.09365" ext-link-type="DOI">10.21105/joss.09365</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Duretz et al.(2011)Duretz, May, Gerya, and Tackley</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.bibx15"><label>Duretz et al.(2016)Duretz, May, and Yamato</label><mixed-citation>Duretz, T., May, D. A., and Yamato, P.: A free surface capturing discretization for the staggered grid finite difference scheme, Geophys. J. Int., 204, 1518–1530, <ext-link xlink:href="https://doi.org/10.1093/gji/ggv526" ext-link-type="DOI">10.1093/gji/ggv526</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Duretz et al.(2019)Duretz, Räss, Podladchikov, and Schmalholz</label><mixed-citation>Duretz, T., Räss, L., Podladchikov, Y., and Schmalholz, S.: Resolving thermomechanical coupling in two and three dimensions: spontaneous strain localization owing to shear heating, Geophys. J. Int., 216, 365–379, <ext-link xlink:href="https://doi.org/10.1093/gji/ggy434" ext-link-type="DOI">10.1093/gji/ggy434</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Duretz et al.(2020)Duretz, de Borst, Yamato, and Le Pourhiet</label><mixed-citation>Duretz, T., de Borst, R., Yamato, P., and Le Pourhiet, L.: Toward Robust and Predictive Geodynamic Modeling: The Way Forward in Frictional Plasticity, Geophys. Res. Lett., 47, e2019GL086027, <ext-link xlink:href="https://doi.org/10.1029/2019GL086027" ext-link-type="DOI">10.1029/2019GL086027</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Feng(2006)</label><mixed-citation>Feng, Y. T.: On the discrete dynamic nature of the conjugate gradient method, J. Comput. Phys., 211, 91–98, <ext-link xlink:href="https://doi.org/10.1016/j.jcp.2005.05.006" ext-link-type="DOI">10.1016/j.jcp.2005.05.006</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Frankel(1950)</label><mixed-citation> Frankel, S. P.: Convergence rates of iterative treatments of partial differential equations, Mathematical Tables and Other Aids to Computation, 4, 65–75, 1950.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Fu et al.(2014)Fu, James Lewis, Kirby, and Whitaker</label><mixed-citation>Fu, Z., James Lewis, T., Kirby, R. M., and Whitaker, R. T.: Architecting the finite element method pipeline for the GPU, J. Comput. Appl. Math., 257, 195–211, <ext-link xlink:href="https://doi.org/10.1016/j.cam.2013.09.001" ext-link-type="DOI">10.1016/j.cam.2013.09.001</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Fuchs and Becker(2022)</label><mixed-citation>Fuchs, L. and Becker, T. W.: On the Role of Rheological Memory for Convection-Driven Plate Reorganizations, Geophys. Res. Lett., 49, e2022GL099574, <ext-link xlink:href="https://doi.org/10.1029/2022GL099574" ext-link-type="DOI">10.1029/2022GL099574</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Fullsack(1995)</label><mixed-citation>Fullsack, P.: An arbitrary Lagrangian-Eulerian formulation for creeping flows and its application in tectonic models, Geophys. J. Int., 120, 1–23, <ext-link xlink:href="https://doi.org/10.1111/j.1365-246X.1995.tb05908.x" ext-link-type="DOI">10.1111/j.1365-246X.1995.tb05908.x</ext-link>, 1995.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Furuichi et al.(2011)Furuichi, May, and Tackley</label><mixed-citation>Furuichi, M., May, D. A., and Tackley, P. J.: Development of a Stokes flow solver robust to large viscosity jumps using a Schur complement approach with mixed precision arithmetic, J. Comput. Phys., 230, 8835–8851, <ext-link xlink:href="https://doi.org/10.1016/j.jcp.2011.09.007" ext-link-type="DOI">10.1016/j.jcp.2011.09.007</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Gerya(2019)</label><mixed-citation> Gerya, T.: Introduction to Numerical Geodynamic Modelling, Cambridge University Press, Cambridge, England, UK, ISBN 978-1-10714314-2, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Gerya(2013)</label><mixed-citation>Gerya, T. V.: Initiation of transform faults at rifted continental margins: 3D petrological-thermomechanical modeling and comparison to the Woodlark Basin, Petrology, 21, 550–560, <ext-link xlink:href="https://doi.org/10.1134/S0869591113060039" ext-link-type="DOI">10.1134/S0869591113060039</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Gerya and Yuen(2003)</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.bibx27"><label>Giacomini and Sevilla(2020)</label><mixed-citation>Giacomini, M. and Sevilla, R.: A second-order face-centred finite volume method on general meshes with automatic mesh adaptation, Int. J. Numer. Meth. Eng., 121, 5227–5255, <ext-link xlink:href="https://doi.org/10.1002/nme.6428" ext-link-type="DOI">10.1002/nme.6428</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Goldade et al.(2019)Goldade, Wang, Aanjaneya, and Batty</label><mixed-citation>Goldade, R., Wang, Y., Aanjaneya, M., and Batty, C.: An adaptive variational finite difference framework for efficient symmetric octree viscosity, ACM Trans. Graph., 38, 1–14, <ext-link xlink:href="https://doi.org/10.1145/3306346.3322939" ext-link-type="DOI">10.1145/3306346.3322939</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Gray et al.(2025)</label><mixed-citation>Gray, T. S., Tackley, P. J., and Gerya, T.: Variational Stokes method applied to free surface boundaries in numerical geodynamic models, EGUsphere [preprint], <ext-link xlink:href="https://doi.org/10.5194/egusphere-2025-6354" ext-link-type="DOI">10.5194/egusphere-2025-6354</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Halter et al.(2022)Halter, Macherel, and Schmalholz</label><mixed-citation>Halter, W. R., Macherel, E., and Schmalholz, S. M.: A simple computer program for calculating stress and strain rate in 2D viscous inclusion-matrix systems, J. Struct. Geol., 160, 104617, <ext-link xlink:href="https://doi.org/10.1016/j.jsg.2022.104617" ext-link-type="DOI">10.1016/j.jsg.2022.104617</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Harlow and Welch(1965)</label><mixed-citation>Harlow, F. H. and Welch, J. E.: Numerical Calculation of Time-Dependent Viscous Incompressible Flow of Fluid with Free Surface, Phys. Fluids, 8, 2182–2189, <ext-link xlink:href="https://doi.org/10.1063/1.1761178" ext-link-type="DOI">10.1063/1.1761178</ext-link>, 1965.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Hassani et al.(1997)</label><mixed-citation>Hassani, R., Jongmans, D., and Chéry, J.: Study of plate deformation and stress in subduction processes using two-dimensional numerical models, J. Geophys. Res.-Sol. Ea., 102, 17951–17965, <ext-link xlink:href="https://doi.org/10.1029/97JB01354" ext-link-type="DOI">10.1029/97JB01354</ext-link>, 1997.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Hillebrand et al.(2014)Hillebrand, Thieulot, Geenen, van den Berg, and Spakman</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.bibx34"><label>Joldes et al.(2011)Joldes, Wittek, and Miller</label><mixed-citation>Joldes, G. R., Wittek, A., and Miller, K.: An adaptive Dynamic Relaxation method for solving nonlinear finite element problems. Application to brain shift estimation, Int. J. Numer. Meth. Bio., 27, 173–185, <ext-link xlink:href="https://doi.org/10.1002/cnm.1407" ext-link-type="DOI">10.1002/cnm.1407</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Kaus et al.(2016)Kaus, Popov, Baumann, Püsök, Bauville, Fernandez, and Collignon</label><mixed-citation> Kaus, B. J. P., Popov, A. A., Baumann, T. S., Püsök, A. E., Bauville, A., Fernandez, N., and Collignon, M.: Forward and Inverse Modelling of Lithospheric Deformation on Geological Timescales, in: NIC Symposium 2016, edited by: Binder, K., Müller, M., Kremer, A., and Schnurpfeil, A., Vol. 48,  299–307, Forschungszentrum Jülich, Jülich, ISBN 978-3-95806-109-5, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Kiran et al.(2019)Kiran, Sharma, and Gautam</label><mixed-citation>Kiran, U., Sharma, D., and Gautam, S. S.: GPU-warp based finite element matrices generation and assembly using coloring method, J. Comput. Des. Eng., 6, 705–718, <ext-link xlink:href="https://doi.org/10.1016/j.jcde.2018.11.001" ext-link-type="DOI">10.1016/j.jcde.2018.11.001</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Kronbichler et al.(2012)Kronbichler, Heister, and Bangerth</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.bibx38"><label>Larionov et al.(2017)Larionov, Batty, and Bridson</label><mixed-citation>Larionov, E., Batty, C., and Bridson, R.: Variational stokes: a unified pressure-viscosity solver for accurate viscous liquids, ACM T. Graphic., 36, 1–11, <ext-link xlink:href="https://doi.org/10.1145/3072959.3073628" ext-link-type="DOI">10.1145/3072959.3073628</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Luisier et al.(2023)</label><mixed-citation>Luisier, C., Tajčmanová, L., Yamato, P., and Duretz, T.: Garnet microstructures suggest ultra-fast decompression of ultrahigh-pressure rocks, Nat. Commun., 14, 1–8, <ext-link xlink:href="https://doi.org/10.1038/s41467-023-41310-w" ext-link-type="DOI">10.1038/s41467-023-41310-w</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Macherel et al.(2024)</label><mixed-citation>Macherel, E., Räss, L., and Schmalholz, S. M.: 3D Stresses and Velocities Caused by Continental Plateaus: Scaling Analysis and Numerical Calculations With Application to the Tibetan Plateau, Geochem. Geophy. Geosy., 25, e2023GC011356, <ext-link xlink:href="https://doi.org/10.1029/2023GC011356" ext-link-type="DOI">10.1029/2023GC011356</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>May et al.(2015)May, Brown, and Le Pourhiet</label><mixed-citation>May, D., 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.bibx42"><label>May and Moresi(2008)</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.bibx43"><label>May et al.(2014)May, Brown, and Pourhiet</label><mixed-citation>May, D. A., Brown, J., and Pourhiet, L. L.: pTatin3D: High-Performance Methods for Long-Term Lithospheric Dynamics, in: SC'14: Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, 274–284, <ext-link xlink:href="https://doi.org/10.1109/SC.2014.28" ext-link-type="DOI">10.1109/SC.2014.28</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Oakley and Knight(1995)</label><mixed-citation>Oakley, D. R. and Knight, N. F.: Adaptive dynamic relaxation algorithm for non-linear hyperelastic structures Part I. Formulation, Comput. Method. Appl. M., 126, 67–89, <ext-link xlink:href="https://doi.org/10.1016/0045-7825(95)00805-B" ext-link-type="DOI">10.1016/0045-7825(95)00805-B</ext-link>, 1995.</mixed-citation></ref>
      <ref id="bib1.bibx45"><label>Omlin et al.(2022)Omlin, Räss, and Utkin</label><mixed-citation>Omlin, S., Räss, L., and Utkin, I.: Distributed Parallelization of xPU Stencil Computations in Julia, Proceedings of the JuliaCon Conferences, 137 pp.,  <ext-link xlink:href="https://doi.org/10.21105/jcon.00137" ext-link-type="DOI">10.21105/jcon.00137</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx46"><label>Papadrakakis(1981)</label><mixed-citation>Papadrakakis, M.: A method for the automatic evaluation of the dynamic relaxation parameters, Comput. Method. Appl. M., 25, 35–48, <ext-link xlink:href="https://doi.org/10.1016/0045-7825(81)90066-9" ext-link-type="DOI">10.1016/0045-7825(81)90066-9</ext-link>, 1981.</mixed-citation></ref>
      <ref id="bib1.bibx47"><label>Poliakov et al.(1993)Poliakov, Cundall, Podladchikov, and Lyakhovsky</label><mixed-citation>Poliakov, A. N. B., Cundall, P. A., Podladchikov, Y. Y., and Lyakhovsky, V. A.: An Explicit Inertial Method for the Simulation of Viscoelastic Flow: An Evaluation of Elastic Effects on Diapiric Flow in Two- and Three- Layers Models, in: Flow and Creep in the Solar System: Observations, Modeling and Theory, 175–195, Springer, Dordrecht, the Netherlands, ISBN 978-94-015-8206-3, <ext-link xlink:href="https://doi.org/10.1007/978-94-015-8206-3_12" ext-link-type="DOI">10.1007/978-94-015-8206-3_12</ext-link>, 1993.</mixed-citation></ref>
      <ref id="bib1.bibx48"><label>Popov and Sobolev(2008)</label><mixed-citation>Popov, A. A. and Sobolev, S. V.: SLIM3D: A Tool for Three-dimensional Thermomechanical Modeling of Lithospheric Deformation with Elasto-visco-plastic Rheology, Phys. Earth Planet. In., 171, 55–75, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2008.03.007" ext-link-type="DOI">10.1016/j.pepi.2008.03.007</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx49"><label>Räss and Duretz(2025)</label><mixed-citation>Räss, L. and Duretz, T.: PTsolvers/AutoTuningGMD: Release 1.0, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20269899" ext-link-type="DOI">10.5281/zenodo.20269899</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx50"><label>Räss et al.(2017)</label><mixed-citation>Räss, L., Duretz, T., Podladchikov, Y. Y., and Schmalholz, S. M.: M2Di: Concise and efficient MATLAB 2-D Stokes solvers using the Finite Difference Method, Geochem. Geophy. Geosy., 18, 755–768, <ext-link xlink:href="https://doi.org/10.1002/2016GC006727" ext-link-type="DOI">10.1002/2016GC006727</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx51"><label>Räss et al.(2019)Räss, Duretz, and Podladchikov</label><mixed-citation>Räss, L., Duretz, T., and Podladchikov, Y. Y.: Resolving hydro-mechanical coupling in two and three dimensions: Spontaneous channelling of porous fluids owing to decompaction weakening, Geophys. J. Int., <ext-link xlink:href="https://doi.org/10.1093/gji/ggz239" ext-link-type="DOI">10.1093/gji/ggz239</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx52"><label>Räss et al.(2022)Räss, Utkin, Duretz, Omlin, and Podladchikov</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.bibx53"><label>Rezaiee-Pajand and Sarafrazi(2011)</label><mixed-citation>Rezaiee-Pajand, M. and Sarafrazi, S. R.: Nonlinear dynamic structural analysis using dynamic relaxation with zero damping, Comput. Struct., 89, 1274–1285, <ext-link xlink:href="https://doi.org/10.1016/j.compstruc.2011.04.005" ext-link-type="DOI">10.1016/j.compstruc.2011.04.005</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx54"><label>Rudi et al.(2017)Rudi, Stadler, and Ghattas</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.bibx55"><label>Samuel and Evonuk(2010)</label><mixed-citation>Samuel, H. and Evonuk, M.: Modeling advection in geophysical flows with particle level sets, Geochem. Geophy. Geosy., 11, Q08020, <ext-link xlink:href="https://doi.org/10.1029/2010GC003081" ext-link-type="DOI">10.1029/2010GC003081</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx56"><label>Sanan et al.(2020)</label><mixed-citation>Sanan, P., May, D. A., Bollhöfer, M., and Schenk, O.: Pragmatic solvers for 3D Stokes and elasticity problems with heterogeneous coefficients: evaluating modern incomplete LDLT preconditioners, Solid Earth, 11, 2031–2045, <ext-link xlink:href="https://doi.org/10.5194/se-11-2031-2020" ext-link-type="DOI">10.5194/se-11-2031-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx57"><label>Schmalholz and Podladchikov(2001)</label><mixed-citation>Schmalholz, S. M. and Podladchikov, Y. Yu.: Strain and competence contrast estimation from fold shape, Tectonophysics, 340, 195–213, <ext-link xlink:href="https://doi.org/10.1016/S0040-1951(01)00151-2" ext-link-type="DOI">10.1016/S0040-1951(01)00151-2</ext-link>, 2001. </mixed-citation></ref>
      <ref id="bib1.bibx58"><label>Schmeling et al.(2008)Schmeling, Babeyko, Enns, Faccenna, Funiciello, Gerya, Golabek, Grigull, Kaus, Morra, Schmalholz, and van Hunen</label><mixed-citation>Schmeling, H., Babeyko, A. Y., Enns, A., Faccenna, C., Funiciello, F., Gerya, T., Golabek, G. J., Grigull, S., Kaus, B. J. P., Morra, G., Schmalholz, S. M., and van Hunen, J.: A benchmark comparison of spontaneous subduction models – Towards a free surface, Phys. Earth Planet. Int., 171, 198–223, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2008.06.028" ext-link-type="DOI">10.1016/j.pepi.2008.06.028</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx59"><label>Sevilla and Duretz(2023)</label><mixed-citation>Sevilla, R. and Duretz, T.: A face-centred finite volume method for high-contrast Stokes interface problems, Int. J. Numer. Meth. Eng., 124, 3709–3732, <ext-link xlink:href="https://doi.org/10.1002/nme.7294" ext-link-type="DOI">10.1002/nme.7294</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx60"><label>Sevilla and Duretz(2024)</label><mixed-citation>Sevilla, R. and Duretz, T.: Face-centred finite volume methods for Stokes flows with variable viscosity, Int. J. Numer. Meth. Eng., 125, e7450, <ext-link xlink:href="https://doi.org/10.1002/nme.7450" ext-link-type="DOI">10.1002/nme.7450</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx61"><label>Sevilla et al.(2018)Sevilla, Giacomini, and Huerta</label><mixed-citation>Sevilla, R., Giacomini, M., and Huerta, A.: A face-centred finite volume method for second-order elliptic problems, Int. J. Numer. Meth. Eng., 115, 986–1014, <ext-link xlink:href="https://doi.org/10.1002/nme.5833" ext-link-type="DOI">10.1002/nme.5833</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx62"><label>Shih et al.(2022)Shih, Stadler, and Wechsung</label><mixed-citation>Shih, Y.-h., Stadler, G., and Wechsung, F.: Robust Multigrid Techniques for Augmented Lagrangian Preconditioning of Incompressible Stokes Equations with Extreme Viscosity Variations, SIAM J. Sci. Comput., <ext-link xlink:href="https://doi.org/10.1137/21M1430698" ext-link-type="DOI">10.1137/21M1430698</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx63"><label>Shin and Strikwerda(1997)</label><mixed-citation>Shin, D. and Strikwerda, J. C.: Inf-sup conditions for finite-difference approximations of the stokes equations, ANZIAM J., 39, 121–134, <ext-link xlink:href="https://doi.org/10.1017/S0334270000009255" ext-link-type="DOI">10.1017/S0334270000009255</ext-link>, 1997.</mixed-citation></ref>
      <ref id="bib1.bibx64"><label>Spang et al.(2025)Spang, Thielmann, de Montserrat, and Duretz</label><mixed-citation>Spang, A., Thielmann, M., de Montserrat, A., and Duretz, T.: Transient Propagation of Ductile Ruptures by Thermal Runaway, J. Geophys. Res.-Sol. Ea., 130, e2025JB031240, <ext-link xlink:href="https://doi.org/10.1029/2025JB031240" ext-link-type="DOI">10.1029/2025JB031240</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx65"><label>Tackley(1996)</label><mixed-citation>Tackley, P. J.: Effects of strongly variable viscosity on three-dimensional compressible convection in planetary mantles, J. Geophys. Res.-Sol. Ea., 101, 3311–3332, <ext-link xlink:href="https://doi.org/10.1029/95JB03211" ext-link-type="DOI">10.1029/95JB03211</ext-link>, 1996.</mixed-citation></ref>
      <ref id="bib1.bibx66"><label>Tackley(2008)</label><mixed-citation>Tackley, P. J.: Modelling compressible mantle convection with large viscosity contrasts in a three-dimensional spherical shell using the yin-yang grid, Phys. Earth Planet. In., 171, 7–18, <ext-link xlink:href="https://doi.org/10.1016/j.pepi.2008.08.005" ext-link-type="DOI">10.1016/j.pepi.2008.08.005</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx67"><label>Tackley(2023)</label><mixed-citation>Tackley, P. J.: Tectono-Convective Modes on Earth and Other Terrestrial Bodies, in: Dynamics of Plate Tectonics and Mantle Convection, 159–180, Elsevier, Walthm, MA, USA, ISBN 978-0-323-85733-8, <ext-link xlink:href="https://doi.org/10.1016/B978-0-323-85733-8.00006-8" ext-link-type="DOI">10.1016/B978-0-323-85733-8.00006-8</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx68"><label>Vieira et al.(2020)Vieira, Giacomini, Sevilla, and Huerta</label><mixed-citation>Vieira, L. M., Giacomini, M., Sevilla, R., and Huerta, A.: A second-order face-centred finite volume method for elliptic problems, Comput. Method. Appl. M., 358, 112655, <ext-link xlink:href="https://doi.org/10.1016/j.cma.2019.112655" ext-link-type="DOI">10.1016/j.cma.2019.112655</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx69"><label>Yarushina and Podladchikov(2015)</label><mixed-citation>Yarushina, V. M. and Podladchikov, Y. Y.: (De)compaction of porous viscoelastoplastic media: Model formulation, J. Geophys. Res.-Sol. Ea., 120, 4146–4170, <ext-link xlink:href="https://doi.org/10.1002/2014JB011258" ext-link-type="DOI">10.1002/2014JB011258</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx70"><label>Zhong et al.(2008)Zhong, McNamara, Tan, Moresi, and Gurnis</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>Automatic tuning of iterative pseudo-transient solvers for modeling the deformation of heterogeneous media</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Alkhimenkov et al.(2021)Alkhimenkov, Räss, Khakimova, Quintal,
and Podladchikov</label><mixed-citation>
      
Alkhimenkov, Y., Räss, L., Khakimova, L., Quintal, B., and Podladchikov,
Y.: Resolving Wave Propagation in Anisotropic Poroelastic Media
Using Graphical Processing Units (GPUs), J. Geophys.
Res.-Sol. Ea., 126, <a href="https://doi.org/10.1029/2020JB021175" target="_blank">https://doi.org/10.1029/2020JB021175</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Anzt et al.(2016)Anzt, Chow, Saak, and Dongarra</label><mixed-citation>
      
Anzt, H., Chow, E., Saak, J., and Dongarra, J.: Updating incomplete
factorization preconditioners for model order reduction, Numer. Algorithms,
73, 611–630, <a href="https://doi.org/10.1007/s11075-016-0110-2" target="_blank">https://doi.org/10.1007/s11075-016-0110-2</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Balachandar and Yuen(1994)</label><mixed-citation>
      
Balachandar, S. and Yuen, D. A.: Three-dimensional fully spectral numerical
method for mantle convection with depth-dependent properties, J. Comput.
Phys., 113, <a href="https://doi.org/10.1006/jcph.1994.1118" target="_blank">https://doi.org/10.1006/jcph.1994.1118</a>,
1994.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Baumgardner(1985)</label><mixed-citation>
      
Baumgardner, J. R.: Three-dimensional treatment of convective flow in the
earth's mantle, J. Stat. Phys., 39, 501–511, <a href="https://doi.org/10.1007/BF01008348" target="_blank">https://doi.org/10.1007/BF01008348</a>,
1985.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Bezanson et al.(2017)Bezanson, Edelman, Karpinski, and
Shah</label><mixed-citation>
      
Bezanson, J., Edelman, A., Karpinski, S., and Shah, V. B.: Julia: A Fresh
Approach to Numerical Computing, SIAM Rev., 59, 65–98,
<a href="https://doi.org/10.1137/141000671" target="_blank">https://doi.org/10.1137/141000671</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Burcet et al.(2024)Burcet, Oliveira, Afonso, and
Zlotnik</label><mixed-citation>
      
Burcet, M., Oliveira, B., Afonso, J. C., and Zlotnik, S.: A face-centred
finite volume approach for coupled transport phenomena and fluid flow, Appl.
Math. Model., 125, 293–312, <a href="https://doi.org/10.1016/j.apm.2023.08.031" target="_blank">https://doi.org/10.1016/j.apm.2023.08.031</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Chow et al.(2018)Chow, Anzt, Scott, and Dongarra</label><mixed-citation>
      
Chow, E., Anzt, H., Scott, J., and Dongarra, J.: Using Jacobi iterations and
blocking for solving sparse triangular systems in incomplete factorization
preconditioning, J. Parallel Distr. Com., 119, 219–230,
<a href="https://doi.org/10.1016/j.jpdc.2018.04.017" target="_blank">https://doi.org/10.1016/j.jpdc.2018.04.017</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Cockburn and Gopalakrishnan(2005)</label><mixed-citation>
      
Cockburn, B. and Gopalakrishnan, J.: New hybridization techniques,
GAMM-Mitteilungen, 28, 154–182, <a href="https://doi.org/10.1002/gamm.201490017" target="_blank">https://doi.org/10.1002/gamm.201490017</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Cundall and Board(1988)</label><mixed-citation>
      
Cundall, P. and Board, M.: A microcomputer program for modelling large-strain
plasticity problems, Proceedings of the Sixth International Conference on
Numerical Methods in Geomechanics, 11–15 April 1988, Innsbruck, Austria,
Vols. 1–3, ISBN 978-90-6191-80,
1988.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Dabrowski et al.(2008)Dabrowski, Krotkiewski, and
Schmid</label><mixed-citation>
      
Dabrowski, M., Krotkiewski, M., and Schmid, D. W.: MILAMIN: MATLAB-based
finite element method solver for large problems, Geochem. Geophy. Geosy.,
9, <a href="https://doi.org/10.1029/2007GC001719" target="_blank">https://doi.org/10.1029/2007GC001719</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>de Borst and Duretz(2020)</label><mixed-citation>
      
de Borst, R. and Duretz, T.: On viscoplastic regularisation of
strain-softening rocks and soils, Int. J. Numer. Anal. Met., 44,
890–903, <a href="https://doi.org/10.1002/nag.3046" target="_blank">https://doi.org/10.1002/nag.3046</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>de la Puente et al.(2014)de la Puente, Ferrer, Hanzich, Castillo, and
Cela</label><mixed-citation>
      
de la Puente, J., Ferrer, M., Hanzich, M., Castillo, J. E., and Cela, J. M.:
Mimetic seismic wave modeling including topography on deformed staggered
grids, Geophysics, <a href="https://doi.org/10.1190/geo2013-0371.1" target="_blank">https://doi.org/10.1190/geo2013-0371.1</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>de Montserrat et al.(2026)</label><mixed-citation>
      
de Montserrat, A., Aellig, P. S., Schuler, C., Navarrete, I.,
Räss, L., Fuchs, L., Kaus, B. J. P., and
Dominguez, H.: JustRelax.jl: A Julia package for geodynamic modeling with
matrix-free solvers, Journal of Open Source Software, 11, 9365,
<a href="https://doi.org/10.21105/joss.09365" target="_blank">https://doi.org/10.21105/joss.09365</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Duretz et al.(2011)Duretz, May, Gerya, and Tackley</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.bib15"><label>Duretz et al.(2016)Duretz, May, and Yamato</label><mixed-citation>
      
Duretz, T., May, D. A., and Yamato, P.: A free surface capturing
discretization for the staggered grid finite difference scheme, Geophys. J.
Int., 204, 1518–1530, <a href="https://doi.org/10.1093/gji/ggv526" target="_blank">https://doi.org/10.1093/gji/ggv526</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Duretz et al.(2019)Duretz, Räss, Podladchikov, and
Schmalholz</label><mixed-citation>
      
Duretz, T., Räss, L., Podladchikov, Y., and Schmalholz, S.: Resolving
thermomechanical coupling in two and three dimensions: spontaneous strain
localization owing to shear heating, Geophys. J. Int., 216,
365–379, <a href="https://doi.org/10.1093/gji/ggy434" target="_blank">https://doi.org/10.1093/gji/ggy434</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Duretz et al.(2020)Duretz, de Borst, Yamato, and
Le Pourhiet</label><mixed-citation>
      
Duretz, T., de Borst, R., Yamato, P., and Le Pourhiet, L.: Toward Robust and
Predictive Geodynamic Modeling: The Way Forward in Frictional Plasticity,
Geophys. Res. Lett., 47, e2019GL086027, <a href="https://doi.org/10.1029/2019GL086027" target="_blank">https://doi.org/10.1029/2019GL086027</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Feng(2006)</label><mixed-citation>
      
Feng, Y. T.: On the discrete dynamic nature of the conjugate gradient method,
J. Comput. Phys., 211, 91–98, <a href="https://doi.org/10.1016/j.jcp.2005.05.006" target="_blank">https://doi.org/10.1016/j.jcp.2005.05.006</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Frankel(1950)</label><mixed-citation>
      
Frankel, S. P.: Convergence rates of iterative treatments of partial
differential equations, Mathematical Tables and Other Aids to Computation, 4,
65–75, 1950.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Fu et al.(2014)Fu, James Lewis, Kirby, and Whitaker</label><mixed-citation>
      
Fu, Z., James Lewis, T., Kirby, R. M., and Whitaker, R. T.: Architecting the
finite element method pipeline for the GPU, J. Comput. Appl. Math., 257,
195–211, <a href="https://doi.org/10.1016/j.cam.2013.09.001" target="_blank">https://doi.org/10.1016/j.cam.2013.09.001</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Fuchs and Becker(2022)</label><mixed-citation>
      
Fuchs, L. and Becker, T. W.: On the Role of Rheological Memory for
Convection-Driven Plate Reorganizations, Geophys. Res. Lett., 49,
e2022GL099574, <a href="https://doi.org/10.1029/2022GL099574" target="_blank">https://doi.org/10.1029/2022GL099574</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Fullsack(1995)</label><mixed-citation>
      
Fullsack, P.: An arbitrary Lagrangian-Eulerian formulation for creeping flows
and its application in tectonic models, Geophys. J. Int., 120, 1–23,
<a href="https://doi.org/10.1111/j.1365-246X.1995.tb05908.x" target="_blank">https://doi.org/10.1111/j.1365-246X.1995.tb05908.x</a>, 1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Furuichi et al.(2011)Furuichi, May, and Tackley</label><mixed-citation>
      
Furuichi, M., May, D. A., and Tackley, P. J.: Development of a Stokes flow
solver robust to large viscosity jumps using a Schur complement approach with
mixed precision arithmetic, J. Comput. Phys., 230, 8835–8851,
<a href="https://doi.org/10.1016/j.jcp.2011.09.007" target="_blank">https://doi.org/10.1016/j.jcp.2011.09.007</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Gerya(2019)</label><mixed-citation>
      
Gerya, T.: Introduction to Numerical Geodynamic Modelling, Cambridge
University Press, Cambridge, England, UK, ISBN 978-1-10714314-2,
2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Gerya(2013)</label><mixed-citation>
      
Gerya, T. V.: Initiation of transform faults at rifted continental margins: 3D
petrological-thermomechanical modeling and comparison to the Woodlark Basin,
Petrology, 21, 550–560, <a href="https://doi.org/10.1134/S0869591113060039" target="_blank">https://doi.org/10.1134/S0869591113060039</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Gerya and Yuen(2003)</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.bib27"><label>Giacomini and Sevilla(2020)</label><mixed-citation>
      
Giacomini, M. and Sevilla, R.: A second-order face-centred finite volume
method on general meshes with automatic mesh adaptation, Int. J. Numer.
Meth. Eng., 121, 5227–5255, <a href="https://doi.org/10.1002/nme.6428" target="_blank">https://doi.org/10.1002/nme.6428</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Goldade et al.(2019)Goldade, Wang, Aanjaneya, and
Batty</label><mixed-citation>
      
Goldade, R., Wang, Y., Aanjaneya, M., and Batty, C.: An adaptive variational
finite difference framework for efficient symmetric octree viscosity, ACM
Trans. Graph., 38, 1–14, <a href="https://doi.org/10.1145/3306346.3322939" target="_blank">https://doi.org/10.1145/3306346.3322939</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Gray et al.(2025)</label><mixed-citation>
      
Gray, T. S., Tackley, P. J., and Gerya, T.: Variational Stokes method applied to free surface boundaries in numerical geodynamic models, EGUsphere [preprint], <a href="https://doi.org/10.5194/egusphere-2025-6354" target="_blank">https://doi.org/10.5194/egusphere-2025-6354</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Halter et al.(2022)Halter, Macherel, and Schmalholz</label><mixed-citation>
      
Halter, W. R., Macherel, E., and Schmalholz, S. M.: A simple computer program
for calculating stress and strain rate in 2D viscous inclusion-matrix
systems, J. Struct. Geol., 160, 104617, <a href="https://doi.org/10.1016/j.jsg.2022.104617" target="_blank">https://doi.org/10.1016/j.jsg.2022.104617</a>,
2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Harlow and Welch(1965)</label><mixed-citation>
      
Harlow, F. H. and Welch, J. E.: Numerical Calculation of Time-Dependent
Viscous Incompressible Flow of Fluid with Free Surface, Phys. Fluids, 8,
2182–2189, <a href="https://doi.org/10.1063/1.1761178" target="_blank">https://doi.org/10.1063/1.1761178</a>, 1965.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Hassani et al.(1997)</label><mixed-citation>
      
Hassani, R., Jongmans, D., and Chéry, J.: Study
of plate deformation and stress in subduction processes using two-dimensional
numerical models, J. Geophys. Res.-Sol. Ea., 102, 17951–17965,
<a href="https://doi.org/10.1029/97JB01354" target="_blank">https://doi.org/10.1029/97JB01354</a>, 1997.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Hillebrand et al.(2014)Hillebrand, Thieulot, Geenen, van den Berg,
and Spakman</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.bib34"><label>Joldes et al.(2011)Joldes, Wittek, and Miller</label><mixed-citation>
      
Joldes, G. R., Wittek, A., and Miller, K.: An adaptive Dynamic Relaxation
method for solving nonlinear finite element problems. Application to brain
shift estimation, Int. J. Numer. Meth. Bio., 27, 173–185,
<a href="https://doi.org/10.1002/cnm.1407" target="_blank">https://doi.org/10.1002/cnm.1407</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Kaus et al.(2016)Kaus, Popov, Baumann, Püsök, Bauville,
Fernandez, and Collignon</label><mixed-citation>
      
Kaus, B. J. P., Popov, A. A., Baumann, T. S., Püsök, A. E., Bauville,
A., Fernandez, N., and Collignon, M.: Forward and Inverse Modelling of
Lithospheric Deformation on Geological Timescales, in: NIC Symposium 2016,
edited by: Binder, K., Müller, M., Kremer, A., and Schnurpfeil, A.,
Vol. 48,  299–307, Forschungszentrum Jülich, Jülich, ISBN 978-3-95806-109-5, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Kiran et al.(2019)Kiran, Sharma, and Gautam</label><mixed-citation>
      
Kiran, U., Sharma, D., and Gautam, S. S.: GPU-warp based finite element
matrices generation and assembly using coloring method, J. Comput. Des.
Eng., 6, 705–718, <a href="https://doi.org/10.1016/j.jcde.2018.11.001" target="_blank">https://doi.org/10.1016/j.jcde.2018.11.001</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Kronbichler et al.(2012)Kronbichler, Heister, and
Bangerth</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.bib38"><label>Larionov et al.(2017)Larionov, Batty, and Bridson</label><mixed-citation>
      
Larionov, E., Batty, C., and Bridson, R.: Variational stokes: a unified
pressure-viscosity solver for accurate viscous liquids, ACM T. Graphic.,
36, 1–11, <a href="https://doi.org/10.1145/3072959.3073628" target="_blank">https://doi.org/10.1145/3072959.3073628</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Luisier et al.(2023)</label><mixed-citation>
      
Luisier, C.,
Tajčmanová, L.,
Yamato, P., and Duretz, T.: Garnet microstructures suggest ultra-fast
decompression of ultrahigh-pressure rocks, Nat. Commun., 14, 1–8,
<a href="https://doi.org/10.1038/s41467-023-41310-w" target="_blank">https://doi.org/10.1038/s41467-023-41310-w</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Macherel et al.(2024)</label><mixed-citation>
      
Macherel, E., Räss, L., and Schmalholz, S. M.:
3D Stresses and Velocities Caused by Continental Plateaus: Scaling Analysis
and Numerical Calculations With Application to the Tibetan Plateau, Geochem.
Geophy. Geosy., 25, e2023GC011356, <a href="https://doi.org/10.1029/2023GC011356" target="_blank">https://doi.org/10.1029/2023GC011356</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>May et al.(2015)May, Brown, and Le Pourhiet</label><mixed-citation>
      
May, D., 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.bib42"><label>May and Moresi(2008)</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.bib43"><label>May et al.(2014)May, Brown, and Pourhiet</label><mixed-citation>
      
May, D. A., Brown, J., and Pourhiet, L. L.: pTatin3D: High-Performance Methods
for Long-Term Lithospheric Dynamics, in: SC'14: Proceedings of the
International Conference for High Performance Computing, Networking, Storage
and Analysis, 274–284, <a href="https://doi.org/10.1109/SC.2014.28" target="_blank">https://doi.org/10.1109/SC.2014.28</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Oakley and Knight(1995)</label><mixed-citation>
      
Oakley, D. R. and Knight, N. F.: Adaptive dynamic relaxation algorithm for
non-linear hyperelastic structures Part I. Formulation, Comput. Method.
Appl. M., 126, 67–89, <a href="https://doi.org/10.1016/0045-7825(95)00805-B" target="_blank">https://doi.org/10.1016/0045-7825(95)00805-B</a>, 1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Omlin et al.(2022)Omlin, Räss, and Utkin</label><mixed-citation>
      
Omlin, S., Räss, L., and Utkin, I.: Distributed Parallelization of xPU Stencil
Computations in Julia, Proceedings of the JuliaCon Conferences, 137 pp.,  <a href="https://doi.org/10.21105/jcon.00137" target="_blank">https://doi.org/10.21105/jcon.00137</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>Papadrakakis(1981)</label><mixed-citation>
      
Papadrakakis, M.: A method for the automatic evaluation of the dynamic
relaxation parameters, Comput. Method. Appl. M., 25, 35–48, <a href="https://doi.org/10.1016/0045-7825(81)90066-9" target="_blank">https://doi.org/10.1016/0045-7825(81)90066-9</a>, 1981.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>Poliakov et al.(1993)Poliakov, Cundall, Podladchikov, and
Lyakhovsky</label><mixed-citation>
      
Poliakov, A. N. B., Cundall, P. A., Podladchikov, Y. Y., and Lyakhovsky, V. A.:
An Explicit Inertial Method for the Simulation of Viscoelastic Flow: An
Evaluation of Elastic Effects on Diapiric Flow in Two- and Three- Layers
Models, in: Flow and Creep in the Solar System: Observations, Modeling and
Theory, 175–195, Springer, Dordrecht, the Netherlands, ISBN
978-94-015-8206-3, <a href="https://doi.org/10.1007/978-94-015-8206-3_12" target="_blank">https://doi.org/10.1007/978-94-015-8206-3_12</a>, 1993.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>Popov and Sobolev(2008)</label><mixed-citation>
      
Popov, A. A. and Sobolev, S. V.: SLIM3D: A Tool for Three-dimensional
Thermomechanical Modeling of Lithospheric Deformation with
Elasto-visco-plastic Rheology, Phys. Earth Planet. In., 171, 55–75,
<a href="https://doi.org/10.1016/j.pepi.2008.03.007" target="_blank">https://doi.org/10.1016/j.pepi.2008.03.007</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>Räss and Duretz(2025)</label><mixed-citation>
      
Räss, L. and Duretz, T.: PTsolvers/AutoTuningGMD: Release 1.0, Zenodo [code],
<a href="https://doi.org/10.5281/zenodo.20269899" target="_blank">https://doi.org/10.5281/zenodo.20269899</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib50"><label>Räss
et al.(2017)</label><mixed-citation>
      
Räss, L., Duretz, T., Podladchikov, Y. Y., and
Schmalholz, S. M.: M2Di: Concise and efficient MATLAB 2-D Stokes solvers
using the Finite Difference Method, Geochem. Geophy. Geosy., 18,
755–768, <a href="https://doi.org/10.1002/2016GC006727" target="_blank">https://doi.org/10.1002/2016GC006727</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib51"><label>Räss et al.(2019)Räss, Duretz, and
Podladchikov</label><mixed-citation>
      
Räss, L., Duretz, T., and Podladchikov, Y. Y.: Resolving
hydro-mechanical coupling in two and three dimensions: Spontaneous
channelling of porous fluids owing to decompaction weakening, Geophys.
J. Int., <a href="https://doi.org/10.1093/gji/ggz239" target="_blank">https://doi.org/10.1093/gji/ggz239</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib52"><label>Räss et al.(2022)Räss, Utkin, Duretz, Omlin, and
Podladchikov</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.bib53"><label>Rezaiee-Pajand and Sarafrazi(2011)</label><mixed-citation>
      
Rezaiee-Pajand, M. and Sarafrazi, S. R.: Nonlinear dynamic structural analysis
using dynamic relaxation with zero damping, Comput. Struct., 89,
1274–1285, <a href="https://doi.org/10.1016/j.compstruc.2011.04.005" target="_blank">https://doi.org/10.1016/j.compstruc.2011.04.005</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib54"><label>Rudi et al.(2017)Rudi, Stadler, and Ghattas</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.bib55"><label>Samuel and Evonuk(2010)</label><mixed-citation>
      
Samuel, H. and Evonuk, M.: Modeling advection in geophysical flows with
particle level sets, Geochem. Geophy. Geosy., 11, Q08020,
<a href="https://doi.org/10.1029/2010GC003081" target="_blank">https://doi.org/10.1029/2010GC003081</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib56"><label>Sanan et al.(2020)</label><mixed-citation>
      
Sanan, P., May, D. A., Bollhöfer, M., and Schenk, O.: Pragmatic solvers for 3D Stokes and elasticity problems with heterogeneous coefficients: evaluating modern incomplete LDLT preconditioners, Solid Earth, 11, 2031–2045, <a href="https://doi.org/10.5194/se-11-2031-2020" target="_blank">https://doi.org/10.5194/se-11-2031-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib57"><label>Schmalholz and Podladchikov(2001)</label><mixed-citation>
      
Schmalholz, S. M. and Podladchikov, Y. Yu.: Strain and competence
contrast estimation from fold shape, Tectonophysics, 340, 195–213,
<a href="https://doi.org/10.1016/S0040-1951(01)00151-2" target="_blank">https://doi.org/10.1016/S0040-1951(01)00151-2</a>, 2001.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib58"><label>Schmeling et al.(2008)Schmeling, Babeyko, Enns, Faccenna, Funiciello,
Gerya, Golabek, Grigull, Kaus, Morra, Schmalholz, and van
Hunen</label><mixed-citation>
      
Schmeling, H., Babeyko, A. Y., Enns, A., Faccenna, C., Funiciello, F., Gerya,
T., Golabek, G. J., Grigull, S., Kaus, B. J. P., Morra, G., Schmalholz,
S. M., and van Hunen, J.: A benchmark comparison of spontaneous subduction
models – Towards a free surface, Phys. Earth
Planet. Int., 171, 198–223, <a href="https://doi.org/10.1016/j.pepi.2008.06.028" target="_blank">https://doi.org/10.1016/j.pepi.2008.06.028</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib59"><label>Sevilla and Duretz(2023)</label><mixed-citation>
      
Sevilla, R. and Duretz, T.: A face-centred finite volume method for
high-contrast Stokes interface problems, Int. J. Numer. Meth. Eng., 124,
3709–3732, <a href="https://doi.org/10.1002/nme.7294" target="_blank">https://doi.org/10.1002/nme.7294</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib60"><label>Sevilla and Duretz(2024)</label><mixed-citation>
      
Sevilla, R. and Duretz, T.: Face-centred finite volume methods for Stokes
flows with variable viscosity, Int. J. Numer. Meth. Eng., 125, e7450,
<a href="https://doi.org/10.1002/nme.7450" target="_blank">https://doi.org/10.1002/nme.7450</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib61"><label>Sevilla et al.(2018)Sevilla, Giacomini, and Huerta</label><mixed-citation>
      
Sevilla, R., Giacomini, M., and Huerta, A.: A face-centred finite volume
method for second-order elliptic problems, Int. J. Numer. Meth. Eng., 115,
986–1014, <a href="https://doi.org/10.1002/nme.5833" target="_blank">https://doi.org/10.1002/nme.5833</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib62"><label>Shih et al.(2022)Shih, Stadler, and Wechsung</label><mixed-citation>
      
Shih, Y.-h., Stadler, G., and Wechsung, F.: Robust Multigrid Techniques for
Augmented Lagrangian Preconditioning of Incompressible Stokes Equations with
Extreme Viscosity Variations, SIAM J. Sci. Comput.,
<a href="https://doi.org/10.1137/21M1430698" target="_blank">https://doi.org/10.1137/21M1430698</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib63"><label>Shin and Strikwerda(1997)</label><mixed-citation>
      
Shin, D. and Strikwerda, J. C.: Inf-sup conditions for finite-difference
approximations of the stokes equations, ANZIAM J., 39, 121–134,
<a href="https://doi.org/10.1017/S0334270000009255" target="_blank">https://doi.org/10.1017/S0334270000009255</a>, 1997.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib64"><label>Spang et al.(2025)Spang, Thielmann, de Montserrat, and
Duretz</label><mixed-citation>
      
Spang, A., Thielmann, M., de Montserrat, A., and Duretz, T.: Transient
Propagation of Ductile Ruptures by Thermal Runaway, J. Geophys. Res.-Sol.
Ea., 130, e2025JB031240, <a href="https://doi.org/10.1029/2025JB031240" target="_blank">https://doi.org/10.1029/2025JB031240</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib65"><label>Tackley(1996)</label><mixed-citation>
      
Tackley, P. J.: Effects of strongly variable viscosity on three-dimensional
compressible convection in planetary mantles, J. Geophys.
Res.-Sol. Ea., 101, 3311–3332,
<a href="https://doi.org/10.1029/95JB03211" target="_blank">https://doi.org/10.1029/95JB03211</a>, 1996.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib66"><label>Tackley(2008)</label><mixed-citation>
      
Tackley, P. J.: Modelling compressible mantle convection with large viscosity
contrasts in a three-dimensional spherical shell using the yin-yang grid,
Phys. Earth Planet. In., 171, 7–18, <a href="https://doi.org/10.1016/j.pepi.2008.08.005" target="_blank">https://doi.org/10.1016/j.pepi.2008.08.005</a>,
2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib67"><label>Tackley(2023)</label><mixed-citation>
      
Tackley, P. J.: Tectono-Convective Modes on Earth and Other Terrestrial
Bodies, in: Dynamics of Plate Tectonics and Mantle Convection,
159–180, Elsevier, Walthm, MA, USA, ISBN 978-0-323-85733-8,
<a href="https://doi.org/10.1016/B978-0-323-85733-8.00006-8" target="_blank">https://doi.org/10.1016/B978-0-323-85733-8.00006-8</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib68"><label>Vieira et al.(2020)Vieira, Giacomini, Sevilla, and
Huerta</label><mixed-citation>
      
Vieira, L. M., Giacomini, M., Sevilla, R., and Huerta, A.: A second-order
face-centred finite volume method for elliptic problems, Comput. Method.
Appl. M., 358, 112655, <a href="https://doi.org/10.1016/j.cma.2019.112655" target="_blank">https://doi.org/10.1016/j.cma.2019.112655</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib69"><label>Yarushina and Podladchikov(2015)</label><mixed-citation>
      
Yarushina, V. M. and Podladchikov, Y. Y.: (De)compaction of porous
viscoelastoplastic media: Model formulation, J. Geophys. Res.-Sol. Ea.,
120, 4146–4170, <a href="https://doi.org/10.1002/2014JB011258" target="_blank">https://doi.org/10.1002/2014JB011258</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib70"><label>Zhong et al.(2008)Zhong, McNamara, Tan, Moresi, and
Gurnis</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>
