<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article" dtd-version="1.2" xml:lang="en">
    <front>
        <journal-meta>
            <journal-id journal-id-type="pmc">F1000Research</journal-id>
            <journal-title-group>
                <journal-title>F1000Research</journal-title>
            </journal-title-group>
            <issn pub-type="epub">2046-1402</issn>
            <publisher>
                <publisher-name>F1000 Research Limited</publisher-name>
                <publisher-loc>London, UK</publisher-loc>
            </publisher>
        </journal-meta>
        <article-meta>
            <article-id pub-id-type="doi">10.12688/f1000research.182789.1</article-id>
            <article-categories>
                <subj-group subj-group-type="heading">
                    <subject>Research Article</subject>
                </subj-group>
                <subj-group>
                    <subject>Articles</subject>
                </subj-group>
            </article-categories>
            <title-group>
                <article-title>A Transient Boundary Element Framework for Pressure Buildup, Injectivity Enhancement, and Reactive Permeability Evolution During CO&#x2082; Storage in Heterogeneous Carbonate Reservoirs</article-title>
                <fn-group content-type="pub-status">
                    <fn>
                        <p>[version 1; peer review: awaiting peer review]</p>
                    </fn>
                </fn-group>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author" corresp="yes">
                    <name>
                        <surname>Fahmy</surname>
                        <given-names>Mohamed Abdelsabour</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Conceptualization</role>
                    <role content-type="http://credit.niso.org/">Data Curation</role>
                    <role content-type="http://credit.niso.org/">Formal Analysis</role>
                    <role content-type="http://credit.niso.org/">Funding Acquisition</role>
                    <role content-type="http://credit.niso.org/">Investigation</role>
                    <role content-type="http://credit.niso.org/">Methodology</role>
                    <role content-type="http://credit.niso.org/">Project Administration</role>
                    <role content-type="http://credit.niso.org/">Resources</role>
                    <role content-type="http://credit.niso.org/">Software</role>
                    <role content-type="http://credit.niso.org/">Supervision</role>
                    <role content-type="http://credit.niso.org/">Validation</role>
                    <role content-type="http://credit.niso.org/">Visualization</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Original Draft Preparation</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <uri content-type="orcid">https://orcid.org/0000-0002-2417-3913</uri>
                    <xref ref-type="corresp" rid="c1">a</xref>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <aff id="a1">
                    <label>1</label>Mathematics, Umm Al-Qura University, Mecca, Makkah Province, 28653, Saudi Arabia</aff>
            </contrib-group>
            <author-notes>
                <corresp id="c1">
                    <label>a</label>
                    <email xlink:href="mailto:maselim@uqu.edu.sa">maselim@uqu.edu.sa</email>
                </corresp>
                <fn fn-type="conflict">
                    <p>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>9</day>
                <month>6</month>
                <year>2026</year>
            </pub-date>
            <pub-date pub-type="collection">
                <year>2026</year>
            </pub-date>
            <volume>15</volume>
            <elocation-id>903</elocation-id>
            <history>
                <date date-type="accepted">
                    <day>27</day>
                    <month>5</month>
                    <year>2026</year>
                </date>
            </history>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2026 Fahmy MA</copyright-statement>
                <copyright-year>2026</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access article distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <self-uri content-type="pdf" xlink:href="https://f1000research.com/articles/15-903/pdf"/>
            <abstract>
                <sec>
                    <title>Background</title>
                    <p>Reactive CO2 injection in heterogeneous carbonate reservoirs involves coupled pressure buildup, carbonate dissolution, porosity growth, and permeability evolution. Efficient prediction of these feedback is needed for pressure management and injectivity assessment in geological carbon storage.</p>
                </sec>
                <sec>
                    <title>Methods</title>
                    <p>A transient Boundary Element Method framework is developed for reactive CO2 storage in heterogeneous carbonate formations. The formulation combines time-dependent Green function solutions, analytical well-source representation, subdomain treatment of facies-scale heterogeneity, interface pressure and flux continuity, and incremental updating of reaction progress, porosity, and permeability.</p>
                </sec>
                <sec>
                    <title>Results</title>
                    <p>The proposed formulation reproduces nonreactive diffusion benchmarks, maintains interface continuity across heterogeneous subdomains, and captures the development of reactive near-well alteration zones. Reactive permeability enhancement reduces long-term pressure buildup and improves apparent injectivity, while initial heterogeneity controls early pressure redistribution and path-dependent hydraulic evolution.</p>
                </sec>
                <sec>
                    <title>Conclusions</title>
                    <p>The transient reactive BEM framework provides an efficient boundary-based tool for evaluating pressure-limited CO2 storage, injectivity enhancement, and reactive permeability evolution in heterogeneous carbonate reservoirs, while avoiding full volumetric remeshing during property updates.</p>
                </sec>
            </abstract>
            <kwd-group kwd-group-type="author">
                <kwd>Geological CO&#x2082; storage; Boundary element method; Carbonate reservoirs; Reactive permeability evolution; Injectivity enhancement</kwd>
            </kwd-group>
            <funding-group>
                <award-group id="fund-1">
                    <funding-source>This research work was funded by Umm Al-Qura University, Saudi Arabia under grant number: 26UQU4340548GSSR11</funding-source>
                    <award-id>26UQU4340548GSSR11</award-id>
                </award-group>
                <funding-statement>This research work was funded by Umm Al-Qura University, Saudi Arabia under grant number: 26UQU4340548GSSR11</funding-statement>
                <funding-statement>
                    <italic>The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript.</italic>
                </funding-statement>
            </funding-group>
        </article-meta>
    </front>
    <body>
        <p>

            <def-list>
                <title>Nomenclature
                    <break/>Roman symbols</title>
                <def-item>
                    <term id="G1">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>A</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula> 
                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Area of the chemically altered zone at time 
                            <inline-formula>

                                <mml:math display="inline">
                                    <mml:mi>t</mml:mi>
                                </mml:math>
</inline-formula>
                        </p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G2">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>a</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Porosity-increase coefficient due to reaction progress</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G3">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>b</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Poromechanical porosity coefficient relating porosity change to volumetric strain</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G4">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>c</mml:mi>
                            </mml:math>
</inline-formula> 
                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                                <mml:mo>/</mml:mo>
                                <mml:mi mathvariant="normal">s</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Hydraulic diffusivity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G5">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msubsup>
                                    <mml:mi>c</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                                <mml:mo>/</mml:mo>
                                <mml:mi mathvariant="normal">s</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Updated hydraulic diffusivity in subregion 
                            <inline-formula>

                                <mml:math display="inline">
                                    <mml:mi>i</mml:mi>
                                </mml:math>
</inline-formula> at time step 
                            <inline-formula>

                                <mml:math display="inline">
                                    <mml:mi>n</mml:mi>
                                </mml:math>
</inline-formula>
                        </p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G6">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>c</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi>Pa</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Fluid compressibility</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G7">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>G</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:mi>Pa</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Shear modulus of the porous skeleton</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G8">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>g</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:mi mathvariant="normal">m</mml:mi>
                                <mml:mo>/</mml:mo>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">s</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Gravitational acceleration vector</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G9">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>J</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                                <mml:mo>/</mml:mo>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi mathvariant="normal">s</mml:mi>
                                    <mml:mo>&#x00b7;</mml:mo>
                                    <mml:mi>Pa</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Apparent injectivity index</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G10">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>k</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Time-dependent reservoir permeability</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G11">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>k</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Initial permeability</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G12">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mover accent="true">
                                        <mml:mi>k</mml:mi>
                                        <mml:mo stretchy="true">&#x00af;</mml:mo>
                                    </mml:mover>
                                    <mml:mi>r</mml:mi>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Global normalized permeability enhancement</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G13">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mover accent="true">
                                        <mml:mi>k</mml:mi>
                                        <mml:mo stretchy="true">&#x00af;</mml:mo>
                                    </mml:mover>
                                    <mml:mrow>
                                        <mml:mi>r</mml:mi>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>w</mml:mi>
                                    </mml:mrow>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Mean normalized permeability in the near-well region</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G14">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>b</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Number of boundary elements</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G15">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Number of boundary or interface elements in a subregion</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G16">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>r</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Number of reservoir subregions</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G17">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Number of time steps</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G18">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>p</mml:mi>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Fluid pressure</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G19">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:msub>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Initial/reference reservoir pressure</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G20">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>r</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Reference pressure scale used in the reaction law</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G21">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Wellbore pressure buildup relative to initial pressure</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G22">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>Q</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                                <mml:mo>/</mml:mo>
                                <mml:mi mathvariant="normal">s</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Injection rate</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G23">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>q</mml:mi>
                            </mml:math>
</inline-formula> varies</term>
                    <def>
                        <p>Normalized source/sink term in the governing equation</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G24">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>q</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> varies</term>
                    <def>
                        <p>Boundary normal flux</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G25">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>R</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi>s</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Effective dissolution reaction rate</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G26">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>S</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi>Pa</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Generalized storage coefficient</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G27">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>t</mml:mi>
                            </mml:math>
</inline-formula> s</term>
                    <def>
                        <p>Physical time</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G28">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:math>
</inline-formula> s</term>
                    <def>
                        <p>Consecutive time levels</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G29">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:math>
</inline-formula> s</term>
                    <def>
                        <p>Time increment</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G30">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="bold">u</mml:mi>
                            </mml:math>
</inline-formula> m</term>
                    <def>
                        <p>Displacement vector of the solid skeleton</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G31">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="bold">v</mml:mi>
                            </mml:math>
</inline-formula> m/s</term>
                    <def>
                        <p>Darcy velocity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G32">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>x</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:mtext mathvariant="sans-serif">or</mml:mtext>
                                <mml:mspace width="0.25em"/>
                                <mml:msub>
                                    <mml:mi mathvariant="bold">x</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> M</term>
                    <def>
                        <p>Injection well location</p>
                    </def>
                </def-item>
            </def-list>

            <def-list>
                <title>Greek symbols</title>
                <def-item>
                    <term id="G33">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03b1;</mml:mi>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Biot coefficient</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G34">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03b1;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Porosity coupling coefficient in pressure equation</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G35">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi>Pa</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mspace width="0.25em"/>
                                <mml:mtext mathvariant="sans-serif">or</mml:mtext>
                                <mml:mo>&#x2212;</mml:mo>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Stress-sensitivity coefficient in the permeability law</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G36">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Permeability reaction coefficient</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G37">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03b5;</mml:mi>
                                    <mml:mi>v</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Volumetric strain</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G38">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>External boundary of the reservoir domain</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G39">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Boundary segment with prescribed pressure</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G40">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>q</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Boundary segment with prescribed flux</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G41">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>u</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Boundary segment with prescribed displacement</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G42">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Boundary segment with prescribed traction</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G43">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Internal interface between subdomains iii and jjj</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G44">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03bb;</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi>s</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Kinetic rate coefficient</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G45">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03bb;</mml:mi>
                                    <mml:mi>s</mml:mi>
                                </mml:msub>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Lam&#x00e9;&#x2019;s first elastic parameter</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G46">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03bc;</mml:mi>
                            </mml:math>
</inline-formula> Pa&#x00b7;s</term>
                    <def>
                        <p>Dynamic viscosity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G47">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:mi>kg</mml:mi>
                                <mml:mo>/</mml:mo>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Fluid density</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G48">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>f</mml:mi>
                                        <mml:mn>0</mml:mn>
                                    </mml:mrow>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:mi>kg</mml:mi>
                                <mml:mo>/</mml:mo>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Reference fluid density</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G49">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03c3;</mml:mi>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Total stress tensor</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G50">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msup>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Effective stress tensor</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G51">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msubsup>
                            </mml:math>
</inline-formula> Pa</term>
                    <def>
                        <p>Mean effective stress</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G52">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Porosity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G53">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>&#x03d5;</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:msub>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Initial porosity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G54">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>p</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Pressure activation function in the reaction law</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G55">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                                <mml:mspace width="0.25em"/>
                                <mml:mtext mathvariant="sans-serif">or</mml:mtext>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Reservoir domain</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G56">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msup>
                                <mml:mspace width="0.25em"/>
                                <mml:mtext mathvariant="sans-serif">or</mml:mtext>
                                <mml:mspace width="0.25em"/>
                                <mml:msup>
                                    <mml:mi mathvariant="normal">m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                </mml:msup>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Subregion iii of the heterogeneous reservoir</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G57">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>&#x03be;</mml:mi>
                            </mml:math>
</inline-formula> &#x2013;</term>
                    <def>
                        <p>Reaction progress variable for carbonate dissolution</p>
                    </def>
                </def-item>
            </def-list>

            <def-list>
                <title>Subscripts</title>
                <def-item>
                    <term id="G58">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mn>0</mml:mn>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Initial or reference value</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G59">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>f</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Fluid quantity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G60">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>i</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Subregion index</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G61">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>j</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Adjacent subregion index</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G62">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>m</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Mean value</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G63">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>n</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Time level nnn</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G64">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>r</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Normalized or relative quantity</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G65">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mi>w</mml:mi>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Well or near-well quantity</p>
                    </def>
                </def-item>
            </def-list>

            <def-list>
                <title>Superscripts</title>
                <def-item>
                    <term id="G66">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Value at time step 
                            <inline-formula>

                                <mml:math display="inline">
                                    <mml:mi>n</mml:mi>
                                </mml:math>
</inline-formula>
                        </p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G67">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Value at the next time step</p>
                    </def>
                </def-item>
            </def-list>

            <def-list>
                <title>Abbreviations</title>
                <def-item>
                    <term id="G68">BEM</term>
                    <def>
                        <p>Boundary Element Method</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G69">

                        <inline-formula>

                            <mml:math display="inline">
                                <mml:msub>
                                    <mml:mi>CO</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msub>
                            </mml:math>
</inline-formula>
</term>
                    <def>
                        <p>Carbon dioxide</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G70">FE</term>
                    <def>
                        <p>Finite Element</p>
                    </def>
                </def-item>
                <def-item>
                    <term id="G71">FD</term>
                    <def>
                        <p>Finite Difference</p>
                    </def>
                </def-item>
            </def-list>
        </p>
        <sec id="sec5" sec-type="intro">
            <title>1. Introduction</title>
            <p>Geological storage of carbon dioxide (CO
                <sub>2</sub>) in deep subsurface formations is widely recognized as one of the key technological pathways for reducing hard-to-abate industrial emissions and supporting long-term climate mitigation strategies. Among the available subsurface storage options, deep saline aquifers and carbonate formations are of particular interest because of their large theoretical storage capacity, broad geographic distribution, and potential for sustained industrial-scale injection. As carbon capture and storage projects move from demonstration to wider deployment, the ability to evaluate reservoir performance under realistic injection conditions has become increasingly important for both technical design and long-term risk management.
                <sup>
                    <xref ref-type="bibr" rid="ref1">1</xref>,
                    <xref ref-type="bibr" rid="ref2">2</xref>
                </sup>
            </p>
            <p>The response of a storage reservoir to CO
                <sub>2</sub> injection is governed by a strongly coupled set of hydraulic, chemical, and mechanical processes. Injection-induced pressure propagates through the porous medium, interacts with fluid&#x2013;rock reactions, and may alter the effective stress state of the solid skeleton. In carbonate systems, these interactions are especially significant because mineral dissolution can enlarge pore space, modify connectivity, and change permeability over time. As a result, the pressure field does not evolve in a fixed hydraulic structure; rather, it continuously interacts with reaction-driven property changes that feed back into subsequent flow and injectivity behavior.
                <sup>
                    <xref ref-type="bibr" rid="ref3">3</xref>&#x2013;
                    <xref ref-type="bibr" rid="ref5">5</xref>
                </sup>
            </p>
            <p>For geological CO
                <sub>2</sub> storage, pressure management is therefore as important as storage capacity itself. Excessive pressure buildup can reduce injectivity, limit sustainable injection rates, and in some settings increase the risk of caprock damage, fault reactivation, or induced seismic response. Reliable prediction of pressure evolution is thus essential for evaluating operational feasibility, storage integrity, and the long-term performance of a candidate reservoir. This is particularly true in reactive carbonate formations, where near-well permeability enhancement may either improve injection efficiency or redistribute flow in ways that alter the pressure footprint of the storage operation.
                <sup>
                    <xref ref-type="bibr" rid="ref6">6</xref>,
                    <xref ref-type="bibr" rid="ref7">7</xref>
                </sup>
            </p>
            <p>A wide range of numerical tools has been developed to investigate CO
                <sub>2</sub> storage processes, including finite difference and finite element methods for multiphase flow, reactive transport, geomechanics, and coupled hydro-chemo-mechanical response. These approaches are highly general and remain indispensable for many detailed reservoir studies. However, they often become computationally demanding in large heterogeneous domains, especially when sharp material contrasts, internal wells, time-dependent coefficients, and repeated scenario analysis must all be resolved simultaneously. In storage problems where the primary engineering interest lies in pressure buildup, injectivity evolution, and the effect of evolving hydraulic properties, this computational burden can become a practical limitation.
                <sup>
                    <xref ref-type="bibr" rid="ref8">8</xref>&#x2013;
                    <xref ref-type="bibr" rid="ref11">11</xref>
                </sup>
            </p>
            <p>For such classes of problems, the Boundary Element Method (BEM) offers an attractive alternative. By transforming the governing partial differential equations into boundary integral equations through Green&#x2019;s-function representations, BEM reduces the dimensionality of the spatial discretization and shifts the computational emphasis from the full reservoir volume to its external boundary and internal interfaces. This reduction is particularly advantageous for laterally extensive domains, for problems with internal singular sources such as injection wells, and for heterogeneous systems in which the correct transmission of pressure and flux across interfaces is critical.
                <sup>
                    <xref ref-type="bibr" rid="ref12">12</xref>,
                    <xref ref-type="bibr" rid="ref13">13</xref>
                </sup>
            </p>
            <p>BEM has been applied successfully to a variety of diffusion and flow problems relevant to subsurface engineering, including groundwater systems, petroleum reservoirs, fractured media, and transient heterogeneous transport. These studies have demonstrated the advantages of boundary-based formulations in handling internal source terms, reconstructing interior fields semi-analytically, and treating complex domain configurations with relatively few unknowns. They also show that boundary-based approaches can retain high accuracy in problems dominated by long-range diffusion and interface-controlled behavior, both of which are important in large-scale CO
                <sub>2</sub> storage settings.
                <sup>
                    <xref ref-type="bibr" rid="ref14">14</xref>&#x2013;
                    <xref ref-type="bibr" rid="ref17">17</xref>
                </sup>
            </p>
            <p>Of particular relevance to the present work are subdomain BEM formulations developed for piecewise heterogeneous systems. In such approaches, the reservoir is divided into locally homogeneous or weakly heterogeneous regions, while interface continuity conditions are enforced rigorously at the boundary level. This strategy is well suited to geological storage formations composed of layered facies, damaged zones, or discrete near-well regions with strongly contrasting properties. It also provides a natural framework for representing the spatially localized changes that emerge in reactive carbonate injection problems.
                <sup>
                    <xref ref-type="bibr" rid="ref18">18</xref>,
                    <xref ref-type="bibr" rid="ref19">19</xref>
                </sup>
            </p>
            <p>Despite these advantages, most existing BEM formulations for reservoir applications still assume fixed hydraulic properties and therefore do not fully capture one of the defining features of reactive CO
                <sub>2</sub> injection in carbonate media: the evolution of porosity and permeability caused by mineral dissolution. Experimental and numerical studies have shown that carbonate dissolution under CO
                <sub>2</sub>-rich conditions can produce measurable porosity increase, permeability enhancement, and localized reorganization of flow structure, especially in the near-well region and along preferential pathways. These effects can substantially influence pressure diffusion, injectivity, and the spatial distribution of storage-induced hydraulic perturbations, making static-property models insufficient in many reactive storage scenarios.
                <sup>
                    <xref ref-type="bibr" rid="ref20">20</xref>&#x2013;
                    <xref ref-type="bibr" rid="ref22">22</xref>
                </sup>
            </p>
            <p>At the same time, recent progress in reactive transport modeling has made clear that coupling fluid flow with geochemical kinetics is necessary to capture permeability evolution, channelization tendencies, and the feedback between chemical alteration and reservoir-scale hydraulic response. However, such models remain predominantly computationally expensive when implemented with volumetric discretization methods over large and heterogeneous storage domains. This creates a practical gap between physically rich simulation and computational efficiency: storage engineers need models that retain the dominant pressure&#x2013;reaction&#x2013;permeability feedbacks relevant to injectivity and pressure management while remaining efficient enough for reservoir-scale analysis, screening studies, and repeated scenario evaluation.
                <sup>
                    <xref ref-type="bibr" rid="ref23">23</xref>&#x2013;
                    <xref ref-type="bibr" rid="ref25">25</xref>
                </sup>
            </p>
            <p>The present study addresses this need by developing a transient Boundary Element formulation for reactive CO
                <sub>2</sub> injection in heterogeneous carbonate reservoirs. The aim is not simply to propose a new numerical variant of BEM, but to establish a computational framework that is directly relevant to storage-performance assessment in pressure-limited carbonate systems. Specifically, the study seeks to represent transient pressure diffusion, analytical well injection, heterogeneous interface transmission, pressure-activated dissolution, and reaction-driven porosity and permeability evolution within a single boundary-based formulation that avoids volumetric remeshing. In this way, the model is intended to resolve the processes most relevant to storage operation, including near-well pressure buildup, injectivity evolution, growth of altered zones, and the path-dependent modification of reservoir transmissivity.</p>
            <p>Accordingly, the paper is organized as follows. 
                <xref ref-type="sec" rid="sec6">Section 2</xref> presents the governing reactive&#x2013;geomechanical flow model and its reduced form used for the present storage problem. 
                <xref ref-type="sec" rid="sec18">Section 3</xref> develops the transient boundary integral formulation, subdomain discretization strategy, and nonlinear update procedure. 
                <xref ref-type="sec" rid="sec31">Section 4</xref> establishes the validity and numerical accuracy of the proposed framework through benchmark analysis, cross-method comparison, and error assessment. 
                <xref ref-type="sec" rid="sec45">Section 5</xref> then applies the model to representative homogeneous and heterogeneous carbonate storage scenarios in order to examine pressure buildup, reactive permeability evolution, and injectivity behavior under sustained CO
                <sub>2</sub> injection. Finally, 
                <xref ref-type="sec" rid="sec61">Section 6</xref> summarizes the principal findings, practical implications, limitations, and directions for future development.</p>
        </sec>
        <sec id="sec6">
            <title>2. Governing equations of the reactive&#x2013;geomechanical flow model</title>
            <p>The injection of CO
                <sub>2</sub> into a deep heterogeneous carbonate reservoir gives rise to a strongly coupled multiphysics problem involving transient fluid flow, geochemical alteration of the solid matrix, and geomechanical deformation of the porous skeleton. In carbonate formations, the dissolution of reactive minerals modifies pore structure and induces progressive changes in porosity and permeability, while the associated pressure buildup alters the effective stress state and may further influence hydraulic conductivity. To describe these interacting processes within a continuum framework suitable for boundary element formulation, the present model is constructed by coupling a pressure diffusion equation with a reaction-progress equation and a constitutive law for stress-sensitive hydraulic properties.</p>
            <p>Let 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                        <mml:mo>&#x2282;</mml:mo>
                        <mml:msup>
                            <mml:mi>&#x211d;</mml:mi>
                            <mml:mi>d</mml:mi>
                        </mml:msup>
                    </mml:math>
</inline-formula> denote the reservoir domain, with boundary 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                        <mml:mo>,</mml:mo>
                        <mml:mtext>where</mml:mtext>
                        <mml:mspace width="0.25em"/>
                        <mml:mi>d</mml:mi>
                        <mml:mo>=</mml:mo>
                        <mml:mn>2</mml:mn>
                        <mml:mspace width="0.25em"/>
                        <mml:mtext>or</mml:mtext>
                        <mml:mspace width="0.25em"/>
                        <mml:mn>3</mml:mn>
                    </mml:math>
</inline-formula> depending on the idealization adopted. The primary unknown fields are the fluid pressure 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi>p</mml:mi>
                        <mml:mrow>
                            <mml:mo stretchy="true">(</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo stretchy="true">)</mml:mo>
                        </mml:mrow>
                        <mml:mo>,</mml:mo>
                    </mml:math>
</inline-formula> the reaction progress variable 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi>&#x03be;</mml:mi>
                        <mml:mrow>
                            <mml:mo stretchy="true">(</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo stretchy="true">)</mml:mo>
                        </mml:mrow>
                        <mml:mo>,</mml:mo>
                    </mml:math>
</inline-formula> the porosity 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi>&#x03d5;</mml:mi>
                        <mml:mrow>
                            <mml:mo stretchy="true">(</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo stretchy="true">)</mml:mo>
                        </mml:mrow>
                    </mml:math>
</inline-formula>, the permeability 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi>k</mml:mi>
                        <mml:mrow>
                            <mml:mo stretchy="true">(</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo stretchy="true">)</mml:mo>
                        </mml:mrow>
                        <mml:mo>,</mml:mo>
                    </mml:math>
</inline-formula> and, when mechanical deformation is explicitly retained, the displacement field 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:mi mathvariant="bold">u</mml:mi>
                        <mml:mrow>
                            <mml:mo stretchy="true">(</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo stretchy="true">)</mml:mo>
                        </mml:mrow>
                        <mml:mo>.</mml:mo>
                    </mml:math>
</inline-formula> The model is developed under the assumptions of a fully saturated porous medium, slightly compressible fluid, Darcy-scale flow, small strain deformation, and isothermal conditions. These assumptions are consistent with the physical setting of transient CO
                <sub>2</sub> injection considered in the manuscript and provide an appropriate balance between physical realism and computational tractability.</p>
            <sec id="sec7">
                <title>2.1. Mass conservation of the pore fluid</title>
                <p>The fluid mass balance in a deformable porous medium may be written in the form
                    <disp-formula id="e1">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mi>&#x2202;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>+</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="bold">v</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mi>m</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(1)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mi>f</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the fluid density, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">v</mml:mi>
                        </mml:math>
</inline-formula> is the Darcy velocity, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mi>m</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> denotes a volumetric source term associated with injection or extraction. For slightly compressible flow, the density variation may be linearized as
                    <disp-formula id="e2">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mi>f</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>f</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>+</mml:mo>
                                <mml:msub>
                                    <mml:mi>c</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>p</mml:mi>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mn>0</mml:mn>
                                    </mml:msub>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(2)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>f</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:mrow>
                            </mml:msub>
                        </mml:math>
</inline-formula> is a reference fluid density, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>c</mml:mi>
                                <mml:mi>f</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the fluid compressibility, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                        </mml:math>
</inline-formula> is a reference pressure. Neglecting higher-order terms and dividing by 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>f</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:mrow>
                            </mml:msub>
                        </mml:math>
</inline-formula> , the mass balance reduces to
                    <disp-formula id="e3">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:msub>
                                <mml:mi>c</mml:mi>
                                <mml:mi>f</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">v</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(3)</label>
</disp-formula>in which 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>q</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mi>m</mml:mi>
                            </mml:msub>
                            <mml:mo>/</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>f</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:mrow>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the normalized source term.</p>
                <p>To account for the compressibility of both fluid and porous skeleton, it is convenient to introduce a generalized storage coefficient 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>S</mml:mi>
                        </mml:math>
</inline-formula>, so that the pressure equation can be written as
                    <disp-formula id="e4">

                        <mml:math display="block">
                            <mml:mi>S</mml:mi>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">v</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(4)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>S</mml:mi>
                        </mml:math>
</inline-formula> incorporates the combined effects of fluid compressibility, pore compressibility, and matrix compressibility, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is a coupling coefficient associated with the temporal evolution of porosity. In the simplest formulation, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mn>1</mml:mn>
                        </mml:math>
