]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Documentation update and examples improvement
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Mon, 2 Oct 2023 09:52:35 +0000 (11:52 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Mon, 2 Oct 2023 14:39:42 +0000 (16:39 +0200)
46 files changed:
doc/en/examples.rst
doc/en/ref_algorithm_EnsembleOfSimulationGenerationTask.rst
doc/en/ref_algorithm_InputValuesTest.rst
doc/en/ref_algorithm_InterpolationByReducedModelTask.rst
doc/en/ref_algorithm_MeasurementsOptimalPositioningTask.rst
doc/en/ref_algorithm_ParticleSwarmOptimization.rst
doc/en/ref_assimilation_keywords.rst
doc/en/ref_checking_keywords.rst
doc/en/ref_task_keywords.rst
doc/en/scripts/simple_InterpolationByReducedModelTask1.py [new file with mode: 0644]
doc/en/scripts/simple_InterpolationByReducedModelTask1.res [new file with mode: 0644]
doc/en/scripts/simple_InterpolationByReducedModelTask1.rst [new file with mode: 0644]
doc/en/scripts/simple_MeasurementsOptimalPositioningTask1.py
doc/en/scripts/simple_MeasurementsOptimalPositioningTask1.res
doc/en/scripts/simple_MeasurementsOptimalPositioningTask1.rst
doc/en/scripts/simple_MeasurementsOptimalPositioningTask2.py
doc/en/scripts/simple_MeasurementsOptimalPositioningTask2.res
doc/en/scripts/simple_MeasurementsOptimalPositioningTask2.rst
doc/en/snippets/Header2Algo00.rst
doc/en/snippets/Header2Algo99.rst [new file with mode: 0644]
doc/en/snippets/ModuleCompatibility.rst
doc/en/snippets/ReducedCoordinates.rst [new file with mode: 0644]
doc/fr/examples.rst
doc/fr/ref_algorithm_EnsembleOfSimulationGenerationTask.rst
doc/fr/ref_algorithm_InputValuesTest.rst
doc/fr/ref_algorithm_InterpolationByReducedModelTask.rst
doc/fr/ref_algorithm_MeasurementsOptimalPositioningTask.rst
doc/fr/ref_algorithm_ParticleSwarmOptimization.rst
doc/fr/ref_assimilation_keywords.rst
doc/fr/ref_checking_keywords.rst
doc/fr/ref_task_keywords.rst
doc/fr/scripts/simple_InterpolationByReducedModelTask1.py [new file with mode: 0644]
doc/fr/scripts/simple_InterpolationByReducedModelTask1.res [new file with mode: 0644]
doc/fr/scripts/simple_InterpolationByReducedModelTask1.rst [new file with mode: 0644]
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask1.py
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask1.res
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask2.py
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask2.res
doc/fr/snippets/Header2Algo00.rst
doc/fr/snippets/Header2Algo99.rst [new file with mode: 0644]
doc/fr/snippets/ModuleCompatibility.rst
doc/fr/snippets/ReducedCoordinates.rst [new file with mode: 0644]
src/daComposant/daAlgorithms/Atoms/ecweim.py
src/daComposant/daAlgorithms/InterpolationByReducedModelTask.py
src/daComposant/daAlgorithms/InterpolationByReducedModelTest.py
src/daComposant/daCore/BasicObjects.py

index 0387e83400d66738cd8eb9dcf3a2ca9d2ab90d06..87769af172899e4fa5657014b74b6105d41e8bae 100644 (file)
@@ -63,7 +63,8 @@ Checking algorithms uses
 Dedicated tasks or study oriented cases uses
 --------------------------------------------
 
-#. :ref:`Examples with the "MeasurementsOptimalPositioningTask" case<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`
+#. :ref:`Examples with the "InterpolationByReducedModelTask" study<section_ref_algorithm_InterpolationByReducedModelTask_examples>`
+#. :ref:`Examples with the "MeasurementsOptimalPositioningTask" study<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`
 
 Advanced uses
 -------------
index 909dd092578c1728ed7618eaabebbfb29ff00163..a1ca8e420cf86e466f11bcb74e73309e33cb50c1 100644 (file)
@@ -35,11 +35,6 @@ Task algorithm "*EnsembleOfSimulationGenerationTask*"
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo00.rst
 
-.. warning::
-
-  This algorithm is only available in textual user interface (TUI) and not in
-  graphical user interface (GUI).
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index aa49e3ef144fb6e81f5d6810012bffc2dc6fa8a7..8561269127eda0994d155ea0ec0c7124504a8b77 100644 (file)
@@ -27,9 +27,6 @@
 Checking algorithm "*InputValuesTest*"
 --------------------------------------
 
-.. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index 99e4228fa7909317aa1f50e38066845a99db262b..caa3d50ee2025f80ef6a06413ad11736724eecde 100644 (file)
 
 .. index:: single: InterpolationByReducedModelTask
 .. index:: single: Measurements interpolation
+.. index:: single: Field reconstruction
 .. index:: single: Snapshots (Ensemble)
+.. index:: single: Reduced Order Model
+.. index:: single: ROM
 .. _section_ref_algorithm_InterpolationByReducedModelTask:
 
 Task algorithm "*InterpolationByReducedModelTask*"
 --------------------------------------------------
 
 .. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
-.. warning::
+.. include:: snippets/Header2Algo99.rst
 
-  This algorithm is only available in textual user interface (TUI) and not in
-  graphical user interface (GUI).
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo00.rst
 
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
@@ -43,11 +44,12 @@ Task algorithm "*InterpolationByReducedModelTask*"
 This algorithm enables highly efficient interpolation of physical measurements
 using a reduced representation of the model for that physics. The output, for
 each set of measurements supplied at the required positions, is a complete
-field :math:`\mathbf{y}` by interpolation.
+field :math:`\mathbf{y}` by interpolation. Put another way, it's a physical
+field reconstruction using measurements and a reduced numerical model.
 
 To interpolate these measurements, a method of Empirical Interpolation Method
-(EIM [Barrault04]_) type is used, which establishes a reduced model, with or
-without measurement positioning constraints.
+(EIM [Barrault04]_) type is used, which uses a reduced model of type Reduced
+Order Model (ROM), with or without measurement positioning constraints.
 
 To use this algorithm, you need the optimally positioned measurements and the
 associated reduced basis for model representation. This can be achieved as
@@ -92,6 +94,7 @@ StoreSupplementaryCalculations
   sub-section "*Information and variables available at the end of the
   algorithm*"): [
   "Analysis",
+  "ReducedCoordinates",
   ].
 
   Example :
@@ -107,9 +110,24 @@ StoreSupplementaryCalculations
 
 .. include:: snippets/Analysis.rst
 
+.. include:: snippets/ReducedCoordinates.rst
+
 .. ------------------------------------ ..
 .. _section_ref_algorithm_InterpolationByReducedModelTask_examples:
 
