]> SALOME platform Git repositories - modules/adao.git/blob - src/tests/daComposant/Plateforme/test007_Blue.py
Salome HOME
- Nouvelle version de Jean-Philippe ARGAUD
[modules/adao.git] / src / tests / daComposant / Plateforme / test007_Blue.py
1 #-*-coding:iso-8859-1-*-
2 __doc__ = """
3     Cas-test vérifiant les relations d'ordre attendues sur les écarts RMS entre
4     les valeurs analysees et la valeur vraie, pour 3 analyses BLUE réalisées
5     avec des poids extrêmes dans R et B
6 """
7 __author__ = "Sophie RICCI, Jean-Philippe ARGAUD - Septembre 2008"
8
9 import numpy
10 from daCore.AssimilationStudy import AssimilationStudy
11
12 #===============================================================================
13 def test(dimension = 3):
14     """
15     Cas-test vérifiant les relations d'ordre attendues sur les écarts RMS entre
16     les valeurs analysees et la valeur vraie, pour 3 analyses BLUE réalisées
17     avec des poids extrêmes dans R et B
18     """
19     print test.__doc__
20     #
21     # Définition des données
22     # ----------------------
23     xt = numpy.matrix(numpy.random.normal(0.,1.,size=(dimension,))).T
24     Eb = numpy.matrix(numpy.random.normal(0.,1.,size=(dimension,))).T
25     H  = numpy.matrix(numpy.core.identity(dimension))
26     B  = numpy.matrix(numpy.core.identity(dimension)).T
27     xb = xt + Eb
28     yo = H * xt
29     xt = xt.A1
30     xb = xb.A1
31     yo = yo.A1
32     #
33     # Analyse BLUE
34     # ------------
35     ADD = AssimilationStudy()
36     ADD.setBackground         (asVector     = xb )
37     ADD.setObservation        (asVector     = yo )
38     ADD.setBackgroundError    (asCovariance = B )
39     ADD.setObservationOperator(asMatrix     = H )
40     ADD.setControls()
41     ADD.setAlgorithm(choice="Blue")
42     #
43     # Définition des matrices de covariances d'erreur : ébauche parfaite
44     # ------------------------------------------------------------------
45     alpha1 = 10000.0
46     R  = alpha1 * B
47     ADD.setObservationError   (asCovariance = R )
48     ADD.analyze()
49     x1 = ADD.get("Analysis").valueserie(0)
50     #
51     # Définition des matrices de covariances d'erreurs : poids identiques
52     # -------------------------------------------------------------------
53     alpha2 = 1.0
54     R  = alpha2 * B
55     ADD.setObservationError   (asCovariance = R )
56     ADD.analyze()
57     x2 = ADD.get("Analysis").valueserie(1)
58     #
59     # Définition des matrices de covariances d'erreurs : observations parfaites
60     # -------------------------------------------------------------------------
61     alpha3 = 0.0001
62     R  = alpha3 * B
63     ADD.setObservationError   (asCovariance = R )
64     ADD.analyze()
65     x3 = ADD.get("Analysis").valueserie(2)
66     #
67     # Calcul des écarts RMS
68     # ---------------------
69     ADD.setDiagnostic("RMS", "Calcul de la RMS entre analyse et yo")
70     RMS = ADD.get("Calcul de la RMS entre analyse et yo")
71     #
72     RMS.calculate(x1,yo)
73     RMS.calculate(x2,yo)
74     RMS.calculate(x3,yo)
75     RMS_yo_x1 = RMS.valueserie(0)
76     RMS_yo_x2 = RMS.valueserie(1)
77     RMS_yo_x3 = RMS.valueserie(2)
78     #
79     print "    Cas ébauche parfaite       : R/B = %.1e"%alpha1,"RMS = %.7f"%RMS_yo_x1
80     print "    Cas poids identiques       : R/B = %.1e"%alpha2,"RMS = %.7f"%RMS_yo_x2
81     print "    Cas observations parfaites : R/B = %.1e"%alpha3,"RMS = %.7f"%RMS_yo_x3
82     if ( (RMS_yo_x3 <= RMS_yo_x2) and  (RMS_yo_x2 <= RMS_yo_x1) ) :
83         print "    La reponse de l'assimilation est cohérente avec la modification du rapport B/R."
84         print
85         print "    Test correct"
86         print
87     else :
88         raise ValueError("Résultat du test erroné")
89
90 #===============================================================================
91 if __name__ == "__main__":
92
93     print
94     print "AUTODIAGNOSTIC"
95     print "=============="
96     numpy.random.seed(1000)
97     
98     test(dimension = 100)