ParsedConvergence
This Convergence allows the user to specify arbitrary expressions for convergence and divergence criteria. These expressions ("convergence_expression" and "divergence_expression") may contain any of the following:
The expressions are parsed using the Function Parser syntax. The full library of mathematical operators is valid in the parsed expression, but for convenience, we list some of the logical and comparison operators here:
| Syntax | Description |
|---|
() | Parentheses for order of operations |
!A | NOT A |
A & B | A AND B |
A I B | A OR B |
A = B | A EQUALS B |
A != B | A DOES NOT EQUAL B |
A >= B | A GREATER THAN OR EQUAL TO B |
The expressions must evaluate to either 1 or 0, which correspond to true or false, respectively; if the expression returns another value, an error results. Note the following rules for the Convergence object values:
For the convergence expression, Convergence objects evaluate to true if they are CONVERGED and false otherwise (ITERATING or DIVERGED).
For the divergence expression, Convergence objects evaluate to true if they are DIVERGED and false otherwise (ITERATING or CONVERGED).
The divergence expression is optional. If omitted, divergence occurs if any of the supplied Convergence objects return DIVERGED, e.g.,
divergence_expression = 'conv1 | conv2 | conv3'
if "symbol_values" contains conv1, conv2, and conv3.
convergence_expression
C++ Type:FunctionExpression
Unit:(no unit assumed)
Controllable:No
Description:Expression to parse for convergence
divergence_expression
C++ Type:FunctionExpression
Unit:(no unit assumed)
Controllable:No
Description:Expression to parse for divergence
symbol_values
C++ Type:std::vector<std::string>
Controllable:No
Description:Values (Convergence names, Postprocessor names, Function names, and constants) corresponding to each entry in 'symbol_names'
(test/tests/convergence/reference_residual_convergence/custom_residual.i)
coef=1
[Mesh]
type = GeneratedMesh
dim = 1
nx = 2
[]
[Problem]
# type = ReferenceResidualProblem
extra_tag_vectors = 'u_ref u_res v_ref v_res'
[]
[Variables]
[u][]
[v][]
[]
[Kernels]
[u_diff]
type = CoefDiffusion
variable = u
coef = 1
extra_vector_tags = 'u_res'
[]
[u_rxn]
type = PReaction
variable = u
coefficient = 1
power = 2
extra_vector_tags = 'u_res'
[]
[u_f]
type = BodyForce
variable = u
value = 1
extra_vector_tags = 'u_res'
[]
[v_diff]
type = Diffusion
variable = v
extra_vector_tags = 'v_res'
[]
[v_rxn]
type = PReaction
variable = v
coefficient = 1
power = 2
extra_vector_tags = 'v_res'
[]
[v_f]
type = BodyForce
variable = v
value = 1
extra_vector_tags = 'v_res'
[]
[]
[BCs]
[u]
type = RobinBC
boundary = 'left right'
coef = ${coef}
variable = u
extra_vector_tags = 'u_ref u_res'
[]
[v]
type = RobinBC
boundary = 'left right'
coef = 1
variable = v
extra_vector_tags = 'v_ref v_res'
[]
[]
[Convergence]
[u_conv]
type = ReferenceResidualConvergence
reference_vector = 'u_ref'
residual_vector = 'u_res'
[]
[v_conv]
type = ReferenceResidualConvergence
reference_vector = 'v_ref'
residual_vector = 'v_res'
[]
[conv]
type = ParsedConvergence
convergence_expression = 'u_conv & v_conv'
symbol_names = 'u_conv v_conv'
symbol_values = 'u_conv v_conv'
[]
[]
[Executioner]
type = Steady
nonlinear_convergence = conv
[]
[Outputs]
exodus = true
[]
(test/tests/convergence/reference_residual_convergence/formatting.i)
scaling = false
[Mesh]
type = GeneratedMesh
dim = 1
nx = 2
[]
[GlobalParams]
absolute_value_vector_tags = 'ref'
[]
[Problem]
extra_tag_vectors = 'ref'
[]
[Variables]
[a]
[]
[b]
[]
[c]
[]
[d]
[]
[verylongvariable_e]
[]
[variable_f]
[]
[g]
[]
[]
[Kernels]
[a_force]
type = BodyForce
variable = a
value = 1e2
[]
[b_force]
type = BodyForce
variable = b
value = 1e3
[]
[c_force]
type = BodyForce
variable = c
value = 1e4
[]
[d_force]
type = BodyForce
variable = d
value = 1e5
[]
[e_force]
type = BodyForce
variable = verylongvariable_e
value = 1e6
[]
[f_force]
type = BodyForce
variable = variable_f
value = 1e7
[]
[g_force]
type = BodyForce
variable = g
value = 1e8
[]
[a_dt]
type = TimeDerivative
variable = a
[]
[b_dt]
type = TimeDerivative
variable = b
[]
[c_dt]
type = TimeDerivative
variable = c
[]
[d_dt]
type = TimeDerivative
variable = d
[]
[e_dt]
type = TimeDerivative
variable = verylongvariable_e
[]
[f_dt]
type = TimeDerivative
variable = variable_f
[]
[g_dt]
type = TimeDerivative
variable = g
[]
[]
[BCs]
[a_bc]
type = DirichletBC
variable = a
boundary = 'left right'
value = 1
[]
[b_bc]
type = DirichletBC
variable = b
boundary = 'left right'
value = 1
[]
[c_bc]
type = DirichletBC
variable = c
boundary = 'left right'
value = 1
[]
[d_bc]
type = DirichletBC
variable = d
boundary = 'left right'
value = 1
[]
[e_bc]
type = DirichletBC
variable = verylongvariable_e
boundary = 'left right'
value = 1
[]
[f_bc]
type = DirichletBC
variable = variable_f
boundary = 'left right'
value = 1
[]
[g_bc]
type = DirichletBC
variable = g
boundary = 'left right'
value = 1
[]
[]
[Convergence]
[conv_one]
type = ReferenceResidualConvergence
reference_vector = 'ref'
group_variables = 'a b variable_f; c d'
converge_on = 'a b variable_f c d g'
nl_rel_tol = 1e-9
unscale_the_residual = ${scaling}
[]
[conv_two]
type = ReferenceResidualConvergence
reference_vector = 'ref'
converge_on = 'verylongvariable_e g'
nl_rel_tol = 1e-9
unscale_the_residual = ${scaling}
normalization_type = LOCAL_L2
[]
[combined]
type = ParsedConvergence
convergence_expression = 'conv_one & conv_two'
symbol_names = 'conv_one conv_two'
symbol_values = 'conv_one conv_two'
[]
[]
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
line_search = none
nonlinear_convergence = combined
verbose = true
automatic_scaling = ${scaling}
[]
[Outputs]
exodus = true
[]
[Postprocessors]
[a_avg]
type = ElementAverageValue
variable = a
[]
[b_avg]
type = ElementAverageValue
variable = b
[]
[c_avg]
type = ElementAverageValue
variable = c
[]
[d_avg]
type = ElementAverageValue
variable = d
[]
[e_avg]
type = ElementAverageValue
variable = verylongvariable_e
[]
[f_avg]
type = ElementAverageValue
variable = variable_f
[]
[]
(modules/combined/test/tests/reference_residual/contact.i)
AD = ''
use_ad = false
temp_scaling = 1
disp_x_scaling = ${fparse 1 / temp_scaling}
[GlobalParams]
order = FIRST
displacements = 'disp_x disp_y'
[]
[Problem]
extra_tag_vectors = 'constraint_res kernel_res constraint_ref kernel_ref absolute_ref total_res'
[]
[Mesh]
[gen]
type = CartesianMeshGenerator
dim = 2
dx = '1 0.01 1'
dy = 1
ix = '5 1 5'
iy = '20'
subdomain_id = '0 1 2'
[]
[rename]
type = RenameBlockGenerator
input = gen
old_block = '0 1 2'
new_block = 'a b c'
[]
[sidesets_a]
type = SideSetsBetweenSubdomainsGenerator
input = rename
new_boundary = a_right
paired_block = b
primary_block = a
[]
[sidesets_c]
type = SideSetsBetweenSubdomainsGenerator
input = sidesets_a
new_boundary = c_left
paired_block = b
primary_block = c
[]
[delete]
type = BlockDeletionGenerator
input = sidesets_c
block = b
[]
patch_update_strategy = always
coord_type = RZ
[]
[Variables]
[temp]
initial_condition = 298
scaling = ${temp_scaling}
[]
[disp_x]
scaling = ${disp_x_scaling}
[]
[disp_y]
[]
[]
[AuxVariables]
[constraint_res_temp]
[]
[constraint_res_disp_x]
[]
[constraint_res_disp_y]
[]
[kernel_res_temp]
[]
[kernel_res_disp_x]
[]
[kernel_res_disp_y]
[]
[constraint_ref_temp]
[]
[constraint_ref_disp_x]
[]
[constraint_ref_disp_y]
[]
[kernel_ref_temp]
[]
[kernel_ref_disp_x]
[]
[kernel_ref_disp_y]
[]
[absolute_ref_temp]
[]
[absolute_ref_disp_x]
[]
[absolute_ref_disp_y]
[]
[total_res_temp]
[]
[total_res_disp_x]
[]
[total_res_disp_y]
[]
[]
[AuxKernels]
[constraint_res_temp_aux]
type = TagVectorAux
variable = constraint_res_temp
v = temp
vector_tag = constraint_res
[]
[constraint_res_disp_x_aux]
type = TagVectorAux
variable = constraint_res_disp_x
v = disp_x
vector_tag = constraint_res
[]
[constraint_res_disp_y_aux]
type = TagVectorAux
variable = constraint_res_disp_y
v = disp_y
vector_tag = constraint_res
[]
[kernel_res_temp_aux]
type = TagVectorAux
variable = kernel_res_temp
v = temp
vector_tag = kernel_res
[]
[kernel_res_disp_x_aux]
type = TagVectorAux
variable = kernel_res_disp_x
v = disp_x
vector_tag = kernel_res
[]
[kernel_res_disp_y_aux]
type = TagVectorAux
variable = kernel_res_disp_y
v = disp_y
vector_tag = kernel_res
[]
[constraint_ref_temp_aux]
type = TagVectorAux
variable = constraint_ref_temp
v = temp
vector_tag = constraint_ref
[]
[constraint_ref_disp_x_aux]
type = TagVectorAux
variable = constraint_ref_disp_x
v = disp_x
vector_tag = constraint_ref
[]
[constraint_ref_disp_y_aux]
type = TagVectorAux
variable = constraint_ref_disp_y
v = disp_y
vector_tag = constraint_ref
[]
[kernel_ref_temp_aux]
type = TagVectorAux
variable = kernel_ref_temp
v = temp
vector_tag = kernel_ref
[]
[kernel_ref_disp_x_aux]
type = TagVectorAux
variable = kernel_ref_disp_x
v = disp_x
vector_tag = kernel_ref
[]
[kernel_ref_disp_y_aux]
type = TagVectorAux
variable = kernel_ref_disp_y
v = disp_y
vector_tag = kernel_ref
[]
[absolute_ref_temp_aux]
type = TagVectorAux
variable = absolute_ref_temp
v = temp
vector_tag = absolute_ref
[]
[absolute_ref_disp_x_aux]
type = TagVectorAux
variable = absolute_ref_disp_x
v = disp_x
vector_tag = absolute_ref
[]
[absolute_ref_disp_y_aux]
type = TagVectorAux
variable = absolute_ref_disp_y
v = disp_y
vector_tag = absolute_ref
[]
[total_res_temp_aux]
type = TagVectorAux
variable = total_res_temp
v = temp
vector_tag = total_res
[]
[total_res_disp_x_aux]
type = TagVectorAux
variable = total_res_disp_x
v = disp_x
vector_tag = total_res
[]
[total_res_disp_y_aux]
type = TagVectorAux
variable = total_res_disp_y
v = disp_y
vector_tag = total_res
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
block = 'a c'
strain = FINITE
eigenstrain_names = 'thermal_strain'
temperature = temp
use_automatic_differentiation = ${use_ad}
volumetric_locking_correction = true
extra_vector_tags = 'kernel_res total_res'
absolute_value_vector_tags = 'absolute_ref kernel_ref'
[]
[]
[Kernels]
[heat]
type = ${AD}Diffusion
block = 'a c'
variable = temp
extra_vector_tags = 'kernel_res total_res'
absolute_value_vector_tags = 'absolute_ref kernel_ref'
[]
[heat_ie]
type = ${AD}HeatConductionTimeDerivative
block = 'a c'
variable = temp
specific_heat = 1
density_name = 1
extra_vector_tags = 'kernel_res total_res'
absolute_value_vector_tags = 'absolute_ref kernel_ref'
[]
[heat_source]
type = BodyForce
block = 'a c'
variable = temp
value = 5e3
extra_vector_tags = 'kernel_res total_res'
absolute_value_vector_tags = 'absolute_ref kernel_ref'
[]
[]
[Contact]
[frictional]
model = coulomb
# model = frictionless
formulation = mortar
primary = a_right
secondary = c_left
friction_coefficient = 0.2
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[]
[MortarGapHeatTransfer]
[mortar_heat_transfer]
temperature = temp
use_displaced_mesh = true
gap_flux_options = conduction
gap_conductivity = 1
boundary = 'a_right c_left'
primary_boundary = a_right
secondary_boundary = c_left
primary_subdomain = frictional_primary_subdomain
secondary_subdomain = frictional_secondary_subdomain
gap_geometry_type = CYLINDER
primary_emissivity = 0
secondary_emissivity = 0
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[]
[BCs]
[no_y_clad]
type = ${AD}DirichletBC
variable = disp_y
boundary = 'bottom'
value = 0.0
preset = false
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[no_x_clad]
type = ${AD}DirichletBC
variable = disp_x
boundary = 'right'
value = 0.0
preset = false
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[Pressure]
[coolantPressure]
boundary = 'a_right c_left'
factor = 0.345e6
use_automatic_differentiation = ${use_ad}
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[]
[convection]
type = ConvectiveHeatFluxBC
variable = temp
boundary = right
T_infinity = 298
heat_transfer_coefficient = 1e-1
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[top]
type = ${AD}DirichletBC
variable = temp
boundary = top
value = 298
extra_vector_tags = 'constraint_res total_res'
absolute_value_vector_tags = 'absolute_ref constraint_ref'
[]
[]
[Materials]
[elasticity_tensor]
type = ${AD}ComputeIsotropicElasticityTensor
block = 'a c'
poissons_ratio = 0.3
youngs_modulus = 1e10
[]
[thermal_expansion_a]
type = ${AD}ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 1e-5
block = 'a'
temperature = temp
stress_free_temperature = 298.0
eigenstrain_name = thermal_strain
[]
[thermal_expansion_c]
type = ${AD}ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 1e-6
block = 'c'
temperature = temp
stress_free_temperature = 298.0
eigenstrain_name = thermal_strain
[]
[stress]
type = ${AD}ComputeFiniteStrainElasticStress
block = 'a c'
[]
[]
[Convergence]
[temp_ref_check]
type = ReferenceResidualConvergence
reference_vector = 'absolute_ref'
converge_on = 'temp'
nl_rel_tol = 5e-6
nl_abs_tol = 5e-9
nl_max_its = 20
nl_div_tol = -1
verbose = true
unscale_the_residual = true
[]
[disp_ref_check]
type = ReferenceResidualConvergence
reference_vector = 'absolute_ref'
converge_on = 'disp_x disp_y'
nl_rel_tol = 5e-6
nl_abs_tol = 5e-9
nl_max_its = 20
nl_div_tol = -1
verbose = true
unscale_the_residual = true
[]
[all_ref_conv]
type = ParsedConvergence
symbol_names = 'temp_ref_check disp_ref_check'
symbol_values = 'temp_ref_check disp_ref_check'
convergence_expression = 'temp_ref_check & disp_ref_check'
divergence_expression = 'temp_ref_check | disp_ref_check'
[]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
nonlinear_convergence = all_ref_conv
petsc_options = '-snes_ksp_ew -snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1e-25'
line_search = 'none'
verbose = true
l_max_its = 60
num_steps = 9
dt = 0.1
[]
[Postprocessors]
[temp_avg]
type = ElementAverageValue
variable = temp
outputs = console
[]
[constraint_res_temp]
type = NodalL2Norm
variable = constraint_res_temp
outputs = console
[]
[constraint_res_disp_x]
type = NodalL2Norm
variable = constraint_res_disp_x
outputs = console
[]
[constraint_res_disp_y]
type = NodalL2Norm
variable = constraint_res_disp_y
outputs = console
[]
[kernel_res_temp]
type = NodalL2Norm
variable = kernel_res_temp
outputs = console
[]
[kernel_res_disp_x]
type = NodalL2Norm
variable = kernel_res_disp_x
outputs = console
[]
[kernel_res_disp_y]
type = NodalL2Norm
variable = kernel_res_disp_y
outputs = console
[]
[constraint_ref_temp]
type = NodalL2Norm
variable = constraint_ref_temp
outputs = console
[]
[constraint_ref_disp_x]
type = NodalL2Norm
variable = constraint_ref_disp_x
outputs = console
[]
[constraint_ref_disp_y]
type = NodalL2Norm
variable = constraint_ref_disp_y
outputs = console
[]
[kernel_ref_temp]
type = NodalL2Norm
variable = kernel_ref_temp
outputs = console
[]
[kernel_ref_disp_x]
type = NodalL2Norm
variable = kernel_ref_disp_x
outputs = console
[]
[kernel_ref_disp_y]
type = NodalL2Norm
variable = kernel_ref_disp_y
outputs = console
[]
[absolute_ref_temp]
type = NodalL2Norm
variable = absolute_ref_temp
outputs = console
[]
[absolute_ref_disp_x]
type = NodalL2Norm
variable = absolute_ref_disp_x
outputs = console
[]
[absolute_ref_disp_y]
type = NodalL2Norm
variable = absolute_ref_disp_y
outputs = console
[]
[total_res_temp]
type = NodalL2Norm
variable = total_res_temp
outputs = console
[]
[total_res_disp_x]
type = NodalL2Norm
variable = total_res_disp_x
outputs = console
[]
[total_res_disp_y]
type = NodalL2Norm
variable = total_res_disp_y
outputs = console
[]
[scaled_res_temp]
type = ParsedPostprocessor
pp_names = 'total_res_temp'
expression = 'total_res_temp / ${temp_scaling}'
[]
[scaled_res_disp_x]
type = ParsedPostprocessor
pp_names = 'total_res_disp_x'
expression = 'total_res_disp_x / ${disp_x_scaling}'
[]
[total_num_nonlinear_its]
type = NumNonlinearIterations
[]
[]
[Outputs]
csv = true
time_step_interval = 9
[]
[Debug]
show_var_residual_norms = true
[]
(test/tests/convergence/multi_postprocessor_convergence/multi_postprocessor_convergence.i)
# pp1 converges (< 1e-6) at t=2
# pp2 converges (< 1e-7) at t=3
# Therefore, all converge at t=3, so expected number of dt=1 steps is 3.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[Functions]
[pp1_fn]
type = PiecewiseLinear
x = '0 1 2 3 4 5'
y = '1e-6 1e-3 1e-6 1e-7 1e-8 1e-9'
[]
[pp2_fn]
type = PiecewiseLinear
x = '0 1 2 3 4 5'
y = '1e-8 1e-6 1e-6 1e-8 1e-9 1e-9'
[]
[]
[Postprocessors]
[pp1]
type = FunctionValuePostprocessor
function = pp1_fn
execute_on = 'INITIAL TIMESTEP_END'
[]
[pp2]
type = FunctionValuePostprocessor
function = pp2_fn
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Convergence]
[ss_conv_with_descriptions]
type = MultiPostprocessorConvergence
postprocessors = 'pp1 pp2'
descriptions = 'QuantityA QuantityB'
tolerances = '1e-5 1e-7'
[]
[ss_conv_without_descriptions]
type = MultiPostprocessorConvergence
postprocessors = 'pp1 pp2'
tolerances = '1e-5 1e-7'
[]
[ss_conv]
type = ParsedConvergence
convergence_expression = 'conv1 & conv2'
symbol_names = 'conv1 conv2'
symbol_values = 'ss_conv_with_descriptions ss_conv_without_descriptions'
[]
[]
[Problem]
solve = false
[]
[Executioner]
type = Transient
dt = 1
num_steps = 5
steady_state_detection = true
steady_state_convergence = ss_conv
verbose = true
[]
[Outputs]
[out]
type = CSV
execute_on = 'FINAL'
[]
[]
(test/tests/time_steppers/iteration_adaptive/adapt_linear_systems.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 50
ny = 2
xmax = 5
[]
[Problem]
linear_sys_names = 'u_sys'
[]
[Variables]
[u]
type = MooseLinearVariableFVReal
solver_sys = 'u_sys'
initial_condition = 1.0
[]
[]
[LinearFVKernels]
[time]
type = LinearFVTimeDerivative
variable = 'u'
[]
[diffusion]
type = LinearFVDiffusion
variable = u
diffusion_coeff = 5
[]
[source]
type = LinearFVSource
variable = u
source_density = 2
[]
[]
[LinearFVBCs]
[dir]
type = LinearFVAdvectionDiffusionFunctorDirichletBC
variable = u
boundary = "left right"
functor = 12
[]
[]
[Executioner]
type = Transient
system_names = u_sys
start_time = 0.0
end_time = 19
n_startup_steps = 2
dtmax = 6.0
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 8
dt = 1.0
[]
verbose = true
linear_convergence = much_logic
[]
[Convergence]
[force_grow]
type = IterationCountConvergence
min_iterations = 0
max_iterations = 4
converge_at_max_iterations = true
[]
[force_shrink]
type = IterationCountConvergence
min_iterations = 12
max_iterations = 13
converge_at_max_iterations = true
[]
[much_logic]
type = ParsedConvergence
convergence_expression = 'if(time < 5, force_grow, force_shrink)'
symbol_names = 'time force_grow force_shrink'
symbol_values = 'time force_grow force_shrink'
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[time]
type = TimePostprocessor
[]
[]
[Outputs]
csv = true
[]
(test/tests/convergence/parsed_convergence/base.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[u]
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[Functions]
[test_fn]
type = ConstantFunction
value = 0
[]
[]
[Postprocessors]
[test_pp]
type = ConstantPostprocessor
value = -1e-6
[]
[num_nl_iterations]
type = NumNonlinearIterations
execute_on = 'TIMESTEP_END'
[]
[]
[Convergence]
[parsed_conv]
type = ParsedConvergence
convergence_expression = 'fn | (supplied & abs(pp) < tol)'
symbol_names = 'supplied pp tol fn'
symbol_values = 'supplied_conv test_pp 1e-5 test_fn'
[]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type'
petsc_options_value = 'hypre'
nonlinear_convergence = parsed_conv
[]
[Outputs]
csv = true
show = 'num_nl_iterations'
execute_on = 'FINAL'
[]