+.. include:: snippets/Header2Algo09.rst
+
+.. --------- ..
+.. include:: scripts/simple_InterpolationByReducedModelTask1.rst
+
+.. literalinclude:: scripts/simple_InterpolationByReducedModelTask1.py
+
+.. include:: snippets/Header2Algo10.rst
+
+.. literalinclude:: scripts/simple_InterpolationByReducedModelTask1.res
+    :language: none
+
+.. ------------------------------------ ..
 .. include:: snippets/Header2Algo06.rst
 
 - :ref:`section_ref_algorithm_MeasurementsOptimalPositioningTask`
index a798b9eb1870c992b36b737b39976ef0a271a33d..4979d64b327e174871f7c4d13956f18559cdd833 100644 (file)
@@ -29,6 +29,8 @@
 .. index:: single: Ensemble of snapshots
 .. index:: single: Simulations (Ensemble)
 .. index:: single: Snapshots (Ensemble)
+.. index:: single: Reduced Order Model
+.. index:: single: ROM
 .. _section_ref_algorithm_MeasurementsOptimalPositioningTask:
 
 Task algorithm "*MeasurementsOptimalPositioningTask*"
@@ -37,11 +39,6 @@ Task algorithm "*MeasurementsOptimalPositioningTask*"
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo00.rst
 
-.. warning::
-
-  This algorithm is only available in textual user interface (TUI) and not in
-  graphical user interface (GUI).
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
@@ -57,8 +54,9 @@ returns the complete field(s) for a given set of parameters :math:`\mathbf{x}`,
 or of an explicit observation of the complete field(s) :math:`\mathbf{y}`.
 
 To determine the optimum positioning of measurements, an Empirical
-Interpolation Method (EIM [Barrault04]_) is used, with (variant "*lcEIM*") or
-without (variant "*EIM*") positioning constraints.
+Interpolation Method (EIM [Barrault04]_) is used, which establishes a reduced
+model of type Reduced Order Model (ROM), with (variant "*lcEIM*") or without
+(variant "*EIM*") positioning constraints.
 
 There are two ways to use this algorithm:
 
index 5f0eaeea1bda6e7e13a9d38466a537819af6ba85..5a2f78ca60978f7754a09079a4356a932de48929 100644 (file)
@@ -28,9 +28,6 @@
 Calculation algorithm "*ParticleSwarmOptimization*"
 ---------------------------------------------------
 
-.. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index 83e24ca68aa662cddeb05c6785f34903c8d53906..ff43032efe72fe9a939c9cc64f0bee24c3e565b4 100644 (file)
 List of commands and keywords for data assimilation or optimisation case
 ------------------------------------------------------------------------
 
-We summarize here all the commands available to describe a calculation case by
-avoiding the particularities of each algorithm. It is therefore a common
-inventory of commands.
+We summarize here all the commands and keywords available to describe a
+calculation case, by avoiding the particularities of each algorithm. It is
+therefore a common inventory of commands.
 
 The set of commands for an data assimilation or optimisation case is related to
 the description of a calculation case, that is a *Data Assimilation* procedure
-or an *Optimization* procedure.
+(chosen  in graphical user interface by the command "*ASSIMILATION_STUDY*"), a
+*Reduction Method* procedure (chosen  in graphical user interface by the
+command "*REDUCTION_STUDY*") or an *Optimization* procedure (chosen  in
+graphical user interface by the command "*OPTIMIZATION_STUDY*").
 
-The first term describes the choice between calculation or checking. In the
-graphical interface, each of the three types of calculation, individually more
-oriented to *data assimilation*, *optimization methods* or *methods with
-reduction* (some algorithms are simultaneously in various categories), is
-imperatively indicated by one of these commands:
-
-.. include:: snippets/ASSIMILATION_STUDY.rst
-
-.. include:: snippets/OPTIMIZATION_STUDY.rst
-
-.. include:: snippets/REDUCTION_STUDY.rst
-
-The nested terms are sorted in alphabetical order. They are not necessarily
-required for all algorithms. The various commands are the following:
+All the possible terms, nested or not, are listed by alphabetical order. They
+are not required for all the algorithms. The commands or keywords available are
+the following
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/ASSIMILATION_STUDY.rst
+
 .. include:: snippets/Background.rst
 
 .. include:: snippets/BackgroundError.rst
@@ -75,8 +69,12 @@ required for all algorithms. The various commands are the following:
 
 .. include:: snippets/Observers.rst
 
+.. include:: snippets/OPTIMIZATION_STUDY.rst
+
 .. include:: snippets/OutputVariables.rst
 
+.. include:: snippets/REDUCTION_STUDY.rst
+
 .. include:: snippets/StudyName.rst
 
 .. include:: snippets/StudyRepertory.rst
index 944b2a09ab3c7e8865a4d42c88c0adbde060280e..ff31af9ad035f377bc2f10d4ef2fcef1acf1a550 100644 (file)
 List of commands and keywords for an ADAO checking case
 -------------------------------------------------------
 
-This set of commands is related to the description of a checking case, that is a
-procedure to check required properties on information, used somewhere else by a
-calculation case.
+We summarize here all the commands and keywords available to describe a
+checking case, by avoiding the particularities of each algorithm. It is
+therefore a common inventory of commands.
 
-The first term describes the choice between calculation or checking. In the
-graphical interface, the choice is imperatively indicated by the command:
+A special term allow to choose explicitly a checking. In the graphical user
+interface, this choice is done by the command "*CHECKING_STUDY*".
 
-.. include:: snippets/CHECKING_STUDY.rst
-
-The nested terms are sorted in alphabetical order. They are not necessarily
-required for all algorithms. The various commands are the following:
+All the possible terms, nested or not, are listed by alphabetical order. They
+are not required for all the algorithms. The commands or keywords available are
+the following
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/BackgroundError.rst
+
 .. include:: snippets/CheckingPoint.rst
 
-.. include:: snippets/BackgroundError.rst
+.. include:: snippets/CHECKING_STUDY.rst
 
 .. include:: snippets/Debug.rst
 
index a510283abfa93811257e073fd155a1443c0f04a9..7d120dc0f1ae45006e121e9c10c08cbc3ba1ce7b 100644 (file)
 List of commands and keywords for a dedicated task or study oriented case
 -------------------------------------------------------------------------
 
-This set of commands is related to the description of a dedicated task or study
-oriented case, which consists of a simple specific procedure to perform a
-computational task dedicated to a general application of data assimilation or
-optimization methods.
+We summarize here all the commands and keywords available to describe a
+dedicated task or study oriented case by avoiding the particularities of each
+algorithm. It is therefore a common inventory of commands.
 
-The nested terms are sorted in alphabetical order. They are not necessarily
-required for all algorithms. The various commands are the following:
+All the possible terms, nested or not, are listed by alphabetical order. They
+are not required for all the algorithms. The commands or keywords available are
+the following
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/Background.rst
+
 .. include:: snippets/Debug.rst
 
+.. include:: snippets/Observation.rst
+
+.. include:: snippets/ObservationOperator.rst
+
 .. include:: snippets/Observers.rst
 
 .. include:: snippets/StudyName.rst
