Salome HOME
Documentation corrections and improvements
[modules/adao.git] / doc / en / reference.rst
index 0b89bc0016f52694cd47e056ea575cc0a5f32094..079f26e921288b9f0636879fcbed34c030053721 100644 (file)
+..
+   Copyright (C) 2008-2015 EDF R&D
+
+   This file is part of SALOME ADAO module.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+   See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+
+   Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
+
 .. _section_reference:
 
 ================================================================================
-Reference description of the ADAO commands and keywords
+**[DocR]** Reference description of the ADAO commands and keywords
 ================================================================================
 
-This section presents the reference description of the ADAO commands and
-keywords available through the GUI or through scripts.
+The following sections present the reference description of the ADAO commands
+and keywords available through the GUI or through scripts. Two first common
+sections present the :ref:`section_reference_entry` and the
+:ref:`section_reference_special_entry`. After that, one describes successively
+the :ref:`section_reference_assimilation` and the
+:ref:`section_reference_checking`.
 
 Each command or keyword to be defined through the ADAO GUI has some properties.
 The first property is to be *required*, *optional* or only factual, describing a
 type of input. The second property is to be an "open" variable with a fixed type
 but with any value allowed by the type, or a "restricted" variable, limited to
-some specified values. The EFICAS editor GUI having build-in validating
+some specified values. The embedded case editor GUI having build-in validating
 capacities, the properties of the commands or keywords given through this GUI
