Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ebb96a0

Browse files
committedMar 7, 2025·
allow restart calculations from a p-refined solution #30048
1 parent 5df2bb6 commit ebb96a0

File tree

19 files changed

+256
-95
lines changed

19 files changed

+256
-95
lines changed
 

‎framework/include/base/Adaptivity.h

+2-9
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ class Adaptivity : public ConsoleStreamInterface,
5959
* adaptivity cycles to perform before the simulation starts and steps indicates the
6060
* number of adaptivity cycles to run during a steady (not transient) solve. steps is not used
6161
* for transient or eigen solves.
62+
* p_refinement indicates whether the refinement will be p-refinement or h-refinement.
6263
*/
63-
void init(unsigned int steps, unsigned int initial_steps);
64+
void init(const unsigned int steps, const unsigned int initial_steps, const bool p_refinement);
6465

6566
/**
6667
* Set adaptivity parameter
@@ -129,14 +130,6 @@ class Adaptivity : public ConsoleStreamInterface,
129130
*/
130131
void setRecomputeMarkersFlag(const bool flag) { _recompute_markers_during_cycles = flag; }
131132

132-
/**
133-
* Indicate whether the kind of adaptivity we're doing is p-refinement
134-
* @param doing_p_refinement Whether we're doing p-refinement
135-
* @param disable_p_refinement_for_families Families to disable p-refinement for
136-
*/
137-
void doingPRefinement(bool doing_p_refinement,
138-
const MultiMooseEnum & disable_p_refinement_for_families);
139-
140133
/**
141134
* Adapts the mesh based on the error estimator used
142135
*

‎framework/include/problems/FEProblemBase.h

-4
Original file line numberDiff line numberDiff line change
@@ -2373,10 +2373,6 @@ class FEProblemBase : public SubProblem, public Restartable
23732373
*/
23742374
void clearCurrentJacobianMatrixTags() {}
23752375

2376-
using SubProblem::doingPRefinement;
2377-
virtual void doingPRefinement(bool doing_p_refinement,
2378-
const MultiMooseEnum & disable_p_refinement_for_families) override;
2379-
23802376
virtual void needFV() override { _have_fv = true; }
23812377
virtual bool haveFV() const override { return _have_fv; }
23822378

‎framework/include/problems/SubProblem.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -995,11 +995,9 @@ class SubProblem : public Problem
995995

996996
/**
997997
* Indicate whether the kind of adaptivity we're doing is p-refinement
998-
* @param doing_p_refinement Whether we're doing p-refinement
999998
* @param disable_p_refinement_for_families Families to disable p-refinement for
1000999
*/
1001-
virtual void doingPRefinement(bool doing_p_refinement,
1002-
const MultiMooseEnum & disable_p_refinement_for_families);
1000+
virtual void doingPRefinement(const MultiMooseEnum & disable_p_refinement_for_families);
10031001

