SecantInversionControl

Adjusts a parameter postprocessor each fixed-point iteration using the secant method so that a sub-app output postprocessor matches a target function of time.

Overview

SecantInversionControl helps solve a scalar inverse problem inside a fixed-point (Picard) iteration: at each time step it adjusts a parameter p (held in a Receiver postprocessor and transferred to a sub-application) so that a sub-application output postprocessor matches a target Function of time.

Each fixed-point iteration, after the sub-application has solved with the current p and its output has been transferred back, this control performs a single secant (quasi-Newton) update:

On the first iteration of each fixed-point solve only one (p, y) pair is available, so the update is seeded by perturbing p by initial_delta. The outer iteration count, convergence test, and time-step cutting are owned by the Executioner and the Convergence system (typically a PostprocessorConvergence on the output residual), not by this control.

The optional converged_parameter_postprocessor receives the parameter value that produced the current output; at convergence it holds the inverse-problem solution.

Example Input Syntax

[Controls<<<{"href": "../../syntax/Controls/index.html"}>>>]
  [secant]
    type = SecantInversionControl<<<{"description": "Adjusts a parameter postprocessor each fixed-point iteration using the secant method so that a sub-app output postprocessor matches a target function of time.", "href": "SecantInversionControl.html"}>>>
    output_postprocessor<<<{"description": "Postprocessor holding the sub-app output to compare against the target."}>>> = output
    parameter_postprocessor<<<{"description": "Postprocessor (e.g. a Receiver) holding the parameter value; read and updated in place."}>>> = p
    residual_postprocessor<<<{"description": "Postprocessor (e.g. a Receiver) the control writes with the normalized convergence residual; point the fixed-point Convergence object at it with a tolerance of 1."}>>> = residual
    converged_parameter_postprocessor<<<{"description": "Optional postprocessor to which the parameter value that produced the current output is written each iteration; at convergence this holds the inverse-problem solution."}>>> = param_value
    target_function<<<{"description": "Function f(t) giving the target output value at each time step."}>>> = target_fn
    initial_delta<<<{"description": "Perturbation applied to the parameter on the first iteration of each fixed-point solve to seed the secant method."}>>> = 1e-3
  []
[]

[Convergence<<<{"href": "../../syntax/Convergence/index.html"}>>>]
  [inv_conv]
    type = PostprocessorConvergence<<<{"description": "Compares the absolute value of a post-processor to a tolerance.", "href": "../convergence/PostprocessorConvergence.html"}>>>
    postprocessor<<<{"description": "Post-processor to use for convergence criteria"}>>> = residual
    tolerance<<<{"description": "Tolerance to use for convergence criteria"}>>> = 1.0
    max_iterations<<<{"description": "Maximum number of iterations"}>>> = 50
  []
[]
(modules/optimization/test/tests/controls/inverse_solve/secant.i)

Input Parameters

  • output_postprocessorPostprocessor holding the sub-app output to compare against the target.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Postprocessor holding the sub-app output to compare against the target.

  • parameter_postprocessorPostprocessor (e.g. a Receiver) holding the parameter value; read and updated in place.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Postprocessor (e.g. a Receiver) holding the parameter value; read and updated in place.

  • residual_postprocessorPostprocessor (e.g. a Receiver) the control writes with the normalized convergence residual; point the fixed-point Convergence object at it with a tolerance of 1.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Postprocessor (e.g. a Receiver) the control writes with the normalized convergence residual; point the fixed-point Convergence object at it with a tolerance of 1.

  • target_functionFunction f(t) giving the target output value at each time step.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:Function f(t) giving the target output value at each time step.

Required Parameters

  • absolute_tolerance1e-08Absolute tolerance on |output - target|.

    Default:1e-08

    C++ Type:Real

    Unit:(no unit assumed)

    Range:absolute_tolerance>0

    Controllable:No

    Description:Absolute tolerance on |output - target|.

  • converged_parameter_postprocessorOptional postprocessor to which the parameter value that produced the current output is written each iteration; at convergence this holds the inverse-problem solution.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Optional postprocessor to which the parameter value that produced the current output is written each iteration; at convergence this holds the inverse-problem solution.

  • depends_onThe Controls that this control relies upon (i.e. must execute before this one)

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

    Controllable:No

    Description:The Controls that this control relies upon (i.e. must execute before this one)

  • execute_onTIMESTEP_BEGINThe 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_BEGIN

    C++ Type:ExecFlagEnum

    Options:XFEM_MARK, FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, MULTISYSTEM_FIXED_POINT_ITERATION_END, FINAL, CUSTOM, PRE_MULTIAPP_SETUP

    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.

  • initial_delta0.001Perturbation applied to the parameter on the first iteration of each fixed-point solve to seed the secant method.

    Default:0.001

    C++ Type:Real

    Unit:(no unit assumed)

    Range:initial_delta>0

    Controllable:No

    Description:Perturbation applied to the parameter on the first iteration of each fixed-point solve to seed the secant method.

  • relative_tolerance1e-06Relative tolerance on |output - target|, taken relative to |target|.

    Default:1e-06

    C++ Type:Real

    Unit:(no unit assumed)

    Range:relative_tolerance>0

    Controllable:No

    Description:Relative tolerance on |output - target|, taken relative to |target|.

Optional Parameters

  • 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:No

    Description:Set the enabled status of the MooseObject.

  • implicitTrueDetermines whether this object is calculated using an implicit or explicit form

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Determines whether this object is calculated using an implicit or explicit form

Advanced Parameters

Input Files