Fracture flow using a MultiApp approach: Equations

Background

PorousFlow can be used to simulate flow through fractured porous media in the case when the fracture network is so complicated it cannot be incorporated into the porous-media mesh. The fundamental premise is the fractures can be considered as lower dimensional entities within the higher-dimensional porous media. This page is part of a set that describes a MOOSE MultiApp approach to simulating such models:

The heat equation in fracture-matrix systems

Uncoupled equations

The 3D heat equation is

0=cTt(λT) . 0 = c\frac{\partial T}{\partial t} - \nabla(\lambda \nabla T) \ .(1) Here:

  • TT is the temperature, with SI units K;

  • cc is the volumetric heat capacity of the medium (which is the product of specific heat capacity and density), with SI units J.m3^{-3}.K1^{-1};

  • tt is time and \nabla is the vector of spatial derivatives;

  • λ\lambda is the thermal conductivity, with SI units J.s1^{-1}.m1^{-1}.K1^{-1}.

This equation (multiplied by the test functions) gets integrated over the elemental volume in the finite-element scheme. The fracture is actually a 3D object, but it is so thin that temperature (and cc and λ\lambda) do not vary appreciably over its thickness (aperture). Therefore, the integral over the thickness may be done explicitly, and the fracture modelled as a 2D object, with heat equation reading

0=acTta~(λ~T) , 0 = ac\frac{\partial T}{\partial t} - a\tilde{\nabla}(\lambda \tilde{\nabla} T) \ ,(2)

where aa is the fracture thickness (aperture), and ~\tilde{\nabla} are derivatives transverse to the fracture. This equation is integrated (by MOOSE) over the fracture-element 2D area in the finite-element method.

commentnote

The preceding equation implies all the Kernels for heat and mass flow in the fracture system must be multiplied by the fracture aperture aa. That is, in the MOOSE input file governing the 2D physics, the coefficient of the CoefTimeDerivative Kernel is acac, and the coefficient of the AnisotropicDiffusion is aλa\lambda. If tensorial quantities such as λ\lambda or the permeability tensor are anisotropic, they need to be expressed in 3D space.

Coupling

In order to specify the coupling between the fracture and matrix system precisely, let us introduce some notation. Suppose the position of the fracture is given by a level-set function, f=f(x,y,z)f = f(x, y, z) (where xx, yy and zz are the Cartesian coordinates): that is, the fracture is at points where f=0f=0, but not at points where f0f\neq 0. For example, if the fracture occupies the (x,y)(x, y) plane, then f=zf=z would be a suitable function. The one-dimensional Dirac delta function, δ(f)\delta(f), has SI units m1^{-1}, and is zero everywhere except on the fracture. When δ(f)\delta(f) is integrated over a direction normal to the fracture, the result is normalδ(f)=1\int_{\mathrm{normal}}\delta(f) = 1. When δ(f)\delta(f) is integrated over a volume containing the fracture, the result is Vδ(f)=A\int_{V}\delta(f) = A, where AA is the area of the fracture in the volume.

The approach explored in this page uses two temperature variables, TmT_{m} and TfT_{f}, which are the temperature in the matrix and fracture, respectively. TmT_{m} is defined throughout the entire matrix (including the embedded fracture), while TfT_{f} is defined on the fracture only. These are assumed to obey:

0=cmT˙m(λmTm)+h(TmTf)δ(f) ,0=acfT˙fa~(λf~Tf)+h(TfTm) .\begin{aligned} 0 &= c_{m}\dot{T}_{m} - \nabla(\lambda_{m}\nabla T_{m}) + h(T_{m} - T_{f})\delta(f) \ , \\ 0 &= ac_{f}\dot{T}_{f} - a\tilde{\nabla}(\lambda_{f}\tilde{\nabla} T_{f}) + h(T_{f} - T_{m}) \ . \end{aligned}(3)

In these equations, hh is the heat-transfer coefficient between the matrix and the fracture, with SI units J.m2^{-2}.s1^{-1}.K1^{-1}. If Tf>TmT_{f} > T_{m} then the heat-transfer term takes heat energy from the TfT_{f} system and applies it to the TmT_{m} system. The heat-transfer coefficient plays a central role in this page and is discussed in detail below.

When the second (fracture) equation is integrated over a (2D) portion of the fracture of area AA, the heat-energy transferred to the matrix is AhTfTmAh\langle T_{f} - T_{m} \rangle, where the \langle\rangle indicates the average over AA. This is equal to the heat-energy transferred according to the first equation, when it is integrated over a volume containing the same portion of fracture (remember Vδ(f)=A\int_{V}\delta(f) = A). Therefore, heat energy is conserved in this system.

The heat-transfer coefficient