10041002
/**
10051003
* @returns whether the kind of adaptivity we're doing is p-refinement

‎framework/src/actions/AdaptivityAction.C

+4-4
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,11 @@ AdaptivityAction::act()
140140
// splitting process. Adaptivity::init must be called for any adaptivity to work, however, so we
141141
// can't just skip it for the useSplit case.
142142
if (_mesh->isSplit())
143-
adapt.init(0, 0);
143+
adapt.init(0, 0, getParam<bool>("switch_h_to_p_refinement"));
144144
else
145-
adapt.init(getParam<unsigned int>("steps"), getParam<unsigned int>("initial_adaptivity"));
145+
adapt.init(getParam<unsigned int>("steps"),
146+
getParam<unsigned int>("initial_adaptivity"),
147+
getParam<bool>("switch_h_to_p_refinement"));
146148

147149
adapt.setErrorEstimator(getParam<MooseEnum>("error_estimator"));
148150

@@ -188,8 +190,6 @@ AdaptivityAction::act()
188190

189191
adapt.setTimeActive(getParam<Real>("start_time"), getParam<Real>("stop_time"));
190192
adapt.setInterval(getParam<unsigned int>("interval"));
191-
if (getParam<bool>("switch_h_to_p_refinement"))
192-
adapt.doingPRefinement(true, getParam<MultiMooseEnum>("disable_p_refinement_for_families"));
193193
}
194194
}
195195

‎framework/src/actions/SetAdaptivityOptionsAction.C

+3-17
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
#include "SetAdaptivityOptionsAction.h"
1111
#include "FEProblem.h"
1212
#include "RelationshipManager.h"
13-
#include "AddVariableAction.h"
1413

1514
#include "libmesh/fe.h"
1615

@@ -45,11 +44,6 @@ commonAdaptivityParams()
4544
params.addParam<bool>(
4645
"recompute_markers_during_cycles", false, "Recompute markers during adaptivity cycles");
4746
params.addParam<bool>("switch_h_to_p_refinement", false, "True to perform p-refinement");
48-
const auto families_enum = AddVariableAction::getNonlinearVariableFamilies();
49-
MultiMooseEnum disable_p_refinement_for_families(families_enum.getRawNames());
50-
params.addParam<MultiMooseEnum>("disable_p_refinement_for_families",
51-
disable_p_refinement_for_families,
52-
"What families we should disable p-refinement for.");
5347
return params;
5448
}
5549
}
@@ -148,22 +142,14 @@ SetAdaptivityOptionsAction::act()
148142

149143
adapt.setMaxHLevel(getParam<unsigned int>("max_h_level"));
150144

151-
adapt.init(getParam<unsigned int>("steps"), getParam<unsigned int>("initial_steps"));
145+
adapt.init(getParam<unsigned int>("steps"),
146+
getParam<unsigned int>("initial_steps"),
147+
getParam<bool>("switch_h_to_p_refinement"));
152148
adapt.setUseNewSystem();
153149

154150
adapt.setTimeActive(getParam<Real>("start_time"), getParam<Real>("stop_time"));
155151
adapt.setInterval(getParam<unsigned int>("interval"));
156152

157153
adapt.setRecomputeMarkersFlag(getParam<bool>("recompute_markers_during_cycles"));
158-
if (getParam<bool>("switch_h_to_p_refinement"))
159-
{
160-
auto disable_p_refinement_for_families =
161-
getParam<MultiMooseEnum>("disable_p_refinement_for_families");
162-
if (!isParamSetByUser("disable_p_refinement_for_families"))
163-
// If the user has not set this parameter we will set a logicial default
164-
disable_p_refinement_for_families =
165-
"LAGRANGE NEDELEC_ONE RAVIART_THOMAS LAGRANGE_VEC CLOUGH BERNSTEIN RATIONAL_BERNSTEIN";
166-
adapt.doingPRefinement(true, disable_p_refinement_for_families);
167-
}
168154
}
169155
}

‎framework/src/actions/SetupMeshCompleteAction.C

+27
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "Adaptivity.h"
1414
#include "MooseApp.h"
1515
#include "FEProblemBase.h"
16+
#include "AddVariableAction.h"
17+
#include "DisplacedProblem.h"
1618

1719
registerMooseAction("MooseApp", SetupMeshCompleteAction, "prepare_mesh");
1820

@@ -24,11 +26,18 @@ registerMooseAction("MooseApp", SetupMeshCompleteAction, "uniform_refine_mesh");
2426

2527
registerMooseAction("MooseApp", SetupMeshCompleteAction, "setup_mesh_complete");
2628

29+
registerMooseAction("MooseApp", SetupMeshCompleteAction, "ready_to_init");
30+
2731
InputParameters
2832
SetupMeshCompleteAction::validParams()
2933
{
3034
InputParameters params = Action::validParams();
3135
params.addClassDescription("Perform operations on the mesh in preparation for a simulation.");
36+
const auto families_enum = AddVariableAction::getNonlinearVariableFamilies();
37+
MultiMooseEnum disable_p_refinement_for_families(families_enum.getRawNames());
38+
params.addParam<MultiMooseEnum>("disable_p_refinement_for_families",
39+
disable_p_refinement_for_families,
40+
"What families we should disable p-refinement for.");
3241
return params;
3342
}
3443

@@ -111,6 +120,24 @@ SetupMeshCompleteAction::act()
111120
_displaced_mesh->deleteRemoteElements();
112121
}
113122
}
123+
else if (_current_task == "ready_to_init")
124+
{
125+
if (_mesh->doingPRefinement())
126+
{
127+
auto disable_p_refinement_for_families =
128+
getParam<MultiMooseEnum>("disable_p_refinement_for_families");
129+
if (!isParamSetByUser("disable_p_refinement_for_families"))
130+
// If the user has not set this parameter we will set a logicial default
131+
disable_p_refinement_for_families =
132+
"LAGRANGE NEDELEC_ONE RAVIART_THOMAS LAGRANGE_VEC CLOUGH BERNSTEIN RATIONAL_BERNSTEIN";
133+
_problem->doingPRefinement(disable_p_refinement_for_families);
134+
135+
if (_displaced_mesh)
136+
_displaced_mesh->doingPRefinement(true);
137+
if (_problem->haveDisplaced())
138+
_problem->getDisplacedProblem()->doingPRefinement(disable_p_refinement_for_families);
139+
}
140+
}
114141
else
115142
{
116143
// Prepare the mesh (may occur multiple times)

‎framework/src/base/Adaptivity.C

+7-9
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ Adaptivity::Adaptivity(FEProblemBase & fe_problem)
5656
Adaptivity::~Adaptivity() {}
5757

5858
void
59-
Adaptivity::init(unsigned int steps, unsigned int initial_steps)
59+
Adaptivity::init(const unsigned int steps,
60+
const unsigned int initial_steps,
61+
const bool p_refinement)
6062
{
6163
// Get the pointer to the DisplacedProblem, this cannot be done at construction because
6264
// DisplacedProblem
@@ -71,8 +73,12 @@ Adaptivity::init(unsigned int steps, unsigned int initial_steps)
7173

7274
_initial_steps = initial_steps;
7375
_steps = steps;
76+
_p_refinement_flag = p_refinement;
7477
_mesh_refinement_on = true;
7578

79+
if (_p_refinement_flag)
80+
_mesh.doingPRefinement(true);
81+
7682
_mesh_refinement->set_periodic_boundaries_ptr(
7783
_fe_problem.getNonlinearSystemBase(/*nl_sys=*/0).dofMap().get_periodic_boundaries());
7884

