<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">GMD</journal-id><journal-title-group>
    <journal-title>Geoscientific Model Development</journal-title>
    <abbrev-journal-title abbrev-type="publisher">GMD</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Geosci. Model Dev.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">1991-9603</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/gmd-18-9687-2025</article-id><title-group><article-title>UpsFrac v1.0: an open-source software for integrating modelling and upscaling permeability for fractured porous rocks</article-title><alt-title>UpsFrac v1.0</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1 aff2">
          <name><surname>Chen</surname><given-names>Tao</given-names></name>
          <email>chentao9330@gmail.com</email>
        <ext-link>https://orcid.org/0000-0002-5439-7280</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Sheng</surname><given-names>Honghao</given-names></name>
          
        <ext-link>https://orcid.org/0009-0003-0987-2454</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Zhang</surname><given-names>Yu</given-names></name>
          
        <ext-link>https://orcid.org/0009-0001-6073-9822</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2 aff3">
          <name><surname>Kang</surname><given-names>Fengxin</given-names></name>
          
        </contrib>
        <aff id="aff1"><label>1</label><institution>College of Earth Science and Engineering, Shandong University of Science and Technology, No. 579 Qianwangang Road, Qingdao, 266590, China</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Shandong Key Laboratory of Geothermal Clean Energy, 272000 Jining, China</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Shandong Provincial Bureau of Geology &amp; Mineral Resources (SPBGM), No. 74 Lishan Road, Jinan, 250013, China</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Tao Chen (chentao9330@gmail.com)</corresp></author-notes><pub-date><day>5</day><month>December</month><year>2025</year></pub-date>
      
      <volume>18</volume>
      <issue>23</issue>
      <fpage>9687</fpage><lpage>9708</lpage>
      <history>
        <date date-type="received"><day>4</day><month>January</month><year>2025</year></date>
           <date date-type="rev-request"><day>24</day><month>March</month><year>2025</year></date>
           <date date-type="rev-recd"><day>1</day><month>October</month><year>2025</year></date>
           <date date-type="accepted"><day>13</day><month>November</month><year>2025</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2025 Tao Chen et al.</copyright-statement>
        <copyright-year>2025</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025.html">This article is available from https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025.html</self-uri><self-uri xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025.pdf">The full text article is available as a PDF file from https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e124">The efficient and accurate simulation of fluid flow and heat transport underground plays an important role in groundwater migration and geothermal resource prediction. Rock fractures are complex in geological settings, exhibiting multiple-scale properties with varied patterns under different geological conditions. Modelling and upscaling the permeability of fractured porous rocks are both important and sophisticated processes in numerical simulations. While existing tools like MRST offer upscaling capabilities, they often lack integrated workflows for automated uncertainty quantification and direct coupling between fractal-based DFM generation and flow-based upscaling within a single framework. In this study, we propose an integrated methodology for modelling and upscaling the permeability of fractured porous rocks and develop an open-source software, UpsFrac, to implement this approach. The software considers complex fracture geometries in discrete fracture models (DFM) that are created deterministically and stochastically. UpsFrac employs conforming grid-based DFM with explicit matrix-fracture coupling, ensuring higher accuracy for complex fracture networks. The software can characterize the complexity of fractured porous rocks, including power law (fractal) length distribution, correlations between fracture length and aperture, and the effects of rock matrix properties. The state-of-the-art upscaling method, the multiple-boundary fracture upscaling (MFU) method, is applied to calculate equivalent fracture permeability, which links the fine-scale discrete fracture model to the coarse-scale equivalent fracture model. The current implementation is 2D and MATLAB-based, built upon fracture modelling code ADFNE and reservoir simulation code MRST, which can easily run DFM ensembles for uncertainty analysis. The code is available in open repositories to encourage modelling and upscaling of complex fractured porous rocks, allowing users to develop their own routines within the current framework and benefiting a broader community.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>National Natural Science Foundation of China</funding-source>
<award-id>42002261</award-id>
<award-id>42072331</award-id>
<award-id>U1906209</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e136">Fractures exist widely in geological settings and are caused mainly by changes in geomechanical stress, chemical erosion, and thermal stress (Gu et al., 2020; Gudmundsson, 2011; McDermott and Kolditz, 2006; Molnar et al., 2007; Zoback et al., 2003). These fractures can significantly influence the movement of fluids through rock formations, affecting groundwater flow, contaminant transport, and the overall stability of geological formations (Cook et al., 2005; Marinos and Carter, 2018; Myers, 2012; Odling and Roden, 1997). In geothermal or petroleum reservoirs, fractures enhance the permeability and porosity, efficiently extracting heat and hydrocarbons (Ghassemi, 2012; Gong et al., 2021). Understanding the characteristics and behaviours of fractures is essential for reducing environmental risk, optimizing energy production, and implementing proper management strategies.</p>
      <p id="d2e139">Quantitative analysis of reservoirs is essential for predicting sustainable production in geothermal or hydrocarbon systems, which mainly involves data collection, fractured porous rock modelling, upscaling, numerical simulation, and history matching (Andrews et al., 2019; HosseiniMehr et al., 2022; Liu and Reynolds, 2019; Mejia et al., 2021; Neuman, 2005; Viswanathan et al., 2022). Discrete fractures occur at multiple scales, as illustrated in Fig. 1. Characterizing fractured porous media mainly involves gathering geological, hydrological, and geophysical data to obtain fracture and matrix properties within the reservoir, e.g., fracture orientation, length, density, and connectivity. Once the conceptual model of the fractured porous rock is built based on characterization, there are two primary numerical simulation approaches used to represent these fractures (Berre et al., 2019): the Discrete Fracture Model (DFM) or Discrete Fracture Network (DFN) and the Equivalent Fracture Model (EFM). The DFM approach explicitly represents each fracture within the reservoir, capturing the complexities of fluid flow and coupled processes. The EFM simplifies the representation by averaging the effects of fractures, making it computationally more efficient while still providing valuable insights. Upscaling techniques are required to calculate equivalent properties and construct a computationally efficient EFM based on the DFM. Accurate upscaling is particularly important for studying the heterogeneity and anisotropy of the reservoir and the existence of representative elementary volume (Wang et al., 2023), allowing for a better understanding of how these factors influence geothermal production (Gottron and Henk, 2021; Rajeh et al., 2019; Renard and Ababou, 2022). Modelling and upscaling discrete fracture models are prerequisites for the following numerical simulations and history-matching procedures.</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e144">Multiple-scale fractures in geological settings. Adapted from Cheng and Wong (2018), Palamakumbura et al. (2020), and Weismüller et al., (2020).</p></caption>
        <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f01.png"/>

      </fig>

      <p id="d2e154">Fractures are complex in their geometries and introduce uncertainty into models, primarily due to limited data availability and the influence of underground rock and fluid dynamics (MacQuarrie and Mayer, 2005; Srinivasan et al., 2018), which poses significant challenges in accurately characterizing and modelling fractured porous media. Numerous codes have been developed to advance the characterization and modelling of such media to address these issues. Hardebol and Bertotti (2013) developed DigiFract, a software solution that enables comprehensive fracture data collection from outcrops with greater efficiency than conventional surveying methods, enabling faster collection of larger and more accurate fracture datasets for better characterization of fractured rocks. Healy et al. (2017) developed FracPaQ, an open-source MATLAB<sup>™</sup> toolbox designed for quantifying fracture patterns from two-dimensional images at multiple scales, such as thin section micrographs, geological maps, outcrop or satellite images. Alghalandis (2017) developed an open-source software ADFNE for stochastic modelling of discrete fracture networks in two- and three-dimensional applications. ADFNE provides a platform for visualizing and analyzing fracture networks, offering a valuable tool in fractured rock mechanics. Welch et al. (2022) developed DFN Generator v2.0, an innovative tool that simulates natural fracture network evolution based on geomechanical principles rather than stochastic methods, enabling more realistic modelling of fracture networks at kilometer scales. Ovaskainen (2023) developed the Python package fractopo, which provides tools for data validation and analysis of fracture trace observations digitized from base maps like drone images of outcrops or digital elevation models.</p>
      <p id="d2e160">More recently, Borghini et al. (2024) introduced the Fracture Analyser, a simple and user-friendly Python tool, for the 2D analysis of fracture patterns in rock outcrops. The tool quantifies number, length, orientation, position, fracture density, etc., providing an efficient, flexible and accurate tool for the characterization and modelling of natural fractures. While several sophisticated tools exist for fractured porous rock modelling – such as PorePy (Keilegavlen et al., 2021) for discrete fracture-matrix simulations, DFNWorks (Hyman et al., 2015) for DFN flow and transport, SHEMAT-Suite (Keller et al., 2020) for coupled flow and heat transport, and OpenGeoSys (Kolditz et al., 2012) with its DFM modules, there remains a significant gap in linking such fracture geometric properties to the equivalent properties of the equivalent fracture model when doing numerical simulation. Few of these tools provide an integrated workflow that directly couples fractal DFM generation with flow-based permeability upscaling within a single framework. MRST (Wong et al., 2021) offers upscaling capabilities through embedded discrete fracture models (EDFM), but this approach uses non-conforming grids that may result in reduced accuracy for highly connected fracture networks. To the best of our knowledge, no open-source platform currently bridges fractal theory with practical permeability upscaling while enabling automated uncertainty quantification through ensemble-based analysis.</p>
      <p id="d2e163">UpsFrac advances the state-of-the-art by providing one of the first integrated open-source solution bridging fractal theory and practical permeability upscaling. The platform unifies four key components: (1) fractal DFN generation combining deterministic and stochastic models with power-law distributions (Corral and González, 2019) and physically-based aperture-length correlations, capturing multi-scale characteristics of fractured systems; (2) direct coupling architecture integrating DFM modelling with MFU (Chen et al., 2015) for permeability upscaling without file conversions, employing TPFA/MPFA schemes (Sandve et al., 2012) on conforming grids; (3) automated uncertainty quantification enabling efficient Monte Carlo analysis by streamlining workflows from fracture realization to equivalent properties calculation; and (4) an extensible MATLAB framework with modular architecture for incorporating new algorithms. This integrated approach streamlines uncertainty quantification, making large-scale stochastic analysis accessible to the research community. Table 1 positions UpsFrac relative to existing tools, highlighting its unique integrated workflow capability.</p>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e169">Comparison of UpsFrac with existing fractured porous rocks modelling tools<sup>2</sup>.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:colspec colnum="5" colname="col5" align="left"/>
     <oasis:colspec colnum="6" colname="col6" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Feature</oasis:entry>
         <oasis:entry colname="col2">UpsFrac</oasis:entry>
         <oasis:entry colname="col3">PorePy</oasis:entry>
         <oasis:entry colname="col4">DFNWorks</oasis:entry>
         <oasis:entry colname="col5">MRST</oasis:entry>
         <oasis:entry colname="col6">OpenGeoSys</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Programming Language</oasis:entry>
         <oasis:entry colname="col2">MATLAB</oasis:entry>
         <oasis:entry colname="col3">Python</oasis:entry>
         <oasis:entry colname="col4">C<inline-formula><mml:math id="M4" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula>/Python</oasis:entry>
         <oasis:entry colname="col5">MATLAB</oasis:entry>
         <oasis:entry colname="col6">C<inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Open Source</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">Yes</oasis:entry>
         <oasis:entry colname="col4">Yes</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">Yes</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Fracture modelling</oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4"/>
         <oasis:entry colname="col5"/>
         <oasis:entry colname="col6"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Stochastic DFN</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">Limited<sup>1</sup></oasis:entry>
         <oasis:entry colname="col4">Yes</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Power-law distribution</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">Limited<sup>1</sup></oasis:entry>
         <oasis:entry colname="col4">Yes</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Aperture-length correlation</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">Limited<sup>1</sup></oasis:entry>
         <oasis:entry colname="col4">Yes</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Flow Simulation</oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4"/>
         <oasis:entry colname="col5"/>
         <oasis:entry colname="col6"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">DFM flow scheme</oasis:entry>
         <oasis:entry colname="col2">TPFA/MPFA</oasis:entry>
         <oasis:entry colname="col3">MPFA/TPFA/MFD</oasis:entry>
         <oasis:entry colname="col4">FEM/TPFA</oasis:entry>
         <oasis:entry colname="col5">TPFA/MPFA</oasis:entry>
         <oasis:entry colname="col6">FEM</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Matrix-fracture coupling</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">Yes</oasis:entry>
         <oasis:entry colname="col4">Yes</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">Yes</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Fracture Upscaling</oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4"/>
         <oasis:entry colname="col5"/>
         <oasis:entry colname="col6"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Permeability upscaling</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">No</oasis:entry>
         <oasis:entry colname="col4">No</oasis:entry>
         <oasis:entry colname="col5">Yes</oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Integrated DFM-to-EFM workflow</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">No</oasis:entry>
         <oasis:entry colname="col4">No</oasis:entry>
         <oasis:entry colname="col5">Limited<sup>1</sup></oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Automated uncertainty quantification</oasis:entry>
         <oasis:entry colname="col2">Yes</oasis:entry>
         <oasis:entry colname="col3">No</oasis:entry>
         <oasis:entry colname="col4">No</oasis:entry>
         <oasis:entry colname="col5">No</oasis:entry>
         <oasis:entry colname="col6">No</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table><table-wrap-foot><p id="d2e181"><sup>1</sup> Requires manual scripting. <sup>2</sup> TPFA: Two-Point Flux Approximation; MPFA: Multi-Point Flux Approximation; MFD: Mimetic Finite Difference; FEM: Finite Element Method; DFN: Discrete Fracture Network; DFM: Discrete Fracture Model; EFM: Equivalent Fracture Model.</p></table-wrap-foot></table-wrap>

</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methodology and Theoretical Framework</title>
      <p id="d2e579">UpsFrac software has three main components: modelling fractured porous rocks, fractured porous media upscaling and equivalent permeability visualization. For the fractured porous rock modelling part, the Matlab code ADFNE (Alghalandis, 2017) is required to supply basic functions for creating discrete fracture networks. For the flow-based upscaling procedure, the Matlab code MRST (Lie, 2019) is applied to solve the flow equations in the discrete fracture model. The detailed workflow of UpsFrac is shown in Fig. 2.</p>

      <fig id="F2"><label>Figure 2</label><caption><p id="d2e584">Implementation workflow of UpsFrac showing script execution sequence and data flow.</p></caption>
        <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f02.png"/>

      </fig>

