ENERGY-224 Reservoir Simulation Project Report Ala Alzayer Autumn Quarter December 3, 2014
Contents
1 Objective 2
2 Governing Equations 2
3 Methodolgy 3
3.1 BlockMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 SnappyHexMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.3 Boundary Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Simulation Results 5
4.1 Convergence Study . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2 Permeability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3 Tortuosity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.4 REV Study . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.5 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5 Summary 12
6 References 12
1
1 Objective
The main objective of this project is to investigate some of the basic parameters computed in
a direct numerical simulation for a single phase fluid at the pore scale. My focus will be on the
velocity distribution in complex geometry and how it can be used to get an idea of average upscaled
quantities such as absolute permeability. I will examine the effects of the choice of simulation model
used on these properties.
2 Governing Equations
The governing equation for the fluid flow in the pore space will be the mass and momentum balance
equations of Navier-Stokes, which for an incompressible fluid (neglecting gravity) are:
∇·v = 0 (1)
ρ
(∂v
∂t+ v· ∇v
)= −∇p+ µ∇2v (2)
The usual algorithm of choice to solve the pressure-velocity relationship would be the Pressure
Implicit Operator-Splitting (PISO) algorithm (Issa, 1985). This is a predictor-corrector method
which can handle transient problems. Given that the Reynolds number (ratio of intertial to viscous
forces) for the flow in the medium under investigation � 1, we can neglect the intertial effects and
get a more simplified equation:
0 = −∇p+ µ∇2v (3)
This is referred to as the Stokes equation which is a steady-state formulation; for that reason
the Semi-Implicit Method for Pressure Linked Equations (SIMPLE) algorithm (Patankar, 1980)
will be ideal for iteratively guessing/correcting the pressure-velocity fields. This algorithm does not
solve transient problems but should be faster than the PISO algorithm in solving Stokes problems
which is the case in this study. In addition to the equations of motions, the boundary condition
for the fluid/solid interface, where the solid is represented by the grains, is needed. We will impose
the condition that the fluid at the surface of the grains will have a zero velocity relative to the
boundary, this is referred to as the no-slip condition.
2
3 Methodolgy
OpenFOAMr software will be the tool used to simulate the fluid flow in the pore space. The
main steps to solve these kinds of problems will be to discretize the domain (which is not a trivial
task) and set the desired initial and boundary conditions. After that we feed the problem to
the simpleFoam solver (which utilizes the SIMPLE algorithm) to obtain a converged velocity and
pressure field. I will elaborate on the discretization part next since it is more important than one
might think. The combination of tools used in OpenFOAMr to mesh complex geometries are
blockMesh, which defines the background grid, and snappyHexMesh, which alters the grid to fit
the void space being modeled. I will elaborate on the two steps below.
3.1 BlockMesh
This step involves simply generating a cartesian grid which is of the ”same size” of the desired
object to be meshed. Note that the object files usually either represent the solid grains or the pore
space (figure 1). When the objects represent the grains, the cartesian grid generated can be larger
or smaller than the domain. When the object file represents the pore space, the cartesian grid
should be smaller than the domain as this will make the next step in meshing easier in setting the
appropriate boundary conditions.
Figure 1: Object file representing the solid grains (left) and pore space (right) with cartesianbackground grid generated by blockMesh
Although this step does not take so much time and could be considered a very simple step, it
is quite important in resolving the behavior in tight pore spaces. I will elaborate on this point in
the simulation results section.
3
3.2 SnappyHexMesh
The next step after ensuring that the generated grid covers the desired domain involves cutting out
the grains. This will leave us with a mesh that only represents the pore space. The snappyHexMesh
tool does this in two steps as shown in figure 2. The first step involves removing the grid blocks
adjacent to the grains, the next step smoothens the edges and snaps the grid onto the surfaces of
the grains. The cells with faces touching the grains are all identified as an additional ”boundary”
in our domain to be specified.
Figure 2: The first (left) and second (right) step used in snappyHexMesh
This step is the more time consuming (as well as memory consuming) part of the meshing; the
snappyHexMesh step can take up to 12 hours on a single processor for a 2D sandstone image (0.6
mm × 1.83mm) and a cartesian grid with 3000×8000 cells.
3.3 Boundary Conditions
With the domain fully discretized, the only step left is to initialize the domain and set the boundary
conditions. The only constance we use is the kinematic viscosity of the fluid which in this case is
set to 1e-6 m2s−1. For the Stokes problem we are only concerned with velocity and pressure fields
and therefore initalize the internal domain with zero pressure and velocity, while the boundary
conditions are shown in Table 1 below.
Table 1: Boundary Conditions
Boundary Pressure [m2/s2] Velocity [m/s]
Inlet 1e-3 zero gradient
Outlet 0 zero gradient
Walls zero gradient 0 (no slip condition)
Grain Surfaces zero gradient 0 (no slip condition)
(Note: pressure is normalized by density)
4
4 Simulation Results
As mentioned before, with the domain discretized and initial/boundary conditions set, the sim-
pleFoam solver is used to iteratively guess/correct the pressure-velocity fields until convergence
(residual smaller than 1e-6). Since we are dealing with a steady state problem, the results will
include only the steady state pressure and velocity distributions which depend solely on the bound-
ary conditions and pore geometry. The two main geometries I am considering here are shown in
figure 3, I will refer to the one on the left as ”simple” case whereas the one on the right as ”SS2”
which is a sandstone slice used in the SUPRI-A group (courtesy of Soulaine). Both these models
are 2D slices of the pore geometry and therefore all simuations run are in the x-y plane. I am
showing the pressure distributions in both geometries which will practically be the same in all the
cases considered here. In the next part I will show the results of the convergence study done on
both these geometries which should highlight the importance of the grid used in modeling pore
scale flow.
Figure 3: Pressure distribution for simple (left) and SS2 (right) pore geometry
5
4.1 Convergence Study
The main parameters I am considering here are the average and maximum velocity of the domain
after convergence. I am normalizing the results for each case with that of the highest resolution
case (figure 4). Note the dashed black line which shows the number of pixels in the real image for
each geometry. We see that the significant difference in results are seen for any grid that has a
lower resolution than the actual image. After that we see that the simple geometry converges to
the solution faster than the SS2 case. This is expected as SS2 is much more complicated with a
wider distribution of pore throat sizes. This supports the current best practices which emphasizes
mesh quality even beyond the base image resolution (Soulaine, 2014). Ideally we would like to
capture the poiseuille flow regime in all the pore throats, which would require 5-10 cells resolution
atleast.
Figure 4: Convergence study of the simple (left) and the SS2 (right) geometry
One interesting observation here is that the average velocity seems to be more restrictive than
the maximum velocity, which is the opposite of what one would expect. However, when looking
at the velocity distribution in the different cases we see that the less resolved cases are capable of
capturing the high velocities in the small pore throats. On the other hand we see that due to the
low resolution the velocities can be overestimated in the large pores between the pore throats where
the high resolution model show more variation (figure 5). I included the 100×25 case just to show
the extreme case of when the grid resolution is less than the image size; we see a significant loss
of connectivity which should not even be considered a valid simulation model. Figure 6 shows the
same trend for the SS2 geometry. The significance of these results show the importance of having
a converged model especially when it comes to obtain effective parameters such as permeability.
6
Figure 5: Velocity distribution for the simple case with 100×25 (top-left) 200×50 (top-right)400×100 (bottom-left) 800×200 (bottom-right)
Figure 6: Velocity distribution for the SS2 case with 200×600 (left) 400×1200 (center) 2000×6000(bottom-left)
7
4.2 Permeability
Absolute permeability is probably one of the most common effective parameters obtained from
direct numerical simulation at the pore scale. This is quite easy to do once an accurate velocity field
is obtained; previous section shows that caution needs to be taken when deciding that the model
being used is representative. Below I estimate the absolute permeabilities using the converged
models for the two geometries:
ksimple =µLx
∆P× 1
V
∫vvxdV =
(1e− 5)(9.2e− 4)(1.697e− 6)
(1e− 3)= 15.82 d
kss2 =µLy
∆P× 1
V
∫vvydV =
(1e− 5)(1.6e− 3)(1.28e− 6)
(1e− 3)= 20.75 d
If we use a less resolved model we can use an average velocity value that is 1.1 × the converged
value as seen in figure 4. This would result in permeabilities values of 17.4 and 22.83 darcies
respectively. This might not seem so severe for this case since the geometries being used, despite
being complex, are relatively homogeneous.
4.3 Tortuosity
Tortuosity is another average parameter which can be deduced from pore scale simulation. There
are relatively more sophisticated ways of computing the tortuosity of a medium by computing the
dispersion tensor. However, here an attempt was made to compute tortuosity using stream lines.
Once the velocity field is obtained we are able to trace particle paths (using the stream tracer
tool in ParaViewr). The simplest definition of tortuosity is the length of path traveled (length of
streamline) over the distance between the two points (length of domain). For this project, I only
traced 5 streamlines on the simple geometry case (figure 7) and took the average length of the 5
streamlines. This gives us an idea about the average tortuosity in this geometry:
τ =StreamlineLength
LengthofDomain=
0.1
0.092= 1.087
Ideally we would have a much larger number of streamlines to obtain a value which is more
representative. The next section will investigate the idea of a representative elementary volume
(REV) which plays an important role in estimating effective properties such as permeability and
tortuosity.
8
Figure 7: Variation of average porosity and speed (left) and the corresponding error (right) withincreasing sample size
4.4 REV Study
The use of effective properties such as porosity and permeability is based on the assumption that the
source of these averaged properties is statistically representative of the entire domain. The following
study is a simple investigation of the porosity and average velocity which could be considered as an
indication of permeability. This was conducted on a square domain obtained from stiching the SS2
geometery (Efros and Freeman, 2001). For this study a simulation was run on the whole domain
to obtain the velocity profile. The methodolgy presented was followed to make sure that we are
using a converged grid. We then used an averaging tool which can extract the results from a given
sample size of the domain and obtain the average porosity and velocity. A total of 24 samples were
taken from the domain; the results and relative errors compared to the full domain solution are
shown in Figure 8.
9
Figure 8: Variation of average porosity and speed (left) and the corresponding error (right) withincreasing sample size
If we assume that the sample size is considered an REV once the error is bounded by 2%
(arbitrary number), we can see that the two averaged properties differ in REV size (figure 8). This
confirms the well known idea that different averaged parameters might have different respective
REV sizes. Ideally the REV size should be representative of all required averaged parameters
(tortuosity, permeability, dispersion tensor...etc).
Figure 9: REV size for average porosity (left) and velocity (right) for a bounded error of 2%
10
4.5 Scalability
Despite the fact we are dealing with the millimeter scale, due to the size of the simulation grids
(O(107) cells) it is obvious how expensive these computations are. This brings us to concern
of computational speed where the importance of parallelizing comes into play. This is done in
OpenFOAMr by decomposing the full domain into multiple domains. These sub-domains are
then linked with one another through boundary conditions. Once the simulation are done the full
domain is reconstructed. The following strong scaling study was conducted on the SS2 geometry
with 1.92 million cells (figure 10).
Figure 10: Strong scaling for 1.92 million cell case showing speed up (left) and clock time (right)
From the results we can see that these simulation are scalable up to a point, which is expected.
We see that the speed up factor is almost a 1 to 1 relationship with the number of processors up to
64 processors where we see a deviation. That is exactly the point where each processor deals with
30,000 cells; which has been observed with OpenFOAMr to be the point where communication
time starts to counter the speed up resulting from decomposing the domain to multiple processors.
We also see the point at which we start to loose speed up (20,000 cells per processor).
11
5 Summary
Direct numerical simulation in complex geometry is a powerful tool for gaining insight of the
underlying physics of fluid flow in porous media, however care should be taken when dealing with
these models. We have highlighted the importance of the mesh starting from the background
cartesian grid, which could seem trivial. Having enough resolution to capture the flow in tight
pore throats is necessary for obtaining an accurate and representative overall velocity field, where
we saw that the average velocity is more restrictive than the maximum velocity with convergence.
The impact of that is seen in estimating effective properties such as absolute permeability.
Obtaining a REV is also a very important part of analyzing results from pore scale simulations.
In this study we looked at porosity and average velocity in a 2D relatively homogeneous sandstone.
This difference in REV size could be the case with other properties estimated which lie beyond the
scope of this study.
6 References
1. Issa. Solution of the implicitly discretised fluid flow equations by operator-splitting. Journal
of Computational Physics, 62:40-65, 1985.
2. Patankar. Numerical Heat Transfer And Fluid Flow. Taylor and Francis, 1980.
3. C. Soulaine notes on Direct numerical simulation in fully saturated porous media, 2014.
4. A.A. Efros and W.T. Freeman, ”Image Quilting for Texture Synthesis and Transfer,” Com-
puter Graphics (Proc. Siggraph 2001), ACM Press, New York, 2001, pp.341-346.
12