diff --git a/doc/en/scripts/simple_InterpolationByReducedModelTask1.py b/doc/en/scripts/simple_InterpolationByReducedModelTask1.py
new file mode 100644 (file)
index 0000000..3d60821
--- /dev/null
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+#
+from numpy import array, arange, ravel, set_printoptions
+set_printoptions(precision=3)
+#
+dimension = 7
+#
+print("Defining a set of artificial physical fields")
+print("--------------------------------------------")
+Ensemble = array( [i+arange(dimension) for i in range(7)] ).T
+print("- Dimension of physical field space....................: %i"%dimension)
+print("- Number of physical field vectors.....................: %i"%Ensemble.shape[1])
+print()
+#
+print("Search for optimal measurement positions")
+print("-------------------------------------------")
+from adao import adaoBuilder
+case = adaoBuilder.New()
+case.setAlgorithmParameters(
+    Algorithm = 'MeasurementsOptimalPositioningTask',
+    Parameters = {
+        "EnsembleOfSnapshots":Ensemble,
+        "MaximumNumberOfLocations":3,
+        "ErrorNorm":"L2",
+        "StoreSupplementaryCalculations":[
+            "ReducedBasis",
+            "Residus",
+        ],
+    }
+)
+case.execute()
+print("- ADAO calculation performed")
+print()
+#
+print("Display of optimal positioning of measures")
+print("------------------------------------------")
+op = case.get("OptimalPoints")[-1]
+print("- Number of optimal measurement positions..............: %i"%op.size)
+print("- Optimal measurement positions, numbered by default...: %s"%op)
+print()
+#
+print("Reconstruction by interpolation of known measured states")
+print("--------------------------------------------------------")
+rb = case.get("ReducedBasis")[-1]
+measures_at_op = Ensemble[op,1]
+#
+interpolation = adaoBuilder.New()
+interpolation.setAlgorithmParameters(
+    Algorithm = 'InterpolationByReducedModelTask',
+    Parameters = {
+        "ReducedBasis":rb,
+        "OptimalLocations":op,
+        }
+    )
+interpolation.setObservation( Vector = measures_at_op )
+interpolation.execute()
+field = interpolation.get("Analysis")[-1]
+print("- Reference state 1 used for the learning..............:",ravel(Ensemble[:,1]))
+print("- Optimal measurement positions, numbered by default...: %s"%op)
+print("- Measures extracted from state 1 for reconstruction...:",measures_at_op)
+print("- State 1 reconstructed with the precision of 1%.......:",field)
+
+if max(abs(ravel(Ensemble[:,1])-field)) < 1.e-2:
+    print("  ===> There is no difference between the two states, as expected")
+else:
+    raise ValueError("Difference recorded in reference state 1")
+print()
+#
+print("Reconstruction by interpolation of unknown measured states")
+print("----------------------------------------------------------")
+measures_at_op = array([4, 3])
+interpolation.setObservation( Vector = measures_at_op )
+interpolation.execute()
+field = interpolation.get("Analysis")[-1]
+print("  Illustration of an interpolation on unknown real measurements")
+print("- Optimal measurement positions, numbered by default...: %s"%op)
+print("- Measures not present in the known states.............:",measures_at_op)
+print("- State reconstructed with the precision of 1%.........:",field)
+print("  ===> At measure positions %s, the reconstructed field is equal to measures"%op)
+print()
diff --git a/doc/en/scripts/simple_InterpolationByReducedModelTask1.res b/doc/en/scripts/simple_InterpolationByReducedModelTask1.res
new file mode 100644 (file)
index 0000000..94e7bbc
--- /dev/null
@@ -0,0 +1,30 @@
+Defining a set of artificial physical fields
+--------------------------------------------
+- Dimension of physical field space....................: 7
+- Number of physical field vectors.....................: 7
+
+Search for optimal measurement positions
+-------------------------------------------
+- ADAO calculation performed
+
+Display of optimal positioning of measures
+------------------------------------------
+- Number of optimal measurement positions..............: 2
+- Optimal measurement positions, numbered by default...: [6 0]
+
+Reconstruction by interpolation of known measured states
+--------------------------------------------------------
+- Reference state 1 used for the learning..............: [1 2 3 4 5 6 7]
+- Optimal measurement positions, numbered by default...: [6 0]
+- Measures extracted from state 1 for reconstruction...: [7 1]
+- State 1 reconstructed with the precision of 1%.......: [1. 2. 3. 4. 5. 6. 7.]
+  ===> There is no difference between the two states, as expected
+
+Reconstruction by interpolation of unknown measured states
+----------------------------------------------------------
+  Illustration of an interpolation on unknown real measurements
+- Optimal measurement positions, numbered by default...: [6 0]
+- Measures not present in the known states.............: [4 3]
+- State reconstructed with the precision of 1%.........: [3.    3.167 3.333 3.5   3.667 3.833 4.   ]
+  ===> At measure positions [6 0], the reconstructed field is equal to measures
+
diff --git a/doc/en/scripts/simple_InterpolationByReducedModelTask1.rst b/doc/en/scripts/simple_InterpolationByReducedModelTask1.rst
new file mode 100644 (file)
index 0000000..6dfb2a6
--- /dev/null
@@ -0,0 +1,16 @@
+.. index:: single: InterpolationByReducedModelTask (example)
+
+First example
+.............
+
+This example describes the implementation of a reconstruction by interpolation,
+following the building of a reduced representation by an **optimal measurement
+positioning** search task.
+
+To illustrate, we use the very simple artificial fields (generated in such a
+way as to exist in a vector space of dimension 2) that for the :ref:`study
+examples with
+"MeasurementsOptimalPositioningTask"<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`.
+The preliminary ADAO search yields 2 optimal positions for the measurements,
+which are then used to establish a physical field interpolation based on
+measurements at the optimum locations.
index 2612cab65dc8ff58d33dc8e982a88057f51a260e..6435cf5d059af518987de64eb3f7f1f122ccc88a 100644 (file)
@@ -29,8 +29,8 @@ case.execute()
 print("- ADAO calculation performed")
 print()
 #
-print("Optimal positioning of measures")
-print("-------------------------------")
+print("Display the optimal positioning of measures")
+print("-------------------------------------------")
 op = case.get("OptimalPoints")[-1]
 print("- Number of optimal measurement positions..............: %i"%op.size)
 print("- Optimal measurement positions, numbered by default...: %s"%op)
index 25b1e3606148b922a58fc528df0ab87a63cd92a8..3c281aa6a05c19237a6d3d2ab8df86c75a1d3a1d 100644 (file)
@@ -15,8 +15,8 @@ Search for optimal measurement positions
 -------------------------------------------
 - ADAO calculation performed
 
-Optimal positioning of measures
--------------------------------
+Display the optimal positioning of measures
+-------------------------------------------
 - Number of optimal measurement positions..............: 2
 - Optimal measurement positions, numbered by default...: [6 0]
 
index eab45726fe09b121edd729cfa512622a90fba94d..a39908451922374f83cfa24eab2aabe350a08c8d 100644 (file)
@@ -1,4 +1,4 @@
-.. index:: single: MeasurementsOptimalPositioningTask (exemple)
+.. index:: single: MeasurementsOptimalPositioningTask (example)
 
 First example
 .............
index a6420adb1633768c742efd8801bb53d93e7cd962..5c7c94b3d1c20d4eee0ba9b0cbab294571196569 100644 (file)
@@ -33,8 +33,8 @@ case.execute()
 print("- ADAO calculation performed")
 print()
 #