<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Modelling fractal fractured porous rock</title>
      <p id="d2e600">The two-dimensional domain should be defined, e.g., as a rectangle with dimensions <inline-formula><mml:math id="M10" display="inline"><mml:mrow><mml:mi>L</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M11" display="inline"><mml:mrow><mml:mi>L</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>, for modelling fractured porous rocks. The discrete fracture model can consider the discrete fracture network as well as the rock matrix. Fracture modelling includes both deterministic and stochastic approaches. After the fracture geometries are defined, the rest of the domain is filled with the rock matrix. The matrix can be characterized by permeability, porosity, etc.</p>
      <p id="d2e623">For deterministic fractures, two endpoints, A<inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and B<inline-formula><mml:math id="M13" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, and the fracture aperture should be defined for each fracture. Deterministic fractures are typically used for large-scale features such as faults or fractures with well-constrained geometries, which are important for modelling flow and heat transport.</p>
      <p id="d2e666">For stochastic fractures, the discrete fracture network is determined by different geometrical properties (Bonnet et al., 2001) , such as fracture length, aperture, position, and orientation (Xu and Dowd, 2010). The stochastic fracture is mainly based on the software ADFNE. Furthermore, UpsFrac is capable of modelling the truncated power-law length distribution which describes the fractal characteristics of natural fractures. The probability density function for the fracture length <inline-formula><mml:math id="M14" display="inline"><mml:mi>l</mml:mi></mml:math></inline-formula> can be written as (Corral and González, 2019; Hyman et al., 2016; Massart et al., 2010):

            <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M15" display="block"><mml:mrow><mml:mi>n</mml:mi><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mo>(</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:msup><mml:mo>)</mml:mo><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow><mml:mi>l</mml:mi></mml:mfrac></mml:mstyle><mml:msup><mml:mo>)</mml:mo><mml:mi mathvariant="italic">α</mml:mi></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are the lower and upper bound of the fracture length, <inline-formula><mml:math id="M18" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>, ranging from 1.3 to 3.5, is <inline-formula><mml:math id="M19" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> power-law exponent influenced by the growth properties of fractures (Bonnet et al., 2001).</p>
      <p id="d2e797">Furthermore, the fracture aperture,<inline-formula><mml:math id="M20" display="inline"><mml:mi mathvariant="normal">w</mml:mi></mml:math></inline-formula>, can be correlated to fracture length in UpsFrac by the following power law expression:

            <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M21" display="block"><mml:mrow><mml:mi>w</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:msup><mml:mi>l</mml:mi><mml:mi>D</mml:mi></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M22" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> is the coefficient related to mechanical properties of fractured rocks and <inline-formula><mml:math id="M23" display="inline"><mml:mi>D</mml:mi></mml:math></inline-formula> denotes the correlation exponent, which signifies the mechanical interaction among closely positioned fractures. <inline-formula><mml:math id="M24" display="inline"><mml:mi>D</mml:mi></mml:math></inline-formula> may vary from 0.5 to 1 resulting from observations in the field. <inline-formula><mml:math id="M25" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula> represents complex open-mode fractures with a constant fracture toughness (Klimczak et al., 2010; Olson, 2003), while <inline-formula><mml:math id="M26" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.0</mml:mn></mml:mrow></mml:math></inline-formula> occurs in faults and shear deformation bands under constant driving stress (Vermilye and Scholz, 1995).</p>
      <p id="d2e873">Users can use the ADFNE framework to create stochastic realizations for fracture orientation, density, and location. Furthermore, users can develop their models to create stochastic fractures. All the fracture geometric parameters are defined in the modelling framework. The generated fracture geometries are exported in a standardized format that ensures seamless integration with subsequent upscaling procedures.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Upscaling permeability for fractured porous media</title>
      <p id="d2e885">The upscaling procedure mainly involves finding the equivalent properties on coarse-scale grid blocks based on the information from fine-scale discrete fracture models. The first step is to divide the fracture domain into a Cartesian grid with <inline-formula><mml:math id="M27" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mi>x</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>×</mml:mo><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula> blocks. Each fracture is geometrically clipped at grid boundaries to identify its intersection segments within individual blocks. The fracture segments within each grid block are defined by their endpoint coordinates A (<inline-formula><mml:math id="M28" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>) and B (<inline-formula><mml:math id="M29" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula>) and aperture values (Fig. 3), providing the geometric and hydraulic parameters necessary for flow simulation. It should be noted that the dimension of the Cartesian grid is (<inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:mi>L</mml:mi><mml:mi>x</mml:mi><mml:mo>/</mml:mo><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula>) <inline-formula><mml:math id="M31" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> (<inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:mi>L</mml:mi><mml:mi>y</mml:mi><mml:mo>/</mml:mo><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>); accordingly, all fracture endpoints are constrained within the individual grid block boundaries.</p>

      <fig id="F3"><label>Figure 3</label><caption><p id="d2e979">Schematic diagram of a fracture represented by endpoints A and B.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f03.png"/>

        </fig>

      <p id="d2e988">Next, the clipped fractures within each Cartesian grid form local discrete fracture networks for numerical simulation. The TPFA or MPFA schemes (Sandve et al., 2012) are employed to accurately model fluid flow in these highly heterogeneous media. Each grid block maintains identical dimensions and matrix properties, with only fracture geometries varying between blocks. The mesh refinement for both fractures and the matrix is adapted based on the local fracture density and complexity to ensure numerical accuracy.</p>
      <p id="d2e992">Then, numerical simulations are conducted for each fractured grid block with pressure gradients applied along both <inline-formula><mml:math id="M33" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M34" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axes. The resulting flux distributions and pressure fields provide the necessary information for upscaling calculations. For grid blocks without fractures, the matrix permeability is directly assigned.</p>
      <p id="d2e1009">Subsequently, the MFU is applied to calculate the equivalent permeability for each grid block by using the previous simulation results. The MFU uses multiple boundary expressions to calculate flux. When the linear boundary conditions are applied along the <inline-formula><mml:math id="M35" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis, the flow rates along the <inline-formula><mml:math id="M36" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M37" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axes, <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M39" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, are calculated on multiple boundaries:

            <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M40" display="block"><mml:mtable class="array" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>y</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>x</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">l</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>x</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>x</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">l</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>x</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mo>∫</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mi mathvariant="normal">d</mml:mi><mml:mi>y</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M41" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are dimensions of the Cartesian grid in the <inline-formula><mml:math id="M43" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>- and <inline-formula><mml:math id="M44" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>-directions, <inline-formula><mml:math id="M45" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are unit vectors along the <inline-formula><mml:math id="M47" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M48" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axes, <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M51" display="inline"><mml:mrow><mml:msub><mml:mi>v</mml:mi><mml:mi mathvariant="normal">l</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denote the Darcy velocities on the right, upper, and lower boundaries.</p>
      <p id="d2e1369">Lastly, the coarse-scale equivalent permeability can be computed inversely based on the Darcy's law using the flux in the fine-scale discrete fracture model. The details of the MFU can be found in Chen et al. (2015). The resulting permeability tensor components (<inline-formula><mml:math id="M52" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M54" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M55" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) characterize the anisotropic flow behavior of each grid block.</p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Algorithmic Framework and Implementation</title>
      <p id="d2e1436">The upscaling workflow is designed as a modular framework consisting of five interconnected computational stages, each addressing specific mathematical and numerical challenges in fractured porous rocks characterization. Table 2 summarizes the computational stages, their mathematical formulations, and key parameters.</p>

<table-wrap id="T2" specific-use="star"><label>Table 2</label><caption><p id="d2e1442">Computational stages and mathematical framework of the UpsFrac workflow.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="justify" colwidth="3cm"/>
     <oasis:colspec colnum="2" colname="col2" align="justify" colwidth="4cm"/>
     <oasis:colspec colnum="3" colname="col3" align="justify" colwidth="4cm"/>
     <oasis:colspec colnum="4" colname="col4" align="justify" colwidth="4cm"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1" align="left">Computational Stage</oasis:entry>
         <oasis:entry colname="col2" align="left">Mathematical Framework</oasis:entry>
         <oasis:entry colname="col3" align="left">Key Parameters</oasis:entry>
         <oasis:entry colname="col4" align="left">Primary Functions</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1" align="left">DFM Generation</oasis:entry>
         <oasis:entry colname="col2" align="left">– Power-law distribution (Eq. 1)  – Aperture-length correlation (Eq. 2)</oasis:entry>
         <oasis:entry colname="col3" align="left">– num_real: number of DFM realizations  – <inline-formula><mml:math id="M56" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>: number of fractures  – <inline-formula><mml:math id="M57" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>: power-law exponent  – <inline-formula><mml:math id="M58" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M59" display="inline"><mml:mi>D</mml:mi></mml:math></inline-formula>: aperture coefficients</oasis:entry>
         <oasis:entry colname="col4" align="left">Generate stochastic fracture realizations</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1" align="left">Fracture-Coarse Grid Partitioning</oasis:entry>
         <oasis:entry colname="col2" align="left">– Geometric intersection algorithm  – Boundary clipping </oasis:entry>
         <oasis:entry colname="col3" align="left">– d<inline-formula><mml:math id="M60" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>, d<inline-formula><mml:math id="M61" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>: coarse grid dimensions  – tfrac: total fractures</oasis:entry>
         <oasis:entry colname="col4" align="left">Assign fractures to Cartesian blocks with boundary treatment</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1" align="left">Simulation Setup</oasis:entry>
         <oasis:entry colname="col2" align="left">– TPFA/MPFA discretization  – Cubic law</oasis:entry>
         <oasis:entry colname="col3" align="left">– Mesh refinement level  – <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>: matrix permeability</oasis:entry>
         <oasis:entry colname="col4" align="left">Create DFM for flow equations</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1" align="left">Flow Simulation</oasis:entry>
         <oasis:entry colname="col2" align="left">– Darcy's law  – Orthogonal pressure gradients</oasis:entry>
         <oasis:entry colname="col3" align="left">– Boundary pressures  – Solver type</oasis:entry>
         <oasis:entry colname="col4" align="left">Compute directional flux fields</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1" align="left">Upscaling Calculation</oasis:entry>
         <oasis:entry colname="col2" align="left">– multiple boundary approach (Eq. 3)  – Tensor assembly</oasis:entry>
         <oasis:entry colname="col3" align="left">– Flux decomposition angle  – Physical constraint checks</oasis:entry>
         <oasis:entry colname="col4" align="left">Calculate equivalent permeability tensor</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e1634">The framework incorporates key algorithmic features to ensure robust upscaling: (i) stochastic fracture generation with power-law length distributions and aperture-length correlations; (ii) geometric processing with boundary intersection detection and corner point adjustment to prevent mesh singularities; (iii) automatic mixed-dimension mesh generation integrating fracture and matrix elements; and (iv) batch processing of dual orthogonal flow problems. The upscaling employs directional flux decomposition through cosine transformations and validates permeability tensors to correct non-physical values from numerical errors. This modular architecture enables users to customize individual components – such as substituting alternative fracture generation models or numerical schemes – while maintaining framework compatibility, facilitating adaptation to diverse geological scenarios. The complete algorithmic pseudocode and implementation details are provided in Appendix A1, with computational modules and data structures documented in Appendix A2 for reproducibility.</p>
</sec>
<sec id="Ch1.S2.SS4">
  <label>2.4</label><title>Equivalent permeability visualization</title>
      <p id="d2e1645">The upscaled equivalent permeability tensors are analyzed and visualized to characterize flow behavior in fractured porous rocks. The resulting equivalent permeability is a full tensor form and is not inherently symmetric for fractured rocks (Chen et al., 2016; Zijl and Stam, 1992). When a symmetric tensor is required, a symmetric permeability tensor can be obtained by averaging the off-diagonal components. Using the upscaling results, the distribution of permeability tensor components (<inline-formula><mml:math id="M63" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) can be visualized to characterize spatial heterogeneity and anisotropy. In addition, the equivalent permeability tensor of each grid block can also be plotted as an ellipse to visualize the directional permeability. Furthermore, to analyze the statistical properties of the equivalent permeability, histogram analysis of the permeability components is performed, which is important for building stochastic fields of equivalent permeability (Fiori et al., 2015) and supporting uncertainty quantification in reservoir modelling.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Validation</title>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Fracture with power law length distribution</title>
      <p id="d2e1706">For modelling the fracture length with power law distribution, the cut-off power law is applied to create fracture length. For fractures with length <inline-formula><mml:math id="M66" display="inline"><mml:mi mathvariant="normal">l</mml:mi></mml:math></inline-formula> ranging from <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, the power law distribution can be expressed as in Eq. (1). The power law distribution for fracture length is created using the rndm_powerlaw function. The values of <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M70" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, power-law exponent <inline-formula><mml:math id="M71" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> and fracture number <inline-formula><mml:math id="M72" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> should be determined. For instance, when <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 10 m, <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1000 m, <inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 2.5, and <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:mi>N</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 500, the histogram of stochastically generated fracture length is plotted in Fig. 4, showing a typical power-law decay pattern with most fractures concentrated at smaller lengths. When fitting the stochastically generated data with the maximum likelihood estimation method, the fitted <inline-formula><mml:math id="M77" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> is 2.52, close to the input <inline-formula><mml:math id="M78" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> 2.5. The Kolmogorov-Smirnov statistic is 0.032, indicating that the software UpsFrac generates the data set and agrees with the fitted power-law distribution.</p>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e1838"><bold>(a)</bold> Histogram of power law distribution, <bold>(b)</bold> Cumulative Distribution Function (CDF) of created data and fitted power law.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f04.png"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Equivalent fracture permeability with varied aperture</title>
      <p id="d2e1860">To validate the accuracy of UpsFrac's upscaling methodology, we compare the calculated equivalent permeability against analytical solutions for a single fracture embedded in a low-permeability matrix. The validation setup consists of a 2 m <inline-formula><mml:math id="M79" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 m domain containing a 2 m horizontal fracture at <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mi>y</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1 m spanning the entire domain width (Fig. 5a). The matrix permeability <inline-formula><mml:math id="M81" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 9.87 <inline-formula><mml:math id="M82" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>, and the fracture permeability <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> varies based on aperture according to the cubic law. Linear pressure boundary conditions are applied on all four boundaries: left boundary (<inline-formula><mml:math id="M86" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0) with <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:mi>P</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 2 Pa, right boundary (<inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 2) with <inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:mi>P</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0 Pa, and top/bottom boundaries with <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:mi>P</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>-</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula> Pa, representing a unit gradient flow field.</p>

      <fig id="F5" specific-use="star"><label>Figure 5</label><caption><p id="d2e1992">Validation of upscaling methodology for a single horizontal fracture: <bold>(a)</bold> model geometry showing fracture and matrix configuration, and <bold>(b)</bold> comparison of upscaled and analytical equivalent permeability for varied aperture values.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f05.png"/>

        </fig>

      <p id="d2e2007">The analytical solution for equivalent permeability <inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> under parallel flow assumption between fracture and matrix is derived from flow equivalence principle (Snow, 1969). For the single-fracture case, this can be simplified to:

            <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M92" display="block"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>×</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi>w</mml:mi><mml:mo>/</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>+</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>×</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>w</mml:mi><mml:mo>/</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mi>w</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>/</mml:mo><mml:mn mathvariant="normal">12</mml:mn></mml:mrow></mml:math></inline-formula> based on the cubic law, and <inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula> is the domain height in the <inline-formula><mml:math id="M95" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>-direction (<inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>l</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> for this single-block validation case).</p>
      <p id="d2e2157">We tested the upscaling accuracy by varying fracture aperture with correlation exponent <inline-formula><mml:math id="M97" display="inline"><mml:mi>D</mml:mi></mml:math></inline-formula> from 0 to 1 (<inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.2 <inline-formula><mml:math id="M99" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−4</sup>). The equivalent permeability calculated by UpsFrac ranged from 0.7 <inline-formula><mml:math id="M101" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> to 5.8 <inline-formula><mml:math id="M103" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> m<sup>2</sup>, showing excellent agreement with the analytical solution (maximum relative error <inline-formula><mml:math id="M106" display="inline"><mml:mo>&lt;</mml:mo></mml:math></inline-formula> 1 %, Fig. 5b). The MFU enables accurate handling of fractures at arbitrary angles (Chen et al., 2015), critical for complex networks with non-aligned fractures. The modular framework allows easy incorporation of alternative aperture models, including rough fractures (see Sect. 5.1).</p>
</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Numerical accuracy and sensitivity analysis</title>
      <p id="d2e2259">The numerical performance of the upscaling methodology is evaluated through three complementary analyses: grid convergence studies to establish discretization requirements, parametric investigation of fracture-matrix permeability contrasts, and orientation-dependent error assessment. These analyses collectively demonstrate the method's accuracy and robustness for practical applications.</p>
<sec id="Ch1.S3.SS3.SSS1">
  <label>3.3.1</label><title>Grid convergence studies</title>
      <p id="d2e2269">To assess the numerical accuracy and grid sensitivity of the upscaling methodology, systematic convergence studies were performed on a representative 2D fractured domain containing a single horizontal fracture. The computational domain measures 2 m <inline-formula><mml:math id="M107" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 m with the fracture positioned at <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:mi>y</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1 m, spanning the entire domain width. The fracture aperture was set to 120 <inline-formula><mml:math id="M109" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> with a permeability of 1.2 <inline-formula><mml:math id="M110" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−9</sup> m<sup>2</sup> based on the cubic law, while the surrounding rock matrix has a permeability of 9.87 <inline-formula><mml:math id="M113" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup> . This configuration represents a fracture-matrix permeability contrast of approximately six orders of magnitude, representing highly conductive fracture systems commonly encountered in crystalline rocks and tight formations. Six progressively refined grids were employed with spacings ranging from <inline-formula><mml:math id="M116" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.0 m (2 <inline-formula><mml:math id="M117" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 grid) to <inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0.025 m (80 <inline-formula><mml:math id="M119" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 80 grid), enabling a comprehensive evaluation of grid-dependent effects on the computed equivalent permeability tensor (Fig. 6).</p>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e2393">Visualization of selected grid refinement levels showing the progressive mesh resolution from <bold>(a)</bold> <inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.0 m (2 <inline-formula><mml:math id="M121" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2), <bold>(b)</bold> <inline-formula><mml:math id="M122" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0.2 m (10 <inline-formula><mml:math id="M123" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10), to <bold>(c)</bold> <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0.05 m (40 <inline-formula><mml:math id="M125" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 40) with the horizontal fracture indicated in blue.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f06.png"/>

          </fig>

      <p id="d2e2463">The upscaling procedure demonstrates excellent convergence behavior with systematic grid refinement (Fig. 7a). The computed equivalent permeability values range from 7.2500 <inline-formula><mml:math id="M126" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−14</sup> m<sup>2</sup> for the coarsest grid to 7.2975 <inline-formula><mml:math id="M129" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−14</sup> m<sup>2</sup> for the finest resolution, converging monotonically. The relative errors reported here are computed against the finest grid solution (<inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0.025 m) as the reference to assess pure grid convergence behavior. Even the coarsest 2 <inline-formula><mml:math id="M133" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 grid achieves a relative error of only 0.65 %, while grids with <inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>≤</mml:mo></mml:mrow></mml:math></inline-formula> 0.2 m maintain errors below 0.13 %. The log-log error analysis (Fig. 7b) confirms rapid convergence with decreasing grid spacing. Notably, the <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:mi>h</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0.1 m grid (20 <inline-formula><mml:math id="M136" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 20) provides accuracy within 0.052 % while using only 6 % of the computational cells compared to the finest 80 <inline-formula><mml:math id="M137" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 80 grid. These results establish that grid spacings of 0.1–0.2 m offer optimal balance between computational efficiency and numerical accuracy for practical applications.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e2578">Grid convergence of equivalent permeability showing <bold>(a)</bold> permeability values; <bold>(b)</bold> relative error.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f07.png"/>

          </fig>

