Skip to content

Commit 79c0422

Browse files
authored
feat: MGR Strategy for ALM - Face Bubble Functions for Wedge Elements - Multipoint Integration Rules for Tetrahedra and Triangles (#3395)
* Adding linear solving strategy * Adding bubble functions for wedge elements * Fixed face bubble functions for wedge elements * Adding parameters to tune the iterative penalty coefficients * Adding points for quadrature rule * Scaling dispJump by area * Added var to set the number of quadrature points for tetrahedron and triangle * Cleaning up SolidMechanicsALMSimultaneousKernels.hpp * Cleaning up H1_TriangleFace_Lagrange1_Gauss.hpp and H1_Tetrahedron_Lagrange1_Gauss.hpp * Fixing some review comments * Fixing compilation issues * Fixed bug (int-real type casting) * Modified the default input parameters
1 parent 50504b5 commit 79c0422

32 files changed

+863
-189
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-pr3416-9790-5bdb1fa
3+
baseline: integratedTests/baseline_integratedTests-pr3395-9832-31f145e
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 #3395 (2024-01-22)
10+
=====================
11+
Add new fields and change the default input for some tests.
12+
913
PR #3416 (2024-01-21)
1014
=====================
1115
Refactoring of induced seismicity EQ solvers to add coupling.

inputFiles/inducedSeismicity/SCEC_BP6_QD_S_explicit.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
<SurfaceGenerator
6565
name="SurfaceGen"
6666
targetRegions="{ Domain }"
67-
rockToughness="1.0"
67+
initialRockToughness="1.0"
6868
mpiCommOrder="1"
6969
fractureRegion="Fault"/>
7070

@@ -136,4 +136,4 @@
136136
targetExactTimestep="0"
137137
target="/Outputs/timeHistoryOutput"/>
138138
</Events>
139-
</Problem>
139+
</Problem>

inputFiles/inducedSeismicity/SCEC_BP6_QD_S_implicit.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<SurfaceGenerator
6666
name="SurfaceGen"
6767
targetRegions="{ Domain }"
68-
rockToughness="1.0"
68+
initialRockToughness="1.0"
6969
mpiCommOrder="1"
7070
fractureRegion="Fault"/>
7171

@@ -137,4 +137,4 @@
137137
targetExactTimestep="0"
138138
target="/Outputs/timeHistoryOutput"/>
139139
</Events>
140-
</Problem>
140+
</Problem>

inputFiles/inducedSeismicity/SCEC_BP7_QD_base.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<SurfaceGenerator
4646
name="SurfaceGen"
4747
targetRegions="{ Domain }"
48-
rockToughness="1.0"
48+
initialRockToughness="1.0"
4949
mpiCommOrder="1"
5050
fractureRegion="Fault"/>
5151
</Solvers>
@@ -248,4 +248,4 @@
248248
targetExactTimestep="0"
249249
target="/Outputs/restart"/> -->
250250
</Events>
251-
</Problem>
251+
</Problem>

src/coreComponents/constitutive/contact/CoulombFriction.hpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ class CoulombFrictionUpdates : public FrictionBaseUpdates
103103
arraySlice1d< real64 const > const & dispJump,
104104
arraySlice1d< real64 const > const & penalty,
105105
arraySlice1d< real64 const > const & traction,
106-
real64 const faceArea,
107106
bool const symmetric,
108107
bool const fixedLimitTau,
109108
real64 const normalTractionTolerance,
@@ -119,7 +118,6 @@ class CoulombFrictionUpdates : public FrictionBaseUpdates
119118
arraySlice1d< real64 const > const & deltaDispJump,
120119
arraySlice1d< real64 const > const & penalty,
121120
arraySlice1d< real64 const > const & traction,
122-
real64 const faceArea,
123121
arraySlice1d< real64 > const & tractionNew ) const override final;
124122