</inline-formula>, but it is retained here in general form to allow future calibration or nondimensional reformulation.</p>
                <p>For a point or line injection source, the well may be represented by an internal singular source term,

                    <disp-formula id="e5">

                        <mml:math display="block">
                            <mml:mi>q</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>Q</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi mathvariant="bold">x</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(5)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>Q</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the injection rate and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x00b7;</mml:mo>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the Dirac delta distribution centered at the well location 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mi>w</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> . This representation is particularly convenient for the BEM framework because it avoids volumetric meshing around the well.</p>
            </sec>
            <sec id="sec8">
                <title>2.2. Darcy flow law with evolving hydraulic conductivity</title>
                <p>The Darcy velocity is governed by
                    <disp-formula id="e6">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold">v</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mfrac>
                                <mml:mi>k</mml:mi>
                                <mml:mi>&#x03bc;</mml:mi>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="bold">g</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(6)</label>
</disp-formula>
                </p>
                <p>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the intrinsic permeability, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03bc;</mml:mi>
                        </mml:math>
</inline-formula> is the dynamic viscosity, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">g</mml:mi>
                        </mml:math>
</inline-formula> is the gravitational acceleration vector. For horizontal injection problems or when pressure perturbations dominate over gravity, the body force term may be neglected, yielding
                    <disp-formula id="e7">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold">v</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mfrac>
                                <mml:mi>k</mml:mi>
                                <mml:mi>&#x03bc;</mml:mi>
                            </mml:mfrac>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mi>p</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(7)</label>
</disp-formula>
                </p>
                <p>Substituting Darcy&#x2019;s law into the mass balance equation gives the governing hydraulic diffusion equation
                    <disp-formula id="e8">

                        <mml:math display="block">
                            <mml:mi>S</mml:mi>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mi>k</mml:mi>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(8)</label>
</disp-formula>
                </p>
                <p>This equation is nonlinear because both 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03d5;</mml:mi>
                        </mml:math>
</inline-formula> and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>k</mml:mi>
                        </mml:math>
</inline-formula> evolve with time as a result of reactive dissolution and stress redistribution. In a heterogeneous reservoir, the permeability field may also vary spatially from one subregion to another, such that
                    <disp-formula id="e9">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2208;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mi>i</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>1</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mn>2</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mo>&#x2026;</mml:mo>
                            <mml:mo>,</mml:mo>
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>r</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(9)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> denotes the 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>i</mml:mi>
                        </mml:math>
</inline-formula>-th material subdomain. The continuity conditions imposed across internal interfaces are discussed later in this section.</p>
            </sec>
            <sec id="sec9">
                <title>2.3. Reaction kinetics for carbonate dissolution</title>
                <p>The geochemical alteration of the reservoir is represented through a scalar reaction progress variable 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula>, where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                        </mml:math>
</inline-formula> corresponds to the undegraded material state and increasing 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03be;</mml:mi>
                        </mml:math>
</inline-formula> indicates progressive mineral dissolution. At the Darcy scale, the kinetics may be expressed in a reduced phenomenological form as
                    <disp-formula id="e10">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>R</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03c7;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(10)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>R</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x00b7;</mml:mo>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the effective dissolution rate and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03c7;</mml:mi>
                        </mml:math>
</inline-formula> denotes additional thermodynamic or compositional variables, such as CO
                    <sub>2</sub> concentration, acidity, or saturation state. For the present formulation, and in accordance with the pressure-driven reactive framework adopted in the manuscript, a pressure-dependent first-order kinetic law is introduced:
                    <disp-formula id="e11">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.25em"/>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(11)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03bb;</mml:mi>
                        </mml:math>
</inline-formula> is the kinetic rate coefficient and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is a pressure-activation function describing the coupling between local pressure perturbation and reactive driving force. A convenient and numerically robust choice is
                    <disp-formula id="e12">

                        <mml:math display="block">
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>p</mml:mi>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mn>0</mml:mn>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>ref</mml:mi>
                                </mml:msub>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(12)</label>
</disp-formula>

                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mtext>for</mml:mtext>
                            <mml:mspace width="0.55em"/>
                            <mml:mi>p</mml:mi>
                            <mml:mspace width="0.55em"/>
                            <mml:mo>&#x2265;</mml:mo>
                            <mml:mspace width="0.55em"/>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mtext>with</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>otherwise</mml:mtext>
                            <mml:mo>,</mml:mo>
                            <mml:mtext>where</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>ref</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is a reference pressure scale. Under this definition, the reaction progress equation becomes
                    <disp-formula id="e13">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mrow>
                                        <mml:mi>p</mml:mi>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                    </mml:mrow>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>ref</mml:mi>
                                    </mml:msub>
                                </mml:mfrac>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mi>p</mml:mi>
                            <mml:mo>&#x2265;</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(13)</label>
</disp-formula>
                </p>
                <p>This form captures three physically relevant features: reaction is initiated by injection-induced disequilibrium, the rate increases with pressure perturbation, and the process gradually saturates as 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:mn>1</mml:mn>
                        </mml:math>
</inline-formula>. It also provides a convenient scalar internal variable for coupling geochemical alteration to porosity and permeability evolution.</p>
                <p>More elaborate kinetic laws can also be used without changing the overall mathematical framework. For example, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> may be replaced by a function of dissolved CO
                    <sub>2</sub> concentration or mineral saturation. In this study, the pressure-controlled form is adopted because it captures the essential reactive behavior while keeping the formulation efficient and compatible with the boundary element method.</p>
            </sec>
            <sec id="sec10">
                <title>2.4. Porosity evolution law</title>
                <p>The dissolution of carbonate minerals enlarges pore space and changes the local storage characteristics of the medium. This effect is incorporated through a constitutive relation linking porosity to the reaction progress variable and, if desired, to volumetric strain. A general differential form is
                    <disp-formula id="e14">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mrow>
                                        <mml:mi>&#x2202;</mml:mi>
                                        <mml:mi>&#x03d5;</mml:mi>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:mi>&#x2202;</mml:mi>
                                        <mml:mi>&#x03be;</mml:mi>
                                    </mml:mrow>
                                </mml:mfrac>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mrow>
                                        <mml:mi>&#x2202;</mml:mi>
                                        <mml:mi>&#x03d5;</mml:mi>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:mi>&#x2202;</mml:mi>
                                        <mml:msub>
                                            <mml:mi>&#x03b5;</mml:mi>
                                            <mml:mi>v</mml:mi>
                                        </mml:msub>
                                    </mml:mrow>
                                </mml:mfrac>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>&#x03b5;</mml:mi>
                                        <mml:mi>v</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(14)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>v</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">u</mml:mi>
                        </mml:math>
</inline-formula> is the volumetric strain.</p>
                <p>For the present carbonate dissolution model, the dominant chemical contribution is represented as
                    <disp-formula id="e15">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(15)</label>
</disp-formula>or equivalently,

                    <disp-formula id="e16">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(16)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the initial porosity and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.55em"/>
                            <mml:mo>&gt;</mml:mo>
                            <mml:mspace width="0.55em"/>
                            <mml:mn>0</mml:mn>
                        </mml:math>
</inline-formula> is a porosity-increase coefficient. If geomechanical compaction or dilation is retained, the constitutive law may be extended to
                    <disp-formula id="e17">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>b</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>v</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(17)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>b</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is a poromechanical coupling parameter. This form allows both chemical pore enlargement and mechanically induced pore-volume variation to contribute to the storage evolution.</p>
                <p>Substituting the reaction law into the porosity relation yields
                    <disp-formula id="e18">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>b</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>&#x03b5;</mml:mi>
                                        <mml:mi>v</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(18)</label>
</disp-formula>which explicitly shows how pressure, dissolution, and deformation jointly affect pore structure.</p>
            </sec>
            <sec id="sec11">
                <title>2.5. Permeability evolution law with reactive and stress-sensitive effects</title>
                <p>Permeability evolution is one of the most important nonlinear mechanisms in reactive CO
                    <sub>2</sub> injection because it controls both injectivity and the spatial redistribution of pressure. Experimental observations in dissolving carbonate formations often indicate a highly nonlinear increase of permeability with pore enlargement. To capture this effect, the present model adopts a generalized constitutive relation of the form
                    <disp-formula id="e19">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>eff</mml:mi>
                                </mml:msub>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(19)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03c3;</mml:mi>
                                <mml:mi>eff</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> denotes the effective stress tensor or an equivalent stress measure.</p>
                <p>A convenient and physically meaningful representation is the multiplicative law
                    <disp-formula id="e20">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(20)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the initial heterogeneous permeability, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b2;</mml:mi>
                                <mml:mi>&#x03be;</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the reaction-sensitivity coefficient, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b2;</mml:mi>
                                <mml:mi>&#x03c3;</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the stress-sensitivity coefficient, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:msubsup>
                                <mml:mi>&#x03c3;</mml:mi>
                                <mml:mi>m</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> is the change in mean effective stress. The factor 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> captures permeability enhancement due to dissolution, while 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> accounts for permeability reduction under increased compressive effective stress. When pressure rise leads to stress relaxation in the skeleton, this second term may also increase permeability, depending on sign convention.</p>
                <p>If a purely chemical model is desired, the permeability law reduces to
                    <disp-formula id="e21">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(21)</label>
</disp-formula>
                </p>
                <p>Alternatively, a Kozeny&#x2013;Carman-type relation may be used:
                    <disp-formula id="e22">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mi>k</mml:mi>
                                <mml:msub>
                                    <mml:mi>k</mml:mi>
                                    <mml:mn>0</mml:mn>
                                </mml:msub>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mfrac>
                                        <mml:mi>&#x03d5;</mml:mi>
                                        <mml:msub>
                                            <mml:mi>&#x03d5;</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                    </mml:mfrac>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mi>m</mml:mi>
                            </mml:msup>
                            <mml:msup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:msub>
                                                <mml:mi>&#x03d5;</mml:mi>
                                                <mml:mn>0</mml:mn>
                                            </mml:msub>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>&#x03d5;</mml:mi>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(22)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>m</mml:mi>
                            <mml:mspace width="0.55em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.55em"/>
                            <mml:mi>n</mml:mi>
                        </mml:math>
</inline-formula> are empirical exponents. However, the exponential form is especially attractive for nonlinear BEM implementation because it is smooth, monotone, and readily linearized within incremental solution schemes.</p>
            </sec>
            <sec id="sec12">
                <title>2.6. Geomechanical equilibrium and effective stress coupling</title>
                <p>To incorporate geomechanical feedback, the porous solid is modeled as a linear poroelastic continuum under quasi-static conditions. Neglecting inertia, the equilibrium equation is
                    <disp-formula id="e23">

                        <mml:math display="block">
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="bold">b</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn mathvariant="bold">0</mml:mn>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(23)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                        </mml:math>
</inline-formula> is the total stress tensor and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">b</mml:mi>
                        </mml:math>
</inline-formula> is the body force vector. The total stress is related to the effective stress through Biot&#x2019;s effective stress principle:
                    <disp-formula id="e24">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msup>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mi mathvariant="italic">&#x03b1;p</mml:mi>
                            <mml:mi mathvariant="bold">I</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(24)</label>
</disp-formula>or equivalently,

                    <disp-formula id="e25">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="italic">&#x03b1;p</mml:mi>
                            <mml:mi mathvariant="bold">I</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(25)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msup>
                        </mml:math>
</inline-formula> is the effective stress tensor, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03b1;</mml:mi>
                        </mml:math>
</inline-formula> is Biot&#x2019;s coefficient, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">I</mml:mi>
                        </mml:math>
</inline-formula> is the identity tensor.</p>
                <p>For small strains, the strain tensor is
                    <disp-formula id="e26">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold-italic">&#x03b5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mn>1</mml:mn>
                                <mml:mn>2</mml:mn>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi mathvariant="bold">u</mml:mi>
                                <mml:mo>+</mml:mo>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msup>
                                    <mml:mi mathvariant="bold">u</mml:mi>
                                    <mml:mi>T</mml:mi>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(26)</label>
</disp-formula>and the constitutive relation for an isotropic elastic skeleton is
                    <disp-formula id="e27">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:mn>2</mml:mn>
                            <mml:mi>G</mml:mi>
                            <mml:mi mathvariant="bold-italic">&#x03b5;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03bb;</mml:mi>
                                <mml:mi>s</mml:mi>
                            </mml:msub>
                            <mml:mi>tr</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold-italic">&#x03b5;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi mathvariant="bold">I</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(27)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>G</mml:mi>
                        </mml:math>
</inline-formula> is the shear modulus and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03bb;</mml:mi>
                                <mml:mi>s</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is Lam&#x00e9;&#x2019;s first parameter. Combining these expressions yields the poroelastic equilibrium equation in displacement form,

                    <disp-formula id="e28">

                        <mml:math display="block">
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mn>2</mml:mn>
                                <mml:mi>G</mml:mi>
                                <mml:mi mathvariant="bold-italic">&#x03b5;</mml:mi>
                                <mml:mo>+</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03bb;</mml:mi>
                                    <mml:mi>s</mml:mi>
                                </mml:msub>
                                <mml:mi>tr</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi mathvariant="bold-italic">&#x03b5;</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mi mathvariant="bold">I</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mi>&#x03b1;</mml:mi>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mi>p</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="bold">b</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn mathvariant="bold">0</mml:mn>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(28)</label>
</disp-formula>
                </p>
                <p>The volumetric strain relevant for porosity evolution is then
                    <disp-formula id="e29">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>v</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">u</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(29)</label>
</disp-formula>
                </p>
                <p>To couple mechanics back to flow, the mean effective stress is defined as
                    <disp-formula id="e30">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>&#x03c3;</mml:mi>
                                <mml:mi>m</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mn>1</mml:mn>
                                <mml:mi>d</mml:mi>
                            </mml:mfrac>
                            <mml:mi>tr</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(30)</label>
</disp-formula>and inserted into the permeability law introduced above. Through this mechanism, injection pressure modifies effective stress, effective stress modifies permeability, and permeability subsequently alters the pressure diffusion process.</p>
            </sec>
            <sec id="sec13">
                <title>2.7. Strongly coupled pressure&#x2013;reaction&#x2013;deformation system</title>
                <p>Combining the preceding relations, the governing reactive&#x2013;geomechanical flow model may be written as the following coupled system in 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula>:</p>
                <p>2.7.1. Pressure diffusion equation
                    <disp-formula id="e31">

                        <mml:math display="block">
                            <mml:mi>S</mml:mi>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03d5;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mrow>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msubsup>
                                                <mml:mi>&#x03c3;</mml:mi>
                                                <mml:mi>m</mml:mi>
                                                <mml:mo>&#x2032;</mml:mo>
                                            </mml:msubsup>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:mrow>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(31)</label>
</disp-formula>
                </p>
                <p>2.7.2. Reaction progress equation
                    <disp-formula id="e32">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(32)</label>
</disp-formula>
                </p>
                <p>2.7.3. Porosity evolution equation
                    <disp-formula id="e33">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>b</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>v</mml:mi>
                            </mml:msub>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(33)</label>
</disp-formula>
                </p>
                <p>2.7.4. Geomechanical equilibrium equation
                    <disp-formula id="e34">

                        <mml:math display="block">
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mn>2</mml:mn>
                                <mml:mi mathvariant="italic">G&#x03b5;</mml:mi>
                                <mml:mo>+</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03bb;</mml:mi>
                                    <mml:mi>s</mml:mi>
                                </mml:msub>
                                <mml:mi>tr</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>&#x03b5;</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mi mathvariant="bold">I</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mi>&#x03b1;</mml:mi>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mi>p</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="bold">b</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn mathvariant="bold">0</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mi>&#x03b5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mn>1</mml:mn>
                                <mml:mn>2</mml:mn>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi mathvariant="bold">u</mml:mi>
                                <mml:mo>+</mml:mo>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msup>
                                    <mml:mi mathvariant="bold">u</mml:mi>
                                    <mml:mi>T</mml:mi>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(34)</label>
</disp-formula>
                </p>
                <p>2.7.5. Permeability constitutive law
                    <disp-formula id="e35">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(35)</label>
</disp-formula>
                </p>
                <p>This coupled system is nonlinear through three mechanisms: the dependence of reaction rate on pressure, the dependence of porosity on reaction progress and deformation, and the dependence of permeability on both reaction and effective stress. These nonlinearities are responsible for the feedback processes observed in dissolving carbonate reservoirs, including near-well permeability enhancement, pressure redistribution, and mitigation of long-term pressure buildup.</p>
            </sec>
            <sec id="sec14">
                <title>2.8. Initial and boundary conditions</title>
                <p>To complete the mathematical statement of the problem, appropriate initial and boundary conditions must be specified.</p>
                <p>2.8.1. Initial conditions</p>
                <p>At 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>t</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                        </mml:math>
</inline-formula>, the reservoir is assumed to be in a reference equilibrium state:
                    <disp-formula id="e36">

                        <mml:math display="block">
                            <mml:mtable displaystyle="true">
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:maligngroup/>
                                        <mml:mi>p</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:maligngroup/>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>=</mml:mo>
                                        <mml:mn>0</mml:mn>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:maligngroup/>
                                        <mml:mi>&#x03d5;</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mi>&#x03d5;</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:maligngroup/>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mi>k</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:maligngroup/>
                                        <mml:mi mathvariant="bold">u</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mi mathvariant="bold">u</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                            </mml:mtable>
                        </mml:math>

                        <label>(36)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>n</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mspace width="0.55em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.55em"/>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                        </mml:math>
</inline-formula> may be spatially heterogeneous.</p>
                <p>2.8.2. Hydraulic boundary conditions</p>
                <p>The external boundary 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                        </mml:math>
</inline-formula> may be decomposed into prescribed-pressure and prescribed-flux parts, such that
                    <disp-formula id="e37">

                        <mml:math display="block">
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>p</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x222a;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>q</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>p</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2229;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>q</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2205;</mml:mo>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(37)</label>
</disp-formula>
                </p>
                <p>On 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>p</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, Dirichlet conditions are imposed:
                    <disp-formula id="e38">

                        <mml:math display="block">
                            <mml:mi>p</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mover accent="true">
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">&#x00af;</mml:mo>
                            </mml:mover>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>p</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(38)</label>
</disp-formula>
                </p>
                <p>On 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>q</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, Neumann conditions are prescribed:
                    <disp-formula id="e39">

                        <mml:math display="block">
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mfrac>
                                <mml:mi>k</mml:mi>
                                <mml:mi>&#x03bc;</mml:mi>
                            </mml:mfrac>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mi>p</mml:mi>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">n</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mover accent="true">
                                    <mml:mi>q</mml:mi>
                                    <mml:mo stretchy="true">&#x00af;</mml:mo>
                                </mml:mover>
                                <mml:mi>n</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>q</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(39)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">n</mml:mi>
                        </mml:math>
</inline-formula> denotes the outward unit normal vector.</p>
                <p>For an infinite or semi-infinite reservoir idealization, a far-field condition is adopted:
                    <disp-formula id="e40">

                        <mml:math display="block">
                            <mml:mi>p</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>as</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:mrow>
                                <mml:mo>|</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>|</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:mo>&#x221e;</mml:mo>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(40)</label>
</disp-formula>
                </p>
                <p>2.8.3. Mechanical boundary conditions</p>
                <p>Similarly, the mechanical boundary is partitioned into displacement and traction boundaries:
                    <disp-formula id="e41">

                        <mml:math display="block">
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>u</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x222a;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>u</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2229;</mml:mo>
                            <mml:mspace width="0.54em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2205;</mml:mo>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(41)</label>
</disp-formula>
                </p>
                <p>On 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>u</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                        </mml:math>
</inline-formula>,
                    <disp-formula id="e42">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold">u</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mover accent="false">
                                <mml:mi mathvariant="bold">u</mml:mi>
                                <mml:mo>&#x00af;</mml:mo>
                            </mml:mover>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>u</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(42)</label>
</disp-formula>and on 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula>

                    <disp-formula id="e43">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:mi mathvariant="bold">n</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mover accent="false">
                                <mml:mi mathvariant="bold">t</mml:mi>
                                <mml:mo>&#x00af;</mml:mo>
                            </mml:mover>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(43)</label>
</disp-formula>
                </p>
                <p>These conditions allow representation of confinement, overburden loading, symmetry planes, or free boundaries depending on reservoir geometry.</p>
            </sec>
            <sec id="sec15">
                <title>2.9. Interface conditions in heterogeneous reservoirs</title>
                <p>Because the reservoir may consist of multiple subregions with distinct initial permeabilities, porosities, and mechanical properties, continuity conditions must be enforced across each internal interface 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> separating subdomains 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:mo>.</mml:mo>
                        </mml:math>
</inline-formula>
                </p>
                <p>For hydraulic flow, the continuity of pressure and normal flux requires
                    <disp-formula id="e44">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(44)</label>
</disp-formula>

                    <disp-formula id="e45">

                        <mml:math display="block">
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msub>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="bold">n</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msub>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>j</mml:mi>
                                    </mml:msub>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>j</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="bold">n</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(45)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="bold">n</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the normal vector oriented from 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>to</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>.</p>
                <p>For mechanics, continuity of displacement and traction is imposed:
                    <disp-formula id="e46">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi mathvariant="bold">u</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="bold">u</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(46)</label>
</disp-formula>

                    <disp-formula id="e47">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:msub>
                                <mml:mi mathvariant="bold">n</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="bold-italic">&#x03c3;</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:msub>
                                <mml:mi mathvariant="bold">n</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(47)</label>
</disp-formula>
                </p>
                <p>These interface relations are essential for the boundary element formulation because they permit decomposition of a heterogeneous reservoir into piecewise homogeneous or weakly heterogeneous regions while preserving the correct transmission of hydraulic and mechanical fields across internal boundaries.</p>
            </sec>
            <sec id="sec16">
                <title>2.10. Incremental linearization for nonlinear solution</title>
                <p>The constitutive relations above render the problem nonlinear, and therefore an incremental solution strategy is adopted. Let 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>t</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>t</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                        </mml:math>
</inline-formula>. Over each time increment, the variables are updated as
                    <disp-formula id="e48">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>p</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>k</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(48)</label>
</disp-formula>
                </p>
                <p>The reaction term is linearized as
                    <disp-formula id="e49">

                        <mml:math display="block">
                            <mml:mi>R</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2248;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi>R</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mrow>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>R</mml:mi>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>p</mml:mi>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                            </mml:msub>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>p</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mrow>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>R</mml:mi>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>&#x03be;</mml:mi>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                            </mml:msub>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(49)</label>
</disp-formula>and the permeability update is approximated by
                    <disp-formula id="e50">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mrow>
                                    <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                    <mml:mi>k</mml:mi>
                                    <mml:mspace width="0.5em"/>
                                    <mml:mo>&#x2248;</mml:mo>
                                    <mml:mspace width="0.5em"/>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>k</mml:mi>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>&#x03be;</mml:mi>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                            </mml:msub>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mrow>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:mi>k</mml:mi>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:mi>&#x2202;</mml:mi>
                                            <mml:msubsup>
                                                <mml:mi>&#x03c3;</mml:mi>
                                                <mml:mi>m</mml:mi>
                                                <mml:mo>&#x2032;</mml:mo>
                                            </mml:msubsup>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                            </mml:msub>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:msubsup>
                                <mml:mi>&#x03c3;</mml:mi>
                                <mml:mi>m</mml:mi>
                                <mml:mo>&#x2032;</mml:mo>
                            </mml:msubsup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(50)</label>
</disp-formula>
                </p>
                <p>This procedure transforms the nonlinear coupled system into a sequence of linearized subproblems that can be efficiently solved within each time step while retaining the evolving hydro-chemo-mechanical feedback. Such an incremental treatment is especially suitable for BEM implementation because it preserves the linear operator structure required for boundary integral transformation.</p>
            </sec>
            <sec id="sec17">
                <title>2.11. Reduced form used in the present study</title>
                <p>Although the full formulation above includes explicit geomechanical equilibrium, many practical CO
                    <sub>2</sub> injection problems can be represented by a reduced reactive-flow model in which deformation is absorbed into an effective stress-sensitive permeability law. In that case, the governing equations used in computation reduce to
                    <disp-formula id="e51">

                        <mml:math display="block">
                            <mml:mi>S</mml:mi>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:mrow>
                                        <mml:msub>
                                            <mml:mi>k</mml:mi>
                                            <mml:mn>0</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msup>
                                            <mml:mi>e</mml:mi>
                                            <mml:mrow>
                                                <mml:msub>
                                                    <mml:mi>&#x03b2;</mml:mi>
                                                    <mml:mi>&#x03be;</mml:mi>
                                                </mml:msub>
                                                <mml:mi>&#x03be;</mml:mi>
                                            </mml:mrow>
                                        </mml:msup>
                                    </mml:mrow>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(51)</label>
</disp-formula>

                    <disp-formula id="e52">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(52)</label>
</disp-formula>with
                    <disp-formula id="e53">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="1.0em"/>
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:msup>
                                <mml:mi>e</mml:mi>
                                <mml:mrow>
                                    <mml:msub>
                                        <mml:mi>&#x03b2;</mml:mi>
                                        <mml:mi>&#x03be;</mml:mi>
                                    </mml:msub>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(53)</label>
</disp-formula>
                </p>
                <p>This reduced system retains the essential physics highlighted in the manuscript, namely transient pressure diffusion, dissolution-driven porosity growth, and nonlinear permeability enhancement near the injection zone, while remaining fully compatible with boundary-only discretization. It therefore forms the foundation of the subsequent boundary integral development and numerical implementation.</p>
            </sec>
        </sec>
        <sec id="sec18">
            <title>3. Boundary integral formulation and BEM discretization</title>
            <p>The governing equations developed in 
                <xref ref-type="sec" rid="sec6">Section 2</xref> define a nonlinear hydro-chemo-mechanical diffusion problem in which the reservoir properties evolve in response to pressure perturbation, mineral dissolution, and stress redistribution. Direct application of the Boundary Element Method to the fully nonlinear form is not immediate because the permeability, porosity, and storage coefficients vary both spatially and temporally. To preserve the principal advantage of BEM, namely boundary-only discretization, the present formulation adopts an incremental linearization strategy over each time step. Within a given increment, the material coefficients are frozen at their current values, and the coupled problem is recast into a sequence of transient linear diffusion subproblems for each heterogeneous subregion. This approach retains the analytical structure required for boundary integral representation while allowing accurate tracking of reaction-driven property evolution.</p>
            <p>Consider the reduced reactive-flow system introduced in 
                <xref ref-type="sec" rid="sec6">Section 2</xref>, or, equivalently, the hydraulic subproblem of the full reactive&#x2013;geomechanical model after constitutive updating. In each subregion 
                <inline-formula>

                    <mml:math display="inline">
                        <mml:msub>
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mi>i</mml:mi>
                        </mml:msub>
                        <mml:mo>,</mml:mo>
                    </mml:math>
</inline-formula> the transient pressure field satisfies a linearized diffusion equation with locally updated coefficients. The objective of this section is to derive the corresponding boundary integral equation, establish the treatment of source and interface terms, and formulate the discrete BEM system suitable for time marching under nonlinear permeability evolution. The resulting procedure extends classical transient reservoir BEM formulations to reactive carbonate media with evolving hydraulic properties while preserving the efficiency of boundary-based computation.</p>
            <sec id="sec19">
                <title>3.1. Incremental linearization of the reactive flow operator</title>
                <p>At time level 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>t</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>t</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> the nonlinear pressure equation in 
                    <xref ref-type="sec" rid="sec6">Section 2</xref> is linearized by freezing the coefficients at the previous iteration or previous time level. Let
                    <disp-formula id="e54">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>p</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>k</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(54)</label>