-are automatically correct. 
-
-The mathematical notations used afterward are explained in the section
-:ref:`section_theory`.
-
-Examples of using these commands are available in the section
-:ref:`section_examples` and in example files installed with ADAO module.
-
-List of possible input types
-----------------------------
-
-.. index:: single: Dict
-.. index:: single: Function
-.. index:: single: Matrix
-.. index:: single: ScalarSparseMatrix
-.. index:: single: DiagonalSparseMatrix
-.. index:: single: String
-.. index:: single: Script
-.. index:: single: Vector
-
-Each ADAO variable has a pseudo-type to help filling it and validation. The
-different pseudo-types are:
-
-**Dict**
-    This indicates a variable that has to be filled by a Python dictionary
-    ``{"key":"value...}``, usually given either as a string or as a script file.
-
-**Function**
-    This indicates a variable that has to be filled by a Python function,
-    usually given as a script file or a component method.
-
-**Matrix**
-    This indicates a variable that has to be filled by a matrix, usually given
-    either as a string or as a script file.
-
-**ScalarSparseMatrix**
-    This indicates a variable that has to be filled by a unique number (which
-    will be used to multiply an identity matrix), usually given either as a
-    string or as a script file.
-
-**DiagonalSparseMatrix**
-    This indicates a variable that has to be filled by a vector (which will be
-    used to replace the diagonal of an identity matrix), usually given either as
-    a string or as a script file.
-
-**Script**
-    This indicates a script given as an external file. It can be described by a
-    full absolute path name or only by the file name without path. If the file
-    is given only by a file name without path, and if a study directory is also
-    indicated, the file is searched in the given directory.
-
-**String**
-    This indicates a string giving a literal representation of a matrix, a
-    vector or a vector serie, such as "1 2 ; 3 4" or "[[1,2],[3,4]]" for a
-    square 2x2 matrix.
-
-**Vector**
-    This indicates a variable that has to be filled by a vector, usually given
-    either as a string or as a script file.
-
-**VectorSerie**
-    This indicates a variable that has to be filled by a list of
-    vectors, usually given either as a string or as a script file.
-
-When a command or keyword can be filled by a script file name, the script has to
-contain a variable or a method that has the same name as the one to be filled.
-In other words, when importing the script in a YACS Python node, it must create
-a variable of the good name in the current namespace of the node.
-
-Reference description for ADAO calculation cases
-------------------------------------------------
-
-List of commands and keywords for an ADAO calculation case
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ASSIMILATION_STUDY
-.. index:: single: Algorithm
-.. index:: single: AlgorithmParameters
-.. index:: single: Background
-.. index:: single: BackgroundError
-.. index:: single: ControlInput
-.. index:: single: Debug
-.. index:: single: EvolutionError
-.. index:: single: EvolutionModel
-.. index:: single: InputVariables
-.. index:: single: Observation
-.. index:: single: ObservationError
-.. index:: single: ObservationOperator
-.. index:: single: Observers
-.. index:: single: OutputVariables
-.. index:: single: Study_name
-.. index:: single: Study_repertory
-.. index:: single: UserDataInit
-.. index:: single: UserPostAnalysis
-
-The first set of commands is related to the description of a calculation case,
-that is a *Data Assimilation* procedure or an *Optimization* procedure. The
-terms are ordered in alphabetical order, except the first, which describes
-choice between calculation or checking. The different commands are the
-following:
-
-**ASSIMILATION_STUDY**
-    *Required command*. This is the general command describing the data
-    assimilation or optimization case. It hierarchically contains all the other
-    commands.
-
-**Algorithm**
-    *Required command*. This is a string to indicate the data assimilation or
-    optimization algorithm chosen. The choices are limited and available through
-    the GUI. There exists for example "3DVAR", "Blue"... See below the list of
-    algorithms and associated parameters in the following subsection `Optional
-    and required commands for calculation algorithms`_.
-
-**AlgorithmParameters**
-    *Optional command*. This command allows to add some optional parameters to
-    control the data assimilation or optimization algorithm. Its value is
-    defined as a "*Dict*" type object. See below the list of algorithms and
-    associated parameters in the following subsection `Optional and required
-    commands for calculation algorithms`_.
-
-**Background**
-    *Required command*. This indicates the background or initial vector used,
-    previously noted as :math:`\mathbf{x}^b`. Its value is defined as a
-    "*Vector*" type object.
-
-**BackgroundError**
-    *Required command*. This indicates the background error covariance matrix,
-    previously noted as :math:`\mathbf{B}`. Its value is defined as a "*Matrix*"
-    type object, a "*ScalarSparseMatrix*" type object, or a
-    "*DiagonalSparseMatrix*" type object.
-
-**ControlInput**
-    *Optional command*. This indicates the control vector used to force the
-    evolution model at each step, usually noted as :math:`\mathbf{U}`. Its value
-    is defined as a "*Vector*" or a *VectorSerie* type object. When there is no
-    control, it has to be a void string ''.
-
-**Debug**
-    *Optional command*. This define the level of trace and intermediary debug
-    information. The choices are limited between 0 (for False) and 1 (for
-    True).
-
-**EvolutionError**
-    *Optional command*. This indicates the evolution error covariance matrix,
-    usually noted as :math:`\mathbf{Q}`. It is defined as a "*Matrix*" type
-    object, a "*ScalarSparseMatrix*" type object, or a "*DiagonalSparseMatrix*"
-    type object.
-
-**EvolutionModel**
-    *Optional command*. This indicates the evolution model operator, usually
-    noted :math:`M`, which describes an elementary step of evolution. Its value
-    is defined as a "*Function*" type object. Different functional forms can be
-    used, as described in the following subsection `Requirements for functions
-    describing an operator`_. If there is some control :math:`U` included in the
-    evolution model, the operator has to be applied to a pair :math:`(X,U)`.
-
-**InputVariables**
-    *Optional command*. This command allows to indicates the name and size of
-    physical variables that are bundled together in the state vector. This
-    information is dedicated to data processed inside an algorithm.
-
-**Observation**
-    *Required command*. This indicates the observation vector used for data
-    assimilation or optimization, previously noted as :math:`\mathbf{y}^o`. It
-    is defined as a "*Vector*" or a *VectorSerie* type object.
-
-**ObservationError**
-    *Required command*. This indicates the observation error covariance matrix,
-    previously noted as :math:`\mathbf{R}`. It is defined as a "*Matrix*" type
-    object, a "*ScalarSparseMatrix*" type object, or a "*DiagonalSparseMatrix*"
-    type object.
-
-**ObservationOperator**
-    *Required command*. This indicates the observation operator, previously
-    noted :math:`H`, which transforms the input parameters :math:`\mathbf{x}` to
-    results :math:`\mathbf{y}` to be compared to observations
-    :math:`\mathbf{y}^o`. Its value is defined as a "*Function*" type object.
-    Different functional forms can be used, as described in the following
-    subsection `Requirements for functions describing an operator`_. If there is
-    some control :math:`U` included in the observation, the operator has to be
-    applied to a pair :math:`(X,U)`.
-
-**Observers**
-    *Optional command*. This command allows to set internal observers, that are
-    functions linked with a particular variable, which will be executed each
-    time this variable is modified. It is a convenient way to monitor variables
-    of interest during the data assimilation or optimization process, by
-    printing or plotting it, etc. Common templates are provided to help the user
-    to start or to quickly make his case.
-
-**OutputVariables**
-    *Optional command*. This command allows to indicates the name and size of
-    physical variables that are bundled together in the output observation
-    vector. This information is dedicated to data processed inside an algorithm.
-
-**Study_name**
-    *Required command*. This is an open string to describe the ADAO study by a
-    name or a sentence.
-
-**Study_repertory**
-    *Optional command*. If available, this directory is used as base name for
-    calculation, and used to find all the script files, given by name without
-    path, that can be used to define some other commands by scripts.
-
-**UserDataInit**
-    *Optional command*. This commands allows to initialize some parameters or
-    data automatically before data assimilation or optimisation algorithm input
-    processing. It indicates a script file name to be executed before entering
-    in initialization phase of chosen variables.
-
-**UserPostAnalysis**
-    *Optional command*. This commands allows to process some parameters or data
-    automatically after data assimilation or optimization algorithm processing.
-    Its value is defined as a script file or a string, allowing to put
-    post-processing code directly inside the ADAO case. Common templates are
-    provided to help the user to start or to quickly make his case.
-
-Optional and required commands for calculation algorithms
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: 3DVAR
-.. index:: single: Blue
-.. index:: single: ExtendedBlue
-.. index:: single: EnsembleBlue
-.. index:: single: KalmanFilter
-.. index:: single: ExtendedKalmanFilter
-.. index:: single: UnscentedKalmanFilter
-.. index:: single: LinearLeastSquares
-.. index:: single: NonLinearLeastSquares
-.. index:: single: ParticleSwarmOptimization
-.. index:: single: QuantileRegression
-
-.. index:: single: AlgorithmParameters
-.. index:: single: Bounds
-.. index:: single: CostDecrementTolerance
-.. index:: single: GradientNormTolerance
-.. index:: single: GroupRecallRate
-.. index:: single: MaximumNumberOfSteps
-.. index:: single: Minimizer
-.. index:: single: NumberOfInsects
-.. index:: single: ProjectedGradientTolerance
-.. index:: single: QualityCriterion
-.. index:: single: Quantile
-.. index:: single: SetSeed
-.. index:: single: StoreInternalVariables
-.. index:: single: StoreSupplementaryCalculations
-.. index:: single: SwarmVelocity
-
-Each algorithm can be controlled using some generic or specific options, given
-through the "*AlgorithmParameters*" optional command in a script file or a
-sring, as follows for example in a file::
-
-    AlgorithmParameters = {
-        "Minimizer" : "LBFGSB",
-        "MaximumNumberOfSteps" : 25,
-        "StoreSupplementaryCalculations" : ["APosterioriCovariance","OMA"],
-        }
-
-To give the "*AlgorithmParameters*" values by string, one must enclose a
-standard dictionnary definition between simple quotes, as for example::
-
-    '{"Minimizer":"LBFGSB","MaximumNumberOfSteps":25}'
-
-This section describes the available options algorithm by algorithm. In
-addition, for each algorithm, the required commands/keywords are given, being
-described in `List of commands and keywords for an ADAO calculation case`_. If
-an option is specified by the user for an algorithm that doesn't support it, the
-option is simply left unused and don't stop the treatment. The meaning of the
-acronyms or particular names can be found in the :ref:`genindex` or the
-:ref:`section_glossary`.
-
-**"Blue"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "OMA", "OMB", "Innovation",
-    "SigmaBck2", "SigmaObs2", "MahalanobisConsistency"].
-
-**"ExtendedBlue"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "OMA", "OMB", "Innovation",
-    "SigmaBck2", "SigmaObs2", "MahalanobisConsistency"].
-
-**"LinearLeastSquares"**
-
-  *Required commands*
-    *"Observation", "ObservationError",
-    "ObservationOperator"*
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["OMA"].
-
-**"3DVAR"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  Minimizer
-    This key allows to choose the optimization minimizer. The default choice is
-    "LBFGSB", and the possible ones are "LBFGSB" (nonlinear constrained
-    minimizer, see [Byrd95]_, [Morales11]_ and [Zhu97]_), "TNC" (nonlinear
-    constrained minimizer), "CG" (nonlinear unconstrained minimizer), "BFGS"
-    (nonlinear unconstrained minimizer), "NCG" (Newton CG minimizer). It is
-    recommended to stay with the default.
-
-  Bounds
-    This key allows to define upper and lower bounds for every state variable
-    being optimized. Bounds can be given by a list of list of pairs of
-    lower/upper bounds for each variable, with possibly ``None`` every time
-    there is no bound. The bounds can always be specified, but they are taken
-    into account only by the constrained minimizers.
-
-  MaximumNumberOfSteps
-    This key indicates the maximum number of iterations allowed for iterative
-    optimization. The default is 15000, which is very similar to no limit on
-    iterations. It is then recommended to adapt this parameter to the needs on
-    real problems. For some minimizers, the effective stopping step can be
-    slightly different of the limit due to algorithm internal control
-    requirements.
-
-  CostDecrementTolerance
-    This key indicates a limit value, leading to stop successfully the
-    iterative optimization process when the cost function decreases less than
-    this tolerance at the last step. The default is 1.e-7, and it is
-    recommended to adapt it to the needs on real problems.
-
-  ProjectedGradientTolerance
-    This key indicates a limit value, leading to stop successfully the iterative
-    optimization process when all the components of the projected gradient are
-    under this limit. It is only used for constrained minimizers. The default is
-    -1, that is the internal default of each minimizer (generally 1.e-5), and it
-    is not recommended to change it.
-
-  GradientNormTolerance
-    This key indicates a limit value, leading to stop successfully the
-    iterative optimization process when the norm of the gradient is under this
-    limit. It is only used for non-constrained minimizers.  The default is
-    1.e-5 and it is not recommended to change it.
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "OMA", "OMB", "Innovation",
-    "SigmaObs2", "MahalanobisConsistency"].
-
-**"NonLinearLeastSquares"**
-
-  *Required commands*
-    *"Background",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  Minimizer
-    This key allows to choose the optimization minimizer. The default choice is
-    "LBFGSB", and the possible ones are "LBFGSB" (nonlinear constrained
-    minimizer, see [Byrd95]_, [Morales11]_ and [Zhu97]_), "TNC" (nonlinear
-    constrained minimizer), "CG" (nonlinear unconstrained minimizer), "BFGS"
-    (nonlinear unconstrained minimizer), "NCG" (Newton CG minimizer). It is
-    recommended to stay with the default.
-
-  Bounds
-    This key allows to define upper and lower bounds for every state variable
-    being optimized. Bounds can be given by a list of list of pairs of
-    lower/upper bounds for each variable, with possibly ``None`` every time
-    there is no bound. The bounds can always be specified, but they are taken
-    into account only by the constrained minimizers.
-
-  MaximumNumberOfSteps
-    This key indicates the maximum number of iterations allowed for iterative
-    optimization. The default is 15000, which is very similar to no limit on
-    iterations. It is then recommended to adapt this parameter to the needs on
-    real problems. For some minimizers, the effective stopping step can be
-    slightly different due to algorithm internal control requirements.
-
-  CostDecrementTolerance
-    This key indicates a limit value, leading to stop successfully the
-    iterative optimization process when the cost function decreases less than
-    this tolerance at the last step. The default is 1.e-7, and it is
-    recommended to adapt it to the needs on real problems.
-
-  ProjectedGradientTolerance
-    This key indicates a limit value, leading to stop successfully the iterative
-    optimization process when all the components of the projected gradient are
-    under this limit. It is only used for constrained minimizers. The default is
-    -1, that is the internal default of each minimizer (generally 1.e-5), and it
-    is not recommended to change it.
-
-  GradientNormTolerance
-    This key indicates a limit value, leading to stop successfully the
-    iterative optimization process when the norm of the gradient is under this
-    limit. It is only used for non-constrained minimizers.  The default is
-    1.e-5 and it is not recommended to change it.
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["BMA", "OMA", "OMB", "Innovation"].
-
-**"EnsembleBlue"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
-
-**"KalmanFilter"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  EstimationOf
-    This key allows to choose the type of estimation to be performed. It can be
-    either state-estimation, with a value of "State", or parameter-estimation,
-    with a value of "Parameters". The default choice is "State".
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"ExtendedKalmanFilter"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  Bounds
-    This key allows to define upper and lower bounds for every state variable
-    being optimized. Bounds can be given by a list of list of pairs of
-    lower/upper bounds for each variable, with extreme values every time there
-    is no bound. The bounds can always be specified, but they are taken into
-    account only by the constrained minimizers.
-
-  ConstrainedBy
-    This key allows to define the method to take bounds into account. The
-    possible methods are in the following list: ["EstimateProjection"].
-
-  EstimationOf
-    This key allows to choose the type of estimation to be performed. It can be
-    either state-estimation, with a value of "State", or parameter-estimation,
-    with a value of "Parameters". The default choice is "State".
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"UnscentedKalmanFilter"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  Bounds
-    This key allows to define upper and lower bounds for every state variable
-    being optimized. Bounds can be given by a list of list of pairs of
-    lower/upper bounds for each variable, with extreme values every time there
-    is no bound. The bounds can always be specified, but they are taken into
-    account only by the constrained minimizers.
-
-  ConstrainedBy
-    This key allows to define the method to take bounds into account. The
-    possible methods are in the following list: ["EstimateProjection"].
-
-  EstimationOf
-    This key allows to choose the type of estimation to be performed. It can be
-    either state-estimation, with a value of "State", or parameter-estimation,
-    with a value of "Parameters". The default choice is "State".
-  
-  Alpha, Beta, Kappa, Reconditioner
-    These keys are internal scaling parameters. "Alpha" requires a value between
-    1.e-4 and 1. "Beta" has an optimal value of 2 for gaussian *a priori*
-    distribution. "Kappa" requires an integer value, and the right default is
-    obtained by setting it to 0. "Reconditioner" requires a value between 1.e-3
-    and 10, it defaults to 1.
-
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
-
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"ParticleSwarmOptimization"**
-
-  *Required commands*
-    *"Background", "BackgroundError",
-    "Observation", "ObservationError",
-    "ObservationOperator"*
-
-  MaximumNumberOfSteps
-    This key indicates the maximum number of iterations allowed for iterative
-    optimization. The default is 50, which is an arbitrary limit. It is then
-    recommended to adapt this parameter to the needs on real problems.
-
-  NumberOfInsects
-    This key indicates the number of insects or particles in the swarm. The
-    default is 100, which is a usual default for this algorithm.
-
-  SwarmVelocity
-    This key indicates the part of the insect velocity which is imposed by the 
-    swarm. It is a positive floating point value. The default value is 1.
-
-  GroupRecallRate
-    This key indicates the recall rate at the best swarm insect. It is a
-    floating point value between 0 and 1. The default value is 0.5.
-
-  QualityCriterion
-    This key indicates the quality criterion, minimized to find the optimal
-    state estimate. The default is the usual data assimilation criterion named
-    "DA", the augmented ponderated least squares. The possible criteria has to
-    be in the following list, where the equivalent names are indicated by "=":
-    ["AugmentedPonderatedLeastSquares"="APLS"="DA",
-    "PonderatedLeastSquares"="PLS", "LeastSquares"="LS"="L2",
-    "AbsoluteValue"="L1", "MaximumError"="ME"]
+are automatically correct.
 
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
+.. _section_reference_entry:
 
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
+========================================================================================
+**[DocR]** General entries and outputs
+========================================================================================
 
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["BMA", "OMA", "OMB", "Innovation"].
+This section describes in general the different possibilities of entry types and
+output variables that can be used. The mathematical notations used afterwards
+are explained in the section :ref:`section_theory`.
 
