Proppant Slot Test
Context
In this example, a simulation is built up to model a proppant slot test. In this way, the implemented proppant model is validated by comparing numerical results with the corresponding experimental data. Furthermore, this calibrated proppant model can allow field engineers to customize stimulation design and optimize field operations in multiple engineering aspects (Huang et al., 2021).
Input file
This example uses no external input files and everything is contained within a single xml file that is located at:
inputFiles/proppant/ProppantSlotTest_base.xml
inputFiles/proppant/ProppantSlotTest_benchmark.xml
Description of the case
Chun et al. (2020) conducted slot tests on proppant transport with slickwater. As shown below, a 4 ft X 1 ft slot with 0.3 in gap width was constructed. Three fluid inlets with 0.5 in inner diameter were placed at the right side of the slot, which were three inches away from each other. One outlet was placed on the top side to allow pressure relief. The other one was located on the left side acting as a fluid sink. In their tests, to resemble a slickwater fracturing treatment, the proppant concentration was kept at 1.5 ppg and the viscosity of carrying fluid was approximately 1 cp. The slurry was mixed well and then injected into the flow channel at a constant injection rate of 6 gpm. A simulation case with the same settings is built up to mimic these slot tests. A vertical and impermeable fracture surface is assumed in this case, which eliminates the effect of fracture plane inclination and fluid leak-off. A static fracture with an uniform aperture of 0.3 in is defined and fracture propagation is not involved. 30/50 mesh proppant is injected via the three inlets and is flowed through the slot for 30 seconds.
To simulate proppant transport phenomenon, a proppant solver based on the assumption of multi-component single phase flow is used in this example. Proppant concentration and distribution within the slot are numerically calculated by solving the equations of proppant transport in hydraulic fractures. These numerical predictions are then validated against the corresponding testing results (Chun et al., 2020).
In this example, we focus our attention on the Solvers
, Constitutive
and FieldSpecifications
tags.
Mesh
The following figure shows the mesh used for solving this problem.
We use the internal mesh generator InternalMesh
to create a computational domain.
This mesh contains 2 x 97 x 24 eight-node brick elements in the x, y and z directions, respectively.
Here, a structured three-dimensional mesh is generated with C3D8
as the elementTypes (eight-node hexahedral elements).
This mesh is defined as a cell block with the name cb1
.
<Mesh>
<InternalMesh
name="mesh"
elementTypes="{ C3D8 }"
xCoords="{ -1, 1 }"
yCoords="{ 0, 1.2319 }"
zCoords="{ 0, 0.3048 }"
nx="{ 2 }"
ny="{ 97 }"
nz="{ 24 }"
cellBlockNames="{ cb1 }"/>
</Mesh>
Proppant transport solver
GEOS is a multi-physics platform. Different combinations of physics solvers available in the code can be applied in different regions of the domain and be functional at different stages of the simulation. The Solvers
tag in the XML file is used to define these solvers.
To specify a coupling between two different solvers, we define and characterize each single-physics solver separately. Then, we customize a coupling solver between these single-physics solvers as an additional solver. This approach allows for generality and flexibility in constructing multi-physics solvers. The order of specifying these solvers is not restricted in GEOS. Note that end-users should give each single-physics solver a meaningful and distinct name, as GEOS will recognize these single-physics solvers based on their customized names and create user-expected coupling.
As demonstrated in this example, to setup a coupled proppant transport solver, we need to define three different solvers in the XML file:
the proppant transport solver for the fracture region, a solver of type
ProppantTransport
called hereProppantTransport
(see Proppant Transport Solver for more information),
<ProppantTransport
name="ProppantTransport"
logLevel="1"
updateProppantPacking="1"
proppantDiameter="4.5e-4"
frictionCoefficient="0.04"
criticalShieldsNumber="0.0"
maxProppantConcentration="0.62"
discretization="singlePhaseTPFA"
targetRegions="{ Fracture }">
<NonlinearSolverParameters
newtonTol="1.0e-6"
newtonMaxIter="8"
lineSearchAction="None"
maxTimeStepCuts="5"/>
<LinearSolverParameters
solverType="gmres"
krylovTol="1.0e-7"/>
</ProppantTransport>
the single-phase flow solver, a solver of type
SinglePhaseProppantFVM
called hereSinglePhaseFVM
,
<SinglePhaseProppantFVM
name="SinglePhaseFVM"
logLevel="1"
discretization="singlePhaseTPFA"
targetRegions="{ Fracture }">
<NonlinearSolverParameters
newtonTol="1.0e-6"
newtonMaxIter="8"
lineSearchAction="None"
newtonMinIter="0"/>
<LinearSolverParameters
solverType="gmres"
preconditionerType="amg"
krylovTol="1.0e-7"/>
</SinglePhaseProppantFVM>
the coupling solver (
FlowProppantTransport
) that binds the two single-physics solvers above, which is named asFlowProppantTransport
<FlowProppantTransport
name="FlowProppantTransport"
proppantSolverName="ProppantTransport"
flowSolverName="SinglePhaseFVM"
targetRegions="{ Fracture }"
logLevel="1"/>
In this example, let us focus on the coupling solver.
This solver (FlowProppantTransport
) describes the coupling process between proppant and flow transport within the Fracture
region. In this way, the two single-physics solvers (ProppantTransport
and SinglePhaseFVM
) are sequentially called to solve the sub-problems (proppant transport and pressure problem, respectively) involved in this test case.
Constitutive laws
For this slot test, 30/50 mesh proppant is injected via the three inlets and flowing through the slot for 30 seconds.
The viscosity of carrying fluid is 0.001 Pa.s to resemble slickwater fracturing. In this example, the solid and fluid materials are named as sand
and water
respectively.
Proppant characterization and fluid rheology are specified in the Constitutive
section:
<Constitutive>
<ProppantSlurryFluid
name="water"
referencePressure="1e5"
referenceDensity="1000"
compressibility="0.0"
maxProppantConcentration="0.62"
referenceViscosity="0.001"
referenceProppantDensity="2550.0"/>
<ParticleFluid
name="sand"
particleSettlingModel="Stokes"
hinderedSettlingCoefficient="4.5"
proppantDensity="2550.0"
proppantDiameter="4.5e-4"
maxProppantConcentration="0.62"/>
<ProppantSolidProppantPermeability
name="fractureFilling"
solidModelName="nullSolid"
porosityModelName="fracturePorosity"
permeabilityModelName="fracturePerm"/>
<NullModel
name="nullSolid"/>
<ProppantPorosity
name="fracturePorosity"
defaultReferencePorosity="1.00"
maxProppantConcentration="0.62"/>
<ProppantPermeability
name="fracturePerm"
proppantDiameter="4.5e-4"
maxProppantConcentration="0.62"/>
</Constitutive>
The constitutive parameters such as proppant density and proppant diameter are specified in the International System of Units.
Initial and boundary conditions
The next step is to specify fields, including:
The initial value (fracture aperture, fluid pressure and proppant concentration within the fracture have to be initialized)
The boundary conditions (fluid pressure and proppant concentration at fluid inlets and outlets)
These boundary conditions are set up through the FieldSpecifications
section.
At a constant injection rate, the slurry is equally flowing into the open channel through three inlets.
<FieldSpecifications>
<FieldSpecification
name="frac"
initialCondition="1"
setNames="{ fracture }"
objectPath="faceManager"
fieldName="ruptureState"
scale="1"/>
<FieldSpecification
name="fracAp"
initialCondition="1"
objectPath="ElementRegions/Fracture"
fieldName="elementAperture"
scale="7.62e-3"
setNames="{ fracture }"/>
<FieldSpecification
name="frac1"
initialCondition="1"
objectPath="ElementRegions/Fracture"
fieldName="pressure"
scale="0.0"
component="0"
setNames="{ fracture }"/>
<FieldSpecification
name="frac2"
initialCondition="1"
objectPath="ElementRegions/Fracture"
fieldName="proppantConcentration"
scale="0.0"
component="0"
setNames="{ fracture }"/>
<FieldSpecification
name="frac3"
initialCondition="1"
objectPath="ElementRegions/Fracture"
fieldName="isProppantBoundary"
component="0"
setNames="{ fracture }"/>
<FieldSpecification
name="frac4"
initialCondition="1"
objectPath="ElementRegions/Fracture"
fieldName="isProppantBoundary"
scale="1"
component="0"
setNames="{ left0 }"/>
<SourceFlux
name="left1a"
objectPath="ElementRegions/Fracture"
scale="-0.14"
component="0"
setNames="{ left1 }"/>
<FieldSpecification
name="left1b"
objectPath="ElementRegions/Fracture"
fieldName="proppantConcentration"
scale="0.07"
component="0"
setNames="{ left1 }"/>
<SourceFlux
name="left2a"
objectPath="ElementRegions/Fracture"
scale="-0.14"
component="0"
setNames="{ left2 }"/>
<FieldSpecification
name="left2b"
objectPath="ElementRegions/Fracture"
fieldName="proppantConcentration"
scale="0.07"
component="0"
setNames="{ left2 }"/>
<SourceFlux
name="left3a"
objectPath="ElementRegions/Fracture"
scale="-0.14"
component="0"
setNames="{ left3 }"/>
<FieldSpecification
name="left3b"
objectPath="ElementRegions/Fracture"
fieldName="proppantConcentration"
scale="0.07"
component="0"
setNames="{ left3 }"/>
<FieldSpecification
name="right1"
objectPath="ElementRegions/Fracture"
fieldName="pressure"
scale="0.0"
component="0"
setNames="{ right }"/>
<FieldSpecification
name="right2"
objectPath="ElementRegions/Fracture"
fieldName="proppantConcentration"
scale="0.0"
component="0"
setNames="{ right }"/>
</FieldSpecifications>
Note: For static (non-propagating) fracture problems, the fields ruptureState
and elementAperture
should be provided in the initial conditions.
FieldName="pressure"
here means that the source flux term is added to the mass balance equation for pressure.
The parameters used in the simulation are summarized in the following table.
Symbol |
Parameter |
Unit |
Value |
---|---|---|---|
Proppant Diameter |
[m] |
0.00045 |
|
Darcy Friction Coefficient |
[-] |
0.04 |
|
Critical Shields Number |
[-] |
0.0 |
|
Max Fraction of Proppant |
[-] |
0.62 |
|
Fluid Density |
[kg/m^3] |
1000 |
|
Fluid Viscosity |
[Pa*s] |
0.001 |
|
Proppant Density |
[kg/m^3] |
2550 |
|
Hindered Settling Coefficient |
[-] |
4.5 |
|
Proppant Concentration in Slurry |
[m^3/m^3] |
0.07 |
|
Fracture Length |
[m] |
1.219 |
|
Fracture Height |
[m] |
0.3048 |
|
Fracture Aperture |
[m] |
0.00762 |
|
Injection Rate |
[m^3/s] |
0.0003785 |
Inspecting results
The following figure shows the modelling prediction of proppant distribution at 10 s and 30 s, which are compared with the experiments in (Chun et al., 2020). Due to proppant settling in low viscosity fluid, a heterogeneous proppant distribution is obtained, which evolves with injection time. Three different zones (immobile proppant bed, suspended proppant and clean fluid) are visually identified for both the presented experiment and simulation.
As shown below, consistently, the modelling predictions (green curve) on proppant transport and distribution show a good agreement with the reported experimental data (red dot) at each time.
To go further
Feedback on this example
This concludes the example on simulating a proppant slot test. For any feedback on this example, please submit a GitHub issue on the project’s GitHub page.
For more details
More on proppant solver, please see Proppant Transport Solver.