Skip to content

Commit 3c8cc72

Browse files
authored
fix: enable BartonBandis model for contact solver (#3556)
1 parent a721016 commit 3c8cc72

23 files changed

+403
-28
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-pr3568-12439-ac82cb0
3+
baseline: integratedTests/baseline_integratedTests-pr3556-12451-d672aab
44

55
allow_fail:
66
all: ''

BASELINE_NOTES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +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 #3556 (2025-07-31) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3556-12451-d672aab.tar.gz>
10+
=====================
11+
Enable BartonBandis model add new smoke tests.
12+
913
PR #3568 (2025-07-31) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3568-12439-ac82cb0.tar.gz>
1014
=====================
1115
Baselines updated due to set reference state for temperature and add new smoke tests.
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
<?xml version="1.0" ?>
2+
3+
<Problem>
4+
<Geometry>
5+
<Box
6+
name="fracture"
7+
xMin="{ -100.01,-0.01, -0.01 }"
8+
xMax="{ 100.01, 0.01, 1.01 }"/>
9+
</Geometry>
10+
11+
<NumericalMethods>
12+
<FiniteVolume>
13+
<TwoPointFluxApproximation
14+
name="singlePhaseTPFA"/>
15+
<TwoPointFluxApproximation
16+
name="singlePhaseTPFA_stab"/>
17+
</FiniteVolume>
18+
<FiniteElements>
19+
<FiniteElementSpace
20+
name="FE1"
21+
order="1"/>
22+
</FiniteElements>
23+
</NumericalMethods>
24+
25+
<ElementRegions>
26+
<CellElementRegion
27+
name="Domain"
28+
cellBlocks="{ * }"
29+
materialList="{ porousRock, water }"/>
30+
31+
<SurfaceElementRegion
32+
name="Fracture"
33+
faceBlock="FractureSubRegion"
34+
materialList="{ water, fractureFilling, fractureContact, hApertureModel }"
35+
defaultAperture="1e-3"/>
36+
</ElementRegions>
37+
38+
<Constitutive>
39+
<PorousElasticIsotropic
40+
name="porousRock"
41+
solidModelName="rock"
42+
porosityModelName="rockPorosity"
43+
permeabilityModelName="rockPerm"/>
44+
45+
<ElasticIsotropic
46+
name="rock"
47+
defaultDensity="1"
48+
defaultBulkModulus="5555555555.5556"
49+
defaultShearModulus="4166666666.6667"/>
50+
51+
<ConstantPermeability
52+
name="rockPerm"
53+
permeabilityComponents="{ 1.0e-13, 1.0e-13, 1.0e-13 }"/>
54+
55+
<CompressibleSinglePhaseFluid
56+
name="water"
57+
defaultDensity="1000"
58+
defaultViscosity="1.0e-3"
59+
referencePressure="1e6"
60+
compressibility="0.0e0"
61+
referenceViscosity="1e-3"
62+
viscosibility="0.0"/>
63+
64+
<BiotPorosity
65+
name="rockPorosity"
66+
defaultGrainBulkModulus="1.0e27"
67+
defaultReferencePorosity="0.2"/>
68+
69+
<CompressibleSolidParallelPlatesPermeability
70+
name="fractureFilling"
71+
solidModelName="nullSolid"
72+
porosityModelName="fracturePorosity"
73+
permeabilityModelName="fracturePerm"/>
74+
75+
<NullModel
76+
name="nullSolid"/>
77+
78+
<PressurePorosity
79+
name="fracturePorosity"
80+
defaultReferencePorosity="1.00"
81+
referencePressure="0.0"
82+
compressibility="0.0"/>
83+
84+
<ParallelPlatesPermeability
85+
name="fracturePerm"/>
86+
87+
<Coulomb
88+
name="fractureContact"
89+
cohesion="0.0"
90+
frictionCoefficient="0.1"/>
91+
92+
<BartonBandis
93+
name="hApertureModel"
94+
referenceNormalStress="1.0e6"
95+
referenceAperture="1.0e-2"/>
96+
</Constitutive>
97+
98+
<FieldSpecifications>
99+
<FieldSpecification
100+
name="frac"
101+
initialCondition="1"
102+
setNames="{ fracture }"
103+
objectPath="faceManager"
104+
fieldName="ruptureState"
105+
scale="1"/>
106+
107+
<FieldSpecification
108+
name="separableFace"
109+
initialCondition="1"
110+
setNames="{ fracture }"
111+
objectPath="faceManager"
112+
fieldName="isFaceSeparable"
113+
scale="1"/>
114+
115+
<FieldSpecification
116+
name="fracPorosity"
117+
initialCondition="1"
118+
setNames="{ all }"
119+
objectPath="ElementRegions/Fracture"
120+
fieldName="fracturePorosity_porosity"
121+
scale="1.00"/>
122+
123+
<FieldSpecification
124+
name="prescribedFracturePressure"
125+
setNames="{ all }"
126+
objectPath="ElementRegions/Fracture"
127+
fieldName="pressure"
128+
scale="1.0e5"
129+
functionName="injectionSchedule"/>
130+
131+
<FieldSpecification
132+
name="initialStress"
133+
initialCondition="1"
134+
setNames="{ all }"
135+
objectPath="ElementRegions/Domain"
136+
fieldName="rock_stress"
137+
component="1"
138+
scale="-1.0e5"/>
139+
140+
<FieldSpecification
141+
name="xconstraintBottom"
142+
objectPath="nodeManager"
143+
fieldName="totalDisplacement"
144+
component="0"
145+
scale="0.0"
146+
setNames="{ yneg }"/>
147+
148+
<FieldSpecification
149+
name="xconstraintTop"
150+
objectPath="nodeManager"
151+
fieldName="totalDisplacement"
152+
component="0"
153+
scale="0.001"
154+
setNames="{ ypos }"/>
155+
156+
<FieldSpecification
157+
name="yconstraint"
158+
objectPath="nodeManager"
159+
fieldName="totalDisplacement"
160+
component="1"
161+
scale="0.0"
162+
setNames="{ yneg, ypos }"/>
163+
164+
<FieldSpecification
165+
name="zconstraint"
166+
objectPath="nodeManager"
167+
fieldName="totalDisplacement"
168+
component="2"
169+
scale="0.0"
170+
setNames="{ xneg, xpos, yneg, ypos }"/>
171+
172+
<FieldSpecification
173+
name="zeroPressure"
174+
objectPath="faceManager"
175+
fieldName="pressure"
176+
scale="0.0"
177+
setNames="{ yneg, ypos }"/>
178+
179+
</FieldSpecifications>
180+
181+
<Functions>
182+
<TableFunction
183+
name="apertureTable"
184+
coordinates="{ -1.0e-3, 0.0 }"
185+
values="{ 1.0e-6, 1.0e-3 }"/>
186+
187+
<TableFunction
188+
name="injectionSchedule"
189+
inputVarNames="{ time }"
190+
coordinates="{ 0.0, 1000.0 }"
191+
values="{ 0.0, 0.8 }"/>
192+
193+
</Functions>
194+
195+
<Outputs>
196+
<VTK
197+
name="vtkOutput"
198+
plotFileRoot="poroElastic_slippingFault"/>
199+
200+
<Restart
201+
name="restarts"/>
202+
</Outputs>
203+
</Problem>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?xml version="1.0" ?>
2+
3+
<Problem>
4+
<Included>
5+
<File
6+
name="./PoroElastic_conformingFracture_2d_faultSlip_solvers.xml"/>
7+
</Included>
8+
<Included>
9+
<File
10+
name="./PoroElastic_conformingFracture_2d_faultSlip_BartonBandis_base.xml"/>
11+
</Included>
12+
13+
<Mesh>
14+
<InternalMesh
15+
name="mesh1"
16+
elementTypes="{ C3D8 }"
17+
xCoords="{ -100, -20, 20, 100 }"
18+
yCoords="{ -100, -5, 5, 100 }"
19+
zCoords="{ 0, 1 }"
20+
nx="{ 20, 40, 20 }"
21+
ny="{ 10, 10, 10 }"
22+
nz="{ 1 }"
23+
cellBlockNames="{ cb1 }"/>
24+
</Mesh>
25+
26+
<Events
27+
maxTime="1000.0">
28+
<SoloEvent
29+
name="preFracture"
30+
target="/Solvers/SurfaceGen"/>
31+
32+
<SoloEvent
33+
name="preFractureplot"
34+
target="/Outputs/vtkOutput"/>
35+
36+
<PeriodicEvent
37+
name="solverApplications"
38+
forceDt="100.0"
39+
target="/Solvers/poroSolver"/>
40+
41+
<PeriodicEvent
42+
name="outputs"
43+
cycleFrequency="1"
44+
target="/Outputs/vtkOutput"/>
45+
</Events>
46+
47+
</Problem>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?xml version="1.0" ?>
2+
3+
<Problem>
4+
<Included>
5+
<File
6+
name="./PoroElastic_conformingFracture_2d_faultSlip_solvers.xml"/>
7+
</Included>
8+
<Included>
9+
<File
10+
name="./PoroElastic_conformingFracture_2d_faultSlip_BartonBandis_base.xml"/>
11+
</Included>
12+
13+
<Mesh>
14+
<InternalMesh
15+
name="mesh1"
16+
elementTypes="{ C3D8 }"
17+
xCoords="{ -100, -20, 20, 100 }"
18+
yCoords="{ -100, -5, 5, 100 }"
19+
zCoords="{ 0, 1 }"
20+
nx="{ 1, 2, 1 }"
21+
ny="{ 1, 2, 1 }"
22+
nz="{ 1 }"
23+
cellBlockNames="{ cb1 }"/>
24+
</Mesh>
25+
26+
<Events
27+
maxTime="1000.0">
28+
<SoloEvent
29+
name="preFracture"
30+
target="/Solvers/SurfaceGen"/>
31+
32+
<SoloEvent
33+
name="preFractureplot"
34+
target="/Outputs/vtkOutput"/>
35+
36+
<PeriodicEvent
37+
name="solverApplications"
38+
forceDt="1000.0"
39+
target="/Solvers/poroSolver"/>
40+
41+
<PeriodicEvent
42+
name="outputs"
43+
cycleFrequency="1"/>
44+
45+
<PeriodicEvent
46+
name="restarts"
47+
cycleFrequency="1"
48+
target="/Outputs/restarts"/>
49+
</Events>
50+
51+
</Problem>

inputFiles/poromechanicsFractures/poromechanicsFractures.ats

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ decks = [
100100
partitions=((1, 1, 1), (2, 2, 1)),
101101
restart_step=0,
102102
check_step=1,
103+
restartcheck_params=RestartcheckParameters(atol=1e-05, rtol=1e-04)),
104+
TestDeck(
105+
name="PoroElastic_conformingFracture_2d_faultSlip_BartonBandis_smoke",
106+
description='PoroElastic conformingFracture with BartonBandis model',
107+
partitions=((1, 1, 1), (2, 2, 1)),
108+
restart_step=0,
109+
check_step=1,
103110
restartcheck_params=RestartcheckParameters(atol=1e-05, rtol=1e-04))
104111
]
105112

src/coreComponents/constitutive/contact/BartonBandis.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,21 @@ BartonBandis::BartonBandis( string const & name, Group * const parent ):
4141
BartonBandis::~BartonBandis()
4242
{}
4343

44+
void BartonBandis::postInputInitialization()
45+
{
46+
GEOS_THROW_IF( m_referenceNormalStress <= 0.0,
47+
getFullName() << ": The provided reference stress is zero or negative. Value: " << m_referenceNormalStress,
48+
InputError );
49+
50+
}
51+
4452
BartonBandisUpdates BartonBandis::createKernelWrapper() const
4553
{
4654
return KernelWrapper( m_aperture0, m_referenceNormalStress );
4755
}
4856

57+
REGISTER_CATALOG_ENTRY( ConstitutiveBase, BartonBandis, string const &, Group * const )
58+
4959
} /* namespace constitutive */
5060

5161
} /* namespace geos */

0 commit comments

Comments
 (0)