From 38afa327815d9e4dc67da1cfd0d0995a8fd52c6a Mon Sep 17 00:00:00 2001 From: nicolas Date: Tue, 24 Sep 2013 09:16:00 +0000 Subject: [PATCH] =?utf8?q?Documentation=20sur=20les=20sch=C3=83=C2=A9mas?= =?utf8?q?=20YACS=20Insertion=20de=20sch=C3=83=C2=A9mas=20YACS=20dans=20le?= =?utf8?q?s=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/en/gui_create_yacs.rst | 11 +-- doc/en/gui_create_yacs_aster.rst | 91 ++++++++++++++---------- doc/en/gui_usage.rst | 2 + doc/files/yacs_aster_01.comm | 85 +++++++++++++++++++++++ doc/fr/gui_create_yacs.rst | 13 ++-- doc/fr/gui_create_yacs_aster.rst | 92 ++++++++++++++----------- tests/test_1.py | 45 +++++++----- tests/test_2.py | 45 +++++++----- tests/test_3.py | 115 ++++++++++++++++++++----------- 9 files changed, 326 insertions(+), 173 deletions(-) create mode 100644 doc/files/yacs_aster_01.comm diff --git a/doc/en/gui_create_yacs.rst b/doc/en/gui_create_yacs.rst index cfbfd6ee..f581163b 100644 --- a/doc/en/gui_create_yacs.rst +++ b/doc/en/gui_create_yacs.rst @@ -52,7 +52,6 @@ In return: - ``dico_resu`` : a dictionary python that contains at less the two following keys: ``FileName`` is the key for the name of the MED file which contains the results of the calculation, ``V_TEST`` is the key for the real value to be tested. - Example for the script: :: @@ -62,10 +61,6 @@ Example for the script: Script_A = Script(argu) error, message, dico_resu = Script_A.compute () -.. note:: - - * To drive Code_Aster : :download:`ScriptAster<../files/yacs_script.py>` - The directory ************* The directory will countain all the files producted by the computations. By default, nothing is suggested. The choice is made either by giving a name into the text zone or by a selection through the search window. @@ -84,7 +79,7 @@ The option 'variable' is inactive today. Saving the schema ***************** -By default, the schema is saved into the file `schema.xml` in the directory of the case that is under the schema. If the file is deleted, it can be rewritten by the mouse option "Write". +By default, the schema is saved into the file ``schema.xml`` in the directory of the case that is under the schema. If the file is deleted, it can be rewritten by the mouse option **Write**. Object browser ************** @@ -114,7 +109,7 @@ These tests ares done into the node "Analyse" of the schema, as described in :re The maximal number of iterations is given by the variable `NbCalcMax`: .. literalinclude:: ../files/yacs_01.fr.xml - :lines: 111-113 + :lines: 112-112 The value for the test is saved in a list all along the calculations: @@ -135,7 +130,7 @@ Examples ######## .. index:: single: Code_Aster -A user's guide for schemas with Code_Aster is available here: :ref:`gui_create_yacs_aster`. +A user's guide for schemas with *Code_Aster* is available here: :ref:`gui_create_yacs_aster`. diff --git a/doc/en/gui_create_yacs_aster.rst b/doc/en/gui_create_yacs_aster.rst index e947b8ad..13c29725 100644 --- a/doc/en/gui_create_yacs_aster.rst +++ b/doc/en/gui_create_yacs_aster.rst @@ -1,61 +1,76 @@ .. _gui_create_yacs_aster: -A schema YACS for Code_Aster -############################ +A schema YACS for *Code_Aster* +############################## .. index:: single: YACS .. index:: single: Code_Aster -If the schema implies a coupling between Code_Aster and HOMARD, somme comments are included here. +If the schema implies a coupling between *Code_Aster* and HOMARD, some comments are included here. -Préalable -********* -La création automatique du schema va se faire en trois phases : +Preparations +************ +The directory for the computation +================================= +The first phase consists in creating a directory which will gather the files of the calculation and the files of the successive meshes. -- Au départ, il faut avoir fait un calcul sur un tout premier maillage. Ce calcul aura produit des résultats dans un fichier MED. -- Ensuite, on crée un cas dans le module HOMARD, tel qu'il est décrit dans :ref:`gui_create_case`. Dans ce cas, on crée une itération suivante du maillage en définissant une hypothèse d'adaptation ; voir :ref:`gui_create_iteration`. -- Enfin, de ce cas, on va créer le schema qui se basera sur l'hypothèse d'adapation définie. +Commands +======== +The file +-------- +The commands of the calculation are to be defined as for any calculation. They are to be saved in the directory of calculation, in the named file ``calcul.comm``. +The test valeur +--------------- +To get back the test value ``V_TEST``, the script fetches in the file ``resu`` a line such as: +:: -.. image:: images/create_yacs_01.png - :align: center - :alt: yacs - création - :width: 551 - :height: 295 + V_TEST 0.02071983 -Le script -********* +For that purpose, the best way consists in placing the test value in an entitled table ``V_TEST``, for example after an extraction from a result: -Le fichier contenant le script qui permet de lancer le calcul lié à la modélisation physique est fourni ici. C'est un script python qui doit respecter les règles suivantes : +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 53-59 -- le nom de la classe qui gère le calcul est ``Script`` -- le lancement du calcul se fait par la méthode ``Compute()`` -- le résultat du calcul est sous la forme de trois variables : le code d'erreur, un message, un dictionnaire python. +Then print this table for the two parameters ``INTITULE`` and component: -S'ils sont nécessaires à la création de la classe, on peut passer des arguments sous la forme : +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 63-64 -- ``--rep_calc=rep_calc``, où ``rep_calc`` est le répertoire de calcul -- ``--num=num``, où ``num`` est le numéro du calcul : 0 pour le tout premier, puis 1, 2 etc. -- ``--mesh_file=meshfile``, où ``meshfile`` est le fichier contenant le maillage sur lequel calculer. -- ``-v``, pour des messages +To drive the adaptation +----------------------- +If the adaptation is driven by a field, it will be necessary to write this field in the exit MED file. It can be an error indicator (CALC_ERREUR command) or another field. -Les arguments de retour : +For example : -- ``erreur`` : le code d'erreur, entier : 0 si le calcul est correct, non nul sinon -- ``message`` : un éventuel message d'information sur le calcul -- ``dico_resu`` : un dictionnaire python qui comprend a minima les deux clés suivantes : ``FileName`` est la clé pour le nom du fichier MED qui contient les résultats du calcul, ``V_TEST`` est la clé pour la valeur réelle à tester. +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 68-78 +The script +========== +The script for running *Code_Aster* to supply in the schema YACS is to be downloaded here: :download:`ScriptAster<../files/yacs_script.py>`. This file can be moved anywhere. +How to do ? +*********** +A first calculation +=================== +As soon as the commands are correct, a first calculation has to be done. That gives the opportunity to choose the parameters: *Code_Aster* version, calculation server, interactive/batch, and so on. These parameters will be used for the successive computations. Launching *Code_Aster* gathers these informations into a file ``export``. This file must be renamed as ``calcul.ref.export`` in the directory for the computation. -Exemple d'usage du script : -:: +Creation of the schema +====================== +When the computation is over, the following steps must be done: + +- to check that the result MED file was created and that the ligne with the test value is written down into the result file``resu``; +- to activate the module HOMARD in SALOME; +- to create a case from the initial mesh; +- to create an iteration based on the selected field; +- possibly to calculate this iteration to check choices, but it is not compulsory; +- to create the schema based on this case. + +To launch the schema +==================== +The schema is written in the file ``schema.xml`` in the directory connected to the case which is the support. This file can be moved with no problem at all. The default parameters of control of the loop of the alternation (calculation/adaptation) can be modified. - argu = ["--rep_calc=" + rep_calc)] - argu.append("--num=%d" % numCalc) - argu.append("--mesh_file=" + MeshFile) - Script_A = Script(argu) - erreur, message, dico_resu = Script_A.compute () +The module YACS is activated, the schema is imported and it is launched. -.. note:: - * Pour piloter Code_Aster : :download:`ScriptAster<../files/yacs_script.py>` diff --git a/doc/en/gui_usage.rst b/doc/en/gui_usage.rst index bad09716..6b1853bc 100644 --- a/doc/en/gui_usage.rst +++ b/doc/en/gui_usage.rst @@ -47,5 +47,7 @@ An automatic creation of a schema YACS is available in the module HOMARD. :maxdepth: 2 gui_create_yacs + gui_create_yacs_aster + diff --git a/doc/files/yacs_aster_01.comm b/doc/files/yacs_aster_01.comm new file mode 100644 index 00000000..5c252623 --- /dev/null +++ b/doc/files/yacs_aster_01.comm @@ -0,0 +1,85 @@ +# -*- coding: iso-8859-1 -*- + +DEBUT(); + +BOX=LIRE_MAILLAGE(FORMAT='MED',); + +BETON=DEFI_MATERIAU(THER=_F(LAMBDA=8000., + RHO_CP=2.400E+6,),); + +MOTH=AFFE_MODELE(MAILLAGE=BOX, + AFFE=_F(TOUT='OUI', + PHENOMENE='THERMIQUE', + MODELISATION='3D',),); + +#BOX=MODI_MAILLAGE( reuse=BOX, +# MAILLAGE=BOX, +# ORIE_PEAU_3D=_F(GROUP_MA=('CL_1','CL_2','XMIN','XMAX','YMIN','YMAX','ZMIN','ZMAX',),) +# ) + +CHMAT=AFFE_MATERIAU(MAILLAGE=BOX, + AFFE=_F(TOUT='OUI', + MATER=BETON,),); + +CHTH=AFFE_CHAR_THER(MODELE=MOTH, + TEMP_IMPO=(_F(GROUP_MA='CL_1', + TEMP=50.0,), + _F(GROUP_MA='CL_2', + TEMP=5.0,),), + FLUX_REP=(_F(GROUP_MA='XMIN', + FLUN=0.0,), + _F(GROUP_MA='XMAX', + FLUN=0.0,), + _F(GROUP_MA='YMIN', + FLUN=0.0,), + _F(GROUP_MA='YMAX', + FLUN=0.0,), + _F(GROUP_MA='ZMIN', + FLUN=0.0,), + _F(GROUP_MA='ZMAX', + FLUN=0.0,),),); + +RESU=THER_LINEAIRE(MODELE=MOTH, + CHAM_MATER=CHMAT, + EXCIT=_F(CHARGE=CHTH,),); + +IMPR_RESU(FORMAT='MED', + RESU=_F(RESULTAT=RESU, + NOM_CHAM='TEMP', + NOM_CHAM_MED='TEMPERATURE',),); + +# Extraction de la temperature sur un noeud predefini + +TA=POST_RELEVE_T(ACTION=_F(OPERATION='EXTRACTION', + INTITULE='V_TEST', + RESULTAT=RESU, + NOM_CHAM='TEMP', + NUME_ORDRE=0, + GROUP_NO='A', + NOM_CMP='TEMP',),); + +# + +IMPR_TABLE(TABLE=TA, + NOM_PARA=('INTITULE','TEMP',),); + +# Calcul de l'indicateur d'erreur + +RESU=CALC_ERREUR(reuse =RESU, + RESULTAT=RESU, + OPTION='ERTH_ELEM',); + + +IMPR_RESU(FORMAT='MED', + RESU=_F(RESULTAT=RESU, + NUME_ORDRE=0, + NOM_CHAM='ERTH_ELEM', + NOM_CMP='ERTABS', + NOM_CHAM_MED='ERREUR',),); + + +FIN(); + +# + +#CHECKSUM:5021673eed6e81bf9074892cd639b2ad -:FIN CHECKSUM diff --git a/doc/fr/gui_create_yacs.rst b/doc/fr/gui_create_yacs.rst index 8f230c17..baa82d01 100644 --- a/doc/fr/gui_create_yacs.rst +++ b/doc/fr/gui_create_yacs.rst @@ -52,7 +52,6 @@ Les arguments de retour : - ``dico_resu`` : un dictionnaire python qui comprend a minima les deux clés suivantes : ``FileName`` est la clé pour le nom du fichier MED qui contient les résultats du calcul, ``V_TEST`` est la clé pour la valeur réelle à tester. - Exemple d'usage du script : :: @@ -62,10 +61,6 @@ Exemple d'usage du script : Script_A = Script(argu) erreur, message, dico_resu = Script_A.compute () -.. note:: - - * Pour piloter Code_Aster : :download:`ScriptAster<../files/yacs_script.py>` - Le répertoire ************* Le répertoire est celui qui contiend les fichiers produits par le calcul. Par défaut, rien n'est proposé. Le choix est fait, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. @@ -85,7 +80,7 @@ L'option 'variable' est inactive aujourd'hui. Enregistrement du schéma ************************ -Par défaut, le schéma produit est écrit dans le fichier `schema.xml` dans le répertoire lié au cas qui en est le support. Si on a détruit le fichier, on peut le recréer en activant le fonction "Ecrire le fichier" à la souris. +Par défaut, le schéma produit est écrit dans le fichier ``schema.xml`` dans le répertoire lié au cas qui en est le support. Si on a détruit le fichier, on peut le recréer en activant la fonction **Ecrire le fichier** à la souris. L'arbre d'étude *************** @@ -103,7 +98,7 @@ Consulter :ref:`tui_create_yacs` Utilisation du schéma ##################### -Le schéma produit par cette saisie est directement importable dans le module YCAS. Il peut se lancer sans modification. Dans ce cas, l'arrêt dans la boucle a lieu ainsi : +Le schéma produit par cette saisie est directement importable dans le module YACS. Il peut se lancer sans modification. Dans ce cas, l'arrêt dans la boucle a lieu ainsi : - soit on a atteint le nombre maximal d'itérations dans la boucle d'alternance (calcul,adaptation) ; - soit le test de convergence sur la variable ``V_TEST`` est satisfait. @@ -115,7 +110,7 @@ Ces tests sont r Le nombre maximal d'itérations est modifiable par la variable `NbCalcMax` : .. literalinclude:: ../files/yacs_01.fr.xml - :lines: 111-113 + :lines: 112-112 La valeur de test est stockée dans une liste au fur et à mesure des passages : @@ -136,7 +131,7 @@ Exemples ######## .. index:: single: Code_Aster -Un mode d'emploi associé à la création de schéma avec Code_Aster est disponible en consultant : :ref:`gui_create_yacs_aster`. +Un mode d'emploi associé à la création de schéma avec *Code_Aster* est disponible en consultant : :ref:`gui_create_yacs_aster`. diff --git a/doc/fr/gui_create_yacs_aster.rst b/doc/fr/gui_create_yacs_aster.rst index 15904418..0f69a92d 100644 --- a/doc/fr/gui_create_yacs_aster.rst +++ b/doc/fr/gui_create_yacs_aster.rst @@ -5,61 +5,75 @@ Un sch .. index:: single: YACS .. index:: single: Code_Aster -Dans le cas où le schéma implique un couplage entre Code_Aster et HOMARD, une façon de faire est décrite ici. +Dans le cas où le schéma implique un couplage entre *Code_Aster* et HOMARD, une façon de faire est décrite ici. Les seules contraintes sont des conventions pour que le script de pilotage de *Code_Aster* fonctionne correctement au sein du schéma. + +Préparations +************ +Le répertoire de calcul +======================= +La première phase consiste à créer un répertoire qui abritera les fichiers du calcul et les fichiers des maillages successifs. + +Les commandes +============= +Le fichier +---------- +Les commandes du calcul sont à définir comme pour n'importe quel calcul. Elles sont à archiver dans le répertoire de calcul, dans un fichier nommé ``calcul.comm``. + +La valeur de test +----------------- +Pour récupérer la valeur de test ``V_TEST``, le script va chercher dans le fichier ``resu``, la ligne de type : +:: -Préalable -********* -La création automatique du schéma va se faire en trois phases : + V_TEST 0.02071983 -- Au départ, il faut avoir fait un calcul sur un tout premier maillage. Ce calcul aura produit des résultats dans un fichier MED. -- Ensuite, on crée un cas dans le module HOMARD, tel qu'il est décrit dans :ref:`gui_create_case`. Dans ce cas, on crée une itération suivante du maillage en définissant une hypothèse d'adaptation ; voir :ref:`gui_create_iteration`. -- Enfin, de ce cas, on va créer le schéma qui se basera sur l'hypothèse d'adapation définie. +Pour cela, la meilleure façon consiste à placer la valeur à tester dans une table intitulée ``V_TEST``, par exemple après une extraction depuis un résultat : +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 53-59 -.. image:: images/create_yacs_01.png - :align: center - :alt: yacs - création - :width: 551 - :height: 295 +puis à imprimer cette table en se limitant aux deux paramètres ``INTITULE`` et composante retenue : -Nom du schéma -************* -Un nom de schéma est proposé automatiquement : YACS_1, YACS_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour un autre schéma. +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 63-64 -Le script -********* +Le pilotage de l'adaptation +--------------------------- +Si on souhaite piloter l'adaptation par un champ, il faudra écrire ce champ dans le fichier MED de sortie. Ce peut être un indicateur d'erreur (commande CALC_ERREUR) ou un autre champ. -Le fichier contenant le script qui permet de lancer le calcul lié à la modélisation physique est fourni ici. C'est un script python qui doit respecter les règles suivantes : +Par exemple : -- le nom de la classe qui gère le calcul est ``Script`` -- le lancement du calcul se fait par la méthode ``Compute()`` -- le résultat du calcul est sous la forme de trois variables : le code d'erreur, un message, un dictionnaire python. +.. literalinclude:: ../files/yacs_aster_01.comm + :lines: 68-78 -S'ils sont nécessaires à la création de la classe, on peut passer des arguments sous la forme : +Le script +========= +Le script de pilotage de *Code_Aster* à fournir au schéma YACS est à télécharger ici : :download:`ScriptAster<../files/yacs_script.py>`. Ce fichier peut être placé n'importe où. -- ``--rep_calc=rep_calc``, où ``rep_calc`` est le répertoire de calcul -- ``--num=num``, où ``num`` est le numéro du calcul : 0 pour le tout premier, puis 1, 2 etc. -- ``--mesh_file=meshfile``, où ``meshfile`` est le fichier contenant le maillage sur lequel calculer. -- ``-v``, pour des messages +Comment procéder ? +****************** +Un premier calcul +================= +Une fois les commandes au point, il faut lancer un premier calcul. Cela permet de choisir le paramétrage du calcul : version de *Code_Aster*, serveur de calcul, interactif/batch, etc. Ce sont ces paramètres qui seront utilisés pour les calculs successifs dans le schéma. Le lancement de *Code_Aster* rassemble ces informations dans un fichier de type ``export``. Il faut copier ce fichier sous le nom ``calcul.ref.export`` dans le répertoire de calcul. -Les arguments de retour : +Création du schéma +================== +Quand le calcul est terminé, il faut enchaîner les étapes suivante : -- ``erreur`` : le code d'erreur, entier : 0 si le calcul est correct, non nul sinon -- ``message`` : un éventuel message d'information sur le calcul -- ``dico_resu`` : un dictionnaire python qui comprend a minima les deux clés suivantes : ``FileName`` est la clé pour le nom du fichier MED qui contient les résultats du calcul, ``V_TEST`` est la clé pour la valeur réelle à tester. +- vérifier que le fichier de résultats au format MED a été créé et que le fichier de résultats de type ``resu`` contient la ligne donnant la valeur à tester ; +- activer le module HOMARD de SALOME ; +- créer un cas à partir du maillage initial ; +- créer une itération en se basant sur le champ que l'on a retenu ; +- éventuellement calculer cette itération pour contrôler les choix, mais ce n'est pas obligatoire ; +- créer le schéma basé sur ce cas. +Lancer le schéma +================ +Le schéma est écrit dans le fichier ``schema.xml`` dans le répertoire lié au cas qui en est le support. Ce fichier peut être déplacé sans problème. On peut modifier les paramètres de contrôle par défaut de la boucle de l'alternance (calcul/adaptation). + +On active alors le module YACS, on importe le schéma et on l'exécute. -Exemple d'usage du script : -:: - argu = ["--rep_calc=" + rep_calc)] - argu.append("--num=%d" % numCalc) - argu.append("--mesh_file=" + MeshFile) - Script_A = Script(argu) - erreur, message, dico_resu = Script_A.compute () -.. note:: - * Pour piloter Code_Aster : :download:`ScriptAster<../files/yacs_script.py>` diff --git a/tests/test_1.py b/tests/test_1.py index 3d9f9d84..c48aeb70 100644 --- a/tests/test_1.py +++ b/tests/test_1.py @@ -22,20 +22,20 @@ Python script for HOMARD Copyright EDF-R&D 2010, 2013 Test test_1 """ -__revision__ = "V1.10" +__revision__ = "V1.11" #======================================================================== Test_Name = "test_1" n_iter_test_file = 3 #======================================================================== import os -import sys import tempfile import HOMARD import salome # -pathHomard=os.getenv('HOMARD_ROOT_DIR') -Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard") +pathHomard = os.getenv('HOMARD_ROOT_DIR') +Rep_Test = os.path.join(pathHomard, "share", "salome", "resources", "homard") +Rep_Test = os.path.normpath(Rep_Test) Rep_Test_Resu = tempfile.mktemp() os.mkdir(Rep_Test_Resu) @@ -104,7 +104,8 @@ Copyright EDF-R&D 2010, 2013 # Creation of the cases # ===================== # Creation of the case Case_1 - Case_1 = homard.CreateCase('Case_1', 'MAILL', os.path.join(Rep_Test, Test_Name + '.00.med')) + MeshFile = os.path.join(Rep_Test, Test_Name + '.00.med') + Case_1 = homard.CreateCase('Case_1', 'MAILL', MeshFile) Case_1.SetDirName(Rep_Test_Resu) Case_1.SetConfType(1) # @@ -143,10 +144,21 @@ Copyright EDF-R&D 2010, 2013 if error : error = 3 break + # + # Creation of the schema YACS + # =========================== + ScriptFile = os.path.join(pathHomard, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script.py") + ScriptFile = os.path.normpath(ScriptFile) + DirName = Rep_Test_Resu + YACS_1 = Case_1.CreateYACSSchema("YACS_1", ScriptFile, DirName, MeshFile) + error = YACS_1.Write() + if error : + error = 4 + break # break # - return error + return error #======================================================================== @@ -162,7 +174,6 @@ try : raise Exception('Pb in homard_exec at iteration %d' %error_main ) except Exception, e: raise Exception('Pb in homard_exec: '+e.message) - # # Test of the result # @@ -178,33 +189,29 @@ try : except : mess_error = mess_error_ref + "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) # test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) if os.path.isfile (test_file) : - file = open (test_file, "r") - mess = file.readlines() - file.close() + file = open (test_file, "r") + mess = file.readlines() + file.close() else : mess_error = "\nResult file: " + test_file mess_error += "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) nblign = len(mess_ref) if ( len(mess) != nblign ): mess_error = mess_error_ref + "\nResult file: " + test_file mess_error += "\nThe number of lines of the files are not the same.\n" raise Exception(mess_error) - sys.exit(2) for num in range(nblign) : - if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : - message_erreur = "\nRefe : " + mess_ref[num] - message_erreur += "Test : " + mess[num][:-1] - message_erreur += "\nThe test is different from the reference." - raise Exception(message_erreur) - sys.exit(10) + if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : + message_erreur = "\nRefe : " + mess_ref[num] + message_erreur += "Test : " + mess[num][:-1] + message_erreur += "\nThe test is different from the reference." + raise Exception(message_erreur) # remove_dir(Rep_Test_Resu) # diff --git a/tests/test_2.py b/tests/test_2.py index 82c7ac8a..c3408c95 100644 --- a/tests/test_2.py +++ b/tests/test_2.py @@ -22,20 +22,20 @@ Python script for HOMARD Copyright EDF-R&D 2010, 2013 Test test_2 """ -__revision__ = "V1.9" +__revision__ = "V1.10" #======================================================================== Test_Name = "test_2" n_iter_test_file = 3 #======================================================================== import os -import sys import tempfile import HOMARD import salome # -pathHomard=os.getenv('HOMARD_ROOT_DIR') -Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard") +pathHomard = os.getenv('HOMARD_ROOT_DIR') +Rep_Test = os.path.join(pathHomard, "share", "salome", "resources", "homard") +Rep_Test = os.path.normpath(Rep_Test) Rep_Test_Resu = tempfile.mktemp() os.mkdir(Rep_Test_Resu) @@ -96,7 +96,8 @@ Copyright EDF-R&D 2010, 2013 # Creation of the cases # ===================== # Creation of the case Case_2 - Case_2 = homard.CreateCase('Case_2', 'PLAQUE_0', os.path.join(Rep_Test, Test_Name + '.00.med')) + MeshFile = os.path.join(Rep_Test, Test_Name + '.00.med') + Case_2 = homard.CreateCase('Case_2', 'PLAQUE_0', MeshFile) Case_2.SetDirName(Rep_Test_Resu) Case_2.SetConfType(1) Case_2.AddBoundaryGroup('internal_boundary', '') @@ -132,10 +133,22 @@ Copyright EDF-R&D 2010, 2013 if error : error = 3 break + # + # Creation of the schema YACS + # =========================== + ScriptFile = os.path.join(pathHomard, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script.py") + ScriptFile = os.path.normpath(ScriptFile) + DirName = Rep_Test_Resu + YACS_2 = Case_2.CreateYACSSchema("YACS_2", ScriptFile, DirName, MeshFile) + filexml = os.path.join(Rep_Test_Resu, 'YACS_2.xml') + error = YACS_2.WriteOnFile(filexml) + if error : + error = 4 + break # break # - return error + return error #======================================================================== @@ -166,33 +179,29 @@ try : except : mess_error = mess_error_ref + "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) # test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) if os.path.isfile (test_file) : - file = open (test_file, "r") - mess = file.readlines() - file.close() + file = open (test_file, "r") + mess = file.readlines() + file.close() else : mess_error = "\nResult file: " + test_file mess_error += "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) nblign = len(mess_ref) if ( len(mess) != nblign ): mess_error = mess_error_ref + "\nResult file: " + test_file mess_error += "\nThe number of lines of the files are not the same.\n" raise Exception(mess_error) - sys.exit(2) for num in range(nblign) : - if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : - message_erreur = "\nRefe : " + mess_ref[num] - message_erreur += "Test : " + mess[num][:-1] - message_erreur += "\nThe test is different from the reference." - raise Exception(message_erreur) - sys.exit(10) + if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : + message_erreur = "\nRefe : " + mess_ref[num] + message_erreur += "Test : " + mess[num][:-1] + message_erreur += "\nThe test is different from the reference." + raise Exception(message_erreur) # remove_dir(Rep_Test_Resu) # diff --git a/tests/test_3.py b/tests/test_3.py index 7e06ec5c..90dd3952 100644 --- a/tests/test_3.py +++ b/tests/test_3.py @@ -22,7 +22,7 @@ Python script for HOMARD Copyright EDF-R&D 2011, 2013 Test test_3 """ -__revision__ = "V1.8" +__revision__ = "V1.9" #======================================================================== Test_Name = "test_3" @@ -30,13 +30,13 @@ n_boucle = 2 n_iter_test_file = 2 #======================================================================== import os -import sys import tempfile import HOMARD import salome # -pathHomard=os.getenv('HOMARD_ROOT_DIR') -Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard") +pathHomard = os.getenv('HOMARD_ROOT_DIR') +Rep_Test = os.path.join(pathHomard, "share", "salome", "resources", "homard") +Rep_Test = os.path.normpath(Rep_Test) Rep_Test_Resu = tempfile.mktemp() os.mkdir(Rep_Test_Resu) @@ -96,15 +96,22 @@ Copyright EDF-R&D 2010, 2013 # Creation of the hypotheses # ========================== # Uniform refinement - Hypo_3_ = homard.CreateHypothesis('Hypo_3_') - Hypo_3_.SetAdapRefinUnRef(-1, 1, 0) + HypoName = "Hypo_3" + print "-------- Creation of the hypothesis", HypoName + Hypo_3 = homard.CreateHypothesis(HypoName) + Hypo_3.SetAdapRefinUnRef(-1, 1, 0) # - for iaux in range (n_boucle+1) : + for num in range (n_boucle+1) : +# + print "-------- num =", num, "--------" # # Creation of the case Case_3 # =========================== - if ( iaux <= 1 ) : - Case_3 = homard.CreateCase('Case_3', 'MOYEU', os.path.join(Rep_Test, Test_Name + '.00.med')) + if ( num <= 1 ) : + CaseName = "Case_3" + print "-------- Creation of the case", CaseName + MeshFile = os.path.join(Rep_Test, Test_Name + '.00.med') + Case_3 = homard.CreateCase(CaseName, 'MOYEU', MeshFile) Case_3.SetDirName(Rep_Test_Resu) Case_3.SetConfType(1) Case_3.AddBoundaryGroup('courbes', '') @@ -113,50 +120,80 @@ Copyright EDF-R&D 2010, 2013 Case_3.AddBoundaryGroup('sphere_1', 'END_1') Case_3.AddBoundaryGroup('sphere_2', 'END_2') # -# Creation and destruction of the iterations -# ========================================== -# +# Creation of the iterations +# ========================== # Creation of the iteration Iter_3_1 - Iter_3_1 = Case_3.NextIteration('Iter_3_1') + IterName = "Iter_3_1" + print "-------- Creation of the iteration", IterName + Iter_3_1 = Case_3.NextIteration(IterName) Iter_3_1.SetMeshName('MOYEU_1') Iter_3_1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med')) - Iter_3_1.AssociateHypo('Hypo_3_') + Iter_3_1.AssociateHypo('Hypo_3') error = Iter_3_1.Compute(1, 1) if error : - error = 10*iaux + 1 + error = 10*num + 1 break - # Creation of the iteration Iter_3_2 - Iter_3_2 = Iter_3_1.NextIteration('Iter_3_2') + # Creation of the iteration Iter_3_2Iter_3_1 + IterName = "Iter_3_2" + print "-------- Creation of the iteration", IterName + Iter_3_2 = Iter_3_1.NextIteration(IterName) Iter_3_2.SetMeshName('MOYEU_2') Iter_3_2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med')) - Iter_3_2.AssociateHypo('Hypo_3_') + Iter_3_2.AssociateHypo('Hypo_3') error = Iter_3_2.Compute(1, 1) if error : - error = 10*iaux + 2 + error = 10*num + 2 + break + # + # Creation of the schema YACS + # =========================== + ScriptFile = os.path.join(pathHomard, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script.py") + ScriptFile = os.path.normpath(ScriptFile) + DirName = Rep_Test_Resu + YACSName = "YACS_3" + print "-------- Creation of the schema", YACSName + YACS_3 = Case_3.CreateYACSSchema(YACSName, ScriptFile, DirName, MeshFile) + error = YACS_3.Write() + if error : + error = 10*num + 5 break - # Destruction + # Destructions + # ============ + # Destruction of the schema, sauf a la fin + if ( num < n_boucle ) : + print "-------- Destruction of the schema", YACS_3.GetName() + error = YACS_3.Delete(1) + if error : + error = 10*num + 6 + break # After the first loop, the case is deleted, except the final mesh files - if ( iaux == 0 ) : + # All the iterations are deleted + if ( num == 0 ) : + print "-------- Destruction of the case", Case_3.GetName() error = Case_3.Delete(0) if error : break # After the second loop, the iterations are deleted, with the final mesh files - elif ( iaux == 1 ) : + elif ( num == 1 ) : # Recursive destruction of the iterations + print "-------- Recursive destruction of the iteration", Iter_3_1.GetName() error = Iter_3_1.Delete(1) if error : - error = 10*iaux + 3 + error = 10*num + 3 break # Destruction and creation of the hypothese - if ( iaux == 1 ) : - error = Hypo_3_.Delete() + if ( num == 1 ) : + print "-------- Destruction of the hypothese", Hypo_3.GetName() + error = Hypo_3.Delete() if error : - error = 10*iaux + 4 + error = 10*num + 4 break - Hypo_3_ = homard.CreateHypothesis('Hypo_3_') - Hypo_3_.SetAdapRefinUnRef(-1, 1, 0) + HypoName = "Hypo_3" + print "-------- Creation of the hypothesis", HypoName + Hypo_3 = homard.CreateHypothesis(HypoName) + Hypo_3.SetAdapRefinUnRef(-1, 1, 0) # break # @@ -166,7 +203,6 @@ Copyright EDF-R&D 2010, 2013 homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD') assert homard is not None, "Impossible to load homard engine" - # # Exec of HOMARD-SALOME # @@ -176,7 +212,6 @@ try : raise Exception('Pb in homard_exec at iteration %d' %error_main ) except Exception, e: raise Exception('Pb in homard_exec: '+e.message) - # # Test of the result # @@ -192,33 +227,29 @@ try : except : mess_error = mess_error_ref + "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) # test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) if os.path.isfile (test_file) : - file = open (test_file, "r") - mess = file.readlines() - file.close() + file = open (test_file, "r") + mess = file.readlines() + file.close() else : mess_error = "\nResult file: " + test_file mess_error += "\nThis file does not exist.\n" raise Exception(mess_error) - sys.exit(2) nblign = len(mess_ref) if ( len(mess) != nblign ): mess_error = mess_error_ref + "\nResult file: " + test_file mess_error += "\nThe number of lines of the files are not the same.\n" raise Exception(mess_error) - sys.exit(2) for num in range(nblign) : - if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : - message_erreur = "\nRefe : " + mess_ref[num] - message_erreur += "Test : " + mess[num][:-1] - message_erreur += "\nThe test is different from the reference." - raise Exception(message_erreur) - sys.exit(10) + if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : + message_erreur = "\nRefe : " + mess_ref[num] + message_erreur += "Test : " + mess[num][:-1] + message_erreur += "\nThe test is different from the reference." + raise Exception(message_erreur) # remove_dir(Rep_Test_Resu) # -- 2.39.2