]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Adding calculation precision information
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Tue, 10 Jan 2017 21:41:29 +0000 (22:41 +0100)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Tue, 10 Jan 2017 21:41:29 +0000 (22:41 +0100)
src/daComposant/daAlgorithms/AdjointTest.py
src/daComposant/daAlgorithms/FunctionTest.py
src/daComposant/daAlgorithms/GradientTest.py
src/daComposant/daAlgorithms/LinearityTest.py
src/daComposant/daAlgorithms/TangentTest.py
src/daComposant/daCore/PlatformInfo.py

index acb16eb84236cfcd0e63fddc9b27035468448e6c..49428a9fd6b0126d3183df720df04638f9fd0bf9 100644 (file)
@@ -21,8 +21,9 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 import logging
-from daCore import BasicObjects
+from daCore import BasicObjects, PlatformInfo
 import numpy
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
 
 # ==============================================================================
 class ElementaryAlgorithm(BasicObjects.Algorithm):
@@ -113,6 +114,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Entete des resultats
         # --------------------
         __marge =  12*" "
+        __precision = """
+            Remarque : les nombres inferieurs a %.0e (environ) representent un zero
+                       a la precision machine.\n"""%mpr
         if self._parameters["ResiduFormula"] == "ScalarProduct":
             __entete = "  i   Alpha     ||X||       ||Y||       ||dX||        R(Alpha)  "
             __msgdoc = """
@@ -123,10 +127,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             qui doit rester constamment egal a zero a la precision du calcul.
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
             Y doit etre dans l'image de F. S'il n'est pas donne, on prend Y = F(X).
-
-            Remarque : les nombres inferieurs a 1.e-16 (environ) representent un zero
-                       a la precision machine.
-            """
+            """ + __precision
         #
         if len(self._parameters["ResultTitle"]) > 0:
             msgs  = "\n"
index 20c5c72aa411e61683eaf1f836db7a6f25eb809c..828930ebba863adf45042ffc15d499d3648b75f7 100644 (file)
@@ -23,6 +23,7 @@
 import logging
 from daCore import BasicObjects, PlatformInfo
 import numpy, copy
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
 mfp = PlatformInfo.PlatformInfo().MaximumPrecision()
 
 # ==============================================================================
@@ -143,7 +144,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         if self._parameters["NumberOfRepetition"] > 1:
             msg  = ("     %s\n"%("-"*75,))
             msg += ("\n===> Statistical analysis of the outputs obtained throught repeated evaluations\n")
-            msg += ("\n     (Remark: numbers that are (about) under 1.e-16 represent 0 to machine precision)\n")
+            msg += ("\n     (Remark: numbers that are (about) under %.0e represent 0 to machine precision)\n"%mpr)
             Yy = numpy.array( Ys )
             msg += ("\n     Characteristics of the whole set of outputs Y:\n")
             msg += ("       Number of evaluations.........................: %i\n")%len( Ys )
index a7c3df5848e64911e272017cb2ffe5db1ce523de..cc49cb73e6811afa262dfbe90e5fca06285b8541 100644 (file)
@@ -21,8 +21,9 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 import logging
-from daCore import BasicObjects
+from daCore import BasicObjects, PlatformInfo
 import numpy, math
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
 
 # ==============================================================================
 class ElementaryAlgorithm(BasicObjects.Algorithm):
@@ -143,6 +144,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Entete des resultats
         # --------------------
         __marge =  12*" "
+        __precision = """
+            Remarque : les nombres inferieurs a %.0e (environ) representent un zero
+                       a la precision machine.\n"""%mpr
         if self._parameters["ResiduFormula"] == "Taylor":
             __entete = "  i   Alpha       ||X||    ||F(X)||  ||F(X+dX)||    ||dX||  ||F(X+dX)-F(X)||   ||F(X+dX)-F(X)||/||dX||      R(Alpha)   log( R )  "
             __msgdoc = """
@@ -163,10 +167,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             faite dans le calcul du terme GradientF_X.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-
-            Remarque : les nombres inferieurs a 1.e-16 (environ) representent un zero
-                       a la precision machine.
-            """
+            """ + __precision
         if self._parameters["ResiduFormula"] == "TaylorOnNorm":
             __entete = "  i   Alpha       ||X||    ||F(X)||  ||F(X+dX)||    ||dX||  ||F(X+dX)-F(X)||   ||F(X+dX)-F(X)||/||dX||      R(Alpha)   log( R )  "
             __msgdoc = """
@@ -191,10 +192,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             grandeur de ||F(X)||.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-
-            Remarque : les nombres inferieurs a 1.e-16 (environ) representent un zero
-                       a la precision machine.
-            """
+            """ + __precision
         if self._parameters["ResiduFormula"] == "Norm":
             __entete = "  i   Alpha       ||X||    ||F(X)||  ||F(X+dX)||    ||dX||  ||F(X+dX)-F(X)||   ||F(X+dX)-F(X)||/||dX||      R(Alpha)   log( R )  "
             __msgdoc = """