125123
GEOS_HOST_DEVICE
@@ -363,7 +361,6 @@ inline void CoulombFrictionUpdates::updateTraction( arraySlice1d< real64 const >
363361
arraySlice1d< real64 const > const & dispJump,
364362
arraySlice1d< real64 const > const & penalty,
365363
arraySlice1d< real64 const > const & traction,
366-
real64 const faceArea,
367364
bool const symmetric,
368365
bool const fixedLimitTau,
369366
real64 const normalTractionTolerance,
@@ -380,9 +377,9 @@ inline void CoulombFrictionUpdates::updateTraction( arraySlice1d< real64 const >
380377

381378
// Compute the trial traction
382379
real64 tractionTrial[ 3 ];
383-
tractionTrial[ 0 ] = traction[0] + penalty[0] * dispJump[0] * faceArea;
384-
tractionTrial[ 1 ] = traction[1] + penalty[1] * (dispJump[1] - oldDispJump[1]) * faceArea;
385-
tractionTrial[ 2 ] = traction[2] + penalty[1] * (dispJump[2] - oldDispJump[2]) * faceArea;
380+
tractionTrial[ 0 ] = traction[0] + penalty[0] * dispJump[0];
381+
tractionTrial[ 1 ] = traction[1] + penalty[1] * (dispJump[1] - oldDispJump[1]);
382+
tractionTrial[ 2 ] = traction[2] + penalty[1] * (dispJump[2] - oldDispJump[2]);
386383

387384
// Compute tangential trial traction norm
388385
real64 const tau[2] = { tractionTrial[1],
@@ -502,16 +499,15 @@ inline void CoulombFrictionUpdates::updateTractionOnly( arraySlice1d< real64 con
502499
arraySlice1d< real64 const > const & deltaDispJump,
503500
arraySlice1d< real64 const > const & penalty,
504501
arraySlice1d< real64 const > const & traction,
505-
real64 const faceArea,
506502
arraySlice1d< real64 > const & tractionNew ) const
507503
{
508504

509505
// TODO: Pass this tol as an argument or define a new class member
510506
real64 const zero = LvArray::NumericLimits< real64 >::epsilon;
511507

512-
tractionNew[0] = traction[0] + penalty[0] * dispJump[0] * faceArea;
513-
tractionNew[1] = traction[1] + penalty[1] * deltaDispJump[1] * faceArea;
514-
tractionNew[2] = traction[2] + penalty[1] * deltaDispJump[2] * faceArea;
508+
tractionNew[0] = traction[0] + penalty[0] * dispJump[0];
509+
tractionNew[1] = traction[1] + penalty[1] * deltaDispJump[1];
510+
tractionNew[2] = traction[2] + penalty[1] * deltaDispJump[2];
515511

516512
real64 const tau[2] = { tractionNew[1],
517513
tractionNew[2] };

src/coreComponents/constitutive/contact/FrictionBase.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ class FrictionBaseUpdates
125125
arraySlice1d< real64 const > const & dispJump,
126126
arraySlice1d< real64 const > const & penalty,
127127
arraySlice1d< real64 const > const & traction,
128-
real64 const faceArea,
129128
bool const symmetric,
130129
bool const fixedLimitTau,
131130
real64 const normalTractionTolerance,
@@ -134,7 +133,7 @@ class FrictionBaseUpdates
134133
real64 ( & tractionNew )[3],
135134
integer & fractureState ) const
136135
{
137-
GEOS_UNUSED_VAR( oldDispJump, dispJump, penalty, traction, faceArea, symmetric, fixedLimitTau,
136+
GEOS_UNUSED_VAR( oldDispJump, dispJump, penalty, traction, symmetric, fixedLimitTau,
138137
normalTractionTolerance, tangentialTractionTolerance,
139138
dTraction_dDispJump, tractionNew, fractureState );
140139
}
@@ -153,9 +152,8 @@ class FrictionBaseUpdates
153152
arraySlice1d< real64 const > const & deltaDispJump,
154153
arraySlice1d< real64 const > const & penalty,
155154
arraySlice1d< real64 const > const & traction,
156-
real64 const faceArea,
157155
arraySlice1d< real64 > const & tractionNew ) const
158-
{ GEOS_UNUSED_VAR( dispJump, deltaDispJump, penalty, traction, faceArea, tractionNew ); }
156+
{ GEOS_UNUSED_VAR( dispJump, deltaDispJump, penalty, traction, tractionNew ); }
159157

160158
/**
161159
* @brief Check for the constraint satisfaction

src/coreComponents/finiteElement/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ set( finiteElement_headers
3232
elementFormulations/H1_Hexahedron_Lagrange1_GaussLegendre2.hpp
3333
elementFormulations/H1_Pyramid_Lagrange1_Gauss5.hpp
3434
elementFormulations/H1_QuadrilateralFace_Lagrange1_GaussLegendre2.hpp
35-
elementFormulations/H1_Tetrahedron_Lagrange1_Gauss1.hpp
36-
elementFormulations/H1_TriangleFace_Lagrange1_Gauss1.hpp
35+
elementFormulations/H1_Tetrahedron_Lagrange1_Gauss.hpp
36+
elementFormulations/H1_TriangleFace_Lagrange1_Gauss.hpp
3737
elementFormulations/H1_Wedge_Lagrange1_Gauss6.hpp
3838
elementFormulations/ConformingVirtualElementOrder1.hpp
3939
elementFormulations/ConformingVirtualElementOrder1_impl.hpp

src/coreComponents/finiteElement/FiniteElementDiscretization.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ FiniteElementDiscretization::FiniteElementDiscretization( string const & name, G
4949
setInputFlag( InputFlags::OPTIONAL ).
5050
setApplyDefaultValue( 0 ).
5151
setDescription( "Specifier to indicate whether to force the use of VEM" );
52+
53+
registerWrapper( viewKeyStruct::useHighOrderQuadratureRuleString(), &m_useHighOrderQuadratureRule ).
54+
setInputFlag( InputFlags::OPTIONAL ).
55+
setApplyDefaultValue( 0 ).
56+
setDescription( "Specifier to indicate whether to use a high order quadrature rule" );
5257
}
5358

5459
FiniteElementDiscretization::~FiniteElementDiscretization()
@@ -68,7 +73,15 @@ FiniteElementDiscretization::factory( ElementType const parentElementShape ) con
6873
{
6974
switch( parentElementShape )
7075
{
71-
case ElementType::Triangle: return std::make_unique< H1_TriangleFace_Lagrange1_Gauss1 >();
76+
case ElementType::Triangle:
77+
if( m_useHighOrderQuadratureRule == 1 )
78+
{
79+
return std::make_unique< H1_TriangleFace_Lagrange1_Gauss4 >();
80+
}
81+
else
82+
{
83+
return std::make_unique< H1_TriangleFace_Lagrange1_Gauss1 >();
84+
}
7285
case ElementType::Quadrilateral: return std::make_unique< H1_QuadrilateralFace_Lagrange1_GaussLegendre2 >();
7386
// On polyhedra where FEM are available, we use VEM only if useVirtualElements is set to 1 in
7487
// the input file.
@@ -80,7 +93,14 @@ FiniteElementDiscretization::factory( ElementType const parentElementShape ) con
8093
}
8194
else
8295
{
83-
return std::make_unique< H1_Tetrahedron_Lagrange1_Gauss1 >();
96+
if( m_useHighOrderQuadratureRule == 1 )
97+
{
98+
return std::make_unique< H1_Tetrahedron_Lagrange1_Gauss14 >();
99+
}
100+
else
101+
{
102+
return std::make_unique< H1_Tetrahedron_Lagrange1_Gauss1 >();
103+
}
84104
}
85105
}
86106
case ElementType::Pyramid:

src/coreComponents/finiteElement/FiniteElementDiscretization.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ class FiniteElementDiscretization : public dataRepository::Group
9797
static constexpr char const * orderString() { return "order"; }
9898
static constexpr char const * formulationString() { return "formulation"; }
9999
static constexpr char const * useVemString() { return "useVirtualElements"; }
100+
static constexpr char const * useHighOrderQuadratureRuleString() { return "useHighOrderQuadratureRule"; }
100101
};
101102

102103
/// The order of the finite element basis
@@ -108,6 +109,9 @@ class FiniteElementDiscretization : public dataRepository::Group
108109
/// Optional parameter indicating if the class should use Virtual Elements.
109110
int m_useVem;
110111

112+
/// Optional parameter indicating if the class should use a high order quadrature rule.
113+
int m_useHighOrderQuadratureRule;
114+
111115
void postInputInitialization() override final;
112116

113117
};

0 commit comments

Comments
 (0)