1 Introduction

The fluid flow in the rock mass includes seepage through fractures and pore space in the rock matrix. For many rock mechanics problems, the fracture seepage plays a major role and controls the mechanical response of rock mass. The pore seepage is often neglected because the permeability of the rock matrix is much smaller than that of fractures. However, in many engineering applications, such as oil and gas exploitation, deep underground disposal of nuclear waste and underground storage of oil and gas, fluid flow in porous rock matrix should be considered. In other words, the rock mass in this condition needs to be considered as a fractured porous media. Therefore, establishing an effective seepage model for fractured porous media is a hot topic in the field of petroleum oil extraction and rock hydraulics [5, 7, 9, 11, 33].

Currently, the seepage models for fractured porous media mainly include the following three types: the equivalent continuum model, dual-porosity model and discrete fracture model. In the equivalent continuum model [29, 30, 52, 53], both rock matrix and fractures are considered as a homogenized porous media. Thus, it cannot model real fracture distribution and has low accuracy when solving seepage flow in rock masses with strong water-conducting fractures. To this end, Barenblatt et al. [4] proposed a dual-porosity seepage model, in which the fracture and matrix are considered as independent systems. The matrix on both sides of the fracture shares the same nodes, and the pore pressure on both sides of the fracture is continuous. In recent years, to consider the seepage of fractured rock with a small number of large-scale fractures, the discrete fracture–matrix (DFM) model has attracted more attention [18, 21, 23]. In DFM, both of the permeability of the rock matrix and the fracture can be considered. Limited to the computational efficiency, DFM model is only applicable to fractured rock with a small number of fractures. In order to improve the computational efficacy, the discrete fracture network model (DFN) extracts the dominant fractures in the rock masses and assumes that fluid flows only in the fracture network, without taking into account the pore seepage [13]. Therefore, DFN is most suitable for the formation with a high degree of fracture development [6, 8, 12, 17, 31, 32, 51].

A lot of traditional numerical methods have been used to simulate fluid flow in fractured porous media. Galerkin finite element is widely used in the discrete fracture model and has been successfully applied in the simulation of single-phase and two-phase flows [3, 24, 39, 74]. In single-phase flow, Juanes et al. [22] simulated solute transport caused by groundwater flow in fractured porous media. In multiphase flow, Hoteit and Firoozabadi [20] used the MFE to simulate two-phase flow in fractured porous media and considered the matrix–fracture interaction. Monteagudo and Firoozabadi [34] studied two-phase immiscible flow in 2D and 3D discrete fracture media by using the finite volume method. These traditional methods can capture the fluid flow in the fracture or rock matrix, but these methods often involve large-scale computation and are laborious for computer programming. More importantly, in these traditional methods, the fracture and matrix share the same computational nodes; therefore, they cannot simulate discontinuous pore pressure distribution on both sides of the fracture. In addition, these numerical methods have intrinsic difficulties to simulate fully coupled hydromechanical problems, such as fluid-driven fracturing and its influence on the fluid flow in the porous media. In addition, some methods such as cracking-particle method (CPM) [41, 42] and dual-horizon peridynamics (PH-PD) [44, 45] can well simulate the solid fracturing and even complex fracture patterns in three dimensions [1, 2]. It should be pointed out that in recent years, the phase field method [47, 76] and other methods [43, 48, 71] have been more and more frequently used to simulate the fracturing driven by fluid.

In this paper, we build a mixed fracture–pore seepage model for fractured porous media in the computational framework of finite-discrete element method (FDEM) [35, 36, 38]. The FDEM combines the advantages of FEM and DEM, and it has been widely used to model rock fracture [15, 16, 25, 27, 28, 46, 75 ]. Initially, FDEM is mainly developed for fracture mechanics simulation of solids through breaking joint elements between adjacent solid elements. In recent years, the method has been extended to solve multi-physics-driven fracture problems. For example, Yan et al. [54, 56, 60, 61, 64] proposed a coupled thermo-mechanical model (FDEM-TM) and a coupled hydrothermal model (FDEM-TH) [57, 58] to solve the thermal cracking and water–rock heat transfer problems. In addition, Yan et al. [55, 57,58,59,60,61,, 59, 62, 65, 66] also proposed several coupled hydromechanical models to simulate hydraulic fracturing in rocks (FDEM-flow). The first [65, 70] solves the hydraulic fracturing problem of rock masses with arbitrarily fractured networks by assuming that the fluid only flows in the broken joint elements (i.e. fracture seepage), but the pore seepage is not considered. The second model [62, 66] uses broken elements for fracture seepage and unbroken elements for pore seepage simulation, yet the model parameters (e.g. initial aperture) need to be calibrated in order to equivalently represent the macroscopic permeability of the porous matrix. The model will be less accurate in solving transient seepage problems. The third model [55, 59] can better overcome the shortcomings of the previous models by using solid elements to characterize pore seepage (2D-triangular elements; 3D-tetrahedral elements) according to Darcy’s law, while the fracture seepage is modeled by the broken joint elements according to the cubic law. However, the porous matrix is only modeled using triangular elements, which share pore pressure nodes even new fracture occurs. As a result, the pore pressure is always continuous at both sides of the cracks.

In this study, the newly developed mixed fracture–pore seepage model into will overcome above-mentioned limitations. Compared with previous research [63, 67], the porous matrix is represented by triangular elements and joint elements in FDEM. The geometrical configuration and microstructure of the pore seepage model looks resemble to a multiscale cohesive zone model [26, 72]. The pore seepage calculation includes two parts: pore seepage in triangular elements and fluid exchange between adjacent triangular elements through joint elements. Because adjacent triangular elements do not share pore pressure nodes, the discontinuity of pore pressure on both sides of a crack can be considered. Combing the mixed fracture–pore seepage model with FDEM, the fluid-drive fracturing problems can be simulated in porous media. The crack generation is modeled through the joint element breaking, which will subsequently change the fracture network and fluid flow. Therefore, the effect of crack generation on the pore seepage and fracture seepage can be reflected.

This paper is mainly composed of the following parts. Section 2 introduces the mixed fracture–pore seepage model. In Sect. 3, the hydromechanical model is introduced. In Sect. 4, we give three examples with theoretical solutions to validate the model in solving the one-dimensional transient pore seepage problems and two-dimensional saturated steady-state pore seepage problems. In addition, sensitivity analysis and the principle for determining the fluid exchange coefficient of the unbroken joint element are given, such that the pore pressure distribution of the continuous porous media obtained by the model is consistent with the theoretical solution. In Sect. 4, we derived a theoretical solution for a single-fracture porous media seepage problem and used it to validate the model’s capacity in dealing with the fracture–pore mixed seepage problem. Moreover, we designed an example of complex fractured porous media seepage and compared the simulation results with the results of the commercial software COMSOL Multiphysics. Finally, an example of multi-cracks hydraulic fracturing is investigated by the hydromechanical model.

2 Fundamentals of FDEM

In FDEM, continuum is divided into finite element mesh of triangular elements and the four nodes joint element with no thickness is inserted between the neighboring triangular elements. The deformation of continuum is characterized by the deformation of constant strain triangular elements, while crack initiation and propagation in the continuum are implemented by the breaking of the joint element. Next, we will briefly introduce the governing equations, contact forces calculation and the fracture model of joint elements.

2.1 Governing equation

Similar to the DEM dynamics equation, the governing equation of FDEM according to Newton's second law is given by

$$ {\mathbf{M}}\ddot{x} + {\mathbf{C}}\dot{x} = {\mathbf{F}} $$
(1)

where \({\mathbf{M}}\) and \({\mathbf{C}}\) are diagonal mass matrix and damping matrix of nodes of all triangular elements in the system, respectively. \({\mathbf{F}}\) is the total nodal force vector, including nodal force vector caused by external load, nodal force vector due to contact, nodal force vector due to the deformation of triangular elements and joint elements. A constant damping matrix \({\mathbf{C}}\) is used to dissipate the kinetic energy of the system and can be expressed as

$$ {\mathbf{C}}{ = }\mu {\mathbf{I}} $$
(2)