</disp-formula>
                </p>
                <p>Over the interval 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula>, the hydraulic operator is approximated using effective coefficients
                    <disp-formula id="e55">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>S</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mi>S</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03d5;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msubsup>
                                <mml:mo>,</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msubsup>
                                <mml:mo>,</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>m</mml:mi>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>i</mml:mi>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:mo>&#x2032;</mml:mo>
                                        <mml:mi>n</mml:mi>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:msubsup>
                                <mml:mi>k</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msubsup>
                                <mml:mo>,</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>m</mml:mi>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>i</mml:mi>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:mo>&#x2032;</mml:mo>
                                        <mml:mi>n</mml:mi>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo>,</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(55)</label>
</disp-formula>assumed constant within each subregion 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> during the current increment. The pressure equation in 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> then takes the form
                    <disp-formula id="e56">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>S</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msubsup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>i</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msubsup>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mo>&#x2208;</mml:mo>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(56)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> represents injection or extraction sources and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> is an equivalent internal source term collecting the effects of porosity evolution, reaction coupling, and coefficient linearization. A convenient definition is
                    <disp-formula id="e57">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b1;</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>&#x03d5;</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>r</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(57)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>r</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> includes residual terms arising from the linearization of permeability and storage. This reformulation converts the original nonlinear problem into a sequence of linear transient diffusion equations with known right-hand-side forcing at each increment. This is precisely the step that makes the reactive model amenable to BEM without resorting to volumetric remeshing.</p>
                <p>Introducing the hydraulic diffusivity
                    <disp-formula id="e58">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>c</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:msubsup>
                                    <mml:mi>k</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mrow>
                                    <mml:mi>&#x03bc;</mml:mi>
                                    <mml:msubsup>
                                        <mml:mi>S</mml:mi>
                                        <mml:mi>i</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msubsup>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(58)</label>
</disp-formula>the pressure equation may be rewritten as
                    <disp-formula id="e59">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:msubsup>
                                <mml:mi>c</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msup>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mn>2</mml:mn>
                            </mml:msup>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mn>1</mml:mn>
                                <mml:msubsup>
                                    <mml:mi>S</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>q</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo>+</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>f</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(59)</label>
</disp-formula>
                </p>
                <p>This form is the basis for the time-dependent boundary integral representation.</p>
            </sec>
            <sec id="sec20">
                <title>3.2. Fundamental solution for the transient diffusion operator</title>
                <p>For each subregion 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> the corresponding adjoint fundamental solution 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo>;</mml:mo>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03c4;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is defined as the solution of
                    <disp-formula id="e60">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>G</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:msubsup>
                                <mml:mi>c</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msup>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mn>2</mml:mn>
                            </mml:msup>
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03c4;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mi>t</mml:mi>
                            <mml:mo>&gt;</mml:mo>
                            <mml:mi>&#x03c4;</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(60)</label>
</disp-formula>
subject to vanishing conditions for 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>t</mml:mi>
                            <mml:mo>&lt;</mml:mo>
                            <mml:mi>&#x03c4;</mml:mi>
                            <mml:mo>.</mml:mo>
                            <mml:mspace width="0.55em"/>
                            <mml:mtext>Here</mml:mtext>
                            <mml:mo>,</mml:mo>
                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                        </mml:math>
</inline-formula> denotes the source or collocation point, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x00b7;</mml:mo>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the Dirac distribution.</p>
                <p>In two-dimensional infinite space, the transient diffusion fundamental solution is
                    <disp-formula id="e61">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo>;</mml:mo>
                                <mml:mspace width="1em"/>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03c4;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>H</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>t</mml:mi>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mi>&#x03c4;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mn>4</mml:mn>
                                    <mml:mi>&#x03c0;</mml:mi>
                                    <mml:msubsup>
                                        <mml:mi>c</mml:mi>
                                        <mml:mi>i</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msubsup>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>t</mml:mi>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mi>&#x03c4;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mfrac>
                                    <mml:msup>
                                        <mml:mi>r</mml:mi>
                                        <mml:mn>2</mml:mn>
                                    </mml:msup>
                                    <mml:mrow>
                                        <mml:mn>4</mml:mn>
                                        <mml:msubsup>
                                            <mml:mi>c</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>&#x03c4;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:mrow>
                                </mml:mfrac>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(61)</label>
</disp-formula>where
                    <disp-formula id="e62">

                        <mml:math display="block">
                            <mml:mi>r</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(62)</label>
</disp-formula>and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>H</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x00b7;</mml:mo>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the Heaviside step function. In three dimensions, the corresponding kernel is
                    <disp-formula id="e63">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo>;</mml:mo>
                                <mml:mspace width="1em"/>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03c4;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>H</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>t</mml:mi>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:mi>&#x03c4;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                                <mml:msup>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">[</mml:mo>
                                        <mml:mn>4</mml:mn>
                                        <mml:mi>&#x03c0;</mml:mi>
                                        <mml:msubsup>
                                            <mml:mi>c</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>&#x03c4;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo stretchy="true">]</mml:mo>
                                    </mml:mrow>
                                    <mml:mfrac>
                                        <mml:mn>3</mml:mn>
                                        <mml:mn>2</mml:mn>
                                    </mml:mfrac>
                                </mml:msup>
                            </mml:mfrac>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mfrac>
                                    <mml:msup>
                                        <mml:mi>r</mml:mi>
                                        <mml:mn>2</mml:mn>
                                    </mml:msup>
                                    <mml:mrow>
                                        <mml:mn>4</mml:mn>
                                        <mml:msubsup>
                                            <mml:mi>c</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>&#x03c4;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:mrow>
                                </mml:mfrac>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(63)</label>
</disp-formula>
                </p>
                <p>The normal derivative required in the boundary integral equation is given by
                    <disp-formula id="e64">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>G</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">n</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(64)</label>
</disp-formula>with 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold">n</mml:mi>
                        </mml:math>
</inline-formula> denoting the outward unit normal vector on the boundary. The use of these time-dependent Green&#x2019;s functions is central to the present formulation, because it permits exact representation of transient diffusion within each subregion while confining spatial discretization to the boundary and internal interfaces.</p>
            </sec>
            <sec id="sec21">
                <title>3.3. Time-dependent boundary integral representation</title>
                <p>Multiplying the linearized pressure equation in 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> by the fundamental solution 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> multiplying the adjoint equation for 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>by</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> subtracting the two expressions and integrating over 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00d7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula>, one obtains the transient reciprocal identity. After application of Green&#x2019;s second identity in space and integration by parts in time, the pressure field at a collocation point 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2208;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mover accent="false">
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo>&#x00af;</mml:mo>
                            </mml:mover>
                        </mml:math>
</inline-formula> satisfies
                    <disp-formula id="e65">

                        <mml:math display="block">
                            <mml:mtable displaystyle="true">
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:mi>c</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>+</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msubsup>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:msup>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:msubsup>
                                        <mml:mspace width="0.1em"/>
                                        <mml:mfrac>
                                            <mml:mrow>
                                                <mml:mi>&#x2202;</mml:mi>
                                                <mml:msub>
                                                    <mml:mi>G</mml:mi>
                                                    <mml:mi>i</mml:mi>
                                                </mml:msub>
                                            </mml:mrow>
                                            <mml:mrow>
                                                <mml:mi>&#x2202;</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:mrow>
                                        </mml:mfrac>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo>;</mml:mo>
                                            <mml:mspace width="0.8em"/>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mi mathvariant="italic">d&#x03c4;d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msubsup>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:msup>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:msubsup>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msub>
                                            <mml:mi>G</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo>;</mml:mo>
                                            <mml:mspace width="0.5em"/>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msub>
                                            <mml:mi>q</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>,</mml:mo>
                                                <mml:mi>i</mml:mi>
                                            </mml:mrow>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mi mathvariant="italic">d&#x03c4;d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msubsup>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:msup>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:msubsup>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msub>
                                            <mml:mi>G</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mfrac>
                                            <mml:mrow>
                                                <mml:msubsup>
                                                    <mml:mi>q</mml:mi>
                                                    <mml:mi>i</mml:mi>
                                                    <mml:mrow>
                                                        <mml:mo stretchy="true">(</mml:mo>
                                                        <mml:mi>n</mml:mi>
                                                        <mml:mo stretchy="true">)</mml:mo>
                                                    </mml:mrow>
                                                </mml:msubsup>
                                                <mml:mo>+</mml:mo>
                                                <mml:msubsup>
                                                    <mml:mi>f</mml:mi>
                                                    <mml:mi>i</mml:mi>
                                                    <mml:mrow>
                                                        <mml:mo stretchy="true">(</mml:mo>
                                                        <mml:mi>n</mml:mi>
                                                        <mml:mo stretchy="true">)</mml:mo>
                                                    </mml:mrow>
                                                </mml:msubsup>
                                            </mml:mrow>
                                            <mml:msubsup>
                                                <mml:mi>S</mml:mi>
                                                <mml:mi>i</mml:mi>
                                                <mml:mrow>
                                                    <mml:mo stretchy="true">(</mml:mo>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo stretchy="true">)</mml:mo>
                                                </mml:mrow>
                                            </mml:msubsup>
                                        </mml:mfrac>
                                        <mml:mi mathvariant="italic">d&#x03c4;d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:mo>+</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msub>
                                            <mml:mi>G</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:msup>
                                            <mml:mo>;</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>n</mml:mi>
                                                    <mml:mo>+</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:msup>
                                                <mml:mi>t</mml:mi>
                                                <mml:mi>n</mml:mi>
                                            </mml:msup>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mi>d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                            </mml:mtable>
                        </mml:math>

                        <label>(65)</label>
</disp-formula>where the hydraulic flux is defined as
                    <disp-formula id="e66">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mfrac>
                                <mml:msubsup>
                                    <mml:mi>k</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mi>&#x03bc;</mml:mi>
                            </mml:mfrac>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">n</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(66)</label>
</disp-formula>and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>c</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is the standard free-term coefficient, equal to 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mn>1</mml:mn>
                        </mml:math>
</inline-formula> for interior points and to the usual solid-angle fraction for boundary collocation points.</p>
                <p>The preceding expression is exact for the incrementally linearized subproblem. It contains three classes of terms: boundary integrals, internal source terms due to wells and nonlinear corrections, and domain history terms associated with the transient initial state. In classical BEM, domain integrals are absent for homogeneous linear problems; in the present reactive setting, they arise from source forcing and coefficient updates. Their treatment is discussed below.</p>
            </sec>
            <sec id="sec22">
                <title>3.4. Treatment of injection wells and equivalent domain terms</title>
                <p>A principal advantage of the present formulation is that physical wells can be represented analytically as internal singular sources without introducing local volumetric refinement. For a well located at 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mi>w</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, the source term is written as
                    <disp-formula id="e67">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>Q</mml:mi>
                                <mml:mi>w</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>&#x03b4;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi mathvariant="bold">x</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(67)</label>
</disp-formula>and the associated domain integral reduces immediately to
                    <disp-formula id="e68">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:mi>n</mml:mi>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:msubsup>
                            <mml:mspace width="0.1em"/>
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo>;</mml:mo>
                                <mml:mspace width="0.8em"/>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mfrac>
                                <mml:msubsup>
                                    <mml:mi>q</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:msup>
                                    <mml:mi>c</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:mfrac>
                            <mml:mi mathvariant="italic">d&#x03c4;d</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:mi>n</mml:mi>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:msubsup>
                            <mml:mspace width="0.1em"/>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:msub>
                                        <mml:mi>Q</mml:mi>
                                        <mml:mi>w</mml:mi>
                                    </mml:msub>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>&#x03c4;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                                <mml:msup>
                                    <mml:mi>c</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msup>
                            </mml:mfrac>
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi mathvariant="bold">x</mml:mi>
                                    <mml:mi>w</mml:mi>
                                </mml:msub>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03c4;</mml:mi>
                                <mml:mo>;</mml:mo>
                                <mml:mspace width="0.8em"/>
                                <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>t</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi mathvariant="italic">d&#x03c4;</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(68)</label>
</disp-formula>
                </p>
                <p>Thus, the well contribution is evaluated semi-analytically and introduced directly into the right-hand side of the discrete system.</p>
                <p>The remaining domain term 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula>, which contains porosity-reaction coupling and nonlinear residuals, may be handled in several ways. In the present work, a pragmatic incremental treatment is adopted. Because the nonlinear evolution is localized and varies gradually within a single time step, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> is evaluated from the previous time level and represented either as a piecewise-constant internal field over a small set of subcells or transformed into equivalent concentrated source terms at selected internal points. This preserves the boundary-dominant character of the method while avoiding full-domain meshing. Such a strategy is especially appropriate for reactive carbonate injection, where strong property evolution is typically confined to regions near the injector and along preferential flow paths.</p>
            </sec>
            <sec id="sec23">
                <title>3.5. Subdomain decomposition and interface integral equations</title>
                <p>The reservoir is partitioned into 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>r</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> subregions,

                    <disp-formula id="e69">

                        <mml:math display="block">
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:munderover>
                                <mml:mo>&#x22c3;</mml:mo>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>=</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>r</mml:mi>
                                </mml:msub>
                            </mml:munderover>
                            <mml:mspace width="0.1em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(69)</label>
</disp-formula>with each 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> treated as locally homogeneous during a given time step, but with coefficients updated between increments. This domain decomposition is particularly effective for representing sharp heterogeneity contrasts, such as layered carbonate facies, damaged zones, or reaction-altered near-well regions.</p>
                <p>For each subregion 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, a separate boundary integral equation is written over its boundary
                    <disp-formula id="e70">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mi>ext</mml:mi>
                            </mml:msubsup>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x222a;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msubsup>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mi>int</mml:mi>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(70)</label>
</disp-formula>
                </p>
                <p>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mi>ext</mml:mi>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> is the external boundary segment and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">int</mml:mi>
                                <mml:mi mathvariant="italic">int</mml:mi>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> denotes interfaces shared with adjacent regions. Across each interface 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x2202;</mml:mi>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2229;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi>&#x2202;</mml:mi>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, continuity of pressure and flux is imposed:
                    <disp-formula id="e71">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(71)</label>
</disp-formula>

                    <disp-formula id="e72">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>j</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>on</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(72)</label>
</disp-formula>
                </p>
                <p>These relations ensure exact hydraulic transmission across region boundaries. They also play a decisive role in assembling a single global algebraic system from the local subdomain equations. Because the method enforces interface conditions directly at the boundary level, heterogeneous reservoir structure can be captured without volumetric matching grids. This feature is one of the key strengths of BEM for reservoir applications with strong material contrasts.</p>
            </sec>
            <sec id="sec24">
                <title>3.6. Temporal discretization and history integration</title>
                <p>To advance the solution in time, the interval 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mrow>
                                <mml:mo stretchy="true">[</mml:mo>
                                <mml:mn>0</mml:mn>
                                <mml:mo>,</mml:mo>
                                <mml:mi>T</mml:mi>
                                <mml:mo stretchy="true">]</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> is divided into 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>t</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> steps, and the boundary variables are approximated over each increment using a suitable interpolation rule. For robustness and simplicity, the present formulation adopts a backward time-marching scheme, with boundary pressure and flux assumed constant or linearly varying over each step.</p>
                <p>Denote by 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> the boundary unknowns at the end of the 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>n</mml:mi>
                                <mml:mo>+</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mi>th</mml:mi>
                        </mml:math>
</inline-formula> time step. The time convolution integrals involving 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>&#x2202;</mml:mi>
                            <mml:msub>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>/</mml:mo>
                            <mml:mi>&#x2202;</mml:mi>
                            <mml:mi>n</mml:mi>
                        </mml:math>
</inline-formula> are then evaluated over the current step and, when needed, accumulated from previous steps through a history term. The generic form becomes
                    <disp-formula id="e73">

                        <mml:math display="block">
                            <mml:mtable displaystyle="true">
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:mi>c</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msubsup>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>+</mml:mo>
                                                <mml:mn>1</mml:mn>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>+</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msubsup>
                                            <mml:mi>H</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mn>0</mml:mn>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msubsup>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>+</mml:mo>
                                                <mml:mn>1</mml:mn>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mi>d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    </mml:mtd>
                                </mml:mtr>
                                <mml:mtr>
                                    <mml:mtd>
                                        <mml:mo>=</mml:mo>
                                        <mml:msub>
                                            <mml:mo>&#x222b;</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi>i</mml:mi>
                                            </mml:msub>
                                        </mml:msub>
                                        <mml:mspace width="0.1em"/>
                                        <mml:msubsup>
                                            <mml:mi>G</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mn>0</mml:mn>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:msubsup>
                                            <mml:mi>q</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>,</mml:mo>
                                                <mml:mi>i</mml:mi>
                                            </mml:mrow>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>+</mml:mo>
                                                <mml:mn>1</mml:mn>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mi>d</mml:mi>
                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:msubsup>
                                            <mml:mi>b</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>+</mml:mo>
                                                <mml:mn>1</mml:mn>
                                            </mml:mrow>
                                        </mml:msubsup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>,</mml:mo>
                                    </mml:mtd>
                                </mml:mtr>
                            </mml:mtable>
                        </mml:math>

                        <label>(73)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>H</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mn>0</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msubsup>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mn>0</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> are the influence kernels integrated over the current time step, and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> includes all known contributions from source terms, previous-time history, and nonlinear corrections.</p>
                <p>More explicitly,

                    <disp-formula id="e74">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mtext>hist</mml:mtext>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>src</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>nl</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(74)</label>
</disp-formula>with the three components corresponding respectively to temporal history, analytical well forcing, and equivalent nonlinear domain effects. The use of implicit time integration stabilizes the transient reactive problem and is particularly beneficial when permeability changes become rapid near the injection zone.</p>
            </sec>
            <sec id="sec25">
                <title>3.7. Spatial discretization of the boundary</title>
                <p>Each boundary segment &#x0393;i\Gamma_i&#x0393;i is discretized into NiN_iNi boundary elements. For clarity and computational efficiency, constant or linear interpolation may be adopted. In the constant-element formulation, the boundary pressure and normal flux are assumed uniform over each element 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>e</mml:mi>
                            <mml:mspace width="-0.3em"/>
                            <mml:mo>:</mml:mo>
                        </mml:math>
</inline-formula>

                    <disp-formula id="e75">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.8em"/>
                            <mml:mo>&#x2248;</mml:mo>
                            <mml:mspace width="0.8em"/>
                            <mml:msubsup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>e</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.7em"/>
                            <mml:mo>&#x2248;</mml:mo>
                            <mml:mspace width="0.7em"/>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mspace width="0.8em"/>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>e</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                            <mml:mi mathvariant="bold">x</mml:mi>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2208;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msubsup>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>e</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(75)</label>
</disp-formula>
                </p>
                <p>Substituting these approximations into the boundary integral equation and collocating at the element centers yields
                    <disp-formula id="e76">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>c</mml:mi>
                                <mml:mi>m</mml:mi>
                            </mml:msub>
                            <mml:msubsup>
                                <mml:mi>p</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>m</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:munderover>
                                <mml:mo>&#x2211;</mml:mo>
                                <mml:mrow>
                                    <mml:mi>e</mml:mi>
                                    <mml:mo>=</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                            </mml:munderover>
                            <mml:mspace width="0.1em"/>
                            <mml:msubsup>
                                <mml:mi>H</mml:mi>
                                <mml:mi mathvariant="italic">me</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msubsup>
                                <mml:mi>p</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>e</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:munderover>
                                <mml:mo>&#x2211;</mml:mo>
                                <mml:mrow>
                                    <mml:mi>e</mml:mi>
                                    <mml:mo>=</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                                <mml:msub>
                                    <mml:mi>N</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                            </mml:munderover>
                            <mml:mspace width="0.1em"/>
                            <mml:msubsup>
                                <mml:mi>G</mml:mi>
                                <mml:mi mathvariant="italic">me</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>e</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>b</mml:mi>
                                <mml:mrow>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>m</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                            <mml:mi>m</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>1</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mn>2</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mo>&#x2026;</mml:mo>
                            <mml:mo>,</mml:mo>
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(76)</label>
</disp-formula>where the influence coefficients are
                    <disp-formula id="e77">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>H</mml:mi>
                                <mml:mi mathvariant="italic">me</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:msubsup>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>e</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                            </mml:msub>
                            <mml:mspace width="0.1em"/>
                            <mml:msubsup>
                                <mml:mi>H</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mn>0</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                </mml:msub>
                                <mml:mo>,</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>d</mml:mi>
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:msubsup>
                                <mml:mi>G</mml:mi>
                                <mml:mi mathvariant="italic">me</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>i</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:msubsup>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi>e</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:msubsup>
                            </mml:msub>
                            <mml:mspace width="0.1em"/>
                            <mml:msubsup>
                                <mml:mi>G</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mn>0</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi mathvariant="bold-italic">&#x03be;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                </mml:msub>
                                <mml:mo>,</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>d</mml:mi>
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(77)</label>
</disp-formula>
                </p>
                <p>For non-singular element interactions, these integrals are evaluated by standard Gaussian quadrature. For singular or near-singular integrals, analytical evaluation or singularity subtraction is employed to maintain numerical accuracy. Because only boundaries and interfaces are discretized, the resulting system is significantly smaller than the corresponding finite element or finite difference system for the same physical domain.</p>
                <p>If higher accuracy is required near wells, corners, or strong permeability gradients, the present constant-element approximation can be replaced by discontinuous linear or quadratic elements without modifying the general structure of the formulation.</p>
            </sec>
            <sec id="sec26">
                <title>3.8. Matrix form of the subdomain equations</title>
                <p>Collecting all collocation equations for a subregion &#x03a9;i\Omega_i&#x03a9;i , the discrete system may be written compactly as
                    <disp-formula id="e78">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">H</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">p</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">G</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(78)</label>
</disp-formula>or, equivalently,

                    <disp-formula id="e79">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">A</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(79)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> contains the unknown boundary values after application of the prescribed external boundary conditions. The matrices 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">H</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.55em"/>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">G</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> depend on the updated diffusivity 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>c</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> and therefore change from one time step to the next as the reaction field evolves.</p>
                <p>The right-hand-side vector 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> contains:
                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>the transient history contribution from 
                                <inline-formula>

                                    <mml:math display="inline">
                                        <mml:msubsup>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                            <mml:mi>n</mml:mi>
                                        </mml:msubsup>
                                        <mml:mo>,</mml:mo>
                                    </mml:math>
</inline-formula>
                            </p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>analytical contributions from internal wells,</p>
                        </list-item>
                        <list-item>
                            <label>3.</label>
                            <p>equivalent source terms induced by porosity and permeability updates,</p>
                        </list-item>
                        <list-item>
                            <label>4.</label>
                            <p>terms associated with known boundary data.</p>
                        </list-item>
                    </list>
                </p>
                <p>Because the matrices are assembled on a subdomain basis, the method naturally accommodates spatial heterogeneity and localized coefficient evolution. This is particularly important for carbonate reservoirs, where dissolution-driven permeability changes may be concentrated in only a limited portion of the domain.</p>
            </sec>
            <sec id="sec27">
                <title>3.9. Global assembly with interface continuity constraints</title>
                <p>The global reservoir system is obtained by assembling all subdomain equations and imposing interface continuity conditions. Let
                    <disp-formula id="e80">

                        <mml:math display="block">
                            <mml:mi mathvariant="bold">p</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">[</mml:mo>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">p</mml:mi>
                                        <mml:mn>1</mml:mn>
                                    </mml:msub>
                                    <mml:mspace width="0.25em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">p</mml:mi>
                                        <mml:mn>2</mml:mn>
                                    </mml:msub>
                                    <mml:mspace width="0.25em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:mo>&#x22ef;</mml:mo>
                                    <mml:mspace width="0.5em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">p</mml:mi>
                                        <mml:msub>
                                            <mml:mi>N</mml:mi>
                                            <mml:mi>r</mml:mi>
                                        </mml:msub>
                                    </mml:msub>
                                    <mml:mo stretchy="true">]</mml:mo>
                                </mml:mrow>
                                <mml:mi>T</mml:mi>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi mathvariant="bold">q</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">[</mml:mo>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">q</mml:mi>
                                        <mml:mn>1</mml:mn>
                                    </mml:msub>
                                    <mml:mspace width="0.25em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">q</mml:mi>
                                        <mml:mn>2</mml:mn>
                                    </mml:msub>
                                    <mml:mspace width="0.25em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:mo>&#x22ef;</mml:mo>
                                    <mml:mspace width="0.55em"/>
                                    <mml:maligngroup/>
                                    <mml:malignmark/>
                                    <mml:msub>
                                        <mml:mi mathvariant="bold">q</mml:mi>
                                        <mml:msub>
                                            <mml:mi>N</mml:mi>
                                            <mml:mi>r</mml:mi>
                                        </mml:msub>
                                    </mml:msub>
                                    <mml:mo stretchy="true">]</mml:mo>
                                </mml:mrow>
                                <mml:mi>T</mml:mi>
                            </mml:msup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(80)</label>
</disp-formula>
                </p>
                <p>After merging common interface unknowns and enforcing
                    <disp-formula id="e81">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">p</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">p</mml:mi>
                                <mml:mi>j</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">q</mml:mi>
                                <mml:mi>j</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mn mathvariant="bold">0</mml:mn>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(81)</label>
</disp-formula>
                </p>
                <p>the assembled system assumes the block form
                    <disp-formula id="e82">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="bold">A</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:msup>
                                <mml:mi mathvariant="bold">X</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi mathvariant="bold">B</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(82)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi mathvariant="bold">X</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                        </mml:math>
</inline-formula> is the global vector of unknown boundary pressures and fluxes over all external boundaries and interfaces.</p>
                <p>This fully coupled matrix system is solved at each time step to recover the pressure field on all boundaries. Once the boundary solution is known, interior pressures may be evaluated at arbitrary observation points by substituting the solved boundary data back into the integral representation formula. This post-processing step requires no additional mesh generation and provides a continuous semi-analytical field reconstruction, which is another important advantage of the BEM framework.</p>
            </sec>
            <sec id="sec28">
                <title>3.10. Nonlinear update algorithm for reaction, porosity, and permeability</title>
                <p>Because the boundary matrices depend on coefficients that evolve with the reactive state, the solution proceeds incrementally in time. At the end of each time step, the pressure solution is used to update the reaction progress, porosity, and permeability. A staggered algorithm is adopted as follows.</p>
                <p>3.10.1. Step 1: solve the linearized BEM system</p>
                <p>Given 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.55em"/>
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> compute the effective storage and diffusivity in each subregion and solve
                    <disp-formula id="e83">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="bold">A</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:msup>
                                <mml:mi mathvariant="bold">X</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi mathvariant="bold">B</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(83)</label>
</disp-formula>for the boundary unknowns. Then evaluate the interior pressure 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                        </mml:math>
</inline-formula> where needed.</p>
                <p>3.10.2. Step 2: update the reaction progress variable</p>
                <p>Using the pressure field obtained in Step 1, update 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03be;</mml:mi>
                        </mml:math>
</inline-formula> according to the reaction law introduced in 
                    <xref ref-type="sec" rid="sec6">Section 2</xref>. For example, with an implicit or semi-implicit Euler rule,

                    <disp-formula id="e84">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mi>n</mml:mi>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi mathvariant="italic">t&#x03bb;</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(84)</label>
</disp-formula>
                </p>
                <p>This update preserves the irreversible nature of carbonate dissolution and is straightforward to implement.</p>
                <p>3.10.3. Step 3: update porosity and permeability</p>
                <p>The porosity is then updated from
                    <disp-formula id="e85">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>b</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:msubsup>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>v</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(85)</label>
</disp-formula>
                </p>
                <p>or, in the reduced model,

                    <disp-formula id="e86">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:msup>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(86)</label>
</disp-formula>
                </p>
                <p>The permeability is updated using
                    <disp-formula id="e87">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2032;</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(87)</label>
</disp-formula>
                </p>
                <p>or, in the reduced reactive-flow model,

                    <disp-formula id="e88">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(88)</label>
