Skip to content

Commit cba065b

Browse files
authored
feat: enable Kozeny-Carman Permeability for PorousSolid (#3790)
1 parent 2700326 commit cba065b

13 files changed

+580
-130
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-pr3779-13734-44eed3f
3+
baseline: integratedTests/baseline_integratedTests-pr3790-13899-bb7b286
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 #3790 (2025-09-29) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3790-13899-bb7b286.tar.gz>
10+
=====================
11+
Enable Kozeny-Carman Permeability for PorousSolid.
12+
913
PR #3779 (2025-09-21) <https://storage.googleapis.com/geosx/integratedTests/baseline_integratedTests-pr3779-13734-44eed3f.tar.gz>
1014
=====================
1115
Add new inputs for function input var scaling. Add new Multiscale linear solver parameters XML block.
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<Problem>
2+
<NumericalMethods>
3+
<FiniteElements>
4+
<FiniteElementSpace
5+
name="FE1"
6+
order="1"/>
7+
</FiniteElements>
8+
9+
<FiniteVolume>
10+
<TwoPointFluxApproximation
11+
name="singlePhaseTPFA"/>
12+
</FiniteVolume>
13+
</NumericalMethods>
14+
15+
<ElementRegions>
16+
<CellElementRegion
17+
name="Domain"
18+
cellBlocks="{ * }"
19+
materialList="{ fluid, porousRock }"/>
20+
</ElementRegions>
21+
22+
<Constitutive>
23+
<PorousElasticIsotropicCarmanKozenyPermeability
24+
name="porousRock"
25+
solidModelName="skeleton"
26+
porosityModelName="skeletonPorosity"
27+
permeabilityModelName="skeletonPerm"/>
28+
29+
<ElasticIsotropic
30+
name="skeleton"
31+
defaultDensity="0"
32+
defaultYoungModulus="1.0e4"
33+
defaultPoissonRatio="0.2"/>
34+
35+
<CompressibleSinglePhaseFluid
36+
name="fluid"
37+
defaultDensity="1"
38+
defaultViscosity="1.0"
39+
referencePressure="0.0"
40+
referenceDensity="1"
41+
compressibility="0.0e0"
42+
referenceViscosity="1"
43+
viscosibility="0.0"/>
44+
45+
<BiotPorosity
46+
name="skeletonPorosity"
47+
defaultGrainBulkModulus="1.0e27"
48+
defaultReferencePorosity="0.3"/>
49+
50+
<CarmanKozenyPermeability
51+
name="skeletonPerm"
52+
particleDiameter="0.0002"
53+
sphericity="1.0"/>
54+
</Constitutive>
55+
56+
<FieldSpecifications>
57+
<FieldSpecification
58+
name="initialPressure"
59+
initialCondition="1"
60+
setNames="{ all }"
61+
objectPath="ElementRegions/Domain/cb1"
62+
fieldName="pressure"
63+
scale="0.0"/>
64+
65+
<FieldSpecification
66+
name="xInitialDisplacement"
67+
initialCondition="1"
68+
setNames="{ all }"
69+
objectPath="nodeManager"
70+
fieldName="totalDisplacement"
71+
component="0"
72+
scale="0.0"/>
73+
74+
<FieldSpecification
75+
name="yInitialDisplacement"
76+
initialCondition="1"
77+
setNames="{ all }"
78+
objectPath="nodeManager"
79+
fieldName="totalDisplacement"
80+
component="1"
81+
scale="0.0"/>
82+
83+
<FieldSpecification
84+
name="zInitialDisplacement"
85+
initialCondition="1"
86+
setNames="{ all }"
87+
objectPath="nodeManager"
88+
fieldName="totalDisplacement"
89+
component="2"
90+
scale="0.0"/>
91+
92+
<FieldSpecification
93+
name="xnegconstraint"
94+
objectPath="nodeManager"
95+
fieldName="totalDisplacement"
96+
component="0"
97+
scale="0.0"
98+
setNames="{ xpos }"/>
99+
100+
<FieldSpecification
101+
name="yconstraint"
102+
objectPath="nodeManager"
103+
fieldName="totalDisplacement"
104+
component="1"
105+
scale="0.0"
106+
setNames="{ yneg, ypos }"/>
107+
108+
<FieldSpecification
109+
name="zconstraint"
110+
objectPath="nodeManager"
111+
fieldName="totalDisplacement"
112+
component="2"
113+
scale="0.0"
114+
setNames="{ zneg, zpos }"/>
115+
116+
<Traction
117+
name="xposconstraint"
118+
objectPath="faceManager"
119+
direction="{ 1, 0, 0 }"
120+
scale="1.0e0"
121+
setNames="{ xneg }"
122+
functionName="timeFunction"/>
123+
124+
<FieldSpecification
125+
name="boundaryPressure"
126+
setNames="{ xneg }"
127+
objectPath="faceManager"
128+
fieldName="pressure"
129+
scale="0.0"/>
130+
</FieldSpecifications>
131+
132+
<Functions>
133+
<TableFunction
134+
name="timeFunction"
135+
inputVarNames="{ time }"
136+
coordinates="{ 0.0, 0.1e-09, 1e7 }"
137+
values="{ 0.0, 1.0, 1.0 }"/>
138+
</Functions>
139+
</Problem>
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?xml version="1.0" ?>
2+
3+
<Problem>
4+
<Included>
5+
<File name="./PoroElastic_CarmanKozenyPermeability_base.xml"/>
6+
</Included>
7+
8+
<Solvers
9+
gravityVector="{ 0.0, 0.0, 0.0 }">
10+
<SinglePhasePoromechanics
11+
name="PoroelasticitySolver"
12+
solidSolverName="LinearElasticitySolver"
13+
flowSolverName="SinglePhaseFlowSolver"
14+
logLevel="1"
15+
targetRegions="{ Domain }">
16+
<LinearSolverParameters
17+
directParallel="0"/>
18+
</SinglePhasePoromechanics>
19+
20+
<SolidMechanicsLagrangianFEM
21+
name="LinearElasticitySolver"
22+
timeIntegrationOption="QuasiStatic"
23+
logLevel="1"
24+
discretization="FE1"
25+
targetRegions="{ Domain }"/>
26+
27+
<SinglePhaseFVM
28+
name="SinglePhaseFlowSolver"
29+
logLevel="1"
30+
discretization="singlePhaseTPFA"
31+
targetRegions="{ Domain }"/>
32+
</Solvers>
33+
34+
<Mesh>
35+
<InternalMesh
36+
name="mesh1"
37+
elementTypes="{ C3D8 }"
38+
xCoords="{ 0, 10 }"
39+
yCoords="{ 0, 1 }"
40+
zCoords="{ 0, 1 }"
41+
nx="{ 24 }"
42+
ny="{ 2 }"
43+
nz="{ 1 }"
44+
cellBlockNames="{ cb1 }"/>
45+
</Mesh>
46+
47+
48+
<Events
49+
maxTime="90.0">
50+
<PeriodicEvent
51+
name="outputs"
52+
timeFrequency="10.0"
53+
target="/Outputs/vtkOutput"/>
54+
55+
<PeriodicEvent
56+
name="solverApplication0"
57+
endTime="1.e-5"
58+
forceDt="1.e-5"
59+
target="/Solvers/PoroelasticitySolver"/>
60+
61+
<PeriodicEvent
62+
name="solverApplication1"
63+
beginTime="1.e-5"
64+
endTime="1.0"
65+
forceDt="0.99999"
66+
target="/Solvers/PoroelasticitySolver"/>
67+
68+
<PeriodicEvent
69+
name="solverApplication2"
70+
beginTime="1.0"
71+
endTime="90.0"
72+
forceDt="1.0"
73+
target="/Solvers/PoroelasticitySolver"/>
74+
75+
<PeriodicEvent
76+
name="restarts"
77+
cycleFrequency="50"
78+
target="/Outputs/restartOutput"/>
79+
</Events>
80+
81+
<Outputs>
82+
<VTK
83+
name="vtkOutput"/>
84+
85+
<Restart
86+
name="restartOutput"/>
87+
</Outputs>
88+
</Problem>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?xml version="1.0" ?>
2+
3+
<Problem>
4+
<Included>
5+
<File name="./PoroElastic_CarmanKozenyPermeability_base.xml"/>
6+
</Included>
7+
8+
<Solvers
9+
gravityVector="{ 0.0, 0.0, 0.0 }">
10+
<SinglePhasePoromechanics
11+
name="PoroelasticitySolver"
12+
solidSolverName="LinearElasticitySolver"
13+
flowSolverName="SinglePhaseFlowSolver"
14+
logLevel="1"
15+
targetRegions="{ Domain }">
16+
<NonlinearSolverParameters
17+
newtonMaxIter="2"
18+
newtonTol="1.0e-2"
19+
couplingType="Sequential"
20+
lineSearchAction="None"
21+
subcycling="1"
22+
maxTimeStepCuts="1"
23+
lineSearchMaxCuts="0"/>
24+
<LinearSolverParameters
25+
directParallel="0"/>
26+
</SinglePhasePoromechanics>
27+
28+
<SolidMechanicsLagrangianFEM
29+
name="LinearElasticitySolver"
30+
timeIntegrationOption="QuasiStatic"
31+
logLevel="1"
32+
discretization="FE1"
33+
targetRegions="{ Domain }"/>
34+
35+
<SinglePhaseFVM
36+
name="SinglePhaseFlowSolver"
37+
logLevel="1"
38+
discretization="singlePhaseTPFA"
39+
targetRegions="{ Domain }"/>
40+
</Solvers>
41+
42+
<Mesh>
43+
<InternalMesh
44+
name="mesh1"
45+
elementTypes="{ C3D8 }"
46+
xCoords="{ 0, 10 }"
47+
yCoords="{ 0, 1 }"
48+
zCoords="{ 0, 1 }"
49+
nx="{ 24 }"
50+
ny="{ 2 }"
51+
nz="{ 1 }"
52+
cellBlockNames="{ cb1 }"/>
53+
</Mesh>
54+
55+
56+
<Events
57+
maxTime="90.0">
58+
<PeriodicEvent
59+
name="outputs"
60+
timeFrequency="10.0"
61+
target="/Outputs/vtkOutput"/>
62+
63+
<PeriodicEvent
64+
name="solverApplication0"
65+
endTime="1.e-5"
66+
forceDt="1.e-5"
67+
target="/Solvers/PoroelasticitySolver"/>
68+
69+
<PeriodicEvent
70+
name="solverApplication1"
71+
beginTime="1.e-5"
72+
endTime="1.0"
73+
forceDt="0.99999"
74+
target="/Solvers/PoroelasticitySolver"/>
75+
76+
<PeriodicEvent
77+
name="solverApplication2"
78+
beginTime="1.0"
79+
endTime="90.0"
80+
forceDt="1.0"
81+
target="/Solvers/PoroelasticitySolver"/>
82+
83+
<PeriodicEvent
84+
name="restarts"
85+
cycleFrequency="50"
86+
target="/Outputs/restartOutput"/>
87+
</Events>
88+
89+
<Outputs>
90+
<VTK
91+
name="vtkOutput"/>
92+
93+
<Restart
94+
name="restartOutput"/>
95+
</Outputs>
96+
</Problem>

inputFiles/poromechanics/poroElasticCoupling.ats

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,26 @@ def _build_PoroElasticGravity_cases():
288288
description, restartcheck_params)
289289