Heat-transfer coefficients have been used by engineers to accurately account for the complicated processes that occur at the interface between two materials. If the two materials have temperature TaT_{a} and TbT_{b}, respectively, and are connected by an area AA then the rate of heat transfer between them is Ah(TaTb)Ah(T_{a} - T_{b}), with SI units J.s1^{-1}. Heat-transfer coefficients have been estimated for many different situations (see, for instance Wikipedia).

To motivate a numerical value for hh, assume that the fracture width is tiny compared with any relevant length scales in the matrix (such as the finite-element sizes). While the temperature distribution in the immediate vicinity of the fracture will be governed by complicated processes, the point of hh is to hide that complexity. Assume there is a "skin" around the fracture in which the complicated processes occur. Denote the temperature just outside this skin by TsT_{s}, so the heat transfer through the skin is

Qs=hs(TfTs) , Q_{s} = h_{\mathrm{s}}(T_{f} - T_{s}) \ ,(4) where TfT_{f} is the fracture temperature, hsh_{\mathrm{s}} is the heat-transfer coefficient of the skin, with SI units J.m2^{-2}.s1^{-1}.K1^{-1}, and QsQ_{s} is the heat flux, with SI units J.s1^{-1}.m2^{-2}. A discussion on the numerical value of hsh_{s} is found below.

Just as the fracture may be considered two-dimensional (implemented by including its aperture in the fracture Kernels and using 2D finite elements), the size of the skin is also ignored. Thereby, the matrix "sees" the fracture as an object of TsT_{s} (not TfT_{f}) sitting within it. Consider Figure 1, where an object of temperature TsT_{s} sits between two finite element nodes, of temperature T0T_{0} and T1T_{1}.

Figure 1: An object of temperature TsT_{s} sits a distance L0L_{0} from a finite-element node of temperature T0T_{0}, and a distance L1L_{1} from a node of temperature T1T_{1}.

The flow from the fictitious "skin" object to each matrix finite-element nodes is governed by the heat equation. In the linear limit, Eq. (1) implies

Q0=λTsT0L0 ,Q1=λTsT1L1 .\begin{aligned} Q_{0} &= \lambda \frac{T_{s} - T_{0}}{L_{0}} \ , \\ Q_{1} &= \lambda \frac{T_{s} - T_{1}}{L_{1}} \ . \end{aligned}(5)

Assuming the sum of these equals QsQ_{s}, that is Qs=Q0+Q1Q_{s} = Q_{0} + Q_{1}: hs(TfTs)=λ(TsT0L0+TsT1L1) .h_{\mathrm{s}}(T_{f} - T_{s}) = \lambda \left( \frac{T_{s} - T_{0}}{L_{0}} + \frac{T_{s} - T_{1}}{L_{1}}\right) \ . Using this equality allows TsT_{s} to be written in terms of the other temperature values, and substituting the expression into Eq. (4) yields the heat-loss from the fracture: Q=hsλ(L0+L1)hsL0L1+λ(L0+L1)(L1L0+L1(TfT0)+L0L0+L1(TfT1)) .Q = \frac{h_{\mathrm{s}}\lambda (L_{0} + L_{1})}{h_{\mathrm{s}}L_{0}L_{1} + \lambda(L_{0} + L_{1})} \left( \frac{L_{1}}{L_{0} + L_{1}}(T_{f} - T_{0}) + \frac{L_{0}}{L_{0} + L_{1}}(T_{f} - T_{1}) \right) \ . Notice that the prefactors L1/(L0+L1)L_{1}/(L_{0}+L_{1}) are exactly what a linear-lagrange element in MOOSE would prescribe to a DiracKernel sitting at the fracture position. Hence, the effective heat-transfer coefficient that would be used in a MOOSE model of this situation is h=hsλ(L0+L1)hsL0L1+λ(L0+L1) .h = \frac{h_{\mathrm{s}}\lambda (L_{0} + L_{1})}{h_{\mathrm{s}}L_{0}L_{1} + \lambda(L_{0} + L_{1})} \ .

commentnote

Notice a key assumptions made in the presentation above — the linear approximation of Eq. (5), where it is assumed that the matrix element sizes are small enough to resolve the physics of interest. This means that phenomena associated with short-time, small-scale physics won't be resolvable in models with large elements, when using the heat-transfer coefficients recommended in this page. This is because that in various real-life scenarios there may be no heat flow between the "0" position and the skin even if TsT0T_{s}\neq T_{0} (contradicting Eq. (5) ) because, for instance, changes of TsT_{s} take some time to be felt by the "0" position. The solution is to use smaller elements to resolve this short-time, small-scale phenomena. The small fracture network model provides an example.

The same analysis may be performed in the 2D-3D situation. While Figure 1 is only a 1D picture, flow from the fracture to the matrix only occurs in the normal direction, so it also represents the 2D-3D situation. With an arbitrary-shaped element containing a portion of a fracture, the heat flows to each node, and hence hh, depend on the shape of the element. However, following the approach of the Peaceman borehole Peaceman borehole, the following rule-of-thumb is suggested for MOOSE simulations:

h=hsλmnn(Lright+Lleft)hsLrightLleft+λmnn(Lright+Lleft) , h = \frac{h_{\mathrm{s}}\lambda_{\mathrm{m}}^{nn} (L_{\mathrm{right}} + L_{\mathrm{left}})}{h_{\mathrm{s}}L_{\mathrm{right}}L_{\mathrm{left}} + \lambda_{\mathrm{m}}^{nn}(L_{\mathrm{right}} + L_{\mathrm{left}})} \ ,(6)

where hh depends on the matrix element surrounding the fracture:

  • λmnn\lambda_{\mathrm{m}}^{nn} is the component of the matrix thermal conductivity in the normal direction to the fracture;

  • LrightL_{\mathrm{right}} is the average of the distances between the fracture and the nodes that lie on its right side;

  • LleftL_{\mathrm{left}} is the average of the distances between the fracture and the nodes that lie on its left side (opposite the right side).

The result of Eq. (6) depends on LleftL_{\mathrm{left}} and LrightL_{\mathrm{right}}. In most settings, it is appropriate to assume that Lleft=Lright=LL_{\mathrm{left}} = L_{\mathrm{right}} = L since this corresponds to making a shift of the fracture position by an amount less than the finite-element size. Since the accuracy of the finite-element scheme is governed by the element size, such small shifts introduce errors that are smaller than the finite-element error. This means Eq. (6) reads

h=2hsλmnnLhsL2+2λmnnL . h = \frac{2h_{\mathrm{s}}\lambda_{\mathrm{m}}^{nn}L}{h_{\mathrm{s}}L^{2} + 2\lambda_{\mathrm{m}}^{nn}L} \ .(7)

The heat-transfer through the skin is likely to exceed heat conduction through the skin, since the heat transfer involves faster processes such as convection. Therefore, hs=bλm/sh_{\mathrm{s}} = b\lambda_{\mathrm{m}}/ s, where ss is the skin size and the numerical quantity b>1b>1. This yields

h=2λmnnL+2s/b2λmnnL , h = \frac{2\lambda_{\mathrm{m}}^{nn}}{L + 2s/b} \rightarrow \frac{2\lambda_{\mathrm{m}}^{nn}}{L} \ ,(8)

where the final limit is for sLs \ll L, which is likely to be reasonably correct in most simulations.

Finally, consider the case which has very large fracture elements compared with matrix elements. Then it could happen that aAVa A\gg V, where AA is now the fracture area modelled by one finite-element fracture node, and VV is the volume modelled by one finite-element matrix node. Then the single fracture node can apply a lot of heat to the "small" matrix node, which will likely cause oscillations or even numerical instability if Δt\Delta t is too large, in the MultiApp approach.

Mass flow

A "mass-transfer coefficient" hmassh^{\mathrm{mass}} may be used to model fluid mass transfer between the fracture and matrix. The equations for all fluid phases are structurally identical, but just have different numerical values for viscosity, relative permeability, etc, so in this section consider just one phase. Define the potential Φ\Phi (with SI units Pa) by

Φ=P+ρgz \Phi = P + \rho g z(9)

Here

  • PP is the porepressure (SI units Pa);

  • ρ\rho is the fluid density (SI units kg.m3^{-3});

  • gg is the gravitational acceleration (SI units m.s2^{-2} or Pa.m2^{2}.kg1^{-1});

  • zz is the coordinate direction pointing "upwards" (i.e. in the opposite direction to gravity) with SI units m. If gravity acted in a different direction then zz would be replaced by another coordinate direction.

In the Darcy setting modelled by PorousFlow, the equivalent of the heat transfer h(TfTm)h(T_{f} - T_{m}) found in Eq. (3) is

Qmass=hmass(ΦfΦm)Q^{\mathrm{mass}} = h^{\mathrm{mass}}(\Phi_{f} - \Phi_{m})

and the equivalent of Eq. (4) is

Qsmass=hsmass(ΦfΦs) .Q_{\mathrm{s}}^{\mathrm{mass}} = h_{\mathrm{s}}^{\mathrm{mass}}(\Phi_{f} - \Phi_{s}) \ .

Here

  • QsmassQ_{\mathrm{s}}^{\mathrm{mass}} is the mass flux through the skin, with SI units kg.s1^{-1}.m2^{-2}.

  • hsmassh_{\mathrm{s}}^{\mathrm{mass}} is the mass-transfer coefficient of the skin, with SI units kg.s1^{-1}.m2^{-2}.Pa1^{-1}.

The heat-flow arguments presented above may now be followed using Φ\Phi instead of TT, and ρkkrel/μ\rho k k_{\mathrm{rel}} / \mu in place of λ\lambda, to yield a suggestion for the mass-transfer coefficient in the 2D-3D situation:

hmass=hsmassρkmnnkrelμ(Lright+Lleft)hsmassLrightLleft+ρkmnnkrelμ(Lright+Lleft) , h^{\mathrm{mass}} = \frac{h_{\mathrm{s}}^{\mathrm{mass}}\frac{\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}}{\mu} (L_{\mathrm{right}} + L_{\mathrm{left}})}{h_{\mathrm{s}}^{\mathrm{mass}}L_{\mathrm{right}}L_{\mathrm{left}} + \frac{\rho k_{\mathrm{m}}^{nn} k_{\mathrm{rel}}}{\mu}(L_{\mathrm{right}} + L_{\mathrm{left}})} \ ,(10)

where hmassh^{\mathrm{mass}} depends on the matrix element surrounding the fracture in the following way

  • ρ\rho is the density of the fluid phase (SI units kg.m3^{-3}).

  • kmnnk_{\mathrm{m}}^{nn} is the component of the matrix permeability tensor in the normal direction to the fracture (SI units m2^{2}).

  • krelk_{\mathrm{rel}} is the relative permeability of the fluid phase (dimensionless).

  • μ\mu is the dynamic viscosity of the fluid phase (SI units Pa.s).

  • LrightL_{\mathrm{right}} is the average of the distances between the fracture and the nodes that lie on its right side.

  • LleftL_{\mathrm{left}} is the average of the distances between the fracture and the nodes that lie on its left side (opposite the right side).

This appears in the mass-transfer: Qmass=hmass(ΦfΦm)Q^{\mathrm{mass}} = h^{\mathrm{mass}}(\Phi_{f} - \Phi_{m}), where Φ\Phi is given in Eq. (9). The arguments that led to Eq. (7) and Eq. (8) lead in this case to

hmass=2ρkmnnkrelμL . h^{\mathrm{mass}} = \frac{2\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}}{\mu L} \ .(11)

There are numerical subtleties in these expressions that may not impact many simulations, but modellers should be aware of the following.

  • Φ\Phi seen by the fracture is the matrix nodal values interpolated to the fracture node. There are clearly many ways of doing this interpolation, eg, ρz\rho z could be interpolated from the fracture nodes, or ρz\rho z could be evaluated at the fracture node given its position, porepressure and temperature.

  • Similar remarks hold for ρkmnnkrel/μ\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}/\mu.

  • Stability of the numerics will be improved by evaluating ρkmnnkrel/μ\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}/\mu at the upwind position. That is, if fluid is flowing from the fracture to the matrix, this term would best be evaluated using (P,T)(P, T) of the skin, while for the reverse flow the evaluation should be done using the nodal matrix values. However, it is usually more convenient to fix the evaluation to use the elemental-averaged values of the matrix (using a constant, monomial AuxVariable for the matrix).

Heat advection

Heat advection follows the same principle as mass transfer. The heat transfer by advection through the skin:

Qs=ehsmass(ΦfΦs) .Q_{\mathrm{s}} = eh_{\mathrm{s}}^{\mathrm{mass}}(\Phi_{f} - \Phi_{s}) \ .

where ee is the fluid enthalpy, and the other terms are given above. In the finite-element setting Q=ehmass(ΦfΦm)Q = eh^{\mathrm{mass}}(\Phi_{f} - \Phi_{m}), and

ehmass=ehsmasseρkmnnkrelμ(Lright+Lleft)ehsmassLrightLleft+eρkmnnkrelμ(Lright+Lleft) . eh^{\mathrm{mass}} = \frac{eh_{\mathrm{s}}^{\mathrm{mass}}\frac{e\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}}{\mu} (L_{\mathrm{right}} + L_{\mathrm{left}})}{eh_{\mathrm{s}}^{\mathrm{mass}}L_{\mathrm{right}}L_{\mathrm{left}} + \frac{e\rho k_{\mathrm{m}}^{nn} k_{\mathrm{rel}}}{\mu}(L_{\mathrm{right}} + L_{\mathrm{left}})} \ .(12)

The arguments that led to Eq. (7) and Eq. (8) lead in this case to

ehmass=2eρkmnnkrelμL . eh^{\mathrm{mass}} = \frac{2e\rho k_{\mathrm{m}}^{nn}k_{\mathrm{rel}}}{\mu L} \ .(13)

As in the mass-transfer case, the numerics will be impacted by where these terms are evaluated.

Combinations of transfer

In many simulations, heat transfer by both conduction and convection will be active, in addition to mass transfer. The transfers are simply added together. For instance

Qheat=h(TfTm)+ehmass(ΦfΦm) .Q^{\mathrm{heat}} = h(T_{f} - T_{m}) + eh^{\mathrm{mass}}(\Phi_{f} - \Phi_{m}) \ .