]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Documentation examples corrections and update
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 29 May 2024 08:01:16 +0000 (10:01 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 29 May 2024 08:01:16 +0000 (10:01 +0200)
19 files changed:
doc/en/ref_algorithm_MeasurementsOptimalPositioningTask.rst
doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.png [new file with mode: 0644]
doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.py
doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.res
doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.rst
doc/en/scripts/simple_MeasurementsOptimalPositioningTask31.png [deleted file]
doc/en/scripts/simple_MeasurementsOptimalPositioningTask32.png [deleted file]
doc/en/scripts/simple_MeasurementsOptimalPositioningTask33.png [deleted file]
doc/en/snippets/ModuleCompatibility.rst
doc/fr/ref_algorithm_MeasurementsOptimalPositioningTask.rst
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.png [new file with mode: 0644]
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.py
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.res
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.rst
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask31.png [deleted file]
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask32.png [deleted file]
doc/fr/scripts/simple_MeasurementsOptimalPositioningTask33.png [deleted file]
doc/fr/snippets/ModuleCompatibility.rst
src/daComposant/daNumerics/Models/TwoDimensionalInverseDistanceCS2010.py

index a61ccd3358851a9b8e35baa037fde2e8db003d75..e2a66e374de113cef87f8f3dc80d2993d91cabba 100644 (file)
@@ -232,20 +232,10 @@ StoreSupplementaryCalculations
 
 .. include:: snippets/Header2Algo11.rst
 
-.. _simple_MeasurementsOptimalPositioningTask31:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask31.png
+.. _simple_MeasurementsOptimalPositioningTask3:
+.. image:: scripts/simple_MeasurementsOptimalPositioningTask3.png
   :align: center
-  :width: 60%
-
-.. _simple_MeasurementsOptimalPositioningTask32:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask32.png
-  :align: center
-  :width: 60%
-
-.. _simple_MeasurementsOptimalPositioningTask33:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask33.png
-  :align: center
-  :width: 60%
+  :width: 100%
 
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo06.rst
diff --git a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.png b/doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.png
new file mode 100644 (file)
index 0000000..87e62a1
Binary files /dev/null and b/doc/en/scripts/simple_MeasurementsOptimalPositioningTask3.png differ
index 8878d1256f6d1b9d4ea653d5b89e5eda40aed265..a91213ffbea2dfc65dcabf3bc959329395f3a5c0 100644 (file)
@@ -5,6 +5,7 @@ import matplotlib.pyplot as plt
 np.random.seed(123456789)
 #
 dimension = 20
+nbmeasures = 15
 #
 print("Defining a set of artificial physical fields")
 from Models.TwoDimensionalInverseDistanceCS2010 \
@@ -20,7 +21,7 @@ case.setAlgorithmParameters(
     Parameters = {
         "Variant":"DEIM",
         "SampleAsnUplet":Eq.get_sample_of_mu(15, 15),
-        "MaximumNumberOfLocations":50,
+        "MaximumNumberOfLocations":nbmeasures,
         "ErrorNorm":"Linf",
         "ErrorNormTolerance":0.,
         "StoreSupplementaryCalculations":[
@@ -34,57 +35,61 @@ case.setBackground(Vector = [1,1] )
 case.setObservationOperator(OneFunction = Eq.OneRealisation)
 case.execute()
 #
+#-------------------------------------------------------------------------------
 print()
 print("Graphical display of the results")
 #
 sp = case.get("EnsembleOfSimulations")[-1]
+sv = case.get("SingularValues")[-1]
+op = case.get("OptimalPoints")[-1]
+#
 x1, x2 = Eq.get_x()
 x1, x2 = np.meshgrid(x1, x2)
-name = "Representation of a few snapshots of G out of a total of %i"%sp.shape[1]
-print("  -", name)
-fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, figsize=(6, 6))
-fig.suptitle(name)
-ax.set_xlabel("Position x1", fontweight='bold', color='red')
-ax.set_ylabel("Position x2", fontweight='bold', color='red')
-ax.set_zlabel("Magnitude of G", fontweight='bold', color='red')
-for i in range(sp.shape[1]):
-    if i % 44 != 0: continue
-    ax.plot_surface(x1, x2, sp[:,i].reshape((dimension, dimension)), cmap='coolwarm')
-fig.savefig("simple_MeasurementsOptimalPositioningTask31.png")
-plt.close()
+posx1 = [x1.reshape((-1,))[ip] for ip in op]
+posx2 = [x2.reshape((-1,))[ip] for ip in op]
+Omega = Eq.get_bounds_on_space()
 #
-sv = case.get("SingularValues")[-1]
-name = "Singular values of the set of G simulations"
+fig = plt.figure(figsize=(18, 6))
+name = "Measurement optimal points search by "
+name += '"ADAO/MeasurementsOptimalPositioningTask/DEIM"'
+fig.suptitle(name, fontsize=20, fontstyle='italic')
+#
+ax = fig.add_subplot(1, 3, 1)
+name = "Singular values of the set of %i G simulations"%sp.shape[1]
 print("  -", name)
-fig, ax = plt.subplots(figsize=(6, 6))
-fig.suptitle(name)
+ax.set_title(name, fontstyle='italic', color='red')
 ax.set_xlabel("Index of singular values, numbered from 1")
 ax.set_ylabel("Magnitude of singular values")
 ax.set_xlim(1, len(sv))
 ax.set_yscale("log")
 ax.grid(True)
 ax.plot(range(1, 1 + len(sv)), sv)
-fig.savefig("simple_MeasurementsOptimalPositioningTask32.png")
-plt.tight_layout()
-plt.close()
 #
-nbmax = 15
-op = case.get("OptimalPoints")[-1]
-posx1 = [x1.reshape((-1,))[ip] for ip in op[:nbmax]]
-posx2 = [x2.reshape((-1,))[ip] for ip in op[:nbmax]]
-name = "Set of %i first optimal points of measurement"%nbmax
-Omega = Eq.get_bounds_on_space()
+ax = fig.add_subplot(1, 3, 2, projection = "3d")
+name = "A few simulations of G out of a total of %i"%sp.shape[1]
 print("  -", name)
-fig, ax = plt.subplots(figsize=(6, 6))
-fig.suptitle(name)
-ax.set_xlabel("Position x1", fontweight='bold', color='red')
-ax.set_ylabel("Position x2", fontweight='bold', color='red')
+ax.set_title(name, fontstyle='italic', color='red')
+ax.set_xlabel("Position x1")
+ax.set_ylabel("Position x2")
+ax.set_zlabel("Magnitude of G")
+for i in range(sp.shape[1]):
+    if i % 44 != 0: continue
+    Gfield = sp[:,i].reshape((dimension, dimension))
+    ax.plot_surface(x1, x2, Gfield, cmap='coolwarm')
+#
+ax = fig.add_subplot(1, 3, 3)
+name = "Set of %i first optimal points of measurement"%nbmeasures
+print("  -", name)
+ax.set_title(name, fontstyle='italic', color='red')
+ax.set_xlabel("Position x1")
+ax.set_ylabel("Position x2")
 ax.set_xlim(Omega[0][0] - 0.05, Omega[0][1] + 0.05)
 ax.set_ylim(Omega[1][0] - 0.05, Omega[1][1] + 0.05)
 ax.grid(True, which='both', linestyle=(0, (1, 5)), linewidth=0.5)
 ax.plot(posx1, posx2, markersize=6, marker="o", linestyle='')
 for i in range(len(posx1)):
     ax.text(posx1[i] + 0.005, posx2[i] + 0.01, str(i + 1), fontweight='bold')
-fig.savefig("simple_MeasurementsOptimalPositioningTask33.png")
+#
 plt.tight_layout()
+fig.savefig("simple_MeasurementsOptimalPositioningTask3.png")
 plt.close()
index 455a3d306879f66c1e9570bc32887786dfc3b790..7945bf1c4de1367fc2078ca54521bca70e753130 100644 (file)
@@ -3,6 +3,6 @@ Defining a set of artificial physical fields
 Search for optimal measurement positions
 
 Graphical display of the results
-  - Representation of a few snapshots of G out of a total of 225
-  - Singular values of the set of G simulations
+  - Singular values of the set of 225 G simulations
+  - A few simulations of G out of a total of 225
   - Set of 15 first optimal points of measurement
index 94452855e9dd9bebb8981ad517ab95b950cd4209..3d57f870e534b0420aaefa61bc6127eb604b9d46 100644 (file)
@@ -18,9 +18,13 @@ in the 2D plane, and on the parameter
 
 The function is represented on a regular :math:`\Omega_G` spatial grid of size
 20x20 points. It is available in ADAO built-in test models under the name
-`TwoDimensionalInverseDistanceCS2010`. So here we first build a set of
-simulations of :math:`G`, then apply the DEIM-type decomposition algorithm to
-it, and derive some simple illustrations.
+``TwoDimensionalInverseDistanceCS2010``, together with the spatial and
+parametric domain default definition. So here we first build a set of
+simulations of :math:`G`, then we look for the best locations for measurements
+to obtain an DEIM interpolation representation of the fields, by applying the
+DEIM-type decomposition algorithm to it, and then derive some simple
+illustrations. We choose to look for an arbitrary number ``nbmeasures`` of 15
+measurement locations.
 
 It can be seen that the singular values decrease steadily down to numerical
 noise, indicating that around a hundred basis elements are needed to fully
diff --git a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask31.png b/doc/en/scripts/simple_MeasurementsOptimalPositioningTask31.png
deleted file mode 100644 (file)
index 128980d..0000000
Binary files a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask31.png and /dev/null differ
diff --git a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask32.png b/doc/en/scripts/simple_MeasurementsOptimalPositioningTask32.png
deleted file mode 100644 (file)
index 8c78ab5..0000000
Binary files a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask32.png and /dev/null differ
diff --git a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask33.png b/doc/en/scripts/simple_MeasurementsOptimalPositioningTask33.png
deleted file mode 100644 (file)
index e1aa57a..0000000
Binary files a/doc/en/scripts/simple_MeasurementsOptimalPositioningTask33.png and /dev/null differ
index ce47ccfcd91c86a22e7c6f04364975d41453693a..60cf2a5685954f62c9dcec071a58a5046bc2905a 100644 (file)
@@ -16,7 +16,7 @@ versions within the range described below.
 
    Python,     3.6.5,    3.12.3
    Numpy,      1.14.3,    1.26.4
-   Scipy,      0.19.1,    1.13.0
+   Scipy,      0.19.1,    1.13.1
    MatplotLib, 2.2.2,    3.8.4
    GnuplotPy,  1.8,    1.8
    NLopt,      2.4.2,    2.7.1
index a4adb23bd9c30da43f57d06c74e46823ed9400ad..54e2cb12c74011b4bd35266441595b1153bd6c7e 100644 (file)
@@ -235,20 +235,10 @@ StoreSupplementaryCalculations
 
 .. include:: snippets/Header2Algo11.rst
 
-.. _simple_MeasurementsOptimalPositioningTask31:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask31.png
+.. _simple_MeasurementsOptimalPositioningTask3:
+.. image:: scripts/simple_MeasurementsOptimalPositioningTask3.png
   :align: center
-  :width: 60%
-
-.. _simple_MeasurementsOptimalPositioningTask32:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask32.png
-  :align: center
-  :width: 60%
-
-.. _simple_MeasurementsOptimalPositioningTask33:
-.. image:: scripts/simple_MeasurementsOptimalPositioningTask33.png
-  :align: center
-  :width: 60%
+  :width: 100%
 
 .. ------------------------------------ ..
 .. include:: snippets/Header2Algo06.rst
diff --git a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.png b/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.png
new file mode 100644 (file)
index 0000000..bec4390
Binary files /dev/null and b/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask3.png differ
index d9fca5a000beb70ae0b494d988e305ac1f074639..2ced8252e025f7783b048c95d50745fcc3bcfea8 100644 (file)
@@ -5,6 +5,7 @@ import matplotlib.pyplot as plt
 np.random.seed(123456789)
 #
 dimension = 20
+nbmeasures = 15
 #
 print("Définition d'un ensemble artificiel de champs physiques")
 from Models.TwoDimensionalInverseDistanceCS2010 \
@@ -20,7 +21,7 @@ case.setAlgorithmParameters(
     Parameters = {
         "Variant":"DEIM",
         "SampleAsnUplet":Eq.get_sample_of_mu(15, 15),
-        "MaximumNumberOfLocations":50,
+        "MaximumNumberOfLocations":nbmeasures,
         "ErrorNorm":"Linf",
         "ErrorNormTolerance":0.,
         "StoreSupplementaryCalculations":[
@@ -34,57 +35,61 @@ case.setBackground(Vector = [1,1] )
 case.setObservationOperator(OneFunction = Eq.OneRealisation)
 case.execute()
 #
+#-------------------------------------------------------------------------------
 print()
 print("Affichage graphique des résultats")
 #
 sp = case.get("EnsembleOfSimulations")[-1]
+sv = case.get("SingularValues")[-1]
+op = case.get("OptimalPoints")[-1]
+#
 x1, x2 = Eq.get_x()
 x1, x2 = np.meshgrid(x1, x2)
-name = "Représentation de quelques snapshots de G sur un total de %i"%sp.shape[1]
-print("  -", name)
-fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, figsize=(6, 6))
-fig.suptitle(name)
-ax.set_xlabel("Position x1", fontweight='bold', color='red')
-ax.set_ylabel("Position x2", fontweight='bold', color='red')
-ax.set_zlabel("Amplitude de G", fontweight='bold', color='red')
-for i in range(sp.shape[1]):
-    if i % 44 != 0: continue
-    ax.plot_surface(x1, x2, sp[:,i].reshape((dimension, dimension)), cmap='coolwarm')
-fig.savefig("simple_MeasurementsOptimalPositioningTask31.png")
-plt.close()
+posx1 = [x1.reshape((-1,))[ip] for ip in op]
+posx2 = [x2.reshape((-1,))[ip] for ip in op]
+Omega = Eq.get_bounds_on_space()
 #
-sv = case.get("SingularValues")[-1]
-name = "Valeurs singulières de l'ensemble des simulations de G"
+fig = plt.figure(figsize=(18, 6))
+name = "Recherche de points optimaux de mesure par "
+name += '"ADAO/MeasurementsOptimalPositioningTask/DEIM"'
+fig.suptitle(name, fontsize=20, fontstyle='italic')
+#
+ax = fig.add_subplot(1, 3, 1)
+name = "Valeurs singulières de l'ensemble des %i simulations de G"%sp.shape[1]
 print("  -", name)
-fig, ax = plt.subplots(figsize=(6, 6))
-fig.suptitle(name)
+ax.set_title(name, fontstyle='italic', color='red')
 ax.set_xlabel("Index des valeurs singulières, numérotées à partir de 1")
 ax.set_ylabel("Amplitude des valeurs singulières")
 ax.set_xlim(1, len(sv))
 ax.set_yscale("log")
 ax.grid(True)
 ax.plot(range(1, 1 + len(sv)), sv)
-fig.savefig("simple_MeasurementsOptimalPositioningTask32.png")
-plt.tight_layout()
-plt.close()
 #
-nbmax = 15
-op = case.get("OptimalPoints")[-1]
-posx1 = [x1.reshape((-1,))[ip] for ip in op[:nbmax]]
-posx2 = [x2.reshape((-1,))[ip] for ip in op[:nbmax]]
-name = "Ensemble des %i premiers points optimaux de mesure"%nbmax
-Omega = Eq.get_bounds_on_space()
+ax = fig.add_subplot(1, 3, 2, projection = "3d")
+name = "Quelques simulations de G sur un total de %i"%sp.shape[1]
 print("  -", name)
-fig, ax = plt.subplots(figsize=(6, 6))
-fig.suptitle(name)
-ax.set_xlabel("Position x1", fontweight='bold', color='red')
-ax.set_ylabel("Position x2", fontweight='bold', color='red')
+ax.set_title(name, fontstyle='italic', color='red')
+ax.set_xlabel("Position x1")
+ax.set_ylabel("Position x2")
+ax.set_zlabel("Amplitude de G")
+for i in range(sp.shape[1]):
+    if i % 44 != 0: continue
+    Gfield = sp[:,i].reshape((dimension, dimension))
+    ax.plot_surface(x1, x2, Gfield, cmap='coolwarm')
+#
+ax = fig.add_subplot(1, 3, 3)
+name = "Ensemble des %i premiers points optimaux de mesure"%nbmeasures
+print("  -", name)
+ax.set_title(name, fontstyle='italic', color='red')
+ax.set_xlabel("Position x1")
+ax.set_ylabel("Position x2")
 ax.set_xlim(Omega[0][0] - 0.05, Omega[0][1] + 0.05)
 ax.set_ylim(Omega[1][0] - 0.05, Omega[1][1] + 0.05)
 ax.grid(True, which='both', linestyle=(0, (1, 5)), linewidth=0.5)
 ax.plot(posx1, posx2, markersize=6, marker="o", linestyle='')
 for i in range(len(posx1)):
     ax.text(posx1[i] + 0.005, posx2[i] + 0.01, str(i + 1), fontweight='bold')
-fig.savefig("simple_MeasurementsOptimalPositioningTask33.png")
+#
 plt.tight_layout()
+fig.savefig("simple_MeasurementsOptimalPositioningTask3.png")
 plt.close()
index 756b5bf41d74932ae1cddaf080e44fb07f58a0f0..c43b05b3c5ba8a9558327a190b9013ad348a4beb 100644 (file)
@@ -3,6 +3,6 @@ Définition d'un ensemble artificiel de champs physiques
 Recherche des positions optimales de mesure
 
 Affichage graphique des résultats
-  - Représentation de quelques snapshots de G sur un total de 225
-  - Valeurs singulières de l'ensemble des simulations de G
+  - Valeurs singulières de l'ensemble des 225 simulations de G
+  - Quelques simulations de G sur un total de 225
   - Ensemble des 15 premiers points optimaux de mesure
index 8225906bd14cb33be762c26f5526fd91cbfd45ae..6a2d2e0798acf00d4e7a68f1ff03ed2c8f1ec095 100644 (file)
@@ -19,10 +19,12 @@ dans le plan 2D, et du paramètre
 
 La fonction est représenté sur une grille spatiale régulière :math:`\Omega_G`
 de taille 20x20 points. Elle est disponible dans les modèles de tests intégrés
-pour ADAO sous le nom `TwoDimensionalInverseDistanceCS2010`. On construit donc
-ici tout d'abord un ensemble de simulations de :math:`G`, pour lui appliquer
-ensuite l'algorithme de décomposition de type DEIM, et en tirer des
-illustrations simples.
+pour ADAO sous le nom ``TwoDimensionalInverseDistanceCS2010``. On construit
+donc ici tout d'abord un ensemble de simulations de :math:`G`, puis on cherche
+les meilleurs positions de mesures pour obtenir une représentation par
+interpolation DEIM des champs, en appliquant l'algorithme de décomposition de
+type DEIM, et on en tire ensuite des illustrations simples. On choisit de
+rechercher un nombre arbitraire ``nbmeasures`` de 15 positions de mesures.
 
 On observe ainsi que les valeurs singulières décroissent régulièrement jusqu'au
 bruit numérique, indiquant qu'il faut environ une centaine d'éléments de base
diff --git a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask31.png b/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask31.png
deleted file mode 100644 (file)
index 4e21179..0000000
Binary files a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask31.png and /dev/null differ
diff --git a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask32.png b/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask32.png
deleted file mode 100644 (file)
index a84b5bd..0000000
Binary files a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask32.png and /dev/null differ
diff --git a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask33.png b/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask33.png
deleted file mode 100644 (file)
index 296b6ea..0000000
Binary files a/doc/fr/scripts/simple_MeasurementsOptimalPositioningTask33.png and /dev/null differ
index fe333b5d53c4643eee45e6b65c725bf9d3c4f88e..0eecbfddf2a62a9a8000efb86e13fd293cb9bb91 100644 (file)
@@ -17,7 +17,7 @@ l'étendue décrite ci-dessous.
 
    Python,     3.6.5,    3.12.3
    Numpy,      1.14.3,    1.26.4
-   Scipy,      0.19.1,    1.13.0
+   Scipy,      0.19.1,    1.13.1
    MatplotLib, 2.2.2,    3.8.4
    GnuplotPy,  1.8,    1.8
    NLopt,      2.4.2,    2.7.1
index 6df69eb2dc4b3df41798c9fb8e2542ca4ee83ab2..c86e9e072c37acfd24af1a12102236e214ec712e 100644 (file)
@@ -37,12 +37,14 @@ class TwoDimensionalInverseDistanceCS2010:
         SIAM Journal on Scientific Computing, 32(5), pp. 2737-2764 (2010).
     """
     def __init__(self, nx: int = 20, ny: int = 20):
+        "Définition du maillage spatial"
         self.nx  = max(1, nx)
         self.ny  = max(1, ny)
         self.x   = numpy.linspace(0.1, 0.9, self.nx, dtype=float)
         self.y   = numpy.linspace(0.1, 0.9, self.ny, dtype=float)
 
     def FunctionH(self, XX ):
+        "Fonction simulation pour un paramètre donné"
         __mu1, __mu2 = numpy.ravel(XX)
         #
         __x, __y = numpy.meshgrid( self.x, self.y )
@@ -51,15 +53,18 @@ class TwoDimensionalInverseDistanceCS2010:
         return __sxymu
 
     def get_x(self):
+        "Renvoie le maillage spatial"
         return self.x, self.y
 
     def get_sample_of_mu(self, ns1: int = 20, ns2: int = 20):
+        "Renvoie l'échantillonnage paramétrique régulier"
         smu1 = numpy.linspace(-1, -0.01, ns1, dtype=float)
         smu2 = numpy.linspace(-1, -0.01, ns2, dtype=float)
         smu = numpy.array([(mu1, mu2) for mu1 in smu1 for mu2 in smu2])
         return smu
 
     def get_random_sample_of_mu(self, ns1: int = 1, ns2: int = 1):
+        "Renvoie l'échantillonnage paramétrique aléatoire"
         smu = []
         for i in range(ns1 * ns2):
             smu1 = numpy.random.uniform(-1, -0.01)
@@ -69,9 +74,11 @@ class TwoDimensionalInverseDistanceCS2010:
         return smu
 
     def get_bounds_on_space(self):
+        "Renvoie les bornes sur le maillage spatial"
         return [[min(self.x), max(self.x)], [min(self.y), max(self.y)]]
 
     def get_bounds_on_parameter(self):
+        "Renvoie les bornes sur le maillage paramétrique"
         return [[-1, -0.01]] * 2
 
     OneRealisation = FunctionH