where \(\mu\) is the damping coefficient and \({\mathbf{I}}\) is the unit matrix.

According to Eq. (1), the coordinates and velocities of the triangular element nodes at the next time step can be updated by Euler method

$$ \begin{aligned} & v_{i}^{(t + \Delta t)} = v_{i}^{(t)} + \sum {F_{i}^{(t)} \frac{{{\Delta }t}}{{m_{{\text{n}}} }}} \\ & x_{i}^{(t + \Delta t)} = x_{i}^{(t)} + v_{i}^{(t)} {\Delta }t \\ \end{aligned} $$
(3)

where \(F_{i}^{(t)}\) represents the total nodal force of a node, \({\Delta }t\) is the time step size, and \(m_{{\text{n}}}\) is the nodal mass, which is equal to one-third of the mass of all triangular elements that are connected to the node.

2.2 Contact force calculation

In this part, the no binary search (NBS) algorithm is used to determine which triangle elements are in contact with each other before the calculation of the contact force in FDEM. The two triangular elements in contact are termed as a contact pair. The following is a brief introduction to calculate contact force including the normal and tangential contact forces in FDEM.

The normal contact force is calculated using a potential-based penalty function method. As shown in Fig. 1, the normal contact force \({\mathbf{f}}_{{\text{n}}}\) depends on the overlapping area of a contact pair, which is given by

$$ {\mathbf{f}}_{{\text{n}}} = p_{{\text{n}}} \int_{{S = \beta_{{\text{c}}} \cap \beta_{{\text{t}}} }} {\left[ {{\mathbf{grad}}\varphi_{{\text{c}}} \left( {{\mathbf{P}}_{{\text{c}}} } \right) - {\mathbf{grad}}\varphi_{{\text{t}}} \left( {{\mathbf{P}}_{{\text{t}}} } \right)} \right]} \;{\text{d}}A = p_{{\text{n}}} \oint_{{\Gamma_{{\beta_{{\text{c}}} \cap \beta_{{\text{t}}} }} }} {{\mathbf{n}}_{\Gamma } \left( {\varphi_{{\text{c}}} - \varphi_{{\text{t}}} } \right){\text{d}}\Gamma } $$
(4)

where \({\mathbf{P}}_{{\text{c}}}\) and \({\mathbf{P}}_{{\text{t}}}\) are two overlapping points located in the contactor \(\beta_{{\text{c}}}\) and target \(\beta_{{\text{t}}}\), respectively, \(p_{{\text{n}}}\) is the normal penalty parameter, \({\mathbf{n}}_{\Gamma }\) is the unit normal vector of the boundary of the overlapping area, \(\varphi\) is the corresponding potential function as follows

$$ \varphi \left( {\mathbf{P}} \right) = \min \left\{ {\frac{{3A_{1} }}{A},\frac{{3A_{2} }}{A},\frac{{3A_{3} }}{A}} \right\} $$
(5)

where \(A\) is the area of the triangular element; \(A_{i}\) (\(i\) = 1, 2, 3) is the area of three sub-triangles formed by connecting point P with three nodes of the triangular element, as shown in Fig. 2. Obviously, the potential of a point is 1 at the center of the element while at the boundary is 0.

Fig. 1
figure 1

Schematic diagram of the normal contact force between the target triangular element and contactor triangular element

Fig. 2
figure 2

The potential of a point P in a triangular element

After the normal contact force is obtained, the tangential contact force is calculated by

$$ {\mathbf{f}}_{\tau }^{t + \Delta t} = {\mathbf{f}}_{\tau }^{t} - p_{t} \Delta {\mathbf{u}}_{\tau } $$
(6)

where \(f_{\tau }^{t + \Delta t}\) and \(f_{\tau }^{t}\) are the tangential forces at the next time step \(t + \Delta t\) and the current time step \(t\), respectively, \(p_{{\text{t}}}\) is the tangential penalty parameter, and \(\Delta u_{{\text{t}}}\) is the tangential displacements increment of the contact point at one time step. According to the Coulomb friction law, if the tangential contact force calculated by Eq. (6) is greater than the maximum static friction force, i.e. \(\left| {{\mathbf{f}}_{\tau }^{t + \Delta t} } \right| > \mu \left| {{\mathbf{f}}_{{\text{n}}} } \right|\), the tangential contact force will be set as

$$ {\mathbf{f}}_{\tau }^{t + \Delta t} = - \mu \left| {{\mathbf{f}}_{{\text{n}}} } \right|\frac{{\Delta {\mathbf{u}}_{{\text{t}}} }}{{\left| {\Delta {\mathbf{u}}_{{\text{t}}} } \right|}} $$
(7)

where \(\mu\) is the friction coefficient.

The above contact force is then distributed to the nodes of triangular elements in contact.

2.3 Constitutive of triangular element

The constitutive of the triangular element is given by

$$ {\mathbf{T}} = \frac{1}{{\sqrt {\left| {\det {\mathbf{F}}} \right|} }}\left[ {\frac{E}{1 + v}{\mathbf{E}}_{{\text{d}}} + \frac{E}{1 - v}{\mathbf{E}}_{{\text{s}}} + 2\mu {\mathbf{D}}} \right] $$
(8)

where \({\mathbf{T}}\) is the stress tensor, \({\mathbf{F}}\) is the deformation gradient, \(E\) is the elastic modulus, \(v\) is the Poisson's ratio, \({\mathbf{E}}_{{\text{d}}}\) is the Green strain tensor, \({\mathbf{E}}_{{\text{s}}}\) is the St. Venant strain tensor, \(\mu\) is the damping coefficient, and \({\mathbf{D}}\) is the strain rate tensor, where \({\mathbf{F}}\), \({\mathbf{E}}_{{\text{d}}}\), \({\mathbf{E}}_{{\text{s}}}\), \({\mathbf{D}}\) can be calculated based on the current coordinates, the initial coordinates, the current velocity and the initial velocity of three nodes of a triangular element.

The equivalent nodal force caused by stress tensor \({\mathbf{T}}\) can be calculated by

$$ {\mathbf{f}}^{(i)} = \frac{1}{2}{\mathbf{T}} \cdot {\mathbf{n}}^{(i)} L^{(i)} $$
(9)

where \({\mathbf{f}}^{(i)}\) is the nodal force assigned to node \(i\) of the triangular element (\(i\) is the local number of a node in the triangular element), \({\mathbf{n}}^{(i)}\) is the external normal unit vector of the edge opposite to node \(i\) of the triangular element, and \(L^{(i)}\) is the length of the edge opposite to node \(i\) of the triangular element.

2.4 Fracture model of joint elements

The constitutive model of the joint element is very important for FDEM to simulate the crack initiation and propagation. There are three types of fracture models in the joint element, namely Mode I (tensile failure), Mode II (shear failure) and mixed Mode I–II (mixed tensile–shear failure).

  1. (1)

    For Mode I failure (Fig. 3a): the tensile stress of the joint element increases to the tensile strength \(f_{{\text{t}}}\) from zero as the normal opening amount \(o\) increases to the critical opening amount \(o_{{\text{p}}}\) from zero. Then, the \(\sigma\) gradually decreases to zero as the normal opening amount of the joint element increases to the maximum opening amount \(o_{{\text{r}}}\). Finally, the joint element breaks, and a tensile crack generates.

  2. (2)

    Model II failure (Fig. 3b): the shear stress of the joint element increases to the shear strength \(f_{{\text{s}}}\) from zero as the slip amount \(s\) increases to the critical opening amount \(s_{{\text{p}}}\) from zero. Then, the shear stress gradually decreases to zero as the slip amount of the joint element increases to the maximum slip amount \(s_{{\text{r}}}\). Finally, the joint element breaks, and a shear crack generates.

  3. (3)

    The mixed Mode I–II failure (Fig. 3c): The joint element breaks through a mixed Mode I–II failure if the amounts of normal opening and tangential slip (o and s) satisfy

    $$ \left( {\frac{{o - o_{{\text{p}}} }}{{o_{{\text{r}}} - o_{{\text{p}}} }}} \right)^{2} + \left( {\frac{{s - s_{{\text{p}}} }}{{s_{{\text{r}}} - s_{{\text{p}}} }}} \right)^{2} \ge 1 $$
    (10)
