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: 3DVAR
25 .. index:: single: 3D-Var
26 .. _section_ref_algorithm_3DVAR:
28 Algorithme de calcul "*3DVAR*"
29 ------------------------------
31 .. ------------------------------------ ..
32 .. include:: snippets/Header2Algo01.rst
34 Cet algorithme réalise une estimation d'état par minimisation variationnelle de
35 la fonctionnelle :math:`J` d'écart classique en assimilation de données
38 .. 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}))
40 qui est usuellement désignée comme la fonctionnelle "*3D-Var*" (voir par
41 exemple [Talagrand97]_). Les dénominations "*3D-Var*", "*3D-VAR*" et "*3DVAR*"
44 Il existe diverses variantes de cet algorithme. On propose ici les formulations
45 stables et robustes suivantes :
49 pair: Variant ; 3DVAR-VAN
50 pair: Variant ; 3DVAR-Incr
51 pair: Variant ; 3DVAR-PSAS
53 pair: Variant ; Optimal Interpolation
55 - "3DVAR" (3D Variational analysis, voir [Lorenc86]_, [LeDimet86]_, [Talagrand97]_), algorithme classique d'origine, extrêmement robuste, opérant dans l'espace du modèle,
56 - "3DVAR-VAN" (3D Variational Analysis with No inversion of B, voir [Lorenc88]_), algorithme similaire, opérant dans l'espace du modèle, permettant d'éviter l'inversion de la matrice de covariance B (sauf dans le cas où il y des bornes),
57 - "3DVAR-Incr" (Incremental 3DVAR, voir [Courtier94]_), algorithme plus économique que les précédents, impliquant une approximation des opérateurs non-linéaires,
58 - "3DVAR-PSAS" (Physical-space Statistical Analysis Scheme for 3DVAR, voir [Courtier97]_, [Cohn98]_), algorithme parfois plus économique car opérant dans l'espace des observations, impliquant une approximation des opérateurs non-linéaires, ne permettant pas la prise en compte de bornes.
60 On recommande fortement d'utiliser le "3DVAR" d'origine. Les algorithmes
61 "3DVAR" et "3DVAR-Incr" (et pas les autres) permettent explicitement la
62 modification du point initial de leur minimisation, même si ce n'est pas
65 Cet algorithme d'optimisation mono-objectif est naturellement écrit pour une
66 estimation unique, sans notion dynamique ou itérative (il n'y a donc pas besoin
67 dans ce cas d'opérateur d'évolution incrémentale, ni de covariance d'erreurs
68 d'évolution). Dans le cadre traditionnel de l'assimilation de données
69 temporelle ou itérative que traite ADAO, il peut aussi être utilisé sur une
70 succession d'observations, plaçant alors l'estimation dans un cadre récursif
71 similaire à un :ref:`section_ref_algorithm_KalmanFilter`. Une estimation
72 standard "*3D-VAR*" est effectuée à chaque pas d'observation sur l'état prévu
73 par le modèle d'évolution incrémentale, sachant que la covariance d'erreur
74 d'état reste la covariance d'ébauche initialement fournie par l'utilisateur.
75 Pour être explicite, contrairement aux filtres de type Kalman, la covariance
76 d'erreurs sur les états n'est pas remise à jour.
78 Une extension du 3DVAR, couplant en parallèle une méthode 3DVAR, pour
79 l'estimation d'un unique meilleur état, avec un filtre de Kalman d'ensemble
80 pour l'estimation des covariances d'erreurs, permet d'améliorer l'estimation de
81 ces covariances d'erreurs *a posteriori*. On atteint cette extension en
82 utilisant le variant "E3DVAR" de l'algorithme de filtrage
83 :ref:`section_ref_algorithm_EnsembleKalmanFilter`.
85 On remarque que les statistiques d'erreurs d'observation et d'évolution sont
86 par hypothèse représentées ici sous forme gaussienne. Alors, dans le cas
87 particulier où l'opérateur d'observation :math:`H` est linéaire, cet algorithme
88 est strictement équivalent à l'interpolation optimale (OI ou "*Optimal
89 Interpolation*"). De plus, il réalise à la fois l'estimation de variance
90 minimale (MV ou "*Minimum Variance* estimator") et l'estimation de maximum a
91 posteriori (MAP ou "*Maximum A Posteriori* estimator"), qui coïncident dans ce
94 .. ------------------------------------ ..
95 .. include:: snippets/Header2Algo12.rst
97 .. include:: snippets/FeaturePropNonLocalOptimization.rst
99 .. include:: snippets/FeaturePropDerivativeNeeded.rst
101 .. include:: snippets/FeaturePropParallelDerivativesOnly.rst
103 .. include:: snippets/FeaturePropConvergenceOnBoth.rst
105 .. ------------------------------------ ..
106 .. include:: snippets/Header2Algo02.rst
108 .. include:: snippets/Background.rst
110 .. include:: snippets/BackgroundError.rst
112 .. include:: snippets/Observation.rst
114 .. include:: snippets/ObservationError.rst
116 .. include:: snippets/ObservationOperator.rst
118 .. ------------------------------------ ..
119 .. include:: snippets/Header2Algo03AdOp.rst
121 .. include:: snippets/BoundsWithNone.rst
123 .. include:: snippets/CostDecrementTolerance.rst
125 .. include:: snippets/EstimationOf_Parameters.rst
127 .. include:: snippets/GradientNormTolerance.rst
129 .. include:: snippets/InitializationPoint.rst
131 .. include:: snippets/MaximumNumberOfIterations.rst
133 .. include:: snippets/Minimizer_xDVAR.rst
135 .. include:: snippets/NumberOfSamplesForQuantiles.rst
137 .. include:: snippets/ProjectedGradientTolerance.rst
139 .. include:: snippets/Quantiles.rst
141 .. include:: snippets/SetSeed.rst
143 .. include:: snippets/SimulationForQuantiles.rst
145 .. include:: snippets/StateBoundsForQuantilesWithNone.rst
147 StoreSupplementaryCalculations
148 .. index:: single: StoreSupplementaryCalculations
150 *Liste de noms*. Cette liste indique les noms des variables supplémentaires,
151 qui peuvent être disponibles au cours du déroulement ou à la fin de
152 l'algorithme, si elles sont initialement demandées par l'utilisateur. Leur
153 disponibilité implique, potentiellement, des calculs ou du stockage coûteux.
154 La valeur par défaut est donc une liste vide, aucune de ces variables n'étant
155 calculée et stockée par défaut (sauf les variables inconditionnelles). Les
156 noms possibles pour les variables supplémentaires sont dans la liste suivante
157 (la description détaillée de chaque variable nommée est donnée dans la suite
158 de cette documentation par algorithme spécifique, dans la sous-partie
159 "*Informations et variables disponibles à la fin de l'algorithme*") : [
161 "APosterioriCorrelations",
162 "APosterioriCovariance",
163 "APosterioriStandardDeviations",
164 "APosterioriVariances",
167 "CostFunctionJAtCurrentOptimum",
169 "CostFunctionJbAtCurrentOptimum",
171 "CostFunctionJoAtCurrentOptimum",
172 "CurrentIterationNumber",
179 "InnovationAtCurrentAnalysis",
180 "InnovationAtCurrentState",
181 "JacobianMatrixAtBackground",
182 "JacobianMatrixAtOptimum",
183 "KalmanGainAtOptimum",
184 "MahalanobisConsistency",
187 "SampledStateForQuantiles",
189 "SimulatedObservationAtBackground",
190 "SimulatedObservationAtCurrentOptimum",
191 "SimulatedObservationAtCurrentState",
192 "SimulatedObservationAtOptimum",
193 "SimulationQuantiles",
197 ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
199 .. include:: snippets/Variant_3DVAR.rst
201 .. ------------------------------------ ..
202 .. include:: snippets/Header2Algo04.rst
204 .. include:: snippets/Analysis.rst
206 .. include:: snippets/CostFunctionJ.rst
208 .. include:: snippets/CostFunctionJb.rst
210 .. include:: snippets/CostFunctionJo.rst
212 .. ------------------------------------ ..
213 .. include:: snippets/Header2Algo05.rst
215 .. include:: snippets/Analysis.rst
217 .. include:: snippets/APosterioriCorrelations.rst
219 .. include:: snippets/APosterioriCovariance.rst
221 .. include:: snippets/APosterioriStandardDeviations.rst
223 .. include:: snippets/APosterioriVariances.rst
225 .. include:: snippets/BMA.rst
227 .. include:: snippets/CostFunctionJ.rst
229 .. include:: snippets/CostFunctionJAtCurrentOptimum.rst
231 .. include:: snippets/CostFunctionJb.rst
233 .. include:: snippets/CostFunctionJbAtCurrentOptimum.rst
235 .. include:: snippets/CostFunctionJo.rst
237 .. include:: snippets/CostFunctionJoAtCurrentOptimum.rst
239 .. include:: snippets/CurrentIterationNumber.rst
241 .. include:: snippets/CurrentOptimum.rst
243 .. include:: snippets/CurrentState.rst
245 .. include:: snippets/CurrentStepNumber.rst
247 .. include:: snippets/ForecastState.rst
249 .. include:: snippets/IndexOfOptimum.rst
251 .. include:: snippets/Innovation.rst
253 .. include:: snippets/InnovationAtCurrentAnalysis.rst
255 .. include:: snippets/InnovationAtCurrentState.rst
257 .. include:: snippets/JacobianMatrixAtBackground.rst
259 .. include:: snippets/JacobianMatrixAtOptimum.rst
261 .. include:: snippets/KalmanGainAtOptimum.rst
263 .. include:: snippets/MahalanobisConsistency.rst
265 .. include:: snippets/OMA.rst
267 .. include:: snippets/OMB.rst
269 .. include:: snippets/SampledStateForQuantiles.rst
271 .. include:: snippets/SigmaObs2.rst
273 .. include:: snippets/SimulatedObservationAtBackground.rst
275 .. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
277 .. include:: snippets/SimulatedObservationAtCurrentState.rst
279 .. include:: snippets/SimulatedObservationAtOptimum.rst
281 .. include:: snippets/SimulationQuantiles.rst
283 .. ------------------------------------ ..
284 .. _section_ref_algorithm_3DVAR_examples:
286 .. include:: snippets/Header2Algo09.rst
289 .. include:: scripts/simple_3DVAR1.rst
291 .. literalinclude:: scripts/simple_3DVAR1.py
293 .. include:: snippets/Header2Algo10.rst
295 .. literalinclude:: scripts/simple_3DVAR1.res
298 .. include:: snippets/Header2Algo11.rst
301 .. image:: scripts/simple_3DVAR1.png
305 .. include:: scripts/simple_3DVAR1Plus.rst
307 .. _simple_3DVAR1Plus:
308 .. image:: scripts/simple_3DVAR1Plus.png
313 .. include:: scripts/simple_3DVAR2.rst
315 .. literalinclude:: scripts/simple_3DVAR2.py
317 .. include:: snippets/Header2Algo10.rst
319 .. literalinclude:: scripts/simple_3DVAR2.res
322 .. include:: snippets/Header2Algo11.rst
324 .. _simple_3DVAR2_state:
325 .. image:: scripts/simple_3DVAR2_state.png
329 .. simple_3DVAR2_variance:
330 .. image:: scripts/simple_3DVAR2_variance.png
335 .. include:: scripts/simple_3DVAR3.rst
337 .. literalinclude:: scripts/simple_3DVAR3.py
339 .. include:: snippets/Header2Algo10.rst
341 .. literalinclude:: scripts/simple_3DVAR3.res
344 .. include:: snippets/Header2Algo11.rst
346 .. _simple_3DVAR3_state:
347 .. image:: scripts/simple_3DVAR3_state.png
351 .. _simple_3DVAR3_variance:
352 .. image:: scripts/simple_3DVAR3_variance.png
356 .. ------------------------------------ ..
357 .. include:: snippets/Header2Algo06.rst
359 - :ref:`section_ref_algorithm_Blue`
360 - :ref:`section_ref_algorithm_ExtendedBlue`
361 - :ref:`section_ref_algorithm_KalmanFilter`
362 - :ref:`section_ref_algorithm_LinearityTest`
364 .. ------------------------------------ ..
365 .. include:: snippets/Header2Algo07.rst