]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Improve checking of a posteriori covariance calculations
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 9 Aug 2012 12:27:53 +0000 (14:27 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 9 Aug 2012 12:27:53 +0000 (14:27 +0200)
src/daComposant/daAlgorithms/3DVAR.py
src/daComposant/daAlgorithms/Blue.py
src/daComposant/daAlgorithms/NonLinearLeastSquares.py

index 9cdced7d0b1910aef90f71a8c492fa53da07a41d..dbb710bb27a6473d0940d78b3fd2d1796551a748 100644 (file)
@@ -26,7 +26,7 @@ m = PlatformInfo.SystemUsage()
 import numpy
 import scipy.optimize
 
-if logging.getLogger().level < 30:
+if logging.getLogger().level < logging.WARNING:
     iprint  = 1
     message = scipy.optimize.tnc.MSG_ALL
     disp    = 1
@@ -276,16 +276,21 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Calcul de la covariance d'analyse
         # ---------------------------------
         if self._parameters["CalculateAPosterioriCovariance"]:
-            Hessienne = []
+            HessienneI = []
             nb = len(Xini)
             for i in range(nb):
                 _ee    = numpy.matrix(numpy.zeros(nb)).T
                 _ee[i] = 1.
                 _HmEE  = Hm(_ee)
                 _HmEE  = numpy.asmatrix(_HmEE).flatten().T
-                Hessienne.append( ( BI*_ee + Ha((Xa,RI*_HmEE)) ).A1 )
-            Hessienne = numpy.matrix( Hessienne )
-            A = Hessienne.I
+                HessienneI.append( ( BI*_ee + Ha((Xa,RI*_HmEE)) ).A1 )
+            HessienneI = numpy.matrix( HessienneI )
+            A = HessienneI.I
+            if logging.getLogger().level < logging.WARNING: # La verification n'a lieu qu'en debug
+                try:
+                    L = numpy.linalg.cholesky( A )
+                except:
+                    raise ValueError("The 3DVAR a posteriori covariance matrix A is not symmetric positive-definite. Check your B and R a priori covariances.")
             self.StoredVariables["APosterioriCovariance"].store( A )
         #
         logging.debug("%s Taille mémoire utilisée de %.1f Mo"%(self._name, m.getUsedMemory("MB")))
index 98995d57b57536e674b8bda16df6e74c76b6c23d..b15561177fd46adf5f81e9faff9c9d4ccf9b6a93 100644 (file)
@@ -119,7 +119,12 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Calcul de la covariance d'analyse
         # ---------------------------------
         if self._parameters["CalculateAPosterioriCovariance"]:
-            A = ( 1.0 -  K * Hm ) * B
+            A = B - K * Hm * B
+            if logging.getLogger().level < logging.WARNING: # La verification n'a lieu qu'en debug
+                try:
+                    L = numpy.linalg.cholesky( A )
+                except:
+                    raise ValueError("The BLUE a posteriori covariance matrix A is not symmetric positive-definite. Check your B and R a priori covariances.")
             self.StoredVariables["APosterioriCovariance"].store( A )
         #
         logging.debug("%s Taille mémoire utilisée de %.1f Mo"%(self._name, m.getUsedMemory("Mo")))
index 370922478831debc531c946bbf448072b279e5df..f77ab0165551f835277928a80bda6b0fb3c81893 100644 (file)
@@ -26,7 +26,7 @@ m = PlatformInfo.SystemUsage()
 import numpy
 import scipy.optimize
 
-if logging.getLogger().level < 30:
+if logging.getLogger().level < logging.WARNING:
     iprint  = 1
     message = scipy.optimize.tnc.MSG_ALL
     disp    = 1