]> SALOME platform Git repositories - modules/adao.git/blob - doc/en/ref_algorithm_3DVAR.rst
Salome HOME
Minor source update for OM compatibility
[modules/adao.git] / doc / en / ref_algorithm_3DVAR.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: 3DVAR
25 .. index:: single: 3D-Var
26 .. _section_ref_algorithm_3DVAR:
27
28 Calculation algorithm "*3DVAR*"
29 -------------------------------
30
31 .. ------------------------------------ ..
32 .. include:: snippets/Header2Algo01.rst
33
34 This algorithm performs a state estimation by variational minimization of the
35 classical :math:`J` function in static data assimilation:
36
37 .. math:: J(\mathbf{x})=(\mathbf{x}-\mathbf{x}^b)^T.\mathbf{B}^{-1}.(\mathbf{x}-\mathbf{x}^b)+(\mathbf{y}^o-H(\mathbf{x}))^T.\mathbf{R}^{-1}.(\mathbf{y}^o-H(\mathbf{x}))
38
39 which is usually designed as the "*3D-Var*" function (see for example
40 [Talagrand97]_). The terms "*3D-Var*", "*3D-VAR*" and "*3DVAR*" are equivalent.
41
42 There exists various variants of this algorithm. The following stable and
43 robust formulations are proposed here:
44
45 .. index::
46     pair: Variant ; 3DVAR
47     pair: Variant ; 3DVAR-VAN
48     pair: Variant ; 3DVAR-Incr
49     pair: Variant ; 3DVAR-PSAS
50     pair: Variant ; OI
51     pair: Variant ; Optimal Interpolation
52
53 - "3DVAR" (3D Variational analysis, see [Lorenc86]_, [LeDimet86]_, [Talagrand97]_), original classical algorithm, extremely robust, which operates in the model space,
54 - "3DVAR-VAN" (3D Variational Analysis with No inversion of B, see [Lorenc88]_), similar algorithm, which operates in the model space, avoiding inversion of the covariance matrix B (except in the case where there are bounds.),
55 - "3DVAR-Incr" (Incremental 3DVAR, see [Courtier94]_), cheaper algorithm than the previous ones, involving an approximation of non-linear operators,
56 - "3DVAR-PSAS" (Physical-space Statistical Analysis Scheme for 3DVAR, see [Courtier97]_, [Cohn98]_), algorithm sometimes cheaper because it operates in the observation space, involving an approximation of non-linear operators, not allowing to take into account bounds.
57
58 It is highly recommended to use the original "3DVAR". The "3DVAR" and
59 "3DVAR-Incr" algorithms (and not the others) explicitly allow the modification
60 of the initial point of their minimization, even if it is not recommended.
61
62 This mono-objective optimization algorithm is naturally written for a single
63 estimate, without any dynamic or iterative notion (there is no need in this
64 case for an incremental evolution operator, nor for an evolution error
65 covariance). In the traditional framework of temporal or iterative data
66 assimilation that ADAO deals with, it can also be used on a succession of
67 observations, placing the estimate in a recursive framework similar to a
68 :ref:`section_ref_algorithm_KalmanFilter`. A standard estimate is made at each
69 observation step on the state predicted by the incremental evolution model,
70 knowing that the state error covariance remains the background covariance
71 initially provided by the user. To be explicit, unlike Kalman-type filters, the
72 state error covariance is not updated.
73
74 An extension of 3DVAR, coupling a "3DVAR" method with a Kalman ensemble filter,
75 allows to improve the estimation of *a posteriori* error covariances. This
76 extension is obtained by using the "E3DVAR" variant of the filtering algorithm
77 :ref:`section_ref_algorithm_EnsembleKalmanFilter`.
78
79 Note that observation and evolution error statistics are assumed to be
80 Gaussian. So, in the particular case where the observation operator :math:`H`
81 is linear, this algorithm is strictly equivalent to optimal interpolation (OI).
82 What's more, it performs both minimum variance estimation (MV or "*Minimum
83 Variance* estimator") and maximum a posteriori estimation (MAP or "*Maximum A
84 Posteriori* estimator"), which coincide in this particular case.
85
86 .. ------------------------------------ ..
87 .. include:: snippets/Header2Algo12.rst
88
89 .. include:: snippets/FeaturePropNonLocalOptimization.rst
90
91 .. include:: snippets/FeaturePropDerivativeNeeded.rst
92
93 .. include:: snippets/FeaturePropParallelDerivativesOnly.rst
94
95 .. include:: snippets/FeaturePropConvergenceOnBoth.rst
96
97 .. ------------------------------------ ..
98 .. include:: snippets/Header2Algo02.rst
99
100 .. include:: snippets/Background.rst
101
102 .. include:: snippets/BackgroundError.rst
103
104 .. include:: snippets/Observation.rst
105
106 .. include:: snippets/ObservationError.rst
107
108 .. include:: snippets/ObservationOperator.rst
109
110 .. ------------------------------------ ..
111 .. include:: snippets/Header2Algo03AdOp.rst
112
113 .. include:: snippets/BoundsWithNone.rst
114
115 .. include:: snippets/CostDecrementTolerance.rst
116
117 .. include:: snippets/EstimationOf_Parameters.rst
118
119 .. include:: snippets/GradientNormTolerance.rst
120
121 .. include:: snippets/InitializationPoint.rst
122
123 .. include:: snippets/MaximumNumberOfIterations.rst
124
125 .. include:: snippets/Minimizer_xDVAR.rst
126
127 .. include:: snippets/NumberOfSamplesForQuantiles.rst
128
129 .. include:: snippets/ProjectedGradientTolerance.rst
130
131 .. include:: snippets/Quantiles.rst
132
133 .. include:: snippets/SetSeed.rst
134
135 .. include:: snippets/SimulationForQuantiles.rst
136
137 .. include:: snippets/StateBoundsForQuantilesWithNone.rst
138
139 StoreSupplementaryCalculations
140   .. index:: single: StoreSupplementaryCalculations
141
142   *List of names*. This list indicates the names of the supplementary
143   variables, that can be available during or at the end of the algorithm, if
144   they are initially required by the user. Their availability involves,
145   potentially, costly calculations or memory consumptions. The default is then
146   a void list, none of these variables being calculated and stored by default
147   (excepted the unconditional variables). The possible names are in the
148   following list (the detailed description of each named variable is given in
149   the following part of this specific algorithmic documentation, in the
150   sub-section "*Information and variables available at the end of the
151   algorithm*"): [
152   "Analysis",
153   "APosterioriCorrelations",
154   "APosterioriCovariance",
155   "APosterioriStandardDeviations",
156   "APosterioriVariances",
157   "BMA",
158   "CostFunctionJ",
159   "CostFunctionJAtCurrentOptimum",
160   "CostFunctionJb",
161   "CostFunctionJbAtCurrentOptimum",
162   "CostFunctionJo",
163   "CostFunctionJoAtCurrentOptimum",
164   "CurrentIterationNumber",
165   "CurrentOptimum",
166   "CurrentState",
167   "CurrentStepNumber",
168   "ForecastState",
169   "IndexOfOptimum",
170   "Innovation",
171   "InnovationAtCurrentAnalysis",
172   "InnovationAtCurrentState",
173   "JacobianMatrixAtBackground",
174   "JacobianMatrixAtOptimum",
175   "KalmanGainAtOptimum",
176   "MahalanobisConsistency",
177   "OMA",
178   "OMB",
179   "SampledStateForQuantiles",
180   "SigmaObs2",
181   "SimulatedObservationAtBackground",
182   "SimulatedObservationAtCurrentOptimum",
183   "SimulatedObservationAtCurrentState",
184   "SimulatedObservationAtOptimum",
185   "SimulationQuantiles",
186   ].
187
188   Example :
189   ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
190
191 .. include:: snippets/Variant_3DVAR.rst
192
193 .. ------------------------------------ ..
194 .. include:: snippets/Header2Algo04.rst
195
196 .. include:: snippets/Analysis.rst
197
198 .. include:: snippets/CostFunctionJ.rst
199
200 .. include:: snippets/CostFunctionJb.rst
201
202 .. include:: snippets/CostFunctionJo.rst
203
204 .. ------------------------------------ ..
205 .. include:: snippets/Header2Algo05.rst
206
207 .. include:: snippets/Analysis.rst
208
209 .. include:: snippets/APosterioriCorrelations.rst
210
211 .. include:: snippets/APosterioriCovariance.rst
212
213 .. include:: snippets/APosterioriStandardDeviations.rst
214
215 .. include:: snippets/APosterioriVariances.rst
216
217 .. include:: snippets/BMA.rst
218
219 .. include:: snippets/CostFunctionJ.rst
220
221 .. include:: snippets/CostFunctionJAtCurrentOptimum.rst
222
223 .. include:: snippets/CostFunctionJb.rst
224
225 .. include:: snippets/CostFunctionJbAtCurrentOptimum.rst
226
227 .. include:: snippets/CostFunctionJo.rst
228
229 .. include:: snippets/CostFunctionJoAtCurrentOptimum.rst
230
231 .. include:: snippets/CurrentIterationNumber.rst
232
233 .. include:: snippets/CurrentOptimum.rst
234
235 .. include:: snippets/CurrentState.rst
236
237 .. include:: snippets/CurrentStepNumber.rst
238
239 .. include:: snippets/ForecastState.rst
240
241 .. include:: snippets/IndexOfOptimum.rst
242
243 .. include:: snippets/Innovation.rst
244
245 .. include:: snippets/InnovationAtCurrentAnalysis.rst
246
247 .. include:: snippets/InnovationAtCurrentState.rst
248
249 .. include:: snippets/JacobianMatrixAtBackground.rst
250
251 .. include:: snippets/JacobianMatrixAtOptimum.rst
252
253 .. include:: snippets/KalmanGainAtOptimum.rst
254
255 .. include:: snippets/MahalanobisConsistency.rst
256
257 .. include:: snippets/OMA.rst
258
259 .. include:: snippets/OMB.rst
260
261 .. include:: snippets/SampledStateForQuantiles.rst
262
263 .. include:: snippets/SigmaObs2.rst
264
265 .. include:: snippets/SimulatedObservationAtBackground.rst
266
267 .. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
268
269 .. include:: snippets/SimulatedObservationAtCurrentState.rst
270
271 .. include:: snippets/SimulatedObservationAtOptimum.rst
272
273 .. include:: snippets/SimulationQuantiles.rst
274
275 .. ------------------------------------ ..
276 .. _section_ref_algorithm_3DVAR_examples:
277
278 .. include:: snippets/Header2Algo09.rst
279
280 .. --------- ..
281 .. include:: scripts/simple_3DVAR1.rst
282
283 .. literalinclude:: scripts/simple_3DVAR1.py
284
285 .. include:: snippets/Header2Algo10.rst
286
287 .. literalinclude:: scripts/simple_3DVAR1.res
288     :language: none
289
290 .. include:: snippets/Header2Algo11.rst
291
292 .. _simple_3DVAR1:
293 .. image:: scripts/simple_3DVAR1.png
294   :align: center
295   :width: 90%
296
297 .. include:: scripts/simple_3DVAR1Plus.rst
298
299 .. _simple_3DVAR1Plus:
300 .. image:: scripts/simple_3DVAR1Plus.png
301   :align: center
302   :width: 90%
303
304 .. --------- ..
305 .. include:: scripts/simple_3DVAR2.rst
306
307 .. literalinclude:: scripts/simple_3DVAR2.py
308
309 .. include:: snippets/Header2Algo10.rst
310
311 .. literalinclude:: scripts/simple_3DVAR2.res
312     :language: none
313
314 .. include:: snippets/Header2Algo11.rst
315
316 .. _simple_3DVAR2_state:
317 .. image:: scripts/simple_3DVAR2_state.png
318   :align: center
319   :width: 90%
320
321 .. simple_3DVAR2_variance:
322 .. image:: scripts/simple_3DVAR2_variance.png
323   :align: center
324   :width: 90%
325
326 .. --------- ..
327 .. include:: scripts/simple_3DVAR3.rst
328
329 .. literalinclude:: scripts/simple_3DVAR3.py
330
331 .. include:: snippets/Header2Algo10.rst
332
333 .. literalinclude:: scripts/simple_3DVAR3.res
334     :language: none
335
336 .. include:: snippets/Header2Algo11.rst
337
338 .. _simple_3DVAR3_state:
339 .. image:: scripts/simple_3DVAR3_state.png
340   :align: center
341   :width: 90%
342
343 .. _simple_3DVAR3_variance:
344 .. image:: scripts/simple_3DVAR3_variance.png
345   :align: center
346   :width: 90%
347
348 .. ------------------------------------ ..
349 .. include:: snippets/Header2Algo06.rst
350
351 - :ref:`section_ref_algorithm_Blue`
352 - :ref:`section_ref_algorithm_ExtendedBlue`
353 - :ref:`section_ref_algorithm_KalmanFilter`
354 - :ref:`section_ref_algorithm_LinearityTest`
355
356 .. ------------------------------------ ..
357 .. include:: snippets/Header2Algo07.rst
358
359 - [Byrd95]_
360 - [Cohn98]_
361 - [Courtier94]_
362 - [LeDimet86]_
363 - [Lorenc86]_
364 - [Lorenc88]_
365 - [Morales11]_
366 - [Talagrand97]_
367 - [Zhu97]_