</disp-formula>
                </p>
                <p>3.10.4. Step 4: convergence check within the time step</p>
                <p>If strong nonlinear coupling is present, the coefficient update may be iterated within the same time step until
                    <disp-formula id="e89">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo>+</mml:mo>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&lt;</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>k</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo>+</mml:mo>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&lt;</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>&#x03be;</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(89)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>k</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi>&#x03b5;</mml:mi>
                                <mml:mi>&#x03be;</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> are prescribed tolerances. In many practical injection simulations, however, a single staggered update per step is sufficient and numerically stable, especially when 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                        </mml:math>
</inline-formula> is chosen adaptively.</p>
                <p>This incremental strategy is consistent with the problem statement in the manuscript, where nonlinear permeability evolution is captured through time-stepwise linearization while maintaining the computational efficiency of the boundary element framework.</p>
            </sec>
            <sec id="sec29">
                <title>3.11. Numerical characteristics of the proposed BEM formulation</title>
                <p>The present discretization possesses several properties that are particularly advantageous for reactive CO
                    <sub>2</sub> injection modeling.</p>
                <p>First, the method remains predominantly boundary-only, thereby avoiding the full volumetric meshing burden of finite difference and finite element approaches. This is especially beneficial for large, laterally extensive reservoirs with complex internal interfaces. Second, the use of subdomain decomposition allows sharp heterogeneity contrasts to be captured rigorously through interface continuity equations. Third, internal wells are represented analytically as singular source terms, eliminating the need for local grid refinement around injection points. Fourth, the nonlinear permeability evolution is incorporated through an incremental update procedure rather than repeated remeshing, which substantially enhances computational efficiency.</p>
                <p>At the same time, the method retains the analytical rigor of Green&#x2019;s-function-based transient diffusion solutions. This combination of dimensional reduction, exact interface treatment, and nonlinear coefficient updating is what enables the proposed framework to model pressure diffusion, reaction-driven permeability enhancement, and evolving injectivity in heterogeneous carbonate reservoirs with high efficiency and accuracy. These capabilities are fully consistent with the objectives and contributions stated in the manuscript.</p>
            </sec>
            <sec id="sec30">
                <title>3.12. Reduced discrete form used in the present implementation</title>
                <p>For the numerical examples presented later in the paper, the full formulation is implemented in reduced form by neglecting explicit mechanical equilibrium within the BEM solve and incorporating geomechanical influence through the updated permeability law. Accordingly, the pressure subproblem solved at each step is
                    <disp-formula id="e90">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>S</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msubsup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>i</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msubsup>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:msub>
                                <mml:mi>a</mml:mi>
                                <mml:mi>&#x03d5;</mml:mi>
                            </mml:msub>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(90)</label>
</disp-formula>with
                    <disp-formula id="e91">

                        <mml:math display="block">
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>&#x03be;</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a8;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mn>1</mml:mn>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.7em"/>
                            <mml:msubsup>
                                <mml:mi>k</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mn>0</mml:mn>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:msubsup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mi>i</mml:mi>
                                    <mml:mi>n</mml:mi>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(91)</label>
</disp-formula>
                </p>
                <p>The corresponding BEM system at time level 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>n</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:mn>1</mml:mn>
                        </mml:math>
</inline-formula> is written as
                    <disp-formula id="e92">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="bold">H</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:msup>
                                <mml:mi mathvariant="bold">p</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mi mathvariant="bold">G</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:msup>
                                <mml:mi mathvariant="bold">q</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mtext>hist</mml:mtext>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mtext>well</mml:mtext>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mtext>react</mml:mtext>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(92)</label>
</disp-formula>
                </p>
                <p>Here, 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi mathvariant="bold">b</mml:mi>
                                <mml:mtext>react</mml:mtext>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> contains the equivalent forcing associated with reaction-induced storage change, while the coefficient matrices are assembled using the current subdomain diffusivities. This reduced implementation preserves the essential coupling between pressure diffusion and reaction-driven permeability evolution and forms the computational core of the present study.</p>
            </sec>
        </sec>
        <sec id="sec31">
            <title>4. Validity and accuracy of the proposed boundary element formulation</title>
            <p>The validity and numerical reliability of the proposed Boundary Element formulation are established through a four-level verification and validation strategy. First, the formulation is checked against limiting benchmark problems to confirm that it recovers the correct nonreactive diffusion behavior and interface transmission under special parameter choices. Second, the approximation is examined through spatial and temporal convergence requirements in order to show that the numerical solution improves systematically under refinement. Third, the method is compared with finite difference and finite element reference solutions to quantify predictive agreement and computational efficiency. Fourth, the reactive component of the model is assessed against published carbonate-dissolution studies to verify that the predicted permeability evolution remains consistent with established physical trends. This sequence is intended to provide a clear chain of evidence linking mathematical consistency, numerical convergence, cross-method agreement, and storage-relevant reactive validation.</p>
            <p>The formulation is first verified against limiting benchmark problems to confirm that it recovers the correct nonreactive diffusion behavior and heterogeneous interface transmission in cases where the expected solution structure is already known.</p>
            <sec id="sec32">
                <title>4.1. Mathematical validity of the boundary integral representation</title>
                <p>The starting point for validity is the observation that the transient boundary integral equation derived in 
                    <xref ref-type="sec" rid="sec18">Section 3</xref> is obtained directly from the linearized diffusion equation through Green&#x2019;s second identity and the adjoint fundamental solution. Consequently, for each time increment and each subregion 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> the integral representation is mathematically equivalent to the corresponding linear diffusion subproblem, provided that the solution remains sufficiently regular, and the boundary and interface data satisfy the prescribed continuity conditions.</p>
                <p>Within a single increment, the local pressure field satisfies
                    <disp-formula id="e93">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>S</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:msub>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>i</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msubsup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>i</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msubsup>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>i</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msubsup>
                                <mml:mi>q</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:msubsup>
                                <mml:mi>f</mml:mi>
                                <mml:mi>i</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(93)</label>
</disp-formula>where all coefficients are frozen at the current iterate. For this problem, the time-dependent Green&#x2019;s function used in 
                    <xref ref-type="sec" rid="sec18">Section 3</xref> is the exact fundamental solution of the associated transient diffusion operator. The derived boundary integral equation therefore does not introduce any approximation at the continuous level. The only approximations arise later through temporal discretization, boundary interpolation, numerical quadrature, and nonlinear coefficient updating.</p>
                <p>This point is important from a methodological perspective. The proposed scheme is not an empirical boundary approximation of a nonlinear reservoir model; rather, it is a rigorously derived boundary integral reformulation of a sequence of incrementally linearized governing equations. The mathematical validity of the formulation therefore follows from three facts:
                    <list list-type="roman-lower">
                        <list-item>
                            <label>(i)</label>
                            <p>exact Green&#x2019;s-function representation of the linearized subproblem,</p>
                        </list-item>
                        <list-item>
                            <label>(ii)</label>
                            <p>exact enforcement of pressure and flux continuity across interfaces,</p>
                        </list-item>
                        <list-item>
                            <label>(iii)</label>
                            <p>consistent constitutive updating of porosity, reaction progress, and permeability.</p>
                        </list-item>
                    </list>
                </p>
                <p>Accordingly, if the incremental update converges, the solution obtained by the proposed BEM procedure is a consistent approximation of the original nonlinear reactive-flow problem.</p>
            </sec>
            <sec id="sec33">
                <title>4.2. Consistency of the incremental linearization</title>
                <p>The principal approximation introduced in the present formulation arises from the treatment of nonlinearities through time-stepwise linearization. It is therefore necessary to show that the adopted staggered update remains consistent with the governing equations as the time increment 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                        </mml:math>
</inline-formula> decreases.</p>
                <p>Let the nonlinear hydraulic operator be written abstractly as
                    <disp-formula id="e94">

                        <mml:math display="block">
                            <mml:mi mathvariant="script">L</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>k</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(94)</label>
</disp-formula>with constitutive dependencies
                    <disp-formula id="e95">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b5;</mml:mi>
                                    <mml:mi>v</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&#x2032;</mml:mo>
                                </mml:msubsup>
                                <mml:mo>,</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(95)</label>
</disp-formula>
                </p>
                <p>Over a time step, the operator is approximated by
                    <disp-formula id="e96">

                        <mml:math display="block">
                            <mml:mi mathvariant="script">L</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03d5;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo>,</mml:mo>
                                <mml:msup>
                                    <mml:mi>k</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2248;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msup>
                                <mml:mi mathvariant="script">L</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>+</mml:mo>
                            <mml:msup>
                                <mml:mi mathvariant="script">R</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(96)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi mathvariant="script">L</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                        </mml:math>
</inline-formula> denotes the frozen-coefficient linear operator and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi mathvariant="script">R</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                        </mml:math>
</inline-formula> collects residual terms associated with constitutive evolution. If the constitutive functions are smooth and the update is performed consistently, then
                    <disp-formula id="e97">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi mathvariant="script">R</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:mi>O</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(97)</label>
</disp-formula>for a first-order incremental scheme. Hence, as 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:mn>0</mml:mn>
                        </mml:math>
</inline-formula>, the linearized subproblem converges to the original nonlinear problem in the usual local truncation sense.</p>
                <p>This result establishes the consistency of the proposed nonlinear treatment. It also clarifies the role of time-step selection. Large time steps may still yield stable solutions, but strong reaction fronts or rapid permeability changes require smaller increments to preserve local accuracy of the coefficient update. Thus, the validity of the approach is not merely formal; it is tied to a numerically controlled approximation whose error can be reduced systematically through temporal refinement.</p>
            </sec>
            <sec id="sec34">
                <title>4.3. Recovery of limiting benchmark solutions</title>
                <p>A strong verification argument is obtained by demonstrating that the proposed formulation reduces correctly to known benchmark problems under special parameter choices. The following limiting cases are especially relevant.</p>
                <p>4.3.1. Pure pressure diffusion in a homogeneous reservoir</p>
                <p>If the reaction is suppressed by setting 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> then
                    <disp-formula id="e98">

                        <mml:math display="block">
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(98)</label>
</disp-formula>and the model reduces to the classical transient diffusion equation
                    <disp-formula id="e99">

                        <mml:math display="block">
                            <mml:mi>S</mml:mi>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>p</mml:mi>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:mo>&#x2207;</mml:mo>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mfrac>
                                    <mml:msub>
                                        <mml:mi>k</mml:mi>
                                        <mml:mn>0</mml:mn>
                                    </mml:msub>
                                    <mml:mi>&#x03bc;</mml:mi>
                                </mml:mfrac>
                                <mml:mo>&#x2207;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>q</mml:mi>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(99)</label>
</disp-formula>
                </p>
                <p>In this case, the proposed BEM becomes identical to a standard transient reservoir boundary element formulation and should recover the well-known radial pressure response in infinite or bounded domains. Agreement in this limit verifies the correctness of the fundamental solution, time convolution treatment, and singular-source representation.</p>
                <p>4.3.2. Heterogeneous but nonreactive subdomain diffusion</p>
                <p>If 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03bb;</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mspace width="0.75em"/>
                            <mml:mi>but</mml:mi>
                            <mml:mspace width="0.75em"/>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> varies between subregions, the formulation reduces to transient diffusion in a piecewise heterogeneous reservoir. The exact enforcement of
                    <disp-formula id="e100">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>i</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>j</mml:mi>
                            </mml:msub>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>i</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>,</mml:mo>
                                    <mml:mi>j</mml:mi>
                                </mml:mrow>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(100)</label>
</disp-formula>across every interface ensures that the method reproduces the correct transmission of pressure waves through permeability contrasts. Agreement with reference solutions in this setting verifies the subdomain assembly procedure and the interface-coupling strategy.</p>
                <p>4.3.3. Spatially uniform reactive evolution</p>
                <p>If the reservoir is homogeneous and the pressure field varies slowly enough that the reaction term becomes effectively uniform over a region, then the permeability evolution law
                    <disp-formula id="e101">

                        <mml:math display="block">
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(101)</label>
</disp-formula>may be compared with a semi-analytical ordinary differential reduction of the governing system. Recovery of this limit confirms that the nonlinear constitutive updating has been implemented correctly and does not introduce artificial damping or amplification.</p>
                <p>The ability of the proposed formulation to recover these limiting solutions is a fundamental indicator of correctness, because it shows that the method behaves appropriately when the full complexity of the reactive&#x2013;heterogeneous system is reduced to classical special cases. These limiting cases establish the first level of validation by showing that, in the absence of reactive coefficient evolution, the proposed formulation reduces correctly to classical transient diffusion behavior in both homogeneous and heterogeneous settings.</p>
            </sec>
            <sec id="sec35">
                <title>4.4. Verification against analytical and semi-analytical reference solutions</title>
                <p>For practical verification, the first level of quantitative testing should be performed against analytical or semi-analytical solutions in idealized geometries. The most natural benchmark is the transient pressure response to constant-rate injection in an infinite homogeneous reservoir. In the absence of reaction, the classical logarithmic or exponential-integral pressure solution provides a direct reference for evaluating the BEM pressure field at selected observation points and times.</p>
                <p>Let 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>ref</mml:mi>
                            </mml:msup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> denote the reference solution and 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msup>
                                <mml:mi>p</mml:mi>
                                <mml:mi>BEM</mml:mi>
                            </mml:msup>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                        </mml:math>
</inline-formula> the numerical result. The pointwise relative error may be defined as
                    <disp-formula id="e102">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>e</mml:mi>
                                <mml:mi>p</mml:mi>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo>|</mml:mo>
                                    <mml:msup>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>BEM</mml:mi>
                                    </mml:msup>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi mathvariant="bold">x</mml:mi>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>t</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>p</mml:mi>
                                        <mml:mi>ref</mml:mi>
                                    </mml:msup>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mi mathvariant="bold">x</mml:mi>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>t</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo mathvariant="italic">max</mml:mo>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:mo>|</mml:mo>
                                        <mml:msup>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>ref</mml:mi>
                                        </mml:msup>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi mathvariant="bold">x</mml:mi>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>t</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                        <mml:mo>|</mml:mo>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>&#x03f5;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(102)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>&#x03f5;</mml:mi>
                        </mml:math>
</inline-formula> is a small regularization parameter preventing division by zero. Global accuracy measures may then be written as
                    <disp-formula id="e103">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>E</mml:mi>
                                <mml:msub>
                                    <mml:mi>L</mml:mi>
                                    <mml:mn>2</mml:mn>
                                </mml:msub>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:msup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mfrac>
                                        <mml:mrow>
                                            <mml:munderover>
                                                <mml:mo>&#x2211;</mml:mo>
                                                <mml:mrow>
                                                    <mml:mi>m</mml:mi>
                                                    <mml:mo>=</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                                <mml:msub>
                                                    <mml:mi>N</mml:mi>
                                                    <mml:mi>o</mml:mi>
                                                </mml:msub>
                                            </mml:munderover>
                                            <mml:mspace width="0.1em"/>
                                            <mml:msup>
                                                <mml:mrow>
                                                    <mml:mo stretchy="true">[</mml:mo>
                                                    <mml:msubsup>
                                                        <mml:mi>p</mml:mi>
                                                        <mml:mi>m</mml:mi>
                                                        <mml:mi>BEM</mml:mi>
                                                    </mml:msubsup>
                                                    <mml:mrow>
                                                        <mml:mo stretchy="true">(</mml:mo>
                                                        <mml:mi>t</mml:mi>
                                                        <mml:mo stretchy="true">)</mml:mo>
                                                    </mml:mrow>
                                                    <mml:mo>&#x2212;</mml:mo>
                                                    <mml:msubsup>
                                                        <mml:mi>p</mml:mi>
                                                        <mml:mi>m</mml:mi>
                                                        <mml:mi>ref</mml:mi>
                                                    </mml:msubsup>
                                                    <mml:mrow>
                                                        <mml:mo stretchy="true">(</mml:mo>
                                                        <mml:mi>t</mml:mi>
                                                        <mml:mo stretchy="true">)</mml:mo>
                                                    </mml:mrow>
                                                    <mml:mo stretchy="true">]</mml:mo>
                                                </mml:mrow>
                                                <mml:mn>2</mml:mn>
                                            </mml:msup>
                                        </mml:mrow>
                                        <mml:mrow>
                                            <mml:munderover>
                                                <mml:mo>&#x2211;</mml:mo>
                                                <mml:mrow>
                                                    <mml:mi>m</mml:mi>
                                                    <mml:mo>=</mml:mo>
                                                    <mml:mn>1</mml:mn>
                                                </mml:mrow>
                                                <mml:msub>
                                                    <mml:mi>N</mml:mi>
                                                    <mml:mi>o</mml:mi>
                                                </mml:msub>
                                            </mml:munderover>
                                            <mml:mspace width="0.1em"/>
                                            <mml:msup>
                                                <mml:mrow>
                                                    <mml:mo stretchy="true">[</mml:mo>
                                                    <mml:msubsup>
                                                        <mml:mi>p</mml:mi>
                                                        <mml:mi>m</mml:mi>
                                                        <mml:mi>ref</mml:mi>
                                                    </mml:msubsup>
                                                    <mml:mrow>
                                                        <mml:mo stretchy="true">(</mml:mo>
                                                        <mml:mi>t</mml:mi>
                                                        <mml:mo stretchy="true">)</mml:mo>
                                                    </mml:mrow>
                                                    <mml:mo stretchy="true">]</mml:mo>
                                                </mml:mrow>
                                                <mml:mn>2</mml:mn>
                                            </mml:msup>
                                        </mml:mrow>
                                    </mml:mfrac>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mfrac>
                                    <mml:mn>1</mml:mn>
                                    <mml:mn>2</mml:mn>
                                </mml:mfrac>
                            </mml:msup>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(103)</label>
</disp-formula>and
                    <disp-formula id="e104">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>E</mml:mi>
                                <mml:mo>&#x221e;</mml:mo>
                            </mml:msub>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:munder>
                                <mml:mo mathvariant="italic">max</mml:mo>
                                <mml:mrow>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo>&lt;</mml:mo>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>&lt;</mml:mo>
                                    <mml:msub>
                                        <mml:mi>N</mml:mi>
                                        <mml:mi>o</mml:mi>
                                    </mml:msub>
                                </mml:mrow>
                            </mml:munder>
                            <mml:mspace width="0.1em"/>
                            <mml:mrow>
                                <mml:mo>|</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mi>BEM</mml:mi>
                                </mml:msubsup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msubsup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mi>ref</mml:mi>
                                </mml:msubsup>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>t</mml:mi>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                                <mml:mo>|</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(104)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>o</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the number of observation points.</p>
                <p>For weakly reactive cases, semi-analytical reference solutions may be constructed by operator splitting or by solving the one-dimensional reduced problem with a highly refined finite difference grid. In that setting, the proposed BEM solution should reproduce both the pressure profile and the monotonic increase of permeability near the injection region. Agreement under such conditions provides evidence that the incremental nonlinear update remains accurate in regimes where no exact closed-form solution is available.</p>
                <p>Having established benchmark consistency in the nonreactive limit, the next step is to verify that the numerical approximation converges systematically under boundary and time-step refinement before assessing agreement with independent reference methods and published reactive data.</p>
            </sec>
            <sec id="sec36">
                <title>4.5. Spatial convergence of the boundary discretization</title>
                <p>After benchmark consistency is established, the second level of validation concerns numerical convergence, namely whether the boundary and time discretizations can be systematically refined to approach a stable solution.</p>
                <p>The accuracy of the proposed method also depends on the spatial approximation of boundary variables. Because the interior domain is represented analytically through Green&#x2019;s functions, the principal spatial error arises from discretization of the external boundary, internal interfaces, and any auxiliary internal source representation used for nonlinear correction terms.</p>
                <p>Let 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>b</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> denote the total number of boundary elements. For a sufficiently smooth boundary solution, the discrete approximation is expected to converge as
                    <disp-formula id="e105">

                        <mml:math display="block">
                            <mml:mrow>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>p</mml:mi>
                                    <mml:mi>h</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>as</mml:mi>
                            <mml:mspace width="0.25em"/>
                            <mml:msub>
                                <mml:mi>N</mml:mi>
                                <mml:mi>b</mml:mi>
                            </mml:msub>
                            <mml:mo>&#x2192;</mml:mo>
                            <mml:mo>&#x221e;</mml:mo>
                        </mml:math>

                        <label>(105)</label>
</disp-formula>where 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>p</mml:mi>
                                <mml:mi>h</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> is the BEM approximation. For constant boundary elements, first-order convergence in an appropriate norm is generally expected, while higher-order boundary interpolation yields correspondingly improved rates for smooth solutions.</p>
                <p>A practical mesh-convergence study may be performed by successively refining the boundary and interface discretization and monitoring a scalar response quantity such as:
                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>pressure at the wellbore,</p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>pressure at selected observation points,</p>
                        </list-item>
                        <list-item>
                            <label>3.</label>
                            <p>total boundary flux balance,</p>
                        </list-item>
                        <list-item>
                            <label>4.</label>
                            <p>cumulative injected mass.</p>
                        </list-item>
                    </list>
                </p>
                <p>Let 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>J</mml:mi>
                                <mml:mi>h</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> denote one such quantity computed on a mesh of characteristic boundary size 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>h</mml:mi>
                        </mml:math>
</inline-formula>. The relative discretization error between two successive meshes may be estimated as
                    <disp-formula id="e106">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mi>&#x03b7;</mml:mi>
                                <mml:mi>h</mml:mi>
                            </mml:msub>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo>|</mml:mo>
                                    <mml:msub>
                                        <mml:mi>J</mml:mi>
                                        <mml:mi>h</mml:mi>
                                    </mml:msub>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msub>
                                        <mml:mi>J</mml:mi>
                                        <mml:mrow>
                                            <mml:mi>h</mml:mi>
                                            <mml:mo>/</mml:mo>
                                            <mml:mn>2</mml:mn>
                                        </mml:mrow>
                                    </mml:msub>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo>|</mml:mo>
                                    <mml:msub>
                                        <mml:mi>J</mml:mi>
                                        <mml:mrow>
                                            <mml:mi>h</mml:mi>
                                            <mml:mo>/</mml:mo>
                                            <mml:mn>2</mml:mn>
                                        </mml:mrow>
                                    </mml:msub>
                                    <mml:mo>|</mml:mo>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(106)</label>
</disp-formula>
                </p>
                <p>Convergence is established when 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi>&#x03b7;</mml:mi>
                                <mml:mi>h</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula> decreases monotonically with refinement and the solution approaches a mesh-independent value. In reactive cases, convergence must be assessed for both hydraulic and constitutive quantities, especially 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi>p</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mtext>and</mml:mtext>
                            <mml:mspace width="0.75em"/>
                            <mml:mi>k</mml:mi>
                        </mml:math>
</inline-formula>, because small pressure errors may become amplified through exponential permeability updates.</p>
                <p>Accordingly, spatial convergence is treated here as the first numerical proof that the boundary discretization does not merely produce plausible pressure fields, but approaches a mesh-independent solution in a controlled manner.</p>
            </sec>
            <sec id="sec37">
                <title>4.6. Temporal convergence and stability of the time-marching scheme</title>
                <p>Because the present formulation employs transient Green&#x2019;s functions and incremental coefficient updating, temporal accuracy plays a decisive role in overall solution quality. For the adopted backward or semi-implicit time integration, the local truncation error is of first order in time, and therefore one expects
                    <disp-formula id="e107">

                        <mml:math display="block">
                            <mml:mrow>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                <mml:msup>
                                    <mml:mi>p</mml:mi>
                                    <mml:mrow>
                                        <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                        <mml:mi>t</mml:mi>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>p</mml:mi>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>O</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                        <mml:mi>t</mml:mi>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:mi>&#x03be;</mml:mi>
                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                            </mml:mrow>
                            <mml:mo>=</mml:mo>
                            <mml:mi>O</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(107)</label>
</disp-formula>provided that the constitutive updates remain sufficiently smooth.</p>
                <p>A temporal refinement study is performed by computing the solution with decreasing time steps 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                            <mml:mi>t</mml:mi>
                            <mml:mo>,</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                                <mml:mn>2</mml:mn>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                                <mml:mn>4</mml:mn>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>
</inline-formula> and measuring the change in selected outputs such as well pressure, reaction progress near the injector, or pressure-front location. If the method is consistent, the differences between successive temporal approximations should decrease in accordance with the expected order of accuracy.</p>
                <p>Stability is assessed by examining whether the numerical solution remains bounded and physically admissible over long injection periods. In particular, the scheme should satisfy the following qualitative properties:
                    <disp-formula id="e108">

                        <mml:math display="block">
                            <mml:mi>p</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mspace width="0.25em"/>
                            <mml:mtext>remains finite for finite</mml:mtext>
                            <mml:mspace width="0.25em"/>
                            <mml:mi>t</mml:mi>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(108)</label>
</disp-formula>

                    <disp-formula id="e109">

                        <mml:math display="block">
                            <mml:mn>0</mml:mn>
                            <mml:mo>&#x2264;</mml:mo>
                            <mml:mi>&#x03be;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&#x2264;</mml:mo>
                            <mml:mn>1</mml:mn>
                        </mml:math>

                        <label>(109)</label>
</disp-formula>

                    <disp-formula id="e110">

                        <mml:math display="block">
                            <mml:mi>&#x03d5;</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&gt;</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>,</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mi>k</mml:mi>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi mathvariant="bold">x</mml:mi>
                                <mml:mo>,</mml:mo>
                                <mml:mi>t</mml:mi>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>&gt;</mml:mo>
                            <mml:mn>0</mml:mn>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(110)</label>
</disp-formula>
                </p>
                <p>These constraints are not merely physical requirements; they also serve as indicators that the staggered nonlinear updates have not introduced spurious oscillations or instability. In practice, unconditional linear stability of the implicit hydraulic step is an important advantage of the present approach, while the nonlinear reaction update may require adaptive time-step control when permeability evolves rapidly.</p>
                <p>Temporal convergence is equally important in the present reactive problem because time-stepping errors affect not only pressure history but also the subsequent constitutive update of porosity and permeability.</p>
                <p>Together, the spatial and temporal refinement requirements define the second level of validation by showing that the proposed approximation is systematically controllable and not dependent on an arbitrary discretization choice.</p>
            </sec>
            <sec id="sec38">
                <title>4.7. Flux conservation and interface accuracy</title>
                <p>For heterogeneous subdomain problems, one of the most sensitive indicators of numerical accuracy is the correct transmission of hydraulic flux across interfaces. Because the BEM formulation enforces continuity conditions directly at internal boundaries, the discrete solution should satisfy pressure continuity and local flux balance to within numerical quadrature and algebraic solution tolerance.</p>
                <p>For any interface 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msub>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                <mml:mi mathvariant="italic">ij</mml:mi>
                            </mml:msub>
                        </mml:math>
</inline-formula>, the pressure mismatch may be quantified by
                    <disp-formula id="e111">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>E</mml:mi>
                                <mml:mi>p</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:msub>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">&#x2016;</mml:mo>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>i</mml:mi>
                                        </mml:msub>
                                        <mml:mo>&#x2212;</mml:mo>
                                        <mml:msub>
                                            <mml:mi>p</mml:mi>
                                            <mml:mi>j</mml:mi>
                                        </mml:msub>
                                        <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:msub>
                                            <mml:mi>L</mml:mi>
                                            <mml:mn>2</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi mathvariant="italic">ij</mml:mi>
                                            </mml:msub>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:mrow>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo mathvariant="italic">max</mml:mo>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                                <mml:msub>
                                                    <mml:mi>p</mml:mi>
                                                    <mml:mi>i</mml:mi>
                                                </mml:msub>
                                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                            </mml:mrow>
                                            <mml:mrow>
                                                <mml:msub>
                                                    <mml:mi>L</mml:mi>
                                                    <mml:mn>2</mml:mn>
                                                </mml:msub>
                                                <mml:mrow>
                                                    <mml:mo stretchy="true">(</mml:mo>
                                                    <mml:msub>
                                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                        <mml:mi mathvariant="italic">ij</mml:mi>
                                                    </mml:msub>
                                                    <mml:mo stretchy="true">)</mml:mo>
                                                </mml:mrow>
                                            </mml:mrow>
                                        </mml:msub>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>&#x03f5;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(111)</label>
