6.2.2. General Naming Pattern
*****************************

Many ParAMS Input blocks have the following pattern:

* A "Type" key which is a multiple-choice list of allowed types for
  that component;

* Sub-blocks/keys which share names with the available types.

Not every type has a matching sub-block/key. They are only present for
those types which require extra settings. If you use a sub-block/key
which does not match the selected "Type" then it will be ignored and
may sometimes result in errors.

The following patterns are **correct**:

   ExitCondition
       Type MaxOptimizersConverged
       MaxOptimizersConverged 1
   End

   ExitCondition
       Type StopsAfterConvergence
       StopsAfterConvergence
           OptimizersConverged 1
           OptimizersStopped 1
       End
   End

In the first example, we select "Type MaxOptimizersConverged" and then
configure it with the similarly named *key*: "MaxOptimizersConverged
1". Similarly, in the second example, we select "Type
StopsAfterConvergence" and then configure it with the similarly named
*block*.

The following patterns are **incorrect**:

   # Missing Type
   ExitCondition
       MaxOptimizersConverged 1
   End

   # Sub-key doesn't match Type
   ExitCondition
       Type MaxOptimizersConverged
       TargetFunctionValue 0
   End

   # Extra sub-key
   ExitCondition
       Type MaxOptimizersConverged
       MaxOptimizersConverged 1
       TargetFunctionValue 0
   End

   # Multiple specifications in single block
   ExitCondition
       Type MaxOptimizersConverged
       MaxOptimizersConverged 1
       Type FunctionValue
       TargetFunctionValue 0
   End

Some of the blocks which follow this pattern are:

* Optimizer

* OptimizerSelector

* ExitCondition

* Generator

* Stopper