-**"QuantileRegression"**
+.. toctree::
+   :maxdepth: 1
+   
+   ref_entry_types
+   ref_options_AlgorithmParameters
+   ref_output_variables
 
-  *Required commands*
-    *"Background",
-    "Observation",
-    "ObservationOperator"*
+.. _section_reference_special_entry:
 
-  Quantile
-    This key allows to define the real value of the desired quantile, between
-    0 and 1. The default is 0.5, corresponding to the median.
+========================================================================================
+**[DocR]** Special entries: functions, matrices, "*observer*"
+========================================================================================
 
-  Minimizer
-    This key allows to choose the optimization minimizer. The default choice
-    and only available choice is "MMQR" (Majorize-Minimize for Quantile
-    Regression).
+This section describes the special entries, as the functional or matrix forms,
+that can be used. The mathematical notations used afterwards are explained in
+the section :ref:`section_theory`.
 
-  MaximumNumberOfSteps
-    This key indicates the maximum number of iterations allowed for iterative
-    optimization. The default is 15000, which is very similar to no limit on
-    iterations. It is then recommended to adapt this parameter to the needs on
-    real problems.
+.. toctree::
+   :maxdepth: 1
+   
+   ref_operator_requirements
+   ref_covariance_requirements
+   ref_observers_requirements
 