-print("Optimal positioning of measures")
-print("-------------------------------")
+print("Display the optimal positioning of measures")
+print("-------------------------------------------")
 op = case.get("OptimalPoints")[-1]
 print("- Number of optimal measurement positions..............: %i"%op.size)
 print("- Optimal measurement positions, numbered by default...: %s"%op)
@@ -50,8 +50,8 @@ rs = case.get("Residus")[-1]
 print("- Ordered residuals of reconstruction error\n ",rs)
 print()
 a0, a1 = 7, -2.5
-print("- Elementary example of second field reconstruction")
-print("  as a linear combination of the two base vectors,")
-print("  with the respective coefficients %.1f and %.1f:"%(a0,a1))
+print("- Elementary example of second field reconstruction as a linear")
+print("  combination of the two base vectors, that can be guessed to be")
+print("  multiplied with the respective coefficients %.1f and %.1f:"%(a0,a1))
 print( a0*rb[:,0] + a1*rb[:,1])
 print()
index bb4706a8157604b2090a243c95bcac58909f680c..351cf64607bf08bcf73dc094e75f45eb28adaee2 100644 (file)
@@ -15,8 +15,8 @@ Search for optimal measurement positions
 -------------------------------------------
 - ADAO calculation performed
 
-Optimal positioning of measures
--------------------------------
+Display the optimal positioning of measures
+-------------------------------------------
 - Number of optimal measurement positions..............: 2
 - Optimal measurement positions, numbered by default...: [6 0]
 
@@ -35,9 +35,9 @@ Reduced representation and error information
 - Ordered residuals of reconstruction error
   [2.43926218e+01 4.76969601e+00 2.51214793e-15]
 
-- Elementary example of second field reconstruction
-  as a linear combination of the two base vectors,
-  with the respective coefficients 7.0 and -2.5:
+- Elementary example of second field reconstruction as a linear
+  combination of the two base vectors, that can be guessed to be
+  multiplied with the respective coefficients 7.0 and -2.5:
 [[1.]
  [2.]
  [3.]
index e65cd3be157dc8e5dd3accb34000ba2d00adec17..485e7b34dca98fb0e1b36dbf991cdd62dfe16ddc 100644 (file)
@@ -1,4 +1,4 @@
-.. index:: single: MeasurementsOptimalPositioningTask (exemple)
+.. index:: single: MeasurementsOptimalPositioningTask (example)
 
 Second example
 ..............
index a892b49838c62ef3ed473eec719a7d22ea57bffe..44c29e15e72d08571bed73c4737ec8d90129e7da 100644 (file)
@@ -1,4 +1,2 @@
-.. warning::
-
-   In this particular version, this algorithm or some of its variants are
-   experimental, and therefore remain subject to change in future versions.
+This algorithm is reserved for use in the textual user interface (TUI), and
+therefore not in graphical user interface (GUI).
diff --git a/doc/en/snippets/Header2Algo99.rst b/doc/en/snippets/Header2Algo99.rst
new file mode 100644 (file)
index 0000000..a892b49
--- /dev/null
@@ -0,0 +1,4 @@
+.. warning::
+
+   In this particular version, this algorithm or some of its variants are
+   experimental, and therefore remain subject to change in future versions.
index 2dfcf871f72457b8b8c4f97b6bdb02ad1158991c..517c3c7f79428b9640d3053501992546ee21dfad 100644 (file)
@@ -16,7 +16,7 @@ versions within the range described below.
 
    Python,     3.6.5,    3.11.5
    Numpy,      1.14.3,    1.26.0
-   Scipy,      0.19.1,    1.11.2
+   Scipy,      0.19.1,    1.11.3
    MatplotLib, 2.2.2,    3.8.0
    GnuplotPy,  1.8,    1.8
    NLopt,      2.4.2,    2.7.1
diff --git a/doc/en/snippets/ReducedCoordinates.rst b/doc/en/snippets/ReducedCoordinates.rst
new file mode 100644 (file)
index 0000000..6ffb3ea
--- /dev/null
@@ -0,0 +1,8 @@
+.. index:: single: ReducedCoordinates
+
+ReducedCoordinates
+  *List of vectors*. Each element of this variable contains the coordinates of
+  a complete physical state :math:`\mathbf{y}` in the reduced basis.
+
+  Example:
+  ``rc = ADD.get("ReducedCoordinates")[-1]``
index 2cf33200f6c29124c754b38bac882c080948206c..a5fdd8ecf562809d95881994540b19f9c1139ed3 100644 (file)
@@ -64,7 +64,8 @@ Utilisations d'algorithmes de vérification
 Utilisations d'algorithmes orientés tâches ou études dédiées
 ------------------------------------------------------------
 
-#. :ref:`Exemples de vérification avec "MeasurementsOptimalPositioningTask"<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`
+#. :ref:`Exemples d'étude avec "InterpolationByReducedModelTask"<section_ref_algorithm_InterpolationByReducedModelTask_examples>`
+#. :ref:`Exemples d'étude avec "MeasurementsOptimalPositioningTask"<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`
 
 Utilisations avancées
 ---------------------
index f19be045d674cdd62731f3e403a39a3ab836f544..18a8b124c0701f09439c168246323bb4f29c54c0 100644 (file)
@@ -35,11 +35,6 @@ Algorithme de tâche "*EnsembleOfSimulationGenerationTask*"
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo00.rst
 
-.. warning::
-
-  Cet algorithme n'est utilisable qu'en interface textuelle (TUI) et pas en
-  interface graphique (GUI).
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index f83c8e08b19cb74aa11201a0a5bf9e6f99aae5ac..33f79f71894e793eb06e789d972de1eda0e481ec 100644 (file)
@@ -27,9 +27,6 @@
 Algorithme de vérification "*InputValuesTest*"
 ----------------------------------------------
 
-.. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index 8dc334b089d3557edad18906bd93a1b490ffa74c..0e188b163227d355a8c68cba59a6bd30bf1a4542 100644 (file)
 
 .. index:: single: InterpolationByReducedModelTask
 .. index:: single: Interpolation de mesures
+.. index:: single: Reconstruction de champ
 .. index:: single: Snapshots (Ensemble)
+.. index:: single: Reduced Order Model
+.. index:: single: ROM
 .. _section_ref_algorithm_InterpolationByReducedModelTask:
 
 Algorithme de tâche "*InterpolationByReducedModelTask*"
 -------------------------------------------------------
 
 .. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
-.. warning::
+.. include:: snippets/Header2Algo99.rst
 
-  Cet algorithme n'est utilisable qu'en interface textuelle (TUI) et pas en
-  interface graphique (GUI).
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo00.rst
 
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
@@ -43,11 +44,14 @@ Algorithme de tâche "*InterpolationByReducedModelTask*"
 Cet algorithme permet de réaliser une interpolation très efficace de mesures
 physiques à l'aide d'une représentation réduite du modèle pour cette physique.
 On obtient en sortie, pour chaque jeu de mesures fournies aux positions
-requises, un champ complet :math:`\mathbf{y}` par interpolation.
+requises, un champ complet :math:`\mathbf{y}` par interpolation. Dit autrement,
+c'est une reconstruction de champ physique à l'aide de mesures et d'un modèle
+numérique réduit.
 
 Pour interpoler ces mesures, on utilise une méthode de type Empirical
-Interpolation Method (EIM [Barrault04]_), qui établit un modèle réduit, avec ou
-sans contraintes de positionnement de mesures.
+Interpolation Method (EIM [Barrault04]_), qui utilise un modèle réduit de type
+Reduced Order Model (ROM), avec ou sans contraintes de positionnement de
+mesures.
 
 Pour utiliser cet algorithme, il faut disposer des mesures optimalement
 positionnées et de la base réduite associée pour la représentation du modèle.
@@ -92,6 +96,7 @@ StoreSupplementaryCalculations
   de cette documentation par algorithme spécifique, dans la sous-partie
   "*Informations et variables disponibles à la fin de l'algorithme*") : [
   "Analysis",
+  "ReducedCoordinates",
   ].
 
   Exemple :
