Deviated Poro-Elastic Wellbore Subjected to Fluid Injection
Problem description
This example aims to solve a typical injection problem of a deviated wellbore subjected to a fluid pressure loaded at wellbore wall. The problem geometry is generated with the internal wellbore mesh generator. Open hole completion and poroelastic deformation are assumed. The coupled poroelastic solver, which combines the solid mechanics solver and the single phase flow solver, is hereby employed to solve this specific problem. In-situ stresses and gravity effect are excluded from this example. Please refer to the case Deviated Poro-Elastic Wellbore Subjected to In-situ Stresses and Pore Pressure for in-situ stresses and pore pressure effects.
Analytical solutions of the pore pressure, the radial and hoop stresses in the near wellbore region are expressed in the Laplace space as (Detournay and Cheng, 1988) :
where is the Laplace variable normalized by the fluid diffusion coefficient, and are respectively the modified Bessel functions of second kind of order 0 and 1, is the dimensionless radial coordinate that is defined by the radial coordinate normalized by the wellbore radius, is the Poisson ratio and is the Biot coefficient. Fluid pressure and stresses in time space are obtained from these analytical expressions by the inverse Laplace transform (see the attached Python script for more details).
Input file
Everything required is contained within two GEOS xml files that are located at:
inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_base.xml
inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection_benchmark.xml
In this example, we would focus our attention on the Solvers
and the Mesh
tags.
Poroelastic solver
The coupled Poroelastic
solver, that defines a coupling strategy between the solid mechanics solver SolidMechanicsLagrangianSSLE
and the single phase flow solver SinglePhaseFVM
, is required for solving this wellbore problem.
<SinglePhasePoromechanics
name="poroSolve"
solidSolverName="lagsolve"
flowSolverName="SinglePhaseFlow"
logLevel="1"
targetRegions="{ Omega }">
<SolidMechanicsLagrangianSSLE
name="lagsolve"
timeIntegrationOption="QuasiStatic"
discretization="FE1"
logLevel="0"
targetRegions="{ Omega }"
>
<SinglePhaseFVM
name="SinglePhaseFlow"
logLevel="1"
discretization="singlePhaseTPFA"
targetRegions="{ Omega }">
Deviated wellbore mesh
The internal wellbore mesh generator InternalWellbore
is employed to create the mesh of this wellbore problem. The radius of the wellbore and the size of the surrounding rock formation are defined by a vector radius
. In the tangent direction, theta
angle is specified from 0 to 180 degree for a half of the domain regarding its symmetry. Note that the whole domain could be specified with a theta
angle from 0 to 360 degree, if modeling complicated scenarios. The trajectory of the well is defined by trajectory
. In this example, the wellbore is inclined in the x-z plane by an angle of 45 degree. The autoSpaceRadialElems
parameter allows optimally increasing the element size from local zone around the wellbore to the far-field zone, which is set to 1 to activate this option. The useCartesianOuterBoundary
transforms the far-field boundary to a squared shape to enforce a Cartesian aligned outer boundary, which eases the loading of the far-field boundary conditions. In this example, this value is set to 0 for the single region along the radial direction.
<Mesh>
<InternalWellbore
name="mesh1"
elementTypes="{ C3D8 }"
radius="{ 0.1, 4 }"
theta="{ 0, 180 }"
zCoords="{ -1, 1 }"
nr="{ 30 }"
nt="{ 80 }"
nz="{ 10 }"
trajectory="{ { -1.0, 0.0, -1.0 },
{ 1.0, 0.0, 1.0 } }"
autoSpaceRadialElems="{ 1 }"
useCartesianOuterBoundary="0"
cellBlockNames="{ cb1 }"/>
</Mesh>
Constitutive law
Isotropic elastic constitutive block ElasticIsotropic
, with the specified bulk and shear elastic moduli, is considered for the rock around the wellbore. Fluid properties, such as dynamic viscosity and compressibility, are given in the CompressibleSinglePhaseFluid
constitutive block. The grain bulk modulus, that is required for computing the Biot coefficient, as well as the default porosity are located in the BiotPorosity
block. The constant permeability is given in the ConstantPermeability
block.
<PorousElasticIsotropic
name="porousRock"
solidModelName="rock"
porosityModelName="rockPorosity"
permeabilityModelName="rockPerm"/>
<ElasticIsotropic
name="rock"
defaultDensity="0"
defaultBulkModulus="11039657020.4"
defaultShearModulus="8662741799.83"/>
<!-- BiotCoefficient="0.771"
BiotModulus=15.8e9 -->
<CompressibleSinglePhaseFluid
name="water"
defaultDensity="1000"
defaultViscosity="0.001"
referencePressure="0e6"
compressibility="1.78403329184e-10"
viscosibility="0.0"/>
<BiotPorosity
name="rockPorosity"
defaultGrainBulkModulus="48208109259"
defaultReferencePorosity="0.3"/>
<ConstantPermeability
name="rockPerm"
permeabilityComponents="{ 1.0e-17, 1.0e-17, 1.0e-17 }"/>
Boundary conditions
Far-field boundaries are impermeable and subjected to roller constraints. The pressure on the wellbore wall is defined by face pressure field specification. The nodeset generated by the internal wellbore generator for this face is named as rneg
. The negative sign of the scale denotes the fluid injection. Initial fluid pressure and the corresponding initial porosity are also given for the computational domain. In this example, uniform isotropic permeability is assumed.
<FieldSpecifications>
<FieldSpecification
name="initialPorosity"
initialCondition="1"
setNames="{all}"
objectPath="ElementRegions/Omega/cb1"
fieldName="rockPorosity_porosity"
scale="0.3"/>
<FieldSpecification
name="initialPressure"
initialCondition="1"
setNames="{ all }"
objectPath="ElementRegions/Omega/cb1"
fieldName="pressure"
scale="0e6"/>
<FieldSpecification
name="xConstraint"
objectPath="nodeManager"
fieldName="totalDisplacement"
component="0"
scale="0.0"
setNames="{ xneg, xpos }"/>
<FieldSpecification
name="yConstraint"
objectPath="nodeManager"
fieldName="totalDisplacement"
component="1"
scale="0.0"
setNames="{ tneg, tpos, ypos }"/>
<FieldSpecification
name="zconstraint"
objectPath="nodeManager"
fieldName="totalDisplacement"
component="2"
scale="0.0"
setNames="{ zneg, zpos }"/>
<FieldSpecification
name="innerPorePressure"
objectPath="faceManager"
fieldName="pressure"
scale="10e6"
setNames="{ rneg }"/>
</FieldSpecifications>
Results and benchmark
Result of the fluid pressure distribution after 78 s injection is shown in the figure below:
A good agreement between the GEOS results and the corresponding analytical solutions is shown in the figure below:
To go further
Feedback on this example
This concludes the deviated poro-elastic wellbore example. For any feedback on this example, please submit a GitHub issue on the project’s GitHub page.