Salome HOME
Documentation update with features and review corrections
[modules/adao.git] / doc / en / ref_algorithm_EnsembleKalmanFilter.rst
1 ..
2    Copyright (C) 2008-2024 EDF R&D
3
4    This file is part of SALOME ADAO module.
5
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.
10
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.
15
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
19
20    See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
22    Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
23
24 .. index:: single: EnsembleKalmanFilter
25 .. _section_ref_algorithm_EnsembleKalmanFilter:
26
27 Calculation algorithm "*EnsembleKalmanFilter*"
28 ----------------------------------------------
29
30 .. ------------------------------------ ..
31 .. include:: snippets/Header2Algo01.rst
32
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.
37
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.
44
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`.
52
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`.
58
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:
67
68 .. index::
69     pair: Variant ; EnKF
70     pair: Variant ; ETKF
71     pair: Variant ; ETKF-N
72     pair: Variant ; MLEF
73     pair: Variant ; IEnKF
74     pair: Variant ; E3DVAR
75     pair: Variant ; 3D-Var-Ben
76     pair: Variant ; EnKS
77     pair: Variant ; EnSRKF
78     pair: Variant ; RRSQRT
79
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.
87
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.
92
93 .. ------------------------------------ ..
94 .. include:: snippets/Header2Algo12.rst
95
96 .. include:: snippets/FeaturePropLocalOptimization.rst
97
98 .. include:: snippets/FeaturePropDerivativeFree.rst
99
100 .. include:: snippets/FeaturePropParallelAlgorithm.rst
101
102 .. ------------------------------------ ..
103 .. include:: snippets/Header2Algo02.rst
104
105 .. include:: snippets/Background.rst
106
107 .. include:: snippets/BackgroundError.rst
108
109 .. include:: snippets/EvolutionError.rst
110
111 .. include:: snippets/EvolutionModel.rst
112
113 .. include:: snippets/Observation.rst
114
115 .. include:: snippets/ObservationError.rst
116
117 .. include:: snippets/ObservationOperator.rst
118
119 .. ------------------------------------ ..
120 .. include:: snippets/Header2Algo03AdOp.rst
121
122 .. include:: snippets/EstimationOf_State.rst
123
124 .. include:: snippets/HybridCostDecrementTolerance.rst
125
126 .. include:: snippets/HybridCovarianceEquilibrium.rst
127
128 .. include:: snippets/HybridMaximumNumberOfIterations.rst
129
130 .. include:: snippets/InflationFactor.rst
131
132 .. include:: snippets/InflationType.rst
133
134 .. include:: snippets/NumberOfMembers.rst
135
136 .. include:: snippets/SetSeed.rst
137
138 .. include:: snippets/SmootherLagL.rst
139
140 StoreSupplementaryCalculations
141   .. index:: single: StoreSupplementaryCalculations
142
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
152   algorithm*"): [
153   "Analysis",
154   "APosterioriCorrelations",
155   "APosterioriCovariance",
156   "APosterioriStandardDeviations",
157   "APosterioriVariances",
158   "BMA",
159   "CostFunctionJ",
160   "CostFunctionJAtCurrentOptimum",
161   "CostFunctionJb",
162   "CostFunctionJbAtCurrentOptimum",
163   "CostFunctionJo",
164   "CostFunctionJoAtCurrentOptimum",
165   "CurrentIterationNumber",
166   "CurrentOptimum",
167   "CurrentState",
168   "ForecastCovariance",
169   "ForecastState",
170   "IndexOfOptimum",
171   "InnovationAtCurrentAnalysis",
172   "InnovationAtCurrentState",
173   "SimulatedObservationAtCurrentAnalysis",
174   "SimulatedObservationAtCurrentOptimum",
175   "SimulatedObservationAtCurrentState",
176   ].
177
178   Example :
179   ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
180
181 .. include:: snippets/Variant_EnKF.rst
182
183 .. ------------------------------------ ..
184 .. include:: snippets/Header2Algo04.rst
185
186 .. include:: snippets/Analysis.rst
187
188 .. ------------------------------------ ..
189 .. include:: snippets/Header2Algo05.rst
190
191 .. include:: snippets/Analysis.rst
192
193 .. include:: snippets/APosterioriCorrelations.rst
194
195 .. include:: snippets/APosterioriCovariance.rst
196
197 .. include:: snippets/APosterioriStandardDeviations.rst
198
199 .. include:: snippets/APosterioriVariances.rst
200
201 .. include:: snippets/BMA.rst
202
203 .. include:: snippets/CostFunctionJ.rst
204
205 .. include:: snippets/CostFunctionJAtCurrentOptimum.rst
206
207 .. include:: snippets/CostFunctionJb.rst
208
209 .. include:: snippets/CostFunctionJbAtCurrentOptimum.rst
210
211 .. include:: snippets/CostFunctionJo.rst
212
213 .. include:: snippets/CostFunctionJoAtCurrentOptimum.rst
214
215 .. include:: snippets/CurrentIterationNumber.rst
216
217 .. include:: snippets/CurrentOptimum.rst
218
219 .. include:: snippets/CurrentState.rst
220
221 .. include:: snippets/ForecastCovariance.rst
222
223 .. include:: snippets/ForecastState.rst
224
225 .. include:: snippets/IndexOfOptimum.rst
226
227 .. include:: snippets/InnovationAtCurrentAnalysis.rst
228
229 .. include:: snippets/InnovationAtCurrentState.rst
230
231 .. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
232
233 .. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
234
235 .. include:: snippets/SimulatedObservationAtCurrentState.rst
236
237 .. ------------------------------------ ..
238 .. _section_ref_algorithm_EnsembleKalmanFilter_examples:
239
240 .. include:: snippets/Header2Algo06.rst
241
242 - :ref:`section_ref_algorithm_KalmanFilter`
243 - :ref:`section_ref_algorithm_ExtendedKalmanFilter`
244 - :ref:`section_ref_algorithm_UnscentedKalmanFilter`
245
246 .. ------------------------------------ ..
247 .. include:: snippets/Header2Algo07.rst
248
249 - [Evensen94]_
250 - [Burgers98]_
251 - [Bishop01]_
252 - [Evensen03]_
253 - [Zupanski05]_
254 - [Hamill00]_
255 - [WikipediaEnKF]_