@@ -107,9 +112,24 @@ StoreSupplementaryCalculations
 
 .. include:: snippets/Analysis.rst
 
+.. include:: snippets/ReducedCoordinates.rst
+
 .. ------------------------------------ ..
 .. _section_ref_algorithm_InterpolationByReducedModelTask_examples:
 
+.. include:: snippets/Header2Algo09.rst
+
+.. --------- ..
+.. include:: scripts/simple_InterpolationByReducedModelTask1.rst
+
+.. literalinclude:: scripts/simple_InterpolationByReducedModelTask1.py
+
+.. include:: snippets/Header2Algo10.rst
+
+.. literalinclude:: scripts/simple_InterpolationByReducedModelTask1.res
+    :language: none
+
+.. ------------------------------------ ..
 .. include:: snippets/Header2Algo06.rst
 
 - :ref:`section_ref_algorithm_MeasurementsOptimalPositioningTask`
index 6fe2723b28205640d5454bd81e81de4fbd1c80ee..629da6b0a7fb68af1260225d5965290e4cfed945 100644 (file)
@@ -29,6 +29,8 @@
 .. index:: single: Ensemble de snapshots
 .. index:: single: Simulations (Ensemble)
 .. index:: single: Snapshots (Ensemble)
+.. index:: single: Reduced Order Model
+.. index:: single: ROM
 .. _section_ref_algorithm_MeasurementsOptimalPositioningTask:
 
 Algorithme de tâche "*MeasurementsOptimalPositioningTask*"
@@ -37,11 +39,6 @@ Algorithme de tâche "*MeasurementsOptimalPositioningTask*"
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo00.rst
 
-.. warning::
-
-  Cet algorithme n'est utilisable qu'en interface textuelle (TUI) et pas en
-  interface graphique (GUI).
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
@@ -58,8 +55,9 @@ un jeu de paramètres donné :math:`\mathbf{x}`, ou d'une observation explicite
 du (ou des) champ(s) complet(s) :math:`\mathbf{y}`.
 
 Pour établir la position optimale de mesures, on utilise une méthode de type
-Empirical Interpolation Method (EIM [Barrault04]_), avec contraintes (variant
-"*lcEIM*") ou sans contraintes (variant "*EIM*") de positionnement.
+Empirical Interpolation Method (EIM [Barrault04]_), qui établit un modèle
+réduit de type Reduced Order Model (ROM), avec contraintes (variant "*lcEIM*")
+ou sans contraintes (variant "*EIM*") de positionnement.
 
 Il y a deux manières d'utiliser cet algorithme:
 
index c45ad74e0ba1bef407e80b0eafdaccdb0a33607a..1cf554162b5d6cc6c217ebd88dcc08e2c6339d09 100644 (file)
@@ -28,9 +28,6 @@
 Algorithme de calcul "*ParticleSwarmOptimization*"
 --------------------------------------------------
 
-.. ------------------------------------ ..
-.. include:: snippets/Header2Algo00.rst
-
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo01.rst
 
index cc86a6213f7acbdebec43b3c1d4f2e2fdd9c6fc3..bb82be94ebe060720b7068f47ef584492b542569 100644 (file)
 Liste des commandes et mots-clés pour un cas d'assimilation de données ou d'optimisation
 ----------------------------------------------------------------------------------------
 
-On résume ici l'ensemble des commandes disponibles pour décrire un cas de
-calcul en évitant les particularités de chaque algorithme. C'est donc un
-inventaire commun des commandes.
+On résume ici l’ensemble des commandes et des mots-clés disponibles pour
+décrire un cas de calcul en évitant les particularités de chaque algorithme.
+C’est donc un inventaire commun des commandes.
 
 Le jeu de commandes pour un cas d'assimilation de données ou d'optimisation est
 lié à la description d'un cas de calcul, qui est une procédure en *Assimilation
-de Données*, en *Méthodes avec Réduction* ou en méthodes *Optimisation*.
+de Données* (désignée en interface graphique par la commande
+"*ASSIMILATION_STUDY*"), en *Méthodes avec Réduction* (désignée en interface
+graphique par la commande "*REDUCTION_STUDY*") ou en méthodes *Optimisation*
+(désignée en interface graphique par la commande "*OPTIMIZATION_STUDY*").
 
-Le premier terme décrit le choix entre un calcul ou une vérification. Dans
-l'interface graphique, chacun des trois types de calculs, individuellement
-plutôt orientés soit *assimilation de données*, soit "méthodes d'optimisation*,
-"soit *méthodes avec réduction* (sachant que certains sont simultanément dans
-plusieurs catégories), est impérativement désigné par l'une ces commandes:
-
-.. include:: snippets/ASSIMILATION_STUDY.rst
-
-.. include:: snippets/OPTIMIZATION_STUDY.rst
-
-.. include:: snippets/REDUCTION_STUDY.rst
-
-Les termes imbriqués sont classés par ordre alphabétique. Ils ne sont pas
-obligatoirement requis pour tous les algorithmes. Les différentes commandes
-sont les suivantes:
+Tous les termes possibles, imbriqués ou non, sont classés par ordre
+alphabétique. Ils ne sont pas obligatoirement requis pour tous les algorithmes.
+Les commandes ou mots-clés disponibles sont les suivants:
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/ASSIMILATION_STUDY.rst
+
 .. include:: snippets/Background.rst
 
 .. include:: snippets/BackgroundError.rst
@@ -76,8 +69,12 @@ sont les suivantes:
 
 .. include:: snippets/Observers.rst
 
+.. include:: snippets/OPTIMIZATION_STUDY.rst
+
 .. include:: snippets/OutputVariables.rst
 
+.. include:: snippets/REDUCTION_STUDY.rst
+
 .. include:: snippets/StudyName.rst
 
 .. include:: snippets/StudyRepertory.rst
index f9fd8d8a2b509b71222d14f01b71931ec167e9a8..f6a1bb6ce8f8477492ceae5188782752285a9e45 100644 (file)
 Liste des commandes et mots-clés pour un cas de vérification
 ------------------------------------------------------------
 