Fig. 3
figure 3

Fracture model of the joint element: a Mode I. b Mode II. c Mixed Mode I–II

The tensile stress and shear stress of the joint element are applied on the two triangular elements that are connected by the joint element, and finally, they are assigned to the nodes of the two triangular elements.

3 Mixed fracture–pore seepage model

3.1 Finite-discrete element discretization

In this model, the problem domain is discretized into triangular elements connected by joint elements, as shown in Fig. 4. Existing fractures are represented by broken joint elements, while the matrix is represented by triangular elements bonded by unbroken joint elements. Note that the nodes of neighboring triangular elements at the fracture are not shared, such that their pressure fields can be calculated independently.

Fig. 4
figure 4

. Finite-discrete discretization of fractured porous media

The 2D mixed fracture–pore seepage model is based on the following assumptions: (1) The pore seepage follows Darcy flow; (2) the fracture seepage obeys cubic law; and (3) the fluid is assumed to be laminar, viscous and incompressible. The 2D mixed fracture–pore seepage model is mainly composed of the pore seepage model, the fracture seepage model and the fluid exchange model between rock matrix and fracture. For the pore seepage model, it includes the fluid flow that follows Darcy's law in triangular elements, and the fluid flow between neighboring triangular elements through joint elements. For the fracture seepage model, the fluid flow occurs in the broken joint element and is described by the cubic law. For the fluid exchange model between fracture and rock matrix, it is determined by the pressure difference between the fracture pressure and the pore pressure on both sides of the fracture and the fluid exchange coefficient of the fracture.

3.2 Pore seepage model

As shown in Fig. 5, the porous media are discretized into triangular elements and unbroken joint elements are inserted between the neighboring triangular elements. The basic principle of the pore seepage model in this paper is as follows:

Fig. 5
figure 5

The element connection in the pore seepage model

The pore seepage consists of pore flow in the triangular element and fluid exchange between the neighboring triangular elements through the unbroken joint element. The pore flow in triangular elements follows Darcy's law. The fluid exchange between the neighboring triangular elements is determined by the pore pressure difference on both sides and the fluid exchange coefficient \(h_{j}\) of the unbroken joint element. The basic unknowns are pore pressure on triangular element nodes, which can be used to linearly interpolate the entire pore pressure distribution in the problem domain. Then, the finite difference method is used to update the pore pressure of each node according to the obtained flow increment of each node at the one time step. Finally, the evolution of pore pressure in the porous media is obtained.

The flow rate along the \(i\)th direction, \(q_{i}\), is described by Darcy’s law:

$$ q_{i} = - \rho_{{\text{w}}} g\frac{{k_{ij} }}{\mu }\frac{\partial h}{{\partial x_{j} }} $$
(11)

where \(\rho_{{\text{w}}}\) is the fluid density, \(g\) is the acceleration of gravity, \(k_{ij}\) is the intrinsic permeability,\(\mu\) is the fluid viscosity, and h is the total head

$$ h = (p - \rho_{{\text{w}}} yg)/(\rho_{{\text{w}}} g) $$
(12)

where p is the pore pressure, and \(g\) is the acceleration of gravity (= − 9.81 m/s2), \(y\) is the ordinate.

Within a control volume V, the change in pore pressure is expressed by [14]:

$$ \frac{\partial p}{{\partial t}} = \frac{M}{V}\left( {Q_{{{\text{total}}}} + \alpha \frac{\partial V}{{\partial t}}} \right) $$
(13)

where \(Q_{{{\text{total}}}}\) is the total flow, \(M\) is the Biot modulus, and \(\alpha\) is the Biot coefficient.

In Fig. 5, the volume and mass of a triangular element are equally distributed to its three nodes. The pore pressure distribution in the triangular element can be linearly interpolated by pore pressures of its three nodes. Taking node 4 as an example, fluid flow can occur within triangular element Δ489 if the water head of node 4 is different from that of nodes 8 and 9. Similarly, when the water head of node 4 is different from that of nodes 1 and 5, the fluid exchange occurs between node 4 and nodes 1 and 5 through joint elements 4975 and 4821, respectively.

Within triangular element Δ489 that connects to node 4, the total water head is assumed to be a linearly distributed and its gradient keeps as a constant as follows:

$$ \frac{\partial h}{{\partial x_{i} }} = \frac{1}{A}\int\limits_{A} {\frac{\partial h}{{\partial x_{i} }}{\text{d}}A} = \frac{1}{A}\int\limits_{s} {hn_{i} {\text{d}}s} = \frac{1}{A}\sum\limits_{m = 1}^{3} {\overline{h}^{m} } \in_{ij} \Delta x_{j}^{m} $$
(14)

where \(A\) is the area of the triangular element, \(n_{i}\) is the outward normal unit vector of the element edge, \(\overline{h}^{m}\) is the average total water head on edge \(m\), \(\Delta x_{j}^{m}\) is the coordinate difference between the two nodes of edge \(m\), and \(\in_{ij}\) is the two-dimensional permutation tensor

$$ \in { = }\left( {\begin{array}{*{20}c} 0 & 1 \\ { - 1} & 0 \\ \end{array} } \right) $$
(15)

Thereupon, substituting Eq. (14) into Eq. (11), the flow rate can be expressed as

$$ q_{i} = - \rho_{{\text{w}}} g\frac{{k_{ij} }}{\mu }\left( {\frac{1}{A}\sum\limits_{m = 1}^{3} {\overline{h}^{m} } \in_{ij} \Delta x_{j}^{m} } \right) $$
(16)

It is worth noting that Eq. (16) needs modification if the element is not fully saturated. For example, if two nodes have zero pore pressure, their total head gradient might not be zero, which still contributes to flow within the element. Apparently, this phenomenon is unreasonable. Therefore, a modification function \(f_{s}\) is proposed to multiply Eq. (16):

$$ f_{s} = \overline{s}^{2} (3 - 2\overline{s}) $$
(17)

where \(\overline{s}\) is the average of the saturation of the three nodes. It can be seen that: the flow rate in the triangular element becomes zero (\(f_{s}\) = 0) if the average saturation \(\overline{s}\) = 0. When fully saturated, the flow rate within the triangular element will not be affected (\(f_{s}\) = 1). Finally, the flow rate can be modified as

$$ q_{i} = - \rho_{{\text{w}}} g\frac{{k_{ij} }}{\mu }\frac{\partial h}{{\partial x_{j} }}f_{s} $$
(18)

Then, the fluid flow into node 4 from the triangular element \(\Delta 489\) per unit time can be obtained as

$$ Q_{\Delta 489 \to 4} = - \frac{{q_{i} n_{i}^{(4)} L^{(4)} }}{2} $$
(19)

where \(n_{i}^{(4)}\) is the outer normal unit vector of the edge opposite node 4 in triangular element \(\Delta 489\), and \(L^{(4)}\) is the length of the edge opposite to node 4 in triangular element \(\Delta 489\).

Besides, triangular element Δ489 has fluid exchange between Δ123 and Δ567 through the joint elements 1248 and 4975, respectively. As shown in Fig. 5, the fluid exchange from Δ123 to Δ489 through joint element 1248 is given as

$$ Q = \frac{1}{2}h_{j} (p_{1} + p_{2} - p_{4} - p_{8} )L = \frac{1}{2}h_{j} (p_{1} - p_{4} )L + \frac{1}{2}h_{j} (p_{2} - p_{8} )L $$
(20)

where \(p_{1} ,p_{2} ,p_{4} ,p_{8}\) are the pore pressure of nodes 1, 2, 4 and 8, respectively; \(h_{j}\) is the fluid exchange coefficient of the unbroken joint element, which will be further discussed in the following examples.

Note the first part of Eq. (20) represents the flow from triangular element Δ123 into node 4 through joint element 1248

