Abstract
X-ray microtomography is routinely used to image the three-dimensional pore space of sedimentary rocks. Flow and transport properties can then be simulated directly in such images. Advective transport in porous media is frequently simulated using streamlines. We present a novel streamline tracing algorithm based on a substantial development of the most widely used method (the Pollock algorithm) employed for macroscale (Darcy) flow, making it consistent with solutions of the Navier-Stokes equation with no flow at solid boundaries. We use this new algorithm to calculate breakthrough curves and time-of-flight distributions for advection-dominated transport in two three-dimensional images of sedimentary rocks containing up to \(10^9\) voxels: a sandstone and a carbonate. We show that our approach provides a more accurate description of flow, particularly when only a few image voxels span each pore. Therefore, it is better suited to capture anomalous (non-Fickian) transport behaviour than the standard Pollock method.
Similar content being viewed by others
Avoid common mistakes on your manuscript.
1 Introduction
The study of flow and transport phenomena in sedimentary rocks is important in a range of scientific and engineering applications, such as water management, contaminant transport (Sahimi 2011), oil & gas recovery (Lake 1996) and geological carbon storage (Szulczewski et al. 2012; Popova et al. 2012). With the advent of X-ray microtomography, high-resolution images of the pore space of sedimentary rocks (a few microns voxel size) have been made available. These three-dimensional images can be used to model flow and transport properties (Blunt et al. 2013), as well as electric and elastic properties (Saenger 2008; Arns et al. 2002) in a wide range of rocks, from relatively homogeneous sandstones to heterogeneous carbonates (Bijeljic et al. 2011). The availability of high-resolution tomographic images of rock cores makes it possible to study in detail flow and transport phenomena at the pore scale. Moreover, it creates an impetus for the development and adaptation of traditional fluid simulation techniques.
The Lagrangian approach provides a convenient framework to study transport phenomena in porous media. Unlike Eulerian methods, Lagrangian methods do not suffer from numerical dispersion and, for advection-dominated problems, deliver a far superior computational performance (e.g. Batycky et al. 1997; Datta-Gupta and King 2007). Streamline tracing is a Lagrangian method where solute particles are followed along streamlines traced in the simulation domain. In a steady flow field, streamlines are the solutions of:
where \(\mathbf {V}(\mathbf {x})\) is the velocity field previously calculated on a computational grid and \(\tau \) is the time of flight (tof), the time that a particle following the streamline needs to travel a given distance. The solution of the Navier–Stokes equations is a necessary input for all streamline tracing algorithms at the pore scale. At the field scale the prerequisite is the solution of the pressure equation with the assumption of a Darcy regime between adjacent grid cells, from which the velocity field is then recovered.
The Pollock algorithm (Pollock 1988) is widely used to trace streamlines in field-scale models, where the average flow is described by Darcy’s law, in both hydrocarbon reservoirs (Batycky et al. 1997; Datta-Gupta and King 2007) and aquifers (Donato et al. 2003, Obi and Blunt 2004). It calculates the velocities through a linear interpolation of the (staggered) grid velocities in each coordinate direction independently. In doing so, Eq. (1) has an analytical solution for each grid element, and these solutions are then connected to trace the streamlines for the whole domain. While originally developed for rectangular grids, Pollock’s algorithm was later adapted for unstructured grids (Prevost et al. 2002; Matringe et al. 2006).
However, despite its broad range of applications, the Pollock method cannot be immediately applied at the pore scale. It does not obey the more strict no-slip boundary conditions necessary when simulating fluid flow and transport on segmented micro-computed tomography (micro-CT) images consisting of void and solid voxels. Pore-space images inevitably have to make a trade-off between resolution (having many image voxels to describe each pore) and the overall size of the system, to capture the connectivity and heterogeneity of the sample. As a result, generally only a few voxels span the smallest pores in the image. As we show later in Sect. 4, the application of the Pollock algorithm, with the wrong boundary condition at the solid interface, leads to significant errors, particularly when the distance between solid boundaries is a small number of voxels.
In this paper we propose an extension of the Pollock method where both the normal and tangential components of the interpolated velocity field are zero at the pore-solid walls, thus respecting the no-flow boundary condition. Our main result is a semi-analytical streamline tracing algorithm capable of simulating transport properties directly in three-dimensional pore-space images. Mostaghimi et al. (2012) attempted to solve the same problem, but for transport simulations only calculated the velocity at a point in the pore space and then took a small time step with this fixed velocity. Here we trace streamlines semi-analytically, allowing the very rapid and accurate prediction of advection-dominated transport.
The paper is organized as follows: we start with a brief description of the Pollock algorithm; then we proceed explaining why and how it has to be adapted for use at the pore scale and present our methodology. We explore the differences between the original method and our improved version for flow between parallel plates, whose analytical solution is known. Next we exemplify the application of the new transport method using the geometry and velocity fields of two micro-CT images of rock samples: a carbonate and a sandstone. We show how the results of time-of-flight distributions and breakthrough curves (BTCs, concentration of solute particles versus time) calculated with our method differ qualitatively from the ones obtained using the standard Pollock algorithm. In particular, the BTCs have the long tails and power law like behaviour characteristic of non-Fickian transport (Haggerty et al. 2000). We conclude by highlighting the most important steps of the method and explaining how to incorporate diffusion.
2 Flow Simulation and Streamline Tracing in Micro-CT Images
2.1 Flow Model
Incompressible flow in a porous medium is described by the Navier–Stokes equation:
subject to the incompressibility condition \(\nabla . \mathbf {V} = 0 \), where \(\mu \) is the fluid viscosity, \(\rho \) the fluid density, \(\mathbf {V}\) the velocity, and P the pressure. Throughout our simulations we make \(\mu = 0.001 \, \text {Pa\,s}\) and \(\rho = 1000\,\text {kg/}\text {m}^3\), the values for water. Finite-difference (volume) and lattice-Boltzmann are the most common methods to solve for incompressible flow at the pore scale (Manwart et al. 2002). We use the finite-volume method implemented in OpenFoam (an open source library http://www.openfoam.org) and described in Raeini et al. (2012), Bijeljic et al. (2013) to solve the Navier–Stokes equation with constant pressure boundary conditions at inlet and outlet. No flow on the pore–solid boundaries is imposed. The resulting velocity field is used as input to the streamline tracing algorithms.
2.2 Streamline Tracing—Pollock’s Algorithm
A streamline is a line whose tangential vector is instantaneously parallel to the velocity field at every point of the flow domain. Pollock’s algorithm (Pollock 1988) is a semi-analytical approach that calculates the voxel time of flight (the amount of time a tracer particle takes to cross the voxel) as well as particle entry and exit positions assuming that the velocity in any point inside a grid cell is a linear interpolation of the face velocities. This method was developed for large-scale flows governed by Darcy’s law. Here we are studying a different problem: pore-scale dynamics described by the Navier–Stokes equation. Hence, we will need to adapt and extend the methodology to account for the different boundary conditions encountered.
The computational domain is a cubic lattice where voxels assume binary values, representing a pore or a solid. The velocity field is represented in a staggered grid so that its components are located at each face of the voxel and denoted by \(u_1\) and \(u_2\) (faces perpendicular to the x-direction), \(v_1\) and \(v_2\) (perpendicular to the y-direction) and \(w_1\) and \(w_2\) (perpendicular to the z-direction), see Fig. 1. The velocity field at a point with coordinates (x, y, z) inside a grid block can be obtained through a linear interpolation of the face velocities:
where \(x_1\), \(y_1\) and \(z_1\) are the coordinates of the corner voxel marked in Fig. 1, and \(\varDelta x\), \(\varDelta y\) and \(\varDelta z\) are the linear dimensions of the grid block while \(\varDelta u = u_2-u_1\), \(\varDelta v = v_2 -v_1\) and \(\varDelta w = w_2 -w_1\). For a particle with initial position \((x_p,y_p,z_p)\) and using the interpolated velocity, it is possible to calculate the time required to leave the voxel through either one of its faces:
and the particle will leave through the face with the smallest travel time:
The exit coordinates are obtained inverting Eq. 4:
Streamlines are then traced concatenating a series of line segments crossing the voxels inside the pore space: the point where a segment leaves a voxel is the entrance point for the next one.
3 Semi-analytical Streamline Tracing in Pore-scale Images
Pore-scale images segregate pores and solids; each voxel is either one or the other, while in field-scale models the grid cells are assigned a porosity (fraction of void space) and a permeability. The assumption that velocities can be calculated via linear interpolations inside the voxels does not apply to pore-scale models. These velocities do not obey the strict no-flow condition at the solid walls, meaning that their tangential component is not zero. To address this problem we modify the original Pollock algorithm postulating analytical expressions for the velocities where both the normal and tangential components are zero at the pore-solid walls. These new velocities are then integrated to obtain the particle trajectories, and the streamlines are traced in the usual way: adding streamline increments through each voxel. A complication is that now the pore-space geometry is the crucial factor, requiring that each pore geometry must be treated separately. In a cubic lattice, there are sixty-three possible configurations for a voxel with solid boundaries—six for one solid, fifteen for two solids, twenty for three solids and fifteen for four solids, plus the degenerate cases (the velocity is everywhere zero) with five solid boundaries and the case of an isolated pore (six boundaries). Each of the non-degenerate geometries will have a particular choice of velocity that has to be integrated and solved for the exit times and positions, just like in the original Pollock method.
There are fifty-six cases of potential interest plus the case without any solid boundary—treated with the standard Pollock algorithm. We note that the number of cases of interest can be reduced by analysing the velocity field of the rock under study. In the images of real rocks that we study (see examples in Sect. 5), the voxels with three and four solid boundaries contribute with less than 5 % of the pore space and 0.3 % of the flux, having negligible impact on the total flow across the sample, see Table 1. Although we derived the full semi-analytical expressions for the time of flight and exit coordinates for these blocks, in the results presented later we use the standard Pollock method in these cases for simplicity.
Our approach is an extension of the Pollock method, where the components of the velocity vector vary linearly with coordinate direction between average values at each voxel face. We adapt this to allow the components of the velocity to vary linearly or quadratically with each direction, subject to the following three constraints. Firstly, the velocity field everywhere is divergence free (incompressible flow). Secondly, the no-flow boundary conditions at the solid are strictly obeyed. Thirdly, the average velocity normal to a face is the same as computed from the numerical solution of the Navier–Stokes equations. This ensures conservation of volume. In principle there is also a pressure field within each grid block that is consistent with this velocity and the Navier–Stokes equations. However, as this pressure is not used in the simulations we do not need to compute it. These constraints are sufficient to define the velocity field uniquely for every arrangement of solid boundaries. The time of flight can then be computed analytically from the known velocity field.
To demonstrate our method we show the derivation of the analytical expressions for the case of voxels with one solid neighbour. The velocities, transit times and exit points for the cases with two, three and four solid boundaries are shown in the appendices.
3.1 One Solid Boundary
Given a pore voxel in lattice location (i, j, k), there are six possible positions for the neighbouring solid: \((i+1,j,k)\), \((i-1,j,k)\), \((i,j+1,k)\), \((i,j-1,k)\), \((i,j,k+1)\) or \((i,j,k-1)\). We show the derivation of the case where the limiting solid voxel is in the position \((i+1,j,k)\), Fig. 2. The other five cases with one solid boundary can be derived in the same way.
As in the original Pollock method, the time of flight must be calculated in each direction according to the velocity distribution inside the pore. It is necessary to define a velocity field satisfying the no-slip boundary condition at the pore-solid wall and the conservation of flux.
Assuming that the tangential component y varies linearly with the distance from the solid wall and requiring that it takes its average values \(v_1\) and \(v_2\) at the cell faces, we can write:
then, the average velocity when \(y=y_1\) is:
From the condition \(\overline{V_y} = v_1\), we have \( \alpha =2\). \(V_z\) can be calculated in an analogous way. The component x of the velocity is obtained applying the condition \(\nabla . \mathbf {V} = 0 \):
together with the conservation of flux (note that \(u_2=0\), so \(\varDelta u = -u_1\)):
which results in:
Finally, the velocity field is:
The tof in the x-direction (\(\tau _x\)) is defined by the integral:
The tof in the y direction is the time spent to travel to a point with vertical coordinate \(y_2\) along a streamline passing through \((x_p,y_p)\):
To eliminate the dependency on x in Eq. (14), we make use of the fact that the slope of the streamline is given by the ratio of the velocity components and write:
Using Eq. (12a) and (12b) and integrating Eq. (15) from \((x_p,y_p)\) to (x, y) yield:
Substituting Eq. (17) into Eq. (12b) and solving the integral in Eq. (14), we have the time of flight:
Following the derivation outlined above, \(\tau _z\) is readily calculated:
Now using Eqs. (13), (18) and (19) and remembering that the exit time is defined as \(\tau _e = \text {min} (\tau _x,\tau _y,\tau _z)\), the exit locations are calculated:
where we define \(\varDelta x_{2p}= x_2 -x_p\), \(\varDelta y_{p1}= y_p -y_1\) and \(\varDelta z_{p1}= z_p -z_1\).
4 Flow Between Two Parallel Plates
To validate the method and stress the differences between the original and the extended versions of the Pollock algorithm, we consider the flow of an incompressible fluid between two infinite parallel plates separated by a distance \(L_y\), Fig. 3. The analytical solution with no-slip boundary conditions predicts a parabolic velocity profile in the axial direction (Pozrikidis 2011):
We place \(10^3\) particles uniformly along the y-direction and trace streamlines assuming that the velocity is previously solved in a square grid with an error-free numerical method that finds the average fluxes at the faces of the grid blocks. In Fig. 4 we plot the particle velocities calculated with our method and the standard Pollock approach for one, two and four grid cells across the plates. In this case, the velocity is in the x-direction only and varies with y, Fig. 3. The Pollock interpolation therefore assumes a fixed velocity in each voxel. Our new method reduces to the same approximation when there are no solid boundaries, but allows a linear and a quadratic variation in velocity away from a solid boundary for voxels with one or two solid boundaries, respectively. This captures more accurately the smallest flow speeds next to the solids. The case of one grid cell corresponds to the two-dimensional version of the case discussed in the “Appendix 1: Two Solids in the Same Direction”—a voxel with two opposing solid boundaries—and the interpolated velocity using our method is an exact match to the analytical solution. With two cells, our method now assumes a piece-wise linear velocity profile, for voxels with one solid boundary, as described by Eq. 12b, where the second term on the right-hand side is zero. While this is a poorer representation of the analytical solution, it is still far superior to the Pollock approach, which assumes that the velocity is constant within each cell. As the number of cells increases, both our approach and that of Pollock converge to the correct solution; however, the Pollock method always over-states the velocity in the cell closest to the solid boundary.
Figure 5 shows the BTCs corresponding to the cases depicted in Fig. 4. We assume an initial delta-function pulse concentration, and by definition a particle moving at the average velocity breaks through at unit normalized time. We ignore molecular diffusion and study transport by advection only. As expected, with only one grid cell our method reproduces exactly the analytical curve, which the original Pollock completely fails to reproduce: with a constant velocity, there is no dispersion of concentration and the BTC is a delta function. With two and four grid cells, even if our proposed method is not able to reproduce exactly the results, it converges to the true solution for late-time arrivals, determined by the particles close to the walls, while the original method fails to capture the characteristics of the analytical solution. When the number of grid cells is high enough, both methods match the exact solution, Fig. 6. However, this requires a large number of voxels across each pore, which is rarely—if ever—achieved in pore-scale images and numerical models.
As the preceding results suggest, our method is suitable to simulate transport in the relatively coarse grids typical of pore-scale imaging applications—where individual pores are resolved with only a few voxels. Real sedimentary rocks have a typical pore throat size of few microns (Nelson 2009). Since the tomographic images have resolutions of the same order of magnitude, this means the pore throats must be represented with just a few grid cells. Computing flow on a refined grid, to remove this restriction, rapidly leads to prohibitive simulation times (Blunt et al. 2013). Inevitably, the trade-off between system size and resolution means that for realistic systems some pores will be only one or two voxels across; it is necessary that a numerical model represents transport through these pores with reasonable accuracy. The Pollock method fails to reproduce the slow flows near the solid, while our modified method gives a much better representation of the long-time tail of the transport.
5 Streamline Tracing in Images of Sedimentary Rocks
Next we show how streamline tracing can be used to study transport properties in real rocks: a sandstone and a carbonate. The sandstone is a Bentheimer with image size of \(1000^3\) voxels, voxel size of \(3.0\,\upmu \text {m}\), porosity of \(21.6\,\%\) and the image-calculated permeability of \(3 \times 10^{-12}\,\text {m}^2\). The carbonate is a Ketton oolite with dimensions \(911\times 902\times 922\), voxel size of \(3.8\,\upmu \text {m}\), porosity of \(13.5\,\%\) and image-calculated permeability of \(13\times 10^{-12}\,\text {m}^2\) , Fig. 7. Defining the characteristic length as \(\pi V/S\), where V is the volume of the porous medium and S is the area of the pore–solid interface (Mostaghimi et al. 2012), we calculate Reynolds numbers in our flow simulations of \(10^{-3}\) and \(10^{-2}\) for the sandstone and the carbonate, respectively.
The flow field is calculated using a finite-volume method (Raeini et al. 2012), as mentioned previously. Tracer particles are injected using a flow weighted rule at the inlet and tracked until they reach the outlet. In both images we inject \(5.0{\,\times \,}10^{4}\) particles and impose constant pressure at the inlet and outlet faces (perpendicular to the x-direction) and no flux in the lateral (y and z) boundaries. In addition to the voxels with no solid boundaries, the ones with four and five boundaries are also treated with the standard Pollock method, as they have negligible impact on the total flux across the sample, as shown in Table 1.
Distributions of the time of flight can be used to characterize the degree of heterogeneity of the rock (Bijeljic et al. 2011). In addition, BTCs also provide useful insights into the nature of the transport in porous media and the presence of a heavy tail being indicative of anomalous (non-Fickian) transport that cannot be adequately described by the classical advection-diffusion equation (Berkowitz et al. 2000).
In each image we trace streamlines using both the standard Pollock method for every voxel and our modified version (in the voxels with one, two and three solid neighbours). We compute the distribution of voxel transit times—\(\psi (\tau )\)—as a function of the dimensionless time \(\tau = t/\tau _{avg}\), where \(\tau _{avg} = \varDelta x/u_{avg}\) and \(u_{avg}\) is the average flow velocity, see Fig. 8. The standard Pollock method gives lower voxel transit times in the slow regions, typically the ones close to the solid interface, compared with our new tracing method. Based on the results of the previous section, we suggest that ignoring the no-slip boundary conditions at the solid walls tends to overestimate the speed of the slowest particles and truncate \(\psi (\tau )\) for long \(\tau \). We also note that both distributions are almost identical for short times, as it would be expected since the “free” pores, which tend to have the fastest advective travel times, are treated the in same way.
One of the analytical frameworks to describe anomalous transport in porous media is the continuous time random walk (CTRW) approach, see Berkowitz et al. (2006) and references therein. Under its assumptions it can be shown that asymptotically when \(\psi (t) \sim t^{-1-\beta }\), then the breakthrough concentration scales as \(C(t) \sim t^{-1-\beta }\). The exponent \(\beta \) is related to the degree of heterogeneity of the system and controls the nature of dispersion (e.g. Fickian or non-Fickian). When \(\beta >2\) the first and second moments of the transit time distribution are finite and the system displays asymptotic Fickian behaviour. To calculate \(\beta \) from the breakthrough curves, we first define \(\alpha = 1+\beta \), meaning that \(C(t) \sim t^{-\alpha }\). Next, using a maximum-likelihood method (Clauset et al. 2009), we compute \(\alpha \) in the tails of the breakthrough curves obtained by both the standard Pollock method and by our modified version, Fig. 9. Simulating BTCs with the Pollock method gives us values of \(\beta \) of 2.6 and 1.9 for Bentheimer and Ketton, respectively, which would lead us to infer Fickian (or almost-Fickian) behaviour, contradicting several earlier experimental and modelling results on transport in natural porous media (e.g. Sahimi 2011; Bijeljic et al. 2011; Berkowitz et al. 2000; Becker and Shapiro 2000; Silliman and Simpson 1987; Bijeljic et al. 2013). However, using our new method we obtain \(\beta = 1.2\) and \(\beta = 0.9\), respectively, indicating the expected non-Fickian transport behaviour.
6 Conclusions
We have presented a semi-analytical streamline tracing method to simulate pore-scale transport in heterogeneous porous media. The method is a development of a well established algorithm that has been in use for field-scale (Darcy law) flow simulation for many years. Our new methodology is applied to flow controlled by the Navier–Stokes equation at the pore scale and represents a very efficient way of obtaining transport properties. The simulation time was only a few minutes using a standard desktop computer, even for billion-cell models. We apply this new approach to obtain the time-of-flight distributions and breakthrough curves directly in voxelized micro-CT images of two sedimentary rocks, a Bentheimer sandstone and a Ketton carbonate, and compare to the ones obtained with the original Pollock method. The tails of the distributions are significantly different, which may give misleading indications about the nature of the transport (Fickian or non-Fickian) in the rocks. In particular, depending on the method, the Bentheimer sandstone would be characterized as Fickian (using the standard version) or non-Fickian (using the modified version).
The use of analytically traced streamlines eliminates the numerical stability constraints associated with the size of the time step, an obvious advantage over particle tracking methods, such as the Euler or Runge–Kutta methods (Oliveira and Baptista 1998).
Diffusion processes can be readily treated by implementing a random walk in the particle tracers (Tompson and Gelhar 1990; Sàlles et al. 1993). The advantage of our algorithm lies in that the time step would be constrained by the diffusive step only, allowing for larger time steps and a consequent saving in computational time.
The method can also be used to study the origin of anomalous transport at the pore scale (Kang et al. 2014) and the scaling behaviour of Lagrangian velocities (Siena et al. 2014).
References
Arns, C., Knackstedt, M., Pinczewski, W., Garboczi, E.: Computation of linear elastic properties from microtomographic images: methodology and agreement between theory and experiment. Geophysics 67(5), 1396 (2002). doi:10.1190/1.1512785. http://library.seg.org/doi/abs/10.1190/1.1512785
Batycky, R., Blunt, M., Thiele, M.: A 3D field-scale streamline-based reservoir simulator. SPE Reserv. Eng. 12, 246 (1997). doi:10.2118/36726-PA
Becker, M.W., Shapiro, A.M.: Tracer transport in fractured crystalline rock: Evidence of nondiffusive breakthrough tailing. Water Resour. Res. 36(7), 1677 (2000). doi:10.1029/2000WR900080
Berkowitz, B., Cortis, A., Dentz, M., Scher, H.: Modeling non-Fickian transport in geological formations as a continuous time random walk. Rev. Geophys. 44(2) (2006). http://dx.doi.org/10.1029/2005RG000178
Berkowitz, B., Scher, H., Silliman, S.E.: Anomalous transport in laboratory-scale, heterogeneous porous media. Water Resour. Res. 36(1), 149 (2000). doi:10.1029/1999WR900295
Bijeljic, B., Mostaghimi, P., Blunt, M.J.: Signature of non-Fickian solute transport in complex heterogeneous porous media. Phys. Rev. Lett. 107, 204502 (2011). doi:10.1103/PhysRevLett. 107.204502. http://link.aps.org/doi/10.1103/PhysRevLett.107.204502
Bijeljic, B., Raeini, A., Mostaghimi, P., Blunt, M.J.: Predictions of non-Fickian solute transport in different classes of porous media using direct simulation on pore-scale images. Phys. Rev. E 87, 013011 (2013). doi:10.1103/PhysRevE.87.013011. http://link.aps.org/doi/10.1103/PhysRevE.87.013011
Blunt, M.J., Bijeljic, B., Dong, H., Gharbi, O., Iglauer, S., Mostaghimi, P., Paluszny, A., Pentland, C.: Pore-scale imaging and modelling. Adv. Water Resour. 51(0), 197 (2013). doi:10.1016/j.advwatres.2012.03.003. http://www.sciencedirect.com/science/article/pii/S0309170812000528. 35th Year Anniversary Issue
Clauset, A., Shalizi, C., Newman, M.: Power-law distributions in empirical data. SIAM Rev. 51(4), 661 (2009). doi:10.1137/070710111. http://epubs.siam.org/doi/abs/10.1137/070710111
Datta-Gupta, A., King, M.J.: Streamline simulation: theory and practice. Society of Petroleum Engineers, Richardson (2007)
Di Donato, G., Obi, E.O., Blunt, M.J.: Anomalous transport in heterogeneous media demonstrated by streamline-based simulation. Geophys. Res. Lett. 30(12), 1608 (2003). doi:10.1029/2003GL017196
Haggerty, R., McKenna, S.A., Meigs, L.C.: On the late-time behavior of tracer test breakthrough curves. Water Resour. Res. 36(12), 3467 (2000). doi:10.1029/2000WR900214
Kang, P.K., de Anna, P., Nunes, J.P., Bijeljic, B., Blunt, M.J., Juanes, R.: Pore-scale intermittent velocity structure underpinning anomalous transport through 3-D porous media. Geophys. Res. Lett. 41(17), 6184 (2014). doi:10.1002/2014GL061475
Lake, L.W.: Enhanced Oil Recovery, 1st edn. Prentice Hall, Englewood Cliffs (1996)
Manwart, C., Aaltosalmi, U., Koponen, A., Hilfer, R., Timonen, J.: Lattice-Boltzmann and finite-difference simulations for the permeability for three-dimensional porous media. Phys. Rev. E 66, 016702 (2002). doi:10.1103/PhysRevE.66.016702. http://link.aps.org/doi/10.1103/PhysRevE.66.016702
Matringe, S.F., Juanes, R., Tchelepi, H.A.: Robust streamline tracing for the simulation of porous media flow on general triangular and quadrilateral grids. J. Comput. Phys. 219(2), 992 (2006). doi:10.1016/j.jcp.2006.07.004. http://www.sciencedirect.com/science/article/pii/S0021999106003408
Mostaghimi, P., Bijeljic, B., Blunt, M.J.: Simulation of flow and dispersion on pore-space images. SPE Journal 17, 1131 (2012)
Nelson, P.H.: Pore-throat sizes in sandstones, tight sandstones, and shales. AAPG Bull. 93, 329 (2009)
Obi, E.O., Blunt, M.J.: Streamline-based simulation of advective–dispersive solute transport. Adv. Water Res. 27(9), 913 (2004). doi:10.1016/j.advwatres.2004.06.003. http://www.sciencedirect.com/science/article/pii/S0309170804000983
Oliveira, A., Baptista, A.M.: On the role of tracking on Eulerian–Lagrangian solutions of the transport equation. Adv. Water Resour. 21(7), 539 (1998). doi:10.1016/S0309-1708(97)00022-5
Openfoam. http://www.openfoam.org
Pollock, D.W.: Semianalytical computation of path lines for finite-difference models. Ground Water 26(6), 743 (1988). doi:10.1111/j.1745-6584.1988.tb00425.x
Popova, O.H., Small, M.J., McCoy, S.T., Thomas, A.C., Karimi, B., Goodman, A., Carter, K.M.: Comparative analysis of carbon dioxide storage resource assessment methodologies. Environ Geosci 19(3), 105 (2012). doi:10.1306/eg.06011212002
Pozrikidis, C.: Introduction to Theoretical and Computational Fluid Mechanics, 2nd edn. Oxford (2011)
Prevost, M., Edwards, M., Blunt, M.: Streamline tracing on curvilinear structured and unstructured grids. SPE J. 7(2) (2002). doi:10.2118/78663-PA
Raeini, A.Q., Blunt, M.J., Bijeljic, B.: Modelling two-phase flow in porous media at the pore scale using the volume-of-fluid method. J. Comput. Phys. 231(17), 5653 (2012). doi:10.1016/j.jcp.2012.04.011. http://www.sciencedirect.com/science/article/pii/S0021999112001830
Saenger, E.H.: Numerical methods to determine effective elastic properties. Int. J. Eng. Sci. 46(6), 598 (2008). doi:10.1016/j.ijengsci.2008.01.005. http://www.sciencedirect.com/science/article/pii/S0020722508000116. Special Issue: Micromechanics of Materials
Sahimi, M.: Flow and Transport in Porous Media and Fractured Rock: From Classical Methods to Modern Approaches, 2nd edn. Wiley-VCH, Weinheim (2011)
Sàlles, J., Thovert, J.F., Delannay, R., Prevors, L., Auriault, J.L., Adler, P.M.: Taylor dispersion in porous media. Determination of the dispersion tensor. Phys. Fluids A Fluid Dyn. 5(1993), 2348 (1993). doi:10.1063/1.858751. http://link.aip.org/link/?PFADEB/5/2348/1
Siena, M., Guadagnini, A., Riva, M., Bijeljic, B., Pereira Nunes, J.P., Blunt, M.J.: Statistical scaling of pore-scale Lagrangian velocities in natural porous media. Phys. Rev. E 90, 023013 (2014). doi:10.1103/PhysRevE.90.023013. http://link.aps.org/doi/10.1103/PhysRevE.90.023013
Silliman, S.E., Simpson, E.S.: Laboratory evidence of the scale effect in dispersion of solutes in porous media. Water Resour. Res. 23(8), 1667 (1987). doi:10.1029/WR023i008p01667
Szulczewski, M.L., MacMinn, C.W., Herzog, H.J., Juanes, R.: In: Proceedings of the National Academy of Sciences (2012). doi:10.1073/pnas.1115347109. http://www.pnas.org/content/early/2012/03/15/1115347109.abstract
Tompson, A.F.B., Gelhar, L.W.: Numerical simulation of solute transport in three-dimensional, randomly heterogeneous porous media. Water Resour. Res. 26(10), 2541 (1990). doi:10.1029/WR026i010p02541
Acknowledgments
We thank Ali Q. Raeini for providing the Navier–Stokes solver. This Project was sponsored by Petrobras.
Author information
Authors and Affiliations
Corresponding author
Appendices
Appendix 1: Pores with Two Solid Boundaries
There are fifteen ways of arranging two solid voxels around a pore voxel: three with the solids along the same direction and twelve with the solids in adjacent positions.
1.1 Two Solids in the Same Direction
Below is the case of a pore surrounded by two solids in lattice locations \((i+1,j,k)\) and \((i-1,j,k)\). The velocity field is:
In Sect. 4, where we consider an incompressible two-dimensional flow the second term on the right-hand side of 22b is identically zero and we recover the parabolic velocity profile characteristic of flow between two parallel plates.
The x-direction being blocked, \(\tau _x\) is undefined. For a particle starting in a point \((x_p,y_p,z_p)\) inside the pore voxel, we have the following time of flights in the y and z directions:
and the exit position is calculated when \(\tau _e = \text {min}(\tau _y,\tau _z) \):
1.2 Two Adjacent Solids
The case of a pore voxel with coordinates (i, j, k) surrounded by two solids in lattice locations \((i-1,j,k)\) and \((i,j-1,k)\) is derived below. Analytical expressions for all other eleven cases can be obtained in a similar manner. The velocity field is:
To calculate the tof in x and y-directions, it is useful to note that \(V_x\) and \(V_y\) are functions of x and y only, the flow is essentially two dimensional. The time to travel to a point with x-coordinate \(x'\) along a streamline passing through \((x_p,y_p)\) is:
but along the streamline passing through \((x_p,y_p)\) we have:
then it can be shown that Eq. (26) yields:
for the tof in y-direction we have:
and solving for the tof in z-direction we have:
and again the exit position is calculated when \(\tau _e=\text {min}(\tau _x,\tau _y,\tau _z)\):
Appendix 2: Pores with Three Solid Boundaries
There are twenty ways of arranging three solid voxels around a pore. In eight cases the solids are distributed in all three directions (one solid in x, one in y and one in z). The remainder twelve cases have two voxels in one direction and one in another direction (e.g. two voxels in x and one in y).
1.1 One Solid in Each Direction
We show the case of a pore voxel with coordinates (i, j, k) blocked by three solids in lattice locations \((i+1,j,k)\), \((i,j+1,k)\) and \((i,j,k-1)\).
The velocity field is:
and the time-of-flight increment in each direction:
when \(\tau _e = \text {min}(\tau _x,\tau _y,\tau _z) \) we have the exit point:
1.2 Two Solids in the Same Direction
There are twelve cases with three solid boundaries where two of the solids lie in the same direction. Below we show the case in which the x-direction and the \(w_1\) face are blocked. We have the following velocity field:
The transit times in the y and z directions are:
and taking \(\tau _e=\text {min}(\tau _y,\tau _z)\) we have the exit point:
where \(\varDelta x_{2p} = x_2 -x_p\), \(\varDelta x_{p1} = x_p-x_1\), \(\varDelta y_{p1} = y_p-y_1\), and \(\varDelta z_{p1} = z_p-z_1\).
Appendix 3: Pores with Four Solid Boundaries
There are fifteen cases with a pore voxel and four solid neighbours. In three of them two directions are blocked. The other twelve have the four solids arranged in three directions (e.g. two solids in x, one in y and one in z).
1.1 Two Directions Blocked
Below is the case where directions x and y are blocked; the cases with x and z or y and z blocked follow immediately.
Only the z component of the velocity field is nonzero:
Integrating along the streamlines we have the time of flight:
and the exit point is obtained straightforwardly:
1.2 Solids in Three Directions
Below is the case with solids in \((i+1,j,k)\), \((i-1,j,k)\), \((i,j+1,k)\) and \((i,j,k-1)\). The velocity field is:
the time of flight in y and z directions:
and the exit point is:
Rights and permissions
Open Access This article is distributed under the terms of the Creative Commons Attribution 4.0 International License (http://creativecommons.org/licenses/by/4.0/), which permits unrestricted use, distribution, and reproduction in any medium, provided you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license, and indicate if changes were made.
About this article
Cite this article
Pereira Nunes, J.P., Bijeljic, B. & Blunt, M.J. Time-of-Flight Distributions and Breakthrough Curves in Heterogeneous Porous Media Using a Pore-Scale Streamline Tracing Algorithm. Transp Porous Med 109, 317–336 (2015). https://doi.org/10.1007/s11242-015-0520-y
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s11242-015-0520-y