2 Copyright (C) 2008-2024 EDF R&D
4 This file is part of SALOME ADAO module.
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
24 .. index:: single: EnsembleKalmanFilter
25 .. _section_ref_algorithm_EnsembleKalmanFilter:
27 Calculation algorithm "*EnsembleKalmanFilter*"
28 ----------------------------------------------
30 .. ------------------------------------ ..
31 .. include:: snippets/Header2Algo01.rst
33 This algorithm realizes an estimation of the state of a dynamic system by a
34 Ensemble Kalman Filter (EnKF), avoiding to have to perform the tangent or
35 adjoint operators for the observation and evolution operators, as in the simple
36 or extended Kalman filters.
38 It applies to non-linear observation and incremental evolution (process)
39 operators with excellent robustness and performance qualities. It can be
40 interpreted as an order reduction of the classical Kalman filter, with a
41 remarkable assimilation quality of this filtering for large problems. It can be
42 compared to the :ref:`section_ref_algorithm_UnscentedKalmanFilter`, whose
43 qualities are similar for non-linear systems.
45 We notice that there is no analysis performed at the initial time step
46 (numbered 0 in the time indexing) because there is no forecast at this time
47 (the background is stored as a pseudo analysis at the initial time step). If
48 the observations are provided in series by the user, the first one is therefore
49 not used. For a good understanding of time management, please refer to the
50 :ref:`schema_d_AD_temporel` and the explanations in the section
51 :ref:`section_theory_dynamic`.
53 In case of linear of "slightly" non-linear operators, one can easily use the
54 :ref:`section_ref_algorithm_ExtendedKalmanFilter` or even the
55 :ref:`section_ref_algorithm_KalmanFilter`, which are often far less expensive
56 to evaluate on small systems. One can verify the linearity of the operators
57 with the help of the :ref:`section_ref_algorithm_LinearityTest`.
59 There are many deterministic or stochastic variants of this algorithm, allowing
60 in particular to perform size reduction of algebraic problems at different
61 levels (by using reduced rank methods, dimension reduction, changes of
62 computational space, leading to schemes of type Ensemble Square Root Kalman
63 Filters (EnSRKF) or Reduced-Rank Square Root Filters (RRSQRT), to deterministic
64 transformations...). We do not go into the complex details of classifications
65 and algorithmic equivalences, which are available in the literature. The
66 following stable and robust formulations are proposed here:
71 pair: Variant ; ETKF-N
74 pair: Variant ; E3DVAR
75 pair: Variant ; 3D-Var-Ben
77 pair: Variant ; EnSRKF
78 pair: Variant ; RRSQRT
80 - "EnKF" (Ensemble Kalman Filter, see [Evensen94]_), original stochastic algorithm, allowing consistent treatment of non-linear evolution operator,
81 - "ETKF" (Ensemble-Transform Kalman Filter), deterministic EnKF algorithm, allowing treatment of non-linear evolution operator with a lot less members (one recommends to use a number of members on the order of 10 or even sometimes less),
82 - "ETKF-N" (Ensemble-Transform Kalman Filter of finite size N), ETKF algorithm of "finite size N", that doesn't need inflation that is often required with the other algorithms,
83 - "MLEF" (Maximum Likelihood Kalman Filter, see [Zupanski05]_), deterministic EnKF algorithm, allowing in addition the consistent treatment of non-linear observation operator,
84 - "IEnKF" (Iterative EnKF), deterministic EnKF algorithm, improving treament of operators non-linearities,
85 - "E3DVAR" (EnKF 3DVAR, or 3D-Var-Ben), algorithm coupling ensemble and variational assimilation, which uses in parallel a 3DVAR variational assimilation for a single best estimate and an EnKF ensemble algorithm to improve the estimation of *a posteriori* error covariances,
86 - "EnKS" (Ensemble Kalman Smoother), smoothing algorithm with a fixed time lag L.
88 Without being a universal recommendation, one recommend to use "EnKF"
89 formulation as a reference algorithm, **"ETKF-N" ou "IEnKF" formulation for
90 robust performance**, and the other algorithms (in this order) as means to
91 obtain a less costly data assimilation with (hopefully) the same quality.
93 .. ------------------------------------ ..
94 .. include:: snippets/Header2Algo12.rst
96 .. include:: snippets/FeaturePropLocalOptimization.rst
98 .. include:: snippets/FeaturePropDerivativeFree.rst
100 .. include:: snippets/FeaturePropParallelAlgorithm.rst
102 .. ------------------------------------ ..
103 .. include:: snippets/Header2Algo02.rst
105 .. include:: snippets/Background.rst
107 .. include:: snippets/BackgroundError.rst
109 .. include:: snippets/EvolutionError.rst
111 .. include:: snippets/EvolutionModel.rst
113 .. include:: snippets/Observation.rst
115 .. include:: snippets/ObservationError.rst
117 .. include:: snippets/ObservationOperator.rst
119 .. ------------------------------------ ..
120 .. include:: snippets/Header2Algo03AdOp.rst
122 .. include:: snippets/EstimationOf_State.rst
124 .. include:: snippets/HybridCostDecrementTolerance.rst
126 .. include:: snippets/HybridCovarianceEquilibrium.rst
128 .. include:: snippets/HybridMaximumNumberOfIterations.rst
130 .. include:: snippets/InflationFactor.rst
132 .. include:: snippets/InflationType.rst
134 .. include:: snippets/NumberOfMembers.rst
136 .. include:: snippets/SetSeed.rst
138 .. include:: snippets/SmootherLagL.rst
140 StoreSupplementaryCalculations
141 .. index:: single: StoreSupplementaryCalculations
143 *List of names*. This list indicates the names of the supplementary
144 variables, that can be available during or at the end of the algorithm, if
145 they are initially required by the user. Their availability involves,
146 potentially, costly calculations or memory consumptions. The default is then
147 a void list, none of these variables being calculated and stored by default
148 (excepted the unconditional variables). The possible names are in the
149 following list (the detailed description of each named variable is given in
150 the following part of this specific algorithmic documentation, in the
151 sub-section "*Information and variables available at the end of the
154 "APosterioriCorrelations",
155 "APosterioriCovariance",
156 "APosterioriStandardDeviations",
157 "APosterioriVariances",
160 "CostFunctionJAtCurrentOptimum",
162 "CostFunctionJbAtCurrentOptimum",
164 "CostFunctionJoAtCurrentOptimum",
165 "CurrentIterationNumber",
168 "ForecastCovariance",
171 "InnovationAtCurrentAnalysis",
172 "InnovationAtCurrentState",
173 "SimulatedObservationAtCurrentAnalysis",
174 "SimulatedObservationAtCurrentOptimum",
175 "SimulatedObservationAtCurrentState",
179 ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
181 .. include:: snippets/Variant_EnKF.rst
183 .. ------------------------------------ ..
184 .. include:: snippets/Header2Algo04.rst
186 .. include:: snippets/Analysis.rst
188 .. ------------------------------------ ..
189 .. include:: snippets/Header2Algo05.rst
191 .. include:: snippets/Analysis.rst
193 .. include:: snippets/APosterioriCorrelations.rst
195 .. include:: snippets/APosterioriCovariance.rst
197 .. include:: snippets/APosterioriStandardDeviations.rst
199 .. include:: snippets/APosterioriVariances.rst
201 .. include:: snippets/BMA.rst
203 .. include:: snippets/CostFunctionJ.rst
205 .. include:: snippets/CostFunctionJAtCurrentOptimum.rst
207 .. include:: snippets/CostFunctionJb.rst
209 .. include:: snippets/CostFunctionJbAtCurrentOptimum.rst
211 .. include:: snippets/CostFunctionJo.rst
213 .. include:: snippets/CostFunctionJoAtCurrentOptimum.rst
215 .. include:: snippets/CurrentIterationNumber.rst
217 .. include:: snippets/CurrentOptimum.rst
219 .. include:: snippets/CurrentState.rst
221 .. include:: snippets/ForecastCovariance.rst
223 .. include:: snippets/ForecastState.rst
225 .. include:: snippets/IndexOfOptimum.rst
227 .. include:: snippets/InnovationAtCurrentAnalysis.rst
229 .. include:: snippets/InnovationAtCurrentState.rst
231 .. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
233 .. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
235 .. include:: snippets/SimulatedObservationAtCurrentState.rst
237 .. ------------------------------------ ..
238 .. _section_ref_algorithm_EnsembleKalmanFilter_examples:
240 .. include:: snippets/Header2Algo06.rst
242 - :ref:`section_ref_algorithm_KalmanFilter`
243 - :ref:`section_ref_algorithm_ExtendedKalmanFilter`
244 - :ref:`section_ref_algorithm_UnscentedKalmanFilter`
246 .. ------------------------------------ ..
247 .. include:: snippets/Header2Algo07.rst