diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a6c4154e..f2801a50 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -39,6 +39,7 @@ jobs:
           pip install -r ./json-spec-engine/requirements.txt
           python ./json-spec-engine/docs/spec2html.py -i ./polyfem/json-specs/input-spec.json --include-dirs ./polyfem/json-specs ./polysolve -o ./docs/_json_spec.md
           python ./json-spec-engine/scripts/generate_defaults.py -i ./polyfem/json-specs/input-spec.json --include-dirs ./polyfem/json-specs ./polysolve -o ./docs/_json_defaults.json
+          python ./json-spec-engine/docs/spec2html.py -i ./polyfem/json-specs/opt-input-spec.json --include-dirs ./polyfem/json-specs ./polysolve -o ./docs/_opt_input_spec.md
           cp ./polyfem/LICENSE ./docs/_polyfem_license.txt
 
       - name: Deploy MkDocs
diff --git a/docs/_opt_input_spec.md b/docs/_opt_input_spec.md
new file mode 100644
index 00000000..2e0e85ae
--- /dev/null
+++ b/docs/_opt_input_spec.md
@@ -0,0 +1,10881 @@
+
+
+
+
+
+
+
+
+
+!!! json-spec "`/` (`object`)"
+    ```
+    /
+    ```
+    
Description
+    Root of the configuration file.
+    Required
+
+
+
+
+
+    ??? json-spec "`/parameters` (`list`)"
+        ```
+        /parameters
+        ```
+        Description
+        TODO
+
+
+
+
+
+        ??? json-spec "`/parameters/*` (`object`)"
+            ```
+            /parameters/*
+            ```
+            Description
+            TODO
+            Optional
+
+
+
+            ??? json-spec "`/parameters/*/number`"
+                ```
+                /parameters/*/number
+                ```
+
+
+                === "`/parameters/*/number` (`int`)"
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+                === "`/parameters/*/number` (`object`)"
+                    Description
+                    TODO
+                
+                    **Default**: `None`
+                    Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                === "`/parameters/*/number` (`object`)"
+                    Description
+                    TODO
+                    Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/parameters/*/initial`"
+                ```
+                /parameters/*/initial
+                ```
+
+
+                === "`/parameters/*/initial` (`list`)"
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+                    ??? json-spec "`/parameters/*/initial/*` (`float`)"
+                        ```
+                        /parameters/*/initial/*
+                        ```
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+                === "`/parameters/*/initial` (`float`)"
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/variable_to_simulation` (`list`)"
+        ```
+        /variable_to_simulation
+        ```
+        Description
+        A list of mappings from the raw optimization variable to parameters in states.
+
+
+
+        ??? json-spec "`/variable_to_simulation/*`"
+            ```
+            /variable_to_simulation/*
+            ```
+
+
+            === "shape"
+            
+                **Type**: shape
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+            === "elastic"
+            
+                **Type**: elastic
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+            === "friction"
+            
+                **Type**: friction
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+            === "initial"
+            
+                **Type**: initial
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+            === "dirichlet"
+            
+                **Type**: dirichlet
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+            === "pressure"
+            
+                **Type**: pressure
+                Description
+                FIXME: Missing documentation in the specification.
+                Required
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/state`"
+                    ```
+                    /variable_to_simulation/*/state
+                    ```
+
+
+                    === "`/variable_to_simulation/*/state` (`int`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/state` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/state/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/state/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Options:** `['shape', 'elastic', 'friction', 'damping', 'macro-strain', 'initial', 'dirichlet', 'pressure']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composition` (`list`)"
+                    ```
+                    /variable_to_simulation/*/composition
+                    ```
+                    Description
+                    list of parametrizations that maps raw optimization variables to parameters in simulations
+
+
+
+                    ??? json-spec "`/variable_to_simulation/*/composition/*`"
+                        ```
+                        /variable_to_simulation/*/composition/*
+                        ```
+
+
+                        === "bounded-biharmonic-weights"
+                        
+                            **Type**: bounded-biharmonic-weights
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "scalar-velocity-parametrization"
+                        
+                            **Type**: scalar-velocity-parametrization
+                            Description
+                            TODO
+                            Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+                        === "append-const"
+                        
+                            **Type**: append-const
+                            Description
+                            Append repeated constant at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/size` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/size
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/start` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/start
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "append-values"
+                        
+                            **Type**: append-values
+                            Description
+                            Append a list of constants at the end of the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/values` (`list`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/values
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+                                ??? json-spec "`/variable_to_simulation/*/composition/*/values/*` (`float`)"
+                                    ```
+                                    /variable_to_simulation/*/composition/*/values/*
+                                    ```
+                                    Description
+                                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "slice"
+                        
+                            **Type**: slice
+                            Description
+                            Ouputs x[from:to], where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/parameter_index` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/parameter_index
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/last` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/last
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "power"
+                        
+                            **Type**: power
+                            Description
+                            Ouputs x ^ power, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/power` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/power
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "exp"
+                        
+                            **Type**: exp
+                            Description
+                            Ouputs exp(x), where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/from` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/from
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/to` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/to
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Default**: `-1`
+
+
+
+
+
+
+                        === "scale"
+                        
+                            **Type**: scale
+                            Description
+                            Ouputs x * value, where x is the input vector
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/value` (`float`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/value
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-elem"
+                        
+                            **Type**: per-body-to-per-elem
+                            Description
+                            From per volume selection to per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "per-body-to-per-node"
+                        
+                            **Type**: per-body-to-per-node
+                            Description
+                            From per volume selection to per FE node.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "E-nu-to-lambda-mu"
+                        
+                            **Type**: E-nu-to-lambda-mu
+                            Description
+                            FIXME: Missing documentation in the specification.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/is_volume` (`bool`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/is_volume
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+                        === "linear-filter"
+                        
+                            **Type**: linear-filter
+                            Description
+                            Apply linear smoothing filter on a field per element.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/state` (`int`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/state
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/variable_to_simulation/*/composition/*/type` (`string`)"
+                                ```
+                                /variable_to_simulation/*/composition/*/type
+                                ```
+                                Description
+                                FIXME: Missing documentation in the specification.
+                            
+                                **Options:** `['per-body-to-per-elem', 'per-body-to-per-node', 'E-nu-to-lambda-mu', 'slice', 'exp', 'scale', 'power', 'append-values', 'append-const', 'linear-filter', 'bounded-biharmonic-weights', 'scalar-velocity-parametrization']`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_type` (`string`)"
+                    ```
+                    /variable_to_simulation/*/composite_map_type
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+                
+                    **Default**: `'none'`
+
+
+
+
+
+
+                ??? json-spec "`/variable_to_simulation/*/composite_map_indices`"
+                    ```
+                    /variable_to_simulation/*/composite_map_indices
+                    ```
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`file`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+                    === "`/variable_to_simulation/*/composite_map_indices` (`list`)"
+                        Description
+                        FIXME: Missing documentation in the specification.
+
+
+
+
+
+                        ??? json-spec "`/variable_to_simulation/*/composite_map_indices/*` (`int`)"
+                            ```
+                            /variable_to_simulation/*/composite_map_indices/*
+                            ```
+                            Description
+                            FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/states` (`list`)"
+        ```
+        /states
+        ```
+        Description
+        Specify a numebr of simulations used in the optimization.
+
+
+
+
+
+        ??? json-spec "`/states/*` (`object`)"
+            ```
+            /states/*
+            ```
+            Description
+            FIXME: Missing documentation in the specification.
+            Required
+
+
+
+
+
+            ??? json-spec "`/states/*/path` (`file`)"
+                ```
+                /states/*/path
+                ```
+                Description
+                The json file path for this state.
+
+
+
+            Optional
+
+
+
+
+
+            ??? json-spec "`/states/*/initial_guess` (`int`)"
+                ```
+                /states/*/initial_guess
+                ```
+                Description
+                Specify the state ID, whose solution is used to initialize the solve in this state.
+            
+                **Default**: `-1`
+
+
+
+
+
+
+
+
+
+    Optional
+
+
+
+
+
+    ??? json-spec "`/output` (`object`)"
+        ```
+        /output
+        ```
+        Description
+        Optimization output options
+    
+        **Default**: `None`
+        Optional
+
+
+
+
+
+        ??? json-spec "`/output/log` (`object`)"
+            ```
+            /output/log
+            ```
+            Description
+            Setting for the output log.
+        
+            **Default**: `None`
+            Optional
+
+
+
+            ??? json-spec "`/output/log/level`"
+                ```
+                /output/log/level
+                ```
+
+
+                === "`/output/log/level` (`int`)"
+                    Description
+                    Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.
+                
+                    **Range:** `[0, 6]`
+
+
+
+                === "`/output/log/level` (`string`)"
+                    Description
+                    Level of logging.
+                
+                    **Default**: `'debug'`
+                
+                    **Options:** `['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']`
+
+
+
+
+
+
+            ??? json-spec "`/output/log/file_level`"
+                ```
+                /output/log/file_level
+                ```
+
+
+                === "`/output/log/file_level` (`int`)"
+                    Description
+                    Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.
+                
+                    **Range:** `[0, 6]`
+
+
+
+                === "`/output/log/file_level` (`string`)"
+                    Description
+                    Level of logging.
+                
+                    **Default**: `'trace'`
+                
+                    **Options:** `['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/output/log/path` (`string`)"
+                ```
+                /output/log/path
+                ```
+                Description
+                File where to save the log; empty string is output to terminal.
+            
+                **Default**: `''`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/output/log/quiet` (`bool`)"
+                ```
+                /output/log/quiet
+                ```
+                Description
+                Disable cout for logging.
+            
+                **Default**: `False`
+
+
+
+
+
+
+
+
+
+
+
+        ??? json-spec "`/output/save_frequency` (`int`)"
+            ```
+            /output/save_frequency
+            ```
+            Description
+            Optimization output frequency
+        
+            **Default**: `1`
+
+
+
+
+
+
+
+
+        ??? json-spec "`/output/directory` (`string`)"
+            ```
+            /output/directory
+            ```
+            Description
+            Directory for output files.
+        
+            **Default**: `''`
+
+
+
+
+
+
+
+
+        ??? json-spec "`/output/solution` (`file`)"
+            ```
+            /output/solution
+            ```
+            Description
+            Export optimization variables to file at every iteration.
+        
+            **Default**: `''`
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/solver` (`object`)"
+        ```
+        /solver
+        ```
+        Description
+        Optimization solver parameters.
+    
+        **Default**: `None`
+        Optional
+
+
+
+
+
+        ??? json-spec "`/solver/nonlinear` (`object`)"
+            ```
+            /solver/nonlinear
+            ```
+            Description
+            Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.
+        
+            **Default**: `None`
+            Optional
+
+
+
+            ??? json-spec "`/solver/nonlinear/solver`"
+                ```
+                /solver/nonlinear/solver
+                ```
+
+
+                === "`/solver/nonlinear/solver` (`string`)"
+                    Description
+                    Nonlinear solver type
+                
+                    **Default**: `'Newton'`
+                
+                    **Options:** `['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']`
+
+
+
+                === "`/solver/nonlinear/solver` (`list`)"
+                    Description
+                    List of solvers for ballback. Eg, [{'type':'Newton'}, {'type':'L-BFGS'}, {'type':'GradientDescent'}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent
+
+
+
+                    ??? json-spec "`/solver/nonlinear/solver/*`"
+                        ```
+                        /solver/nonlinear/solver/*
+                        ```
+
+
+                        === "Newton"
+                        
+                            **Type**: Newton
+                            Description
+                            Options for Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+                        === "ProjectedNewton"
+                        
+                            **Type**: ProjectedNewton
+                            Description
+                            Options for projected Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+                        === "RegularizedNewton"
+                        
+                            **Type**: RegularizedNewton
+                            Description
+                            Options for regularized Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_min
+                                ```
+                                Description
+                                Minimum regulariztion weight.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_max
+                                ```
+                                Description
+                                Maximum regulariztion weight.
+                            
+                                **Default**: `100000000.0`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_inc
+                                ```
+                                Description
+                                Regulariztion weight increment.
+                            
+                                **Default**: `10`
+
+
+
+
+
+
+                        === "RegularizedProjectedNewton"
+                        
+                            **Type**: RegularizedProjectedNewton
+                            Description
+                            Options for regularized projected Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_min
+                                ```
+                                Description
+                                Minimum regulariztion weight.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_max
+                                ```
+                                Description
+                                Maximum regulariztion weight.
+                            
+                                **Default**: `100000000.0`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_inc
+                                ```
+                                Description
+                                Regulariztion weight increment.
+                            
+                                **Default**: `10`
+
+
+
+
+
+
+                        === "DenseNewton"
+                        
+                            **Type**: DenseNewton
+                            Description
+                            Options for Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+                        === "DenseProjectedNewton"
+                        
+                            **Type**: DenseProjectedNewton
+                            Description
+                            Options for projected Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+                        === "DenseRegularizedNewton"
+                        
+                            **Type**: DenseRegularizedNewton
+                            Description
+                            Options for regularized Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_min
+                                ```
+                                Description
+                                Minimum regulariztion weight.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_max
+                                ```
+                                Description
+                                Maximum regulariztion weight.
+                            
+                                **Default**: `100000000.0`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_inc
+                                ```
+                                Description
+                                Regulariztion weight increment.
+                            
+                                **Default**: `10`
+
+
+
+
+
+
+                        === "DenseRegularizedProjectedNewton"
+                        
+                            **Type**: DenseRegularizedProjectedNewton
+                            Description
+                            Options for projected regularized Newton.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/residual_tolerance
+                                ```
+                                Description
+                                Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                            
+                                **Default**: `1e-05`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_min
+                                ```
+                                Description
+                                Minimum regulariztion weight.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_max
+                                ```
+                                Description
+                                Maximum regulariztion weight.
+                            
+                                **Default**: `100000000.0`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/reg_weight_inc
+                                ```
+                                Description
+                                Regulariztion weight increment.
+                            
+                                **Default**: `10`
+
+
+
+
+
+
+                        === "GradientDescent"
+                        
+                            **Type**: GradientDescent
+                            Description
+                            Options for Gradient Descent.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+
+
+
+                        === "StochasticGradientDescent"
+                        
+                            **Type**: StochasticGradientDescent
+                            Description
+                            Options for Stochastic Gradient Descent.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/erase_component_probability` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/erase_component_probability
+                                ```
+                                Description
+                                Probability of erasing a component on the gradient for stochastic solvers.
+                            
+                                **Default**: `0.3`
+
+
+
+
+
+
+                        === "L-BFGS"
+                        
+                            **Type**: L-BFGS
+                            Description
+                            Options for L-BFGS.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/history_size` (`int`)"
+                                ```
+                                /solver/nonlinear/solver/*/history_size
+                                ```
+                                Description
+                                The number of corrections to approximate the inverse Hessian matrix.
+                            
+                                **Default**: `6`
+
+
+
+
+
+
+                        === "BFGS"
+                        
+                            **Type**: BFGS
+                            Description
+                            Options for BFGS.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+
+
+
+                        === "ADAM"
+                        
+                            **Type**: ADAM
+                            Description
+                            Options for ADAM.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/alpha` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/alpha
+                                ```
+                                Description
+                                Parameter alpha for ADAM.
+                            
+                                **Default**: `0.001`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/beta_1` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/beta_1
+                                ```
+                                Description
+                                Parameter beta_1 for ADAM.
+                            
+                                **Default**: `0.9`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/beta_2` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/beta_2
+                                ```
+                                Description
+                                Parameter beta_2 for ADAM.
+                            
+                                **Default**: `0.999`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/epsilon` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/epsilon
+                                ```
+                                Description
+                                Parameter epsilon for ADAM.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+                        === "StochasticADAM"
+                        
+                            **Type**: StochasticADAM
+                            Description
+                            Options for ADAM.
+                            Required
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)"
+                                ```
+                                /solver/nonlinear/solver/*/type
+                                ```
+                                Description
+                                Nonlinear solver type
+                            
+                                **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']`
+
+
+
+                            Optional
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/alpha` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/alpha
+                                ```
+                                Description
+                                Parameter alpha for ADAM.
+                            
+                                **Default**: `0.001`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/beta_1` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/beta_1
+                                ```
+                                Description
+                                Parameter beta_1 for ADAM.
+                            
+                                **Default**: `0.9`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/beta_2` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/beta_2
+                                ```
+                                Description
+                                Parameter beta_2 for ADAM.
+                            
+                                **Default**: `0.999`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/epsilon` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/epsilon
+                                ```
+                                Description
+                                Parameter epsilon for ADAM.
+                            
+                                **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/solver/*/erase_component_probability` (`float`)"
+                                ```
+                                /solver/nonlinear/solver/*/erase_component_probability
+                                ```
+                                Description
+                                Probability of erasing a component on the gradient for stochastic solvers.
+                            
+                                **Default**: `0.3`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/x_delta` (`float`)"
+                ```
+                /solver/nonlinear/x_delta
+                ```
+                Description
+                Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.
+            
+                **Default**: `0`
+            
+                **Range:** `[0, inf]`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/grad_norm` (`float`)"
+                ```
+                /solver/nonlinear/grad_norm
+                ```
+                Description
+                Stopping criterion: Minimal gradient norm for the iterations to continue.
+            
+                **Default**: `1e-08`
+            
+                **Range:** `[0, inf]`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/first_grad_norm_tol` (`float`)"
+                ```
+                /solver/nonlinear/first_grad_norm_tol
+                ```
+                Description
+                Minimal gradient norm for the iterations to not start, assume we already are at a minimum.
+            
+                **Default**: `1e-10`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/max_iterations` (`int`)"
+                ```
+                /solver/nonlinear/max_iterations
+                ```
+                Description
+                Maximum number of iterations for a nonlinear solve.
+            
+                **Default**: `500`
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/iterations_per_strategy`"
+                ```
+                /solver/nonlinear/iterations_per_strategy
+                ```
+
+
+                === "`/solver/nonlinear/iterations_per_strategy` (`int`)"
+                    Description
+                    Number of iterations for every substrategy before reset.
+                
+                    **Default**: `5`
+
+
+
+                === "`/solver/nonlinear/iterations_per_strategy` (`list`)"
+                    Description
+                    Number of iterations for every substrategy before reset.
+
+
+
+
+
+                    ??? json-spec "`/solver/nonlinear/iterations_per_strategy/*` (`int`)"
+                        ```
+                        /solver/nonlinear/iterations_per_strategy/*
+                        ```
+                        Description
+                        Number of iterations for every substrategy before reset.
+                    
+                        **Default**: `5`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/line_search` (`object`)"
+                ```
+                /solver/nonlinear/line_search
+                ```
+                Description
+                Settings for line-search in the nonlinear solver
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/method` (`string`)"
+                    ```
+                    /solver/nonlinear/line_search/method
+                    ```
+                    Description
+                    Line-search type
+                
+                    **Default**: `'RobustArmijo'`
+                
+                    **Options:** `['Armijo', 'RobustArmijo', 'Backtracking', 'None']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/use_grad_norm_tol` (`float`)"
+                    ```
+                    /solver/nonlinear/line_search/use_grad_norm_tol
+                    ```
+                    Description
+                    When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy
+                
+                    **Default**: `1e-06`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/min_step_size` (`float`)"
+                    ```
+                    /solver/nonlinear/line_search/min_step_size
+                    ```
+                    Description
+                    Mimimum step size
+                
+                    **Default**: `1e-10`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/max_step_size_iter` (`int`)"
+                    ```
+                    /solver/nonlinear/line_search/max_step_size_iter
+                    ```
+                    Description
+                    Number of iterations
+                
+                    **Default**: `30`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/min_step_size_final` (`float`)"
+                    ```
+                    /solver/nonlinear/line_search/min_step_size_final
+                    ```
+                    Description
+                    Mimimum step size for last descent strategy
+                
+                    **Default**: `1e-20`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/max_step_size_iter_final` (`int`)"
+                    ```
+                    /solver/nonlinear/line_search/max_step_size_iter_final
+                    ```
+                    Description
+                    Number of iterations for last descent strategy
+                
+                    **Default**: `100`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/default_init_step_size` (`float`)"
+                    ```
+                    /solver/nonlinear/line_search/default_init_step_size
+                    ```
+                    Description
+                    Initial step size
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/step_ratio` (`float`)"
+                    ```
+                    /solver/nonlinear/line_search/step_ratio
+                    ```
+                    Description
+                    Ratio used to decrease the step
+                
+                    **Default**: `0.5`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/Armijo` (`object`)"
+                    ```
+                    /solver/nonlinear/line_search/Armijo
+                    ```
+                    Description
+                    Options for Armijo.
+                
+                    **Default**: `None`
+                    Optional
+
+
+
+
+
+                    ??? json-spec "`/solver/nonlinear/line_search/Armijo/c` (`float`)"
+                        ```
+                        /solver/nonlinear/line_search/Armijo/c
+                        ```
+                        Description
+                        Armijo c parameter.
+                    
+                        **Default**: `0.0001`
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/line_search/RobustArmijo` (`object`)"
+                    ```
+                    /solver/nonlinear/line_search/RobustArmijo
+                    ```
+                    Description
+                    Options for RobustArmijo.
+                
+                    **Default**: `None`
+                    Optional
+
+
+
+
+
+                    ??? json-spec "`/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance` (`float`)"
+                        ```
+                        /solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance
+                        ```
+                        Description
+                        Relative tolerance on E to switch to approximate.
+                    
+                        **Default**: `0.1`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/allow_out_of_iterations` (`bool`)"
+                ```
+                /solver/nonlinear/allow_out_of_iterations
+                ```
+                Description
+                If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.
+            
+                **Default**: `False`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/L-BFGS` (`object`)"
+                ```
+                /solver/nonlinear/L-BFGS
+                ```
+                Description
+                Options for LBFGS.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/L-BFGS/history_size` (`int`)"
+                    ```
+                    /solver/nonlinear/L-BFGS/history_size
+                    ```
+                    Description
+                    The number of corrections to approximate the inverse Hessian matrix.
+                
+                    **Default**: `6`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/L-BFGS-B` (`object`)"
+                ```
+                /solver/nonlinear/L-BFGS-B
+                ```
+                Description
+                Options for the boxed L-BFGS.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/L-BFGS-B/history_size` (`int`)"
+                    ```
+                    /solver/nonlinear/L-BFGS-B/history_size
+                    ```
+                    Description
+                    The number of corrections to approximate the inverse Hessian matrix.
+                
+                    **Default**: `6`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/Newton` (`object`)"
+                ```
+                /solver/nonlinear/Newton
+                ```
+                Description
+                Options for Newton.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/residual_tolerance` (`float`)"
+                    ```
+                    /solver/nonlinear/Newton/residual_tolerance
+                    ```
+                    Description
+                    Tolerance of the linear system residual. If residual is above, the direction is rejected.
+                
+                    **Default**: `1e-05`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/reg_weight_min` (`float`)"
+                    ```
+                    /solver/nonlinear/Newton/reg_weight_min
+                    ```
+                    Description
+                    Minimum regulariztion weight.
+                
+                    **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/reg_weight_max` (`float`)"
+                    ```
+                    /solver/nonlinear/Newton/reg_weight_max
+                    ```
+                    Description
+                    Maximum regulariztion weight.
+                
+                    **Default**: `100000000.0`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/reg_weight_inc` (`float`)"
+                    ```
+                    /solver/nonlinear/Newton/reg_weight_inc
+                    ```
+                    Description
+                    Regulariztion weight increment.
+                
+                    **Default**: `10`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/force_psd_projection` (`bool`)"
+                    ```
+                    /solver/nonlinear/Newton/force_psd_projection
+                    ```
+                    Description
+                    Force the Hessian to be PSD when using second order solvers (i.e., Newton's method).
+                
+                    **Default**: `False`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/use_psd_projection` (`bool`)"
+                    ```
+                    /solver/nonlinear/Newton/use_psd_projection
+                    ```
+                    Description
+                    Use PSD as fallback using second order solvers (i.e., Newton's method).
+                
+                    **Default**: `True`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/Newton/use_psd_projection_in_regularized` (`bool`)"
+                    ```
+                    /solver/nonlinear/Newton/use_psd_projection_in_regularized
+                    ```
+                    Description
+                    Use PSD in regularized Newton.
+                
+                    **Default**: `True`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/ADAM` (`object`)"
+                ```
+                /solver/nonlinear/ADAM
+                ```
+                Description
+                Options for ADAM.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/ADAM/alpha` (`float`)"
+                    ```
+                    /solver/nonlinear/ADAM/alpha
+                    ```
+                    Description
+                    Parameter alpha for ADAM.
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/ADAM/beta_1` (`float`)"
+                    ```
+                    /solver/nonlinear/ADAM/beta_1
+                    ```
+                    Description
+                    Parameter beta_1 for ADAM.
+                
+                    **Default**: `0.9`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/ADAM/beta_2` (`float`)"
+                    ```
+                    /solver/nonlinear/ADAM/beta_2
+                    ```
+                    Description
+                    Parameter beta_2 for ADAM.
+                
+                    **Default**: `0.999`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/ADAM/epsilon` (`float`)"
+                    ```
+                    /solver/nonlinear/ADAM/epsilon
+                    ```
+                    Description
+                    Parameter epsilon for ADAM.
+                
+                    **Default**: `1e-08`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/StochasticADAM` (`object`)"
+                ```
+                /solver/nonlinear/StochasticADAM
+                ```
+                Description
+                Options for ADAM.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticADAM/alpha` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticADAM/alpha
+                    ```
+                    Description
+                    Parameter alpha for ADAM.
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticADAM/beta_1` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticADAM/beta_1
+                    ```
+                    Description
+                    Parameter beta_1 for ADAM.
+                
+                    **Default**: `0.9`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticADAM/beta_2` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticADAM/beta_2
+                    ```
+                    Description
+                    Parameter beta_2 for ADAM.
+                
+                    **Default**: `0.999`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticADAM/epsilon` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticADAM/epsilon
+                    ```
+                    Description
+                    Parameter epsilon for ADAM.
+                
+                    **Default**: `1e-08`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticADAM/erase_component_probability` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticADAM/erase_component_probability
+                    ```
+                    Description
+                    Probability of erasing a component on the gradient for ADAM.
+                
+                    **Default**: `0.3`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/StochasticGradientDescent` (`object`)"
+                ```
+                /solver/nonlinear/StochasticGradientDescent
+                ```
+                Description
+                Options for Stochastic Gradient Descent.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/StochasticGradientDescent/erase_component_probability` (`float`)"
+                    ```
+                    /solver/nonlinear/StochasticGradientDescent/erase_component_probability
+                    ```
+                    Description
+                    Probability of erasing a component on the gradient for StochasticGradientDescent.
+                
+                    **Default**: `0.3`
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/box_constraints` (`object`)"
+                ```
+                /solver/nonlinear/box_constraints
+                ```
+                Description
+                FIXME: Missing documentation in the specification.
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/box_constraints/bounds` (`list`)"
+                    ```
+                    /solver/nonlinear/box_constraints/bounds
+                    ```
+                    Description
+                    Box constraints on optimization variables.
+
+
+
+                    ??? json-spec "`/solver/nonlinear/box_constraints/bounds/*`"
+                        ```
+                        /solver/nonlinear/box_constraints/bounds/*
+                        ```
+
+
+                        === "`/solver/nonlinear/box_constraints/bounds/*` (`list`)"
+                            Description
+                            Box constraint values on optimization variables.
+
+
+
+
+
+                            ??? json-spec "`/solver/nonlinear/box_constraints/bounds/*/*` (`float`)"
+                                ```
+                                /solver/nonlinear/box_constraints/bounds/*/*
+                                ```
+                                Description
+                                Box constraint values on optimization variables.
+
+
+
+
+
+
+                        === "`/solver/nonlinear/box_constraints/bounds/*` (`float`)"
+                            Description
+                            Box constraint values on optimization variables.
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/box_constraints/max_change`"
+                    ```
+                    /solver/nonlinear/box_constraints/max_change
+                    ```
+
+
+                    === "`/solver/nonlinear/box_constraints/max_change` (`float`)"
+                        Description
+                        Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.
+                    
+                        **Default**: `-1`
+
+
+
+                    === "`/solver/nonlinear/box_constraints/max_change` (`list`)"
+                        Description
+                        Maximum change of optimization variables in one iteration, only for solvers with box constraints.
+
+
+
+
+
+                        ??? json-spec "`/solver/nonlinear/box_constraints/max_change/*` (`float`)"
+                            ```
+                            /solver/nonlinear/box_constraints/max_change/*
+                            ```
+                            Description
+                            Maximum change of every optimization variable in one iteration, only for solvers with box constraints.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/nonlinear/advanced` (`object`)"
+                ```
+                /solver/nonlinear/advanced
+                ```
+                Description
+                Nonlinear solver advanced options
+            
+                **Default**: `None`
+                Optional
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/advanced/f_delta` (`float`)"
+                    ```
+                    /solver/nonlinear/advanced/f_delta
+                    ```
+                    Description
+                    Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.
+                
+                    **Default**: `0`
+                
+                    **Range:** `[0, inf]`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/advanced/f_delta_step_tol` (`int`)"
+                    ```
+                    /solver/nonlinear/advanced/f_delta_step_tol
+                    ```
+                    Description
+                    Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.
+                
+                    **Default**: `100`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/advanced/derivative_along_delta_x_tol` (`float`)"
+                    ```
+                    /solver/nonlinear/advanced/derivative_along_delta_x_tol
+                    ```
+                    Description
+                    Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.
+                
+                    **Default**: `0`
+                
+                    **Range:** `[0, inf]`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/advanced/apply_gradient_fd` (`string`)"
+                    ```
+                    /solver/nonlinear/advanced/apply_gradient_fd
+                    ```
+                    Description
+                    Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.
+                
+                    **Default**: `'None'`
+                
+                    **Options:** `['None', 'DirectionalDerivative', 'FullFiniteDiff']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/solver/nonlinear/advanced/gradient_fd_eps` (`float`)"
+                    ```
+                    /solver/nonlinear/advanced/gradient_fd_eps
+                    ```
+                    Description
+                    Expensive Option: Eps for finite difference to verify gradient of energy.
+                
+                    **Default**: `1e-07`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ??? json-spec "`/solver/advanced` (`object`)"
+            ```
+            /solver/advanced
+            ```
+            Description
+            Advanced settings for arranging forward simulations
+        
+            **Default**: `None`
+            Optional
+
+
+
+
+
+            ??? json-spec "`/solver/advanced/solve_in_parallel` (`bool`)"
+                ```
+                /solver/advanced/solve_in_parallel
+                ```
+                Description
+                Run forward simulations in parallel.
+            
+                **Default**: `False`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/advanced/solve_in_order` (`list`)"
+                ```
+                /solver/advanced/solve_in_order
+                ```
+                Description
+                Run forward simulations in order.
+
+
+
+
+
+                ??? json-spec "`/solver/advanced/solve_in_order/*` (`int`)"
+                    ```
+                    /solver/advanced/solve_in_order/*
+                    ```
+                    Description
+                    Id of forward simulations.
+
+
+
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/advanced/characteristic_length` (`float`)"
+                ```
+                /solver/advanced/characteristic_length
+                ```
+                Description
+                A scaling on the nonlinear problem for better stability.
+            
+                **Default**: `1`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/advanced/enable_slim` (`bool`)"
+                ```
+                /solver/advanced/enable_slim
+                ```
+                Description
+                Whether to apply slim smoothing to the optimization when step is accepted.
+            
+                **Default**: `False`
+
+
+
+
+
+
+
+
+            ??? json-spec "`/solver/advanced/smooth_line_search` (`bool`)"
+                ```
+                /solver/advanced/smooth_line_search
+                ```
+                Description
+                Whether to apply slim smoothing to the optimization line search.
+            
+                **Default**: `False`
+
+
+
+
+
+
+
+
+
+
+
+        ??? json-spec "`/solver/max_threads` (`int`)"
+            ```
+            /solver/max_threads
+            ```
+            Description
+            Maximum number of threads used; 0 is unlimited.
+        
+            **Default**: `0`
+        
+            **Range:** `[0, inf]`
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/stopping_conditions` (`list`)"
+        ```
+        /stopping_conditions
+        ```
+        Description
+        A list of functionals. The optimization stops if these functionals are all negative, even if the objective gradient norm is not small enough.
+
+
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/functionals` (`list`)"
+        ```
+        /functionals
+        ```
+        Description
+        A list of functionals. Their sum is the functional being optimized.
+
+
+
+        ??? json-spec "`/functionals/*`"
+            ```
+            /functionals/*
+            ```
+
+
+            === "divide"
+            
+                **Type**: divide
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/objective`"
+                    ```
+                    /functionals/*/objective
+                    ```
+
+
+                    === "`/functionals/*/objective` (`object`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/objective` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/objective/*` (`object`)"
+                            ```
+                            /functionals/*/objective/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "plus-const"
+            
+                **Type**: plus-const
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/objective`"
+                    ```
+                    /functionals/*/objective
+                    ```
+
+
+                    === "`/functionals/*/objective` (`object`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/objective` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/objective/*` (`object`)"
+                            ```
+                            /functionals/*/objective/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/value` (`float`)"
+                    ```
+                    /functionals/*/value
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "power"
+            
+                **Type**: power
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/objective`"
+                    ```
+                    /functionals/*/objective
+                    ```
+
+
+                    === "`/functionals/*/objective` (`object`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/objective` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/objective/*` (`object`)"
+                            ```
+                            /functionals/*/objective/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/power` (`float`)"
+                    ```
+                    /functionals/*/power
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `2`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "sdf-target"
+            
+                **Type**: sdf-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/control_points` (`list`)"
+                    ```
+                    /functionals/*/control_points
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/control_points/*` (`list`)"
+                        ```
+                        /functionals/*/control_points/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/control_points/*/*` (`float`)"
+                            ```
+                            /functionals/*/control_points/*/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/control_points_grid` (`list`)"
+                    ```
+                    /functionals/*/control_points_grid
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/control_points_grid/*` (`list`)"
+                        ```
+                        /functionals/*/control_points_grid/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/control_points_grid/*/*` (`float`)"
+                            ```
+                            /functionals/*/control_points_grid/*/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/knots` (`list`)"
+                    ```
+                    /functionals/*/knots
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/knots/*` (`float`)"
+                        ```
+                        /functionals/*/knots/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/knots_u` (`list`)"
+                    ```
+                    /functionals/*/knots_u
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/knots_u/*` (`float`)"
+                        ```
+                        /functionals/*/knots_u/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/knots_v` (`list`)"
+                    ```
+                    /functionals/*/knots_v
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/knots_v/*` (`float`)"
+                        ```
+                        /functionals/*/knots_v/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+            === "mesh-target"
+            
+                **Type**: mesh-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+            === "node-target"
+            
+                **Type**: node-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "function-target"
+            
+                **Type**: function-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/target_function` (`string`)"
+                    ```
+                    /functionals/*/target_function
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `'0'`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/target_function_gradient` (`list`)"
+                    ```
+                    /functionals/*/target_function_gradient
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/target_function_gradient/*` (`string`)"
+                        ```
+                        /functionals/*/target_function_gradient/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+            === "target"
+            
+                **Type**: target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/reference_cached_body_ids` (`list`)"
+                    ```
+                    /functionals/*/reference_cached_body_ids
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/reference_cached_body_ids/*` (`int`)"
+                        ```
+                        /functionals/*/reference_cached_body_ids/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/target_state` (`int`)"
+                    ```
+                    /functionals/*/target_state
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `-1`
+
+
+
+
+
+
+            === "displacement-target"
+            
+                **Type**: displacement-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/target_displacement` (`list`)"
+                    ```
+                    /functionals/*/target_displacement
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/target_displacement/*` (`float`)"
+                        ```
+                        /functionals/*/target_displacement/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/active_dimension` (`list`)"
+                    ```
+                    /functionals/*/active_dimension
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/active_dimension/*` (`bool`)"
+                        ```
+                        /functionals/*/active_dimension/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+            === "center-target"
+            
+                **Type**: center-target
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/target_state` (`int`)"
+                    ```
+                    /functionals/*/target_state
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `-1`
+
+
+
+
+
+
+            === "position"
+            
+                **Type**: position
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+            === "parametrized_product"
+            
+                **Type**: parametrized_product
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/power` (`float`)"
+                    ```
+                    /functionals/*/power
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `2`
+
+
+
+
+
+
+            === "soft_constraint"
+            
+                **Type**: soft_constraint
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/objective`"
+                    ```
+                    /functionals/*/objective
+                    ```
+
+
+                    === "`/functionals/*/objective` (`object`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/objective` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/objective/*` (`object`)"
+                            ```
+                            /functionals/*/objective/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/soft_bound` (`list`)"
+                    ```
+                    /functionals/*/soft_bound
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/soft_bound/*` (`float`)"
+                        ```
+                        /functionals/*/soft_bound/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/power` (`float`)"
+                    ```
+                    /functionals/*/power
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `2`
+
+
+
+
+
+
+            === "transient_integral"
+            
+                **Type**: transient_integral
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/static_objective` (`object`)"
+                    ```
+                    /functionals/*/static_objective
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/integral_type` (`string`)"
+                    ```
+                    /functionals/*/integral_type
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `'uniform'`
+                
+                    **Options:** `['simpson', 'uniform', 'final', 'steps']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/steps` (`list`)"
+                    ```
+                    /functionals/*/steps
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+
+
+
+            === "acceleration"
+            
+                **Type**: acceleration
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+            === "kinetic"
+            
+                **Type**: kinetic
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+            === "disp_grad"
+            
+                **Type**: disp_grad
+                Description
+                One entry of displacement gradient matrix
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dimensions` (`list`)"
+                    ```
+                    /functionals/*/dimensions
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+            === "homo_disp_grad"
+            
+                **Type**: homo_disp_grad
+                Description
+                One entry of macro displacement gradient matrix, only work for homogenization
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dimensions` (`list`)"
+                    ```
+                    /functionals/*/dimensions
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+            === "stress"
+            
+                **Type**: stress
+                Description
+                One entry of elastic stress matrix
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dimensions` (`list`)"
+                    ```
+                    /functionals/*/dimensions
+                    ```
+                    Description
+                    FIXME: Missing documentation in the specification.
+
+
+
+
+
+
+
+
+
+
+
+            === "elastic_energy"
+            
+                **Type**: elastic_energy
+                Description
+                Elastic energy over the volume selection
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "stress_norm"
+            
+                **Type**: stress_norm
+                Description
+                Lp Norm of elastic stress over the volume selection
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/power` (`float`)"
+                    ```
+                    /functionals/*/power
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `2`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "quadratic_contact_force_norm"
+            
+                **Type**: quadratic_contact_force_norm
+                Description
+                Lp Norm of elastic stress over the volume selection
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "log_contact_force_norm"
+            
+                **Type**: log_contact_force_norm
+                Description
+                Lp Norm of elastic stress over the volume selection
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "max_stress"
+            
+                **Type**: max_stress
+                Description
+                Pointwise max stress over the volume selection
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "compliance"
+            
+                **Type**: compliance
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "strain_norm"
+            
+                **Type**: strain_norm
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "boundary_smoothing"
+            
+                **Type**: boundary_smoothing
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/scale_invariant` (`bool`)"
+                    ```
+                    /functionals/*/scale_invariant
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `True`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/power` (`float`)"
+                    ```
+                    /functionals/*/power
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `2`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/surface_selection`"
+                    ```
+                    /functionals/*/surface_selection
+                    ```
+
+
+                    === "`/functionals/*/surface_selection` (`int`)"
+                        Description
+                        TODO
+
+
+
+                    === "`/functionals/*/surface_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/surface_selection/*` (`int`)"
+                            ```
+                            /functionals/*/surface_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+
+
+
+            === "material_smoothing"
+            
+                **Type**: material_smoothing
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+            === "control_smoothing"
+            
+                **Type**: control_smoothing
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "collision_barrier"
+            
+                **Type**: collision_barrier
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+            === "deformed_collision_barrier"
+            
+                **Type**: deformed_collision_barrier
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+            === "layer_thickness"
+            
+                **Type**: layer_thickness
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/boundary_ids` (`list`)"
+                    ```
+                    /functionals/*/boundary_ids
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/boundary_ids/*` (`int`)"
+                        ```
+                        /functionals/*/boundary_ids/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "layer_thickness_log"
+            
+                **Type**: layer_thickness_log
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dmin` (`float`)"
+                    ```
+                    /functionals/*/dmin
+                    ```
+                    Description
+                    The min distance of barrier function
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/boundary_ids` (`list`)"
+                    ```
+                    /functionals/*/boundary_ids
+                    ```
+                    Description
+                    TODO
+
+
+
+
+
+                    ??? json-spec "`/functionals/*/boundary_ids/*` (`int`)"
+                        ```
+                        /functionals/*/boundary_ids/*
+                        ```
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/dhat` (`float`)"
+                    ```
+                    /functionals/*/dhat
+                    ```
+                    Description
+                    The support size of barrier function
+                
+                    **Default**: `0.001`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "weighted_solution"
+            
+                **Type**: weighted_solution
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+            === "volume"
+            
+                **Type**: volume
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+            === "AMIPS"
+            
+                **Type**: AMIPS
+                Description
+                TODO
+                Required
+
+
+
+
+
+                ??? json-spec "`/functionals/*/type` (`string`)"
+                    ```
+                    /functionals/*/type
+                    ```
+                    Description
+                    TODO
+                
+                    **Options:** `['transient_integral', 'power', 'divide', 'plus-const', 'target', 'sdf-target', 'mesh-target', 'center-target', 'function-target', 'displacement-target', 'node-target', 'position', 'acceleration', 'kinetic', 'disp_grad', 'homo_disp_grad', 'stress', 'stress_norm', 'elastic_energy', 'quadratic_contact_force_norm', 'log_contact_force_norm', 'max_stress', 'compliance', 'weighted_solution', 'strain_norm', 'boundary_smoothing', 'collision_barrier', 'deformed_collision_barrier', 'control_smoothing', 'material_smoothing', 'volume', 'soft_constraint', 'layer_thickness', 'layer_thickness_log', 'AMIPS', 'parametrized_product']`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/state` (`int`)"
+                    ```
+                    /functionals/*/state
+                    ```
+                    Description
+                    TODO
+
+
+
+                Optional
+
+
+
+                ??? json-spec "`/functionals/*/volume_selection`"
+                    ```
+                    /functionals/*/volume_selection
+                    ```
+
+
+                    === "`/functionals/*/volume_selection` (`list`)"
+                        Description
+                        TODO
+
+
+
+
+
+                        ??? json-spec "`/functionals/*/volume_selection/*` (`int`)"
+                            ```
+                            /functionals/*/volume_selection/*
+                            ```
+                            Description
+                            TODO
+
+
+
+
+
+
+                    === "`/functionals/*/volume_selection` (`file`)"
+                        Description
+                        TODO
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/weight` (`float`)"
+                    ```
+                    /functionals/*/weight
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `1`
+
+
+
+
+
+
+
+
+                ??? json-spec "`/functionals/*/print_energy` (`string`)"
+                    ```
+                    /functionals/*/print_energy
+                    ```
+                    Description
+                    TODO
+                
+                    **Default**: `''`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    ??? json-spec "`/compute_objective` (`bool`)"
+        ```
+        /compute_objective
+        ```
+        Description
+        Evaluate the functionals and exit.
+    
+        **Default**: `False`
+
+
+
+
+
diff --git a/docs/json_defaults_and_spec.md b/docs/json_defaults_and_spec.md
index 0ac7901b..79ad2893 100644
--- a/docs/json_defaults_and_spec.md
+++ b/docs/json_defaults_and_spec.md
@@ -4,9 +4,9 @@ The following json contains the default values by PolyFEM.
 
 Values of `"REQUIRED!"` indicate the field has no default and must be specified by the user.
 
-~~~js
+```json
 {% include "_json_defaults.json" %}
-~~~
+```
 
 ## Full Specification
 
@@ -15,4 +15,13 @@ The following json contains the full specification of the PolyFEM JSON API.
 {%
     include-markdown "_json_spec.md"
     heading-offset=10
-%}
\ No newline at end of file
+%}
+
+## Optimization Input Specification
+
+The following json contains the specification of the PolyFEM JSON API for optimization.
+
+{%
+    include-markdown "_opt_input_spec.md"
+    heading-offset=10
+%}
diff --git a/docs/tutorials/trajectory-optimization/trajectory-optimization.md b/docs/tutorials/trajectory-optimization/trajectory-optimization.md
index d0814df6..f0df2b91 100644
--- a/docs/tutorials/trajectory-optimization/trajectory-optimization.md
+++ b/docs/tutorials/trajectory-optimization/trajectory-optimization.md
@@ -104,7 +104,7 @@ The initial condition parameter has a dimension of `2 * dim * n_basis`, where `d
 
 In this tutorial, we only optimize the initial velocity of the ball, so we need to build a mapping, which we call `composition` in the JSON script, from the variable of size 2 to the full initial condition parameter of size `2 * dim * n_basis`. The `composition` is a list of some pre-defined mappings, which will apply to the optimization variables in order, and the final output of the mappings will be assigned to the initial condition parameter.
 
-There are two objects with different volume IDs, specified in `barycenter.json` and `barycenter-target.json`, and we only want to control the initial velocity of the ball, with volume ID 1. First, in `append-values` we append two zeros to the optimization variable, which represents the zero initial velocity of the floor. Second, in `per-body-to-per-node` we map the per-volume values to per-node, whose output has the dimension of `dim * n_basis`. Finally, in `append-const` we append more zeros to the start of the vector, to account for the zero initial displacement. Please refer to the [opt-input-spec.json](https://github.com/polyfem/polyfem/blob/main/json-specs/opt-input-spec.json) for the documentation of compositions.
+There are two objects with different volume IDs, specified in `barycenter.json` and `barycenter-target.json`, and we only want to control the initial velocity of the ball, with volume ID 1. First, in `append-values` we append two zeros to the optimization variable, which represents the zero initial velocity of the floor. Second, in `per-body-to-per-node` we map the per-volume values to per-node, whose output has the dimension of `dim * n_basis`. Finally, in `append-const` we append more zeros to the start of the vector, to account for the zero initial displacement. Please refer to the [Optimization Input Specification](../../json_defaults_and_spec.md#optimization-input-specification) for the documentation of compositions.
 
 ### Functionals