$$ Q_{\Delta 123 \to 4} = \frac{1}{2}h_{j} (p_{1} - p_{4} )L $$
(21)

Similarly, the flow from triangular element Δ567 into node 4 through joint element 4975 can be obtained as

$$ Q_{\Delta 567 \to 4} = \frac{1}{2}h_{j} (p_{5} - p_{4} )L $$
(22)

Thus, the total flow \(Q_{{\text{p}}}\) into node 4 is given by

$$ Q_{{\text{p}}} = Q_{\Delta 489 \to 4} + Q_{\Delta 123 \to 4} + Q_{\Delta 567 \to 4} $$
(23)

The pore pressure of node 4, according to Eq. (13), can be updated by

$$ p_{{\text{p}}}^{t + \Delta t} = p_{{\text{p}}}^{t} + \frac{{M(Q_{{\text{p}}} \cdot \Delta t - \Delta V_{{\text{p}}} )}}{{V_{{\text{p}}}^{t + \Delta t} }} $$
(24)

where \({\Delta }t\) is the time step, and \(\Delta V_{{\text{p}}} = V_{{\text{p}}}^{t + \Delta t} - V_{{\text{p}}}^{t}\) is the volume change of the pore matrix associated with node 4 through mechanical calculation. The volume of pore matrix, \(V_{{\text{p}}}^{{}}\), can be obtained as 1/3 of volume of triangular element that contains node 4. Using the same procedure, the pore pressure evolution of the entire problem domain is solved.

For the continuum porous medium, the unbroken joint element between the neighboring triangular elements can hinder fluid flow. Therefore, the fluid exchange coefficient \(h_{j}\) of the unbroken joint element should be large enough to reduce the hindering effect. We conducted a sensitivity analysis to determine the value range of \(h_{j}\) in Example 1. It is found that when \(h_{j} \ge 100\frac{k}{{\mu L_{{\text{e}}} }}\)(\(k\) is the intrinsic permeability of the triangular element, \(\mu\) is the fluid viscosity, and \(L_{{\text{e}}}\) is the element size), the numerical result agrees well with the theoretical solution of pore pressure in the continuum porous medium.

As an explicit algorithm is used in the pore seepage model, the time step size should be less than the critical value specified as

$$ \Delta t_{f} = {\text{min}}\left[ {\frac{V}{{M\sum\limits_{i} {{{k_{i} } \mathord{\left/ {\vphantom {{k_{i} } \mu }} \right. \kern-\nulldelimiterspace} \mu }} }}} \right] $$
(25)

where \(k_{i}\) is the isotropic intrinsic permeability.

3.3 Fracture seepage model

Figure 6 shows a computational mesh composed of broken joint elements (white rectangular strips), unbroken joint elements (gray rectangular strips) and triangular elements. At the junctions of joint elements, “crack nodes” are labeled as C1, C2… C7 in Fig. 6. If a crack node is connected to any broken joint element, it will be defined as an “open crack node” and included into the fracture network for seepage calculation. The remaining crack nodes are defined as “closed crack node.” The broken joint elements and open crack nodes constitute a fracture network to conduct water in the fracture seepage model.

Fig. 6
figure 6

The computational mesh for fracture seepage

Taking the fracture network in Fig. 6 as an example, the total pressure difference between crack nodes C1 and C2 can be given by

$$ {\Delta }p_{2 - 1} = p_{2} - p_{1} + \rho_{{\text{w}}} g(y_{2} - y_{1} ) $$
(26)

where \(p_{1}\) and \(p_{2}\) are the fracture pressure at crack nodes C1 and C2, and \(y_{1}\) and \(y_{2}\) are the ordinate of C1 and C2, respectively. Then, the flow rate from fracture node C2 to C1 is described by the cube law as

$$ q_{2 \to 1} = \frac{1}{12\mu }a^{3} \frac{{{\Delta }p_{2 - 1} }}{L} $$
(27)

where \(\mu\) is the fluid viscosity, \(L\) is the length of the broken joint element 1284 between nodes 1 and 2, and \(a\) is the average aperture of the joint element, which is related to the average normal displacement un of the broken joint element via Eq. (28), see Fig. 7.

$$ a = a_{0} + u_{n} ,\;\quad a_{\min } \le a \le a_{\max } $$
(28)

where \(a_{0}\) is the initial aperture of the fracture. A minimum aperture \(a_{\min }\) and a maximum aperture \(a_{\max }\) can be specified to facilitate numerical computation.

Fig. 7
figure 7

Relationship between the average normal displacement and the average aperture of the broken joint element [70]

Similar to Eq. (16), Eq. (27) should also be multiplied by a function \(f_{s} = s^{2} (3 - 2s)\) where \(s\) is the saturation of the outflow node, e.g., if \(q_{2 \to 1}\) > 0, the outflow node is C2; otherwise, the outflow node is C1. Finally, the total flow between the two nodes can be given by

$$ q_{2 \to 1} = \frac{1}{12\mu }a^{3} \frac{{{\Delta }p_{2 - 1} }}{L}f_{s} $$
(29)

Since the crack node 1 also connects with crack nodes 4 and 6, the flow rate \(q_{4 \to 1}\), \(q_{6 \to 1}\) between C1 and C4, C6 can be also obtained similarly. Thus, the total flow into fracture node C1 is

$$ Q_{{\text{c}}} = q_{2 \to 1} + q_{4 \to 1} + q_{6 \to 1} $$
(30)

Next, according to the law of mass conservation, the degree of saturation at node C1 is updated as:

$$ s_{t + \Delta t} = s_{t} + Q_{{\text{c}}} \frac{\Delta t}{{V_{{\text{c}}}^{t + \Delta t} }} - \frac{{\Delta V_{{\text{c}}} }}{{V_{{\text{m}}} }} $$
(31)

where \(s_{t + \Delta t}\) and \(s_{t}\) are the saturation associated with node C1 at the present and the previous time steps. \(\Delta V_{{\text{c}}} { = }V_{{\text{c}}}^{t + \Delta t} - V_{{\text{c}}}^{t}\), \(V_{{\text{m}}} = \frac{{(V_{t + \Delta t} + V_{t} )}}{2}\), where \(V_{t + \Delta t}\) and \(V_{t}\) are the volume associated with the crack node C1 at the current time step and the previous time step, respectively. Note that volume associated with node C1 is calculated as half of the volumes of all broken joint elements that are connected to C1. If the fracture node saturation \(s_{t + \Delta t}\) < 1 according to Eq. (31), then pressure at the fracture node C1 would be zero. If the calculated \(s_{t + \Delta t} \ge 1\), the value will be set to 1, and the pressure at node C1 can be updated as [50]

$$ p_{{\text{c}}}^{t + \Delta t} = p_{{\text{c}}}^{t} + K_{{\text{w}}} \left( {Q_{{\text{c}}} \frac{\Delta t}{{V_{{\text{c}}}^{t + \Delta t} }} - \frac{{\Delta V_{{\text{c}}} }}{{V_{{\text{m}}} }}} \right) $$
(32)

where \(K_{{\text{w}}}\) is the bulk modulus of the fluid.

3.4 The fluid exchange between the pore and fracture seepage

In this section, we set up the model to account for fluid exchange between the pore matrix and fractures. Assume that the pore pressure of the rock matrix at both sides of the fracture is \(p_{{\text{p}}}^{ + }\) and \(p_{{\text{p}}}^{ - }\), respectively (see Fig. 8), the fracture pressure in the crack is \(p_{{\text{c}}}\), the fracture length is \(L\), and the fluid exchange coefficient between the fracture and rock matrix at the fracture is \(h_{{\text{c}}}\), then the fluid exchange per unit time between the fracture and rock matrix on the left and the right side of the interface is given by

$$ Q_{{\text{e}}}^{ + } = h_{{\text{c}}} (p_{{\text{p}}}^{ + } - p_{{\text{c}}} )L\quad {\text{and}}\quad Q_{{\text{e}}}^{ - } = h_{{\text{c}}} (p_{{\text{p}}}^{ - } - p_{{\text{c}}} )L $$
(33)
Fig. 8
figure 8