-  CostDecrementTolerance
-    This key indicates a limit value, leading to stop successfully the
-    iterative optimization process when the cost function or the surrogate
-    decreases less than this tolerance at the last step. The default is 1.e-6,
-    and it is recommended to adapt it to the needs on real problems.
+.. _section_reference_assimilation:
 
-  StoreInternalVariables
-    This boolean key allows to store default internal variables, mainly the
-    current state during iterative optimization process. Be careful, this can be
-    a numerically costly choice in certain calculation cases. The default is
-    "False".
+============================================================================================
+**[DocR]** Data assimilation or optimization calculation cases
+============================================================================================
 
-  StoreSupplementaryCalculations
-    This list indicates the names of the supplementary variables that can be
-    available at the end of the algorithm. It involves potentially costly
-    calculations. The default is a void list, none of these variables being
-    calculated and stored by default. The possible names are in the following
-    list: ["BMA", "OMA", "OMB", "Innovation"].
+This section describes the data assimilation or optimization algorithms
+available in ADAO, detailing their usage characteristics and their options.
 
-Reference description for ADAO checking cases
----------------------------------------------
-
-List of commands and keywords for an ADAO checking case
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: CHECKING_STUDY
-.. index:: single: Algorithm
-.. index:: single: AlgorithmParameters
-.. index:: single: CheckingPoint
-.. index:: single: Debug
-.. index:: single: ObservationOperator
-.. index:: single: Study_name
-.. index:: single: Study_repertory
-.. index:: single: UserDataInit
-
-The second set of commands is related to the description of a checking case,
-that is a procedure to check required properties on information somewhere else
-by a calculation case. The terms are ordered in alphabetical order, except the
-first, which describes choice between calculation or checking. The different
-commands are the following:
-
-**CHECKING_STUDY**
-    *Required command*. This is the general command describing the checking
-    case. It hierarchically contains all the other commands.
-
-**Algorithm**
-    *Required command*. This is a string to indicate the test algorithm chosen.
-    The choices are limited and available through the GUI. There exists for
-    example "FunctionTest", "AdjointTest"... See below the list of algorithms
-    and associated parameters in the following subsection `Optional and required
-    commands for checking algorithms`_.
-
-**AlgorithmParameters** *Optional command*. This command allows to add some
-    optional parameters to control the data assimilation or optimization
-    algorithm. It is defined as a "*Dict*" type object, that is, given as a
-    script. See below the list of algorithms and associated parameters in the
-    following subsection `Optional and required commands for checking
-    algorithms`_.
-
-**CheckingPoint**
-    *Required command*. This indicates the vector used, previously noted as
-    :math:`\mathbf{x}^b`. It is defined as a "*Vector*" type object.
-
-**Debug**
-    *Optional command*. This define the level of trace and intermediary debug
-    information. The choices are limited between 0 (for False) and 1 (for
-    True).
-
-**ObservationOperator**
-    *Required command*. This indicates the observation operator, previously
-    noted :math:`H`, which transforms the input parameters :math:`\mathbf{x}` to
-    results :math:`\mathbf{y}` to be compared to observations
-    :math:`\mathbf{y}^o`. It is defined as a "*Function*" type object. Different
-    functional forms can be used, as described in the following subsection
-    `Requirements for functions describing an operator`_. If there is some
-    control :math:`U` included in the observation, the operator has to be
-    applied to a pair :math:`(X,U)`.
-
-**Study_name**
-    *Required command*. This is an open string to describe the study by a name
-    or a sentence.
-
-**Study_repertory**
-    *Optional command*. If available, this directory is used as base name for
-    calculation, and used to find all the script files, given by name without
-    path, that can be used to define some other commands by scripts.
-
-**UserDataInit**
-    *Optional command*. This commands allows to initialize some parameters or
-    data automatically before data assimilation algorithm processing.
-
-Optional and required commands for checking algorithms
-++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: AdjointTest
-.. index:: single: FunctionTest
-.. index:: single: GradientTest
-.. index:: single: LinearityTest
-.. index:: single: ObserverTest
-.. index:: single: TangentTest
-
-.. index:: single: AlgorithmParameters
-.. index:: single: AmplitudeOfInitialDirection
-.. index:: single: EpsilonMinimumExponent
-.. index:: single: InitialDirection
-.. index:: single: ResiduFormula
-.. index:: single: SetSeed
-
-We recall that each algorithm can be controlled using some generic or specific
-options, given through the "*AlgorithmParameters*" optional command, as follows
-for example::
-
-    AlgorithmParameters = {
-        "AmplitudeOfInitialDirection" : 1,
-        "EpsilonMinimumExponent" : -8,
-        }
-
-If an option is specified by the user for an algorithm that doesn't support it,
-the option is simply left unused and don't stop the treatment. The meaning of
-the acronyms or particular names can be found in the :ref:`genindex` or the
-:ref:`section_glossary`. In addition, for each algorithm, the required
-commands/keywords are given, being described in `List of commands and keywords
-for an ADAO checking case`_.
-
-**"AdjointTest"**
-
-  *Required commands*
-    *"CheckingPoint",
-    "ObservationOperator"*
-
-  AmplitudeOfInitialDirection
-    This key indicates the scaling of the initial perturbation build as a vector
-    used for the directional derivative around the nominal checking point. The
-    default is 1, that means no scaling.
-
-  EpsilonMinimumExponent
-    This key indicates the minimal exponent value of the power of 10 coefficient
-    to be used to decrease the increment multiplier. The default is -8, and it
-    has to be between 0 and -20. For example, its default value leads to
-    calculate the residue of the formula with a fixed increment multiplied from
-    1.e0 to 1.e-8.
-
-  InitialDirection
-    This key indicates the vector direction used for the directional derivative
-    around the nominal checking point. It has to be a vector. If not specified,
-    this direction defaults to a random perturbation around zero of the same
-    vector size than the checking point.
-
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
-
-**"FunctionTest"**
-
-  *Required commands*
-    *"CheckingPoint",
-    "ObservationOperator"*
-
-  NumberOfPrintedDigits
-    This key indicates the number of digits of precision for floating point
-    printed output. The default is 5, with a minimum of 0.
-
-  NumberOfRepetition
-    This key indicates the number of time to repeat the function evaluation. The
-    default is 1.
-  
-  SetDebug
-    This key requires the activation, or not, of the debug mode during the
-    function evaluation. The default is "True", the choices are "True" or
-    "False".
-
-**"GradientTest"**
-
-  *Required commands*
-    *"CheckingPoint",
-    "ObservationOperator"*
-
-  AmplitudeOfInitialDirection
-    This key indicates the scaling of the initial perturbation build as a vector
-    used for the directional derivative around the nominal checking point. The
-    default is 1, that means no scaling.
-
-  EpsilonMinimumExponent
-    This key indicates the minimal exponent value of the power of 10 coefficient
-    to be used to decrease the increment multiplier. The default is -8, and it
-    has to be between 0 and -20. For example, its default value leads to
-    calculate the residue of the scalar product formula with a fixed increment
-    multiplied from 1.e0 to 1.e-8.
-
-  InitialDirection
-    This key indicates the vector direction used for the directional derivative
-    around the nominal checking point. It has to be a vector. If not specified,
-    this direction defaults to a random perturbation around zero of the same
-    vector size than the checking point.
-
-  ResiduFormula
-    This key indicates the residue formula that has to be used for the test. The
-    default choice is "Taylor", and the possible ones are "Taylor" (residue of
-    the Taylor development of the operator, which has to decrease with the
-    square power of the perturbation) and "Norm" (residue obtained by taking the
-    norm of the Taylor development at zero order approximation, which
-    approximate the gradient, and which has to remain constant).
-  
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
-
-**"LinearityTest"**
-
-  *Required commands*
-    *"CheckingPoint",
-    "ObservationOperator"*
-
-  AmplitudeOfInitialDirection
-    This key indicates the scaling of the initial perturbation build as a vector
-    used for the directional derivative around the nominal checking point. The
-    default is 1, that means no scaling.
-
-  EpsilonMinimumExponent
-    This key indicates the minimal exponent value of the power of 10 coefficient
-    to be used to decrease the increment multiplier. The default is -8, and it
-    has to be between 0 and -20. For example, its default value leads to
-    calculate the residue of the scalar product formula with a fixed increment
-    multiplied from 1.e0 to 1.e-8.
-
-  InitialDirection
-    This key indicates the vector direction used for the directional derivative
-    around the nominal checking point. It has to be a vector. If not specified,
-    this direction defaults to a random perturbation around zero of the same
-    vector size than the checking point.
-
-  ResiduFormula
-    This key indicates the residue formula that has to be used for the test. The
-    default choice is "CenteredDL", and the possible ones are "CenteredDL"
-    (residue of the difference between the function at nominal point and the
-    values with positive and negative increments, which has to stay very small),
-    "Taylor" (residue of the Taylor development of the operator normalized by
-    the nominal value, which has to stay very small), "NominalTaylor" (residue
-    of the order 1 approximations of the operator, normalized to the nominal
-    point, which has to stay close to 1), and "NominalTaylorRMS" (residue of the
-    order 1 approximations of the operator, normalized by RMS to the nominal
-    point, which has to stay close to 0).
-  
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
-
-**"ObserverTest"**
-
-  *Required commands*
-    *"Observers"*
-  
-  *Tip for this command:*
-    Because *"CheckingPoint"* and *"ObservationOperator"* are required commands
-    for ALL checking algorithms in the interface, you have to provide a value
-    for them, despite the fact that these commands are not required for
-    *"ObserverTest"*, and will not be used. The easiest way is to give "1" as a
-    STRING for both, *"ObservationOperator"* having to be of type *Matrix*.
-
-**"TangentTest"**
-
-  *Required commands*
-    *"CheckingPoint",
-    "ObservationOperator"*
-
-  AmplitudeOfInitialDirection
-    This key indicates the scaling of the initial perturbation build as a vector
-    used for the directional derivative around the nominal checking point. The
-    default is 1, that means no scaling.
-
-  EpsilonMinimumExponent
-    This key indicates the minimal exponent value of the power of 10 coefficient
-    to be used to decrease the increment multiplier. The default is -8, and it
-    has to be between 0 and -20. For example, its default value leads to
-    calculate the residue of the scalar product formula with a fixed increment
-    multiplied from 1.e0 to 1.e-8.
-
-  InitialDirection
-    This key indicates the vector direction used for the directional derivative
-    around the nominal checking point. It has to be a vector. If not specified,
-    this direction defaults to a random perturbation around zero of the same
-    vector size than the checking point.
-
-  SetSeed
-    This key allow to give an integer in order to fix the seed of the random
-    generator used to generate the ensemble. A convenient value is for example
-    1000. By default, the seed is left uninitialized, and so use the default
-    initialization from the computer.
-
-Requirements for functions describing an operator
--------------------------------------------------
-
-The operators for observation and evolution are required to implement the data
-assimilation or optimization procedures. They include the physical simulation by
-numerical calculations, but also the filtering and restriction to compare the
-simulation to observation. The evolution operator is considered here in its
-incremental form, representing the transition between two successive states, and
-is then similar to the observation operator.
-
-Schematically, an operator has to give a output solution given the input
-parameters. Part of the input parameters can be modified during the optimization
-procedure. So the mathematical representation of such a process is a function.
-It was briefly described in the section :ref:`section_theory` and is generalized
-here by the relation:
-
-.. math:: \mathbf{y} = O( \mathbf{x} )
-
-between the pseudo-observations :math:`\mathbf{y}` and the parameters
-:math:`\mathbf{x}` using the observation or evolution operator :math:`O`. The
-same functional representation can be used for the linear tangent model
-:math:`\mathbf{O}` of :math:`O` and its adjoint :math:`\mathbf{O}^*`, also
-required by some data assimilation or optimization algorithms.
-
-On input and output of these operators, the :math:`\mathbf{x}` and
-:math:`\mathbf{y}` variables or their increments are mathematically vectors,
-and they are given as non-orented vectors (of type list or Numpy array) or
-oriented ones (of type Numpy matrix).
-
-Then, **to describe completely an operator, the user has only to provide a
-function that fully and only realize the functional operation**.
-
-This function is usually given as a script that can be executed in a YACS node.
-This script can without difference launch external codes or use internal SALOME
-calls and methods. If the algorithm requires the 3 aspects of the operator
-(direct form, tangent form and adjoint form), the user has to give the 3
-functions or to approximate them.
-
-There are 3 practical methods for the user to provide an operator functional
-representation. These methods are chosen in the "*FROM*"  field of each operator
-having a "*Function*" value as "*INPUT_TYPE*", as shown by the following figure:
-
-  .. eficas_operator_function:
-  .. image:: images/eficas_operator_function.png
-    :align: center
-    :width: 100%
-  .. centered::
-    **Choosing an operator functional representation**
-
-First functional form: using "*ScriptWithOneFunction*"
-++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithOneFunction
-.. index:: single: DirectOperator
-.. index:: single: DifferentialIncrement
-.. index:: single: CenteredFiniteDifference
-
-The first one consist in providing only one potentially non-linear function, and
-to approximate the tangent and the adjoint operators. This is done by using the
-keyword "*ScriptWithOneFunction*" for the description of the chosen operator in
-the ADAO GUI. The user have to provide the function in a script, with a
-mandatory name "*DirectOperator*". For example, the script can follow the
-template::
-
-    def DirectOperator( X ):
-        """ Direct non-linear simulation operator """
-        ...
-        ...
-        ...
-        return Y=O(X)
-
-In this case, the user has also provide a value for the differential increment
-(or keep the devault value), using through the GUI the keyword
-"*DifferentialIncrement*", which has a default value of 1%. This coefficient
-will be used in the finite difference approximation to build the tangent and
-adjoint operators. The finite difference approximation order can also be chosen
-through the GUI, using the keyword "*CenteredFiniteDifference*", with 0 for an
-uncentered schema of first order (which is the default value), and with 1 for a
-centered schema of second order (of twice the first order computational cost).
-
-This first operator definition form allows easily to test the functional form
-before its use in an ADAO case, greatly reducing the complexity of
-operator implementation.
-
-**Important warning:** the name "*DirectOperator*" is mandatory, and the type of
-the ``X`` argument can be either a list, a numpy array or a numpy 1D-matrix. The
-user has to treat these cases in his function.
-
-Second functional form: using "*ScriptWithFunctions*"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithFunctions
-.. index:: single: DirectOperator
-.. index:: single: TangentOperator
-.. index:: single: AdjointOperator
-
-**In general, it is recommended to use the first functionnal form rather than
-the second one. A small performance improvement is not a good reason to use a
-detailled implementation as this second functional form.**
-
-The second one consist in providing directly the three associated operators
-:math:`O`, :math:`\mathbf{O}` and :math:`\mathbf{O}^*`. This is done by using
-the keyword "*ScriptWithFunctions*" for the description of the chosen operator
-in the ADAO GUI. The user have to provide three functions in one script, with
-three mandatory names "*DirectOperator*", "*TangentOperator*" and
-"*AdjointOperator*". For example, the script can follow the template::
-
-    def DirectOperator( X ):
-        """ Direct non-linear simulation operator """
-        ...
-        ...
-        ...
-        return something like Y
-
-    def TangentOperator( (X, dX) ):
-        """ Tangent linear operator, around X, applied to dX """
-        ...
-        ...
-        ...
-        return something like Y
-
-    def AdjointOperator( (X, Y) ):
-        """ Adjoint operator, around X, applied to Y """
-        ...
-        ...
-        ...
-        return something like X
-
-Another time, this second operator definition allow easily to test the
-functional forms before their use in an ADAO case, reducing the complexity of
-operator implementation.
-
-For some algorithms, it is required that the tangent and adjoint functions can
-return the matrix equivalent to the linear operator. In this case, when
-respectivly the ``dX`` or the ``Y`` arguments are ``None``, the user has to
-return the associated matrix.
-
-**Important warning:** the names "*DirectOperator*", "*TangentOperator*" and
-"*AdjointOperator*" are mandatory, and the type of the ``X``, Y``, ``dX``
-arguments can be either a python list, a numpy array or a numpy 1D-matrix. The
-user has to treat these cases in his script.
-
-Third functional form: using "*ScriptWithSwitch*"
-+++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithSwitch
-.. index:: single: DirectOperator
-.. index:: single: TangentOperator
-.. index:: single: AdjointOperator
-
-**It is recommended not to use this third functional form without a solid
-numerical or physical reason. A performance improvement is not a good reason to
-use the implementation complexity of this third functional form. Only an
-inability to use the first or second forms justifies the use of the third.**
-
-This third form give more possibilities to control the execution of the three
-functions representing the operator, allowing advanced usage and control over
-each execution of the simulation code. This is done by using the keyword
-"*ScriptWithSwitch*" for the description of the chosen operator in the ADAO GUI.
-The user have to provide a switch in one script to control the execution of the 
-direct, tangent and adjoint forms of its simulation code. The user can then, for
-example, use other approximations for the tangent and adjoint codes, or
-introduce more complexity in the argument treatment of the functions. But it
-will be far more complicated to implement and debug.
-
-If, however, you want to use this third form, we recommend using the following
-template for the switch. It requires an external script or code named here
-"*Physical_simulation_functions.py*", containing three functions named
-"*DirectOperator*", "*TangentOperator*" and "*AdjointOperator*" as previously.
-Here is the switch template::
-
-    import Physical_simulation_functions
-    import numpy, logging
-    #
-    method = ""
-    for param in computation["specificParameters"]:
-        if param["name"] == "method":
-            method = param["value"]
-    if method not in ["Direct", "Tangent", "Adjoint"]:
-        raise ValueError("No valid computation method is given")
-    logging.info("Found method is \'%s\'"%method)
-    #
-    logging.info("Loading operator functions")
-    Function = Physical_simulation_functions.DirectOperator
-    Tangent  = Physical_simulation_functions.TangentOperator
-    Adjoint  = Physical_simulation_functions.AdjointOperator
-    #
-    logging.info("Executing the possible computations")
-    data = []
-    if method == "Direct":
-        logging.info("Direct computation")
-        Xcurrent = computation["inputValues"][0][0][0]
-        data = Function(numpy.matrix( Xcurrent ).T)
-    if method == "Tangent":
-        logging.info("Tangent computation")
-        Xcurrent  = computation["inputValues"][0][0][0]
-        dXcurrent = computation["inputValues"][0][0][1]
-        data = Tangent(numpy.matrix(Xcurrent).T, numpy.matrix(dXcurrent).T)
-    if method == "Adjoint":
-        logging.info("Adjoint computation")
-        Xcurrent = computation["inputValues"][0][0][0]
-        Ycurrent = computation["inputValues"][0][0][1]
-        data = Adjoint((numpy.matrix(Xcurrent).T, numpy.matrix(Ycurrent).T))
-    #
-    logging.info("Formatting the output")
-    it = numpy.ravel(data)
-    outputValues = [[[[]]]]
-    for val in it:
-      outputValues[0][0][0].append(val)
-    #
-    result = {}
-    result["outputValues"]        = outputValues
-    result["specificOutputInfos"] = []
-    result["returnCode"]          = 0
-    result["errorMessage"]        = ""
-
-All various modifications could be done from this template hypothesis.
-
-Special case of controled evolution or observation operator
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-In some cases, the evolution or the observation operator is required to be
-controled by an external input control, given *a priori*. In this case, the
-generic form of the incremental model is slightly modified as follows:
-
-.. math:: \mathbf{y} = O( \mathbf{x}, \mathbf{u})
-
-where :math:`\mathbf{u}` is the control over one state increment. In this case,
-the direct operator has to be applied to a pair of variables :math:`(X,U)`.
-Schematically, the operator has to be set as::
-
-    def DirectOperator( (X, U) ):
-        """ Direct non-linear simulation operator """
-        ...
-        ...
-        ...
-        return something like X(n+1) (evolution) or Y(n+1) (observation)
-
-The tangent and adjoint operators have the same signature as previously, noting
-that the derivatives has to be done only partially against :math:`\mathbf{x}`.
-In such a case with explicit control, only the second functional form (using
-"*ScriptWithFunctions*") and third functional form (using "*ScriptWithSwitch*")
-can be used.
-
-Requirements to describe covariance matrices
---------------------------------------------
-
-Multiple covariance matrices are required to implement the data assimilation or
-optimization procedures. The main ones are the background error covariance
-matrix, noted as :math:`\mathbf{B}`, and the observation error covariance matrix,
-noted as :math:`\mathbf{R}`. Such a matrix is required to be a squared symetric
-semi-definite positive matrix.
-
-There are 3 practical methods for the user to provide a covariance matrix. These
-methods are chosen by the "*INPUT_TYPE*" keyword of each defined covariance
-matrix, as shown by the following figure:
-
-  .. eficas_covariance_matrix:
-  .. image:: images/eficas_covariance_matrix.png
-    :align: center
-    :width: 100%
-  .. centered::
-    **Choosing covariance matrix representation**
-
-First matrix form: using "*Matrix*" representation
-++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: Matrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
-
-This first form is the default and more general one. The covariance matrix
-:math:`\mathbf{M}` has to be fully specified. Even if the matrix is symetric by
-nature, the entire :math:`\mathbf{M}` matrix has to be given.
-
-.. math:: \mathbf{M} =  \begin{pmatrix}
-    m_{11} & m_{12} & \cdots   & m_{1n} \\
-    m_{21} & m_{22} & \cdots   & m_{2n} \\
-    \vdots & \vdots & \vdots   & \vdots \\
-    m_{n1} & \cdots & m_{nn-1} & m_{nn}
-    \end{pmatrix}
-
-It can be either a Python Numpy array or a matrix, or a list of lists of values
-(that is, a list of rows). For example, a simple diagonal unitary background
-error covariance matrix :math:`\mathbf{B}` can be described in a Python script
-file as::
-
-    BackgroundError = [[1, 0 ... 0], [0, 1 ... 0] ... [0, 0 ... 1]]
-
-or::
-
-    BackgroundError = numpy.eye(...)
-
-Second matrix form: using "*ScalarSparseMatrix*" representation
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScalarSparseMatrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
-
-On the opposite, this second form is a very simplified method to provide a
-matrix. The covariance matrix :math:`\mathbf{M}` is supposed to be a positive
-multiple of the identity matrix. This matrix can then be specified in a unique
-way by the multiplier :math:`m`:
-
-.. math:: \mathbf{M} =  m \times \begin{pmatrix}
-    1       & 0      & \cdots   & 0      \\
-    0       & 1      & \cdots   & 0      \\
-    \vdots  & \vdots & \vdots   & \vdots \\
-    0       & \cdots & 0        & 1
-    \end{pmatrix}
-
-The multiplier :math:`m` has to be a floating point or integer positive value
-(if it is negative, which is impossible for a positive covariance matrix, it is
-converted to positive value). For example, a simple diagonal unitary background
-error covariance matrix :math:`\mathbf{B}` can be described in a python script
-file as::
-
-    BackgroundError = 1.
-
-or, better, by a "*String*" directly in the ADAO case.
-
-Third matrix form: using "*DiagonalSparseMatrix*" representation
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: DiagonalSparseMatrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
-
-This third form is also a simplified method to provide a matrix, but a little
-more powerful than the second one. The covariance matrix :math:`\mathbf{M}` is
-already supposed to be diagonal, but the user has to specify all the positive
-diagonal values. The matrix can then be specified only by a vector
-:math:`\mathbf{V}` which will be set on a diagonal matrix:
+Some examples on these commands usage are available in the section
+:ref:`section_examples` and in the sample files installed with the ADAO module.
+The mathematical notations used afterward are explained in the section
+:ref:`section_theory`.
 