-Ce jeu de commandes est lié à la description d'un cas de vérification, qui est
-une procédure pour vérifier les propriétés d'une information requise, utilisée
-ailleurs par un cas de calcul.
+On résume ici l’ensemble des commandes et des mots-clés disponibles pour
+décrire un cas de vérification en évitant les particularités de chaque
+algorithme. C’est donc un inventaire commun des commandes.
 
-Le premier terme décrit le choix entre un calcul ou une vérification. Dans
-l'interface graphique, le choix est désigné obligatoirement par la commande:
+Un terme particulier désigne le choix explicite d'une vérification. Dans
+l'interface graphique, ce choix se fait par la commande obligatoire
+"*CHECKING_STUDY*".
 
-.. include:: snippets/CHECKING_STUDY.rst
-
-Les termes imbriqués sont classés par ordre alphabétique. Ils ne sont pas
-obligatoirement requis pour tous les algorithmes. Les différentes commandes
-sont les suivantes:
+Tous les termes possibles, imbriqués ou non, sont classés par ordre
+alphabétique. Ils ne sont pas obligatoirement requis pour tous les algorithmes.
+Les commandes ou mots-clés disponibles sont les suivants:
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/BackgroundError.rst
+
 .. include:: snippets/CheckingPoint.rst
 
-.. include:: snippets/BackgroundError.rst
+.. include:: snippets/CHECKING_STUDY.rst
 
 .. include:: snippets/Debug.rst
 
index 9e065c3b149aade15c4fbbfc3502ae5abfd45515..93296a7fe1fe78ed835d1270d655aea0e5d6badd 100644 (file)
 Liste des commandes et mots-clés pour un cas orienté tâche ou étude dédiée
 --------------------------------------------------------------------------
 
-Ce jeu de commandes est lié à la description d'un cas orienté tâche ou étude
-dédiée, qui consiste en une procédure spécifique simple pour effectuer une
-tâche de calcul dédiée à une application générale des méthodes d'assimilation
-de données ou d'optimisation.
+On résume ici l’ensemble des commandes et des mots-clés disponibles pour
+décrire un cas orienté tâche ou étude dédiée en évitant les particularités de
+chaque algorithme. C’est donc un inventaire commun des commandes.
 
-Les termes imbriqués sont classés par ordre alphabétique. Ils ne sont pas
-obligatoirement requis pour tous les algorithmes. Les différentes commandes
-sont les suivantes:
+Tous les termes possibles, imbriqués ou non, sont classés par ordre
+alphabétique. Ils ne sont pas obligatoirement requis pour tous les algorithmes.
+Les commandes ou mots-clés disponibles sont les suivants:
 
 .. include:: snippets/AlgorithmParameters.rst
 
+.. include:: snippets/Background.rst
+
 .. include:: snippets/Debug.rst
 
+.. include:: snippets/Observation.rst
+
+.. include:: snippets/ObservationOperator.rst
+
 .. include:: snippets/Observers.rst
 
 .. include:: snippets/StudyName.rst
diff --git a/doc/fr/scripts/simple_InterpolationByReducedModelTask1.py b/doc/fr/scripts/simple_InterpolationByReducedModelTask1.py
new file mode 100644 (file)
index 0000000..0b50cbd
--- /dev/null
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+#
+from numpy import array, arange, ravel, set_printoptions
+set_printoptions(precision=3)
+#
+dimension = 7
+#
+print("Définition d'un ensemble artificiel de champs physiques")
+print("-------------------------------------------------------")
+Ensemble = array( [i+arange(dimension) for i in range(7)] ).T
+print("- Dimension de l'espace des champs physiques...........: %i"%dimension)
+print("- Nombre de vecteurs de champs physiques...............: %i"%Ensemble.shape[1])
+print()
+#
+print("Recherche des positions optimales de mesure")
+print("-------------------------------------------")
+from adao import adaoBuilder
+case = adaoBuilder.New()
+case.setAlgorithmParameters(
+    Algorithm = 'MeasurementsOptimalPositioningTask',
+    Parameters = {
+        "EnsembleOfSnapshots":Ensemble,
+        "MaximumNumberOfLocations":3,
+        "ErrorNorm":"L2",
+        "StoreSupplementaryCalculations":[
+            "ReducedBasis",
+            "Residus",
+        ],
+    }
+)
+case.execute()
+print("- Calcul ADAO effectué")
+print()
+#
+print("Affichage des positions optimales de mesure")
+print("-------------------------------------------")
+op = case.get("OptimalPoints")[-1]
+print("- Nombre de positions optimales de mesure..............: %i"%op.size)
+print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
+print()
+#
+print("Reconstruction par interpolation d'états mesurés connus")
+print("-------------------------------------------------------")
+rb = case.get("ReducedBasis")[-1]
+measures_at_op = Ensemble[op,1]
+#
+interpolation = adaoBuilder.New()
+interpolation.setAlgorithmParameters(
+    Algorithm = 'InterpolationByReducedModelTask',
+    Parameters = {
+        "ReducedBasis":rb,
+        "OptimalLocations":op,
+        }
+    )
+interpolation.setObservation( Vector = measures_at_op )
+interpolation.execute()
+field = interpolation.get("Analysis")[-1]
+print("- État de référence 1 utilisé pour l'apprentissage.....:",ravel(Ensemble[:,1]))
+print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
+print("- Mesures extraites de l'état 1 pour la reconstruction.:",measures_at_op)
+print("- État 1 reconstruit avec la précision de 1%...........:",field)
+if max(abs(ravel(Ensemble[:,1])-field)) < 1.e-2:
+    print("  ===> Aucune différence n'existe entre les deux états, comme attendu")
+else:
+    raise ValueError("Différence constatée sur l'état de référence 1")
+print()
+#
+print("Reconstruction par interpolation d'états mesurés non connus")
+print("-----------------------------------------------------------")
+measures_at_op = array([4, 3])
+interpolation.setObservation( Vector = measures_at_op )
+interpolation.execute()
+field = interpolation.get("Analysis")[-1]
+print("  Illustration d'une interpolation sur mesures réelles non connues")
+print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
+print("- Mesures non présentes dans les états connus..........:",measures_at_op)
+print("- État reconstruit avec la précision de 1%.............:",field)
+print("  ===> Aux positions de mesure %s, le champ reconstruit est égal à la mesure"%op)
+print()
diff --git a/doc/fr/scripts/simple_InterpolationByReducedModelTask1.res b/doc/fr/scripts/simple_InterpolationByReducedModelTask1.res
new file mode 100644 (file)
index 0000000..8941549
--- /dev/null
@@ -0,0 +1,30 @@
+Définition d'un ensemble artificiel de champs physiques
+-------------------------------------------------------
+- Dimension de l'espace des champs physiques...........: 7
+- Nombre de vecteurs de champs physiques...............: 7
+
+Recherche des positions optimales de mesure
+-------------------------------------------
+- Calcul ADAO effectué
+
+Affichage des positions optimales de mesure
+-------------------------------------------
+- Nombre de positions optimales de mesure..............: 2
+- Positions optimales de mesure, numérotées par défaut.: [6 0]
+
+Reconstruction par interpolation d'états mesurés connus
+-------------------------------------------------------
+- État de référence 1 utilisé pour l'apprentissage.....: [1 2 3 4 5 6 7]
+- Positions optimales de mesure, numérotées par défaut.: [6 0]
+- Mesures extraites de l'état 1 pour la reconstruction.: [7 1]
+- État 1 reconstruit avec la précision de 1%...........: [1. 2. 3. 4. 5. 6. 7.]
+  ===> Aucune différence n'existe entre les deux états, comme attendu
+
+Reconstruction par interpolation d'états mesurés non connus
+-----------------------------------------------------------
+  Illustration d'une interpolation sur mesures réelles non connues
+- Positions optimales de mesure, numérotées par défaut.: [6 0]
+- Mesures non présentes dans les états connus..........: [4 3]
+- État reconstruit avec la précision de 1%.............: [3.    3.167 3.333 3.5   3.667 3.833 4.   ]
+  ===> Aux positions de mesure [6 0], le champ reconstruit est égal à la mesure
+
diff --git a/doc/fr/scripts/simple_InterpolationByReducedModelTask1.rst b/doc/fr/scripts/simple_InterpolationByReducedModelTask1.rst
new file mode 100644 (file)
index 0000000..a47fa08
--- /dev/null
@@ -0,0 +1,16 @@
+.. index:: single: InterpolationByReducedModelTask (example)
+
+Premier exemple
+...............
+
+Cet exemple décrit la mise en oeuvre d'une reconstruction par interpolation,
+faisant suite à l'établissement d'une représentation réduite par une tâche de
+recherche de **positionnement optimal de mesures**.
+
+Pour l'illustration, on utilise la collection artificielle de champs physiques
+très simple (engendré de manière à exister dans un espace vectoriel de
+dimension 2) que pour les :ref:`exemples d'étude avec
+"MeasurementsOptimalPositioningTask"<section_ref_algorithm_MeasurementsOptimalPositioningTask_examples>`.
+La recherche ADAO préalable permet d'obtenir 2 positions optimales pour les
+mesures, qui servent ensuite à établir une interpolation de champ physique à
+partir de mesures aux positions optimales.
index 39c0771a8c47aa3e0f84360f731888b983ea860b..919313da59b27a42c267bee73d908d1d1ab07c9d 100644 (file)
@@ -29,8 +29,8 @@ case.execute()
 print("- Calcul ADAO effectué")
 print()
 #