</disp-formula>while the flux imbalance may be measured by
                    <disp-formula id="e112">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>E</mml:mi>
                                <mml:mi>q</mml:mi>
                                <mml:msub>
                                    <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                    <mml:mi mathvariant="italic">ij</mml:mi>
                                </mml:msub>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:msub>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">&#x2016;</mml:mo>
                                        <mml:msub>
                                            <mml:mi>q</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>,</mml:mo>
                                                <mml:mi>i</mml:mi>
                                            </mml:mrow>
                                        </mml:msub>
                                        <mml:mo>+</mml:mo>
                                        <mml:msub>
                                            <mml:mi>q</mml:mi>
                                            <mml:mrow>
                                                <mml:mi>n</mml:mi>
                                                <mml:mo>,</mml:mo>
                                                <mml:mi>j</mml:mi>
                                            </mml:mrow>
                                        </mml:msub>
                                        <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    </mml:mrow>
                                    <mml:mrow>
                                        <mml:msub>
                                            <mml:mi>L</mml:mi>
                                            <mml:mn>2</mml:mn>
                                        </mml:msub>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:msub>
                                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                <mml:mi mathvariant="italic">ij</mml:mi>
                                            </mml:msub>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:mrow>
                                </mml:msub>
                                <mml:mrow>
                                    <mml:mo mathvariant="italic">max</mml:mo>
                                    <mml:mrow>
                                        <mml:mo stretchy="true">(</mml:mo>
                                        <mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                                <mml:msub>
                                                    <mml:mi>q</mml:mi>
                                                    <mml:mrow>
                                                        <mml:mi>n</mml:mi>
                                                        <mml:mo>,</mml:mo>
                                                        <mml:mi>i</mml:mi>
                                                    </mml:mrow>
                                                </mml:msub>
                                                <mml:mo stretchy="true">&#x2016;</mml:mo>
                                            </mml:mrow>
                                            <mml:mrow>
                                                <mml:msub>
                                                    <mml:mi>L</mml:mi>
                                                    <mml:mn>2</mml:mn>
                                                </mml:msub>
                                                <mml:mrow>
                                                    <mml:mo stretchy="true">(</mml:mo>
                                                    <mml:msub>
                                                        <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                                                        <mml:mi mathvariant="italic">ij</mml:mi>
                                                    </mml:msub>
                                                    <mml:mo stretchy="true">)</mml:mo>
                                                </mml:mrow>
                                            </mml:mrow>
                                        </mml:msub>
                                        <mml:mo>,</mml:mo>
                                        <mml:mi>&#x03f5;</mml:mi>
                                        <mml:mo stretchy="true">)</mml:mo>
                                    </mml:mrow>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(112)</label>
</disp-formula>
                </p>
                <p>A valid and accurate assembly procedure should drive both quantities toward zero under mesh refinement. In addition, global mass conservation over the entire computational domain should be checked by verifying that
                    <disp-formula id="e113">

                        <mml:math display="block">
                            <mml:msub>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.1em"/>
                            <mml:mfrac>
                                <mml:mi>&#x2202;</mml:mi>
                                <mml:mrow>
                                    <mml:mi>&#x2202;</mml:mi>
                                    <mml:mi>t</mml:mi>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mi>&#x03d5;</mml:mi>
                                <mml:msub>
                                    <mml:mi>&#x03c1;</mml:mi>
                                    <mml:mi>f</mml:mi>
                                </mml:msub>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mi>d</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mo>+</mml:mo>
                            <mml:msub>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.1em"/>
                            <mml:msub>
                                <mml:mi>&#x03c1;</mml:mi>
                                <mml:mi>f</mml:mi>
                            </mml:msub>
                            <mml:mi mathvariant="bold">v</mml:mi>
                            <mml:mo>&#x00b7;</mml:mo>
                            <mml:mi mathvariant="bold">n</mml:mi>
                            <mml:mi>d</mml:mi>
                            <mml:mi mathvariant="normal">&#x0393;</mml:mi>
                            <mml:mo>&#x2212;</mml:mo>
                            <mml:msub>
                                <mml:mo>&#x222b;</mml:mo>
                                <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            </mml:msub>
                            <mml:mspace width="0.1em"/>
                            <mml:msub>
                                <mml:mi>q</mml:mi>
                                <mml:mi>m</mml:mi>
                            </mml:msub>
                            <mml:mi>d</mml:mi>
                            <mml:mi mathvariant="normal">&#x03a9;</mml:mi>
                            <mml:mspace width="0.5em"/>
                            <mml:mo>&#x2248;</mml:mo>
                            <mml:mspace width="0.5em"/>
                            <mml:mn>0</mml:mn>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(113)</label>
</disp-formula>
                </p>
                <p>Even in the reduced incompressible-density approximation, an analogous storage-plus-flux balance should hold numerically. This global check is particularly valuable in reactive simulations because constitutive changes in porosity may create apparent mass imbalance if implemented inconsistently.</p>
            </sec>
            <sec id="sec39">
                <title>4.8. Accuracy of the singular-source representation</title>
                <p>The injection well is modeled as an internal singular source through the fundamental solution. This treatment is one of the key efficiencies of the proposed BEM framework, but it also requires verification to ensure that near-well pressure behavior is captured accurately.</p>
                <p>The validity of the singular-source representation may be assessed by comparing the computed pressure field near the injection point with:
                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>a known analytical radial solution in a homogeneous medium,</p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>a reference finite element or finite volume solution obtained using local grid refinement,</p>
                        </list-item>
                        <list-item>
                            <label>3.</label>
                            <p>asymptotic near-source behavior.</p>
                        </list-item>
                    </list>
                </p>
                <p>In particular, if the pressure field is evaluated at a sequence of points approaching the well, the numerical solution should reproduce the expected radial singular structure without spurious oscillation. Because BEM embeds the singularity analytically through the Green&#x2019;s function, it is especially well suited to this task. Accurate recovery of near-well pressure gradients is important not only for hydraulic fidelity but also because reaction progress and permeability enhancement are typically strongest in that region.</p>
            </sec>
            <sec id="sec40">
                <title>4.9. Influence of nonlinear permeability evolution on numerical accuracy</title>
                <p>The most demanding aspect of the present formulation is the nonlinear feedback between pressure, dissolution, and permeability. Even when the linearized diffusion problem is solved accurately within a time step, errors in pressure may be propagated into the constitutive update through
                    <disp-formula id="e114">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(114)</label>
</disp-formula>or, in the more general case,

                    <disp-formula id="e115">

                        <mml:math display="block">
                            <mml:msup>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msup>
                            <mml:mo>=</mml:mo>
                            <mml:msub>
                                <mml:mi>k</mml:mi>
                                <mml:mn>0</mml:mn>
                            </mml:msub>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03be;</mml:mi>
                                </mml:msub>
                                <mml:msup>
                                    <mml:mi>&#x03be;</mml:mi>
                                    <mml:mrow>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>exp</mml:mo>
                            <mml:mrow>
                                <mml:mo stretchy="true">(</mml:mo>
                                <mml:mo>&#x2212;</mml:mo>
                                <mml:msub>
                                    <mml:mi>&#x03b2;</mml:mi>
                                    <mml:mi>&#x03c3;</mml:mi>
                                </mml:msub>
                                <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                <mml:msubsup>
                                    <mml:mi>&#x03c3;</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mrow>
                                        <mml:mo>&#x2032;</mml:mo>
                                        <mml:mi>n</mml:mi>
                                        <mml:mo>+</mml:mo>
                                        <mml:mn>1</mml:mn>
                                    </mml:mrow>
                                </mml:msubsup>
                                <mml:mo stretchy="true">)</mml:mo>
                            </mml:mrow>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(115)</label>
</disp-formula>
                </p>
                <p>Because of the exponential dependence, moderate pressure or reaction errors may translate into larger permeability discrepancies over long times. The accuracy of the full coupled solution must therefore be evaluated not only in terms of pressure but also in terms of constitutive quantities.</p>
                <p>A useful nonlinear error indicator is the relative coefficient update
                    <disp-formula id="e116">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>E</mml:mi>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mi>n</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mi>n</mml:mi>
                                            <mml:mo>+</mml:mo>
                                            <mml:mn>1</mml:mn>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>n</mml:mi>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mi>n</mml:mi>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>,</mml:mo>
                        </mml:math>

                        <label>(116)</label>
</disp-formula>together with the residual between successive internal nonlinear iterations,

                    <disp-formula id="e117">

                        <mml:math display="block">
                            <mml:msubsup>
                                <mml:mi>R</mml:mi>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                            <mml:mo>=</mml:mo>
                            <mml:mfrac>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo>+</mml:mo>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo>&#x2212;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                                <mml:mrow>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                    <mml:msup>
                                        <mml:mi>k</mml:mi>
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mi>m</mml:mi>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:msup>
                                    <mml:mo stretchy="true">&#x2016;</mml:mo>
                                </mml:mrow>
                            </mml:mfrac>
                            <mml:mo>.</mml:mo>
                        </mml:math>

                        <label>(117)</label>
</disp-formula>
                </p>
                <p>If 
                    <inline-formula>

                        <mml:math display="inline">
                            <mml:msubsup>
                                <mml:mi>R</mml:mi>
                                <mml:mi>k</mml:mi>
                                <mml:mrow>
                                    <mml:mo stretchy="true">(</mml:mo>
                                    <mml:mi>m</mml:mi>
                                    <mml:mo>+</mml:mo>
                                    <mml:mn>1</mml:mn>
                                    <mml:mo stretchy="true">)</mml:mo>
                                </mml:mrow>
                            </mml:msubsup>
                        </mml:math>
</inline-formula> decreases monotonically and falls below a prescribed tolerance, the staggered update may be regarded as converged for that time step. In practical terms, this provides a direct diagnostic of whether the chosen time increment is sufficiently small for the reactive front dynamics being simulated.</p>
            </sec>
            <sec id="sec41">
                <title>4.10. Comparison with domain-based numerical methods</title>
                <p>An important element of validation is comparison with an established domain discretization technique, such as the Finite Element Method or Finite Difference Method. Such a comparison serves two purposes. First, it provides an external benchmark when analytical solutions are unavailable. Second, it demonstrates that the proposed boundary-only approach reproduces the same physical solution while requiring substantially fewer spatial degrees of freedom for large reservoir domains.</p>
                <p>For a representative heterogeneous injection problem, one may compare:
                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>pressure histories at monitoring points,</p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>pressure contours at selected times,</p>
                        </list-item>
                        <list-item>
                            <label>3.</label>
                            <p>reaction progress distributions,</p>
                        </list-item>
                        <list-item>
                            <label>4.</label>
                            <p>permeability evolution maps,</p>
                        </list-item>
                        <list-item>
                            <label>5.</label>
                            <p>computational cost metrics.</p>
                        </list-item>
                    </list>
                </p>
                <p>If the BEM and a sufficiently refined domain-based method yield close agreement in pressure and reaction fields, then the proposed formulation may be regarded as accurate from an engineering standpoint. Differences, when present, are most likely to appear near strongly localized nonlinear zones, where the treatment of equivalent domain terms becomes decisive. Such comparisons are therefore especially useful for calibrating the internal source representation adopted for the nonlinear residual.</p>
                <p>In the present study, this reference-method comparison is summarized quantitatively in 
                    <xref ref-type="table" rid="T3">
Table 3</xref>, which shows that the proposed BEM reproduces the benchmark pressure response with lower maximum error than the compared finite-difference and finite-element implementations while requiring substantially fewer computational resources.</p>
                <table-wrap id="T1" orientation="portrait" position="float">
                    <label>
Table 1. </label>
                    <caption>
                        <title>Comparison of reaction-induced permeability enhancement with published reference studies.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="bold">Reference study</mml:mtext>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="bold">Injection time</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mtext mathvariant="bold">days</mml:mtext>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Reported permeability enhancement factor</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">BEM prediction</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="bold">Deviation</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo mathvariant="bold" stretchy="true">(</mml:mo>
                                                <mml:mo>\</mml:mo>
                                                <mml:mo mathvariant="bold">%</mml:mo>
                                                <mml:mo mathvariant="bold" stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Golfier et al.
                                    <sup>
                                        <xref ref-type="bibr" rid="ref20">20</xref>
                                    </sup>
                                </td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">10</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.35</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.29</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.6</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Noiriel et al.
                                    <sup>
                                        <xref ref-type="bibr" rid="ref21">21</xref>
                                    </sup>
                                </td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">20</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.80</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.72</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.1</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Luquot and Gouze
                                    <sup>
                                        <xref ref-type="bibr" rid="ref22">22</xref>
                                    </sup>
                                </td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">30</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">5.10</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">5.02</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.6</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T1">
Table 1</xref> compares the permeability enhancement predicted by the proposed BEM model with representative published experimental and numerical studies of carbonate dissolution under CO2 injection conditions. The reported enhancement factors and BEM predictions show close agreement, with small relative differences. The physical meaning of the table is to verify that the reaction-flow coupling used in the formulation produces realistic permeability evolution consistent with established carbonate-dissolution behavior relevant to geological CO2 storage.</p>
                    </table-wrap-foot>
                </table-wrap>
                <table-wrap id="T2" orientation="portrait" position="float">
                    <label>
Table 2. </label>
                    <caption>
                        <title>Principal constants and numerical values used in the calculations of the proposed study.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">Symbol</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Parameter</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Value used</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi>p</mml:mi>
                                                <mml:mn>0</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Initial reservoir pressure</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">10</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>Q</mml:mi>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Injection strength/normalized injection rate</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>&#x03bb;</mml:mi>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Reaction kinetics coefficient</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.05</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>t</mml:mi>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Total simulation time</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0&#x2013;50</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>k</mml:mi>
                                            <mml:mo>/</mml:mo>
                                            <mml:msub>
                                                <mml:mi>k</mml:mi>
                                                <mml:mn>0</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Permeability evolution law</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Exponential</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>D</mml:mi>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Hydraulic diffusivity</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Normalized</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi>&#x03bc;</mml:mi>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Fluid viscosity</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Incorporated into normalized diffusivity</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi>c</mml:mi>
                                                <mml:mi>f</mml:mi>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Fluid compressibility</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Incorporated into normalized diffusivity</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Reservoir type</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Carbonate formation</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Heterogeneous, radially infinite</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Well condition</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Injection mode</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Constant-rate central injector</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T2">
Table 2</xref> summarizes the principal constants and numerical conditions adopted in the numerical calculations. It defines the reference reservoir pressure, normalized injection strength, reaction kinetics coefficient, simulation time interval, permeability evolution law, and the main assumptions used for the carbonate storage model. The physical meaning of the table is to provide the baseline parameter set used to reproduce the pressure-diffusion, reaction-progress, porosity-update, and permeability-evolution results reported in the study.</p>
                    </table-wrap-foot>
                </table-wrap>
                <table-wrap id="T3" orientation="portrait" position="float">
                    <label>
Table 3. </label>
                    <caption>
                        <title>Comparison of numerical accuracy and computational efficiency of the proposed BEM, finite difference, and finite element methods.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">Method</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Spatial discretization</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Maximum pressure error (%)</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">CPU time (s)</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Memory usage (MB)</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>BEM (proposed)</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">320 boundary elements</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.8</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">38</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">210</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>Finite Difference</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">200 &#x00d7; 200 grid</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.6</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">145</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">890</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>Finite Element</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">160,000 elements</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.2</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">192</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1040</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T3">
Table 3</xref> presents a comparative assessment of the proposed Boundary Element Method against conventional finite difference and finite element approaches in terms of solution accuracy and computational cost. The results show that the proposed BEM achieves the lowest maximum pressure error while requiring substantially less CPU time and memory than the corresponding domain-based methods. This improved efficiency is primarily attributable to the boundary-only discretization strategy, which significantly reduces the number of degrees of freedom without compromising numerical accuracy. The physical meaning of the table is that the proposed formulation provides a reliable and computationally economical alternative for large-scale reactive CO2 injection simulations in heterogeneous carbonate reservoirs.</p>
                    </table-wrap-foot>
                </table-wrap>
                <p>This cross-method agreement provides the third level of validation by demonstrating that the proposed boundary-based formulation reproduces the same physical response as established domain-based methods in a representative storage benchmark.</p>
            </sec>
            <sec id="sec42">
                <title>4.11. Error budget and numerical sensitivity of the proposed BEM formulation</title>
                <p>To complement the consistency and benchmark arguments developed in 
                    <xref ref-type="sec" rid="sec36">Sections 4.5</xref>&#x2013;
                    <xref ref-type="sec" rid="sec41">4.10</xref>, it is useful to identify the dominant numerical error sources in the present implementation and to relate them directly to the observed validation results. In the proposed BEM framework, the total numerical error does not arise from a single approximation, but from the combined effect of boundary interpolation, temporal discretization, staggered nonlinear updating, approximation of equivalent domain terms, and quadrature treatment of regular and singular integrals. The relative importance of these contributions depends on the simulation regime. In nonreactive benchmark cases, the error is governed primarily by boundary resolution and singular-source evaluation, whereas in reactive simulations the dominant contribution progressively shifts toward time integration and nonlinear constitutive updating because permeability depends exponentially on reaction progress and pressure. This distinction is consistent with the validation strategy established in 
                    <xref ref-type="sec" rid="sec36">Sections 4.5</xref>&#x2013;
                    <xref ref-type="sec" rid="sec41">4.10</xref> and with the reactive trends observed later in 
                    <xref ref-type="fig" rid="f8">
Figures 8</xref>&#x2013;
                    <xref ref-type="fig" rid="f10">10</xref> and 
                    <xref ref-type="table" rid="T5">
Tables 5</xref>&#x2013;
                    <xref ref-type="table" rid="T6">6</xref>.
                    <fig fig-type="figure" id="f1" orientation="portrait" position="float">
                        <label>
Figure 1. </label>
                        <caption>
                            <title>Conceptual model of reactive CO
                                <sub>2</sub> injection in a heterogeneous carbonate reservoir.</title>
                            <p>
                                <xref ref-type="fig" rid="f1">
Figure 1</xref> presents the physical problem addressed in the study. A CO
                                <sub>2</sub> injection well is located in a heterogeneous carbonate reservoir containing regions of contrasting permeability. Pressure diffuses outward from the well, while CO
                                <sub>2</sub>&#x2013;rock interaction creates a reactive zone in which dissolution modifies pore structure and increases permeability. The physical meaning of the figure is that reservoir behavior is controlled by a coupled feedback loop: injection raises pressure, pressure promotes reaction, reaction alters permeability, and the evolving permeability field changes subsequent flow and injectivity.</p>
                        </caption>
                        <graphic id="gr1" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure1.gif"/>
                    </fig>
                </p>
                <fig fig-type="figure" id="f2" orientation="portrait" position="float">
                    <label>
Figure 2. </label>
                    <caption>
                        <title>Computational workflow of the proposed reactive boundary element formulation.</title>
                        <p>
                            <xref ref-type="fig" rid="f2">
Figure 2</xref> summarizes the numerical solution strategy used in the paper. The workflow starts from reservoir inputs and governing equations, proceeds through transient BEM solution of the pressure field, and then updates reaction progress, porosity, and permeability at each time step. The physical meaning is that the reservoir does not evolve under fixed properties; instead, hydraulic and reactive processes are solved in a stepwise coupled manner so that pressure and material-property changes influence each other throughout the simulation.</p>
                    </caption>
                    <graphic id="gr2" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure2.gif"/>
                </fig>
                <fig fig-type="figure" id="f3" orientation="portrait" position="float">
                    <label>
Figure 3. </label>
                    <caption>
                        <title>Temporal evolution of carbonate dissolution reaction.</title>
                        <p>
                            <xref ref-type="fig" rid="f3">
Figure 3</xref> shows the growth of the reaction progress variable with time and the corresponding decrease in reaction rate. Initially, the reaction proceeds rapidly because the injected CO
                            <sub>2</sub> creates strong disequilibrium, but the rate slows as the system evolves. The physical meaning is that carbonate dissolution is strongest during the early stage of injection and gradually approaches saturation, which is consistent with irreversible but self-limiting reactive behavior.</p>
                    </caption>
                    <graphic id="gr3" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure3.gif"/>
                </fig>
                <fig fig-type="figure" id="f4" orientation="portrait" position="float">
                    <label>
Figure 4. </label>
                    <caption>
                        <title>Reaction-induced permeability enhancement.</title>
                        <p>
                            <xref ref-type="fig" rid="f4">
Figure 4</xref> shows how normalized permeability increases as reaction progress advances for different values of the permeability-growth coefficient. The physical meaning is that dissolution enlarges the pore network and improves hydraulic conductivity, but the strength of this effect depends on how sensitive permeability is to chemical alteration. This relationship is central to the model because it links geochemical change directly to injectivity and pressure evolution.</p>
                    </caption>
                    <graphic id="gr4" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure4.gif"/>
                </fig>
                <fig fig-type="figure" id="f5" orientation="portrait" position="float">
                    <label>
Figure 5. </label>
                    <caption>
                        <title>Schematic heterogeneous reservoir configurations used in the nonreactive benchmark cases.</title>
                        <p>
                            <xref ref-type="fig" rid="f5">
Figure 5</xref> shows the two heterogeneous reservoir layouts used to isolate the effect of permeability architecture under nonreactive conditions. One case contains a high-permeability channel intersecting the injector, while the other contains a low-permeability barrier surrounding the near-well region. The physical meaning is that heterogeneity alone can either facilitate or restrict pressure diffusion, even when no dissolution or permeability evolution is present.</p>
                    </caption>
                    <graphic id="gr5" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure5.gif"/>
                </fig>
                <fig fig-type="figure" id="f6" orientation="portrait" position="float">
                    <label>
Figure 6. </label>
                    <caption>
                        <title>Pressure redistribution in heterogeneous nonreactive reservoirs.</title>
                        <p>
                            <xref ref-type="fig" rid="f6">
Figure 6</xref> presents pressure contours for the two heterogeneous nonreactive cases. In the channel case, pressure propagates preferentially along the conductive pathway, whereas in the barrier case pressure remains concentrated near the well. The physical meaning is that the initial permeability structure controls the spatial pattern of pressure migration and therefore strongly influences early-time injectivity and reservoir pressurization.</p>
                    </caption>
                    <graphic id="gr6" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure6.gif"/>
                </fig>
                <fig fig-type="figure" id="f7" orientation="portrait" position="float">
                    <label>
Figure 7. </label>
                    <caption>
                        <title>Wellbore pressure histories for nonreactive homogeneous and heterogeneous cases.</title>
                        <p>
                            <xref ref-type="fig" rid="f7">
Figure 7</xref> compares the temporal evolution of wellbore pressure buildup for the homogeneous reference case, the high-permeability channel case, and the low-permeability barrier case. The channelized case yields the smallest pressure buildup, while the barrier case yields the largest. These results show that static heterogeneity directly controls pressure dissipation efficiency.</p>
                    </caption>
                    <graphic id="gr7" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure7.gif"/>
                </fig>
                <fig fig-type="figure" id="f8" orientation="portrait" position="float">
                    <label>
Figure 8. </label>
                    <caption>
                        <title>Reactive evolution in a homogeneous carbonate reservoir.</title>
                        <p>
                            <xref ref-type="fig" rid="f8">
Figure 8</xref> shows the spatial distributions of pressure, reaction progress, and normalized permeability in the reactive homogeneous case. A localized reactive halo forms around the injector, where pressure is highest, and dissolution is most intense. The physical meaning is that even in a geologically uniform reservoir, reactive CO
                            <sub>2</sub> injection creates a nonuniform altered zone near the well, and this localized change governs the main hydraulic feedback.</p>
                    </caption>
                    <graphic id="gr8" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure8.gif"/>
                </fig>
                <fig fig-type="figure" id="f9" orientation="portrait" position="float">
                    <label>
Figure 9. </label>
                    <caption>
                        <title>Pressure response in homogeneous nonreactive and reactive cases.</title>
                        <p>
                            <xref ref-type="fig" rid="f9">
Figure 9</xref> compares wellbore pressure buildup in the homogeneous reservoir with and without reactivity. At early time the two cases are similar, but later the reactive case shows lower pressure buildup. The physical meaning is that dissolution-driven permeability enhancement reduces hydraulic resistance near the injector and therefore moderates long-term pressurization.</p>
                    </caption>
                    <graphic id="gr9" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure9.gif"/>
                </fig>
                <fig fig-type="figure" id="f10" orientation="portrait" position="float">
                    <label>
Figure 10. </label>
                    <caption>
                        <title>Injectivity evolution in homogeneous cases.</title>
                        <p>
                            <xref ref-type="fig" rid="f10">
Figure 10</xref> shows the apparent injectivity index for the nonreactive and reactive homogeneous cases. Injectivity increases more strongly in the reactive case as permeability evolves near the well. The physical meaning is that geochemical alteration can improve injection performance over time by making the near-well region more conductive.</p>
                    </caption>
                    <graphic id="gr10" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure10.gif"/>
                </fig>
                <table-wrap id="T4" orientation="portrait" position="float">
                    <label>
Table 4. </label>
                    <caption>
                        <title>Pressure buildup in homogeneous and heterogeneous nonreactive cases.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">Case</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Model</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Structure</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                            <mml:msub>
                                                <mml:mi>p</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>w</mml:mi>
                                                    <mml:mo>,</mml:mo>
                                                    <mml:mo mathvariant="italic">max</mml:mo>
                                                </mml:mrow>
                                            </mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi>MPa</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                            <mml:msub>
                                                <mml:mi>p</mml:mi>
                                                <mml:mi>w</mml:mi>
                                            </mml:msub>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">late</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">MPa</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Change</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mo>\</mml:mo>
                                                <mml:mo>%</mml:mo>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="bold-sans-serif">C</mml:mi>
                                            <mml:mn mathvariant="bold-sans-serif">1</mml:mn>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Nonreactive</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Homogeneous</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.85</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.60</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.0</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="bold-sans-serif">C</mml:mi>
                                            <mml:mn mathvariant="bold-sans-serif">2</mml:mn>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Nonreactive</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">High</mml:mtext>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">channel</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.05</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.82</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">&#x2212;21.7</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <italic toggle="yes">C</italic>3</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Nonreactive</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="sans-serif">Low</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">barrier</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">4.72</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">4.38</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">+21.7</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T4">
Table 4</xref> compares wellbore pressure buildup for the baseline homogeneous reservoir and the two heterogeneous nonreactive cases. It shows that a conductive channel reduces pressurization, whereas a low-permeability barrier increases near-well pressure buildup.</p>
                    </table-wrap-foot>
                </table-wrap>
                <table-wrap id="T5" orientation="portrait" position="float">
                    <label>
Table 5. </label>
                    <caption>
                        <title>Near-well reactive evolution in the homogeneous reservoir.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Time</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">d</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mover accent="true">
                                                    <mml:mi>&#x03be;</mml:mi>
                                                    <mml:mo stretchy="true">&#x00af;</mml:mo>
                                                </mml:mover>
                                                <mml:mi>w</mml:mi>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mover accent="true">
                                                    <mml:mi>&#x03d5;</mml:mi>
                                                    <mml:mo stretchy="true">&#x00af;</mml:mo>
                                                </mml:mover>
                                                <mml:mi>w</mml:mi>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mover accent="false">
                                                <mml:mrow>
                                                    <mml:mi>k</mml:mi>
                                                    <mml:mo>/</mml:mo>
                                                    <mml:msub>
                                                        <mml:mi>k</mml:mi>
                                                        <mml:msub>
                                                            <mml:mn>0</mml:mn>
                                                            <mml:mi>w</mml:mi>
                                                        </mml:msub>
                                                    </mml:msub>
                                                </mml:mrow>
                                                <mml:mo>&#x00af;</mml:mo>
                                            </mml:mover>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Halo radius</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">m</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>10</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.12</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.214</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.18</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">6.5</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>30</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.31</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.233</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.46</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">11.2</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>60</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.55</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.257</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.93</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">16.8</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>120</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.73</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.275</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.40</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">21.5</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T5">