@@ -388,12 +394,4 @@ Adaptivity::isAdaptivityDue()
388394
return _mesh_refinement_on && (_start_time <= _t && _t < _stop_time) && _step % _interval == 0;
389395
}
390396

391-
void
392-
Adaptivity::doingPRefinement(const bool doing_p_refinement,
393-
const MultiMooseEnum & disable_p_refinement_for_families)
394-
{
395-
_p_refinement_flag = doing_p_refinement;
396-
_fe_problem.doingPRefinement(doing_p_refinement, disable_p_refinement_for_families);
397-
}
398-
399397
#endif // LIBMESH_ENABLE_AMR

‎framework/src/mesh/MooseMesh.C

+6
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,12 @@ MooseMesh::update()
614614
cacheInfo();
615615
buildElemIDInfo();
616616

617+
// this will make moose mesh aware of p-refinement added by mesh generators including
618+
// a file mesh generator loading a restart checkpoint file
619+
for (const auto & elem : *getActiveLocalElementRange())
620+
if (elem->p_level() > 0)
621+
_doing_p_refinement = true;
622+
617623
_finite_volume_info_dirty = true;
618624
}
619625

‎framework/src/problems/FEProblemBase.C

-9
Original file line numberDiff line numberDiff line change
@@ -9051,15 +9051,6 @@ FEProblemBase::reinitMortarUserObjects(const BoundaryID primary_boundary_id,
90519051
}
90529052
}
90539053