Fluid exchange between fracture and rock matrix

Finally, the pressure in the fracture is updated by

$$ p_{{\text{c}}}^{t + \Delta t} = p_{{\text{c}}}^{t} + K_{{\text{w}}} \left[ {\left( {Q_{{\text{c}}} { + }Q_{{\text{e}}}^{ + } { + }Q_{{\text{e}}}^{ - } } \right)\frac{\Delta t}{{V_{{\text{c}}}^{t + \Delta t} }} - \frac{{\Delta V_{{\text{c}}} }}{{V_{{\text{m}}} }}} \right] $$
(34)

Similar to Eq. (24), the pore pressure on both sides of the fracture is updated by

$$ p_{{\text{p}}}^{t + \Delta t} = p_{{\text{p}}}^{t} + \frac{{M\left[ {(Q_{{\text{p}}} - Q_{{\text{e}}}^{ + / - } ) \cdot \Delta t - \Delta V_{{\text{p}}} } \right]}}{{V_{{\text{p}}}^{t + \Delta t} }} $$
(35)

3.5 Effect of cracking on the pore and fracture seepage

As shown in Fig. 9, when some cracks are generated (for example, joint element 1248 breaks), the flow \(Q_{\Delta 123 \to 4}\) from triangular element Δ123 into pore node 4 in the pore seepage model, shown in Eq. (21), should be replaced by the flow from the broken joint element 1248 into pore node 4 as:

$$ Q_{1248 \to 4} = \frac{1}{2}h_{{\text{c}}} (p_{{{\text{c1}}}} - p_{4} )L $$
(36)

where \(h_{{\text{c}}}\) is the fluid exchange coefficient at the fracture (i.e. broken joint element). \(p_{{{\text{c1}}}}\) is the pressure at crack node C1. The flow calculations of other pore nodes at the newly generated fractures are also changed as described above.

Fig. 9
figure 9

The calculation of pore seepage with cracking

Crack generation changes the fluid flow network and naturally affects the fracture seepage. Therefore, in combination with the previous fracture seepage model and fluid exchange between fractures and rock matrix, the effect of dynamic cracking on fracture seepage can be readily considered.

4 Hydromechanical coupling

The above mixed fracture–pore seepage model can be combined with mechanical calculation of FDEM to construct a fully coupled hydromechanical model. The fracture pressure and pore pressure are considered in the mechanical calculation using the following schemes:

4.1 Fracture pressure

As shown in Fig. 10a, assuming that the pressures at two nodes of a broken joint element are \(p_{{{\text{c1}}}}\) and \(p_{{{\text{c2}}}}\), the total fracture pressure acting on the edge of the triangular elements can be determined by

$$ \left( {f_{{\text{c}}} } \right)_{i} = - \frac{{(p_{{{\text{c1}}}} + p_{{{\text{c2}}}} )L}}{2}n_{i} $$
(37)

where L is the length of the broken joint element, and \(n_{i}\) is the outward normal of the element edge. The total pressure is then distributed to the two nodes of the edge.

Fig. 10
figure 10

Fracture pressure and pore pressure acting on two triangular elements connected by a broken joint element

4.2 Pore pressure

According to Biot’s theory, the total stress in the rock matrix can be expressed as

$$ \sigma_{ij} = \sigma^{\prime}_{ij} - \alpha p_{{\text{p}}} \delta_{ij} $$
(38)

where \(\alpha\) is the Biot coefficient. Note that in the above equation, the negative sign is introduced to the pore pressure \(p_{{\text{p}}}\) as the sign convention used in the mechanical calculation takes tensile component of stress as positive. As shown in Fig. 10b, the pore pressure causes the change of stress field in the triangular element by

$$ \Delta \sigma_{ij} = - \alpha p_{{\text{p}}} \delta_{ij} $$
(39)

The stress increment can be treated as nodal forces applied to the triangular elements as follows:

$$ \left( {f_{{\text{p}}} } \right)_{i}^{(k)} = \Delta \sigma_{ij} n_{j}^{(k)} \frac{{L^{(k)} }}{2} = - \frac{{\alpha p_{{\text{p}}} L^{(k)} }}{2}n_{i}^{(k)} , k = {1},{2},{3} $$
(40)

where \(n_{i}^{(k)}\) and \(L^{(k)}\) are the outward unit normal vector and length of the edge facing node k.

4.3 Hydromechanical coupling framework

The flowchart of the coupled hydromechanical model is illustrated in Fig. 11. The mainly includes the following parts: First, the mixed fracture–pore seepage model is used to obtain the pore pressure and fracture pressure distribution. Then, these pressures are converted into nodal forces of the triangular elements and entered into the FDEM system of equations. Then, FDEM mechanical fracture calculation is performed to obtain the stress and strain of triangular elements, and the nodal displacements are updated. At the same time, the breakage of joint elements is determined and the fracture network is updated as input for the next calculation step of the mixed fracture–pore seepage model. In this way, the hydromechanical coupling is realized. The hydromechanical model can simulate the fluid-driven fracturing with consideration of the effect of crack propagation on the fracture and pore seepage. These features will be illustrated using a few examples in Sect. 4.

Fig. 11
figure 11

Flowchart of hydromechanical coupling calculation

5 Verification examples

5.1 1D transient saturated pore seepage

In this example, 1D transient seepage in a rectangular strip (\(L\) × \(W\)) is simulated (Fig. 12). The bottom and top boundaries of the model are impervious. The pore pressure at the left and right boundaries is fixed at \(p_{1}\) and \(p_{2}\), respectively. The initial pore pressure in the strip is set to be zero everywhere. We study the pore pressure evolution with time in the rectangular strip.

Fig. 12.
figure 12

1D transient saturated pore seepage

Theoretical solution for this problem in the rectangular strip can be written as

$$ p(x,t) = p_{1} + \frac{x}{L}(p_{2} - p_{1} ) + \frac{2}{\pi }\sum\limits_{i = 1}^{\infty } {{\text{e}}^{{ - \kappa i^{2} \pi^{2} t/L^{2} }} } \left( {\frac{{p_{2} \cos (i\pi ) - p_{1} }}{i}} \right)\sin \frac{i\pi x}{L} $$
(41)

where x is the distance to the left boundary, t is the time, \(\kappa = (k/\mu )M\), \(k\) is the intrinsic permeability, \(\mu\) is the fluid viscosity, and \(M\) is the Biot modulus (\(M = K_{{\text{w}}} /\phi\)), where \(k_{{\text{w}}}\) is the bulk modulus of fluid, and \(\phi\) is porosity of the medium. As shown in Fig. 12, the rectangular strip (\(L\) × \(W\)) is meshed into 80 triangular elements with a size of 0.05 m. Assume \(L\) = 1 m, \(W\) = 0.2 m, \(p_{1}\) = 100 kPa, and \(p_{2}\) = 0 kPa, k = 2 × 10–13 m2, \(\mu\) = 0.001 Pa s, Kw = 2.2 GPa, \(\phi\) = 0.1. The fluid density \(\rho_{w}\) = 1000 kg/m3, and the medium is fully saturated s = 1.

In the pore seepage model, the pore seepage in the entire problem domain is composed of the pore flow in the triangular element and fluid exchange between the neighboring triangular elements through the unbroken joint element. However, the unbroken joint element can hinder fluid flow and thus causes the numerical result unable to match the theoretical solution. Theoretically, the fluid exchange coefficient \(h_{j}\) of the unbroken joint element should be taken an infinite value to eliminate the hindering effect. However, referring to Eq. (25), the required time step for numerical stability is inversely proportional to \(h_{j}\), which would approach zero if the fluid exchange coefficient takes infinity. The situation is clearly unacceptable for numerical simulation. Therefore, it is vital to determining appropriate the value range of \(h_{j}\) to ensure that the numerical result matches the theoretical solution and the time step size is not too small.

According to the dimensional analysis, the fluid exchange coefficient can be expressed as \(h_{j} = n\left( {\frac{k}{{\mu L_{{\text{e}}} }}} \right)\), where \(L_{{\text{e}}}\) is the triangular element size, and \(n\) is a non-dimensional magnification factor.

