PseudoTimestep

The methods implemented in this postprocessor compute timesteps adaptively using Pseudo Transient Continuation strategies. This allows for steady-state problems to be solved via a time marching approach to reach the final state rapidly. As a reminder, the time marching approach to computing steady states reframes a problem in discrete form , where is the mass matrix and an operator gathering the right-hand side discrete terms. Using implicit Euler, the problem reads

To be consistent with the literature the current implementation has been tested only on implicit Euler.

Overview

This object computes a timestep to accelerate the convergence to steady-state using pseudo-transient continuation. The change in timestep is determined by the steady-state residual behavior from one iteration to another, i.e., small changes in residual indicate larger timesteps are allowed. In contrast, significant changes in the residual indicate a timestep decrease is necessary. Following (Bücker et al., 2009), we recognize and implement three methods.

The user must make a method choice, between SER, EXP and RDM, which are implemented as listed below. All methods require a parameter "alpha", which controls how sensitive the timestep should be with respect to residual changes, and "initial_dt" to provide a first timestep length. If nothing is known about the problem we recommend initial_dt = 1 and alpha = 2, keeping in mind that a high "alpha" corresponds to a higher sensitivity to residual changes. More specific choices for fluid dynamics problems are available in (Bücker et al., 2009) or (Ceze and Fidkowski, 2013). The parameter "alpha" is always larger than 0, noting that for some versions of Pseudo Timestep Continuation methods it can be lower than 1. We refer the user to the literature, or to perform a preliminary study for their specific problem.

Methods supported include:

  • Switched evolution relaxation (SER)

    where is a user chosen parameter. The l2-norm of the steady-state residual at step is , and the residual at iterations before is denoted as . To set a number of previous iterations corresponding to the user can prescribe an integer value for the parameter "iterations_window".

  • Residual Difference Method (RDM)

    This implementation is the RDM method variant as found in (Ceze and Fidkowski, 2013), other variants are available in e.g. (Bücker et al., 2009).

  • Exponential progression (EXP)

    where is a user chosen parameter, is the current iteration step.

As noted also in (Bücker et al., 2009) the EXP method has an infinite growth, so for this method a "max_dt" parameter may be recommended. If no "max_dt" is provided by the user then infinite growth of the timestep is not bounded and the user will be informed by a message at the console. Ideally this method is used in conjunction with a steady state detection, i.e. setting "steady_state_detection" to true and a "steady_state_tolerance".

Example Input File Syntax

[Postprocessors]
  [pseudotimestep]
    type = PseudoTimestep
    method = 'SER'
    initial_dt = 1
    alpha = 1.5
  []
[]
(moose/test/tests/postprocessors/pseudotimestep/fv_burgers_pseudo.i)

Input Parameters

  • alphaThe parameter alpha used in the scaling of the timestep

    C++ Type:double

    Controllable:No

    Description:The parameter alpha used in the scaling of the timestep

  • initial_dtInitial timestep

    C++ Type:double

    Controllable:No

    Description:Initial timestep

  • methodSERThe method used for pseudotimestep timemarching

    Default:SER

    C++ Type:MooseEnum

    Options:SER, RDM, EXP

    Controllable:No

    Description:The method used for pseudotimestep timemarching

Required Parameters

  • iterations_windowFor how many iterations should the residual be tracked (only applies to the SER method)

    C++ Type:unsigned int

    Controllable:No

    Description:For how many iterations should the residual be tracked (only applies to the SER method)

  • max_dtThe largest timestep allowed

    C++ Type:double

    Controllable:No

    Description:The largest timestep allowed

  • 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

    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

    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.

Optional 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

    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>

    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

    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

    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

    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

    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

    Controllable:No

    Description:Forces the UserObject to be executed in PREIC during initial setup

  • outputsVector of output names where you would like to restrict the output of variables(s) associated with this object

    C++ Type:std::vector<OutputName>

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

  • 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

    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.

Advanced Parameters

References

  1. H Martin Bücker, Bernhard Pollul, and Arno Rasch. On CFL evolution strategies for implicit upwind methods in linearized euler equations. International journal for numerical methods in fluids, 59(1):1–18, 2009.[BibTeX]
  2. Marco Ceze and Krzysztof Fidkowski. Pseudo-transient continuation, solution update methods, and CFL strategies for dg discretizations of the rans-sa equations. 21st AIAA Computational Fluid Dynamics Conference, pages, 2013. URL: https://arc.aiaa.org/doi/abs/10.2514/6.2013-2686, arXiv:https://arc.aiaa.org/doi/pdf/10.2514/6.2013-2686, doi:10.2514/6.2013-2686.[BibTeX]