9054-
void
9055-
FEProblemBase::doingPRefinement(const bool doing_p_refinement,
9056-
const MultiMooseEnum & disable_p_refinement_for_families)
9057-
{
9058-
SubProblem::doingPRefinement(doing_p_refinement, disable_p_refinement_for_families);
9059-
if (_displaced_problem)
9060-
_displaced_problem->doingPRefinement(doing_p_refinement, disable_p_refinement_for_families);
9061-
}
9062-
90639054
void
90649055
FEProblemBase::setVerboseProblem(bool verbose)
90659056
{

‎framework/src/problems/SubProblem.C

+21-27
Original file line numberDiff line numberDiff line change
@@ -1321,38 +1321,32 @@ SubProblem::addCachedJacobian(const THREAD_ID tid)
13211321
}
13221322

13231323
void
1324-
SubProblem::doingPRefinement(const bool doing_p_refinement,
1325-
const MultiMooseEnum & disable_p_refinement_for_families_enum)
1324+
SubProblem::doingPRefinement(const MultiMooseEnum & disable_p_refinement_for_families_enum)
13261325
{
1327-
mesh().doingPRefinement(doing_p_refinement);
1326+
std::vector<FEFamily> disable_families(disable_p_refinement_for_families_enum.size());
1327+
for (const auto i : index_range(disable_families))
1328+
disable_families[i] =
1329+
Utility::string_to_enum<FEFamily>(disable_p_refinement_for_families_enum[i]);
13281330

1329-
if (doing_p_refinement)
1330-
{
1331-
std::vector<FEFamily> disable_families(disable_p_refinement_for_families_enum.size());
1332-
for (const auto i : index_range(disable_families))
1333-
disable_families[i] =
1334-
Utility::string_to_enum<FEFamily>(disable_p_refinement_for_families_enum[i]);
1335-
1336-
for (const auto tid : make_range(libMesh::n_threads()))
1337-
for (const auto s : make_range(numNonlinearSystems()))
1338-
assembly(tid, s).havePRefinement(disable_families);
1339-
1340-
auto & eq = es();
1341-
for (const auto family : disable_families)
1342-
for (const auto i : make_range(eq.n_systems()))
1331+
for (const auto tid : make_range(libMesh::n_threads()))
1332+
for (const auto s : make_range(numNonlinearSystems()))
1333+
assembly(tid, s).havePRefinement(disable_families);
1334+
1335+
auto & eq = es();
1336+
for (const auto family : disable_families)
1337+
for (const auto i : make_range(eq.n_systems()))
1338+
{
1339+
auto & system = eq.get_system(i);
1340+
auto & dof_map = system.get_dof_map();
1341+
for (const auto vg : make_range(system.n_variable_groups()))
13431342
{
1344-
auto & system = eq.get_system(i);
1345-
auto & dof_map = system.get_dof_map();
1346-
for (const auto vg : make_range(system.n_variable_groups()))
1347-
{
1348-
const auto & var_group = system.variable_group(vg);
1349-
if (var_group.type().family == family)
1350-
dof_map.should_p_refine(vg, false);
1351-
}
1343+
const auto & var_group = system.variable_group(vg);
1344+
if (var_group.type().family == family)
1345+
dof_map.should_p_refine(vg, false);
13521346
}
1347+
}
13531348

1354-
_have_p_refinement = true;
1355-
}
1349+
_have_p_refinement = true;
13561350
}
13571351

13581352
bool

‎modules/level_set/src/transfers/LevelSetMeshRefinementTransfer.C

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ LevelSetMeshRefinementTransfer::initialSetup()
5555
Adaptivity & adapt = to_problem.adaptivity();
5656
adapt.setMarkerVariableName(to_var.name());
5757
adapt.setCyclesPerStep(from_problem.adaptivity().getCyclesPerStep());
58-
adapt.init(1, 0);
58+
adapt.init(1, 0, false);
5959
adapt.setUseNewSystem();
6060
adapt.setMaxHLevel(from_problem.adaptivity().getMaxHLevel());
6161
adapt.setAdaptivityOn(false);

