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) :

p = p_0 \frac{k_0(R \sqrt{s})}{s k_0(\sqrt{s})}

\sigma_{rr} = -b \frac{1-2\nu}{1-\nu} p_0 \frac{-R k_1(R \sqrt{s}) + k_1(\sqrt{s})}{R^2 \sqrt{s^3} k_0(\sqrt{s})}

\sigma_{\theta\theta} = -b \frac{1-2\nu}{1-\nu} p - \sigma_{rr}

where s is the Laplace variable normalized by the fluid diffusion coefficient, k_0 and k_1 are respectively the modified Bessel functions of second kind of order 0 and 1, R is the dimensionless radial coordinate that is defined by the radial coordinate normalized by the wellbore radius, \nu is the Poisson ratio and b 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:

../../../../../../_images/pressure3.png

A good agreement between the GEOS results and the corresponding analytical solutions is shown in the figure below:

(Source code)

../../../../../../_images/deviatedPoroElasticWellboreExample1Figure.png

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.