-.. math:: \mathbf{M} =  \begin{pmatrix}
-    v_{1}  & 0      & \cdots   & 0      \\
-    0      & v_{2}  & \cdots   & 0      \\
-    \vdots & \vdots & \vdots   & \vdots \\
-    0      & \cdots & 0        & v_{n}
-    \end{pmatrix}
+.. toctree::
+   :maxdepth: 1
+   
+   ref_assimilation_keywords
+   ref_algorithm_3DVAR
+   ref_algorithm_Blue
+   ref_algorithm_EnsembleBlue
+   ref_algorithm_ExtendedBlue
+   ref_algorithm_ExtendedKalmanFilter
+   ref_algorithm_KalmanFilter
+   ref_algorithm_LinearLeastSquares
+   ref_algorithm_NonLinearLeastSquares
+   ref_algorithm_ParticleSwarmOptimization
+   ref_algorithm_QuantileRegression
+   ref_algorithm_UnscentedKalmanFilter
+
+.. _section_reference_checking:
 
-It can be either a Python Numpy array or a matrix, or a list or a list of list
-of positive values (in all cases, if some are negative, which is impossible,
-they are converted to positive values). For example, a simple diagonal unitary
-background error covariance matrix :math:`\mathbf{B}` can be described in a
-python script file as::
+================================================================================
+**[DocR]** Checking cases
+================================================================================
 
-    BackgroundError = [1, 1 ... 1]
+This section describes the checking algorithms available in ADAO, detailing
+their usage characteristics and their options.
 
-or::
+Some examples on these commands usage are available in the section
+:ref:`section_examples` and in the sample files installed with the ADAO module.
+The mathematical notations used afterward are explained in the section
+:ref:`section_theory`.
 
-    BackgroundError = numpy.ones(...)
+.. toctree::
+   :maxdepth: 1
+   
+   ref_checking_keywords
+   ref_algorithm_AdjointTest
+   ref_algorithm_FunctionTest
+   ref_algorithm_GradientTest
+   ref_algorithm_LinearityTest
+   ref_algorithm_ObserverTest
+   ref_algorithm_SamplingTest
+   ref_algorithm_TangentTest