‎test/tests/adaptivity/dont-p-refine/test.i

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
subdomain_id = '0 0
1010
0 1'
1111
[]
12+
disable_p_refinement_for_families = 'lagrange'
1213
[]
1314

1415
[Adaptivity]
1516
switch_h_to_p_refinement = true
1617
initial_marker = uniform
1718
initial_steps = 1
18-
disable_p_refinement_for_families = 'lagrange'
1919
[Markers/uniform]
2020
type = UniformMarker
2121
mark = REFINE

‎test/tests/adaptivity/dont-p-refine/tests

+9-9
Original file line numberDiff line numberDiff line change
@@ -22,71 +22,71 @@
2222
input = test.i
2323
csvdiff = test_out.csv
2424
prereq = 'disable_p_refinement/lagrange_second_order_mesh'
25-
cli_args = 'Adaptivity/disable_p_refinement_for_families="hermite" AuxVariables/test/family=HERMITE AuxVariables/test/order=THIRD'
25+
cli_args = 'Mesh/disable_p_refinement_for_families="hermite" AuxVariables/test/family=HERMITE AuxVariables/test/order=THIRD'
2626
detail = 'Hermite variables on a first order mesh,'
2727
[]
2828
[hermite_second_order_mesh]
2929
type = CSVDiff
3030
input = test.i
3131
csvdiff = test_out.csv
3232
prereq = 'disable_p_refinement/hermite_first_order_mesh'
33-
cli_args = 'Adaptivity/disable_p_refinement_for_families="hermite" AuxVariables/test/family=HERMITE AuxVariables/test/order=THIRD Mesh/second_order=true'
33+
cli_args = 'Mesh/disable_p_refinement_for_families="hermite" AuxVariables/test/family=HERMITE AuxVariables/test/order=THIRD Mesh/second_order=true'
3434
detail = 'Hermite variables on a second order mesh,'
3535
[]
3636
[hierarchic_first_order_mesh]
3737
type = CSVDiff
3838
input = test.i
3939
csvdiff = test_out.csv
4040
prereq = 'disable_p_refinement/hermite_second_order_mesh'
41-
cli_args = 'Adaptivity/disable_p_refinement_for_families="hierarchic" AuxVariables/test/family=HIERARCHIC'
41+
cli_args = 'Mesh/disable_p_refinement_for_families="hierarchic" AuxVariables/test/family=HIERARCHIC'
4242
detail = 'Hierarchic variables on a first order mesh,'
4343
[]
4444
[hierarchic_second_order_mesh]
4545
type = CSVDiff
4646
input = test.i
4747
csvdiff = test_out.csv
4848
prereq = 'disable_p_refinement/hierarchic_first_order_mesh'
49-
cli_args = 'Adaptivity/disable_p_refinement_for_families="hierarchic" AuxVariables/test/family=HIERARCHIC Mesh/second_order=true'
49+
cli_args = 'Mesh/disable_p_refinement_for_families="hierarchic" AuxVariables/test/family=HIERARCHIC Mesh/second_order=true'
5050
detail = 'Hierarchic variables on a second order mesh,'
5151
[]
5252
[lagrange_vec_first_order_mesh]
5353
type = CSVDiff
5454
input = test.i
5555
csvdiff = test_out.csv
5656
prereq = 'disable_p_refinement/hierarchic_second_order_mesh'
57-
cli_args = 'Adaptivity/disable_p_refinement_for_families="lagrange_vec" AuxVariables/test/family=LAGRANGE_VEC'
57+
cli_args = 'Mesh/disable_p_refinement_for_families="lagrange_vec" AuxVariables/test/family=LAGRANGE_VEC'
5858
detail = 'Lagrange vector variables on a first order mesh,'
5959
[]
6060
[lagrange_vec_second_order_mesh]
6161
type = CSVDiff
6262
input = test.i
6363
csvdiff = test_out.csv
6464
prereq = 'disable_p_refinement/lagrange_vec_first_order_mesh'
65-
cli_args = 'Adaptivity/disable_p_refinement_for_families="lagrange_vec" AuxVariables/test/family=LAGRANGE_VEC Mesh/second_order=true'
65+
cli_args = 'Mesh/disable_p_refinement_for_families="lagrange_vec" AuxVariables/test/family=LAGRANGE_VEC Mesh/second_order=true'
6666
detail = 'Lagrange vector variables on a second order mesh,'
6767
[]
6868
[monomial_vec_first_order_mesh]
6969
type = CSVDiff
7070
input = test.i
7171
csvdiff = test_out.csv
7272
prereq = 'disable_p_refinement/lagrange_vec_second_order_mesh'
73-
cli_args = 'Adaptivity/disable_p_refinement_for_families="monomial_vec" AuxVariables/test/family=MONOMIAL_VEC'
73+
cli_args = 'Mesh/disable_p_refinement_for_families="monomial_vec" AuxVariables/test/family=MONOMIAL_VEC'
7474
detail = 'Monomial vector variables on a first order mesh,'
7575
[]
7676
[monomial_vec_second_order_mesh]
7777
type = CSVDiff
7878
input = test.i
7979
csvdiff = test_out.csv
8080
prereq = 'disable_p_refinement/monomial_vec_first_order_mesh'
81-
cli_args = 'Adaptivity/disable_p_refinement_for_families="monomial_vec" AuxVariables/test/family=MONOMIAL_VEC Mesh/second_order=true'
81+
cli_args = 'Mesh/disable_p_refinement_for_families="monomial_vec" AuxVariables/test/family=MONOMIAL_VEC Mesh/second_order=true'
8282
detail = 'Monomial vector variables on a second order mesh,'
8383
[]
8484
[nedelec_one_second_order_mesh]
8585
type = CSVDiff
8686
input = test.i
8787
csvdiff = test_out.csv
8888
prereq = 'disable_p_refinement/monomial_vec_second_order_mesh'
89-
cli_args = 'Adaptivity/disable_p_refinement_for_families="nedelec_one" AuxVariables/test/family=NEDELEC_ONE Mesh/second_order=true'
89+
cli_args = 'Mesh/disable_p_refinement_for_families="nedelec_one" AuxVariables/test/family=NEDELEC_ONE Mesh/second_order=true'
9090
detail = 'Nedelec vector variables on a second order mesh,'
9191
[]
9292
[]