-print("Positions optimales de mesure")
-print("-----------------------------")
+print("Affichage des positions optimales de mesure")
+print("-------------------------------------------")
 op = case.get("OptimalPoints")[-1]
 print("- Nombre de positions optimales de mesure..............: %i"%op.size)
 print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
index ff9fbd2bb8476c07bdaeb1c88fa27f2921eac8b9..30c662d77e5e487d1d153d1d39b3b4a9af0c04d1 100644 (file)
@@ -15,8 +15,8 @@ Recherche des positions optimales de mesure
 -------------------------------------------
 - Calcul ADAO effectué
 
-Positions optimales de mesure
------------------------------
+Affichage des positions optimales de mesure
+-------------------------------------------
 - Nombre de positions optimales de mesure..............: 2
 - Positions optimales de mesure, numérotées par défaut.: [6 0]
 
index 8d2aaed45e1efc597b2f623255de5a03600657d9..78bdd83d214c9ebfbde9603b74c2ca038cc92949 100644 (file)
@@ -33,8 +33,8 @@ case.execute()
 print("- Calcul ADAO effectué")
 print()
 #
-print("Positions optimales de mesure")
-print("-----------------------------")
+print("Affichage des positions optimales de mesure")
+print("-------------------------------------------")
 op = case.get("OptimalPoints")[-1]
 print("- Nombre de positions optimales de mesure..............: %i"%op.size)
 print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
@@ -50,8 +50,8 @@ rs = case.get("Residus")[-1]
 print("- Résidus ordonnés d'erreur de reconstruction\n ",rs)
 print()
 a0, a1 = 7, -2.5
-print("- Exemple élémentaire de reconstruction du second champ")
-print("  comme combinaison linéaire des deux vecteurs de base,")
-print("  avec les coefficients respectifs %.1f et %.1f :"%(a0,a1))
+print("- Exemple élémentaire de reconstruction du second champ comme une")
+print("  combinaison linéaire des deux vecteurs de base, qui peuvent être")
+print("  multipliés par les coefficients respectifs %.1f et %.1f :"%(a0,a1))
 print( a0*rb[:,0] + a1*rb[:,1])
 print()
index 300a264bda8fb21b6f2c524250787fbec4c110a5..6f0d6c77229984a14d169e98c080476bb56d80f2 100644 (file)
@@ -15,8 +15,8 @@ Recherche des positions optimales de mesure
 -------------------------------------------
 - Calcul ADAO effectué
 
-Positions optimales de mesure
------------------------------
+Affichage des positions optimales de mesure
+-------------------------------------------
 - Nombre de positions optimales de mesure..............: 2
 - Positions optimales de mesure, numérotées par défaut.: [6 0]
 
@@ -35,9 +35,9 @@ Représentation réduite et informations d'erreurs
 - Résidus ordonnés d'erreur de reconstruction
   [2.43926218e+01 4.76969601e+00 2.51214793e-15]
 