Next, we will conduct a formal sensitivity analysis to determine the appropriate magnification factor \(n\) by varying the intrinsic permeability \(k\), the fluid viscosity \(\mu\), element size \(L_{{\text{e}}}\) and element shape.

5.1.1 The effect of \(n\) on the numerical accuracy with different \(k\)

We assume the intrinsic permeability \(k\) = 2 × 10–13, 2 × 10–12, 2 × 10–11 m2, the magnification factor n ranges from 1 to 200, and other parameters remain unchanged. In order to quantitatively compare the difference between numerical results and analytical solutions, a relative error is defined as follows

$$ {\text{RE = }} = \frac{{\sum {|p - p_{{\text{p}}} |} }}{\sum p \, } $$
(42)

where \({\text{p}}\) is the pore pressure obtained from the theoretical solution Eq. (41), and \(p_{{\text{p}}}\) is the pore pressure obtained from the numerical simulation. The summation is taken over all nodal points along the centerline in Fig. 12.

Figure 13 shows the variation of RE against the magnification factor \(n\) under different k. It can be seen that as the magnification factor \(n\) increases, the RE decreases linearly in a log–log plot. It is important to note that the rate of convergence seems not to be affected by the value of k. For all the cases, it is found that when \(n\) is equal to or larger than 100, the relative error between the simulation results and the theoretical solution will be less than 1%, which is sufficiently accurate for many engineering applications.

Fig. 13
figure 13

The effect of magnification factor \(n\) on the relative error under different intrinsic permeabilities \(k\)

5.1.2 The effect of \(n\) on the numerical accuracy with different \(\mu\)

In this set of analysis, the intrinsic permeability \(k\) is assumed to be 2 × 10–13 m2. We change the fluid viscosity \(\mu\) = 0.01, 0.001, 0.0001 Pa s, and the other parameters keep unchanged. Correspondingly, the amplification factor \(n\) varies from 1 to 200.

The relative error versus amplification factor n is plotted in Fig. 14 under different viscosities \(\mu\). Interestingly, the rate of convergence is very similar to Fig. 14, and it is not much influenced by the value of \(\mu\). Therefore, we reached the same conclusion that when \(n\) is equal to or larger than 100, the relative error will be less than 1% regardless of the value of \(\mu\).

Fig. 14
figure 14

The effect of magnification factor \(n\) on the relative error under different viscosities \(\mu\)

5.1.3 The effect of \(n\) on the numerical accuracy under different \(L_{{\text{e}}}\)

As shown in Fig. 15, we change the triangular element size from \(L_{{\text{e}}}\) = 0.05 m to 0.03 and 0.01 m, respectively, and assume \(k\) = 2 × 10−13m2, \(\mu\) = 0.001 Pa s. Figure 16 shows the convergence plot of the relative error against the amplification factor \(n\). It is important to note that the element size has little effect on the overall convergence in Fig. 16, which also has a similar convergence trend as shown in Figs. 13 and 14. Again, when \(n\) is equal to or larger than 100, the relative error will be less than 1% regardless of the element size.

Fig. 15
figure 15

The rectangular strips are discretized using three different element sizes

Fig. 16
figure 16

The effect of \(n\) on the relative error under different element sizes. \(L_{{\text{e}}}\)

Based on the sensitivity analysis of the previous sections, we can conclude that when the fluid exchange coefficient of the unbroken joint element \(h_{j}\) is expressed as \(h_{j} = n\left( {\frac{k}{{\mu L_{{\text{e}}} }}} \right)\), the numerical accuracy is primarily controlled by the non-dimensional magnification factor n, regardless of the intrinsic permeability \(k\), the fluid viscosity \(\mu\), element size \(L_{{\text{e}}}\). For practical application, n should be chosen as 100 to guarantee a sufficiently accurate numerical solution, in the meanwhile, a large enough time step for computational efficiency.

5.1.4 The effect of element shapes

Next, we study the effect of different element shapes on the numerical accuracy of the pore seepage model. We assume the intrinsic permeability \(k\) = 2 × 10−13m2, the triangular element size \(L_{{\text{e}}}\) = 0.1 m, the fluid viscosity \(\mu\) = 0.001 Pa s, the amplification factor \(n\) = 100. Three sets of computational meshes using different element shapes are shown in Fig. 17.

Fig. 17
figure 17

Computational mesh of different element shapes

Figure 18 shows pore pressure distribution of the numerical and theoretical solutions at t = 0.02 s for different element shapes. It can be seen that the pore pressure distribution calculated by the pore seepage model matches the theoretical solution very well. The errors of pore pressure distribution at each nodal point are all less than 0.6% for three element shapes, which shows the element shape has little effect on the numerical results. Therefore, the simulation result of the pore seepage model agrees well with the theoretical solution as long as \(h_{j} = 100\left( {\frac{k}{{\mu L_{{\text{e}}} }}} \right)\).

Fig. 18
figure 18

Comparison between numerical and theoretical solutions of pore pressure for three different element shapes, t = 0.02 s, \(n\) = 100

5.2 Two-dimensional steady-state saturated pore seepage

A production well is drilled in the center of stratum and penetrates the oil layer. A 2D horizontal, homogeneous stratum model is shown in Fig. 19, with constant pore pressures \(p_{{\text{w}}}\) and \(p_{{\text{e}}}\) prescribed on the well and external boundary, respectively.

Fig. 19
figure 19

Diagram of radial pore seepage model

The theoretical solution of the pore pressure distribution and pressure gradient at any point in the stratum model is given by

$$ p(r) = p_{{\text{w}}} + \frac{{p_{{\text{e}}} - p_{{\text{w}}} }}{{\ln \frac{{r_{{\text{e}}} }}{{r_{{\text{w}}} }}}}\ln \frac{r}{{r_{{\text{w}}} }} $$
(43)
$$ \frac{{{\text{d}}p}}{{{\text{d}}r}} = \frac{{p_{{\text{e}}} - p_{{\text{w}}} }}{{\ln \frac{{r_{{\text{e}}} }}{{r_{{\text{w}}} }}}} \times \frac{1}{r} $$
(44)

where \(r_{{\text{w}}}\) is the well radius, and \(r_{{\text{e}}}\) is the radius of external boundary.

The model parameters are as follows: \(r_{{\text{e}}}\) = 1 m, \(r_{{\text{w}}}\) = 0.1 m, \(p_{{\text{e}}}\) = 106 Pa, \(p_{{\text{w}}}\) = 107 Pa, the stratum permeability \(k\) = 1 × 10−13m2, the fluid viscosity \(\mu\) = 0.001 Pa s, the fluid density \(\rho_{{\text{w}}}\) = 1000 kg/m2. The mesh size is 0.03 m, and the non-dimensional magnification factor for the fluid exchange coefficient n = 100 as discussed above.

The numerical and theoretical solutions of the pore pressure distribution along the radial direction are shown in Fig. 20. It can be seen that the numerical results agree well with the theoretical solutions. The pore pressure gradient decreases from the well boundary to the external boundary, which is consistent with the solution in Eq. (44).

Fig. 20
figure 20

a Analytical and numerical results of pore pressure distribution; b the contours of pore pressure distribution obtained from numerical simulation

Note that the above simulation is only for validating the seepage model. Fluid-driven fracturing in the porous media can also be simulated by combining the capacity of mechanical fracture calculation from FDEM with the mixed fracture–pore seepage model proposed in this study. The details of developing and implementing the mechanical fracture model in FDEM can be found in [35, 68], which has been successfully used for solving thermal cracking problems.

Several additional parameters, as listed in Table 1, are required for the fracture model, including (1) Young’s modulus, density, Passion’s ratio for elastic stress–strain calculation; (2) cohesion, frictional angle and tensile strength for describing the peak strength of the joint element; and (3) fracturing will occur in the joint element when the fracture energy for the Mode I (tensile fracture) or Mode II (shear fracture) is reached.

Table 1 The mechanical parameters for the calculations

