From 2c90770f6a91b976abb28552503fe988efbfc532 Mon Sep 17 00:00:00 2001 From: Jean-Philippe ARGAUD Date: Fri, 17 Sep 2021 13:47:24 +0200 Subject: [PATCH] Documentation update (UPA) --- .../eficas_userpostanalysis_nodetype.png | Bin 0 -> 14661 bytes doc/en/methodology.rst | 17 +- doc/en/ref_observers_requirements.rst | 81 ++++---- doc/en/ref_userpostanalysis_requirements.rst | 175 +++++++++++++++++ doc/en/reference.rst | 3 +- doc/en/snippets/EntryTypeDataFile.rst | 6 +- doc/en/snippets/UserPostAnalysis.rst | 6 +- doc/en/tui.rst | 8 +- .../eficas_userpostanalysis_nodetype.png | Bin 0 -> 14661 bytes doc/fr/methodology.rst | 20 +- doc/fr/ref_covariance_requirements.rst | 12 +- doc/fr/ref_observers_requirements.rst | 97 +++++----- doc/fr/ref_userpostanalysis_requirements.rst | 179 ++++++++++++++++++ doc/fr/reference.rst | 3 +- doc/fr/snippets/EntryTypeDataFile.rst | 12 +- doc/fr/snippets/UserPostAnalysis.rst | 4 +- doc/fr/tui.rst | 4 +- doc/fr/tutorials_in_python.rst | 2 +- 18 files changed, 500 insertions(+), 129 deletions(-) create mode 100644 doc/en/images/eficas_userpostanalysis_nodetype.png create mode 100644 doc/en/ref_userpostanalysis_requirements.rst create mode 100644 doc/fr/images/eficas_userpostanalysis_nodetype.png create mode 100644 doc/fr/ref_userpostanalysis_requirements.rst diff --git a/doc/en/images/eficas_userpostanalysis_nodetype.png b/doc/en/images/eficas_userpostanalysis_nodetype.png new file mode 100644 index 0000000000000000000000000000000000000000..ec342975e2c94a14d639fd4207b6f59002a50493 GIT binary patch literal 14661 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",info," Value =",var[-1]) @@ -134,8 +135,8 @@ Inventaire des modèles de fonctions "*observer*" disponibles ("*Template*") .. index:: single: ValuePrinter (Observer) -Modèle **ValuePrinter** : -......................... +Modèle **ValuePrinter** +....................... Imprime sur la sortie standard la valeur courante de la variable. @@ -145,8 +146,8 @@ Imprime sur la sortie standard la valeur courante de la variable. .. index:: single: ValueAndIndexPrinter (Observer) -Modèle **ValueAndIndexPrinter** : -................................. +Modèle **ValueAndIndexPrinter** +............................... Imprime sur la sortie standard la valeur courante de la variable, en ajoutant son index. @@ -156,8 +157,8 @@ Imprime sur la sortie standard la valeur courante de la variable, en ajoutant so .. index:: single: ValueSeriePrinter (Observer) -Modèle **ValueSeriePrinter** : -.............................. +Modèle **ValueSeriePrinter** +............................ Imprime sur la sortie standard la série des valeurs de la variable. @@ -167,8 +168,8 @@ Imprime sur la sortie standard la série des valeurs de la variable. .. index:: single: ValueSaver (Observer) -Modèle **ValueSaver** : -....................... +Modèle **ValueSaver** +..................... Enregistre la valeur courante de la variable dans un fichier du répertoire '/tmp' nommé 'value...txt' selon le nom de la variable et l'étape d'enregistrement. @@ -188,8 +189,8 @@ Enregistre la valeur courante de la variable dans un fichier du répertoire '/tm .. index:: single: ValueSerieSaver (Observer) -Modèle **ValueSerieSaver** : -............................ +Modèle **ValueSerieSaver** +.......................... Enregistre la série des valeurs de la variable dans un fichier du répertoire '/tmp' nommé 'value...txt' selon le nom de la variable et l'étape. @@ -209,8 +210,8 @@ Enregistre la série des valeurs de la variable dans un fichier du répertoire ' .. index:: single: ValuePrinterAndSaver (Observer) -Modèle **ValuePrinterAndSaver** : -................................. +Modèle **ValuePrinterAndSaver** +............................... Imprime sur la sortie standard et, en même temps enregistre dans un fichier du répertoire '/tmp', la valeur courante de la variable. @@ -231,8 +232,8 @@ Imprime sur la sortie standard et, en même temps enregistre dans un fichier du .. index:: single: ValueIndexPrinterAndSaver (Observer) -Modèle **ValueIndexPrinterAndSaver** : -...................................... +Modèle **ValueIndexPrinterAndSaver** +.................................... Imprime sur la sortie standard et, en même temps enregistre dans un fichier du répertoire '/tmp', la valeur courante de la variable, en ajoutant son index. @@ -253,8 +254,8 @@ Imprime sur la sortie standard et, en même temps enregistre dans un fichier du .. index:: single: ValueSeriePrinterAndSaver (Observer) -Modèle **ValueSeriePrinterAndSaver** : -...................................... +Modèle **ValueSeriePrinterAndSaver** +.................................... Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du répertoire '/tmp', la série des valeurs de la variable. @@ -275,8 +276,8 @@ Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du .. index:: single: ValueGnuPlotter (Observer) -Modèle **ValueGnuPlotter** : -............................ +Modèle **ValueGnuPlotter** +.......................... Affiche graphiquement avec Gnuplot la valeur courante de la variable. @@ -297,8 +298,8 @@ Affiche graphiquement avec Gnuplot la valeur courante de la variable. .. index:: single: ValueSerieGnuPlotter (Observer) -Modèle **ValueSerieGnuPlotter** : -................................. +Modèle **ValueSerieGnuPlotter** +............................... Affiche graphiquement avec Gnuplot la série des valeurs de la variable. @@ -319,8 +320,8 @@ Affiche graphiquement avec Gnuplot la série des valeurs de la variable. .. index:: single: ValuePrinterAndGnuPlotter (Observer) -Modèle **ValuePrinterAndGnuPlotter** : -...................................... +Modèle **ValuePrinterAndGnuPlotter** +.................................... Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la valeur courante de la variable. @@ -342,8 +343,8 @@ Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gn .. index:: single: ValueSeriePrinterAndGnuPlotter (Observer) -Modèle **ValueSeriePrinterAndGnuPlotter** : -........................................... +Modèle **ValueSeriePrinterAndGnuPlotter** +......................................... Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la série des valeurs de la variable. @@ -365,8 +366,8 @@ Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gn .. index:: single: ValuePrinterSaverAndGnuPlotter (Observer) -Modèle **ValuePrinterSaverAndGnuPlotter** : -........................................... +Modèle **ValuePrinterSaverAndGnuPlotter** +......................................... Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du répertoire '/tmp' et affiche graphiquement la valeur courante de la variable. @@ -398,8 +399,8 @@ Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du .. index:: single: ValueSeriePrinterSaverAndGnuPlotter (Observer) -Modèle **ValueSeriePrinterSaverAndGnuPlotter** : -................................................ +Modèle **ValueSeriePrinterSaverAndGnuPlotter** +.............................................. Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du répertoire '/tmp' et affiche graphiquement la série des valeurs de la variable. @@ -431,8 +432,8 @@ Imprime sur la sortie standard et, en même temps, enregistre dans un fichier du .. index:: single: ValueMean (Observer) -Modèle **ValueMean** : -...................... +Modèle **ValueMean** +.................... Imprime sur la sortie standard la moyenne de la valeur courante de la variable. @@ -443,8 +444,8 @@ Imprime sur la sortie standard la moyenne de la valeur courante de la variable. .. index:: single: ValueStandardError (Observer) -Modèle **ValueStandardError** : -............................... +Modèle **ValueStandardError** +............................. Imprime sur la sortie standard l'écart-type de la valeur courante de la variable. @@ -455,8 +456,8 @@ Imprime sur la sortie standard l'écart-type de la valeur courante de la variabl .. index:: single: ValueVariance (Observer) -Modèle **ValueVariance** : -.......................... +Modèle **ValueVariance** +........................ Imprime sur la sortie standard la variance de la valeur courante de la variable. @@ -467,8 +468,8 @@ Imprime sur la sortie standard la variance de la valeur courante de la variable. .. index:: single: ValueL2Norm (Observer) -Modèle **ValueL2Norm** : -........................ +Modèle **ValueL2Norm** +...................... Imprime sur la sortie standard la norme L2 de la valeur courante de la variable. @@ -480,8 +481,8 @@ Imprime sur la sortie standard la norme L2 de la valeur courante de la variable. .. index:: single: ValueRMS (Observer) -Modèle **ValueRMS** : -..................... +Modèle **ValueRMS** +................... Imprime sur la sortie standard la racine de la moyenne des carrés (RMS), ou moyenne quadratique, de la valeur courante de la variable. diff --git a/doc/fr/ref_userpostanalysis_requirements.rst b/doc/fr/ref_userpostanalysis_requirements.rst new file mode 100644 index 0000000..8683b83 --- /dev/null +++ b/doc/fr/ref_userpostanalysis_requirements.rst @@ -0,0 +1,179 @@ +.. + Copyright (C) 2008-2021 EDF R&D + + This file is part of SALOME ADAO module. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + + Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D + +.. _section_ref_userpostanalysis_requirements: + +Exigences pour décrire un post-traitement dédié après calcul ADAO +----------------------------------------------------------------- + +.. index:: single: Post-Traitement +.. index:: single: UserPostAnalysis +.. index:: single: setUserPostAnalysis +.. index:: single: UserPostAnalysis Template + +Des traitements de résultats sont usuellement nécessaires après un calcul ADAO, +pour l'insérer dans une étude complète. Après exécution d'un cas de calcul, +l'information principale est la variable "*Analysis*" qui contient un résultat +d'estimation optimale. On dispose en plus aussi de toutes les variables de +calcul qui ont été demandées en stockage intermédiaire à l'aide de la variable +spéciale d'algorithme "*StoreSupplementaryCalculations*". + +Les traitements les plus simples se représentent souvent par quelques lignes de +Python, qu'il est aisé de reprendre ou reporter entre deux études. Mais les +traitements plus complexes de résultats, dans l'environnement d'étude complet +SALOME, sont souvent effectués par des parties explicites de post-traitements +complémentaires, que ce soit dans des noeuds YACS ou par des commandes Python +en TUI, ou d'autres méthodes. Il est donc souvent intéressant d'identifier une +partie au moins des calculs à la suite de l'estimation ADAO, et de les associer +dans le cas de calcul. + +ADAO donne ainsi la possibilité de définir un post-traitement général pour +chaque cas de calcul. Cette définition se fait en indiquant les commandes à +réaliser en sortie de calcul ADAO. + +Enregistrer un post-traitement dédié +++++++++++++++++++++++++++++++++++++ + +Dans l'interface graphique EFICAS d'ADAO, il y a 3 méthodes pratiques pour +intégrer un post-traitement dédié à un cas ADAO. La méthode est choisie à +l'aide du mot-clé "*FROM*" de l'entrée principale "*UserPostAnalysis*", comme +montré dans la figure qui suit : + + .. eficas_userpostanalysis_nodetype: + .. image:: images/eficas_userpostanalysis_nodetype.png + :align: center + :width: 100% + .. centered:: + **Choisir son type d'entrée pour le post-traitement enregistré** + +Le post-traitement peut être fourni sous la forme d'un script explicite (entrée +de type "*String*"), d'un script contenu dans un fichier externe (entrée de +type "*Script*"), ou en utilisant un modèle (entrée de type "*Template*"). Les +modèles sont fournis par défaut dans ADAO lors de l'usage de l'éditeur +graphique EFICAS pour ADAO ou de l'interface TUI, et sont détaillés dans la +partie :ref:`section_ref_userpostanalysis_templates` qui suit. Ces derniers +sont des scripts simples qui peuvent être adaptés par l'utilisateur, soit dans +l'étape d'édition intégrée du cas avec EFICAS d'ADAO, soit dans l'étape +d'édition du schéma avant l'exécution, pour améliorer la performance du calcul +ADAO dans le superviseur d'exécution de SALOME. + +Dans l'interface textuelle TUI d'ADAO (voir la partie :ref:`section_tui`), les +mêmes informations peuvent être données à l'aide de la commande +"*setUserPostAnalysis*". Les arguments de cette commande permettent de définir +le traitement soit comme un modèle (argument "*Template*") désignant l'un des +scripts détaillés dans la partie :ref:`section_ref_userpostanalysis_templates`, +soit comme un script explicite (argument "*String*"), soit comme un script +contenu dans un fichier externe (argument "*Script*"). + +Forme générale d'un script permettant de définir un post-traitement dédié ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Une série de commandes de post-traitement est un script Python spécial, qui est +automatiquement activée à la fin des calculs d'estimation dans ADAO. Toutes les +commandes Python, qu'un utilisateur peut ajouter après un calcul ADAO en +interface graphique TUI, peuvent faire partie de ce post-traitement. Plusieurs +modèles de série de commandes sont disponibles par défaut. + +Pour être utilisable de manière automatique, il est requis tout appel du cas de +calcul ADAO, pour récupérer une variable, se fasse uniquement avec le nom +réservé "*ADD*". A titre d'exemple, voici un script très simple (similaire au +modèle "*ValuePrinter*"), utilisable pour afficher la valeur de l'estimation +optimale : +:: + + print('# Post-analysis') + import numpy + xa = numpy.ravel(ADD.get('Analysis')[-1]) + print('Analysis',xa) + +Si la commande "*ADD.get(...)*", utilisée pour l'obtention d'une variable +résultat, n'utilise pas le nom réservé "*ADD*" pour le cas de calcul, alors +l'appel conduira à une erreur d'exécution et préviendra de l'absence du nom du +cas. + +Pour illustration, la déclaration d'un modèle, en interface TUI, se fait en +utilisant la commande : +:: + + ADD.setUserPostAnalysis(Template = "AnalysisPrinter") + +.. warning:: + Si les modèles disponibles par défaut ne sont pas utilisés, il revient à + l'utilisateur de faire des scripts soigneusement établis et vérifiés, ou + des programmes externes qui ne se plantent pas, avant d'être enregistrés + comme un post-traitement. Le débogage peut sinon être vraiment difficile ! + +On donne ci-après l'identifiant et le contenu de tous les modèles simples +disponibles. + +.. _section_ref_userpostanalysis_templates: + +Inventaire des modèles simples de post-traitement disponibles ("*Template*") +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +.. index:: single: AnalysisPrinter (Observer) + +Modèle **AnalysisPrinter** +.......................... + +Imprime sur la sortie standard la valeur optimale. + +:: + + print('# Post-analysis') + import numpy + xa=numpy.ravel(ADD.get('Analysis')[-1]) + print('Analysis',xa) + +.. index:: single: AnalysisSaver (Observer) + +Modèle **AnalysisSaver** +........................ + +Enregistre la valeur optimale dans un fichier du répertoire '/tmp' nommé 'analysis.txt'. + +:: + + print('# Post-analysis') + import numpy + xa=numpy.ravel(ADD.get('Analysis')[-1]) + f='/tmp/analysis.txt' + print('Analysis saved in "%s"'%f) + numpy.savetxt(f,xa) + +.. index:: single: AnalysisPrinterAndSaver (Observer) + +Modèle **AnalysisPrinterAndSaver** +.................................. + +Imprime sur la sortie standard et, en même temps enregistre dans un fichier du répertoire '/tmp', la valeur optimale. + +:: + + print('# Post-analysis') + import numpy + xa=numpy.ravel(ADD.get('Analysis')[-1]) + print 'Analysis',xa + f='/tmp/analysis.txt' + print('Analysis saved in "%s"'%f) + numpy.savetxt(f,xa) diff --git a/doc/fr/reference.rst b/doc/fr/reference.rst index 68d4f3e..6d152ab 100644 --- a/doc/fr/reference.rst +++ b/doc/fr/reference.rst @@ -63,7 +63,7 @@ mathématiques utilisées sont expliquées dans la section :ref:`section_theory` .. _section_reference_special_entry: ======================================================================================== -**[DocR]** Entrées spéciales : fonctions, matrices, "*observer*" +**[DocR]** Entrées spéciales : fonctions, matrices, "*observer*", post-traitement ======================================================================================== Cette section décrit les entrées spéciales, comme les formes fonctionnelles ou @@ -76,6 +76,7 @@ sont expliquées dans la section :ref:`section_theory`. ref_operator_requirements ref_covariance_requirements ref_observers_requirements + ref_userpostanalysis_requirements .. _section_reference_assimilation: diff --git a/doc/fr/snippets/EntryTypeDataFile.rst b/doc/fr/snippets/EntryTypeDataFile.rst index 49629fc..0c41cc8 100644 --- a/doc/fr/snippets/EntryTypeDataFile.rst +++ b/doc/fr/snippets/EntryTypeDataFile.rst @@ -58,9 +58,9 @@ .. warning:: - Il est recommandé de vérifier les fichiers textes ou binaires, avant de les - utiliser en entrée de ce type. Diverses vérifications sont effectuées au - chargement, mais la variété des erreurs potentielles est grande. Dans la - pratique, en respectant les exigences de nommage des variables et de - commentaires, des fichiers textes issus de programmes ou de tableurs sont - (la plupart du temps) compatibles. + Il est recommandé, avant de les utiliser en entrée de ce type, de bien + vérifier les fichiers textes ou binaires. Diverses vérifications sont + effectuées au chargement, mais la variété des erreurs potentielles est + grande. Dans la pratique, en respectant les exigences de nommage des + variables et de commentaires, des fichiers textes issus de programmes ou de + tableurs classiques sont (la plupart du temps) compatibles. diff --git a/doc/fr/snippets/UserPostAnalysis.rst b/doc/fr/snippets/UserPostAnalysis.rst index cb6a5f2..23e5186 100644 --- a/doc/fr/snippets/UserPostAnalysis.rst +++ b/doc/fr/snippets/UserPostAnalysis.rst @@ -9,5 +9,7 @@ UserPostAnalysis chaîne de caractères, permettant de produire directement du code de post-processing dans un cas ADAO. Des exemples courants (squelettes ou "templates") sont fournis pour aider l'utilisateur ou pour faciliter - l'élaboration d'un cas. Remarque importante : ce traitement n'est exécuté que + l'élaboration d'un cas. On se reportera à la description des + :ref:`section_ref_userpostanalysis_requirements` pour avoir la liste des + modèles et leur format. Remarque importante : ce traitement n'est exécuté que lorsque le cas est exécuté en TUI ou exporté en YACS. diff --git a/doc/fr/tui.rst b/doc/fr/tui.rst index c3df5b8..07bea83 100644 --- a/doc/fr/tui.rst +++ b/doc/fr/tui.rst @@ -573,7 +573,9 @@ Paramétrer le calcul, les sorties, etc. "*AnalysisPrinter*", "*AnalysisSaver*" et "*AnalysisPrinterAndSaver*"). Dans le cas d'une définition par "*Script*", le fichier indiqué doit contenir uniquement les commandes que l'on aurait pu mettre à la suite de - l'exécution du calcul. Remarque importante : ce traitement n'est exécuté + l'exécution du calcul. On se reportera à la description des + :ref:`section_ref_userpostanalysis_requirements` pour avoir la liste des + modèles et leur format. Remarque importante : ce traitement n'est exécuté que lorsque le cas est exécuté en TUI ou exporté en YACS. Effectuer le calcul diff --git a/doc/fr/tutorials_in_python.rst b/doc/fr/tutorials_in_python.rst index 3e08b11..c3f450d 100644 --- a/doc/fr/tutorials_in_python.rst +++ b/doc/fr/tutorials_in_python.rst @@ -210,7 +210,7 @@ conventionnels pour les variables requises. Ici toutes les variables sont définies dans le même script, mais l'utilisateur peut choisir de séparer le fichier en plusieurs autres, ou de mélanger une définition explicite des données dans l'interface textuelle ADAO et une définition implicite dans des -fichiers externes. Le fichier script actuel ressemble à: +fichiers externes. Le fichier script actuel ressemble à : :: import numpy -- 2.39.2