- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- elements_changedMaximum number of elements within which the property named in 'elements_changed_property' is allowed to change by more than 'elements_changed_threshold' before the time step is limited.
C++ Type:int
Unit:(no unit assumed)
Controllable:No
Description:Maximum number of elements within which the property named in 'elements_changed_property' is allowed to change by more than 'elements_changed_threshold' before the time step is limited.
- elements_changed_propertyName of the material property used to limit the time step if its value changes by more than 'elements_changed_threshold' in at least 'elements_changed' elements
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Name of the material property used to limit the time step if its value changes by more than 'elements_changed_threshold' in at least 'elements_changed' elements
- elements_changed_thresholdMaximum permitted change in the value of 'elements_changed_property' in 'elements_changed' elements before the time step is limited.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum permitted change in the value of 'elements_changed_property' in 'elements_changed' elements before the time step is limited.
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Unit:(no unit assumed)
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- maximum_value1.79769e+308Maximum value returned by this postprocessor.
Default:1.79769e+308
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum value returned by this postprocessor.
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
- use_material_timestep_limitTrueif true, the time step is limited by the minimum value of the material_timestep_limit property
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:if true, the time step is limited by the minimum value of the material_timestep_limit property
Material Time Step Postprocessor
This postprocessor estimates a timestep that reduces the increment change in a material property below a given threshold.
Description
The MaterialTimeStepPostprocessor
works in conjunction with material models to compute the appropriate maximum time step allowed by individual material models. For creep or plasticity models, this maximum time step size is governed by an allowable inelastic strain increment, but a variety of methods could be used by individual material models to compute their acceptable time step. For continuum damage models, the maximum time step size is governed by the allowable increment of damage over a single time step.
Creep Strain Example
The maximum time step size is a numerical tool used to ensure the calculation of physically reasonable inelastic strains and to improve convergence of the inelastic material model. As an example, the maximum allowable time step computation for a creep model has the form (1) where is the maximum effective inelastic strain increment (a default value of 1e-4), set by the user, and is the current scalar effective inelastic strain increment.
Mesh-Wide Evaluation
The MaterialTimeStepPostprocessor
collects the time step limitations from all of the quadrature points in the simulation mesh and stores the minimum value. This minimum allowable time step size value is then used by the IterationAdaptiveDT to restrict the time step size based on the limit calculated in the previous time step.
Note that the IterationAdaptiveDT will apply the limiting time step size value from the MaterialTimeStepPostprocessor
only if that value is less than maximum time step size value calculated by the internal IterationAdaptiveDT adaptive time step size algorithm.
The value of the maximum allowable time step as collected by the MaterialTimeStepPostprocessor
is enforced in the next simulation time step.
Minimum Time Step Calculated in Material Models
The calculation of the maximum allowable timestep is dependent on each individual material: both the maximum allowable inelastic strain increment and the method of calculating the current inelastic strain, Eq. (1), are defined separately for each material. Given this material dependent nature, the maximum time step value is calculated separately by the RadialReturnStressUpdate materials at each quadrature point. The MaterialTimeStepPostprocessor
then determines the minimum time step size value from all of the quadrature points in the simulation.
Initially the value of the maximum time step size is set to std::numeric_limits<Real>::max()
. Once the inelastic material model begins to calculate inelastic strain, the value of the allowable time step size varies with the inelastic strain computation.
The limiting time step size is stored within a material property called material_timestep_limit
. This material property can be set up either by the ComputeMultipleInelasticStress model (for creep or plastic strains) or the ComputeDamageStress for continuum damage models.
Minimum Time Step Size Based on Number of Elements in which a Property Changes
The allowable time step size can also be controlled by the total number of elements in which a material property changes over the course of the time step. This can be used in the context of continuum damage to limit the number of elements damaged at a single time step. To do so, the user needs to define a scalar material property with the input parameter elements_changed_property
as well as the maximum acceptable number of elements changed using the elements_changed
input parameter. When these are defined, the MaterialTimeStepPostprocessor
will sweep over the entire mesh and count the number of elements in which the selected property has changed at at least one quadrature point. The limiting time step is then calculated using the ratio between the current number of elements changed and the maximum value .
(2)
The user can define a elements_changed_threshold
to detect a change in property. This can be for example used to count the number of elements in which the damage increases by at least a specific amount.
This method is optional and is only active if both elements_changed_property
and elements_changed
are defined. The MaterialTimeStepPostprocessor
then uses the minimum between the value provided by the material model (see above) or by the number of elements changed. If the input parameter use_material_timestep_limit
is set to false
, only the number of elements changed is used.
Example Input File
[./matl_ts_min]
type = MaterialTimeStepPostprocessor
[../]
(moose/modules/solid_mechanics/test/tests/material_limit_time_step/elas_plas/nafems_nl1_lim.i)The name of the MaterialTimeStepPostprocessor
is passed to the IterationAdaptiveDT
as the argument for the timestep_limiting_postprocessor
parameter
[./TimeStepper]
type = IterationAdaptiveDT
dt = 0.1
time_t = '1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0'
time_dt = '0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1'
optimal_iterations = 30
iteration_window = 9
growth_factor = 2.0
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
[../]
(moose/modules/solid_mechanics/test/tests/material_limit_time_step/elas_plas/nafems_nl1_lim.i)and the max_inelastic_increment
parameter in the inelastic material model(s) must be set to run the time step limit calculation.
[./isoplas]
type = IsotropicPlasticityStressUpdate
yield_stress = 5e6
hardening_constant = 0.0
relative_tolerance = 1e-20
absolute_tolerance = 1e-8
max_inelastic_increment = 0.000001
[../]
(moose/modules/solid_mechanics/test/tests/material_limit_time_step/elas_plas/nafems_nl1_lim.i)Input Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Unit:(no unit assumed)
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- outputsVector of output names where you would like to restrict the output of variables(s) associated with this object
C++ Type:std::vector<OutputName>
Unit:(no unit assumed)
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.