‎test/tests/materials/stateful_prop/tests

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
[spatially_const_p]
128128
type = 'Exodiff'
129129
input = 'stateful_prop_adaptivity_test.i'
130-
cli_args = 'Adaptivity/switch_h_to_p_refinement=true Adaptivity/disable_p_refinement_for_families="lagrange" Outputs/file_base=stateful_prop_adaptivity_test_p'
130+
cli_args = 'Adaptivity/switch_h_to_p_refinement=true Mesh/disable_p_refinement_for_families="lagrange" Outputs/file_base=stateful_prop_adaptivity_test_p'
131131
exodiff = 'stateful_prop_adaptivity_test_p.e-s004'
132132
detail = 'when properties are spatially constant and we are performing p-refinement, and'
133133
[]
@@ -136,7 +136,7 @@
136136
type = 'Exodiff'
137137
input = 'spatial_adaptivity_test.i'
138138
exodiff = 'spatial_adaptivity_test_p.e-s004'
139-
cli_args = 'Adaptivity/switch_h_to_p_refinement=true Adaptivity/disable_p_refinement_for_families="lagrange" Outputs/file_base=spatial_adaptivity_test_p'
139+
cli_args = 'Adaptivity/switch_h_to_p_refinement=true Mesh/disable_p_refinement_for_families="lagrange" Outputs/file_base=spatial_adaptivity_test_p'
140140
detail = 'when properties vary spatially and we are performing p-refinement.'
141141
[]
142142

Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
[Mesh]
2+
[cmg]
3+
type = FileMeshGenerator
4+
file = steady_out_cp/LATEST
5+
[]
6+
[]
7+
8+
[Problem]
9+
restart_file_base = steady_out_cp/LATEST
10+
[]
11+
12+
[Variables]
13+
[u]
14+
family = MONOMIAL
15+
order = FIRST
16+
[]
17+
[]
18+
19+
[AuxVariables]
20+
[test][]
21+
[]
22+
23+
[Kernels]
24+
[diff]
25+
type = Diffusion
26+
variable = u
27+
[]
28+
[src]
29+
type = BodyForce
30+
variable = u
31+
value = 1
32+
[]
33+
[]
34+
35+
[DGKernels]
36+
[dg_diff]
37+
type = DGDiffusion
38+
variable = u
39+
epsilon = -1
40+
sigma = 6
41+
[]
42+
[]
43+
44+
[BCs]
45+
[left_u]
46+
type = DGFunctionDiffusionDirichletBC
47+
variable = u
48+
boundary = '0 1 2 3'
49+
function = 0
50+
epsilon = -1
51+
sigma = 6
52+
[]
53+
[]
54+
55+
[Postprocessors]
56+
[avg]
57+
type = ElementAverageValue
58+
variable = u
59+
[]
60+
[]
61+
62+
[Executioner]
63+
type = Steady
64+
nl_abs_tol = 1e-10
65+
[]
66+
67+
[Outputs]
68+
exodus = true
69+
[]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
[Mesh]
2+
[cmg]
3+
type = CartesianMeshGenerator
4+
dim = 2
5+
dx = '1 1'
6+
dy = '1 1'
7+
ix = '2 2'
8+
iy = '2 2'
9+
subdomain_id = '0 0
10+
0 1'
11+
[]
12+
[]
13+
14+
[Adaptivity]
15+
switch_h_to_p_refinement = true
16+
initial_marker = uniform
17+
initial_steps = 1
18+
[Markers/uniform]
19+
type = UniformMarker
20+
mark = REFINE
21+
block = 1
22+
[]
23+
[]
24+
25+
[Variables]
26+
[u]
27+
family = MONOMIAL
28+
order = FIRST
29+
[]
30+
[]
31+
32+
[AuxVariables]
33+
[test][]
34+
[]
35+
36+
[Kernels]
37+
[diff]
38+
type = Diffusion
39+
variable = u
40+
[]
41+
[src]
42+
type = BodyForce
43+
variable = u
44+
value = 1
45+
[]
46+
[]
47+
48+
[DGKernels]
49+
[dg_diff]
50+
type = DGDiffusion
51+
variable = u
52+
epsilon = -1
53+
sigma = 6
54+
[]
55+
[]
56+
57+
[BCs]
58+
[left_u]
59+
type = DGFunctionDiffusionDirichletBC
60+
variable = u
61+
boundary = '0 1 2 3'
62+
function = 0
63+
epsilon = -1
64+
sigma = 6
65+
[]
66+
[]
67+
68+
[Postprocessors]
69+
[avg]
70+
type = ElementAverageValue
71+
variable = u
72+
[]
73+
[]
74+
75+
[Executioner]
76+
type = Steady
77+
nl_abs_tol = 1e-10
78+
[]
79+
80+
[Outputs]
81+
checkpoint = true
82+
exodus = true
83+
print_mesh_changed_info = true
84+
[]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[Tests]
2+
design = "Restartable.md DataIO.md"
3+
[steady_solve]
4+
type = 'Exodiff'
5+
input = 'steady.i'
6+
exodiff = 'steady_out.e'
7+
requirement = 'The system shall support running and saving off a steady solution with p-refinement for using in a restart.'
8+
issues = '#30048'
9+
[]
10+
11+
[steady_from_steady_restart]
12+
type = 'Exodiff'
13+
input = 'restarted_steady.i'
14+
exodiff = 'restarted_steady_out.e'
15+
prereq = 'steady_solve'
16+
requirement = 'The system shall support restarting a steady state solve from a steady solution with p-refinement'
17+
issues = '#30048'
18+
[]
19+
[]

0 commit comments

Comments
 (0)
Please sign in to comment.