@@ -207,10 +205,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             qui doit rester constant jusqu'à ce que l'on atteigne la précision du calcul.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-
-            Remarque : les nombres inferieurs a 1.e-16 (environ) representent un zero
-                       a la precision machine.
-            """
+            """ + __precision
         #
         if len(self._parameters["ResultTitle"]) > 0:
             msgs  = "\n"
index 144b791f3811f86afb5a0a2d8fd6e291eb6fbcd2..22baa9b8a97f8f4caafe9958aec9dcb3658f4f07 100644 (file)
@@ -21,8 +21,9 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 import logging
-from daCore import BasicObjects
+from daCore import BasicObjects, PlatformInfo
 import numpy, math
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
 
 # ==============================================================================
 class ElementaryAlgorithm(BasicObjects.Algorithm):
@@ -140,6 +141,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Entete des resultats
         # --------------------
         __marge =  12*" "
+        __precision = """
+            Remarque : les nombres inferieurs a %.0e (environ) representent un zero
+                       a la precision machine.\n"""%mpr
         if self._parameters["ResiduFormula"] == "CenteredDL":
             __entete = "  i   Alpha     ||X||      ||F(X)||   |   R(Alpha)  log10( R )  "
             __msgdoc = """
@@ -163,7 +167,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             de la décroissance quadratique.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-            """
+            """ + __precision
         if self._parameters["ResiduFormula"] == "Taylor":
             __entete = "  i   Alpha     ||X||      ||F(X)||   |   R(Alpha)  log10( R )  "
             __msgdoc = """
@@ -186,7 +190,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             de la décroissance quadratique.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-            """
+            """ + __precision
         if self._parameters["ResiduFormula"] == "NominalTaylor":
             __entete = "  i   Alpha     ||X||      ||F(X)||   |   R(Alpha)   |R-1| en %  "
             __msgdoc = """
@@ -207,7 +211,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             est vérifiée.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-            """
+            """ + __precision
         if self._parameters["ResiduFormula"] == "NominalTaylorRMS":
             __entete = "  i   Alpha     ||X||      ||F(X)||   |   R(Alpha)    |R| en %  "
             __msgdoc = """
@@ -227,7 +231,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             est vérifiée.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-            """
+            """ + __precision
         #
         if len(self._parameters["ResultTitle"]) > 0:
             msgs  = "\n"
index 66e3bc74de5cb0a8dbeb64a913595b75c04935ef..1039bdf758ea15ee4b57cd09683d2459b58549fe 100644 (file)
@@ -21,8 +21,9 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 import logging
-from daCore import BasicObjects
+from daCore import BasicObjects, PlatformInfo
 import numpy, math
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
 
 # ==============================================================================
 class ElementaryAlgorithm(BasicObjects.Algorithm):
@@ -136,6 +137,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Entete des resultats
         # --------------------
         __marge =  12*" "
+        __precision = """
+            Remarque : les nombres inferieurs a %.0e (environ) representent un zero
+                       a la precision machine.\n"""%mpr
         if self._parameters["ResiduFormula"] == "Taylor":
             __entete = "  i   Alpha     ||X||      ||F(X)||   |     R(Alpha)    |R-1|/Alpha  "
             __msgdoc = """
@@ -158,10 +162,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             l'on atteigne la précision du calcul.
 
             On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
-
-            Remarque : les nombres inferieurs a 1.e-16 (environ) representent un zero
-                       a la precision machine.
-            """
+            """ + __precision
         #
         if len(self._parameters["ResultTitle"]) > 0:
             msgs  = "\n"
index b50c0ac5b09fb2c3c590ff43170cfc66dd7bf30e..14792d77ffe3fa10849f73bbc8b400eec7231ee4 100644 (file)
@@ -39,7 +39,7 @@
 __author__ = "Jean-Philippe ARGAUD"
 __all__ = []
 
-import os
+import os, sys
 
 # ==============================================================================
 class PlatformInfo(object):
@@ -67,7 +67,6 @@ class PlatformInfo(object):
 
     def getPythonVersion(self):
         "Retourne la version de python disponible"
-        import sys
         return ".".join([str(x) for x in sys.version_info[0:3]]) # map(str,sys.version_info[0:3]))
 
     def getNumpyVersion(self):
@@ -130,6 +129,14 @@ class PlatformInfo(object):
             mfp = 'float64'
         return mfp
 
+    def MachinePrecision(self):
+        # Alternative sans module :
+        # eps = 2.38
+        # while eps > 0:
+        #     old_eps = eps
+        #     eps = (1.0 + eps/2) - 1.0
+        return sys.float_info.epsilon
+
     def __str__(self):
         import version as dav
         return "%s %s (%s)"%(dav.name,dav.version,dav.date)
@@ -174,7 +181,6 @@ class PathManagement(object):
     """
     def __init__(self):
         "Déclaration des répertoires statiques"
-        import sys
         parent = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
         self.__paths = {}
         self.__paths["daExternals"] = os.path.join(parent,"daExternals")