</sec>
<sec id="Ch1.S3.SS3.SSS2">
  <label>3.3.2</label><title>Fracture-Matrix permeability contrast</title>
      <p id="d2e2601">The influence of fracture-matrix permeability contrast on upscaling accuracy was investigated using a 2 m <inline-formula><mml:math id="M138" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 m domain with a single horizontal fracture. The matrix permeability, <inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, was fixed at 9.87 <inline-formula><mml:math id="M140" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>, while fracture aperture varied from 1.09 to 108.83 <inline-formula><mml:math id="M143" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, yielding fracture permeabilities, <inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, from 9.9 <inline-formula><mml:math id="M145" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−14</sup> to 9.87 <inline-formula><mml:math id="M147" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−10</sup> m<sup>2</sup>based on the cubic law. This creates permeability contrasts spanning four orders of magnitude (<inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mo>≈</mml:mo></mml:mrow></mml:math></inline-formula>10<sup>2</sup> to 10<sup>6</sup>), encompassing conditions from tight formations to highly conductive systems. The equivalent permeability tensor was computed using UpsFrac and compared against analytical solutions from parallel flow theory.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e2760">Comparison of upscaled equivalent permeability between UpsFrac numerical solutions and analytical reference values for different fracture-matrix permeability contrasts <bold>(a)</bold> comparison of equivalent permeability; <bold>(b)</bold> relative error analysis.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f08.png"/>

          </fig>

      <p id="d2e2775">Figure 8a demonstrates excellent accuracy across the entire contrast spectrum. The upscaled permeability values closely track analytical solutions, capturing the transition from matrix-dominated (<inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mo>&lt;</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>) to fracture-dominated (<inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">f</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mo>&gt;</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>) flow regimes. At low contrasts, equivalent permeability approximates the matrix value; at high contrasts, it reaches several orders of magnitude above the matrix. The numerical solutions consistently capture this nonlinear scaling with remarkable fidelity.</p>
      <p id="d2e2829">Figure 8b reveals consistently low relative errors across all contrasts, with a mean error of 3.40 %. The maximum error (5.11 %) occurs at low contrasts where fracture contribution is minimal, decreasing to <inline-formula><mml:math id="M155" display="inline"><mml:mo>&lt;</mml:mo></mml:math></inline-formula> 0.1 % for high-contrast systems. This trend confirms UpsFrac's suitability for highly fractured systems requiring accurate preferential flow representation. The robust performance across diverse contrasts validates the upscaling formulation for applications ranging from tight shales to karstified carbonates.</p>
</sec>
<sec id="Ch1.S3.SS3.SSS3">
  <label>3.3.3</label><title>Orientation-dependent error</title>
      <p id="d2e2847">To evaluate the sensitivity of the upscaling methodology to fracture orientation relative to the computational grid, a comprehensive analysis was conducted using a single fracture rotated at angles of 0, 30, 45, 60, and 90° within a 2 m <inline-formula><mml:math id="M156" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 m domain (Fig. 9). The fracture maintains a constant aperture of 120 <inline-formula><mml:math id="M157" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, embedded in a matrix with permeability of 9.87 <inline-formula><mml:math id="M158" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>. For each orientation, the full permeability tensor was computed using UpsFrac and compared against analytical solutions obtained through coordinate transformation of the reference configuration. For a fracture with azimuth <inline-formula><mml:math id="M161" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>, the equivalent permeability tensor can be written as:

              <disp-formula id="Ch1.E5" content-type="numbered"><label>5</label><mml:math id="M162" display="block"><mml:mrow><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mi>k</mml:mi><mml:mfenced open="(" close=")"><mml:mi mathvariant="italic">θ</mml:mi></mml:mfenced></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center center"><mml:mtr><mml:mtd><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mi>cos⁡</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mi>sin⁡</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="italic">θ</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>⋅</mml:mo><mml:mi>sin⁡</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>⋅</mml:mo><mml:mi>sin⁡</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mi>sin⁡</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mi>cos⁡</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mi mathvariant="italic">θ</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>

            where <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M164" display="inline"><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> are the equivalent permeability tensor components in the <inline-formula><mml:math id="M165" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>- and <inline-formula><mml:math id="M166" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>-directions for a horizontal fracture (<inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0°), respectively. Here, <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>x</mml:mi><mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> can be calculated from Eq. (4), and <inline-formula><mml:math id="M169" display="inline"><mml:mrow><mml:msubsup><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo>*</mml:mo></mml:msubsup><mml:mo>≈</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> since a single fracture aligned with the <inline-formula><mml:math id="M170" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis has negligible impact on the <inline-formula><mml:math id="M171" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>-direction permeability.</p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e3208">Representative fracture orientations at <bold>(a)</bold> 0°, <bold>(b)</bold> 30°, and <bold>(c)</bold> 60°.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f09.png"/>

          </fig>

      <p id="d2e3226">Figure 10a demonstrates the evolution of permeability tensor components with fracture orientation. The diagonal components <inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> exhibit sinusoidal variation between fracture-dominated (7.3 <inline-formula><mml:math id="M174" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−14</sup> m<sup>2</sup>) and matrix-dominated (9.87 <inline-formula><mml:math id="M177" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>) directions, while <inline-formula><mml:math id="M180" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> peaks at 45° where fracture contribution is equally distributed between the x- and y-directions. The UpsFrac solutions closely match analytical curves for this single fracture configuration, achieving excellent agreement with mean relative errors of 1.10 %, 3.15 %, and 0.07 % for <inline-formula><mml:math id="M181" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M182" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M183" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, respectively. The accurate calculation of off-diagonal components is particularly important when sparse fractures are not aligned with the coordinate axes.</p>

      <fig id="F10" specific-use="star"><label>Figure 10</label><caption><p id="d2e3374">Orientation-dependent validation of upscaled permeability: <bold>(a)</bold> permeability tensor components as functions of fracture orientation angle; <bold>(b)</bold> relative errors between UpsFrac numerical solutions and analytical reference values.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f10.png"/>

          </fig>

      <p id="d2e3389">Figure 10b reveals the maximum error (7.67 %) occurs at 45° orientation. At 45° orientation, fracture endpoints naturally terminate near domain corner nodes, creating ambiguity in boundary condition assignment. To maintain numerical stability and avoid singular matrix configurations, slight geometric adjustments are required to displace fracture endpoints away from exact corner positions. Despite this localized issue, overall accuracy remains excellent with errors below 5 % for most orientations. These results validate that UpsFrac reliably handles arbitrarily oriented fractures without grid alignment, essential for modelling complex natural fracture networks.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Software application</title>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Discrete fracture modelling and upscaling application</title>
      <p id="d2e3409">The modelling and upscaling procedure is applied to a real-scale problem by using UpsFrac. The model domain is 1000 m <inline-formula><mml:math id="M184" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 1000 m. The domain contains both large-scale fractures (faults) and small-scale fractures, referring to the measured data in the field (Massart et al., 2010). The fracture network contains both deterministic fractures and stochastically generated fractures. The deterministic fractures include three fractures with an aperture of 0.001 m. The stochastic fracture length follows a power law distribution, with <inline-formula><mml:math id="M185" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">min</mml:mi></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula>10 m, <inline-formula><mml:math id="M186" display="inline"><mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1000 m, <inline-formula><mml:math id="M187" display="inline"><mml:mrow><mml:mi>N</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 200, and <inline-formula><mml:math id="M188" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 2.5. Fracture orientation follows Fisher distribution with <inline-formula><mml:math id="M189" display="inline"><mml:mrow><mml:mi mathvariant="italic">κ</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0, meaning the fracture orientation is randomly distributed. Fracture location follows uniform distribution. In this study, the aperture is correlated with fracture length with <inline-formula><mml:math id="M190" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> of 2.3 <inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M192" display="inline"><mml:mi>D</mml:mi></mml:math></inline-formula> of 0.5 according to the field data (Schultz and Soliva, 2012). The above geometric data are input parameters for the fracture modelling module. The rock matrix permeability is homogeneous and isotropic with 9.87 <inline-formula><mml:math id="M193" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>. One realization of the discrete fracture model is shown in Fig. 11.</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e3537">Discrete fracture model generated by UpsFrac. Blue denotes a low aperture, red denotes a high aperture, and the dashed line denotes the grid blocks on a coarse scale.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f11.png"/>

        </fig>

      <p id="d2e3546">The grid block size for upscaling is 100 m <inline-formula><mml:math id="M196" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 100 m, which is the input parameter for the grid subdivision module. Each grid contains 3–9 fractures clipped by the grid boundaries. For the numerical simulation of each grid, the unstructured mesh size for the rock matrix is 5 m, and for fracture, it is 3.3 m. After simulating fluid flow in all grid blocks, the required information for upscaling is calculated. Through the upscaling calculation module, the equivalent permeability for each grid block is calculated.</p>
      <p id="d2e3557">The resulting equivalent permeability distribution is visualized in Fig. 12. The equivalent permeability distribution shows that it is highly correlated with the fracture network geometries of fractures (Fig. 12). The anisotropy in equivalent permeability components is controlled by the fracture orientation distribution.</p>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e3562">Equivalent permeability distribution of grid blocks on a coarse scale.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f12.png"/>

        </fig>

      <p id="d2e3571">The histograms of different components of equivalent permeability are plotted in Fig. 13. They show that all components <inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> follow a log-normal distribution. For <inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, it can be positive and negative; we use the absolute value here for plotting. For <inline-formula><mml:math id="M201" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, the shapes of the histograms are similar. The results indicate that even though the spatial distribution is different, the statistical properties of <inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are similar. This is mainly due to the random distribution of fracture orientations, i.e., without a preferable orientation. For <inline-formula><mml:math id="M205" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, it is slightly lower than <inline-formula><mml:math id="M206" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>; this is consistent with the positive-definite nature of the permeability tensor (Lang et al., 2014).</p>

      <fig id="F13" specific-use="star"><label>Figure 13</label><caption><p id="d2e3731">Histograms of upscaled equivalent permeability components.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f13.png"/>

        </fig>

      <p id="d2e3740">The permeability tensor can be visualized using the ellipses. The permeability ellipses for all grid blocks are plotted in Fig. 14. They show that the long axes of an ellipse follow the fracture orientations (Fig. 11), especially for the grid with a few large fractures having high permeability (e.g., the grid block near the lower left corner of the model). The consistency between the upscaled permeability tensor ellipses and the fracture network geometries indicate that the upscaling code UpsFrac yields reasonable and accurate results. These results can be used to characterize the permeability of the fractured porous rocks and serve as input to equivalent fracture models.</p>

      <fig id="F14" specific-use="star"><label>Figure 14</label><caption><p id="d2e3746">Ellipse of equivalent permeability tensor for the model. Ellipses are normalized within each subplot to enhance visualization of tensor orientation rather than absolute permeability magnitude.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f14.png"/>

        </fig>

</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Comparison between upscaled EFM and DFM for fractured geothermal systems</title>
      <p id="d2e3763">A two-dimensional fractured geothermal system model was developed to evaluate the computational performance and accuracy of the EFM upscaling approach (Fig. 15). The model simulates a 500 m <inline-formula><mml:math id="M208" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 500 m geothermal reservoir with a doublet injection-production well configuration (150 m spacing), where cold water at 40 °C is continuously injected at the injection well and produced at the production well, both at 1 L s<sup>−1</sup>. The domain is initialized at 80 °C and 20 MPa, with no-flow and adiabatic boundary conditions representing sealed cap and base rocks. The rock matrix has typical geothermal reservoir properties: permeability of 9.87 <inline-formula><mml:math id="M210" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>, 1 % porosity, density of 2600 kg m<sup>−3</sup>, specific heat of 950 J (kg K)<sup>−1</sup>, and thermal conductivity of 3.0 W (m K)<sup>−1</sup>. The fractures feature a 500 <inline-formula><mml:math id="M216" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> mean aperture with 100 % porosity. Fluid properties include density of 1000 kg m<sup>−3</sup>, viscosity of 0.001 Pa s, specific heat of 4200 J (kg K)<sup>−1</sup>, and thermal conductivity of 0.65 W (m K)<sup>−1</sup>, representing typical values for fractured geothermal systems.</p>

      <fig id="F15"><label>Figure 15</label><caption><p id="d2e3899">Conceptual model of the field-scale geothermal doublet system with 500 m <inline-formula><mml:math id="M220" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 500 m domain and 150 m well spacing.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f15.png"/>

        </fig>

      <p id="d2e3915">The DFM and EFM models were constructed using different meshing strategies to enable direct performance comparison (Fig. 16). For the DFM model, GMSH was employed to generate an unstructured mesh with 13 414 nodes and 30 006 elements, comprising 3820 line elements for the fracture network and 26 186 triangular elements for the rock matrix. In contrast, the EFM model utilized a structured 20 <inline-formula><mml:math id="M221" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 20 grid with uniform cell dimensions of 25 m  <inline-formula><mml:math id="M222" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 25 m, resulting in 400 grid cells. The upscaling procedure using UpsFrac yielded homogeneous equivalent permeabilities of <inline-formula><mml:math id="M223" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>≈</mml:mo></mml:mrow></mml:math></inline-formula> 4.116 <inline-formula><mml:math id="M224" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> m<sup>2</sup> and <inline-formula><mml:math id="M227" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>≈</mml:mo></mml:mrow></mml:math></inline-formula> 4.100 <inline-formula><mml:math id="M228" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> m<sup>2</sup>, with zero off-diagonal terms (<inline-formula><mml:math id="M231" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0), indicating isotropic permeability characteristics and alignment of the principal permeability directions with the coordinate axes.</p>

      <fig id="F16" specific-use="star"><label>Figure 16</label><caption><p id="d2e4050">Mesh discretization for <bold>(a)</bold> DFM model with 13 414 nodes and <bold>(b)</bold> EFM 20 <inline-formula><mml:math id="M232" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 20 structured grid.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f16.png"/>

        </fig>

      <p id="d2e4072">Both EFM and DFM were employed to solve the coupled flow and heat transfer processes using SHEMAT-Suite and OpenGeoSys, respectively. The validation results demonstrate excellent agreement between the upscaled EFM model and the high-fidelity DFM benchmark (Fig. 17). Temperature breakthrough curves at the production well over 30 years show mean relative error of approximately 0.2 %, achieved with only 400 coarse grid cells compared to the 13 414-node DFM discretization, confirming the upscaling approach's high accuracy and robustness.</p>

      <fig id="F17"><label>Figure 17</label><caption><p id="d2e4077">Temperature breakthrough curves comparing DFM reference and EFM upscaled models over 30 years.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f17.png"/>

        </fig>

      <p id="d2e4086">The computational performance analysis reveals substantial efficiency gains of the EFM approach (Fig. 18). The EFM upscaling process consists of four stages: Fracture-Coarse Grid Partitioning (0.186 s, 0.13 MB), Simulation Setup (28.659 s, 3.02 MB), Flow Simulation (71.245 s, 13.03 MB), and Upscaling Calculation (49.650 s, 0.67 MB), totaling 149.74 s for the upscaling process. The subsequent EFM simulation requires 540 s and 7.48 MB. In contrast, DFM using OpenGeoSys requires meshing (21.45 s, 139.41 MB) and simulation (2081 s, 75.30 MB). The complete EFM workflow required only 689.74 s versus 2102.45 s for DFM – a 67 % reduction. Total memory usage decreased from 214.71 to 24.33 MB – an 89 % reduction. These benchmarks were conducted on an Intel Core i5-9300H system with 8 GB RAM. The results confirm that the EFM upscaling methodology achieves both computational efficiency and numerical accuracy (<inline-formula><mml:math id="M233" display="inline"><mml:mo lspace="0mm">∼</mml:mo></mml:math></inline-formula> 0.2 % relative error), making it particularly suitable for large-scale fractured reservoir simulations. However, accuracy may decrease for complex fracture networks with highly irregular geometries or dense intersection patterns, where validation against fine-scale DFM solutions or field data becomes essential.</p>

      <fig id="F18" specific-use="star"><label>Figure 18</label><caption><p id="d2e4098">Computational performance comparison showing runtime and memory usage for DFM and EFM simulations.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f18.png"/>

        </fig>

</sec>
<sec id="Ch1.S4.SS3">
  <label>4.3</label><title>Stochastic Ensemble Analysis and Uncertainty Quantification of Upscaled Permeability</title>
      <p id="d2e4115">To quantify uncertainty in upscaled properties arising from stochastic DFN realizations, we performed Monte Carlo analysis with 100 independent realizations using the same geometric parameters, matrix properties, and grid configuration as described in Sect. 4.1. The ensemble analysis reveals distinct distribution characteristics for the upscaled permeability tensor components. The diagonal components (<inline-formula><mml:math id="M234" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M235" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) exhibit approximately log-normal distributions as confirmed by Q–Q plot analysis, while the off-diagonal component (<inline-formula><mml:math id="M236" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> shows normal distribution characteristics (Fig. 19). The mean upscaled permeability values across all realizations and grid cells are <inline-formula><mml:math id="M237" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.334 <inline-formula><mml:math id="M238" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> m<sup>2</sup>, <inline-formula><mml:math id="M241" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.325 <inline-formula><mml:math id="M242" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> m<sup>2</sup>, and <inline-formula><mml:math id="M245" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 6.685 <inline-formula><mml:math id="M246" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup> . The coefficients of variation reveal moderate variability for diagonal components (<inline-formula><mml:math id="M249" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>: CV <inline-formula><mml:math id="M250" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0.889, <inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>: CV <inline-formula><mml:math id="M252" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0.910) and significantly higher uncertainty for the off-diagonal component (<inline-formula><mml:math id="M253" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>: CV <inline-formula><mml:math id="M254" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 106.288), primarily due to its very small mean value (6.685 <inline-formula><mml:math id="M255" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−16</sup> m<sup>2</sup>) relative to its standard deviation (7.105 <inline-formula><mml:math id="M258" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−14</sup> m<sup>2</sup>), resulting in an amplified coefficient of variation.</p>

      <fig id="F19" specific-use="star"><label>Figure 19</label><caption><p id="d2e4419">Distribution characteristics of upscaled permeability tensor components: <bold>(a, c, e)</bold> histograms and <bold>(b, d, f)</bold> Q–Q plots for Kxx, Kyy, and Kxy respectively.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f19.png"/>

        </fig>

      <p id="d2e4434">Convergence analysis demonstrates robust statistical behavior of the ensemble approach. The mean values of diagonal permeability, <inline-formula><mml:math id="M261" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M262" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, components stabilize after approximately 50–60 realizations, achieving relative errors below 5 % compared to the full 100-realization ensemble, all converging to 1.33 <inline-formula><mml:math id="M263" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10<sup>−13</sup> (Fig. 20). The off-diagonal component <inline-formula><mml:math id="M265" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> converges to near-zero values. Due to the lack of pronounced directional preference in the fracture orientation distribution, and additionally, the relatively small magnitude of <inline-formula><mml:math id="M266" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> values leads to slightly larger convergence relative errors compared to <inline-formula><mml:math id="M267" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M268" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. This convergence pattern indicates that 50 realizations provide sufficient statistical reliability for practical uncertainty quantification, offering guidance for balancing computational cost with accuracy requirements. The rapid convergence of ensemble statistics validates the Monte Carlo approach for capturing the stochastic variability inherent in fractured porous rocks.</p>

      <fig id="F20" specific-use="star"><label>Figure 20</label><caption><p id="d2e4544">Convergence of ensemble mean values for upscaled permeability components: <bold>(a)</bold> <inline-formula><mml:math id="M269" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <bold>(b)</bold> <inline-formula><mml:math id="M270" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <bold>(c)</bold> <inline-formula><mml:math id="M271" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f20.png"/>

        </fig>

      <p id="d2e4605">The computational performance analysis reveals that the complete workflow – from fracture network generation to permeability upscaling – requires approximately 108 min total computational time for 100 realizations (1.08 min per realization) with peak memory usage of 8.2 GB. These benchmarks were conducted on a workstation equipped with an Intel Xeon W-2102 CPU @ 2.90 GHz and 16 GB RAM, running 64-bit Windows 7. The workflow consists of five stages: DFM Generation (0.19 s/realization), Fracture-Coarse Grid Partitioning (0.93 s/realization), Simulation Setup (1.43 s/realization), Flow Simulation (40.4 s/realization), and Upscaling Calculation (17.9 s/realization). Flow Simulation dominates the computational cost, accounting for 65 % of total runtime, which is expected given the need to solve pressure equations for accurate effective permeability calculations. This ensemble-based uncertainty quantification demonstrates UpsFrac's capability to efficiently perform Monte Carlo workflows for stochastic DFN analysis, transforming complex discrete fracture systems into stochastic continuum representations while preserving uncertainty information critical for risk assessment in subsurface applications.</p>
</sec>
</sec>
<sec id="Ch1.S5">
  <label>5</label><title>Limitations and future developments</title>
<sec id="Ch1.S5.SS1">
  <label>5.1</label><title>Impact of constant aperture assumption on fracture roughness modelling</title>
      <p id="d2e4625">The constant aperture assumption, while computationally efficient and widely adopted in discrete fracture modelling, represents a significant simplification of natural fracture geometries. Real fractures exhibit complex aperture distributions arising from surface roughness, stress-induced deformation, and mineral precipitation or dissolution processes (Li et al., 2022; Xue et al., 2022). To quantify the impact of this simplification, we conducted a systematic analysis comparing upscaled permeabilities computed using constant versus variable aperture distributions. The test case employs a single horizontal fracture configuration identical to the validation case (Fig. 9, <inline-formula><mml:math id="M272" display="inline"><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0°) with a 2 m <inline-formula><mml:math id="M273" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 m domain and mean aperture <inline-formula><mml:math id="M274" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.2 <inline-formula><mml:math id="M275" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula>  10<sup>−4</sup> m. Figure 21a demonstrates the aperture variability along a 2 m fracture for different roughness levels characterized by coefficients of variation (CV) ranging from 0.1 to 0.5, representing mild to severe aperture heterogeneity. The corresponding statistical distributions of these aperture profiles are shown in Fig. 21b through box plots, revealing increasing spread and skewness with higher CV values.</p>

      <fig id="F21" specific-use="star"><label>Figure 21</label><caption><p id="d2e4679">Effects of aperture variability: <bold>(a)</bold> aperture profiles along a 2 m fracture (CV <inline-formula><mml:math id="M277" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0.1–0.5, mean aperture <inline-formula><mml:math id="M278" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 1.2 <inline-formula><mml:math id="M279" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 10–4 m); <bold>(b)</bold> aperture statistics (box: IQR; red line: median; whiskers: 1.5 <inline-formula><mml:math id="M280" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> IQR; crosses: outliers); <bold>(c)</bold> equivalent permeability vs. CV (relative to constant aperture); <bold>(d)</bold> relative error of the constant-aperture assumption.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/18/9687/2025/gmd-18-9687-2025-f21.png"/>

        </fig>

      <p id="d2e4735">Our analysis exposes fundamental limitations of the constant-aperture assumption. Although it enables tractable simulations, accuracy degrades markedly for naturally rough fractures. As illustrated in Fig. 21c, the upscaled permeability in the x-direction (<inline-formula><mml:math id="M281" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> decreases substantially with increasing roughness relative to the constant aperture case. Errors increase nonlinearly with roughness. Figure 21d quantifies this degradation, showing relative errors rising from negligible (<inline-formula><mml:math id="M282" display="inline"><mml:mo lspace="0mm">&lt;</mml:mo></mml:math></inline-formula> 5 %) when CV <inline-formula><mml:math id="M283" display="inline"><mml:mo>&lt;</mml:mo></mml:math></inline-formula> 0.2 to severe (<inline-formula><mml:math id="M284" display="inline"><mml:mo lspace="0mm">&gt;</mml:mo></mml:math></inline-formula> 60 %) when CV <inline-formula><mml:math id="M285" display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> 0.4. This occurs because the arithmetic-mean aperture cannot capture flow channeling, and the cubic law disproportionately amplifies contributions from wider segments while constrictions strongly restrict flow.</p>
      <p id="d2e4783">These findings have direct implications for reservoir characterization and model selection. For preliminary assessments or systems dominated by smooth, fresh tensile fractures in crystalline rocks or well-sorted sedimentary formations (CV <inline-formula><mml:math id="M286" display="inline"><mml:mo>&lt;</mml:mo></mml:math></inline-formula> 0.2), where Fig. 21d indicates errors remain below 5 %, the constant-aperture model offers an efficient and sufficiently accurate approximation.In contrast, for highly rough fractures such as sheared zones and mineralized joints, explicitly representing aperture variability is essential for reliable predictions. UpsFrac's modular architecture readily accommodates this extension: supporting rough fractures requires only augmenting fracture property storage and revising local flow calculations, while preserving the existing upscaling framework.</p>
</sec>
<sec id="Ch1.S5.SS2">
  <label>5.2</label><title>Three-dimensional model extension roadmap</title>
      <p id="d2e4801">While the current 2D implementation provides a robust foundation for method validation and pedagogical purposes, extending to 3D is essential for industrial applications. To address industrial needs, we outline a comprehensive roadmap for extending UpsFrac to 3D. Specifically, we will: (i) generalize DFN generation from 2D line fractures to 3D planar polygonal or triangulated fracture surfaces with realistic size, orientation, aperture, and connectivity distributions; (ii) extend MFU to 3D with robust treatment of fracture intersections, complex fracture–matrix exchange, anisotropy, and boundary conditions; and (iii) mitigate the substantially higher computational cost through algorithmic accelerations, including adaptive/octree meshing, hierarchical fracture-surface meshing, algebraic multigrid preconditioning, domain decomposition with parallel CPU/GPU solvers, and graph-based pruning of disconnected subnetworks. Building on our prior 3D upscaling experience (Chen et al., 2018) and established platforms such as ADFNE and MRST, we anticipate that the integration is technically feasible, though computational challenges primarily arise from the cubic scaling of 3D problems – where doubling the grid resolution increases computational cost eightfold. This provides a clear path toward evaluating industrial applicability in complex reservoir systems.</p>
</sec>
<sec id="Ch1.S5.SS3">
  <label>5.3</label><title>Accelerating flow-based upscaling</title>
      <p id="d2e4812">UpsFrac implements a theoretically rigorous flow-based upscaling approach. In practice, the upscaling step requires numerically solving flow in a discrete fracture model, where numerical stability must be considered for complex geometries. Achieving stable and accurate solutions may require adjusting parameters such as the mesh resolution in the fractures and the rock matrix. To prevent failed runs and facilitate correction, grid blocks that contain no fractures or that fail to converge are logged for review; by reviewing these logs, users can refine global template inputs or adjust settings for specific blocks. In the future, data-driven surrogates trained on high-fidelity DFN simulations (e.g., Almajid and Abu-Al-Saud, 2022; Yan et al., 2024b) may augment or replace direct solves to further improve robustness and efficiency.</p>
</sec>
<sec id="Ch1.S5.SS4">
  <label>5.4</label><title>Integration of alternative upscaling methods</title>
      <p id="d2e4823">The UpsFrac software applies MFU for calculating equivalent permeability, which is accurate as a flow-based method; other fast analytical upscaling methods (Ebigbo et al., 2016; Oda, 1985), such as Effective Medium Theory (EMT), can also easily be implemented within the UpsFrac framework to upscale permeability in fractured porous rocks. The software can be further developed to broaden its applicability and improve user convenience. Key areas for improvement include the user interface, software stability, and compatibility with other reservoir simulation tools. This can be achieved through standardization of data formats and the development of API interfaces, which will facilitate broader adoption in industrial settings (Yan et al., 2024a).</p>
</sec>
</sec>
<sec id="Ch1.S6" sec-type="conclusions">
  <label>6</label><title>Conclusions</title>
      <p id="d2e4835">The paper describes a new free and open-source software UpsFrac for modelling and upscaling the permeability of two-dimensional fractured porous rocks with fractal characteristics. The software provides a methodology for creating multiple-scale fractures with varied apertures using both deterministic and stochastic approaches. The complex relations between fracture length, fracture density, and fracture aperture can be easily implemented in the framework of UpsFrac. The software applies the state-of-the-art upscaling method, MFU, which is a flow-based upscaling approach based on the TPFA or MPFA schemes and provides accurate and robust upscaling results.</p>
      <p id="d2e4838">UpsFrac addresses a critical gap in modelling of fractured porous rocks by providing an integrated open-source platform that seamlessly connects fractal fracture characterization with practical upscaling workflows. The software's key innovations include automated uncertainty quantification through Monte Carlo ensembles, direct DFM-to-EFM coupling without intermediate file conversions, and a modular architecture enabling algorithm substitution. Validation demonstrates exceptional accuracy across diverse geological conditions while achieving significant computational efficiency gains.</p>
      <p id="d2e4841">The software provides a flexible toolbox for modelling and analyzing fractured porous rocks with complex fracture geometries. The discrete fracture models can be upscaled to calculate equivalent permeability. The software is useful for investigating the heterogeneity and anisotropy of equivalent fracture permeability for fractured porous rocks. The upscaled permeability tensors can serve as input parameters in the equivalent fracture models. All the code and application scripts are available for download.</p>
</sec>

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

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title/>
<sec id="App1.Ch1.S1.SS1">
  <label>A1</label><title>Core Upscaling Algorithm</title><boxed-text content-type="algorithm" position="float" id="App1.Ch1.S1.Prog1" specific-use="star"><label>Algorithm A1</label><caption><p id="d2e4862">UpsFrac Equivalent Permeability Upscaling.</p></caption><disp-quote content-type="algorithmic" specific-use="numbering{1}"><list>

    <list-item>

      <p id="d2e4869" specific-use="STATE"><bold>Main input:</bold></p>

      <p id="d2e4873" specific-use="STATE">– Domain parameters: <inline-formula><mml:math id="M287" display="inline"><mml:mi>L</mml:mi></mml:math></inline-formula> (domain size), <inline-formula><mml:math id="M288" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M289" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula> (grid numbers), <inline-formula><mml:math id="M290" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula> (grid block size)</p>

      <p id="d2e4911" specific-use="STATE">– DFN parameters: <inline-formula><mml:math id="M291" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> (fracture number), l_min, l_max, <inline-formula><mml:math id="M292" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> (power-law exponent)</p>

      <p id="d2e4929" specific-use="STATE">– Matrix permeability: k_matrix</p>

      <p id="d2e4933" specific-use="STATE">– Number of realizations: num_real</p>
            </list-item>

    <list-item>

      <p id="d2e4940" specific-use="STATE"><bold>Output:</bold></p>

      <p id="d2e4944" specific-use="STATE">– Equivalent permeability tensor K_eq[<inline-formula><mml:math id="M293" display="inline"><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:math></inline-formula>] for each grid block</p>
            </list-item>

    <list-item>

      <p id="d2e4963" specific-use="STATE"><bold>Main procedure:</bold></p>

      <p id="d2e4967" specific-use="STATE">1. DFN Generation (DiscreteFractureModeling.m):</p>

      <p id="d2e4971" specific-use="STATE">FOR each realization <inline-formula><mml:math id="M294" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> to num_real:</p>

      <p id="d2e4987" specific-use="STATE">Generate <inline-formula><mml:math id="M295" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> fractures with:</p>

      <p id="d2e4998" specific-use="STATE">– Length <inline-formula><mml:math id="M296" display="inline"><mml:mrow><mml:mi>l</mml:mi><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo><mml:mo>∼</mml:mo></mml:mrow></mml:math></inline-formula> power_law(l_min, l_max, <inline-formula><mml:math id="M297" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>)</p>

      <p id="d2e5026" specific-use="STATE">– Aperture <inline-formula><mml:math id="M298" display="inline"><mml:mrow><mml:mi>a</mml:mi><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>×</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>l</mml:mi><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:msup><mml:mo>]</mml:mo><mml:mi>D</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula></p>

      <p id="d2e5062" specific-use="STATE">– Random position (<inline-formula><mml:math id="M299" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>) and orientation <inline-formula><mml:math id="M300" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula></p>

      <p id="d2e5084" specific-use="STATE">SAVE fracture geometries to frac_0_r.txt</p>

      <p id="d2e5088" specific-use="STATE">2. Grid Discretization (SubDivideToGrid.m):</p>

      <p id="d2e5092" specific-use="STATE">FOR each fracture <inline-formula><mml:math id="M301" display="inline"><mml:mi>f</mml:mi></mml:math></inline-formula> in DFN:</p>

      <p id="d2e5103" specific-use="STATE">FOR each grid block (<inline-formula><mml:math id="M302" display="inline"><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:math></inline-formula>) where <inline-formula><mml:math id="M303" display="inline"><mml:mrow><mml:mi>i</mml:mi><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mi>x</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M304" display="inline"><mml:mrow><mml:mi>j</mml:mi><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mi>y</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>:</p>

      <p id="d2e5164" specific-use="STATE">IF fracture <inline-formula><mml:math id="M305" display="inline"><mml:mi>f</mml:mi></mml:math></inline-formula> intersects grid block (<inline-formula><mml:math id="M306" display="inline"><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:math></inline-formula>):</p>

      <p id="d2e5187" specific-use="STATE">Clip fracture to grid boundaries</p>

      <p id="d2e5191" specific-use="STATE">Adjust corner points by move_ratio to avoid meshing issues</p>

      <p id="d2e5195" specific-use="STATE">STORE clipped segment in resu_0_r.txt with:</p>

      <p id="d2e5199" specific-use="STATE">– Grid ID <inline-formula><mml:math id="M307" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mi>j</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:mo>×</mml:mo><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula></p>

      <p id="d2e5230" specific-use="STATE">– Endpoints (<inline-formula><mml:math id="M308" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5263" specific-use="STATE">– Aperture <inline-formula><mml:math id="M309" display="inline"><mml:mi>w</mml:mi></mml:math></inline-formula></p>

      <p id="d2e5273" specific-use="STATE">3. DFM Simulation Setup (DiscreteFractureInput.m):</p>

      <p id="d2e5277" specific-use="STATE">FOR each grid block <inline-formula><mml:math id="M310" display="inline"><mml:mi>g</mml:mi></mml:math></inline-formula> with fractures:</p>

      <p id="d2e5288" specific-use="STATE">Create MRST input file s[g].m:</p>

      <p id="d2e5292" specific-use="STATE">– Define unstructured triangular mesh</p>

      <p id="d2e5296" specific-use="STATE">– Embed fractures as lower-dimensional elements</p>

      <p id="d2e5301" specific-use="STATE">– Set matrix permeability <inline-formula><mml:math id="M311" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> k_matrix</p>

      <p id="d2e5312" specific-use="STATE">– Set fracture permeability <inline-formula><mml:math id="M312" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mi>w</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>/</mml:mo><mml:mn mathvariant="normal">12</mml:mn></mml:mrow></mml:math></inline-formula></p>

      <p id="d2e5332" specific-use="STATE">4. Flow Simulation (GridDFMSimu.m):</p>

      <p id="d2e5336" specific-use="STATE">FOR each grid block <inline-formula><mml:math id="M313" display="inline"><mml:mi>g</mml:mi></mml:math></inline-formula>:</p>

      <p id="d2e5347" specific-use="STATE">FOR each pressure gradient direction <inline-formula><mml:math id="M314" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>:</p>

      <p id="d2e5371" specific-use="STATE">Apply linear boundary conditions:</p>

      <p id="d2e5376" specific-use="STATE">IF <inline-formula><mml:math id="M315" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:mo>=</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula>: p_left <inline-formula><mml:math id="M316" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> L, p_right <inline-formula><mml:math id="M317" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0, p_top/bottom <inline-formula><mml:math id="M318" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> linear</p>

      <p id="d2e5413" specific-use="STATE">IF <inline-formula><mml:math id="M319" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:mo>=</mml:mo><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>: p_top <inline-formula><mml:math id="M320" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> L, p_bottom <inline-formula><mml:math id="M321" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0, p_left/right <inline-formula><mml:math id="M322" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> linear</p>

      <p id="d2e5450" specific-use="STATE">Solve flow equation: <inline-formula><mml:math id="M323" display="inline"><mml:mrow><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>⋅</mml:mo><mml:mo>(</mml:mo><mml:mi>k</mml:mi><mml:mi mathvariant="normal">∇</mml:mi><mml:mi>p</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> 0</p>

      <p id="d2e5476" specific-use="STATE">SAVE boundary fluxes <inline-formula><mml:math id="M324" display="inline"><mml:mi>q</mml:mi></mml:math></inline-formula>[boundary,<inline-formula><mml:math id="M325" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula>]</p>

      <p id="d2e5494" specific-use="STATE">5. Equivalent Permeability Calculation (CalcuKeq.m):</p>

      <p id="d2e5498" specific-use="STATE">FOR each grid block <inline-formula><mml:math id="M326" display="inline"><mml:mi>g</mml:mi></mml:math></inline-formula>:</p>

      <p id="d2e5510" specific-use="STATE">FOR each boundary <inline-formula><mml:math id="M327" display="inline"><mml:mrow><mml:mi>b</mml:mi><mml:mo>∈</mml:mo></mml:mrow></mml:math></inline-formula> {left, right, top, bottom}:</p>

      <p id="d2e5524" specific-use="STATE">Calculate total flux:</p>

      <p id="d2e5528" specific-use="STATE">q_total[<inline-formula><mml:math id="M328" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula>] <inline-formula><mml:math id="M329" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:mi mathvariant="normal">Σ</mml:mi></mml:mrow></mml:math></inline-formula> (q_matrix[<inline-formula><mml:math id="M330" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula>] <inline-formula><mml:math id="M331" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula> q_fracture[<inline-formula><mml:math id="M332" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula>] <inline-formula><mml:math id="M333" display="inline"><mml:mrow><mml:mo>⋅</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5581" specific-use="STATE">where <inline-formula><mml:math id="M334" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:math></inline-formula> normal vector</p>

      <p id="d2e5595" specific-use="STATE">Compute K_eq components using Darcy's law:</p>

      <p id="d2e5599" specific-use="STATE">From <inline-formula><mml:math id="M335" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>-direction flow:</p>

      <p id="d2e5611" specific-use="STATE">K_xx <inline-formula><mml:math id="M336" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> q_x,out <inline-formula><mml:math id="M337" display="inline"><mml:mrow><mml:mo>×</mml:mo><mml:mi>d</mml:mi><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>p</mml:mi><mml:mo>×</mml:mo><mml:mi>A</mml:mi></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5644" specific-use="STATE">K_yx <inline-formula><mml:math id="M338" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> q_y,out <inline-formula><mml:math id="M339" display="inline"><mml:mrow><mml:mo>×</mml:mo><mml:mi>d</mml:mi><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>p</mml:mi><mml:mo>×</mml:mo><mml:mi>A</mml:mi></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5677" specific-use="STATE">From <inline-formula><mml:math id="M340" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>-direction flow:</p>

      <p id="d2e5688" specific-use="STATE">K_xy <inline-formula><mml:math id="M341" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> q_x,out <inline-formula><mml:math id="M342" display="inline"><mml:mrow><mml:mo>×</mml:mo><mml:mi>d</mml:mi><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>p</mml:mi><mml:mo>×</mml:mo><mml:mi>A</mml:mi></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5721" specific-use="STATE">K_yy <inline-formula><mml:math id="M343" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> q_y,out <inline-formula><mml:math id="M344" display="inline"><mml:mrow><mml:mo>×</mml:mo><mml:mi>d</mml:mi><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>p</mml:mi><mml:mo>×</mml:mo><mml:mi>A</mml:mi></mml:mrow></mml:math></inline-formula>)</p>

      <p id="d2e5754" specific-use="STATE">Validate and correct:</p>

      <p id="d2e5759" specific-use="STATE">IF K_ii <inline-formula><mml:math id="M345" display="inline"><mml:mo>≤</mml:mo></mml:math></inline-formula> 0 OR K_ii <inline-formula><mml:math id="M346" display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> threshold:</p>

      <p id="d2e5777" specific-use="STATE">K_ii <inline-formula><mml:math id="M347" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> k_matrix</p>

      <p id="d2e5788" specific-use="STATE">IF <inline-formula><mml:math id="M348" display="inline"><mml:mo>|</mml:mo></mml:math></inline-formula> K_ij <inline-formula><mml:math id="M349" display="inline"><mml:mo>|</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M350" display="inline"><mml:mo>&lt;</mml:mo></mml:math></inline-formula> k_matrix:</p>

      <p id="d2e5813" specific-use="STATE">K_ij <inline-formula><mml:math id="M351" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0</p>

      <p id="d2e5824" specific-use="STATE">SAVE K_eq to epcomf.txt</p>
            </list-item>
          </list></disp-quote></boxed-text>
</sec>
<sec id="App1.Ch1.S1.SS2">
  <label>A2</label><title>Implementation Structure</title>

<table-wrap id="TA1"><label>Table A1</label><caption><p id="d2e5843">Computational modules and their implementation.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Module</oasis:entry>
         <oasis:entry colname="col2">Implementation File</oasis:entry>
         <oasis:entry colname="col3">Primary Function</oasis:entry>
         <oasis:entry colname="col4">Key Parameters</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">DFN Generation</oasis:entry>
         <oasis:entry colname="col2">DiscreteFractureModeling.m</oasis:entry>
         <oasis:entry colname="col3">Generate stochastic fracture networks</oasis:entry>
         <oasis:entry colname="col4">num_real, <inline-formula><mml:math id="M352" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M353" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>, l_min, l_max</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Grid Partitioning</oasis:entry>
         <oasis:entry colname="col2">SubDivideToGrid.m</oasis:entry>
         <oasis:entry colname="col3">Clip and assign fractures to grid blocks</oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M354" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M355" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>, move_ratio</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Simulation Setup</oasis:entry>
         <oasis:entry colname="col2">DiscreteFractureInput.m</oasis:entry>
         <oasis:entry colname="col3">Create MRST-compatible DFM models</oasis:entry>
         <oasis:entry colname="col4">mesh_size, k_matrix</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Flow Solver</oasis:entry>
         <oasis:entry colname="col2">GridDFMSimu.m</oasis:entry>
         <oasis:entry colname="col3">Execute batch flow simulations</oasis:entry>
         <oasis:entry colname="col4">solver_type (TPFA/MPFA)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Upscaling</oasis:entry>
         <oasis:entry colname="col2">CalcuKeq.m</oasis:entry>
         <oasis:entry colname="col3">Calculate equivalent permeability tensors</oasis:entry>
         <oasis:entry colname="col4">tolerance, validation_threshold</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<table-wrap id="TA2"><label>Table A2</label><caption><p id="d2e5993">Data structure specifications.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Data Type</oasis:entry>
         <oasis:entry colname="col2">Format</oasis:entry>
         <oasis:entry colname="col3">Structure</oasis:entry>
         <oasis:entry colname="col4">Description</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Fracture geometry</oasis:entry>
         <oasis:entry colname="col2">ASCII text</oasis:entry>
         <oasis:entry colname="col3">5 columns: <inline-formula><mml:math id="M356" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M357" display="inline"><mml:mrow><mml:mi>y</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M358" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M359" display="inline"><mml:mrow><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula>, aperture</oasis:entry>
         <oasis:entry colname="col4">Initial fracture network definition</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Grid-fracture mapping</oasis:entry>
         <oasis:entry colname="col2">ASCII text</oasis:entry>
         <oasis:entry colname="col3">grid_ID, fracture segments</oasis:entry>
         <oasis:entry colname="col4">Fractures assigned to each grid block</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Flux output</oasis:entry>
         <oasis:entry colname="col2">ASCII text</oasis:entry>
         <oasis:entry colname="col3">boundary_ID, flux_x, flux_y</oasis:entry>
         <oasis:entry colname="col4">Computed boundary fluxes</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Permeability tensor</oasis:entry>
         <oasis:entry colname="col2">ASCII text</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M360" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M361" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M362" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M363" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">Final upscaled properties</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

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

      <p id="d2e6190">The UpsFrac code is available on GitHub (<uri>https://github.com/chentao9330/UpsFrac</uri>, last access: 30 September 2025), and version 1.0 is archived on Zenodo (Chen, 2025; <ext-link xlink:href="https://doi.org/10.5281/zenodo.14674083" ext-link-type="DOI">10.5281/zenodo.14674083</ext-link>). The UpsFrac code is published under the GNU General Public License v3.0 (GPL-3.0 license). All input data in this study can be reproduced following the parameters and procedures described in this paper. The example input file used in this study can be found in the example folder of UpsFrac.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e6202">TC: Conceptualization, Writing – original draft, Software, Investigation, Formal analysis, Funding acquisition. HS: Writing – review &amp; editing, Methodology, Validation, Visualization. YZ: Writing – review &amp; editing, Software, Data curation. FK: Writing – review &amp; editing.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

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

      <p id="d2e6214">Publisher’s note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. While Copernicus Publications makes every effort to include appropriate place names, the final responsibility lies with the authors. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e6220">We sincerely thank Mohammad Sabah and one anonymous reviewer for their valuable comments and constructive suggestions on the manuscript. Their careful reading and insightful feedback have substantially improved the quality of this paper. We would like to extend our gratitude to the open source software developers related to ADFNE and MRST. We thank Anozie Ebigbo for valuable discussions and constructive suggestions on the manuscript.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e6229">This research has been supported by the National Natural Science Foundation of China (grant nos. 42002261, 42072331, and U1906209) and the Taishan Scholar Foundation (grant no. tstp20230626).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

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

      <ref id="bib1.bib1"><label>1</label><mixed-citation>Alghalandis, Y. F.: ADFNE: Open source software for discrete fracture network engineering, two and three dimensional applications, Comput. Geosci., 102, 1–11, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2017.02.002" ext-link-type="DOI">10.1016/j.cageo.2017.02.002</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bib2"><label>2</label><mixed-citation>Almajid, M. M. and Abu-Al-Saud, M. O.: Prediction of porous media fluid flow using physics informed neural networks, J. Petrol. Sci. Eng., 208, 109205, <ext-link xlink:href="https://doi.org/10.1016/j.petrol.2021.109205" ext-link-type="DOI">10.1016/j.petrol.2021.109205</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib3"><label>3</label><mixed-citation>Andrews, B. J., Roberts, J. J., Shipton, Z. K., Bigi, S., Tartarello, M. C., and Johnson, G.: How do we see fractures? Quantifying subjective bias in fracture data collection, Solid Earth, 10, 487–516, <ext-link xlink:href="https://doi.org/10.5194/se-10-487-2019" ext-link-type="DOI">10.5194/se-10-487-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib4"><label>4</label><mixed-citation>Berre, I., Doster, F., and Keilegavlen, E.: Flow in fractured porous media: a review of conceptual models and discretization approaches, Transp. Porous Media, 130, 215–236, <ext-link xlink:href="https://doi.org/10.1007/s11242-018-1171-6" ext-link-type="DOI">10.1007/s11242-018-1171-6</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib5"><label>5</label><mixed-citation>Bonnet, E., Bour, O., Odling, N. E., Davy, P., Main, I., Cowie, P., and Berkowitz, B.: Scaling of fracture systems in geological media, Rev. Geophys., 39, 347–383, <ext-link xlink:href="https://doi.org/10.1029/1999RG000074" ext-link-type="DOI">10.1029/1999RG000074</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bib6"><label>6</label><mixed-citation>Borghini, L., Striglio, G., Bacchiani, G., La Bruna, V., Balsamo, F., Bonini, L., and Bezerra, F. H. R.: Fracture analyser: a Python toolbox for the 2D analysis of fracture patterns, Ital. J. Geosci., 143, 314–328, <ext-link xlink:href="https://doi.org/10.3301/ijg.2024.16" ext-link-type="DOI">10.3301/ijg.2024.16</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bib7"><label>7</label><mixed-citation>Chen, T.: Open-source software for integrating modelling and upscaling permeability for fractured porous rocks: UpsFrac, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.14674083" ext-link-type="DOI">10.5281/zenodo.14674083</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bib8"><label>8</label><mixed-citation>Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Büsing, H.: Modeling anisotropic flow and heat transport by using mimetic finite differences, Adv. Water Resour., 94, 441–456, <ext-link xlink:href="https://doi.org/10.1016/j.advwatres.2016.06.006" ext-link-type="DOI">10.1016/j.advwatres.2016.06.006</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bib9"><label>9</label><mixed-citation>Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Mottaghy, D.: A new upscaling method for fractured porous media, Adv. Water Resour., 80, 60–68, <ext-link xlink:href="https://doi.org/10.1016/j.advwatres.2015.03.009" ext-link-type="DOI">10.1016/j.advwatres.2015.03.009</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib10"><label>10</label><mixed-citation>Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Hiller, T.: Upscaling permeability for three-dimensional fractured porous rocks with the multiple boundary method, Hydrogeol. J., 26, 1903–1916, <ext-link xlink:href="https://doi.org/10.1007/s10040-018-1744-z" ext-link-type="DOI">10.1007/s10040-018-1744-z</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib11"><label>11</label><mixed-citation>Cheng, Y. and Wong, L. N. Y.: Microscopic characterization of tensile and shear fracturing in progressive failure in marble, J. Geophys. Res. Solid Earth, 123, 204–225, <ext-link xlink:href="https://doi.org/10.1002/2017JB014581" ext-link-type="DOI">10.1002/2017JB014581</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib12"><label>12</label><mixed-citation>Cook, P. G., Love, A. J., Robinson, N. I., and Simmons, C. T.: Groundwater ages in fractured rock aquifers, J. Hydrol., 308, 284–301, <ext-link xlink:href="https://doi.org/10.1016/j.jhydrol.2004.11.005" ext-link-type="DOI">10.1016/j.jhydrol.2004.11.005</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib13"><label>13</label><mixed-citation>Corral, Á. and González, Á.: Power law size distributions in geoscience revisited, Earth Space Sci., 6, 673–697, <ext-link xlink:href="https://doi.org/10.1029/2018EA000479" ext-link-type="DOI">10.1029/2018EA000479</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib14"><label>14</label><mixed-citation>Ebigbo, A., Lang, P. S., Paluszny, A., and Zimmerman, R. W.: Inclusion-based effective medium models for the permeability of a 3D fractured rock mass, Transport Porous Med., 113, 137–158, <ext-link xlink:href="https://doi.org/10.1007/s11242-016-0685-z" ext-link-type="DOI">10.1007/s11242-016-0685-z</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bib15"><label>15</label><mixed-citation>Fiori, A., Bellin, A., Cvetkovic, V., De Barros, F. P. J., and Dagan, G.: Stochastic modeling of solute transport in aquifers: From heterogeneity characterization to risk analysis, Water Resour. Res., 51, 6622–6648, <ext-link xlink:href="https://doi.org/10.1002/2015WR017388" ext-link-type="DOI">10.1002/2015WR017388</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib16"><label>16</label><mixed-citation>Ghassemi, A.: A review of some rock mechanics issues in geothermal reservoir development, Geotech. Geol. Eng., 30, 647–664, <ext-link xlink:href="https://doi.org/10.1007/s10706-012-9508-3" ext-link-type="DOI">10.1007/s10706-012-9508-3</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib17"><label>17</label><mixed-citation>Gong, L., Wang, J., Gao, S., Fu, X., Liu, B., Miao, F., Zhou, X., and Meng, Q.: Characterization, controlling factors and evolution of fracture effectiveness in shale oil reservoirs, J. Petrol. Sci. Eng., 203, 108655, <ext-link xlink:href="https://doi.org/10.1016/j.petrol.2021.108655" ext-link-type="DOI">10.1016/j.petrol.2021.108655</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib18"><label>18</label><mixed-citation>Gottron, D. and Henk, A.: Upscaling of fractured rock mass properties – An example comparing Discrete Fracture Network (DFN) modeling and empirical relations based on engineering rock mass classifications, Eng. Geol., 294, 106382, <ext-link xlink:href="https://doi.org/10.1016/j.enggeo.2021.106382" ext-link-type="DOI">10.1016/j.enggeo.2021.106382</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib19"><label>19</label><mixed-citation>Gu, X., Rempe, D. M., Dietrich, W. E., West, A. J., Lin, T.-C., Jin, L., and Brantley, S. L.: Chemical reactions, porosity, and microfracturing in shale during weathering: The effect of erosion rate, Geochim. Cosmochim. Ac., 269, 63–100, <ext-link xlink:href="https://doi.org/10.1016/j.gca.2019.09.044" ext-link-type="DOI">10.1016/j.gca.2019.09.044</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib20"><label>20</label><mixed-citation>Gudmundsson, A.: Rock fractures in geological processes, Cambridge University Press, Cambridge, UK, <ext-link xlink:href="https://doi.org/10.1017/CBO9780511975684" ext-link-type="DOI">10.1017/CBO9780511975684</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bib21"><label>21</label><mixed-citation>Hardebol, N. J. and Bertotti, G.: DigiFract: A software and data model implementation for flexible acquisition and processing of fracture data from outcrops, Comput. Geosci., 54, 326–336, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2012.10.021" ext-link-type="DOI">10.1016/j.cageo.2012.10.021</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bib22"><label>22</label><mixed-citation>Healy, D., Rizzo, R. E., Cornwell, D. G., Farrell, N. J. C., Watkins, H., Timms, N. E., Gomez-Rivas, E., and Smith, M.: FracPaQ: A MATLAB toolbox for the quantification of fracture patterns, J. Struct. Geol., 95, 1–16, <ext-link xlink:href="https://doi.org/10.1016/j.jsg.2016.12.003" ext-link-type="DOI">10.1016/j.jsg.2016.12.003</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bib23"><label>23</label><mixed-citation>HosseiniMehr, M., Tomala, J. P., Vuik, C., Kobaisi, M. A., and Hajibeygi, H.: Projection-based embedded discrete fracture model (pEDFM) for flow and heat transfer in real-field geological formations with hexahedral corner-point grids, Adv. Water Resour., 159, 104091, <ext-link xlink:href="https://doi.org/10.1016/j.advwatres.2021.104091" ext-link-type="DOI">10.1016/j.advwatres.2021.104091</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib24"><label>24</label><mixed-citation>Hyman, J. D., Karra, S., Makedonska, N., Gable, C. W., Painter, S. L., and Viswanathan, H. S.: dfnWorks: A discrete fracture network framework for modeling subsurface flow and transport, Comput. Geosci., 84, 10–19, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2015.08.001" ext-link-type="DOI">10.1016/j.cageo.2015.08.001</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bib25"><label>25</label><mixed-citation>Hyman, J. D., Aldrich, G., Viswanathan, H., Makedonska, N., and Karra, S.: Fracture size and transmissivity correlations: Implications for transport simulations in sparse three-dimensional discrete fracture networks following a truncated power law distribution of fracture size, Water Resour. Res., 52, 6472–6489, <ext-link xlink:href="https://doi.org/10.1002/2016wr018806" ext-link-type="DOI">10.1002/2016wr018806</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bib26"><label>26</label><mixed-citation>Keilegavlen, E., Berge, R., Fumagalli, A., Starnoni, M., Stefansson, I., Varela, J., and Berre, I.: PorePy: an open-source software for simulation of multiphysics processes in fractured porous media, Comput. Geosci., 25, 243–265, <ext-link xlink:href="https://doi.org/10.1007/s10596-020-10002-5" ext-link-type="DOI">10.1007/s10596-020-10002-5</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib27"><label>27</label><mixed-citation>Keller, J., Rath, V., Bruckmann, J., Mottaghy, D., Clauser, C., Wolf, A., Seidler, R., Bücker, H. M., and Klitzsch, N.: SHEMAT-Suite: An open-source code for simulating flow, heat and species transport in porous media, SoftwareX, 12, 100533, <ext-link xlink:href="https://doi.org/10.1016/j.softx.2020.100533" ext-link-type="DOI">10.1016/j.softx.2020.100533</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib28"><label>28</label><mixed-citation>Klimczak, C., Schultz, R. A., Parashar, R., and Reeves, D. M.: Cubic law with aperture-length correlation: implications for network scale fluid flow, Hydrogeol. J., 18, 851–862, <ext-link xlink:href="https://doi.org/10.1007/s10040-009-0572-6" ext-link-type="DOI">10.1007/s10040-009-0572-6</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bib29"><label>29</label><mixed-citation>Kolditz, O., Bauer, S., Bilke, L., Böttcher, N., Delfs, J. O., Fischer, T., Görke, U. J., Kalbacher, T., Kosakowski, G., McDermott, C. I., Park, C. H., Radu, F., Rink, K., Shao, H., Shao, H. B., Sun, F., Sun, Y. Y., Singh, A. K., Taron, J., Walther, M., Wang, W., Watanabe, N., Wu, Y., Xie, M., Xu, W., and Zehner, B.: OpenGeoSys: an open-source initiative for numerical simulation of thermo-hydro-mechanical/chemical (THM/C) processes in porous media, Environ. Earth Sci., 67, 589–599, <ext-link xlink:href="https://doi.org/10.1007/s12665-012-1546-x" ext-link-type="DOI">10.1007/s12665-012-1546-x</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib30"><label>30</label><mixed-citation>Lang, P. S., Paluszny, A., and Zimmerman, R. W.: Permeability tensor of three-dimensional fractured porous rock and a comparison to trace map predictions, J. Geophys. Res. Solid Earth., 119, 6288–6307, <ext-link xlink:href="https://doi.org/10.1002/2014jb011027" ext-link-type="DOI">10.1002/2014jb011027</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bib31"><label>31</label><mixed-citation>Li, Z., Sherman, C. S., Reagan, M. T., Moridis, G. J., and Morris, J. P.: Effects of heterogeneous fracture aperture on multiphase production from shale reservoirs, Transport Porous Med., 144, 797–823, <ext-link xlink:href="https://doi.org/10.1007/s11242-022-01841-0" ext-link-type="DOI">10.1007/s11242-022-01841-0</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib32"><label>32</label><mixed-citation>Lie, K. A.: An introduction to reservoir simulation using MATLAB/GNU Octave: user guide for the MATLAB Reservoir Simulation Toolbox (MRST), Cambridge University Press, Cambridge, UK, <ext-link xlink:href="https://doi.org/10.1017/9781108591416" ext-link-type="DOI">10.1017/9781108591416</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib33"><label>33</label><mixed-citation>Liu, Z. and Reynolds, A. C.: History matching an unconventional reservoir with a complex fracture network, SPE Reservoir Simulation Conference, Galveston, Texas, USA, April 2019, <ext-link xlink:href="https://doi.org/10.2118/193921-MS" ext-link-type="DOI">10.2118/193921-MS</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib34"><label>34</label><mixed-citation>MacQuarrie, K. T. B. and Mayer, K. U.: Reactive transport modeling in fractured rock: A state-of-the-science review, Earth-Sci. Rev., 72, 189–227, <ext-link xlink:href="https://doi.org/10.1016/j.earscirev.2005.07.003" ext-link-type="DOI">10.1016/j.earscirev.2005.07.003</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib35"><label>35</label><mixed-citation>Marinos, V. and Carter, T. G.: Maintaining geological reality in application of GSI for design of engineering structures in rock, Eng. Geol., 239, 282–297, <ext-link xlink:href="https://doi.org/10.1016/j.enggeo.2018.03.022" ext-link-type="DOI">10.1016/j.enggeo.2018.03.022</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib36"><label>36</label><mixed-citation>Massart, B., Paillet, M., Henrion, V., Sausse, J., Dezayes, C., Genter, A., and Bisset, A.: Fracture characterization and stochastic modeling of the granitic basement in the HDR Soultz Project (France), World Geothermal Congress 2010, Bali, Indonesia, April 2010, 7 pp., <uri>https://brgm.hal.science/hal-00496923v1</uri> (last access: 28 November 2025), 2010.</mixed-citation></ref>
      <ref id="bib1.bib37"><label>37</label><mixed-citation>McDermott, C. and Kolditz, O.: Geomechanical model for fracture deformation under hydraulic, mechanical and thermal loads, Hydrogeol. J., 14, 485–498, <ext-link xlink:href="https://doi.org/10.1007/s10040-005-0455-4" ext-link-type="DOI">10.1007/s10040-005-0455-4</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bib38"><label>38</label><mixed-citation>Mejia, C., Roehl, D., Rueda, J., and Quevedo, R.: A new approach for modeling three-dimensional fractured reservoirs with embedded complex fracture networks, Comput. Geotech., 130, 103928, <ext-link xlink:href="https://doi.org/10.1016/j.compgeo.2020.103928" ext-link-type="DOI">10.1016/j.compgeo.2020.103928</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib39"><label>39</label><mixed-citation>Molnar, P., Anderson, R. S., and Anderson, S. P.: Tectonics, fracturing of rock, and erosion, J. Geophys. Res. Earth Surf., 112, F03014, <ext-link xlink:href="https://doi.org/10.1029/2005JF000433" ext-link-type="DOI">10.1029/2005JF000433</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bib40"><label>40</label><mixed-citation>Myers, T.: Potential contaminant pathways from hydraulically fractured shale to aquifers, Groundwater, 50, 872–882, <ext-link xlink:href="https://doi.org/10.1111/j.1745-6584.2012.00933.x" ext-link-type="DOI">10.1111/j.1745-6584.2012.00933.x</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib41"><label>41</label><mixed-citation>Neuman, S. P.: Trends, prospects and challenges in quantifying flow and transport through fractured rocks, Hydrogeol. J., 13, 124–147, <ext-link xlink:href="https://doi.org/10.1007/s10040-004-0397-2" ext-link-type="DOI">10.1007/s10040-004-0397-2</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bib42"><label>42</label><mixed-citation>Oda, M.: Permeability tensor for discontinuous rock masses, Géotechnique, 35, 483–495, <ext-link xlink:href="https://doi.org/10.1680/geot.1985.35.4.483" ext-link-type="DOI">10.1680/geot.1985.35.4.483</ext-link>, 1985.</mixed-citation></ref>
      <ref id="bib1.bib43"><label>43</label><mixed-citation>Odling, N. E. and Roden, J. E.: Contaminant transport in fractured rocks with significant matrix permeability, using natural fracture geometries, J. Contam. Hydrol., 27, 263–283, <ext-link xlink:href="https://doi.org/10.1016/S0169-7722(96)00096-4" ext-link-type="DOI">10.1016/S0169-7722(96)00096-4</ext-link>, 1997.</mixed-citation></ref>
      <ref id="bib1.bib44"><label>44</label><mixed-citation>Olson, J. E.: Sublinear scaling of fracture aperture versus length: An exception or the rule?, J. Geophys. Res. Solid Earth., 108, 2413, <ext-link xlink:href="https://doi.org/10.1029/2001JB000419" ext-link-type="DOI">10.1029/2001JB000419</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bib45"><label>45</label><mixed-citation>Ovaskainen, N.: fractopo: A Python package for fracture network analysis, J. Open Source Softw., 8, 5300, <ext-link xlink:href="https://doi.org/10.21105/joss.05300" ext-link-type="DOI">10.21105/joss.05300</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib46"><label>46</label><mixed-citation>Palamakumbura, R., Krabbendam, M., Whitbread, K., and Arnhardt, C.: Data acquisition by digitizing 2-D fracture networks and topographic lineaments in geographic information systems: further development and applications, Solid Earth, 11, 1731–1746, <ext-link xlink:href="https://doi.org/10.5194/se-11-1731-2020" ext-link-type="DOI">10.5194/se-11-1731-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib47"><label>47</label><mixed-citation>Rajeh, T., Ababou, R., Marcoux, M., and Cañamon, I.: Fast upscaling of the hydraulic conductivity of three-dimensional fractured porous rock for reservoir modeling, Math. Geosci., 51, 1037–1074, <ext-link xlink:href="https://doi.org/10.1007/s11004-019-09785-w" ext-link-type="DOI">10.1007/s11004-019-09785-w</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bib48"><label>48</label><mixed-citation>Renard, P. and Ababou, R.: Equivalent permeability tensor of heterogeneous media: upscaling methods and criteria (review and analyses), Geosciences, 12, 269, <ext-link xlink:href="https://doi.org/10.3390/geosciences12070269" ext-link-type="DOI">10.3390/geosciences12070269</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib49"><label>49</label><mixed-citation>Sandve, T. H., Berre, I., and Nordbotten, J. M.: An efficient multi-point flux approximation method for Discrete Fracture–Matrix simulations, J. Comput. Phys., 231, 3784–3800, <ext-link xlink:href="https://doi.org/10.1016/j.jcp.2012.01.023" ext-link-type="DOI">10.1016/j.jcp.2012.01.023</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib50"><label>50</label><mixed-citation>Schultz, R. A. and Soliva, R.: Propagation energies inferred from deformation bands in sandstone, Int. J. Fract., 176, 135–149, <ext-link xlink:href="https://doi.org/10.1007/s10704-012-9730-2" ext-link-type="DOI">10.1007/s10704-012-9730-2</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bib51"><label>51</label><mixed-citation>Snow, D. T.: Anisotropie permeability of fractured media, Water Resour. Res., 5, 1273–1289, <ext-link xlink:href="https://doi.org/10.1029/WR005i006p01273" ext-link-type="DOI">10.1029/WR005i006p01273</ext-link>, 1969.</mixed-citation></ref>
      <ref id="bib1.bib52"><label>52</label><mixed-citation>Srinivasan, G., Hyman, J. D., Osthus, D. A., Moore, B. A., O'Malley, D., Karra, S., Rougier, E., Hagberg, A. A., Hunter, A., and Viswanathan, H. S.: Quantifying topological uncertainty in fractured systems using graph theory and machine learning, Sci. Rep., 8, 11665, <ext-link xlink:href="https://doi.org/10.1038/s41598-018-30117-1" ext-link-type="DOI">10.1038/s41598-018-30117-1</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bib53"><label>53</label><mixed-citation>Vermilye, J. M. and Scholz, C. H.: Relation between vein length and aperture, J. Struct. Geol., 17, 423–434, <ext-link xlink:href="https://doi.org/10.1016/0191-8141(94)00058-8" ext-link-type="DOI">10.1016/0191-8141(94)00058-8</ext-link>, 1995.</mixed-citation></ref>
      <ref id="bib1.bib54"><label>54</label><mixed-citation>Viswanathan, H. S., Ajo-Franklin, J., Birkholzer, J. T., Carey, J. W., Guglielmi, Y., Hyman, J. D., Karra, S., Pyrak-Nolte, L. J., Rajaram, H., Srinivasan, G., and Tartakovsky, D. M.: From fluid flow to coupled processes in fractured rock: recent advances and new frontiers, Rev. Geophys., 60, e2021RG000744, <ext-link xlink:href="https://doi.org/10.1029/2021RG000744" ext-link-type="DOI">10.1029/2021RG000744</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib55"><label>55</label><mixed-citation>Wang, Q., Zhang, L., Yu, Q., and Li, H.: Existence analysis of hydraulic conductivity representative elementary volume in fractured rocks based on three-dimensional discrete fracture network method, Comput. Geotech., 164, 105829, <ext-link xlink:href="https://doi.org/10.1016/j.compgeo.2023.105829" ext-link-type="DOI">10.1016/j.compgeo.2023.105829</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bib56"><label>56</label><mixed-citation>Welch, M. J., Lüthje, M., and Oldfield, S. J.: DFN Generator v2.0: A new tool to model the growth of large-scale natural fracture networks using fundamental geomechanics, Geosci. Model Dev. Discuss. [preprint], <ext-link xlink:href="https://doi.org/10.5194/gmd-2022-22" ext-link-type="DOI">10.5194/gmd-2022-22</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib57"><label>57</label><mixed-citation>Weismüller, C., Prabhakaran, R., Passchier, M., Urai, J. L., Bertotti, G., and Reicherter, K.: Mapping the fracture network in the Lilstock pavement, Bristol Channel, UK: manual versus automatic, Solid Earth, 11, 1773–1802, <ext-link xlink:href="https://doi.org/10.5194/se-11-1773-2020" ext-link-type="DOI">10.5194/se-11-1773-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bib58"><label>58</label><mixed-citation>Wong, D., Doster, F., and Geiger, S.: Embedded Discrete Fracture Models, in: Advanced Modeling with the MATLAB Reservoir Simulation Toolbox, edited by: Lie, K.-A. and Møyner, O., Cambridge University Press, Cambridge, 375–408, <ext-link xlink:href="https://doi.org/10.1017/9781009019781.015" ext-link-type="DOI">10.1017/9781009019781.015</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bib59"><label>59</label><mixed-citation>Xu, C. and Dowd, P.: A new computer code for discrete fracture network modelling, Comput. Geosci., 36, 292–301, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2009.05.012" ext-link-type="DOI">10.1016/j.cageo.2009.05.012</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bib60"><label>60</label><mixed-citation>Xue, K., Zhang, Z., Zhong, C., Jiang, Y., and Geng, X.: A fast numerical method and optimization of 3D discrete fracture network considering fracture aperture heterogeneity, Adv. Water Resour., 162, 104164, <ext-link xlink:href="https://doi.org/10.1016/j.advwatres.2022.104164" ext-link-type="DOI">10.1016/j.advwatres.2022.104164</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bib61"><label>61</label><mixed-citation>Yan, M., Huang, C., Bienstman, P., Tino, P., Lin, W., and Sun, J.: Emerging opportunities and challenges for the future of reservoir computing, Nat. Commun., 15, 2056, <ext-link xlink:href="https://doi.org/10.1038/s41467-024-45187-1" ext-link-type="DOI">10.1038/s41467-024-45187-1</ext-link>, 2024a.</mixed-citation></ref>
      <ref id="bib1.bib62"><label>62</label><mixed-citation>Yan, X., Lin, J., Wang, S., Zhang, Z., Liu, P., Sun, S., Yao, J., and Zhang, K.: Physics-informed neural network simulation of two-phase flow in heterogeneous and fractured porous media, Adv. Water Resour., 189, 104731, <ext-link xlink:href="https://doi.org/10.1016/j.advwatres.2024.104731" ext-link-type="DOI">10.1016/j.advwatres.2024.104731</ext-link>, 2024b.</mixed-citation></ref>
      <ref id="bib1.bib63"><label>63</label><mixed-citation>Zijl, W. and Stam, J. M. T.: Modeling permeability in imperfectly layered porous media. I. Derivation of block-scale permeability tensor for thin grid-blocks, Math. Geol., 24, 865–883, <ext-link xlink:href="https://doi.org/10.1007/BF00894656" ext-link-type="DOI">10.1007/BF00894656</ext-link>, 1992.</mixed-citation></ref>
      <ref id="bib1.bib64"><label>64</label><mixed-citation>Zoback, M. D., Barton, C. A., Brudy, M., Castillo, D. A., Finkbeiner, T., Grollimund, B. R., Moos, D. B., Peska, P., Ward, C. D., and Wiprut, D. J.: Determination of stress orientation and magnitude in deep wells, Int. J. Rock Mech. Min., 40, 1049–1076, <ext-link xlink:href="https://doi.org/10.1016/j.ijrmms.2003.07.001" ext-link-type="DOI">10.1016/j.ijrmms.2003.07.001</ext-link>, 2003.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>UpsFrac v1.0: an open-source software for integrating modelling and upscaling permeability for fractured porous rocks</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>1</label><mixed-citation>
      
Alghalandis, Y. F.: ADFNE: Open source software for discrete fracture
network engineering, two and three dimensional applications, Comput.
Geosci., 102, 1–11, <a href="https://doi.org/10.1016/j.cageo.2017.02.002" target="_blank">https://doi.org/10.1016/j.cageo.2017.02.002</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>2</label><mixed-citation>
      
Almajid, M. M. and Abu-Al-Saud, M. O.: Prediction of porous media fluid flow
using physics informed neural networks, J. Petrol. Sci. Eng., 208, 109205,
<a href="https://doi.org/10.1016/j.petrol.2021.109205" target="_blank">https://doi.org/10.1016/j.petrol.2021.109205</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>3</label><mixed-citation>
      
Andrews, B. J., Roberts, J. J., Shipton, Z. K., Bigi, S., Tartarello, M. C., and Johnson, G.: How do we see fractures? Quantifying subjective bias in fracture data collection, Solid Earth, 10, 487–516, <a href="https://doi.org/10.5194/se-10-487-2019" target="_blank">https://doi.org/10.5194/se-10-487-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>4</label><mixed-citation>
      
Berre, I., Doster, F., and Keilegavlen, E.: Flow in fractured porous media:
a review of conceptual models and discretization approaches, Transp. Porous
Media, 130, 215–236, <a href="https://doi.org/10.1007/s11242-018-1171-6" target="_blank">https://doi.org/10.1007/s11242-018-1171-6</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>5</label><mixed-citation>
      
Bonnet, E., Bour, O., Odling, N. E., Davy, P., Main, I., Cowie, P., and
Berkowitz, B.: Scaling of fracture systems in geological media, Rev.
Geophys., 39, 347–383, <a href="https://doi.org/10.1029/1999RG000074" target="_blank">https://doi.org/10.1029/1999RG000074</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>6</label><mixed-citation>
      
Borghini, L., Striglio, G., Bacchiani, G., La Bruna, V., Balsamo, F.,
Bonini, L., and Bezerra, F. H. R.: Fracture analyser: a Python toolbox for
the 2D analysis of fracture patterns, Ital. J. Geosci., 143, 314–328,
<a href="https://doi.org/10.3301/ijg.2024.16" target="_blank">https://doi.org/10.3301/ijg.2024.16</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>7</label><mixed-citation>
      
Chen, T.: Open-source software for integrating modelling and upscaling
permeability for fractured porous rocks: UpsFrac, Zenodo [code],
<a href="https://doi.org/10.5281/zenodo.14674083" target="_blank">https://doi.org/10.5281/zenodo.14674083</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>8</label><mixed-citation>
      
Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Büsing, H.:
Modeling anisotropic flow and heat transport by using mimetic finite
differences, Adv. Water Resour., 94, 441–456,
<a href="https://doi.org/10.1016/j.advwatres.2016.06.006" target="_blank">https://doi.org/10.1016/j.advwatres.2016.06.006</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>9</label><mixed-citation>
      
Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Mottaghy, D.: A new
upscaling method for fractured porous media, Adv. Water Resour., 80, 60–68,
<a href="https://doi.org/10.1016/j.advwatres.2015.03.009" target="_blank">https://doi.org/10.1016/j.advwatres.2015.03.009</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>10</label><mixed-citation>
      
Chen, T., Clauser, C., Marquart, G., Willbrand, K., and Hiller, T.:
Upscaling permeability for three-dimensional fractured porous rocks with the
multiple boundary method, Hydrogeol. J., 26, 1903–1916,
<a href="https://doi.org/10.1007/s10040-018-1744-z" target="_blank">https://doi.org/10.1007/s10040-018-1744-z</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>11</label><mixed-citation>
      
Cheng, Y. and Wong, L. N. Y.: Microscopic characterization of tensile and
shear fracturing in progressive failure in marble, J. Geophys. Res. Solid
Earth, 123, 204–225, <a href="https://doi.org/10.1002/2017JB014581" target="_blank">https://doi.org/10.1002/2017JB014581</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>12</label><mixed-citation>
      
Cook, P. G., Love, A. J., Robinson, N. I., and Simmons, C. T.: Groundwater
ages in fractured rock aquifers, J. Hydrol., 308, 284–301,
<a href="https://doi.org/10.1016/j.jhydrol.2004.11.005" target="_blank">https://doi.org/10.1016/j.jhydrol.2004.11.005</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>13</label><mixed-citation>
      
Corral, Á. and González, Á.: Power law size distributions in
geoscience revisited, Earth Space Sci., 6, 673–697,
<a href="https://doi.org/10.1029/2018EA000479" target="_blank">https://doi.org/10.1029/2018EA000479</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>14</label><mixed-citation>
      
Ebigbo, A., Lang, P. S., Paluszny, A., and Zimmerman, R. W.: Inclusion-based
effective medium models for the permeability of a 3D fractured rock mass,
Transport Porous Med., 113, 137–158,
<a href="https://doi.org/10.1007/s11242-016-0685-z" target="_blank">https://doi.org/10.1007/s11242-016-0685-z</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>15</label><mixed-citation>
      
Fiori, A., Bellin, A., Cvetkovic, V., De Barros, F. P. J., and Dagan, G.:
Stochastic modeling of solute transport in aquifers: From heterogeneity
characterization to risk analysis, Water Resour. Res., 51, 6622–6648,
<a href="https://doi.org/10.1002/2015WR017388" target="_blank">https://doi.org/10.1002/2015WR017388</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>16</label><mixed-citation>
      
Ghassemi, A.: A review of some rock mechanics issues in geothermal reservoir
development, Geotech. Geol. Eng., 30, 647–664,
<a href="https://doi.org/10.1007/s10706-012-9508-3" target="_blank">https://doi.org/10.1007/s10706-012-9508-3</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>17</label><mixed-citation>
      
Gong, L., Wang, J., Gao, S., Fu, X., Liu, B., Miao, F., Zhou, X., and Meng,
Q.: Characterization, controlling factors and evolution of fracture
effectiveness in shale oil reservoirs, J. Petrol. Sci. Eng., 203, 108655,
<a href="https://doi.org/10.1016/j.petrol.2021.108655" target="_blank">https://doi.org/10.1016/j.petrol.2021.108655</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>18</label><mixed-citation>
      
Gottron, D. and Henk, A.: Upscaling of fractured rock mass properties – An
example comparing Discrete Fracture Network (DFN) modeling and empirical
relations based on engineering rock mass classifications, Eng. Geol., 294,
106382, <a href="https://doi.org/10.1016/j.enggeo.2021.106382" target="_blank">https://doi.org/10.1016/j.enggeo.2021.106382</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>19</label><mixed-citation>
      
Gu, X., Rempe, D. M., Dietrich, W. E., West, A. J., Lin, T.-C., Jin, L., and
Brantley, S. L.: Chemical reactions, porosity, and microfracturing in shale
during weathering: The effect of erosion rate, Geochim. Cosmochim. Ac., 269,
63–100, <a href="https://doi.org/10.1016/j.gca.2019.09.044" target="_blank">https://doi.org/10.1016/j.gca.2019.09.044</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>20</label><mixed-citation>
      
Gudmundsson, A.: Rock fractures in geological processes, Cambridge
University Press, Cambridge, UK, <a href="https://doi.org/10.1017/CBO9780511975684" target="_blank">https://doi.org/10.1017/CBO9780511975684</a>,
2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>21</label><mixed-citation>
      
Hardebol, N. J. and Bertotti, G.: DigiFract: A software and data model
implementation for flexible acquisition and processing of fracture data from
outcrops, Comput. Geosci., 54, 326–336,
<a href="https://doi.org/10.1016/j.cageo.2012.10.021" target="_blank">https://doi.org/10.1016/j.cageo.2012.10.021</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>22</label><mixed-citation>
      
Healy, D., Rizzo, R. E., Cornwell, D. G., Farrell, N. J. C., Watkins, H.,
Timms, N. E., Gomez-Rivas, E., and Smith, M.: FracPaQ: A MATLAB toolbox for
the quantification of fracture patterns, J. Struct. Geol., 95, 1–16,
<a href="https://doi.org/10.1016/j.jsg.2016.12.003" target="_blank">https://doi.org/10.1016/j.jsg.2016.12.003</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>23</label><mixed-citation>
      
HosseiniMehr, M., Tomala, J. P., Vuik, C., Kobaisi, M. A., and Hajibeygi,
H.: Projection-based embedded discrete fracture model (pEDFM) for flow and
heat transfer in real-field geological formations with hexahedral
corner-point grids, Adv. Water Resour., 159, 104091,
<a href="https://doi.org/10.1016/j.advwatres.2021.104091" target="_blank">https://doi.org/10.1016/j.advwatres.2021.104091</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>24</label><mixed-citation>
      
Hyman, J. D., Karra, S., Makedonska, N., Gable, C. W., Painter, S. L., and
Viswanathan, H. S.: dfnWorks: A discrete fracture network framework for
modeling subsurface flow and transport, Comput. Geosci., 84, 10–19,
<a href="https://doi.org/10.1016/j.cageo.2015.08.001" target="_blank">https://doi.org/10.1016/j.cageo.2015.08.001</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>25</label><mixed-citation>
      
Hyman, J. D., Aldrich, G., Viswanathan, H., Makedonska, N., and Karra, S.:
Fracture size and transmissivity correlations: Implications for transport
simulations in sparse three-dimensional discrete fracture networks following
a truncated power law distribution of fracture size, Water Resour. Res., 52,
6472–6489, <a href="https://doi.org/10.1002/2016wr018806" target="_blank">https://doi.org/10.1002/2016wr018806</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>26</label><mixed-citation>
      
Keilegavlen, E., Berge, R., Fumagalli, A., Starnoni, M., Stefansson, I.,
Varela, J., and Berre, I.: PorePy: an open-source software for simulation of
multiphysics processes in fractured porous media, Comput. Geosci., 25,
243–265, <a href="https://doi.org/10.1007/s10596-020-10002-5" target="_blank">https://doi.org/10.1007/s10596-020-10002-5</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>27</label><mixed-citation>
      
Keller, J., Rath, V., Bruckmann, J., Mottaghy, D., Clauser, C., Wolf, A.,
Seidler, R., Bücker, H. M., and Klitzsch, N.: SHEMAT-Suite: An
open-source code for simulating flow, heat and species transport in porous
media, SoftwareX, 12, 100533, <a href="https://doi.org/10.1016/j.softx.2020.100533" target="_blank">https://doi.org/10.1016/j.softx.2020.100533</a>,
2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>28</label><mixed-citation>
      
Klimczak, C., Schultz, R. A., Parashar, R., and Reeves, D. M.: Cubic law
with aperture-length correlation: implications for network scale fluid flow,
Hydrogeol. J., 18, 851–862, <a href="https://doi.org/10.1007/s10040-009-0572-6" target="_blank">https://doi.org/10.1007/s10040-009-0572-6</a>,
2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>29</label><mixed-citation>
      
Kolditz, O., Bauer, S., Bilke, L., Böttcher, N., Delfs, J. O., Fischer,
T., Görke, U. J., Kalbacher, T., Kosakowski, G., McDermott, C. I., Park,
C. H., Radu, F., Rink, K., Shao, H., Shao, H. B., Sun, F., Sun, Y. Y.,
Singh, A. K., Taron, J., Walther, M., Wang, W., Watanabe, N., Wu, Y., Xie,
M., Xu, W., and Zehner, B.: OpenGeoSys: an open-source initiative for
numerical simulation of thermo-hydro-mechanical/chemical (THM/C) processes
in porous media, Environ. Earth Sci., 67, 589–599,
<a href="https://doi.org/10.1007/s12665-012-1546-x" target="_blank">https://doi.org/10.1007/s12665-012-1546-x</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>30</label><mixed-citation>
      
Lang, P. S., Paluszny, A., and Zimmerman, R. W.: Permeability tensor of
three-dimensional fractured porous rock and a comparison to trace map
predictions, J. Geophys. Res. Solid Earth., 119, 6288–6307,
<a href="https://doi.org/10.1002/2014jb011027" target="_blank">https://doi.org/10.1002/2014jb011027</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>31</label><mixed-citation>
      
Li, Z., Sherman, C. S., Reagan, M. T., Moridis, G. J., and Morris, J. P.:
Effects of heterogeneous fracture aperture on multiphase production from
shale reservoirs, Transport Porous Med., 144, 797–823,
<a href="https://doi.org/10.1007/s11242-022-01841-0" target="_blank">https://doi.org/10.1007/s11242-022-01841-0</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>32</label><mixed-citation>
      
Lie, K. A.: An introduction to reservoir simulation using MATLAB/GNU Octave:
user guide for the MATLAB Reservoir Simulation Toolbox (MRST), Cambridge
University Press, Cambridge, UK, <a href="https://doi.org/10.1017/9781108591416" target="_blank">https://doi.org/10.1017/9781108591416</a>,
2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>33</label><mixed-citation>
      
Liu, Z. and Reynolds, A. C.: History matching an unconventional reservoir
with a complex fracture network, SPE Reservoir Simulation Conference,
Galveston, Texas, USA, April 2019, <a href="https://doi.org/10.2118/193921-MS" target="_blank">https://doi.org/10.2118/193921-MS</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>34</label><mixed-citation>
      
MacQuarrie, K. T. B. and Mayer, K. U.: Reactive transport modeling in
fractured rock: A state-of-the-science review, Earth-Sci. Rev., 72,
189–227, <a href="https://doi.org/10.1016/j.earscirev.2005.07.003" target="_blank">https://doi.org/10.1016/j.earscirev.2005.07.003</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>35</label><mixed-citation>
      
Marinos, V. and Carter, T. G.: Maintaining geological reality in application
of GSI for design of engineering structures in rock, Eng. Geol., 239,
282–297, <a href="https://doi.org/10.1016/j.enggeo.2018.03.022" target="_blank">https://doi.org/10.1016/j.enggeo.2018.03.022</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>36</label><mixed-citation>
      
Massart, B., Paillet, M., Henrion, V., Sausse, J., Dezayes, C., Genter, A.,
and Bisset, A.: Fracture characterization and stochastic modeling of the
granitic basement in the HDR Soultz Project (France), World Geothermal
Congress 2010, Bali, Indonesia, April 2010, 7 pp., <a href="https://brgm.hal.science/hal-00496923v1" target="_blank"/> (last access: 28 November 2025), 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>37</label><mixed-citation>
      
McDermott, C. and Kolditz, O.: Geomechanical model for fracture deformation
under hydraulic, mechanical and thermal loads, Hydrogeol. J., 14, 485–498,
<a href="https://doi.org/10.1007/s10040-005-0455-4" target="_blank">https://doi.org/10.1007/s10040-005-0455-4</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>38</label><mixed-citation>
      
Mejia, C., Roehl, D., Rueda, J., and Quevedo, R.: A new approach for
modeling three-dimensional fractured reservoirs with embedded complex
fracture networks, Comput. Geotech., 130, 103928,
<a href="https://doi.org/10.1016/j.compgeo.2020.103928" target="_blank">https://doi.org/10.1016/j.compgeo.2020.103928</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>39</label><mixed-citation>
      
Molnar, P., Anderson, R. S., and Anderson, S. P.: Tectonics, fracturing of
rock, and erosion, J. Geophys. Res. Earth Surf., 112, F03014,
<a href="https://doi.org/10.1029/2005JF000433" target="_blank">https://doi.org/10.1029/2005JF000433</a>, 2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>40</label><mixed-citation>
      
Myers, T.: Potential contaminant pathways from hydraulically fractured shale
to aquifers, Groundwater, 50, 872–882,
<a href="https://doi.org/10.1111/j.1745-6584.2012.00933.x" target="_blank">https://doi.org/10.1111/j.1745-6584.2012.00933.x</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>41</label><mixed-citation>
      
Neuman, S. P.: Trends, prospects and challenges in quantifying flow and
transport through fractured rocks, Hydrogeol. J., 13, 124–147,
<a href="https://doi.org/10.1007/s10040-004-0397-2" target="_blank">https://doi.org/10.1007/s10040-004-0397-2</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>42</label><mixed-citation>
      
Oda, M.: Permeability tensor for discontinuous rock masses,
Géotechnique, 35, 483–495, <a href="https://doi.org/10.1680/geot.1985.35.4.483" target="_blank">https://doi.org/10.1680/geot.1985.35.4.483</a>,
1985.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>43</label><mixed-citation>
      
Odling, N. E. and Roden, J. E.: Contaminant transport in fractured rocks
with significant matrix permeability, using natural fracture geometries, J.
Contam. Hydrol., 27, 263–283,
<a href="https://doi.org/10.1016/S0169-7722(96)00096-4" target="_blank">https://doi.org/10.1016/S0169-7722(96)00096-4</a>, 1997.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>44</label><mixed-citation>
      
Olson, J. E.: Sublinear scaling of fracture aperture versus length: An
exception or the rule?, J. Geophys. Res. Solid Earth., 108, 2413,
<a href="https://doi.org/10.1029/2001JB000419" target="_blank">https://doi.org/10.1029/2001JB000419</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>45</label><mixed-citation>
      
Ovaskainen, N.: fractopo: A Python package for fracture network analysis, J.
Open Source Softw., 8, 5300, <a href="https://doi.org/10.21105/joss.05300" target="_blank">https://doi.org/10.21105/joss.05300</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>46</label><mixed-citation>
      
Palamakumbura, R., Krabbendam, M., Whitbread, K., and Arnhardt, C.: Data acquisition by digitizing 2-D fracture networks and topographic lineaments in geographic information systems: further development and applications, Solid Earth, 11, 1731–1746, <a href="https://doi.org/10.5194/se-11-1731-2020" target="_blank">https://doi.org/10.5194/se-11-1731-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>47</label><mixed-citation>
      
Rajeh, T., Ababou, R., Marcoux, M., and Cañamon, I.: Fast upscaling of
the hydraulic conductivity of three-dimensional fractured porous rock for
reservoir modeling, Math. Geosci., 51, 1037–1074,
<a href="https://doi.org/10.1007/s11004-019-09785-w" target="_blank">https://doi.org/10.1007/s11004-019-09785-w</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>48</label><mixed-citation>
      
Renard, P. and Ababou, R.: Equivalent permeability tensor of heterogeneous
media: upscaling methods and criteria (review and analyses), Geosciences,
12, 269, <a href="https://doi.org/10.3390/geosciences12070269" target="_blank">https://doi.org/10.3390/geosciences12070269</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>49</label><mixed-citation>
      
Sandve, T. H., Berre, I., and Nordbotten, J. M.: An efficient multi-point
flux approximation method for Discrete Fracture–Matrix simulations, J.
Comput. Phys., 231, 3784–3800, <a href="https://doi.org/10.1016/j.jcp.2012.01.023" target="_blank">https://doi.org/10.1016/j.jcp.2012.01.023</a>,
2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib50"><label>50</label><mixed-citation>
      
Schultz, R. A. and Soliva, R.: Propagation energies inferred from
deformation bands in sandstone, Int. J. Fract., 176, 135–149,
<a href="https://doi.org/10.1007/s10704-012-9730-2" target="_blank">https://doi.org/10.1007/s10704-012-9730-2</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib51"><label>51</label><mixed-citation>
      
Snow, D. T.: Anisotropie permeability of fractured media, Water Resour.
Res., 5, 1273–1289, <a href="https://doi.org/10.1029/WR005i006p01273" target="_blank">https://doi.org/10.1029/WR005i006p01273</a>, 1969.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib52"><label>52</label><mixed-citation>
      
Srinivasan, G., Hyman, J. D., Osthus, D. A., Moore, B. A., O'Malley, D.,
Karra, S., Rougier, E., Hagberg, A. A., Hunter, A., and Viswanathan, H. S.:
Quantifying topological uncertainty in fractured systems using graph theory
and machine learning, Sci. Rep., 8, 11665,
<a href="https://doi.org/10.1038/s41598-018-30117-1" target="_blank">https://doi.org/10.1038/s41598-018-30117-1</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib53"><label>53</label><mixed-citation>
      
Vermilye, J. M. and Scholz, C. H.: Relation between vein length and
aperture, J. Struct. Geol., 17, 423–434,
<a href="https://doi.org/10.1016/0191-8141(94)00058-8" target="_blank">https://doi.org/10.1016/0191-8141(94)00058-8</a>, 1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib54"><label>54</label><mixed-citation>
      
Viswanathan, H. S., Ajo-Franklin, J., Birkholzer, J. T., Carey, J. W.,
Guglielmi, Y., Hyman, J. D., Karra, S., Pyrak-Nolte, L. J., Rajaram, H.,
Srinivasan, G., and Tartakovsky, D. M.: From fluid flow to coupled processes
in fractured rock: recent advances and new frontiers, Rev. Geophys., 60,
e2021RG000744, <a href="https://doi.org/10.1029/2021RG000744" target="_blank">https://doi.org/10.1029/2021RG000744</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib55"><label>55</label><mixed-citation>
      
Wang, Q., Zhang, L., Yu, Q., and Li, H.: Existence analysis of hydraulic
conductivity representative elementary volume in fractured rocks based on
three-dimensional discrete fracture network method, Comput. Geotech., 164,
105829, <a href="https://doi.org/10.1016/j.compgeo.2023.105829" target="_blank">https://doi.org/10.1016/j.compgeo.2023.105829</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib56"><label>56</label><mixed-citation>
      
Welch, M. J., Lüthje, M., and Oldfield, S. J.: DFN Generator v2.0: A new tool to model the growth of large-scale natural fracture networks using fundamental geomechanics, Geosci. Model Dev. Discuss. [preprint], <a href="https://doi.org/10.5194/gmd-2022-22" target="_blank">https://doi.org/10.5194/gmd-2022-22</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib57"><label>57</label><mixed-citation>
      
Weismüller, C., Prabhakaran, R., Passchier, M., Urai, J. L., Bertotti, G., and Reicherter, K.: Mapping the fracture network in the Lilstock pavement, Bristol Channel, UK: manual versus automatic, Solid Earth, 11, 1773–1802, <a href="https://doi.org/10.5194/se-11-1773-2020" target="_blank">https://doi.org/10.5194/se-11-1773-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib58"><label>58</label><mixed-citation>
      
Wong, D., Doster, F., and Geiger, S.: Embedded Discrete Fracture Models, in:
Advanced Modeling with the MATLAB Reservoir Simulation Toolbox, edited by:
Lie, K.-A. and Møyner, O., Cambridge University Press, Cambridge,
375–408, <a href="https://doi.org/10.1017/9781009019781.015" target="_blank">https://doi.org/10.1017/9781009019781.015</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib59"><label>59</label><mixed-citation>
      
Xu, C. and Dowd, P.: A new computer code for discrete fracture network
modelling, Comput. Geosci., 36, 292–301,
<a href="https://doi.org/10.1016/j.cageo.2009.05.012" target="_blank">https://doi.org/10.1016/j.cageo.2009.05.012</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib60"><label>60</label><mixed-citation>
      
Xue, K., Zhang, Z., Zhong, C., Jiang, Y., and Geng, X.: A fast numerical
method and optimization of 3D discrete fracture network considering fracture
aperture heterogeneity, Adv. Water Resour., 162, 104164,
<a href="https://doi.org/10.1016/j.advwatres.2022.104164" target="_blank">https://doi.org/10.1016/j.advwatres.2022.104164</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib61"><label>61</label><mixed-citation>
      
Yan, M., Huang, C., Bienstman, P., Tino, P., Lin, W., and Sun, J.: Emerging
opportunities and challenges for the future of reservoir computing, Nat.
Commun., 15, 2056, <a href="https://doi.org/10.1038/s41467-024-45187-1" target="_blank">https://doi.org/10.1038/s41467-024-45187-1</a>, 2024a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib62"><label>62</label><mixed-citation>
      
Yan, X., Lin, J., Wang, S., Zhang, Z., Liu, P., Sun, S., Yao, J., and Zhang,
K.: Physics-informed neural network simulation of two-phase flow in
heterogeneous and fractured porous media, Adv. Water Resour., 189, 104731,
<a href="https://doi.org/10.1016/j.advwatres.2024.104731" target="_blank">https://doi.org/10.1016/j.advwatres.2024.104731</a>, 2024b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib63"><label>63</label><mixed-citation>
      
Zijl, W. and Stam, J. M. T.: Modeling permeability in imperfectly layered
porous media. I. Derivation of block-scale permeability tensor for thin
grid-blocks, Math. Geol., 24, 865–883, <a href="https://doi.org/10.1007/BF00894656" target="_blank">https://doi.org/10.1007/BF00894656</a>,
1992.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib64"><label>64</label><mixed-citation>
      
Zoback, M. D., Barton, C. A., Brudy, M., Castillo, D. A., Finkbeiner, T.,
Grollimund, B. R., Moos, D. B., Peska, P., Ward, C. D., and Wiprut, D. J.:
Determination of stress orientation and magnitude in deep wells, Int. J.
Rock Mech. Min., 40, 1049–1076,
<a href="https://doi.org/10.1016/j.ijrmms.2003.07.001" target="_blank">https://doi.org/10.1016/j.ijrmms.2003.07.001</a>, 2003.

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