-- Exemple élémentaire de reconstruction du second champ
-  comme combinaison linéaire des deux vecteurs de base,
-  avec les coefficients respectifs 7.0 et -2.5 :
+- Exemple élémentaire de reconstruction du second champ comme une
+  combinaison linéaire des deux vecteurs de base, qui peuvent être
+  multipliés par les coefficients respectifs 7.0 et -2.5 :
 [[1.]
  [2.]
  [3.]
index c90fcefcdaae92d4b0d9d0facdca2da133abb24d..58516f3736f1433a551f9b96712a18f7dc1aec57 100644 (file)
@@ -1,5 +1,2 @@
-.. warning::
-
-  Dans la présente version, cet algorithme ou certaines de ses variantes sont
-  expérimentaux, et restent donc susceptibles de changements dans les
-  prochaines versions.
+Cet algorithme est réservé à une utilisation en interface textuelle (TUI), et
+donc pas en interface graphique (GUI).
diff --git a/doc/fr/snippets/Header2Algo99.rst b/doc/fr/snippets/Header2Algo99.rst
new file mode 100644 (file)
index 0000000..c90fcef
--- /dev/null
@@ -0,0 +1,5 @@
+.. warning::
+
+  Dans la présente version, cet algorithme ou certaines de ses variantes sont
+  expérimentaux, et restent donc susceptibles de changements dans les
+  prochaines versions.
index 9bfbe23d13a9321763daadb18a36c0105791a513..ff9fd394dd1ce290e112a8c6647889d90f7a1a24 100644 (file)
@@ -17,7 +17,7 @@ l'étendue décrite ci-dessous.
 
    Python,     3.6.5,    3.11.5
    Numpy,      1.14.3,    1.26.0
-   Scipy,      0.19.1,    1.11.2
+   Scipy,      0.19.1,    1.11.3
    MatplotLib, 2.2.2,    3.8.0
    GnuplotPy,  1.8,    1.8
    NLopt,      2.4.2,    2.7.1
diff --git a/doc/fr/snippets/ReducedCoordinates.rst b/doc/fr/snippets/ReducedCoordinates.rst
new file mode 100644 (file)
index 0000000..bbbb347
--- /dev/null
@@ -0,0 +1,9 @@
+.. index:: single: ReducedCoordinates
+
+ReducedCoordinates
+  *Liste de vecteurs*. Chaque élément de cette variable est constitué des
+  coordonnées d'un état physique complet :math:`\mathbf{y}` dans la base
+  réduite.
+
+  Exemple :
+  ``rc = ADD.get("ReducedCoordinates")[-1]``
index 297e8bb8318dcf289fd7ef8b47981b871f050c52..4236143bab51c4a480253fd8b97c12456fdff861 100644 (file)
@@ -208,6 +208,8 @@ def EIM_online(selfA, QEIM, gJmu = None, mPoints = None, mu = None, PseudoInvers
     logging.debug("%s The full field of size %i has been correctly build"%(selfA._name,__gMmu.size))
     if hasattr(selfA, "StoredVariables"):
         selfA.StoredVariables["Analysis"].store( __gMmu )
+        if selfA._toStore("ReducedCoordinates"):
+            selfA.StoredVariables["ReducedCoordinates"].store( __gammaMu )
     #
     return __gMmu
 
index b055ccb6a4a1d95574e530c4362511f8f86dac2f..98fe7ebf0817fb97813cc484644770f0a50b16f6 100644 (file)
@@ -57,6 +57,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             message  = "Liste de calculs supplémentaires à stocker et/ou effectuer",
             listval  = [
                 "Analysis",
+                "ReducedCoordinates",
                 ]
             )
         self.requireInputArguments(
index ddf1acb8cbc5fc403f101472c8e6999081de0fad..2b371a5ff735a16a13a610520d7ced9b125d2df4 100644 (file)
@@ -21,7 +21,9 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 import numpy, math
-from daCore import BasicObjects
+from daCore import BasicObjects, PlatformInfo
+mpr = PlatformInfo.PlatformInfo().MachinePrecision()
+mfp = PlatformInfo.PlatformInfo().MaximumPrecision()
 from daCore.PlatformInfo import vfloat
 from daAlgorithms.Atoms import ecweim, eosg
 
@@ -29,7 +31,7 @@ from daAlgorithms.Atoms import ecweim, eosg
 class ElementaryAlgorithm(BasicObjects.Algorithm):
     def __init__(self):
         #
-        BasicObjects.Algorithm.__init__(self, "INTERPOLATIONBYREDUCEDMODEL")
+        BasicObjects.Algorithm.__init__(self, "INTERPOLATIONBYREDUCEDMODELTEST")
         self.defineRequiredParameter(
             name     = "ReducedBasis",
             default  = [],
@@ -100,6 +102,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #--------------------------
         __s = self._parameters["ShowElementarySummary"]
         __p = self._parameters["NumberOfPrintedDigits"]
+        __r = __nsn
         #
         __marge = 5*u" "
         __flech = 3*"="+"> "
@@ -141,6 +144,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         msgs += (__flech + "Interpolation error test for all given states:\n")
         msgs += (__marge + "----------------------------------------------\n")
         msgs += ("\n")
+        Es = []
         for ns in range(__nsn):
             __rm = __eos[__ip,ns]
             __im = ecweim.EIM_online(self, __rb, __eos[__ip,ns], __ip)
@@ -149,8 +153,29 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
                 __ecart = vfloat(numpy.linalg.norm( __eos[:,ns] - __im ) / numpy.linalg.norm( __eos[:,ns] ))
             else:
                 __ecart = vfloat(numpy.linalg.norm( __eos[:,ns] - __im, ord=numpy.inf ) / numpy.linalg.norm( __eos[:,ns], ord=numpy.inf ))
+            Es.append( __ecart )
             if __s:
                 msgs += (__marge + "Normalized interpolation error (%s) for state number %0"+str(__ordre)+"i..: %."+str(__p)+"e\n")%(self._parameters["ErrorNorm"],ns,__ecart)
+        msgs += ("\n")
+        msgs += (__marge + "%s\n"%("-"*75,))
+        #
+        if __r > 1:
+            msgs += ("\n")
+            msgs += (__flech + "Launching statistical summary calculation for %i states\n"%__r)
+            msgs += ("\n")
+            msgs += (__marge + "Statistical analysis of the errors Es obtained over the collection of states\n")
+            msgs += (__marge + "(Remark: numbers that are (about) under %.0e represent 0 to machine precision)\n"%mpr)
+            msgs += ("\n")
+            Yy = numpy.array( Es )
+            msgs += (__marge + "Number of evaluations...........................: %i\n")%len( Es )
+            msgs += ("\n")
+            msgs += (__marge + "Characteristics of the whole set of error outputs Es:\n")
+            msgs += (__marge + "  Minimum value of the whole set of outputs.....: %."+str(__p)+"e\n")%numpy.min(  Yy )
+            msgs += (__marge + "  Maximum value of the whole set of outputs.....: %."+str(__p)+"e\n")%numpy.max(  Yy )
+            msgs += (__marge + "  Mean of vector of the whole set of outputs....: %."+str(__p)+"e\n")%numpy.mean( Yy, dtype=mfp )
+            msgs += (__marge + "  Standard error of the whole set of outputs....: %."+str(__p)+"e\n")%numpy.std(  Yy, dtype=mfp )
+            msgs += ("\n")
+            msgs += (__marge + "%s\n"%("-"*75,))
         #
         msgs += ("\n")
         msgs += (__marge + "End of the \"%s\" verification\n\n"%self._name)
index 1550b99e1c545ad56b73cea781596ccf363f6ce6..6904e183ce6e8643059505b6bc01df207aea35b2 100644 (file)
@@ -726,6 +726,7 @@ class Algorithm(object):
             - MahalanobisConsistency : indicateur de consistance des covariances
             - OMA : Observation moins Analyse : Y - Xa
             - OMB : Observation moins Background : Y - Xb
+            - ReducedCoordinates : coordonnées dans la base réduite
             - Residu : dans le cas des algorithmes de vérification
             - SampledStateForQuantiles : échantillons d'états pour l'estimation des quantiles
             - SigmaBck2 : indicateur de correction optimale des erreurs d'ébauche
@@ -798,6 +799,7 @@ class Algorithm(object):
         self.StoredVariables["OMB"]                                  = Persistence.OneVector(name = "OMB")
         self.StoredVariables["OptimalPoints"]                        = Persistence.OneVector(name = "OptimalPoints")
         self.StoredVariables["ReducedBasis"]                         = Persistence.OneMatrix(name = "ReducedBasis")
+        self.StoredVariables["ReducedCoordinates"]                   = Persistence.OneVector(name = "ReducedCoordinates")
         self.StoredVariables["Residu"]                               = Persistence.OneScalar(name = "Residu")
         self.StoredVariables["Residus"]                              = Persistence.OneVector(name = "Residus")
         self.StoredVariables["SampledStateForQuantiles"]             = Persistence.OneMatrix(name = "SampledStateForQuantiles")