290290

291+
def _build_PoroElasticCarmanKozenyFIM_cases():
292+
description = Description(
293+
"Poroelastic problem with CarmanKozeny permeability model (fim) ", "auto",
294+
"Jian Huang", True)
295+
restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7}
296+
return _build_poro_elastic_coupling_case(
297+
"PoroElastic_CarmanKozenyPermeability_fim_smoke.xml", (0, 50),
298+
((1, 1, 1), (2, 2, 1)), description, restartcheck_params)
299+
300+
301+
def _build_PoroElasticCarmanKozenySequential_cases():
302+
description = Description(
303+
"Poroelastic problem with CarmanKozeny permeability model (Sequential) ", "auto",
304+
"Jian Huang", True)
305+
restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7}
306+
return _build_poro_elastic_coupling_case(
307+
"PoroElastic_CarmanKozenyPermeability_sequential_smoke.xml", (0, 50),
308+
((1, 1, 1), (2, 2, 1)), description, restartcheck_params)
309+
310+
291311
def test_poro_elastic_coupling_cases():
292312
deck_instances = [
293313
_build_Terzaghi_cases(),
@@ -308,7 +328,9 @@ def test_poro_elastic_coupling_cases():
308328
_build_PoroStaircaseCO2PeacemanWell_sequential_cases(),
309329
_build_PoroElasticPEBICO2FIM_cases(),
310330
_build_PoroElasticPEBICO2Sequential_cases(),
311-
_build_PoroElasticGravity_cases()
331+
_build_PoroElasticGravity_cases(),
332+
_build_PoroElasticCarmanKozenyFIM_cases(),
333+
_build_PoroElasticCarmanKozenySequential_cases()
312334
]
313335

314336
generate_geos_tests(deck_instances)

0 commit comments

Comments
 (0)