Table 5</xref> summarizes the temporal evolution of reaction progress, porosity, and permeability in the near-well region for the reactive homogeneous case. The results quantify the growth of the reactive halo and the associated improvement in hydraulic conductivity.</p>
                    </table-wrap-foot>
                </table-wrap>
                <table-wrap id="T6" orientation="portrait" position="float">
                    <label>
Table 6. </label>
                    <caption>
                        <title>Pressure reduction and injectivity gain in the homogeneous reactive case.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Time</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">d</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                            <mml:msubsup>
                                                <mml:mi>p</mml:mi>
                                                <mml:mi>w</mml:mi>
                                                <mml:mi mathvariant="italic">NR</mml:mi>
                                            </mml:msubsup>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi>MPa</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                            <mml:msubsup>
                                                <mml:mi>p</mml:mi>
                                                <mml:mi>w</mml:mi>
                                                <mml:mi>R</mml:mi>
                                            </mml:msubsup>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">MPa</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Reduction</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mo>%</mml:mo>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msup>
                                                <mml:mi>J</mml:mi>
                                                <mml:mi mathvariant="italic">NR</mml:mi>
                                            </mml:msup>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:msup>
                                                    <mml:mn>10</mml:mn>
                                                    <mml:mrow>
                                                        <mml:mo>&#x2212;</mml:mo>
                                                        <mml:mn>6</mml:mn>
                                                    </mml:mrow>
                                                </mml:msup>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msup>
                                                <mml:mi>J</mml:mi>
                                                <mml:mi>R</mml:mi>
                                            </mml:msup>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:msup>
                                                    <mml:mn>10</mml:mn>
                                                    <mml:mrow>
                                                        <mml:mo>&#x2212;</mml:mo>
                                                        <mml:mn>6</mml:mn>
                                                    </mml:mrow>
                                                </mml:msup>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Gain</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mo>\</mml:mo>
                                                <mml:mo>%</mml:mo>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>10</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.42</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.39</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.1</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.70</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.72</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.9</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>30</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.37</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.18</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">8.0</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.42</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.46</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">9.5</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>60</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.08</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.66</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">13.6</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.32</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.38</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">18.8</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>120</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.60</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.95</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">18.1</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.28</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.34</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">21.4</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T6">
Table 6</xref> compares the homogeneous nonreactive and reactive cases. The values show that reactive permeability enhancement lowers pressure buildup and increases injectivity as dissolution develops near the injector.</p>
                    </table-wrap-foot>
                </table-wrap>
                <p>4.11.1. Boundary interpolation error</p>
                <p>Boundary interpolation error arises from approximating pressure and normal flux on the external boundary and internal interfaces by constant or low-order element fields. In the present formulation, this source of error is directly linked to the spatial convergence discussion of 
                    <xref ref-type="sec" rid="sec36">Section 4.5</xref>, where the principal discretization error is attributed to the boundary and interface representation rather than to volumetric meshing. The numerical evidence reported in 
                    <xref ref-type="table" rid="T3">
Table 3</xref> shows that, with only 320 boundary elements, the proposed BEM attains a maximum pressure error of 0.8%, compared with 1.6% for the finite-difference model using a 200 &#x00d7; 200 grid and 1.2% for the finite-element model using 160,000 elements. This comparison indicates that the boundary interpolation adopted in the present study is already sufficiently accurate for the benchmark configuration and that the boundary-only discretization does not compromise pressure accuracy.</p>
                <p>In heterogeneous cases, the adequacy of the boundary interpolation is further supported by the absence of spurious field discontinuities across internal interfaces. The manuscript already notes that pressure continuity and flux continuity are preserved across strongly contrasting subdomains without visible jumps in the reconstructed solution, which indicates that interpolation error at interfaces remains controlled even when the permeability architecture is nonuniform.</p>
                <p>4.11.2. Temporal discretization error</p>
                <p>Temporal discretization error arises from approximating the transient convolution integrals and from advancing the reaction and property fields over finite time increments. As discussed in 
                    <xref ref-type="sec" rid="sec37">
Section 4.6</xref>, this contribution is expected to be first order in time for the adopted backward or semi-implicit scheme, and its practical influence becomes more pronounced when the constitutive variables evolve rapidly. In the present simulations, the importance of temporal resolution is reflected by the cumulative separation between the nonreactive and reactive responses in 
                    <xref ref-type="table" rid="T6">
Table 6</xref>: the pressure reduction associated with reactive permeability evolution increases from 2.1% at 10 days to 18.1% at 120 days, while the injectivity gain increases from 2.9% to 21.4% over the same interval. These trends confirm that even modest time-integration errors in the early pressure field may accumulate through the coupled update and become more significant at later times.</p>
                <p>Accordingly, temporal discretization is not merely a secondary implementation detail in the present reactive problem; it directly affects the predicted onset and growth rate of the altered near-well zone. This interpretation is consistent with the monotonic time evolution reported for reaction progress and permeability in 
                    <xref ref-type="table" rid="T5">
Table 5</xref> and with the stability-oriented discussion given in 
                    <xref ref-type="sec" rid="sec37">
Section 4.6</xref>.</p>
                <p>4.11.3. Nonlinear update error</p>
                <p>Nonlinear update error is introduced by freezing storage and permeability within each time increment and by terminating the internal staggered iterations at a finite convergence tolerance. Among all error sources, this is the one most closely tied to the distinctive physics of the present model, because the hydraulic coefficients are not fixed but evolve in response to pressure-activated dissolution. 
                    <xref ref-type="sec" rid="sec40">Section 4.9</xref> already identifies this issue as the most demanding aspect of the formulation, emphasizing that moderate pressure errors may be amplified through the exponential permeability law.</p>
                <p>The magnitude of this sensitivity is visible in the near-well constitutive evolution reported in 
                    <xref ref-type="table" rid="T5">
Table 5</xref>. Over the simulated interval, the reaction progress variable increases from 0.12 at 10 days to 0.73 at 120 days, while the normalized permeability increases from 1.18 to 2.40. Because such a permeability change is produced through the staggered constitutive update, the accuracy of the nonlinear iteration directly controls the accuracy of the long-time pressure and injectivity predictions. This is also evident in 
                    <xref ref-type="table" rid="T6">
Table 6</xref>, where the reactive pressure response departs progressively from the nonreactive baseline as the nonlinear feedback strengthens.</p>
                <p>For this reason, nonlinear update error should be regarded as the principal accuracy limiter in strongly reactive simulations, even when the underlying linear BEM solve is itself highly accurate. This conclusion follows directly from the constitutive trends already documented in 
                    <xref ref-type="sec" rid="sec40">Sections 4.9</xref> and 
                    <xref ref-type="sec" rid="sec51">5.6</xref>.</p>
                <p>4.11.4. Domain-term approximation error</p>
                <p>Domain-term approximation error arises because the present BEM formulation represents nonlinear residuals and porosity-related internal effects through equivalent internal source terms rather than through exact full-domain integration. This approximation is methodologically important because it enables the formulation to remain predominantly boundary-only, but it also introduces a potential source of model discrepancy in regions where the reactive front becomes highly localized. 
                    <xref ref-type="sec" rid="sec41">Section 4.10</xref> already points out that the main differences between the BEM and domain-based reference methods are expected to appear precisely in such strongly localized nonlinear zones.</p>
                <p>The best available quantitative evidence that this approximation remains acceptable is provided by the validation comparisons already incorporated into the manuscript. First, 
                    <xref ref-type="table" rid="T3">
Table 3</xref> shows that the global pressure prediction remains highly accurate despite the reduced domain treatment, with the BEM giving a 
                    <bold>0.8%</bold> maximum pressure error while remaining markedly cheaper computationally than the finite-difference and finite-element alternatives. Second, 
                    <xref ref-type="table" rid="T1">
Table 1</xref> reports small deviations between the BEM permeability predictions and published carbonate-dissolution reference studies, with reported relative differences of 2.6%, 2.1%, and 1.6% for the three comparison cases. Taken together, these results suggest that the adopted equivalent-source approximation is sufficiently accurate for the class of reactive CO
                    <sub>2</sub> injection problems considered here, although it is likely to become more critical in simulations involving sharper fronts or stronger local channelization.</p>
                <p>4.11.5. Quadrature and singular-integration error</p>
                <p>Quadrature and singular-integration error arises during evaluation of regular, near-singular, and singular boundary integrals, especially in the vicinity of the injection well and at closely spaced interfaces. This source of error is particularly relevant because the present method represents the well analytically as an internal singular source, so accurate integration is essential to recover the correct near-well pressure gradient. 
                    <xref ref-type="sec" rid="sec39">Section 4.8</xref> explicitly identifies the singular-source treatment as one of the key efficiencies of the formulation and emphasizes that near-source behavior must be captured without spurious oscillation.</p>
                <p>The quality of the present singular treatment is supported indirectly by two results already reported in the manuscript. In the nonreactive benchmark case, the pressure field remains smooth and physically admissible while reproducing the expected radial diffusion behavior near the injector. In addition, 
                    <xref ref-type="table" rid="T3">
Table 3</xref> shows that the proposed BEM achieves the lowest maximum pressure error among the three compared methods, which would not be possible if singular or near-singular integration errors were dominant in the implementation. The heterogeneous case studies provide further support, since interface transmission is reported to occur without spurious jumps in the reconstructed field.</p>
                <p>4.11.6. Relative importance of the error sources</p>
                <p>For the present implementation, the error sources do not contribute equally. In the baseline nonreactive benchmarks, the dominant contributions are boundary interpolation and singular-integration accuracy, whereas the favorable results in 
                    <xref ref-type="table" rid="T3">
Table 3</xref> indicate that both are already well controlled at the adopted discretization level. In contrast, once reactive coupling is activated, the dominant error contribution shifts toward the constitutive side of the problem. The progressive permeability increase reported in 
                    <xref ref-type="table" rid="T5">
Table 5</xref> and the growing pressure and injectivity separation reported in 
                    <xref ref-type="table" rid="T6">
Table 6</xref> show that nonlinear update error is the most critical source in the present formulation, followed by temporal discretization error, then domain-term approximation error, while boundary interpolation and quadrature/singular-integration errors are secondary for the benchmark settings considered here. This ranking is consistent with the formulation itself: the BEM operator is accurate and efficient for the linearized diffusion step, but the strongest numerical sensitivity enters through time-dependent reactive property evolution.</p>
            </sec>
            <sec id="sec43">
                <title>4.12. Practical validation criteria for the present study</title>
                <p>In the context of the present paper, the proposed BEM formulation is considered valid and accurate when the following criteria are simultaneously satisfied:
                    <list list-type="roman-lower">
                        <list-item>
                            <label>(i)</label>
                            <p>recovery of classical transient diffusion solutions in nonreactive limits,</p>
                        </list-item>
                        <list-item>
                            <label>(ii)</label>
                            <p>monotonic convergence under spatial and temporal refinement,</p>
                        </list-item>
                        <list-item>
                            <label>(iii)</label>
                            <p>small interface pressure mismatch and flux imbalance,</p>
                        </list-item>
                        <list-item>
                            <label>(iv)</label>
                            <p>preservation of physical admissibility 
                                <inline-formula>

                                    <mml:math display="inline">
                                        <mml:mrow>
                                            <mml:mo stretchy="true">(</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo>&#x2264;</mml:mo>
                                            <mml:mi>&#x03be;</mml:mi>
                                            <mml:mo>&#x2264;</mml:mo>
                                            <mml:mn>1</mml:mn>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>&#x03d5;</mml:mi>
                                            <mml:mo>&gt;</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo>,</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mo>&gt;</mml:mo>
                                            <mml:mn>0</mml:mn>
                                            <mml:mo stretchy="true">)</mml:mo>
                                        </mml:mrow>
                                    </mml:math>
</inline-formula>,</p>
                        </list-item>
                        <list-item>
                            <label>(v)</label>
                            <p>agreement with an independent reference method for representative reactive cases.</p>
                        </list-item>
                    </list>
                </p>
                <p>These criteria collectively address both the mathematical and engineering dimensions of validity. They ensure that the method is not only formally derived from the governing equations, but also capable of delivering quantitatively reliable predictions for injection-induced pressure buildup and permeability evolution in heterogeneous carbonate formations.</p>
                <p>The fourth level of validation addresses the reactive component of the model, since storage-relevant predictive value depends not only on hydraulic accuracy but also on whether reaction-induced permeability evolution remains physically credible.</p>
                <p>For this reason, 
                    <xref ref-type="table" rid="T1">
Table 1</xref> compares the predicted permeability enhancement with representative published carbonate-dissolution studies and serves as the literature-based reactive validation step of the present framework.</p>
                <p>The benchmark comparisons, interface-consistency observations, constitutive trends, and cross-method agreement presented in 
                    <xref ref-type="table" rid="T1">
Tables 1</xref> and 
                    <xref ref-type="table" rid="T3">3</xref> and in Sections 
                    <xref ref-type="sec" rid="sec36">4.5</xref>&#x2013;
                    <xref ref-type="sec" rid="sec42">4.11</xref> indicate that these criteria are satisfied to a level sufficient for the present reduced reactive-flow implementation.</p>
                <p>Agreement with these published trends provides the fourth level of validation by showing that the reactive constitutive response of the model is consistent with established carbonate-dissolution behavior relevant to CO
                    <sub>2</sub> storage.</p>
            </sec>
            <sec id="sec44">
                <title>4.13. Concluding assessment of validity and accuracy</title>
                <p>The preceding analysis establishes the validity and numerical reliability of the proposed formulation through four complementary levels of evidence: benchmark recovery, convergence requirements, agreement with independent reference methods, and literature-based validation of reactive permeability evolution. At the continuous level, the method follows rigorously from the time-dependent Green&#x2019;s-function representation of the incrementally linearized diffusion problem. At the discrete level, accuracy is controlled by boundary refinement, time-step selection, interface enforcement, and nonlinear update tolerance. The formulation correctly recovers classical nonreactive limits, accommodates heterogeneous subdomains through exact interface conditions, and incorporates evolving permeability through a consistent staggered update strategy.</p>
                <p>Accordingly, the proposed method provides a reliable computational framework for the simulation of reactive CO
                    <sub>2</sub> injection in carbonate reservoirs, provided that the benchmark checks and convergence criteria outlined above are satisfied in implementation. This establishes a firm foundation for the numerical experiments presented in the following section, where the formulation is applied to representative heterogeneous storage scenarios in order to examine pressure diffusion, reaction-induced permeability enhancement, and their implications for storage performance.</p>
                <p>Taken together, the results of this section demonstrate that the proposed formulation satisfies the main requirements of a reliable storage-performance model for reactive CO
                    <sub>2</sub> injection. It recovers the correct limiting benchmark behavior, admits systematic spatial and temporal refinement, agrees with independent reference methods, and reproduces reactive permeability trends consistent with published carbonate-dissolution studies. The formulation can therefore be considered sufficiently validated for the class of heterogeneous reactive storage problems addressed in this work.</p>
            </sec>
        </sec>
        <sec id="sec45">
            <title>5. Numerical Examples and Discussion</title>
            <p>The objective of this section is to evaluate the predictive performance of the proposed Boundary Element formulation for transient CO
                <sub>2</sub> injection in reactive, heterogeneous carbonate reservoirs and to interpret the resulting hydro-reactive feedback in terms of pressure buildup, permeability evolution, injectivity, and storage behavior. Building on the mathematical formulation of 
                <xref ref-type="sec" rid="sec6">Sections 2</xref> and 
                <xref ref-type="sec" rid="sec18">3</xref> and the validation framework established in 
                <xref ref-type="sec" rid="sec31">Section 4</xref>, the numerical program is organized to address four complementary questions: how the model reproduces the classical diffusion response in the nonreactive limit, how static heterogeneity alone redistributes pressure, how dissolution-driven property evolution alters the flow field under sustained injection, and how the main response measures vary with the governing reaction and heterogeneity parameters.</p>
            <p>The physical and numerical trends identified in the benchmark pressure histories of 
                <xref ref-type="fig" rid="f1">
Figures 1</xref> and 
                <xref ref-type="fig" rid="f2">2</xref> and the constitutive evolution shown in 
                <xref ref-type="fig" rid="f3">
Figures 3</xref> and 
                <xref ref-type="fig" rid="f4">4</xref> provide the conceptual basis for the more advanced case studies presented below. The computational efficiency demonstrated in 
                <xref ref-type="table" rid="T3">
Table 3</xref> further motivates the use of the proposed BEM formulation for the extended parametric analyses reported in this section.</p>
            <sec id="sec46">
                <title>5.1. Computational model and reservoir configuration</title>
                <p>All numerical examples are based on a two-dimensional horizontal carbonate reservoir containing a centrally located injection well represented analytically as an internal singular source. This representation preserves the principal advantage of the BEM, namely boundary-only discretization, while retaining correct near-well pressure behavior. The reservoir is assumed to be fully saturated and laterally extensive enough that the external boundary does not dominate the early-time local response. The initial state is defined by a uniform reference pressure, while the reservoir may be homogeneous or partitioned into multiple subregions with distinct initial permeability values depending on the scenario considered. In the reduced implementation used here, the governing model consists of the transient hydraulic diffusion equation coupled to the pressure-activated reaction law and the constitutive update laws for porosity and permeability. The parameter set adopted for the simulations is consistent with the physically realistic assumptions summarized before 
                    <xref ref-type="fig" rid="f1">
Figure 1</xref>, including the moderate kinetic rate, the finite simulation horizon, and the exponential permeability-growth law appropriate for carbonate dissolution.</p>
                <p>For most examples, a far-field pressure condition is imposed on the outer boundary in order to approximate hydraulic communication with an undisturbed surrounding formation, although alternative no-flow segments are introduced in selected cases to assess confinement effects. The monitoring strategy adopted in the present section is directly connected to the earlier response metrics illustrated in 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>&#x2013;
                    <xref ref-type="fig" rid="f5">5</xref>, where pressure evolution at the injection point, delayed pressure response at a distant observation point, reaction progress, permeability enhancement, and radial pressure distribution were first established as the key physical indicators of model behavior. These earlier figures therefore serve not merely as preliminary illustrations, but as reference diagnostics for interpreting the more complex scenarios considered below.</p>
            </sec>
            <sec id="sec47">
                <title>5.2. Discretization strategy and numerical implementation</title>
                <p>The external boundary of the reservoir and all internal material interfaces are discretized using constant boundary elements, and the transient response is obtained through the implicit time-marching procedure derived in 
                    <xref ref-type="sec" rid="sec18">Section 3</xref>. At each time step, the BEM matrices are assembled using the current subdomain diffusivities, the boundary pressure and flux are solved, the interior pressure field is reconstructed at selected monitoring points, the reaction progress variable is updated, and the porosity and permeability are then revised through the constitutive laws. When nonlinear coupling becomes pronounced, a small number of internal corrective iterations is performed within the same time increment until the coefficient update satisfies the prescribed convergence criterion. This implementation follows the staggered update framework described in the draft and preserves the analytical structure of the boundary-integral problem while accommodating time-dependent hydraulic properties.</p>
                <p>Unless otherwise stated, the baseline simulations reported below use the boundary discretization and time-stepping configuration associated with the benchmark setting summarized in 
                    <xref ref-type="table" rid="T3">
Table 3</xref>.</p>
                <p>The robustness of this discretization strategy is already foreshadowed by the smooth pressure traces shown in 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref> and 
                    <xref ref-type="fig" rid="f2">2</xref> and by the monotonic constitutive evolution reported in 
                    <xref ref-type="fig" rid="f3">
Figures 3</xref> and 
                    <xref ref-type="fig" rid="f4">4</xref>. Moreover, the favorable comparison with finite difference and finite element methods in 
                    <xref ref-type="table" rid="T3">
Table 3</xref> indicates that the proposed BEM achieves the required level of accuracy with substantially fewer unknowns and a markedly lower computational cost. The same numerical framework is therefore adopted consistently in all subsequent case studies and sensitivity analyses.</p>
            </sec>
            <sec id="sec48">
                <title>5.3. Definition of response indicators</title>
                <p>To facilitate comparison between scenarios, four response measures are used throughout this section. The first is the wellbore pressure buildup, defined as the pressure increment at or near the injector relative to the initial state; this quantity provides the most direct indicator of injectivity limitation and pressurization risk. The second is the reaction-zone extent, defined as the spatial region in which the reaction progress exceeds a prescribed threshold; its corresponding area is used as a measure of the growth of the chemically altered zone. The third is the mean permeability enhancement, evaluated either globally or within a near-well subregion, and used to quantify the hydraulic amplification produced by dissolution. The fourth is the apparent injectivity index, defined as the ratio of injection rate to wellbore pressure buildup, which measures the degree to which local hydraulic performance improves during sustained injection. These indicators are consistent with the validation trends established in 
                    <xref ref-type="table" rid="T1">
Tables 1</xref> and 
                    <xref ref-type="table" rid="T3">3</xref> and with the performance comparisons later reported in 
                    <xref ref-type="table" rid="T4">
Tables 4</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref>.</p>
                <table-wrap id="T7" orientation="portrait" position="float">
                    <label>
Table 7. </label>
                    <caption>
                        <title>Initial subdomain properties for the reactive heterogeneous reservoir.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">Zone</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Interpretation</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold-italic">k</mml:mi>
                                                <mml:mrow>
                                                    <mml:mn>0</mml:mn>
                                                    <mml:mo>,</mml:mo>
                                                    <mml:mi mathvariant="bold-italic">i</mml:mi>
                                                </mml:mrow>
                                            </mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:msup>
                                                    <mml:mi mathvariant="bold">m</mml:mi>
                                                    <mml:mn>2</mml:mn>
                                                </mml:msup>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi>&#x03d5;</mml:mi>
                                                <mml:mrow>
                                                    <mml:mn>0</mml:mn>
                                                    <mml:mo>,</mml:mo>
                                                    <mml:mi mathvariant="bold-italic">i</mml:mi>
                                                </mml:mrow>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi>&#x03b2;</mml:mi>
                                                <mml:mrow>
                                                    <mml:mi>&#x03be;</mml:mi>
                                                    <mml:mo>,</mml:mo>
                                                    <mml:mi mathvariant="bold-italic">i</mml:mi>
                                                </mml:mrow>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">Role</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold">&#x03a9;</mml:mi>
                                                <mml:mn mathvariant="bold">1</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">High</mml:mtext>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">band</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mn>2.5</mml:mn>
                                            <mml:mo>&#x00d7;</mml:mo>
                                            <mml:msup>
                                                <mml:mn>10</mml:mn>
                                                <mml:mrow>
                                                    <mml:mo>&#x2212;</mml:mo>
                                                    <mml:mn>13</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.24</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.90</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Conductive path</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold">&#x03a9;</mml:mi>
                                                <mml:mn mathvariant="bold">2</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Near</mml:mtext>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mtext mathvariant="sans-serif">well</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mi mathvariant="sans-serif">low</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">zone</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mn>7.5</mml:mn>
                                            <mml:mo>&#x00d7;</mml:mo>
                                            <mml:msup>
                                                <mml:mn>10</mml:mn>
                                                <mml:mrow>
                                                    <mml:mo>&#x2212;</mml:mo>
                                                    <mml:mn>14</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.19</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.25</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Pressure buildup</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold">&#x03a9;</mml:mi>
                                                <mml:mn mathvariant="bold">3</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Backaround matrix</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mn>1.4</mml:mn>
                                            <mml:mo>&#x00d7;</mml:mo>
                                            <mml:msup>
                                                <mml:mn>10</mml:mn>
                                                <mml:mrow>
                                                    <mml:mo>&#x2212;</mml:mo>
                                                    <mml:mn>13</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.21</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.00</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Base response</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold">&#x03a9;</mml:mi>
                                                <mml:mn mathvariant="bold">4</mml:mn>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="sans-serif">Low</mml:mi>
                                            <mml:mo>&#x2212;</mml:mo>
                                            <mml:mi>k</mml:mi>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mtext mathvariant="sans-serif">facies block</mml:mtext>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mn>5.0</mml:mn>
                                            <mml:mo>&#x00d7;</mml:mo>
                                            <mml:msup>
                                                <mml:mn>10</mml:mn>
                                                <mml:mrow>
                                                    <mml:mo>&#x2212;</mml:mo>
                                                    <mml:mn>14</mml:mn>
                                                </mml:mrow>
                                            </mml:msup>
                                        </mml:math>
</inline-formula>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.18</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.85</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">Local restriction</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T7">
Table 7</xref> defines the initial heterogeneous reservoir architecture used in the reactive simulation. The subdomain contrasts determine early pressure redistribution and influence where reaction-driven permeability enhancement becomes strongest.</p>
                    </table-wrap-foot>
                </table-wrap>
                <table-wrap id="T8" orientation="portrait" position="float">
                    <label>
Table 8. </label>
                    <caption>
                        <title>Performance indicators for the reactive heterogeneous reservoir.</title>
                    </caption>
                    <table content-type="article-table" frame="hsides">
                        <thead>
                            <tr>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mtext mathvariant="sans-serif">Time</mml:mtext>
                                            <mml:mspace width="0.25em"/>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="sans-serif">d</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="normal">&#x0394;</mml:mi>
                                            <mml:msub>
                                                <mml:mi mathvariant="bold-italic">p</mml:mi>
                                                <mml:mi>w</mml:mi>
                                            </mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="bold">MPa</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:mi mathvariant="bold-italic">J</mml:mi>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:mi mathvariant="bold-italic">t</mml:mi>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:msup>
                                                    <mml:mn>10</mml:mn>
                                                    <mml:mrow>
                                                        <mml:mo>&#x2212;</mml:mo>
                                                        <mml:mn>6</mml:mn>
                                                    </mml:mrow>
                                                </mml:msup>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mi mathvariant="bold-italic">A</mml:mi>
                                                <mml:mi>&#x03be;</mml:mi>
                                            </mml:msub>
                                            <mml:mrow>
                                                <mml:mo stretchy="true">(</mml:mo>
                                                <mml:msup>
                                                    <mml:mi mathvariant="bold">m</mml:mi>
                                                    <mml:mn>2</mml:mn>
                                                </mml:msup>
                                                <mml:mo stretchy="true">)</mml:mo>
                                            </mml:mrow>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mover accent="true">
                                                    <mml:mi mathvariant="bold-italic">k</mml:mi>
                                                    <mml:mo stretchy="true">&#x00af;</mml:mo>
                                                </mml:mover>
                                                <mml:mi mathvariant="bold-italic">r</mml:mi>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                                <th align="left" colspan="1" rowspan="1" valign="top">

                                    <inline-formula>

                                        <mml:math display="inline">
                                            <mml:msub>
                                                <mml:mover accent="true">
                                                    <mml:mi mathvariant="bold-italic">k</mml:mi>
                                                    <mml:mo stretchy="true">&#x00af;</mml:mo>
                                                </mml:mover>
                                                <mml:mrow>
                                                    <mml:mi mathvariant="bold-italic">r</mml:mi>
                                                    <mml:mo>,</mml:mo>
                                                    <mml:mi mathvariant="bold-italic">w</mml:mi>
                                                </mml:mrow>
                                            </mml:msub>
                                        </mml:math>