Taking the same seepage model as an example, the maximum principal stress distributions are shown in Fig. 21. At the beginning of the simulation (Step 1000), considerable tensile stress is concentrated around the well boundary. Crack begins to initiate and propagates toward the exterior boundary in the radial direction, when the joint elements break. It can be seen that the tensile stress concentration appears at the crack tips and will continue to extend outward when water is injected into the cracks. In the meanwhile, as water enters the cracks, the large fracture pressure induces compressive stress in the porous media around the well boundary.

Fig. 21
figure 21

Evolution of the maximum principal stress

Figure 22 shows the evolution of pore pressure distribution and crack propagation. It is visually obvious that the high pore pressure is generated along the crack paths when the fluid enters the cracks and seeps to the surrounding. Also, it can be found that the fluid from the well boundary can constantly enter the rock matrix, causing that the pore pressure around the well boundary gradually increases with time. From this example, it is demonstrated that the pore seepage model is very effective to take into account the rock matrix permeability and crack propagation during the hydraulic fracturing.

Fig. 22
figure 22

The evolution of pore pressure distribution and crack propagation with time step in hydraulic fracturing process in the two-dimensional pore seepage model

6 The mixed fracture–pore seepage

In the previous section, we verified the correctness of the model in dealing with the pore seepage problems. In this section, seepage problems in fractured porous media are investigated.

6.1 Single-fracture porous media seepage

To verify the model in dealing with the fluid exchange between a fracture and rock matrix, we designed a single-fracture porous media. The model size is 120 m × 10 m, and a fracture is located at \(x\) = 0 m in the fractured porous media, shown in Fig. 23. Fracture pressure \(p_{{\text{c}}}\) remains constant, and the initial pore pressure \(p_{0}\) is zero. All outer boundaries are impervious. The fluid in the fracture enters the porous media through the fracture due to pressure difference. Therefore, the pore pressure in the fractured porous media increases with time. The theoretical solution to this problem is derived by the authors as follows:

$$ p(x,t) = p_{0} + (p_{{\text{c}}} - p_{0} )\left[ {{\text{erfc}}\left( {\frac{x}{{2\sqrt {\alpha t} }}} \right) - {\text{e}}^{{\left( {\frac{{h_{{\text{c}}} x\mu }}{{K_{{\text{m}}} }} + \frac{{h_{{\text{c}}}^{2} \alpha t\mu^{2} }}{{K_{{\text{m}}}^{2} }}} \right)}} {\text{erfc}}\left( {\frac{x}{{2\sqrt {\alpha t} }} + \frac{{h_{{\text{c}}} \mu \sqrt {\alpha t} }}{{K_{{\text{m}}} }}} \right)} \right] $$
(45)

where \(p_{0}\) is the initial pore pressure of the model, \(p_{{\text{c}}}\) is the fracture pressure, \(x\) is coordinate component along the x direction, \(t\) is the time, and \({\text{erfc}}\) is the complementary error function, \(\alpha = K_{{\text{w}}} k/(\mu \phi )\), \(K_{{\text{w}}}\) is the bulk modulus of fluid, \(k\) is the intrinsic permeability, \(\phi\) is the porosity, \(\mu\) is the fluid viscosity, and \(h_{{\text{c}}}\) is the fluid exchange coefficient of the fracture.

Fig. 23
figure 23

Schematic diagram of the mixed fracture–pore seepage model in a single-fracture porous media

The calculated parameters of the numerical model are as follows: \(p_{{\text{c}}}\) = 8 × 106 Pa, \(p_{0}\) = 0 Pa, \(k\) = 10–9 m2, \(h_{{\text{c}}}\) = 2 × 10–7 m/Pa s, \(K_{{\text{w}}}\) = 2.2 × 109 Pa, \(\mu\) = 0.001 Pa s, and \(\phi\) = 1.

As shown in Fig. 24, the pore pressure in the porous media increases continuously when the fluid enters the porous media from the fracture, which agrees well with the theoretical solution (\(x\) > 0). It is interesting to note that while a constant pressure 8 × 106 Pa is maintained in the fracture, the pore pressure at the interface is not equal to the fracture pressure but increases with time. In addition, we can see that the pore pressures on both sides of the fracture are equal at the beginning (t = 0.001 s). Later, the pore pressure on the left side of the fracture will be greater than that at the right side (t = 0.1, 0.2 s) because the fluid has reached the impervious boundary on the left. It can be seen that the mixed fracture–pore seepage model can well consider the discontinuity of pore pressure on both sides of the fracture.

Fig. 24
figure 24

The numerical and theoretical solutions of pore pressure distribution in the model at different times

6.2 Double-fracture porous media seepage

In this part, the mixed fracture–pore seepage model is verified by a standard example Tatomir [49]. As shown in Fig. 25, two fault lines intersect with each other in the porous medium at depth, and they outcrop at two valleys on the ground surface. The surface topography is symmetric. The total head (in m) is prescribed at the top boundary of the model as the following function to represent the elevation of water table,

$$ h = Y - 1000 $$
(46)
Fig. 25
figure 25

The double-fracture model and the boundary condition

Except for the top boundary, all other boundaries are impervious. The model is discretized into 1644 triangular elements connected by joint elements.

Figure 26 shows the total head distribution when the seepage reaches the steady state. The maximum pore pressure is at the mountain peak and gradually decreases to depth. The minimum pore pressure is at the intersection of the valley and fault zone.

Fig. 26
figure 26

Hydraulic head distribution in the double-fracture model at steady state

We take the total heads at monitor lines Y = 1000, 800 and 600 m to compare with the results from Tatomir [49]. As shown in Fig. 27, the numerical results are in good agreement with that from Tatomir [49], proving the correctness of the mixed fracture–pore seepage model in dealing with the fractured porous media seepage.

Fig. 27
figure 27

The numerical result of the pressure water head at the monitor line (Y = 1000, 800, and 600 m) and result from Tatomir [49] in the double-fracture model

6.3 Fractured porous media seepage

In this section, an example of fractured porous media seepage is investigated by the mixed fracture–pore seepage model. As shown in Fig. 28, a 40 m × 30 m rectangular domain contains 6 cracks. The position coordinates of the cracks are shown in Table 2. The origin of the coordinates is located in the center of the rectangular. The initial pore pressure within the model is 0 MPa, and the pore pressure at the left boundary is fixed at 20 MPa while at the right boundary is fixed at 0 MPa. The top and bottom boundaries are impervious. The model is discretized into 2758 triangular elements. The parameters are listed as follows: the intrinsic permeability of the matrix \(k\) = 10–13 m2, the fluid viscosity \(\mu\) = 0.001 Pa s, the porosity of the matrix \(\phi\) = 0.1, the aperture of the crack a = 0.001 m, the fluid exchange coefficient of the fracture \({\text{h}}_{{\text{c}}}\) = 2 × 10–8 m/Pa s.

Fig. 28
figure 28

The physical model of porous media with a fracture network

Table 2 Coordinates of the crack ends in the complex fractured porous media

At different time steps, the pore pressure propagates from the left to the right (see Fig. 29). Compared with the matrix, cracks have much higher permeability. Therefore, buildup of the pressure around crack tips A, E, D appears to be slower than that of the matrix when the fluid exchange between rock matrix and fracture occurs at t = 0.1 h. On the other hand, pressure around crack tips B, K, F is larger than the pore pressure of the matrix (t = 0.3 h). With the continued transmission of pore pressure, the pore pressure around the fracture gradually increases until it stabilizes (t = 0.5 h, t = 1 h). The entire seepage process reflects the effect of crack distribution on fluid flow in the fractured porous media.

Fig. 29
figure 29

Pore pressure distribution by the 2D mixed fracture–pore seepage model

