Skip to content

Commit 3fde58e

Browse files
authored
feat: Multiphase contact mechanics with wells (#3849)
1 parent bfa4904 commit 3fde58e

14 files changed

+718
-12
lines changed

.integrated_tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
baselines:
22
bucket: geosx
3-
baseline: integratedTests/baseline_integratedTests-pr3880-14441-1132122
3+
baseline: integratedTests/baseline_integratedTests-pr3849-14514-aaaf0f9
44

55
allow_fail:
66
all: ''

BASELINE_NOTES.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ This file is designed to track changes to the integrated test baselines.
66
Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining.
77
These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD).
88

9+
PR #3849 (2025-10-23) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3849-14514-aaaf0f9.tar.gz>
10+
Add multiphase contact with wells
11+
912
PR #3880 (2025-10-13) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3880-14441-1132122.tar.gz>
10-
=====================
1113
Fix a bug introduced in #3485: mass that is used in accumulation term was not updated with porosity change after mechanics leading to always converged sequential outer loop.
1214

1315
PR #3299 (2025-10-13) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3299-14426-6c93a0d.tar.gz>
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
<Problem>
2+
<Constitutive>
3+
<PorousElasticIsotropic
4+
name="porousRock"
5+
permeabilityModelName="rockPerm"
6+
porosityModelName="rockPorosity"
7+
solidModelName="rock" />
8+
9+
<ElasticIsotropic
10+
name="rock"
11+
defaultDensity="2927"
12+
defaultPoissonRatio="0.15"
13+
defaultYoungModulus="14950000000" />
14+
15+
<CO2BrinePhillipsFluid
16+
name="fluid"
17+
logLevel="1"
18+
phaseNames="{ gas, water }"
19+
componentNames="{ co2, water }"
20+
componentMolarWeight="{ 44e-3, 18e-3 }"
21+
phasePVTParaFiles="{ pvtgas.txt, pvtliquid.txt }"
22+
flashModelParaFile="co2flash.txt" />
23+
24+
<BiotPorosity
25+
name="rockPorosity"
26+
defaultReferencePorosity="0.3"
27+
defaultGrainBulkModulus="7.12e30" />
28+
29+
<ConstantPermeability
30+
name="rockPerm"
31+
permeabilityComponents="{ 1.0e-12, 1.0e-12, 1.0e-12 }" />
32+
33+
<!-- Material inside the fault -->
34+
<CompressibleSolidParallelPlatesPermeability
35+
name="faultFilling"
36+
solidModelName="nullSolid"
37+
porosityModelName="fracturePorosity"
38+
permeabilityModelName="fracturePerm" />
39+
40+
<PressurePorosity
41+
name="fracturePorosity"
42+
defaultReferencePorosity="1.0"
43+
referencePressure="0e6"
44+
compressibility="0.0" />
45+
46+
<ParallelPlatesPermeability
47+
name="fracturePerm" />
48+
49+
<Coulomb
50+
name="fractureContact"
51+
cohesion="40.0e6"
52+
frictionCoefficient="0.01" />
53+
54+
<HydraulicApertureTable
55+
name="hApertureModel"
56+
apertureTableName="apertureTable" />
57+
58+
<NullModel
59+
name="nullSolid" />
60+
61+
<TableRelativePermeability
62+
name="relperm"
63+
phaseNames="{ gas, water }"
64+
wettingNonWettingRelPermTableNames="{ waterRelativePermeabilityTable,
65+
gasRelativePermeabilityTable }" />
66+
67+
</Constitutive>
68+
69+
<Geometry>
70+
<Box
71+
name="xposFace"
72+
xMin="{ 5999.99, -6000.01, -4000.01 }"
73+
xMax="{ 6000.01, 6000.01, 0.01 }" />
74+
75+
<Box
76+
name="xnegFace"
77+
xMin="{-6000.01, -6000.01, -4000.01 }"
78+
xMax="{-5999.99, 6000.01, 0.01 }" />
79+
80+
<Box
81+
name="yposFace"
82+
xMin="{-6000.01, 5999.99, -4000.01 }"
83+
xMax="{ 6000.01, 6000.01, 0.01 }" />
84+
85+
<Box
86+
name="ynegFace"
87+
xMin="{-6000.01, -6000.01, -4000.01 }"
88+
xMax="{ 6000.01, -5999.99, 0.01 }" />
89+
90+
<Box
91+
name="zposFace"
92+
xMin="{-6000.01, -6000.01, -0.01 }"
93+
xMax="{ 6000.01, 6000.01, 0.01 }" />
94+
95+
<Box
96+
name="znegFace"
97+
xMin="{-6000.01, -6000.01, -4000.01 }"
98+
xMax="{ 6000.01, 6000.01, -3999.99 }" />
99+
</Geometry>
100+
101+
<FieldSpecifications>
102+
103+
<FieldSpecification
104+
name="fracPorosity"
105+
initialCondition="1"
106+
setNames="{ all }"
107+
objectPath="ElementRegions/Fault"
108+
fieldName="fracturePorosity_porosity"
109+
scale="1.0" />
110+
111+
<FieldSpecification
112+
name="xconstraint"
113+
component="0"
114+
fieldName="totalDisplacement"
115+
objectPath="nodeManager"
116+
scale="0.0"
117+
setNames="{ xnegFace, xposFace }" />
118+
119+
<FieldSpecification
120+
name="yconstraint"
121+
component="1"
122+
fieldName="totalDisplacement"
123+
objectPath="nodeManager"
124+
scale="0.0"
125+
setNames="{ ynegFace, yposFace }" />
126+
127+
<FieldSpecification
128+
name="zconstraint"
129+
component="2"
130+
fieldName="totalDisplacement"
131+
objectPath="nodeManager"
132+
scale="0.0"
133+
setNames="{ znegFace }" />
134+
135+
<Traction
136+
name="tractionTop"
137+
objectPath="faceManager"
138+
tractionType="normal"
139+
scale="-1e7"
140+
setNames="{ zposFace }" />
141+
142+
<HydrostaticEquilibrium
143+
name="equil"
144+
objectPath="ElementRegions"
145+
datumElevation="-2000"
146+
datumPressure="2e7"
147+
initialPhaseName="water"
148+
componentNames="{ co2, water }"
149+
componentFractionVsElevationTableNames="{ initCO2CompFracTable,
150+
initWaterCompFracTable }"
151+
temperatureVsElevationTableName="initTempTable" />
152+
</FieldSpecifications>
153+
154+
<ElementRegions>
155+
<CellElementRegion
156+
name="Region"
157+
cellBlocks="{ 2_hexahedra, 1_hexahedra, 0_hexahedra }"
158+
materialList="{ fluid, relperm, porousRock }" />
159+
160+
<SurfaceElementRegion
161+
name="Fault"
162+
faceBlock="fracture"
163+
materialList="{ fluid, relperm, faultFilling, fractureContact, hApertureModel }"
164+
defaultAperture="1e-3" />
165+
166+
<WellElementRegion
167+
name="wellInjector"
168+
materialList="{ fluid, relperm }" />
169+
</ElementRegions>
170+
171+
<NumericalMethods>
172+
<FiniteElements>
173+
<FiniteElementSpace
174+
name="FE1"
175+
order="1" />
176+
</FiniteElements>
177+
178+
<FiniteVolume>
179+
<TwoPointFluxApproximation
180+
name="TPFA" />
181+
<TwoPointFluxApproximation
182+
name="TPFA_stab" />
183+
</FiniteVolume>
184+
</NumericalMethods>
185+
186+
<Tasks>
187+
<CompositionalMultiphaseReservoirPoromechanicsConformingFracturesInitialization
188+
logLevel="1"
189+
name="poroelasticityPreEquilibrationStep"
190+
poromechanicsSolverName="reservoirSolver" />
191+
</Tasks>
192+
193+
<Outputs>
194+
<VTK
195+
name="vtkOutput"
196+
fieldNames="{ initialPressure}" />
197+
198+
<Restart
199+
name="restartOutput" />
200+
</Outputs>
201+
202+
<Functions>
203+
204+
<TableFunction
205+
name="initCO2CompFracTable"
206+
coordinateFiles="{ elevation.txt }"
207+
voxelFile="initCO2CompFrac.txt" />
208+
209+
<TableFunction
210+
name="initWaterCompFracTable"
211+
coordinateFiles="{ elevation.txt }"
212+
voxelFile="initWaterCompFrac.txt" />
213+
214+
<TableFunction
215+
name="initTempTable"
216+
coordinateFiles="{ elevation.txt }"
217+
voxelFile="initTemp.txt" />
218+
219+
<TableFunction
220+
name="apertureTable"
221+
coordinates="{ -1.0e-3, 0.0 }"
222+
values="{ 1.0e-3, 1.0e-3 }" />
223+
224+
<TableFunction
225+
name="waterRelativePermeabilityTable"
226+
coordinateFiles="{ phaseVolFraction_water.txt }"
227+
voxelFile="relPerm_water.txt" />
228+
229+
<TableFunction
230+
name="gasRelativePermeabilityTable"
231+
coordinateFiles="{ phaseVolFraction_gas.txt }"
232+
voxelFile="relPerm_gas.txt" />
233+
234+
</Functions>
235+
</Problem>
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
<Problem>
2+
<Included>
3+
<File name="multiphasePoromechanics_FaultModel_well_base.xml" />
4+
</Included>
5+
6+
<Solvers
7+
gravityVector="{ 0.0, 0.0, -9.81 }">
8+
9+
<CompositionalMultiphaseReservoirPoromechanicsConformingFractures
10+
name="reservoirSolver"
11+
targetRegions="{ Region, Fault }"
12+
initialDt="3600"
13+
reservoirAndWellsSolverName="reservoirAndWellsSolver"
14+
solidSolverName="fractureMechSolver"
15+
logLevel="3">
16+
<NonlinearSolverParameters
17+
couplingType="FullyImplicit"
18+
lineSearchAction="None"
19+
maxTimeStepCuts="10"
20+
newtonTol="1e-2"
21+
newtonMaxIter="20"
22+
maxAllowedResidualNorm="1e+15" />
23+
<LinearSolverParameters
24+
directParallel="0" />
25+
</CompositionalMultiphaseReservoirPoromechanicsConformingFractures>
26+
27+
<SolidMechanicsLagrangeContact
28+
name="fractureMechSolver"
29+
stabilizationName="TPFA_stab"
30+
logLevel="1"
31+
targetRegions="{ Region, Fault }"
32+
discretization="FE1" />
33+
34+
<CompositionalMultiphaseReservoir
35+
name="reservoirAndWellsSolver"
36+
flowSolverName="flowSolver"
37+
wellSolverName="wellSolver"
38+
targetRegions="{ Region, Fault, wellInjector }"
39+
logLevel="3" />
40+
41+
<CompositionalMultiphaseFVM
42+
name="flowSolver"
43+
logLevel="1"
44+
useMass="1"
45+
scalingType="Local"
46+
discretization="TPFA"
47+
targetRegions="{ Region, Fault}"
48+
temperature="368.15" />
49+
50+
<CompositionalMultiphaseWell
51+
name="wellSolver"
52+
targetRegions="{ wellInjector }"
53+
writeCSV="1"
54+
useMass="1"
55+
logLevel="2">
56+
<WellControls
57+
name="injectorControls"
58+
type="injector"
59+
referenceElevation="-2250"
60+
targetBHP="10e9"
61+
targetTotalRate="6673.48812509"
62+
useSurfaceConditions="1"
63+
surfacePressure="1.01325e6"
64+
surfaceTemperature="367.15"
65+
control="totalVolRate"
66+
enableCrossflow="0"
67+
injectionStream="{ 1.00, 0.00 }"
68+
injectionTemperature="368.15"
69+
logLevel="2" />
70+
</CompositionalMultiphaseWell>
71+
</Solvers>
72+
73+
<Mesh>
74+
<VTKMesh
75+
name="mesh1"
76+
useGlobalIds="1"
77+
faceBlocks="{ fracture }"
78+
file="verticalFault_ExternalMesh.vtm">
79+
<InternalWell
80+
name="well_injector"
81+
logLevel="1"
82+
wellRegionName="wellInjector"
83+
wellControlsName="injectorControls"
84+
polylineNodeCoords="{ { -600, -600, -2000 },
85+
{ -600, -600, -2500 } }"
86+
polylineSegmentConn="{ { 0, 1 } }"
87+
radius="0.1"
88+
numElementsPerSegment="1">
89+
<Perforation
90+
name="injector_perf1"
91+
distanceFromHead="250" />
92+
</InternalWell>
93+
</VTKMesh>
94+
</Mesh>
95+
96+
<Events
97+
minTime="-1e11"
98+
maxTime="111600">
99+
100+
<!-- Initialization -->
101+
<SoloEvent
102+
name="poroelasticityPreEquilibrationStep"
103+
targetTime="-1e11"
104+
beginTime="-1e11"
105+
target="/Tasks/poroelasticityPreEquilibrationStep"
106+
/>
107+
<!-- Injection -->
108+
<SoloEvent
109+
name="outputPostEquilibrationStep1"
110+
targetTime="0"
111+
targetExactTimestep="1"
112+
target="/Outputs/vtkOutput" />
113+
114+
<PeriodicEvent
115+
name="solverApplication"
116+
endTime="1.0e5"
117+
maxEventDt="1.0e5"
118+
target="/Solvers/reservoirSolver" />
119+
120+
<PeriodicEvent
121+
name="outputs"
122+
beginTime="0.0"
123+
endTime="1.0e5"
124+
timeFrequency="1.0e5"
125+
target="/Outputs/vtkOutput" />
126+
127+
<PeriodicEvent
128+
name="restarts"
129+
beginTime="0.0"
130+
timeFrequency="1.0e5"
131+
endTime="1.0e5"
132+
target="/Outputs/restartOutput" />
133+
</Events>
134+
</Problem>

0 commit comments

Comments
 (0)