- 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.
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
- 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
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