</inline-formula>
</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>10</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.58</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.63</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">42</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.05</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.22</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>30</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.61</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.38</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">96</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.14</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.57</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>60</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.12</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.32</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">158</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.28</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.04</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="1" rowspan="1" valign="middle">
                                    <bold>120</bold>
</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">3.36</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">0.30</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">231</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">1.41</td>
                                <td align="left" colspan="1" rowspan="1" valign="middle">2.63</td>
                            </tr>
                        </tbody>
                    </table>
                    <table-wrap-foot>
                        <p>
                            <xref ref-type="table" rid="T8">
Table 8</xref> summarizes the main performance indicators for the reactive heterogeneous reservoir. As the altered zone expands, permeability increases and injectivity improves, while long-time pressure buildup reflects the combined effect of heterogeneity and reactive evolution.</p>
                    </table-wrap-foot>
                </table-wrap>
            </sec>
            <sec id="sec49">
                <title>5.4. Example 1: Baseline nonreactive homogeneous reservoir</title>
                <p>The first example considers a homogeneous, nonreactive reservoir and serves as the reference case for the entire numerical study. The initial permeability and porosity are spatially uniform, and the reactive contribution is suppressed so that the problem reduces to the classical transient diffusion equation with constant diffusivity. Under these conditions, the numerical solution provides a direct test of the transient BEM implementation and establishes the baseline against which the effects of heterogeneity and reaction can be measured.</p>
                <p>The resulting pressure response exhibits the expected radially symmetric diffusion behavior centered on the injection well. The near-well pressure increase follows the monotonic logarithmic-type trend shown in 
                    <xref ref-type="fig" rid="f1">
Figure 1</xref>, confirming correct representation of point-source injection and transient pressure buildup. At a more distant observation point, the delayed arrival of the diffusion front is consistent with the response displayed in 
                    <xref ref-type="fig" rid="f2">
Figure 2</xref>. The spatial pressure field remains smooth and physically admissible, and the radial pressure decay at a representative later time is consistent with the profile shown in 
                    <xref ref-type="fig" rid="f5">
Figure 5</xref>. Together, 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>, 
                    <xref ref-type="fig" rid="f2">2</xref>, and 
                    <xref ref-type="fig" rid="f5">5</xref> confirm that the nonreactive solution captures the correct early-time near-well buildup, delayed far-field propagation, and spatial decay of pressure. The computational efficiency of the BEM in this baseline case is summarized in 
                    <xref ref-type="table" rid="T3">
Table 3</xref>, which shows that the method achieves accuracy comparable to or better than finite difference and finite element reference models at substantially lower computational cost.</p>
            </sec>
            <sec id="sec50">
                <title>5.5. Example 2: Nonreactive heterogeneous reservoir</title>
                <p>The second example introduces geological heterogeneity while keeping the system nonreactive so that the role of the initial permeability architecture can be isolated. The reservoir is partitioned into multiple subregions with distinct permeability values, but the reaction variable remains inactive, and the permeability field does not evolve in time. Two representative configurations are considered: a conductive channel intersecting the injector and a low-permeability barrier or annular damaged zone surrounding the near-well region. These subdomain arrangements correspond to the heterogeneous layouts summarized in 
                    <xref ref-type="table" rid="T4">
Table 4</xref>.</p>
                <p>The heterogeneous pressure fields show a strong departure from the radial symmetry observed in the baseline case. In the channelized configuration, pressure propagates preferentially along the more conductive path, producing elongated contours and a reduced wellbore pressure buildup; this type of behavior is represented in 
                    <xref ref-type="fig" rid="f6">
Figure 6a</xref>. In contrast, when the injector is partially enclosed by a low-permeability barrier, the pressure field becomes more localized, gradients steepen near the interfaces, and the wellbore pressure rises more rapidly, as shown schematically in 
                    <xref ref-type="fig" rid="f6">
Figure 6b</xref>. The corresponding pressure histories are compared in 
                    <xref ref-type="fig" rid="f7">
Figure 7</xref>, which demonstrates that the channelized case yields the smallest pressurization, whereas the barrier-controlled case produces the largest buildup. The associated quantitative differences in pressure response and subdomain behavior are summarized in 
                    <xref ref-type="table" rid="T4">
Table 4</xref>.</p>
                <p>This example also verifies the quality of the subdomain BEM assembly. Pressure continuity and flux continuity are preserved across the internal interfaces without spurious jumps in the reconstructed field, confirming that the interface treatment remains accurate under strong permeability contrast. More importantly, the results establish that static heterogeneity alone can substantially alter pressure migration and injection-induced pressurization, even before reactive alteration becomes active.</p>
            </sec>
            <sec id="sec51">
                <title>5.6. Example 3: Reactive homogeneous reservoir</title>
                <p>The third example activates the reaction model in an initially homogeneous reservoir in order to isolate the effect of dissolution-driven property evolution. The initial permeability remains spatially uniform, but the reaction progress variable is now allowed to evolve according to the pressure-activated kinetic law. At early times, the solution remains close to the nonreactive baseline because the reaction progress is still small, and the hydraulic coefficients have not yet changed appreciably. As injection continues, however, the elevated near-well pressure activates dissolution, causing the reaction progress variable to increase, followed by local porosity enlargement and permeability enhancement.</p>
                <p>The temporal evolution of the reaction variable is represented by 
                    <xref ref-type="fig" rid="f3">
Figure 3</xref>, which shows rapid early-time growth followed by asymptotic saturation, while 
                    <xref ref-type="fig" rid="f4">
Figure 4</xref> shows the corresponding monotonic increase in normalized permeability. The coupled spatial distributions of pressure, reaction progress, and normalized permeability in the reactive homogeneous case are illustrated in 
                    <xref ref-type="fig" rid="f8">
Figure 8</xref>, and the near-well average values of these quantities are summarized in 
                    <xref ref-type="table" rid="T5">
Table 5</xref>. A key feature of this case is the emergence of a reactive halo around the injector, within which the reaction proceeds most rapidly and the permeability grows most strongly. As a consequence, the pressure-history curve departs progressively from the nonreactive baseline, as demonstrated in 
                    <xref ref-type="fig" rid="f9">
Figure 9</xref>. The associated increase in apparent injectivity is shown in 
                    <xref ref-type="fig" rid="f10">
Figure 10</xref>, while the quantitative changes in wellbore pressure buildup and injectivity are reported in 
                    <xref ref-type="table" rid="T6">
Table 6</xref>.</p>
                <p>These results demonstrate that dissolution does not merely add a chemical correction to a hydraulic problem; rather, it modifies the near-well hydraulic architecture in a dynamically coupled manner. Pressure buildup accelerates reaction, reaction increases permeability, and the enhanced permeability in turn moderates subsequent pressure growth. This pressure&#x2013;reaction&#x2013;permeability feedback is one of the central mechanisms captured by the present formulation.</p>
            </sec>
            <sec id="sec52">
                <title>5.7. Example 4: Reactive heterogeneous carbonate reservoir</title>
                <p>The fourth example combines geological heterogeneity and reactive dissolution and therefore represents the most realistic scenario considered in the present study. The initial permeability is piecewise heterogeneous, and the spatially variable reaction field modifies that architecture progressively as injection proceeds. The heterogeneous reservoir configuration and the corresponding material parameters are summarized in 
                    <xref ref-type="table" rid="T7">
Table 7</xref>, while the initial geometric layout is represented in 
                    <xref ref-type="fig" rid="f11">
Figure 11</xref>.</p>
                <fig fig-type="figure" id="f11" orientation="portrait" position="float">
                    <label>
Figure 11. </label>
                    <caption>
                        <title>Heterogeneous carbonate reservoir used in the reactive case.</title>
                        <p>
                            <xref ref-type="fig" rid="f11">
Figure 11</xref> presents the representative heterogeneous reservoir geometry used in the reactive simulations, including conductive and restrictive subregions and the reactive near-well zone. The physical meaning is that realistic carbonate storage formations are spatially nonuniform, and this initial structure determines where pressure accumulates and where reactive alteration is most likely to develop.</p>
                    </caption>
                    <graphic id="gr11" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure11.gif"/>
                </fig>
                <p>At early times, the pressure response is governed mainly by the initial permeability field: pressure diffuses rapidly through conductive subregions and remains concentrated near restrictive zones. This asymmetry is evident in the early-time pressure contours of 
                    <xref ref-type="fig" rid="f12">
Figure 12a</xref>. As injection continues, however, the reaction front develops nonuniformly, producing spatially variable permeability enhancement, as illustrated in 
                    <xref ref-type="fig" rid="f12">
Figures 12b</xref> and 
                    <xref ref-type="fig" rid="f12">12c</xref>. The wellbore pressure history for the reactive heterogeneous case, compared with the nonreactive heterogeneous and reactive homogeneous responses, is presented in 
                    <xref ref-type="fig" rid="f13">
Figure 13</xref>. In some subregions, reaction-induced permeability growth partially offsets the effect of an initially restrictive permeability distribution and reduces the long-time pressure buildup. In other regions, pre-existing conductive pathways become even more dominant as dissolution further amplifies transmissivity. The evolution of the apparent injectivity index and altered-zone extent is shown in 
                    <xref ref-type="fig" rid="f14">
Figure 14</xref>, while the principal performance measures are summarized in 
                    <xref ref-type="table" rid="T8">
Table 8</xref>.</p>
                <fig fig-type="figure" id="f12" orientation="portrait" position="float">
                    <label>
Figure 12. </label>
                    <caption>
                        <title>Reactive evolution in a heterogeneous carbonate reservoir.</title>
                        <p>
                            <xref ref-type="fig" rid="f12">
Figure 12</xref> shows the spatial distributions of pressure, reaction progress, and normalized permeability in the reactive heterogeneous case. The altered zone is asymmetric because the initial facies architecture redistributes pressure and therefore controls where dissolution is strongest. The physical meaning is that heterogeneity and reaction do not act independently; instead, the initial hydraulic structure guides the later pattern of geochemical modification.</p>
                    </caption>
                    <graphic id="gr12" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure12.gif"/>
                </fig>
                <fig fig-type="figure" id="f13" orientation="portrait" position="float">
                    <label>
Figure 13. </label>
                    <caption>
                        <title>Pressure histories for representative storage scenarios.</title>
                        <p>
                            <xref ref-type="fig" rid="f13">
Figure 13</xref> compares wellbore pressure buildup for the nonreactive heterogeneous, reactive homogeneous, and reactive heterogeneous cases. The differences between the curves show how both heterogeneity and reactive permeability evolution influence long-term pressurization. The physical meaning is that storage performance depends on the combined effect of geological structure and dynamic property change, not on either one alone.</p>
                    </caption>
                    <graphic id="gr13" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure13.gif"/>
                </fig>
                <fig fig-type="figure" id="f14" orientation="portrait" position="float">
                    <label>
Figure 14. </label>
                    <caption>
                        <title>Performance indicators for the reactive heterogeneous reservoir.</title>
                        <p>
                            <xref ref-type="fig" rid="f14">
Figure 14</xref> shows the evolution of the apparent injectivity index and the altered-zone extent in the reactive heterogeneous case. As the reactive zone expands, injectivity improves because permeability increases in hydraulically important regions near the injector. The physical meaning is that the growth of the chemically altered zone is directly tied to operational storage performance, especially pressure management and injection efficiency.</p>
                    </caption>
                    <graphic id="gr14" orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/201760/e7f3f7bc-b126-41d1-9164-4906ea2d26f3_figure14.gif"/>
                </fig>
                <p>This example makes clear that reactive flow in heterogeneous carbonate reservoirs is strongly path dependent. The initial facies structure controls the early pressure field, the pressure field determines where reaction proceeds most actively, and the reaction then redistributes permeability, thereby modifying subsequent flow. The proposed BEM formulation resolves this sequence naturally through subdomain decomposition and time-stepwise coefficient updating, without requiring full-domain remeshing.</p>
            </sec>
            <sec id="sec53">
                <title>5.8. Sensitivity study I: effect of reaction-rate coefficient</title>
                <p>The first parametric study examines the influence of the kinetic reaction-rate coefficient while keeping all other parameters fixed. Larger values of the kinetic coefficient lead to faster growth of the reaction progress variable at a given pressure level and therefore accelerate the onset of permeability enhancement. The resulting trends are consistent with the temporal behavior of the reaction variable shown in 
                    <xref ref-type="fig" rid="f3">
Figure 3</xref> and with the resulting permeability amplification shown in 
                    <xref ref-type="fig" rid="f4">
Figure 4</xref>. In practical terms, increasing the reaction rate causes the system to depart earlier from the nonreactive pressure trajectory, reduces the slope of the pressure-history curve sooner, and expands the altered zone more rapidly. These trends are reflected most clearly in the comparative pressure histories of 
                    <xref ref-type="fig" rid="f9">
Figure 9</xref> and in the injectivity trends of 
                    <xref ref-type="fig" rid="f10">
Figure 10</xref>, while the associated numerical values are consistent with 
                    <xref ref-type="table" rid="T5">
Tables 5</xref> and 
                    <xref ref-type="table" rid="T6">6</xref>.</p>
                <p>However, the simulations also indicate that the influence of the reaction-rate coefficient is not indefinite. Because the adopted reaction law includes a saturation factor, the dissolution process gradually slows as the reaction progress approaches its upper limit. The kinetic coefficient therefore primarily controls the timescale of hydraulic alteration rather than changing the fundamental qualitative nature of the long-time response.</p>
            </sec>
            <sec id="sec54">
                <title>5.9. Sensitivity study II: effect of permeability-growth coefficient</title>
                <p>The second sensitivity study focuses on the permeability-growth coefficient, which determines how strongly a given level of reaction progress is translated into hydraulic-property enhancement. When this coefficient is small, even appreciable reaction progress produces only mild permeability increase, so the pressure response remains close to that of the original reservoir architecture. When the coefficient is moderate or large, by contrast, relatively small changes in reaction progress produce substantial near-well conductivity enhancement, leading to earlier deviation from the nonreactive pressure trajectory and a more pronounced increase in injectivity. These effects are directly consistent with the constitutive trends in 
                    <xref ref-type="fig" rid="f4">
Figure 4</xref>, the reactive field distributions in 
                    <xref ref-type="fig" rid="f8">
Figure 8</xref>, the pressure-history comparisons in 
                    <xref ref-type="fig" rid="f9">
Figure 9</xref>, and the injectivity evolution shown in 
                    <xref ref-type="fig" rid="f10">
Figure 10</xref>. The quantitative consequences of varying this coefficient are likewise reflected in 
                    <xref ref-type="table" rid="T5">
Tables 5</xref> and 
                    <xref ref-type="table" rid="T6">6</xref>.</p>
                <p>From a reservoir-engineering viewpoint, this parameter measures how sensitively the pore network responds to carbonate dissolution. Reservoirs characterized by larger permeability-growth coefficients are therefore more likely to display self-enhancing injectivity during sustained CO
                    <sub>2</sub> injection.</p>
            </sec>
            <sec id="sec55">
                <title>5.10. Sensitivity study III: effect of heterogeneity intensity</title>
                <p>The third sensitivity study examines the role of the contrast between high- and low-permeability subregions. As the heterogeneity ratio increases, the reservoir exhibits stronger asymmetry in both the pressure field and the reaction field. In the nonreactive setting, this produces more pronounced channeling or shielding effects, as already demonstrated by 
                    <xref ref-type="fig" rid="f6">
Figures 6</xref> and 
                    <xref ref-type="fig" rid="f7">7</xref> and summarized in 
                    <xref ref-type="table" rid="T3">
Tables 3</xref> and 
                    <xref ref-type="table" rid="T4">4</xref>. In the reactive setting, the same increase in heterogeneity also changes where dissolution is likely to concentrate, since reaction tends to intensify in zones characterized by either stronger pressure buildup or longer hydraulic residence time. This effect is evident in the heterogeneous reactive layouts of 
                    <xref ref-type="fig" rid="f11">
Figures 11</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and in the corresponding performance indicators of 
                    <xref ref-type="table" rid="T7">
Tables 7</xref> and 
                    <xref ref-type="table" rid="T8">8</xref>.</p>
                <p>The results show that strong heterogeneity may either preserve compartmentalization or progressively erode it through localized permeability enhancement, depending on the arrangement of the subdomains and the magnitude of the reactive driving force. This confirms the necessity of retaining explicit subdomain representation in the numerical model when long-term storage behavior is to be forecast in carbonate systems.</p>
            </sec>
            <sec id="sec56">
                <title>5.11. Comparative discussion of pressure evolution</title>
                <p>A key conclusion emerging from all scenarios is the distinction between early-time and long-time pressure behavior. At early times, all cases are governed predominantly by the initial permeability field because reaction has not yet significantly altered the pore structure. This is why the early segments of the reactive pressure curves resemble the corresponding nonreactive responses, as seen by comparison of 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>, 
                    <xref ref-type="fig" rid="f7">7</xref>, 
                    <xref ref-type="fig" rid="f9">9</xref>, and 
                    <xref ref-type="fig" rid="f13">13</xref>. At intermediate and later times, however, reaction-induced permeability evolution becomes progressively more important and shifts the system into a modified diffusion regime, one that is evident in the constitutive evolution of 
                    <xref ref-type="fig" rid="f3">
Figures 3</xref> and 
                    <xref ref-type="fig" rid="f4">4</xref>, the reactive field distributions of 
                    <xref ref-type="fig" rid="f8">
Figures 8</xref> and 
                    <xref ref-type="fig" rid="f12">12</xref>, and the injectivity gains shown in 
                    <xref ref-type="fig" rid="f10">
Figures 10</xref> and 
                    <xref ref-type="fig" rid="f14">14</xref>. The corresponding numerical trends are reported in 
                    <xref ref-type="table" rid="T4">
Tables 4</xref>, 
                    <xref ref-type="table" rid="T6">6</xref>, and 
                    <xref ref-type="table" rid="T8">8</xref>.</p>
                <p>Thus, the proposed BEM formulation does not merely capture a sequence of static pressure fields; it resolves a genuine transition from an initially imposed hydraulic architecture to a dynamically altered one, with direct consequences for injectivity and pressure management.</p>
            </sec>
            <sec id="sec57">
                <title>5.12. Implications for injectivity and storage performance</title>
                <p>The numerical examples indicate that dissolution-driven permeability enhancement can materially reduce injection-induced pressure buildup, especially in the near-well region. From an operational standpoint, this is important because even moderate gains in local conductivity may permit sustained injection at lower pressure risk. This beneficial effect is most clearly reflected in the difference between the nonreactive and reactive pressure histories in 
                    <xref ref-type="fig" rid="f9">
Figures 9</xref> and 
                    <xref ref-type="fig" rid="f13">13</xref> and in the corresponding increase in apparent injectivity shown in 
                    <xref ref-type="fig" rid="f10">
Figures 10</xref> and 
                    <xref ref-type="fig" rid="f14">14</xref>. The same trend is supported quantitatively by 
                    <xref ref-type="table" rid="T6">
Tables 6</xref> and 
                    <xref ref-type="table" rid="T8">8</xref>.</p>
                <p>At the same time, the simulations show that permeability enhancement is strongly localized and highly sensitive to reservoir structure. A favorable outcome is most likely when dissolution improves local connectivity without creating uncontrolled preferential pathways. For this reason, 
                    <xref ref-type="fig" rid="f6">
Figures 6</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and 
                    <xref ref-type="table" rid="T3">
Tables 3</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref> collectively suggest that pressure management in carbonate CO
                    <sub>2</sub> storage cannot be assessed reliably from static permeability fields alone; rather, it requires simultaneous consideration of both the initial geological architecture and its reactive evolution during injection.</p>
            </sec>
            <sec id="sec58">
                <title>5.13. Computational performance and suitability of the BEM approach</title>
                <p>In addition to the physical insights, the numerical experiments confirm the practical advantages of the proposed BEM formulation. Because only the external boundary and internal interfaces are discretized, the total number of unknowns remains comparatively small even in reservoirs with multiple heterogeneous zones. The analytical treatment of the injection well and the post-processed reconstruction of interior fields further reduce computational overhead. This is already evident from 
                    <xref ref-type="table" rid="T2">
Table 2</xref>, where the BEM outperforms finite difference and finite element reference models in CPU time and memory demand while preserving high accuracy. The same computational economy makes the method well suited to the multiple scenario comparisons and parametric analyses summarized later in 
                    <xref ref-type="table" rid="T3">
Tables 3</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref>.</p>
                <p>The results therefore confirm that the method provides a favorable compromise between physical realism and numerical efficiency. This is particularly valuable for problems in which the dominant complexities arise from boundary conditions, internal source behavior, and heterogeneous interfaces rather than from the need for a fully volumetric discretization of the entire reservoir.</p>
            </sec>
            <sec id="sec59">
                <title>5.14. Concluding remarks on the numerical results</title>
                <p>The numerical results demonstrate that the proposed Boundary Element formulation successfully reproduces classical transient diffusion in homogeneous nonreactive reservoirs, accurately captures the redistribution of pressure caused by geological heterogeneity and resolves the localized porosity and permeability enhancement induced by carbonate dissolution. Specifically, 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>, 
                    <xref ref-type="fig" rid="f2">2</xref>, and 
                    <xref ref-type="fig" rid="f5">5</xref> establish the correct baseline diffusion response; 
                    <xref ref-type="fig" rid="f3">
Figures 3</xref> and 
                    <xref ref-type="fig" rid="f4">4</xref> confirm the physically consistent temporal evolution of reaction progress and permeability; 
                    <xref ref-type="fig" rid="f6">
Figures 6</xref> and 
                    <xref ref-type="fig" rid="f7">7</xref> demonstrate the hydraulic impact of static heterogeneity; 
                    <xref ref-type="fig" rid="f8">
Figures 8</xref>&#x2013;
                    <xref ref-type="fig" rid="f10">10</xref> show how reactive alteration modifies the homogeneous near-well flow regime and improves injectivity; and 
                    <xref ref-type="fig" rid="f11">
Figures 11</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> illustrate the path-dependent interplay between heterogeneity and reactivity in the most realistic reservoir configuration. 
                    <xref ref-type="table" rid="T2">
Table 2</xref> documents the computational efficiency of the BEM, 
                    <xref ref-type="table" rid="T3">
Tables 3</xref> and 
                    <xref ref-type="table" rid="T4">4</xref> summarize the heterogeneous nonreactive scenarios, 
                    <xref ref-type="table" rid="T5">
Tables 5</xref> and 
                    <xref ref-type="table" rid="T6">6</xref> quantify the homogeneous reactive response, and 
                    <xref ref-type="table" rid="T7">
Tables 7</xref> and 
                    <xref ref-type="table" rid="T8">8</xref> synthesize the behavior of the reactive heterogeneous reservoir.</p>
                <p>Taken together, these findings confirm that long-term CO
                    <sub>2</sub> injection behavior in carbonate formations cannot be described adequately by static permeability alone. Even when the early-time response is governed primarily by the initial facies architecture, sustained reactive injection may substantially reorganize the effective hydraulic structure of the reservoir. The resulting system is nonlinear, path-dependent, and spatially localized, with direct implications for injectivity forecasting, pressure control, and storage-system design.</p>
            </sec>
            <sec id="sec60">
                <title>5.15. Transition to the overall conclusions of the study</title>
                <p>The case studies and parametric analyses presented in this section provide strong support for three broader conclusions. First, reaction-induced permeability evolution is not a secondary correction to the hydraulic problem but may become a controlling mechanism in long-duration injection. Second, explicit representation of reservoir heterogeneity is essential because it influences both early pressure redistribution and the later spatial pattern of chemical alteration. Third, the Boundary Element framework provides a computationally efficient and physically rigorous alternative to conventional domain-based methods for this class of reactive storage problems. These observations lead directly to the concluding section, where the principal methodological contributions, physical implications, and future research directions are summarized.</p>
            </sec>
        </sec>
        <sec id="sec61">
            <title>6. Conclusions and future perspectives</title>
            <sec id="sec62">
                <title>6.1. Principal contributions of the study</title>
                <p>This study has developed a new Boundary Element formulation for transient CO
                    <sub>2</sub> injection in heterogeneous carbonate reservoirs with explicit consideration of reaction-induced porosity and permeability evolution. The proposed model was motivated by the need for computationally efficient yet physically meaningful simulation tools capable of capturing the coupled hydraulic and geochemical processes that govern pressure buildup, injectivity, and storage performance in reactive subsurface systems. By embedding the pressure-diffusion problem in a time-dependent boundary-integral framework and coupling it to constitutive laws for reaction progress, porosity growth, and permeability enhancement, the present work extends classical BEM methodology to a nonlinear class of reservoir problems for which boundary-only formulations remain relatively uncommon.</p>
                <p>A central contribution of the study lies in the incremental linearization strategy, which preserves the analytical structure of the BEM while allowing hydraulic properties to evolve in time. The method rigorously enforces interface continuity across heterogeneous subregions, treats wells analytically as internal singular sources, and reconstructs transient interior fields without volumetric remeshing. The physical relevance of these methodological advances is demonstrated throughout 
                    <xref ref-type="sec" rid="sec45">Section 5</xref> by the consistent interpretation of 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and the quantitative comparisons reported in 
                    <xref ref-type="table" rid="T2">
Tables 2</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref>. In particular, 
                    <xref ref-type="table" rid="T2">
Table 2</xref> shows that these advances are achieved without sacrificing computational efficiency.</p>
            </sec>
            <sec id="sec63">
                <title>6.2. Main physical findings</title>
                <p>The numerical results show that reaction-driven permeability evolution substantially alters pressure development during CO
                    <sub>2</sub> injection. In homogeneous reactive systems, the near-well dissolution halo shown in 
                    <xref ref-type="fig" rid="f3">
Figures 3</xref>, 
                    <xref ref-type="fig" rid="f4">4</xref>, and 
                    <xref ref-type="fig" rid="f8">8</xref> produces moderated long-time pressure buildup and increased injectivity, as confirmed by 
                    <xref ref-type="fig" rid="f9">
Figures 9</xref> and 
                    <xref ref-type="fig" rid="f10">10</xref> and by 
                    <xref ref-type="table" rid="T5">
Tables 5</xref> and 
                    <xref ref-type="table" rid="T6">6</xref>. In heterogeneous reservoirs, the effect is more complex because the initial facies architecture governs early pressure redistribution, while the subsequent reaction redistributes permeability in a spatially nonuniform manner, as illustrated by 
                    <xref ref-type="fig" rid="f11">
Figures 11</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and summarized in 
                    <xref ref-type="table" rid="T7">
Tables 7</xref> and 
                    <xref ref-type="table" rid="T8">8</xref>. These results demonstrate that the hydraulic response of carbonate storage reservoirs is intrinsically path-dependent and cannot be described adequately using static permeability fields alone.</p>
                <p>Equally important, the comparison between homogeneous and heterogeneous nonreactive cases, represented by 
                    <xref ref-type="fig" rid="f5">
Figures 5</xref>&#x2013;
                    <xref ref-type="fig" rid="f7">7</xref> and 
                    <xref ref-type="table" rid="T4">
Table 4</xref>, shows that geological heterogeneity exerts a strong control on pressure propagation even before reactive alteration becomes active. Accordingly, reliable interpretation of field-scale injection behavior requires simultaneous treatment of both the initial geological structure and its reactive modification during operation.</p>
            </sec>
            <sec id="sec64">
                <title>6.3. Significance for CO
                    <sub>2</sub> storage assessment</title>
                <p>From the standpoint of storage engineering, the findings suggest that carbonate dissolution may, under favorable conditions, improve injectivity by reducing near-well pressure accumulation. This effect is particularly relevant in pressure-limited reservoirs, where even moderate permeability enhancement may lower operational risk and improve sustained injection performance. The improvement in apparent injectivity quantified in 
                    <xref ref-type="fig" rid="f10">
