11 #include "MooseVariable.h"
12 #include "SubProblem.h"
13 #include "MooseTypes.h"
15 #include "libmesh/quadrature.h"
29 params.addClassDescription(
"This postprocessor estimates a timestep that reduces the increment "
30 "change in a material property below a given threshold.");
32 params.addParam<
bool>(
"use_material_timestep_limit",
34 "if true, the time step is limited by the minimum value of the "
35 "matl_timestep_limit property");
37 params.addParam<MaterialPropertyName>(
"elements_changed_property",
38 "Name of the material property used to limit the time step "
39 "if its value changes by more than "
40 "'elements_changed_threshold' in at least "
41 "'elements_changed' elements");
43 params.addRangeCheckedParam<
int>(
"elements_changed",
44 "elements_changed > 0",
45 "Maximum number of elements within which the property named in "
46 "'elements_changed_property' is allowed to change by more than "
47 "'elements_changed_threshold' before the time step is limited.");
49 params.addRangeCheckedParam<Real>(
"elements_changed_threshold",
50 "elements_changed_threshold' > 0",
51 "Maximum permitted change in the value of "
52 "'elements_changed_property' in 'elements_changed' elements "
53 "before the time step is limited.");
59 : ElementPostprocessor(parameters),
60 _use_material_timestep_limit(getParam<bool>(
"use_material_timestep_limit")),
61 _matl_time_step(_use_material_timestep_limit
62 ? &getMaterialPropertyByName<Real>(
"matl_timestep_limit")
64 _matl_value(std::numeric_limits<Real>::max()),
65 _use_elements_changed(parameters.isParamSetByUser(
"elements_changed_property")),
66 _changed_property(_use_elements_changed
67 ? &getMaterialPropertyByName<Real>(
68 getParam<MaterialPropertyName>(
"elements_changed_property"))
70 _changed_property_old(_use_elements_changed
71 ? &getMaterialPropertyOldByName<Real>(
72 getParam<MaterialPropertyName>(
"elements_changed_property"))
74 _elements_changed(isParamValid(
"elements_changed") ? getParam<int>(
"elements_changed") : 0),
76 _elements_changed_threshold(parameters.isParamSetByUser(
"elements_changed_threshold'")
77 ? getParam<Real>(
"elements_changed_threshold'")
78 : TOLERANCE * TOLERANCE),
82 paramError(
"elements_changed",
"needs to be set when elements_changed_property is defined");
85 mooseError(
"either use_material_timestep_limit needs to be true or elements_changed_property "
101 for (
_qp = 0;
_qp < _qrule->n_points();
_qp++)
107 for (
_qp = 0;
_qp < _qrule->n_points(); ++
_qp)