To further verify the mixed fracture–pore seepage model in this paper, COMSOL Multiphysics [10] is also used to simulate the same example, as shown in Fig. 30. It can be seen that the result from the mixed fracture–pore seepage model in this paper is in good agreement with the results from COMSOL Multiphysics. To compare the results quantitatively, we set up a horizontal monitoring line at \(y\) = 5 m to obtain the pore pressure distribution. As shown in Fig. 31, the pore pressure distribution along the monitoring line agrees very well via two models. In addition, it can be seen that from the fracture interaction point to the point close to crack tips B, K (X = − 1 ~ 10 m), pore pressure gradient in the matrix appears to be much smaller than the rest part, implying that the flow rate within this area is much smaller. The main reason is that this area is almost enclosed by several cracks. Since the permeability of the fractures is much greater than that of the rock matrix, these cracks become channels for preferential fluid flow and served as pressure boundary for the area. As a result, the pore pressure in this region remains substantially unchanged. This example clearly shows the flow and pressure redistribution within the fracture network and the rock matrix. The excellent agreement with simulation results from COMSOL Multiphysics further validates the correctness of the mixed fracture–pore seepage model to solve fluid flow in complex fractured porous media.

Fig. 30
figure 30

Pore pressure distribution obtained by COMSOL [10]

Fig. 31
figure 31

Pore pressure distribution at y = 5 m, when t = 3 h

6.4 Modeling of multi-cracks hydraulic fracturing

In the previous sections, we verified the correctness of the model to deal with seepage in fractured porous media. In this section, the multi-cracks hydraulic fracturing problems in the fractured porous media are investigated. In the first example, the mutual influence of three prefabricated cracks propagating under the effect of fluid is investigated, but there is no crack intersection between the cracks. In the second example, we study the extension and intersection of two cracks under the action of fluid.

6.4.1 Simulation of crack growth paths for horizontal multiple cracks

In this part, crack propagation of horizontal multiple cracks driven by fluid in fractured porous media is investigated. The geometry and boundary conditions for this model are shown in Fig. 32. There are three initial cracks with equal length of 0.2 m and spacing of 0.3 m on the left boundary of the computational domain. Fluid are injected into each crack with a prescribed flow rate \(q_{0}\) = 1 × 10–2 m2/s. The calculation parameters are listed in Table 3. The geometry model is discretized into 15,134 triangular elements, and the mesh size is 0.05 m. The fluid exchange coefficient of the fracture \({\text{h}}_{{\text{c}}}\) is chosen as 1 × 10–9 m/Pa s.

Fig. 32
figure 32

Geometry and boundary conditions for the multi-cracks hydraulic fracturing

Table 3 Material parameters of the porous media and fluid

Figure 33 shows the propagation of the cracks and change in pore pressure within the porous media upon injection of the fluid. It is interesting to note that the upper and lower cracks are affected by the middle crack, and their propagation paths are deflected from the horizontal direction toward the upper and lower boundaries of the model [40, 73]. This is attributed to the change of stress field caused by the fracture pressure in the middle crack. Because of symmetry, the middle crack still propagates in the horizontal direction. Yet, its crack propagation length is much shorter than the others because the middle crack is suppressed by the pressure of the upper and lower cracks.

Fig. 33
figure 33

The evolution of crack propagation and pore pressure distribution for multi-cracks hydraulic fracturing at different time steps

6.4.2 Propagation and intersection of two perpendicular cracks

A square porous media with 4 m ×  4 m include two perpendicular cracks inside as shown in Fig. 34. Two cracks have an initial aperture \(a_{0}\) = 1 × 10−4 m, and a constants flow rate \(q\) = 0.01 m2/s is injected into both cracks. The pressure at the outer boundary of the square is fixed at zero. The geometry model is discretized into 2197 triangular elements with an element size of 0.15 m. The simulation parameters are shown in Table 4. The fluid exchange coefficient of the fracture \({\text{h}}_{{\text{c}}}\) is chosen as 6.67 × 10–7 m/Pa s.

Fig. 34
figure 34

Model geometry of a square with two perpendicular cracks

Table 4 Parameters used for two perpendicular cracks model

Figure 35 shows the crack propagation path and the crack pressure evolution in two perpendicular cracks. It can be seen that as the fluid is continuously injected into the two cracks, the crack pressure gradually increases. When the crack pressure reaches the tensile strength of the porous media, the two cracks start to propagate, resulting in a decrease in the crack pressure. Due to the influence of the horizontal cracks, the vertical crack do not extend in the vertical direction but deflects to the right and eventually intersects the boundary. Since the entire model is symmetrical along the horizontal cracks, the horizontal crack still extends in the horizontal direction. The right end of the horizontal crack intersects the vertical crack, while the left end extends to the left boundary of the model. Figure 36 shows the evolution of pore pressure distribution in the model. Although different materials are used in this study, the simulation results are generally similar to that in reference [76].

Fig. 35
figure 35

Contours of crack pressure for two perpendicular cracks at different times

Fig. 36
figure 36

Contours of pore pressure for two perpendicular cracks at different times

In addition, the effect of element sizes on crack propagation is investigated. Because crack propagation in the model can only extend along the element boundary, so the results might be affected by a different discretization. Figure 37 shows the crack propagation path and pore pressure distribution under two different mesh sizes (0.15 m and 0.09 m). Overall, the simulation results are quite similar, indicating that the crack propagation simulation is converging as the mesh size decreases. One can refer to [19, 37, 54, 69] for more study on mesh dependence of crack propagation in FDEM.

Fig. 37
figure 37

Crack propagation path and pore pressure distribution using different mesh sizes

7 Discussion

The mixed fracture–pore seepage model and hydromechanical coupling can well deal with the seepage problem in fractured porous media and fracturing driven by single-phase flow. However, the method currently still has certain limitations. It cannot properly capture multiphase fluid flow through the propagation crack and the porous matrix. Since the mixed fracture–pore model is combined with FDEM to construct a coupled hydromechanical model, when simulating fluid-driven fracturing, it inherits the advantages and limitations of FDEM. For example, the advantage of the model for simulating fracture is that it does not need to explicitly track the crack growth, so it can naturally deal with complex branching cracks and interactions of various complex cracks. The disadvantage is that the crack propagation proceeds along the element boundary, so the crack propagation path is affected by the meshing, especially when the mesh size is large. Fortunately, when the mesh size is small enough, the crack growth simulation results will converge. Although the model in this paper is currently limited to the two-dimensional case, the model can easily be extended to the three-dimensional case. It only needs to replace the triangular element with tetrahedral element and the 4-node joint elements with 6-node joint elements. We will extend this model to three dimensions in the near future.

8 Conclusions

In this paper, we proposed a novel mixed fracture–pore seepage model for fractured porous media. The 2D mixed fracture–pore seepage model is mainly composed of the fracture seepage model, the pore seepage model and the fluid exchange model. The fracture seepage model is represented by the fluid flow in the broken joint element. For the pore seepage model, it includes fluid flow in the triangular elements and between the adjacent triangular elements through the unbroken joint element. However, for continuum medium, the unbroken joint element can hinder fluid flow between the adjacent triangular elements. Thus, the fluid exchange coefficient of the unbroken joint element is required to be sufficiently large to reduce the hindering effect of the unbroken joint element for fluid flow. We provided the principle of selecting the fluid exchange coefficient of the unbroken joint element through the study of pore seepage in a continuum medium. The numerical result of the pore seepage model matches the theoretical solution as long as the fluid exchange coefficient of the unbroken joint element satisfies this principle.

For the fluid exchange model between fracture and rock matrix, it is determined by the pressure difference between the fracture pressure and pore pressure on the fracture and the fluid exchange coefficient of the fracture. Since the adjacent triangular elements do not share nodes, the pore pressure on both sides of the fracture may be discontinuous. Some examples such as 2D steady-state seepage, single-fracture porous media seepage, double-fracture porous media seepage and complex fractured porous media seepage are studied. The simulation results of these problems are in good agreement with the theoretical solutions, literature results and the results obtained by COMSOL Multiphysics, which verifies the correctness of the mixed fracture–pore seepage model.

The proposed method provides a simple and effective tool for solving fluid flow in fractured porous media. Moreover, a fully coupled hydromechanical model is built by combining the mixed fracture–pore seepage model and finite-discrete element method (FDEM) for simulating fluid-driven fracturing in porous media. A few examples are also included to demonstrate the capacity of such simulation.