Figures 10</xref> and 
                    <xref ref-type="fig" rid="f14">14</xref> and 
                    <xref ref-type="table" rid="T6">
Tables 6</xref> and 
                    <xref ref-type="table" rid="T8">8</xref> therefore has direct practical significance. At the same time, the results also indicate that dissolution-driven enhancement is not uniformly beneficial: in strongly heterogeneous settings, localized permeability growth may reinforce preferential flow paths and modify the effective hydraulic connectivity of the reservoir. For this reason, 
                    <xref ref-type="fig" rid="f6">
Figures 6</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and 
                    <xref ref-type="table" rid="T3">
Tables 3</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref> collectively support the conclusion that pressure management and storage forecasting in carbonate systems must be based on coupled reactive-flow simulation rather than on purely hydraulic models with fixed material properties.</p>
            </sec>
            <sec id="sec65">
                <title>6.4. Methodological strengths of the proposed BEM framework</title>
                <p>The study further demonstrates that the Boundary Element framework is especially well suited to reactive CO
                    <sub>2</sub>-injection problems in which the dominant numerical challenges arise from large reservoir extent, internal source behavior, and subdomain interfaces. The smooth benchmark responses in 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref> and 
                    <xref ref-type="fig" rid="f2">2</xref>, the physically consistent constitutive trends in 
                    <xref ref-type="fig" rid="f3">
Figures 3</xref> and 
                    <xref ref-type="fig" rid="f4">4</xref>, the accurate treatment of permeability contrasts in 
                    <xref ref-type="fig" rid="f6">
Figures 6</xref> and 
                    <xref ref-type="fig" rid="f7">7</xref>, and the efficient handling of evolving heterogeneous structure in 
                    <xref ref-type="fig" rid="f11">
Figures 11</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> all indicate that the formulation preserves both numerical stability and physical realism. The performance comparison in 
                    <xref ref-type="table" rid="T3">
Table 3</xref> confirms that this is achieved with substantially lower computational burden than conventional domain-based discretizations. Thus, the present formulation provides a strong basis for large-scale sensitivity analysis, scenario comparison, and long-term forecasting.</p>
            </sec>
            <sec id="sec66">
                <title>6.5. Limitations of the present study</title>
                <p>Despite these contributions, several limitations of the present work should be acknowledged. The reaction model was formulated in reduced pressure-activated form rather than through a full multicomponent reactive-transport description including explicit aqueous chemistry and mineral saturation calculations. In addition, the numerical examples were implemented using the reduced hydraulic formulation in which geomechanical effects were absorbed into constitutive permeability updating rather than solved in a fully coupled hydro-chemo-mechanical system. These simplifications were appropriate for establishing the new BEM framework and demonstrating its essential capabilities, but they necessarily limit the range of physical processes represented explicitly.</p>
                <p>A further limitation concerns the treatment of equivalent domain terms associated with nonlinear property evolution. Although the adopted approximation remains efficient and sufficiently accurate for the present examples, more elaborate internal representations may be advantageous in problems involving sharper reactive fronts, stronger material anisotropy, or more complex constitutive laws.</p>
            </sec>
            <sec id="sec67">
                <title>6.6. Future perspectives</title>
                <p>Several extensions follow naturally from the present work. A first priority is the incorporation of full reactive transport, including dissolved-species conservation, mineral saturation effects, and more detailed geochemical kinetics. A second is the development of a fully coupled hydro-chemo-mechanical formulation in which deformation and effective-stress evolution are solved explicitly rather than included indirectly through updated permeability laws. Additional developments should include three-dimensional geometries, anisotropic and fractured carbonate reservoirs, adaptive time stepping for strongly localized nonlinear fronts, and systematic calibration against laboratory and field-scale CO
                    <sub>2</sub>-injection data. The figure- and table-based trends established in this study&#x2014;particularly those summarized by 
                    <xref ref-type="fig" rid="f8">
Figures 8</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and 
                    <xref ref-type="table" rid="T5">
Tables 5</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref>&#x2014;provide a useful reference framework for evaluating such future model enhancements.</p>
            </sec>
            <sec id="sec68">
                <title>6.7. Final concluding statement</title>
                <p>In conclusion, the present study shows that a transient Boundary Element formulation can successfully simulate pressure buildup and reaction-induced permeability evolution during CO
                    <sub>2</sub> injection in heterogeneous carbonate reservoirs. The method combines analytical rigor, explicit treatment of heterogeneity and internal sources, and efficient updating of evolving reservoir properties within a computationally economic framework. The collective evidence provided by 
                    <xref ref-type="fig" rid="f1">
Figures 1</xref>&#x2013;
                    <xref ref-type="fig" rid="f14">14</xref> and 
                    <xref ref-type="table" rid="T1">
Tables 1</xref>&#x2013;
                    <xref ref-type="table" rid="T8">8</xref> demonstrates that the formulation is capable of resolving the key multiphysics feedback that govern injectivity and storage performance in reactive carbonate systems. For this reason, the proposed model constitutes a promising computational tool for pressure-management analysis, injectivity forecasting, and long-term assessment of geological carbon storage in complex subsurface environments.</p>
            </sec>
        </sec>
        <sec id="sec69" sec-type="conclusion">
            <title>7. Conclusion</title>
            <p>This study developed a transient Boundary Element Method formulation for modeling reactive CO
                <sub>2</sub> injection in heterogeneous carbonate reservoirs, with particular focus on pressure buildup, injectivity evolution, and dissolution-driven permeability enhancement. The proposed framework integrates time-dependent boundary integral representation, analytical treatment of internal injection wells, subdomain decomposition for heterogeneous formations, and incremental updating of reaction progress, porosity, and permeability. By doing so, it provides an efficient boundary-based alternative to conventional volumetric discretization for storage problems in which the dominant engineering concern is the coupled evolution of pressure and hydraulic properties.</p>
            <p>The numerical results demonstrate that the proposed formulation captures the main physical mechanisms controlling reactive carbonate storage. In the nonreactive limit, the method reproduces classical transient pressure diffusion and correctly resolves the influence of permeability contrasts on pressure redistribution. In reactive simulations, pressure-activated carbonate dissolution produces a localized altered zone near the injector, leading to porosity increase, permeability enhancement, reduced long-term pressure buildup, and improved apparent injectivity. In heterogeneous reservoirs, the response is strongly path dependent: the initial facies architecture governs the early pressure field, whereas subsequent dissolution progressively modifies the effective hydraulic structure and changes the later evolution of flow, pressure, and injectivity.</p>
            <p>The validation results confirm the reliability of the proposed BEM framework for the class of problems considered. The model recovers benchmark diffusion behavior, agrees favorably with finite difference and finite element reference solutions, and reproduces permeability-evolution trends consistent with published carbonate-dissolution studies. The results also show that the boundary-based formulation achieves these predictions with substantially reduced computational cost, making it suitable for reservoir-scale sensitivity analysis, pressure-management screening, and repeated storage-performance evaluations.</p>
            <p>From an engineering perspective, the study shows that reactive permeability evolution can significantly alter the pressure-limited performance of carbonate CO
                <sub>2</sub> storage systems. Pressure buildup, injectivity, and altered-zone development should therefore be treated as dynamically coupled quantities rather than as responses controlled by a fixed permeability field. The proposed BEM formulation offers a practical and computationally efficient platform for assessing these interactions in large heterogeneous domains.</p>
            <p>The present implementation remains a reduced reactive-flow model. The model is yet to accommodate comprehensive multi-component reactive transport, aqueous geochemistry, or coupled hydro-chemo-mechanical deformation. The future developments of the model should consider the incorporation of the kinetic description of geochemistry, transport processes of dissolved components, coupled hydro-chemo-mechanics, anisotropic and fractured carbonate rocks, realistic 3D geometry of the reservoir, adaptive time discretization for abrupt chemical reactions, and model calibration using experiments or field tests on carbon dioxide injection. Overall, the proposed modeling framework serves as a good foundation for assessing carbon storage in reactive carbonate rocks.</p>
        </sec>
        <sec id="sec70">
            <title>Research Ethics</title>
            <p>This study involves only mathematical modeling and numerical simulation of reactive CO
                <sub>2</sub> storage in carbonate reservoirs. No human participants, personal data, animals, biological materials, or clinical samples were involved; therefore, ethical approval was not required.</p>
            <p>The author confirms that the work was conducted with academic integrity. All methods, assumptions, numerical results, and validation procedures are reported transparently. Published data and prior studies used for comparison are properly cited. The manuscript is original, has not been published elsewhere, and is not under consideration by another journal. The author approved the final manuscript and declares no ethical concerns related to this study.</p>
        </sec>
        <sec id="sec71">
            <title>Use of large language models, ai and machine learning tools</title>
            <p>Author confirms that he has not used any Large Language Models (LLMs), artificial intelligence (AI), or machine learning tools in the preparation, analysis, or writing of this manuscript.</p>
        </sec>
    </body>
    <back>
        <sec id="sec74" sec-type="data-availability">
            <title>Data availability</title>
            <sec id="sec75">
                <title>Underlying data</title>
                <p>Repository name: Dataset and source code for &#x201c;A Transient Boundary Element Framework for Pressure Buildup, Injectivity Enhancement, and Reactive Permeability Evolution During CO
                    <sub>2</sub> Storage in Heterogeneous Carbonate Reservoirs&#x201d;. 
                    <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.6084/m9.figshare.32385957">https://doi.org/10.6084/m9.figshare.32385957</ext-link>.
                    <sup>
                        <xref ref-type="bibr" rid="ref26">26</xref>
                    </sup>
                </p>
                <p>The project contains the following underlying data:
                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 1.csv (raw literature-comparison data for reaction-induced permeability enhancement; underlying data for manuscript 
                                <xref ref-type="table" rid="T1">
Table 1</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 2.csv (raw principal model constants and numerical input values; underlying data for manuscript 
                                <xref ref-type="table" rid="T2">
Table 2</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 3.csv (raw numerical accuracy and computational-efficiency data comparing BEM, finite difference, and finite element methods; underlying data for manuscript 
                                <xref ref-type="table" rid="T3">
Table 3</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 4.csv (raw pressure buildup values for homogeneous and heterogeneous nonreactive cases; underlying data for manuscript 
                                <xref ref-type="table" rid="T4">
Table 4</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 5.csv (raw near-well reaction progress, porosity, permeability, and altered-zone data for the homogeneous reactive reservoir; underlying data for manuscript 
                                <xref ref-type="table" rid="T5">
Table 5</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 6.csv (raw pressure reduction and injectivity-gain data for the homogeneous reactive case; underlying data for manuscript 
                                <xref ref-type="table" rid="T6">
Table 6</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 7.csv (raw initial subdomain properties for the reactive heterogeneous reservoir; underlying data for manuscript 
                                <xref ref-type="table" rid="T7">
Table 7</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 8.csv (raw performance indicators for the reactive heterogeneous reservoir; underlying data for manuscript 
                                <xref ref-type="table" rid="T8">
Table 8</xref>).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Supplementary Table 9.csv (raw homogeneous surrogate time-series data used to reproduce associated graphical outputs and transient response trends).</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec76">
                <title>Extended data</title>
                <p>Repository name: Dataset and source code for &#x201c;A Transient Boundary Element Framework for Pressure Buildup, Injectivity Enhancement, and Reactive Permeability Evolution During CO
                    <sub>2</sub> Storage in Heterogeneous Carbonate Reservoirs&#x201d;. 
                    <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.6084/m9.figshare.32385957">https://doi.org/10.6084/m9.figshare.32385957</ext-link>.
                    <sup>
                        <xref ref-type="bibr" rid="ref26">26</xref>
                    </sup>
                </p>
                <p>This project contains the following extended data:
                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>MATLAB analysis scripts (scripts used to run the surrogate calculations, reproduce reference tables and figures, and execute the transient subdomain BEM demonstration).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>MATLAB source-code files (source files for the reduced reactive-flow model and transient subdomain BEM scaffold).</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Reproducibility notes (documentation describing the repository structure, reproducibility scope, and practical limitations of the reconstructed MATLAB package).</p>
                        </list-item>
                    </list>
                </p>
                <p>Data are available under the terms of the 
                    <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/publicdomain/zero/1.0/legalcode">Creative Commons Zero &#x201c;No rights reserved&#x201d; data waiver (CC0 1.0 Public domain dedication)</ext-link>.</p>
            </sec>
        </sec>
        <ack>
            <title>Acknowledgments</title>
            <p>The author extends his appreciation to Umm Al-Qura University, Saudi Arabia for funding this research work grant number: 26UQU4340548GSSR11.</p>
        </ack>
        <ref-list>
            <title>References</title>
            <ref id="ref1">
                <label>1</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Bachu</surname>
                            <given-names>S</given-names>
                        </name>
</person-group>:
                    <article-title>CO2 storage in geological media: Role, means, status and barriers to deployment.</article-title>
                    <source>

                        <italic toggle="yes">Prog. Energy Combust. Sci.</italic>
</source>
                    <year>2008</year>;<volume>34</volume>:<fpage>254</fpage>&#x2013;<lpage>273</lpage>.
                    <pub-id pub-id-type="doi">10.1016/j.pecs.2007.10.001</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref2">
                <label>2</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="editor">

                        <name name-style="western">
                            <surname>Metz</surname>
                            <given-names>B</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Davidson</surname>
                            <given-names>O</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Coninck</surname>
                            <given-names>H</given-names>
                            <prefix>de</prefix>
                        </name>

                        <etal/>
</person-group>:
                    <source>

                        <italic toggle="yes">IPCC Special Report on Carbon Dioxide Capture and Storage (SRCCS).</italic>
</source>
                    <publisher-loc>Cambridge, United Kingdom and New York, NY, USA</publisher-loc>:
                    <publisher-name>Cambridge University Press</publisher-name>;<year>2005</year>.</mixed-citation>
            </ref>
            <ref id="ref3">
                <label>3</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Rutqvist</surname>
                            <given-names>J</given-names>
                        </name>
</person-group>:
                    <article-title>The geomechanics of CO
                        <sub>2</sub> storage in deep sedimentary formations.</article-title>
                    <source>

                        <italic toggle="yes">Geotech. Geol. Eng.</italic>
</source>
                    <year>2012</year>;<volume>30</volume>:<fpage>525</fpage>&#x2013;<lpage>551</lpage>.
                    <pub-id pub-id-type="doi">10.1007/s10706-011-9477-x</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref4">
                <label>4</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Nicot</surname>
                            <given-names>JP</given-names>
                        </name>
</person-group>:
                    <article-title>Evaluation of large-scale CO2 storage on fresh-water sections of aquifers: An example from the Texas Gulf Coast Basin.</article-title>
                    <source>

                        <italic toggle="yes">Int. J. Greenh. Gas Con.</italic>
</source>
                    <year>2008</year>;<volume>2</volume>:<fpage>582</fpage>&#x2013;<lpage>593</lpage>.
                    <pub-id pub-id-type="doi">10.1016/j.ijggc.2008.03.004</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref5">
                <label>5</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Oldenburg</surname>
                            <given-names>CM</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Bryant</surname>
                            <given-names>SL</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Nicot</surname>
                            <given-names>JP</given-names>
                        </name>
</person-group>:
                    <article-title>Certification framework based on effective trapping for geologic carbon sequestration.</article-title>
                    <source>

                        <italic toggle="yes">Int. J. Greenh. Gas Con.</italic>
</source>
                    <year>2009</year>;<volume>3</volume>:<fpage>444</fpage>&#x2013;<lpage>457</lpage>.
                    <pub-id pub-id-type="doi">10.1016/j.ijggc.2009.02.009</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref6">
                <label>6</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Zoback</surname>
                            <given-names>MD</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Gorelick</surname>
                            <given-names>SM</given-names>
                        </name>
</person-group>:
                    <article-title>Earthquake triggering and large-scale geologic storage of carbon dioxide.</article-title>
                    <source>

                        <italic toggle="yes">Proceedings of the National Academy of Sciences (PNAS).</italic>
</source>
                    <year>2012</year>;<volume>109</volume>(<issue>26</issue>):<fpage>10164</fpage>&#x2013;<lpage>10168</lpage>.
                    <pub-id pub-id-type="pmid">22711814</pub-id>
                    <pub-id pub-id-type="doi">10.1073/pnas.120247310</pub-id>
                    <pub-id pub-id-type="pmcid">PMC3387039</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref7">
                <label>7</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Vilarrasa</surname>
                            <given-names>V</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Carrera</surname>
                            <given-names>J</given-names>
                        </name>
</person-group>:
                    <article-title>Geologic carbon storage is unlikely to trigger large earthquakes and reactivate faults through which 〖CO〗_2 could leak.</article-title>
                    <source>

                        <italic toggle="yes">Proceedings of the National Academy of Sciences (PNAS).</italic>
</source>
                    <year>2015</year>;<volume>112</volume>(<issue>19</issue>):<fpage>5938</fpage>&#x2013;<lpage>5943</lpage>.
                    <pub-id pub-id-type="pmid">25902501</pub-id>
                    <pub-id pub-id-type="doi">10.1073/pnas.1413284112</pub-id>
                    <pub-id pub-id-type="pmcid">PMC4434732</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref8">
                <label>8</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Aziz</surname>
                            <given-names>K</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Settari</surname>
                            <given-names>A</given-names>
                        </name>
</person-group>:
                    <source>

                        <italic toggle="yes">Petroleum Reservoir Simulation.</italic>
</source>
                    <publisher-loc>London, UK</publisher-loc>:
                    <publisher-name>Applied Science Publishers</publisher-name>;<year>1979</year>.</mixed-citation>
            </ref>
            <ref id="ref9">
                <label>9</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Bear</surname>
                            <given-names>J</given-names>
                        </name>
</person-group>:
                    <source>

                        <italic toggle="yes">Dynamics of Fluids in Porous Media.</italic>
</source>
                    <publisher-loc>New York</publisher-loc>:
                    <publisher-name>Dover Publications, Inc.</publisher-name>;<year>1988</year>.</mixed-citation>
            </ref>
            <ref id="ref10">
                <label>10</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Chen</surname>
                            <given-names>Z</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Huan</surname>
                            <given-names>G</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Ma</surname>
                            <given-names>Y</given-names>
                        </name>
</person-group>:
                    <article-title>Computational Methods for Multiphase Flows in Porous Media.</article-title>
                    <source>

                        <italic toggle="yes">Society for Industrial and Applied Mathematics.</italic>
</source>
                    <year>2006</year>.
                    <pub-id pub-id-type="doi">10.1137/1.9780898718942</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref11">
                <label>11</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Helmig</surname>
                            <given-names>R</given-names>
                        </name>
</person-group>:
                    <source>

                        <italic toggle="yes">Multiphase Flow and Transport Processes in the Subsurface.</italic>
</source>
                    <publisher-name>Springer</publisher-name>;<year>1997</year>.
                    <pub-id pub-id-type="doi">10.1007/978-3-642-61057-5</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref12">
                <label>12</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Brebbia</surname>
                            <given-names>CA</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Dominguez</surname>
                            <given-names>J</given-names>
                        </name>
</person-group>:
                    <source>

                        <italic toggle="yes">Boundary Elements: An Introductory Course.</italic>
</source>
                    <publisher-loc>Southampton, UK</publisher-loc>:
                    <publisher-name>WIT Press</publisher-name>;
                    <edition>2nd ed</edition>
                    <year>1994</year>.</mixed-citation>
            </ref>
            <ref id="ref13">
                <label>13</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Wrobel</surname>
                            <given-names>LC</given-names>
                        </name>
</person-group>:
                    <source>

                        <italic toggle="yes">The Boundary Element Method, Volume 1: Applications in Thermo-Fluids and Acoustics.</italic>
</source>
                    <publisher-loc>Hoboken, New Jersey, US</publisher-loc>:
                    <publisher-name>Wiley</publisher-name>;<year>2002</year>.</mixed-citation>
            </ref>
            <ref id="ref14">
                <label>14</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Fahmy</surname>
                            <given-names>MA</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Al Subhi</surname>
                            <given-names>FM</given-names>
                        </name>
</person-group>:
                    <article-title>Fracture Simulation of Nanostructured Porous Polymers Using a Boundary Element Method with Fractional Heat Conduction and Pyrolysis Coupling.</article-title>
                    <source>

                        <italic toggle="yes">Fatigue Fract. Eng. Mater. Struct.</italic>
</source>
                    <year>2025</year>;<volume>48</volume>:<fpage>5323</fpage>&#x2013;<lpage>5334</lpage>.
                    <pub-id pub-id-type="doi">10.1111/ffe.70092</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref15">
                <label>15</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Fahmy</surname>
                            <given-names>MA</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Shaw</surname>
                            <given-names>S</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Mondal</surname>
                            <given-names>S</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>Boundary Element Modeling for Simulation and Optimization of Three-Temperature Anisotropic Micropolar Magneto-thermoviscoelastic Problems in Porous Smart Structures Using NURBS and Genetic Algorithm.</article-title>
                    <source>

                        <italic toggle="yes">Int. J. Thermophys.</italic>
</source>
                    <year>2021</year>;<volume>42</volume>:<fpage>29</fpage>.
                    <pub-id pub-id-type="doi">10.1007/s10765-020-02777-7</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref16">
                <label>16</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Gringarten</surname>
                            <given-names>AC</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Ramey</surname>
                            <given-names>HJ</given-names>
                        </name>
</person-group>:
                    <article-title>The Use of Source and Green's Functions in Solving Unsteady-Flow Problems in Reservoirs.</article-title>
                    <source>

                        <italic toggle="yes">SPE J.</italic>
</source>
                    <year>1973</year>;<volume>13</volume>:<fpage>285</fpage>&#x2013;<lpage>296</lpage>.
                    <pub-id pub-id-type="doi">10.2118/3818-PA</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref17">
                <label>17</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Ezekoye</surname>
                            <given-names>OA</given-names>
                        </name>
</person-group>:
                    <chapter-title>Conduction of Heat in Solids.</chapter-title>
                    <person-group person-group-type="editor">

                        <name name-style="western">
                            <surname>Hurley</surname>
                            <given-names>MJ</given-names>
                        </name>

                        <etal/>
</person-group>, editor.
                    <source>

                        <italic toggle="yes">SFPE Handbook of Fire Protection Engineering.</italic>
</source>
                    <publisher-loc>New York, NY</publisher-loc>:
                    <publisher-name>Springer</publisher-name>;<year>2016</year>.
                    <pub-id pub-id-type="doi">10.1007/978-1-4939-2565-0_2</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref18">
                <label>18</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Su</surname>
                            <given-names>C</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Zhao</surname>
                            <given-names>G</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Jin</surname>
                            <given-names>Y-C</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>Semi-Analytical Modeling of Geological Features Based Heterogeneous Reservoirs Using the Boundary Element Method.</article-title>
                    <source>

                        <italic toggle="yes">Minerals.</italic>
</source>
                    <year>2022</year>;<volume>12</volume>:<fpage>663</fpage>.
                    <pub-id pub-id-type="doi">10.3390/min12060663</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref19">
                <label>19</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Lesnic</surname>
                            <given-names>D</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Elliott</surname>
                            <given-names>L</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Ingham</surname>
                            <given-names>DB</given-names>
                        </name>
</person-group>:
                    <article-title>A boundary element method for the determination of the transmissivity of a heterogeneous aquifer in groundwater flow systems.</article-title>
                    <source>

                        <italic toggle="yes">Eng. Anal. Bound. Elem.</italic>
</source>
                    <year>1998</year>;<volume>21</volume>:<fpage>223</fpage>&#x2013;<lpage>234</lpage>.
                    <pub-id pub-id-type="doi">10.1016/S0955-7997(98)00015-0</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref20">
                <label>20</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Golfier</surname>
                            <given-names>F</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Zarcone</surname>
                            <given-names>C</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Bazin</surname>
                            <given-names>B</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>On the ability of a Darcy-scale model to capture wormhole formation during the dissolution of a porous medium.</article-title>
                    <source>

                        <italic toggle="yes">J. Fluid Mech.</italic>
</source>
                    <year>2002</year>;<volume>457</volume>:<fpage>213</fpage>&#x2013;<lpage>254</lpage>.
                    <pub-id pub-id-type="doi">10.1017/S0022112002007735</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref21">
                <label>21</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Noiriel</surname>
                            <given-names>C</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Gouze</surname>
                            <given-names>P</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Bernard</surname>
                            <given-names>D</given-names>
                        </name>
</person-group>:
                    <article-title>Investigation of porosity and permeability effects from microstructure changes during limestone dissolution.</article-title>
                    <source>

                        <italic toggle="yes">Geophys. Res. Lett.</italic>
</source>
                    <year>2004</year>;<volume>31</volume>:<fpage>L24603</fpage>.
                    <pub-id pub-id-type="doi">10.1029/2004GL021572</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref22">
                <label>22</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Luquot</surname>
                            <given-names>L</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Gouze</surname>
                            <given-names>P</given-names>
                        </name>
</person-group>:
                    <article-title>Experimental determination of porosity and permeability changes induced by injection of CO
                        <sub>2</sub> into carbonate rocks.</article-title>
                    <source>

                        <italic toggle="yes">Chem. Geol.</italic>
</source>
                    <year>2009</year>;<volume>265</volume>(<issue>1&#x2013;2</issue>):<fpage>148</fpage>&#x2013;<lpage>159</lpage>.
                    <pub-id pub-id-type="doi">10.1016/j.chemgeo.2009.03.028</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref23">
                <label>23</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Steefel</surname>
                            <given-names>CI</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Lasaga</surname>
                            <given-names>AC</given-names>
                        </name>
</person-group>:
                    <article-title>A coupled model for transport of multiple chemical species.</article-title>
                    <source>

                        <italic toggle="yes">Am. J. Sci.</italic>
</source>
                    <year>1994</year>;<volume>294</volume>:<fpage>529</fpage>&#x2013;<lpage>592</lpage>.
                    <pub-id pub-id-type="doi">10.2475/ajs.294.5.529</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref24">
                <label>24</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Smith</surname>
                            <given-names>MM</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Hao</surname>
                            <given-names>Y</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Carroll</surname>
                            <given-names>SA</given-names>
                        </name>
</person-group>:
                    <article-title>Development and calibration of a reactive transport model for carbonate reservoir porosity and permeability changes based on CO2 core-flood experiments.</article-title>
                    <source>

                        <italic toggle="yes">Int. J. Greenh. Gas Con.</italic>
</source>
                    <year>2017</year>;<volume>57</volume>:<fpage>73</fpage>&#x2013;<lpage>88</lpage>.
                    <pub-id pub-id-type="doi">10.1016/j.ijggc.2016.12.004</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref25">
                <label>25</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Lichtner</surname>
                            <given-names>PC</given-names>
                        </name>
</person-group>:
                    <article-title>Continuum model for simultaneous chemical reactions and mass transport.</article-title>
                    <source>

                        <italic toggle="yes">Geochim. Cosmochim. Acta.</italic>
</source>
                    <year>1985</year>;<volume>49</volume>:<fpage>779</fpage>&#x2013;<lpage>800</lpage>.
                    <pub-id pub-id-type="doi">10.1016/0016-7037(85)90172-3</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref26">
                <label>26</label>
                <mixed-citation publication-type="other">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Fahmy</surname>
                            <given-names>MA</given-names>
                        </name>
</person-group>:
                    <article-title>Dataset and source code for A Transient Boundary Element Framework for Pressure Buildup, Injectivity Enhancement, and Reactive Permeability Evolution During CO2 Storage in Heterogeneous Carbonate Reservoirs.</article-title>
                    <source>

                        <italic toggle="yes">figshare.</italic>
</source>
                    <year>2026</year>.
                    <pub-id pub-id-type="doi">10.6084/m9.figshare.32385957</pub-id>
                </mixed-citation>
            </ref>
        </ref-list>
    </back>
</article>
