From b75230bd93fa09fe107a49f143edfb323bd32c3e Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 11 Dec 2012 12:06:39 +0000 Subject: [PATCH] Merge from V6_6_BR (V6_6_0rc2) 11/12/2012 --- configure.ac | 2 +- doc/gui_create_case.rst | 1 + doc/gui_create_hypothese.rst | 3 +- doc/images/create_hypothese_av_1.png | Bin 9327 -> 9670 bytes doc/tui_create_boundary.rst | 215 ++++++++++------- doc/tui_create_case.rst | 23 +- doc/tui_create_hypothese.rst | 61 ++++- doc/tui_create_iteration.rst | 29 ++- doc/tui_create_zone.rst | 34 +++ idl/HOMARD_Hypothesis.idl | 3 + src/HOMARD/HOMARD_DriverTools.cxx | 10 + src/HOMARD/HOMARD_Hypothesis.cxx | 31 ++- src/HOMARD/HOMARD_Hypothesis.hxx | 3 + src/HOMARD/HOMARD_Iteration.cxx | 15 +- src/HOMARD/HomardDriver.cxx | 9 +- src/HOMARD/HomardDriver.hxx | 2 +- src/HOMARDGUI/CreateHypothesis.h | 35 +-- src/HOMARDGUI/CreateHypothesis.ui | 31 ++- src/HOMARDGUI/CreateIteration.h | 8 +- src/HOMARDGUI/CreateIteration.ui | 321 +++++++++++++------------- src/HOMARDGUI/HOMARD_msg_fr.ts | 4 + src/HOMARDGUI/Makefile.am | 2 +- src/HOMARDGUI/MonCreateHypothesis.cxx | 10 +- src/HOMARDGUI/MonCreateHypothesis.h | 1 + src/HOMARDGUI/MonCreateIteration.cxx | 17 +- src/HOMARDGUI/MonEditHypothesis.cxx | 11 +- src/HOMARDGUI/MonEditIteration.cxx | 2 +- src/HOMARD_I/HOMARD_Gen_i.cxx | 11 +- src/HOMARD_I/HOMARD_Hypothesis_i.cxx | 12 + src/HOMARD_I/HOMARD_Hypothesis_i.hxx | 2 + src/HOMARD_I/Makefile.am | 5 +- tests/test_1.py | 8 +- tests/test_2.py | 7 +- tests/test_3.py | 9 +- 34 files changed, 616 insertions(+), 321 deletions(-) diff --git a/configure.ac b/configure.ac index 7094ead4..0227049b 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Modified by : Alexander BORODIN (OCN) - autotools usage # Created from configure.in.base # -AC_INIT([Salome2 Project HOMARD module], [6.5.0], [webmaster.salome@opencascade.com], [SalomeHOMARD]) +AC_INIT([Salome2 Project HOMARD module], [6.6.0], [webmaster.salome@opencascade.com], [SalomeHOMARD]) AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET diff --git a/doc/gui_create_case.rst b/doc/gui_create_case.rst index 5758e8e9..aaac4a77 100644 --- a/doc/gui_create_case.rst +++ b/doc/gui_create_case.rst @@ -97,6 +97,7 @@ Par d - tétraèdres - hexaèdres - prismes + Si le maillage initial comporte des pyramides, il y a arrêt en erreur. Toutefois, si on est certain que les raffinements ultérieurs ne toucheront aucune des arêtes des pyramides, on cochera la case "Pyramides autorisées". Les adaptations se dérouleront normalement et les pyramides seront restituées telles quelles dans le maillage final. L'arbre d'étude diff --git a/doc/gui_create_hypothese.rst b/doc/gui_create_hypothese.rst index a3bb4b1d..ea7f004e 100644 --- a/doc/gui_create_hypothese.rst +++ b/doc/gui_create_hypothese.rst @@ -113,8 +113,9 @@ Si la case est coch Une première série d'options portent sur la finesse maximale de maillage que l'on ne veut pas dépasser. Deux directives sont possibles, séparément ou ensemble. On peut imposer une taille de maille minimale : une maille dont le diamètre est inférieur à cette limite ne sera plus découpée. Par défaut, on propose un diamètre minimal nul, ce qui revient à ne rien imposer. On peut imposer un niveau de raffinement maximal. Par défaut, le maximum est à 99, ce qui équivaut en général à ne rien imposer. -La seconde série d'options n'a d'intérêt que dans le cas où l'adaptation est piloté par un champ et que ce champ n'est pas défini partout dans le maillage. Cela arrive par exemple quand on construit un champ basé sur une distance dans un plan alors que le domaine est 3D : le champ ne sera pas défini sur les noeuds hors du plan. Pour de tels champs, cette option permet de préciser le comportement que l'on souhaite dans les régions où le champ n'est pas défini. Par défaut, il ne se passe rien : les mailles sont gardées telles quelles. On peut choisir les deux autres variantes : raffiner, toutes les mailles seront a priori coupées, ou déraffiner, toutes les mailles seront candidates au déraffinement. +La deuxième série d'options n'a d'intérêt que dans le cas où l'adaptation est piloté par un champ et que ce champ n'est pas défini partout dans le maillage. Cela arrive par exemple quand on construit un champ basé sur une distance dans un plan alors que le domaine est 3D : le champ ne sera pas défini sur les noeuds hors du plan. Pour de tels champs, cette option permet de préciser le comportement que l'on souhaite dans les régions où le champ n'est pas défini. Par défaut, il ne se passe rien : les mailles sont gardées telles quelles. On peut choisir les deux autres variantes : raffiner, toutes les mailles seront a priori coupées, ou déraffiner, toutes les mailles seront candidates au déraffinement. +Le dernier choix porte sur une sortie supplémentaire de l'adaptation. Si la case est cochée, le fichier MED en sortie contiendra un champ contenant le niveau de raffinement de chaque maille. La convention est celle de HOMARD : une maille du maillage initial est de niveau 0, une maille issue d'un raffinement d'une maille initiale porte le niveau 1, etc. Les mailles de transition qui sont produites entre deux mailles de niveau différents, n et n+1, sont affectées du demi-niveau n+0,5. Par défaut, la case n'est pas cochée et le champ n'est pas produit. .. image:: images/create_hypothese_av_1.png :align: center diff --git a/doc/images/create_hypothese_av_1.png b/doc/images/create_hypothese_av_1.png index d6eae0a539782d74651b3726f6788ba97800897c..0950d13813bcd5c72cf0abf5bc01b5689e558b4a 100644 GIT binary patch literal 9670 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 diff --git a/doc/tui_create_boundary.rst b/doc/tui_create_boundary.rst index 9b2992b1..73bf0cdd 100644 --- a/doc/tui_create_boundary.rst +++ b/doc/tui_create_boundary.rst @@ -1,83 +1,138 @@ .. _tui_create_boundary: -La frontière -============ - -.. index:: single: boundary -.. index:: single: frontière -.. index:: single: cylindre -.. index:: single: sphere - -Les variables sont décrites dans :ref:`gui_create_boundary`. - -Méthodes de la classe homard -"""""""""""""""""""""""""""" -Ces méthodes retournent une instance de la classe boundary. - -+----------------------------------------------------------------------------------------+ -+----------------------------------------------------------------------------------------+ -| .. module:: CreateBoundaryDi | -| | -| **CreateBoundaryDi(boundary_name, mesh_name, mesh_file)** | -| | -| - ``boundary_name`` : le nom de la frontière discrète | -| - ``mesh_name`` : le nom du maillage de la frontière | -| - ``mesh_file`` : le nom du fichier contenant ce maillage | -+----------------------------------------------------------------------------------------+ -| .. module:: CreateBoundaryCylinder | -| | -| **CreateBoundaryCylinder(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, R)** | -| | -| - ``boundary_name`` : le nom de la frontière analytique basée sur un cylindre | -| - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées d'un point sur l'axe du cylindre | -| - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe | -| - ``R`` : rayon du cylindre | -+----------------------------------------------------------------------------------------+ -| .. module:: CreateBoundarySphere | -| | -| **CreateBoundarySphere(boundary_name, Xcen, Ycen, Zcen, R)** | -| | -| - ``boundary_name`` : le nom de la frontière analytique basée sur une sphere | -| - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère | -| - ``R`` : rayon de la sphère | -+----------------------------------------------------------------------------------------+ - -Méthodes de la classe boundary -"""""""""""""""""""""""""""""" - -+-------------------------------------------------------------------+ -+-------------------------------------------------------------------+ -| .. module:: GetName | -| | -| **GetName()** | -| Retourne le nom de la frontière | -+-------------------------------------------------------------------+ -| .. module:: GetBoundaryType | -| | -| **GetBoundaryType()** | -| Retourne le type de la frontière : | -| | -| * 0 : discrète | -| * 1 : cylindre | -| * 2 : sphère | -+-------------------------------------------------------------------+ -| .. module:: GetCoords | -| | -| **GetCoords()** | -| Retourne un tableau contenant les coordonnées de la frontière | -| dans l'ordre d'entrée dans le CreateBoundaryXXXX associé | -+-------------------------------------------------------------------+ - - -Exemple -""""""" -Création d'une frontière discrète, d'une frontière sphèrique, puis d'une frontière cylindrique : :: - - inter = homard.CreateBoundaryDi("INTERSECTION", 'PIQUAGE', dircase+'/tutorial_4.fr.med') - fron_1 = homard.CreateBoundarySphere("FRON_1", 12.3, 3.4, .56, 6.5) - fron_2 = homard.CreateBoundaryCylinder('CYL_1', 0.0, 25., -25., 25., 50., 75., 100.) - - -Saisie graphique correspondante +L'hypothèse +=========== +.. index:: single: hypothèse + +L'hypothèse contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée. + +Il existe trois classes d'hypothèses : + + - Uniforme sur tout le maillage, + - Selon un champ, + - En fonction de zone géométrique. + +.. image:: images/create_hypothese_1.png + :align: center + + +Nom de l'hypothèse +"""""""""""""""""" +Un nom de l'hypothèse est proposé automatiquement : Hypo_1, Hypo_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une hypothèse précédente. + +Adaptation uniforme +""""""""""""""""""" +Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites. + +Adaptation selon un champ +""""""""""""""""""""""""" + +.. note:: + Pour pouvoir adapter le maillage selon un champ il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`). Le nom du fichier qui a été sélectionné est affiché sans modification possible ici : + +.. image:: images/create_hypothese_ch_1.png + :align: center + +Le champ voulu est à choisir dans la liste des champs contenus dans le fichier. +Une fois ce champ choisi, la liste des ses composantes s'affiche. Il suffit de désigner la (ou les) composantes désirées. + +Si l'on choisit une seule composante, par défaut, c'est sa valeur absolue qui sera utilisée, mais il est possible d'utiliser la valeur relative. Dans le cas de plusieurs composantes, par défaut HOMARD utilisera la norme L2 (euclidienne). On peut toutefois choisir d'utiliser la norme infinie (le max des valeurs absolues des composantes). + +On peut choisir de ne pas utiliser directement le champ, mais sa variation d'un élément à ses voisins. Pour cela, on activera le bouton "*Saut entre éléments*". + +.. image:: images/create_hypothese_ch_2.png + :align: center + + +Le raffinement se fait selon un seuil qui définit un critère haut de raffinement. Toutes les mailles pour lesquelles l'indicateur est supérieur à ce critère seront raffinées. +Pour le choix du critère, trois variantes sont possible : + + - selon un pourcentage de mailles à raffiner, nombre réel compris entre 0 et 100 ; HOMARD raffinera les x% des mailles qui ont la plus grande valeur du champ. + - selon une valeur relative du champ, nombre compris entre 0 et 100 ; HOMARD raffinera les mailles où le champ est supérieur à x% de l'intervalle [mini,maxi]. + - selon une valeur absolue ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées. + +La même convention s'applique au déraffinement, en remplaçant supérieur par inférieur. On peut inactiver une des fonctions (raffinement ou déraffinement) en cochant le bouton ad_hoc. + +.. image:: images/create_hypothese_ch_3.png + :align: center + + +Adaptation selon une zone +""""""""""""""""""""""""" +.. index:: single: zone + +Au démarrage, il faut créer une première zone par activation du bouton "*Nouveau*" (voir :ref:`gui_create_zone`) : + +.. image:: images/create_hypothese_zo_1.png + :align: center + +Lorsque des zones ont déjà été créées, la liste apparaît dans la fenêtre, ce qui permet de sélectionner les zones voulues. On doit alors préciser si une zone est utilisée pour raffiner toutes les mailles dont une arête est contenue dans la zone, ou si la zone est utilisée pour déraffiner les mailles intérieures à la zone. Si aucun choix n'est fait, la zone est ignorée dans cette hypothèse. + +.. image:: images/create_hypothese_zo_2.png + :align: center + + +Filtrage par les groupes +"""""""""""""""""""""""" +.. index:: single: groupe + +On peut restreindre l'application de l'hypothèse d'adaptation à des groupes. Ainsi les mailles n'appartenant pas à ces groupes ne seront pas modidiées, sauf par contamination ultérieure du raffinement pour assurer la conformité du maillage final. +On coche le bouton associé : + +.. image:: images/create_hypothese_gr_1.png + :align: center + +La liste des groupes de mailles présents dans le maillage est affichée. Il suffit de cocher ceux voulus pour restreindre l'hypothèse d'adaptation. + +.. image:: images/create_hypothese_gr_2.png + :align: center + + +Interpolation de champs +""""""""""""""""""""""" +.. index:: single: interpolation + +.. note:: + Pour pouvoir interpoler un champ de l'ancien vers le nouveau maillage, il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`). + +Par défaut, aucun champ n'est interpolé. A contrario, on peut demander l'interpolation de tous les champs présents dans le fichier fourni : + +.. image:: images/create_hypothese_ch_4.png + :align: center + +Si on veut choisir les champs à interpoler, il faut les cocher dans la liste de tous les champs présents dans le fichier fourni : + +.. image:: images/create_hypothese_ch_5.png + :align: center + + +Les options avancées +"""""""""""""""""""" +Si la case "Options avancées" n'est pas cochée, aucune contrainte supplémentaire n'est définie. +Si la case est cochée, on définira les options avancées. + +Une première série d'options portent sur la finesse maximale de maillage que l'on ne veut pas dépasser. Deux directives sont possibles, séparément ou ensemble. On peut imposer une taille de maille minimale : une maille dont le diamètre est inférieur à cette limite ne sera plus découpée. Par défaut, on propose un diamètre minimal nul, ce qui revient à ne rien imposer. On peut imposer un niveau de raffinement maximal. Par défaut, le maximum est à 99, ce qui équivaut en général à ne rien imposer. + +La deuxième série d'options n'a d'intérêt que dans le cas où l'adaptation est piloté par un champ et que ce champ n'est pas défini partout dans le maillage. Cela arrive par exemple quand on construit un champ basé sur une distance dans un plan alors que le domaine est 3D : le champ ne sera pas défini sur les noeuds hors du plan. Pour de tels champs, cette option permet de préciser le comportement que l'on souhaite dans les régions où le champ n'est pas défini. Par défaut, il ne se passe rien : les mailles sont gardées telles quelles. On peut choisir les deux autres variantes : raffiner, toutes les mailles seront a priori coupées, ou déraffiner, toutes les mailles seront candidates au déraffinement. + +Le dernier choix porte sur une sortie supplémentaire de l'adaptation. Si la case est cochée, le fichier MED en sortie contiendra un champ contenant le niveau de raffinement de chaque maille. La convention est celle de HOMARD : une maille du maillage initial est de niveau 0, une maille issue d'un raffinement d'une maille initiale porte le niveau 1, etc. Les mailles de transition qui sont produites entre deux mailles de niveau différents, n et n+1, sont affectées du demi-niveau n+0,5. Par défaut, la case n'est pas cochée et le champ n'est pas produit. + +.. image:: images/create_hypothese_av_1.png + :align: center + +.. index:: single: arbre d'étude + +L'arbre d'étude +""""""""""""""" +.. index:: single: arbre d'étude + +L'arbre d'études contient les hypothèses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente. + +.. image:: images/create_hypothese_2.png + :align: center + + + +Méthodes python correspondantes """"""""""""""""""""""""""""""" -Consulter :ref:`gui_create_boundary` +Consulter :ref:`tui_create_hypothese` diff --git a/doc/tui_create_case.rst b/doc/tui_create_case.rst index 202c7915..f7ec7473 100644 --- a/doc/tui_create_case.rst +++ b/doc/tui_create_case.rst @@ -16,7 +16,8 @@ M | .. module:: CreateCase | | | | **CreateCase(case_name, mesh_name, mesh_file)** | -| Retourne une instance de la classe cas | +| Retourne une instance de la classe ``cas`` après sa | +| création | | | | - ``case_name`` : le nom du cas | | - ``mesh_name`` : le nom du maillage initial | @@ -27,6 +28,20 @@ M | * le répertoire des résultats est ``/tmp`` | | * l'adaptation est conforme | +---------------------------------------------------------------+ +| .. module:: GetCase | +| | +| **GetCase(case_name)** | +| Retourne l'instance de la classe ``cas`` connue par | +| son nom | +| | +| - ``case_name`` : le nom du cas | ++---------------------------------------------------------------+ +| .. module:: GetAllCases | +| | +| **GetAllCases()** | +| Retourne la liste des noms de tous les cas créés | +| | ++---------------------------------------------------------------+ Méthodes de la classe cas @@ -42,6 +57,7 @@ M | .. module:: SetDirName | | | | **SetDirName(dirname)** | +| Affecte le répertoire des résutats associé au cas | | | | - ``dirname`` : le nom du répertoire des résutats | +---------------------------------------------------------------+ @@ -53,6 +69,7 @@ M | .. module:: SetConfType | | | | **SetConfType(conf_type)** | +| Définit le mode de conformité associé au cas | | | | - ``conf_type`` : entier précisant le mode de conformité | | | @@ -70,12 +87,13 @@ M | | | **GetIter0Name()** | | Retourne le nom de l'itération 0, associée au maillage | -| initial. Ce nom est mis automatiquement par le module | +| initial. Ce nom est créé automatiquement par le module | | HOMARD et doit être utilisé pour enchaîner les adaptations| +---------------------------------------------------------------+ | .. module:: AddBoundaryGroup | | | | **AddBoundaryGroup(boundary, group)** | +| Ajoute une frontière à la définition du cas | | | | - ``boundary`` : nom d'une frontière courbe à suivre | | | @@ -100,6 +118,7 @@ Les options avanc | .. module:: SetPyram | | | | **SetPyram(option)** | +| Définit le statut des pyramides pour le cas | | | | - ``option`` : entier précisant le statut des pyramides | | éventuellement présentes dans le maillage initial | diff --git a/doc/tui_create_hypothese.rst b/doc/tui_create_hypothese.rst index b9b7d85f..1f0396f3 100644 --- a/doc/tui_create_hypothese.rst +++ b/doc/tui_create_hypothese.rst @@ -17,7 +17,7 @@ M | .. module:: CreateHypothesis | | | | **CreateHypothesis(hypo_name)** | -| Retourne une instance de la classe hypothese | +| Retourne une instance de la classe ``hypothese`` | | | | - ``hypo_name`` : le nom de l'hypothèse | +---------------------------------------------------------------+ @@ -32,6 +32,20 @@ M | * 1 : raffinement | | * -1 : déraffinement | +---------------------------------------------------------------+ +| .. module:: GetHypothesis | +| | +| **GetHypothesis(hypo_name)** | +| Retourne l'instance de la classe ``hypothese`` connue par | +| son nom | +| | +| - ``hypo_name`` : le nom de l'hypothèse | ++---------------------------------------------------------------+ +| .. module:: GetAllHypotheses | +| | +| **GetAllHypotheses()** | +| Retourne la liste des noms de toutes les hypothèses créées| +| | ++---------------------------------------------------------------+ Méthodes de la classe hypothese """"""""""""""""""""""""""""""" @@ -49,6 +63,7 @@ G | .. module:: SetAdapRefinUnRef | | | | **SetAdapRefinUnRef(Adap, Refin, UnRef)** | +| Affecte le mode d'adaptation associé à l'hypothèse | | | | - ``Adap`` : entier précisant le type d'adaptation | | | @@ -91,6 +106,7 @@ Le champ et les seuils | .. module:: SetField | | | | **SetField(field_name)** | +| Attribue un nom de champ à l'hypothèse | | | | - ``field_name`` : le nom du champ | +---------------------------------------------------------------+ @@ -102,6 +118,7 @@ Le champ et les seuils | .. module:: SetUseField | | | | **SetUseField(use_field)** | +| Attribue un mode d'usage du champ à l'hypothèse | | | | - ``use_field`` : entier précisant l'usage du champ | | | @@ -111,6 +128,7 @@ Le champ et les seuils | .. module:: SetRefinThr | | | | **SetRefinThr(type_thres, threshold)** | +| Définit les seuils en raffinement | | | | - ``type_thres`` : entier précisant le type de seuil en | | raffinement | @@ -129,6 +147,7 @@ Le champ et les seuils | .. module:: SetUnRefThr | | | | **SetUnRefThr(type_thres, threshold)** | +| Définit les seuils en déraffinement | | | | - ``type_thres`` : entier précisant le type de seuil en | | déraffinement | @@ -154,6 +173,7 @@ Les composantes du champ | .. module:: AddComp | | | | **AddComp(comp_name)** | +| Ajoute une composante du champ à considérer | | | | - ``comp_name`` : nom d'une composante à prendre en | | compte | @@ -161,6 +181,7 @@ Les composantes du champ | .. module:: SetUseComp | | | | **SetUseComp(use_comp)** | +| Définit l'usage des composantes | | | | - ``use_comp`` : entier précisant l'usage des composantes | | | @@ -182,6 +203,7 @@ Le filtrage par les groupes | .. module:: AddGroup | | | | **AddGroup(group_name)** | +| Ajoute un groupe au filtrage | | | | - ``group_name`` : nom du groupe à prendre en compte | +---------------------------------------------------------------+ @@ -199,6 +221,7 @@ Les options avanc | .. module:: SetNivMax | | | | **SetNivMax(nivmax)** | +| Définit le niveau maximal de raffinement | | | | - ``nivmax`` : niveau de raffinement à ne pas dépasser | +---------------------------------------------------------------+ @@ -210,6 +233,7 @@ Les options avanc | .. module:: SetDiamMin | | | | **SetDiamMin(diammin)** | +| Définit le diamètre minimal des futures mailles | | | | - ``diammin`` : diamètre minimal voulu pour une maille | +---------------------------------------------------------------+ @@ -218,6 +242,41 @@ Les options avanc | **GetDiamMin()** | | Retourne le diamètre minimal voulu | +---------------------------------------------------------------+ +| .. module:: SetAdapInit | +| | +| **SetAdapInit(option)** | +| Définit le traitement à appliquer aux mailles où | +| le champ de pilotage du raffinement n'est pas défini | +| | +| - ``option`` : entier précisant le choix retenu | +| | +| * 0 : aucun effet (défaut) | +| * 1 : les mailles sans indicateurs sont raffinées | +| * -1 : les mailles sans indicateurs sont déraffinées | ++---------------------------------------------------------------+ +| .. module:: GetAdapInit | +| | +| **GetAdapInit()** | +| Retourne le type de traitement à appliquer aux mailles où | +| le champ de pilotage du raffinement n'est pas défini | ++---------------------------------------------------------------+ +| .. module:: SetLevelOutput | +| | +| **SetLevelOutput(option)** | +| Précise si on veut récupérer le niveau de raffinement des | +| mailles sous la forme d'un champ | +| | +| - ``option`` : entier précisant le choix retenu | +| | +| * 0 : aucun effet (défaut) | +| * 1 : le champ est produit | ++---------------------------------------------------------------+ +| .. module:: GetLevelOutput | +| | +| **GetLevelOutput()** | +| Retourne le choix retenu pour la récupération du niveau | +| de raffinement | ++---------------------------------------------------------------+ Exemple diff --git a/doc/tui_create_iteration.rst b/doc/tui_create_iteration.rst index a9590dcf..855cf6e1 100644 --- a/doc/tui_create_iteration.rst +++ b/doc/tui_create_iteration.rst @@ -17,7 +17,8 @@ M | .. module:: CreateIteration | | | | **CreateIteration(iter_name, iter_parent_name)** | -| Retourne une instance de la classe iteration | +| Retourne une instance de la classe ``iteration`` après | +| sa création | | | | - ``iter_name`` : le nom de l'itération | | - ``iter_parent_name`` : le nom de l'itération mère | @@ -29,10 +30,25 @@ M | .. module:: AssociateIterHypo | | | | **AssociateIterHypo(iter_name, hypo_name)** | +| Associe une hypothèse à une itération | | | | - ``iter_name`` : le nom de l'itération | | - ``hypo_name`` : le nom de l'hypothèse à associer | +---------------------------------------------------------------+ +| .. module:: GetIteration | +| | +| **GetIteration(iter_name)** | +| Retourne l'instance de la classe ``iteration`` connue par | +| son nom | +| | +| - ``iter_name`` : le nom de l'itération | ++---------------------------------------------------------------+ +| .. module:: GetAllIterations | +| | +| **GetAllIterations()** | +| Retourne la liste des noms de toutes les itérations créées| +| | ++---------------------------------------------------------------+ Méthodes de la classe iteration """"""""""""""""""""""""""""""" @@ -108,6 +124,7 @@ Informations sur les maillages | .. module:: SetMeshFile | | | | **SetMeshFile(mesh_file)** | +| Définit le fichier du maillage produit | | | | - ``mesh_file`` : le nom du fichier qui contiendra | | le maillage produit | @@ -126,12 +143,16 @@ Informations sur le champ | .. module:: SetFieldFile | | | | **SetFieldFile(field_file)** | +| Définit le fichier des champs utiles | | | | - ``field_file`` : le nom du fichier contenant le champ | +---------------------------------------------------------------+ | .. module:: SetTimeStepRank | | | | **SetTimeStepRank(TimeStep, Rank)** | +| Définit les instants pour le champ | +| | +| Inutile si aucun instant n'est défini pour le champ | | | | - ``TimeStep`` : l'instant où est pris le champ | | - ``Rank`` : le numéro d'ordre où est pris le champ | @@ -160,7 +181,8 @@ Pour la cr iter_name = "Iteration_1" iter_1 = homard.CreateIteration(iter_name, case_1.GetIter0Name()) - iter_1.SetField(field_file, 0, 0) + iter_1.SetField(field_file) + iter_1.SetTimeStepRank( 0, 0) iter_1.SetMeshName("maill_01") iter_1.SetMeshFile("/local00/M.01.med") homard.AssociateIterHypo(iter_name, "HypoField") @@ -170,7 +192,8 @@ Pour la cr iter_name = "Iteration_2" iter_2 = homard.CreateIteration(iter_name, "Iteration_1") - iter_2.SetField(field_file, 0, 0) + iter_2.SetField(field_file) + iter_2.SetTimeStepRank( 1, 1) iter_2.SetMeshName("maill_02") iter_2.SetMeshFile("/local00/M.02.med") homard.AssociateIterHypo(iter_name, "HypoField") diff --git a/doc/tui_create_zone.rst b/doc/tui_create_zone.rst index 9911c413..ea36905d 100644 --- a/doc/tui_create_zone.rst +++ b/doc/tui_create_zone.rst @@ -24,6 +24,8 @@ Ces m | .. module:: CreateZoneBox | | | | **CreateZoneBox(zone_name, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax)** | +| Retourne une instance de la classe ``zone`` de type parallélépipèdique | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un parallélépipède | | - ``Xmin``, ``Xmax`` : coordonnées extrêmes selon X | @@ -33,6 +35,8 @@ Ces m | .. module:: CreateZoneCylinder | | | | **CreateZoneCylinder(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H)** | +| Retourne une instance de la classe ``zone`` de type cylindrique | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un cylindre | | - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base | @@ -44,6 +48,8 @@ Ces m | .. module:: CreateZonePipe | | | | **CreateZonePipe(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H, Rint)** | +| Retourne une instance de la classe ``zone`` de type tuyau | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un tuyau | | - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base | @@ -56,6 +62,8 @@ Ces m | .. module:: CreateZoneSphere | | | | **CreateZoneSphere(zone_name, Xcen, Ycen, Zcen, R)** | +| Retourne une instance de la classe ``zone`` de type sphérique | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur une sphère | | - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère | @@ -64,6 +72,8 @@ Ces m | .. module:: CreateZoneBox2D | | | | **CreateZoneBox2D(zone_name, Umin, Umax, Vmin, Vmax, Orient)** | +| Retourne une instance de la classe ``zone`` de type rectangulaire | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un rectangle | | - ``Umin``, ``Umax`` : coordonnées extrêmes pour la 1ère dimension | @@ -73,6 +83,8 @@ Ces m | .. module:: CreateZoneDisk | | | | **CreateZoneDisk(zone_name, Ucen, Vcen, R, Orient)** | +| Retourne une instance de la classe ``zone`` de type disque | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un disque plein | | - ``Ucen``, ``Vcen`` : coordonnées du centre du disque | @@ -82,6 +94,8 @@ Ces m | .. module:: CreateZoneDiskWithHole | | | | **CreateZoneDiskWithHole(zone_name, Ucen, Vcen, R, Rint, Orient)** | +| Retourne une instance de la classe ``zone`` de type disque troué | +| après sa création | | | | - ``zone_name`` : le nom de la zone basée sur un disque troué | | - ``Ucen``, ``Vcen`` : coordonnées du centre du disque | @@ -109,6 +123,26 @@ Ces m maillage est 2D, dans un des plans de coordonnées. + + ++---------------------------------------------------------------+ ++---------------------------------------------------------------+ +| .. module:: GetZone | +| | +| **GetZone(zone_name)** | +| Retourne l'instance de la classe ``zone`` connue par | +| son nom | +| | +| - ``zone_name`` : le nom de la zone | ++---------------------------------------------------------------+ +| .. module:: GetAllZones | +| | +| **GetAllZones()** | +| Retourne la liste des noms de toutes les zones créées | +| | ++---------------------------------------------------------------+ + + Méthodes de la classe zone """""""""""""""""""""""""" diff --git a/idl/HOMARD_Hypothesis.idl b/idl/HOMARD_Hypothesis.idl index 7ff0b81b..c8ce350e 100644 --- a/idl/HOMARD_Hypothesis.idl +++ b/idl/HOMARD_Hypothesis.idl @@ -103,6 +103,9 @@ module HOMARD void SetAdapInit(in long AdapInit) raises (SALOME::SALOME_Exception); long GetAdapInit() raises (SALOME::SALOME_Exception); + void SetLevelOutput(in long LevelOutput) raises (SALOME::SALOME_Exception); + long GetLevelOutput() raises (SALOME::SALOME_Exception); + string GetDumpPython() raises (SALOME::SALOME_Exception); }; diff --git a/src/HOMARD/HOMARD_DriverTools.cxx b/src/HOMARD/HOMARD_DriverTools.cxx index ccd5429f..ee9264b4 100644 --- a/src/HOMARD/HOMARD_DriverTools.cxx +++ b/src/HOMARD/HOMARD_DriverTools.cxx @@ -228,6 +228,8 @@ namespace HOMARD os << separator() << hypothesis.GetNivMax(); os << separator() << hypothesis.GetDiamMin(); + os << separator() << hypothesis.GetAdapInit(); + os << separator() << hypothesis.GetLevelOutput(); // MESSAGE( ". Fin avec "< 0 ) { - aScript << "\tNivMax = " << _NivMax << "\n"; - aScript << "\t" <<_NomHypo << ".SetNivMax(NivMax)\n"; + aScript << "\t" <<_NomHypo << ".SetNivMax(" << _NivMax << ")\n"; } if ( _DiamMin > 0 ) { - aScript << "\tDiamMin = " << _DiamMin << "\n"; - aScript << "\t" <<_NomHypo << ".SetDiamMin(DiamMin)\n"; + aScript << "\t" <<_NomHypo << ".SetDiamMin(" << _DiamMin << ")\n"; } if ( _AdapInit != 0 ) { - aScript << "\tAdapInit = " << _AdapInit << "\n"; - aScript << "\t" <<_NomHypo << ".SetAdapInit(AdapInit)\n"; + aScript << "\t" <<_NomHypo << ".SetAdapInit(" << _AdapInit << ")\n"; + } + if ( _LevelOutput != 0 ) + { + aScript << "\t" <<_NomHypo << ".SetLevelOutput(" << _LevelOutput << ")\n"; } return aScript.str(); @@ -450,3 +449,15 @@ const double HOMARD_Hypothesis::GetDiamMin() const { return _DiamMin; } +//============================================================================= +void HOMARD_Hypothesis::SetLevelOutput( int LevelOutput ) +//============================================================================= +{ + _LevelOutput = LevelOutput; +} +//============================================================================= +const int HOMARD_Hypothesis::GetLevelOutput() const +//============================================================================= +{ + return _LevelOutput; +} diff --git a/src/HOMARD/HOMARD_Hypothesis.hxx b/src/HOMARD/HOMARD_Hypothesis.hxx index c641cf9b..22cc1ce2 100644 --- a/src/HOMARD/HOMARD_Hypothesis.hxx +++ b/src/HOMARD/HOMARD_Hypothesis.hxx @@ -89,6 +89,8 @@ public: const double GetDiamMin() const; void SetAdapInit( int AdapInit ); const int GetAdapInit() const; + void SetLevelOutput( int LevelOutput ); + const int GetLevelOutput() const; private: @@ -115,6 +117,7 @@ private: int _NivMax; double _DiamMin; int _AdapInit; + int _LevelOutput; std::list _ListIter; std::list _ListZone; diff --git a/src/HOMARD/HOMARD_Iteration.cxx b/src/HOMARD/HOMARD_Iteration.cxx index 3dcd98b1..3c0cd552 100644 --- a/src/HOMARD/HOMARD_Iteration.cxx +++ b/src/HOMARD/HOMARD_Iteration.cxx @@ -34,7 +34,7 @@ HOMARD_Iteration::HOMARD_Iteration(): _NomIter( "" ), _Etat( false ), _NumIter( -1 ), _NomMesh( "" ), _MeshFile( "" ), - _FieldFile( "" ), _TimeStep( 0 ), _Rank( 0 ), + _FieldFile( "" ), _TimeStep( -1 ), _Rank( -1 ), _MessFile( "" ), _IterParent( "" ), _NomHypo( "" ), _NomCas( "" ), _NomDir( "" ) @@ -94,21 +94,22 @@ std::string HOMARD_Iteration::GetDumpPython() const aScript << "\t" << _NomIter << ".SetMeshName(\"" << _NomMesh << "\")\n" ; // Le fichier du maillage produit aScript << "\t" << _NomIter << ".SetMeshFile(\"" << _MeshFile << "\")\n"; - if (_FieldFile != "") { +// Le fichier des champs, avec l'instant eventuel + if ( _FieldFile != "" ) { aScript << "\t" << _NomIter << ".SetFieldFile(\"" << _FieldFile << "\")\n"; - aScript << "\tTimeStep = " << _TimeStep << "\n"; - aScript << "\tRank = " << _Rank << "\n"; - aScript << "\t" << _NomIter << ".SetTimeStepRank( TimeStep, Rank )\n"; + if ( ( _TimeStep != -1 ) and ( _Rank != -1 ) ) { + aScript << "\t" << _NomIter << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n"; + } } aScript << "\thomard.AssociateIterHypo(\"" <<_NomIter << "\", \"" << _NomHypo << "\")\n"; if (_Etat == true) { - aScript << "\tcodret = homard.Compute(\"" <<_NomIter << "\", 1)\n"; + aScript << "\tcodret = " <<_NomIter << ".Compute(1)\n"; } else { - aScript << "\t#codret = homard.Compute(\"" <<_NomIter << "\", 1)\n"; + aScript << "\t#codret = " <<_NomIter << ".Compute(1)\n"; } return aScript.str(); diff --git a/src/HOMARD/HomardDriver.cxx b/src/HOMARD/HomardDriver.cxx index c025a5e2..55d14f94 100644 --- a/src/HOMARD/HomardDriver.cxx +++ b/src/HOMARD/HomardDriver.cxx @@ -797,9 +797,9 @@ void HomardDriver::TexteFieldInterpName( int NumeChamp, const std::string FieldN } } ////============================================================================= -void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit ) +void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit, int LevelOutput ) { - MESSAGE("TexteAdvanced, Pyram ="<objectName().isEmpty()) CreateHypothesis->setObjectName(QString::fromUtf8("CreateHypothesis")); - CreateHypothesis->resize(770, 1428); + CreateHypothesis->resize(770, 1453); QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); @@ -172,6 +173,11 @@ public: gridLayout_3->addWidget(GBTypeAdaptation, 1, 0, 1, 2); + CBGroupe = new QCheckBox(CreateHypothesis); + CBGroupe->setObjectName(QString::fromUtf8("CBGroupe")); + + gridLayout_3->addWidget(CBGroupe, 2, 0, 1, 2); + GBUniform = new QGroupBox(CreateHypothesis); GBUniform->setObjectName(QString::fromUtf8("GBUniform")); gridLayout = new QGridLayout(GBUniform); @@ -194,7 +200,7 @@ public: gridLayout->addWidget(RBUniRaff, 0, 0, 1, 1); - gridLayout_3->addWidget(GBUniform, 2, 0, 1, 2); + gridLayout_3->addWidget(GBUniform, 3, 0, 1, 2); GBFieldFile = new QGroupBox(CreateHypothesis); GBFieldFile->setObjectName(QString::fromUtf8("GBFieldFile")); @@ -218,7 +224,7 @@ public: gridLayout1->addWidget(LEFieldFile, 0, 1, 1, 1); - gridLayout_3->addWidget(GBFieldFile, 3, 0, 1, 2); + gridLayout_3->addWidget(GBFieldFile, 4, 0, 1, 2); GBFieldManagement = new QGroupBox(CreateHypothesis); GBFieldManagement->setObjectName(QString::fromUtf8("GBFieldManagement")); @@ -465,7 +471,7 @@ public: gridLayout2->addLayout(hboxLayout4, 2, 0, 1, 1); - gridLayout_3->addWidget(GBFieldManagement, 4, 0, 1, 2); + gridLayout_3->addWidget(GBFieldManagement, 5, 0, 1, 2); GBAreaManagement = new QGroupBox(CreateHypothesis); GBAreaManagement->setObjectName(QString::fromUtf8("GBAreaManagement")); @@ -535,7 +541,7 @@ public: gridLayout_4->addLayout(vboxLayout1, 0, 2, 1, 1); - gridLayout_3->addWidget(GBAreaManagement, 5, 0, 1, 2); + gridLayout_3->addWidget(GBAreaManagement, 6, 0, 1, 2); GBField = new QGroupBox(CreateHypothesis); GBField->setObjectName(QString::fromUtf8("GBField")); @@ -588,12 +594,7 @@ public: gridLayout5->addWidget(TWField, 1, 0, 1, 1); - gridLayout_3->addWidget(GBField, 6, 0, 1, 2); - - CBGroupe = new QCheckBox(CreateHypothesis); - CBGroupe->setObjectName(QString::fromUtf8("CBGroupe")); - - gridLayout_3->addWidget(CBGroupe, 7, 0, 1, 2); + gridLayout_3->addWidget(GBField, 7, 0, 1, 2); CBAdvanced = new QCheckBox(CreateHypothesis); CBAdvanced->setObjectName(QString::fromUtf8("CBAdvanced")); @@ -655,6 +656,11 @@ public: gridLayout_1->addWidget(GBAdapInit, 2, 0, 1, 2); + CBLevelOutput = new QCheckBox(GBAdvancedOptions); + CBLevelOutput->setObjectName(QString::fromUtf8("CBLevelOutput")); + + gridLayout_1->addWidget(CBLevelOutput, 3, 0, 1, 1); + gridLayout_3->addWidget(GBAdvancedOptions, 9, 0, 1, 2); @@ -721,6 +727,7 @@ public: RBUniforme->setText(QApplication::translate("CreateHypothesis", "Uniform", 0, QApplication::UnicodeUTF8)); RBChamp->setText(QApplication::translate("CreateHypothesis", "Driven by a field", 0, QApplication::UnicodeUTF8)); RBZone->setText(QApplication::translate("CreateHypothesis", "With geometrical zones", 0, QApplication::UnicodeUTF8)); + CBGroupe->setText(QApplication::translate("CreateHypothesis", "Filtering with groups", 0, QApplication::UnicodeUTF8)); GBUniform->setTitle(QApplication::translate("CreateHypothesis", "Uniform adaptation", 0, QApplication::UnicodeUTF8)); RBUniDera->setText(QApplication::translate("CreateHypothesis", "Coarsening", 0, QApplication::UnicodeUTF8)); RBUniRaff->setText(QApplication::translate("CreateHypothesis", "Refinement", 0, QApplication::UnicodeUTF8)); @@ -767,7 +774,6 @@ public: ___qtablewidgetitem5->setText(QApplication::translate("CreateHypothesis", "Selection", 0, QApplication::UnicodeUTF8)); QTableWidgetItem *___qtablewidgetitem6 = TWField->horizontalHeaderItem(1); ___qtablewidgetitem6->setText(QApplication::translate("CreateHypothesis", "Field Name", 0, QApplication::UnicodeUTF8)); - CBGroupe->setText(QApplication::translate("CreateHypothesis", "Filtering with groups", 0, QApplication::UnicodeUTF8)); CBAdvanced->setText(QApplication::translate("CreateHypothesis", "Advanced options", 0, QApplication::UnicodeUTF8)); GBAdvancedOptions->setTitle(QApplication::translate("CreateHypothesis", "Advanced options", 0, QApplication::UnicodeUTF8)); TLMinimalDiameter->setText(QApplication::translate("CreateHypothesis", "Minimal diameter", 0, QApplication::UnicodeUTF8)); @@ -776,6 +782,7 @@ public: RBAIN->setText(QApplication::translate("CreateHypothesis", "Nothing", 0, QApplication::UnicodeUTF8)); RBAIR->setText(QApplication::translate("CreateHypothesis", "Refinement", 0, QApplication::UnicodeUTF8)); RBAID->setText(QApplication::translate("CreateHypothesis", "Coarsening", 0, QApplication::UnicodeUTF8)); + CBLevelOutput->setText(QApplication::translate("CreateHypothesis", "Output of the level of refinement", 0, QApplication::UnicodeUTF8)); GBButtons->setTitle(QString()); buttonOk->setText(QApplication::translate("CreateHypothesis", "OK", 0, QApplication::UnicodeUTF8)); buttonApply->setText(QApplication::translate("CreateHypothesis", "Apply", 0, QApplication::UnicodeUTF8)); diff --git a/src/HOMARDGUI/CreateHypothesis.ui b/src/HOMARDGUI/CreateHypothesis.ui index 686a25ab..2c4d96b6 100644 --- a/src/HOMARDGUI/CreateHypothesis.ui +++ b/src/HOMARDGUI/CreateHypothesis.ui @@ -7,7 +7,7 @@ 0 0 770 - 1428 + 1453 @@ -79,6 +79,13 @@ + + + Filtering with groups + + + + Uniform adaptation @@ -110,7 +117,7 @@ - + @@ -142,7 +149,7 @@ - + @@ -536,7 +543,7 @@ - + @@ -655,7 +662,7 @@ - + Field Interpolation @@ -724,13 +731,6 @@ - - - - Filtering with groups - - - @@ -823,6 +823,13 @@ + + + + Output of the level of refinement + + + diff --git a/src/HOMARDGUI/CreateIteration.h b/src/HOMARDGUI/CreateIteration.h index c3e48c90..ec6ef614 100644 --- a/src/HOMARDGUI/CreateIteration.h +++ b/src/HOMARDGUI/CreateIteration.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'CreateIteration.ui' ** -** Created: Wed Apr 11 11:35:39 2012 +** Created: Wed Nov 14 11:09:41 2012 ** by: Qt User Interface Compiler version 4.6.3 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! @@ -120,9 +120,9 @@ public: SpinBox_Rank = new QSpinBox(GBField); SpinBox_Rank->setObjectName(QString::fromUtf8("SpinBox_Rank")); - SpinBox_Rank->setMaximum(1010000); SpinBox_Rank->setMinimum(-1); - SpinBox_Rank->setValue(1); + SpinBox_Rank->setMaximum(1010000); + SpinBox_Rank->setValue(-1); gridLayout1->addWidget(SpinBox_Rank, 4, 5, 1, 1); @@ -137,8 +137,8 @@ public: SpinBox_TimeStep = new QSpinBox(GBField); SpinBox_TimeStep->setObjectName(QString::fromUtf8("SpinBox_TimeStep")); - SpinBox_TimeStep->setMaximum(100000); SpinBox_TimeStep->setMinimum(-2); + SpinBox_TimeStep->setMaximum(100000); SpinBox_TimeStep->setValue(-1); gridLayout1->addWidget(SpinBox_TimeStep, 4, 1, 1, 1); diff --git a/src/HOMARDGUI/CreateIteration.ui b/src/HOMARDGUI/CreateIteration.ui index 01a0d38b..95205de9 100644 --- a/src/HOMARDGUI/CreateIteration.ui +++ b/src/HOMARDGUI/CreateIteration.ui @@ -1,7 +1,8 @@ - + + CreateIteration - - + + 0 0 @@ -9,31 +10,31 @@ 598 - + Create an iteration - - + + 9 - + 6 - - - + + + Field information - - + + 9 - + 6 - - - + + + 282 21 @@ -41,12 +42,12 @@ - + - + Qt::Vertical - + 138 18 @@ -54,22 +55,22 @@ - - - + + + Chosen time step - + - + Qt::Horizontal - + QSizePolicy::Expanding - + 255 13 @@ -77,35 +78,35 @@ - - - + + + + -1 + + 1010000 - + -1 - - 1 - - - - + + + Rank - + - + Qt::Horizontal - + QSizePolicy::Fixed - + 40 13 @@ -113,32 +114,32 @@ - - - - 100000 - - + + + -2 - + + 100000 + + -1 - - - + + + Time step - + - + Qt::Vertical - + 138 28 @@ -146,36 +147,36 @@ - - - + + + Last time step - - - + + + No time step - + true - + true - - - + + + - - - + + + Field file @@ -183,39 +184,39 @@ - - - + + + Iteration Name - - - + + + 290 21 - + 200 - - - + + + Previous iteration - + - + Qt::Vertical - + 20 24 @@ -223,51 +224,51 @@ - - - + + + true - + 50 27 - + - - - + + + 0 21 - + 200 - + true - - - + + + Mesh n - + - + Qt::Vertical - + 20 21 @@ -275,28 +276,28 @@ - - - + + + 290 21 - + 32 - + true - + - + Qt::Vertical - + 20 22 @@ -304,32 +305,32 @@ - - - + + + Mesh n+1 - - - + + + 290 21 - + 32 - + - + Qt::Vertical - + 20 21 @@ -337,12 +338,12 @@ - + - + Qt::Vertical - + 20 22 @@ -350,37 +351,37 @@ - - - + + + Hypothesis - - + + 9 - + 6 - - - + + + -1 - + QComboBox::AdjustToContents - + - + Qt::Horizontal - + QSizePolicy::Fixed - + 40 13 @@ -388,16 +389,16 @@ - - - + + + Edit - - - + + + New @@ -405,12 +406,12 @@ - + - + Qt::Vertical - + 20 21 @@ -418,48 +419,48 @@ - - - + + + - - + + 9 - + 6 - - - + + + OK - + false - + false - - - + + + Apply - - - + + + Cancel - - - + + + Help diff --git a/src/HOMARDGUI/HOMARD_msg_fr.ts b/src/HOMARDGUI/HOMARD_msg_fr.ts index 5863f16a..6f791274 100644 --- a/src/HOMARDGUI/HOMARD_msg_fr.ts +++ b/src/HOMARDGUI/HOMARD_msg_fr.ts @@ -355,6 +355,10 @@ Maximal level Niveau maximal + + Output of the level of refinement + Sortie du niveau de raffinement + Create an iteration Création d'une itération diff --git a/src/HOMARDGUI/Makefile.am b/src/HOMARDGUI/Makefile.am index a1b64618..ae5f5bc7 100644 --- a/src/HOMARDGUI/Makefile.am +++ b/src/HOMARDGUI/Makefile.am @@ -119,7 +119,7 @@ libHOMARD_la_LDFLAGS = \ ../../idl/libSalomeIDLHOMARD.la \ ../HOMARD_I/libHOMARDEngine.la \ $(KERNEL_LDFLAGS) \ - $(MED3_LIBS) \ + $(MED3_LIBS_C_ONLY) \ -lSalomeLifeCycleCORBA \ $(GUI_LDFLAGS) \ -lSalomeApp \ diff --git a/src/HOMARDGUI/MonCreateHypothesis.cxx b/src/HOMARDGUI/MonCreateHypothesis.cxx index bffc7df5..9e5673a8 100644 --- a/src/HOMARDGUI/MonCreateHypothesis.cxx +++ b/src/HOMARDGUI/MonCreateHypothesis.cxx @@ -51,7 +51,9 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal, _UsField(0), _UsCmpI(0), _TypeFieldInterp(0), _NivMax(-1), _DiamMin(-1.), - _AdapInit(0) + _AdapInit(0), + _LevelOutput(0) + { MESSAGE("Constructeur") ; _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); @@ -70,6 +72,7 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal, } SetFieldNo(); GBAdvancedOptions->setVisible(0); + CBLevelOutput->setChecked(false); } // ------------------------------------------------------------------------ @@ -176,6 +179,9 @@ bool MonCreateHypothesis::PushOnApply() _aHypothesis->SetDiamMin(_DiamMin); // Enregistrement de l'intialisation de l'adaptation _aHypothesis->SetAdapInit(_AdapInit); +// Sortie des niveaux de raffinement + if (CBLevelOutput->isChecked()) { _LevelOutput = 1 ; } + _aHypothesis->SetLevelOutput(_LevelOutput); } HOMARD_UTILS::updateObjBrowser(); @@ -839,6 +845,8 @@ void MonCreateHypothesis::SetAdvanced() _NivMax = -1 ; _DiamMin = -1. ; _AdapInit = 0 ; + CBLevelOutput->setChecked(false); + _LevelOutput = 0 ; } adjustSize(); } diff --git a/src/HOMARDGUI/MonCreateHypothesis.h b/src/HOMARDGUI/MonCreateHypothesis.h index a1271157..0680a69c 100644 --- a/src/HOMARDGUI/MonCreateHypothesis.h +++ b/src/HOMARDGUI/MonCreateHypothesis.h @@ -71,6 +71,7 @@ protected : int _NivMax; double _DiamMin; int _AdapInit; + int _LevelOutput; HOMARD::HOMARD_Gen_var _myHomardGen; HOMARD::HOMARD_Hypothesis_var _aHypothesis; diff --git a/src/HOMARDGUI/MonCreateIteration.cxx b/src/HOMARDGUI/MonCreateIteration.cxx index fc3b05c5..e71dc955 100644 --- a/src/HOMARDGUI/MonCreateIteration.cxx +++ b/src/HOMARDGUI/MonCreateIteration.cxx @@ -301,36 +301,47 @@ void MonCreateIteration::SetFieldFile() // ------------------------------------------------------------------------ void MonCreateIteration::SetTSNo() // ------------------------------------------------------------------------ -// Par defaut, on declare que le pas de temps vaut -1 +// Si on ne tient pas compte du pas de temps, on declare que le pas de temps +// vaut -1, valeur par defaut de med { Rank->setVisible(0); SpinBox_Rank->setVisible(0); + SpinBox_Rank->setValue(-1); + TimeStep->setVisible(0); SpinBox_TimeStep->setVisible(0); SpinBox_TimeStep->setValue(-1); + adjustSize(); } // ------------------------------------------------------------------------ void MonCreateIteration::SetTSLast() // ------------------------------------------------------------------------ -// Par defaut, on declare que le pas de temps vaut -2 +// Si on choisit le dernier instant, on declare que le pas de temps vaut -2 { Rank->setVisible(0); SpinBox_Rank->setVisible(0); + SpinBox_Rank->setValue(-2); + TimeStep->setVisible(0); SpinBox_TimeStep->setVisible(0); SpinBox_TimeStep->setValue(-2); + adjustSize(); } // ------------------------------------------------------------------------ void MonCreateIteration::SetTSChosen() // ------------------------------------------------------------------------ +// Si choisit un instant, on prepositionne a 0 { Rank->setVisible(1); SpinBox_Rank->setVisible(1); + SpinBox_Rank->setValue(0); + TimeStep->setVisible(1); SpinBox_TimeStep->setVisible(1); - SpinBox_TimeStep->setValue(1); + SpinBox_TimeStep->setValue(0); + adjustSize(); } diff --git a/src/HOMARDGUI/MonEditHypothesis.cxx b/src/HOMARDGUI/MonEditHypothesis.cxx index 38a9d024..0192379f 100644 --- a/src/HOMARDGUI/MonEditHypothesis.cxx +++ b/src/HOMARDGUI/MonEditHypothesis.cxx @@ -101,7 +101,8 @@ void MonEditHypothesis::InitValEdit() int NivMax = _aHypothesis->GetNivMax(); double DiamMin = _aHypothesis->GetDiamMin(); int AdapInit = _aHypothesis->GetAdapInit(); - if ( NivMax > 0 or DiamMin > 0 or AdapInit != 0 ) + int LevelOutput = _aHypothesis->GetLevelOutput(); + if ( NivMax > 0 or DiamMin > 0 or AdapInit != 0 or LevelOutput != 0 ) { GBAdvancedOptions->setVisible(1); if ( NivMax > 0 ) { spinBoxNivMax->setValue(NivMax); @@ -128,6 +129,14 @@ void MonEditHypothesis::InitValEdit() else { GBAdapInit->setVisible(0) ; } + if ( LevelOutput != 0 ) + { + CBLevelOutput->setChecked(true); + CBLevelOutput->setEnabled(false); + } + else + { CBLevelOutput->setVisible(0) ; + } } else { GBAdvancedOptions->setVisible(0); } diff --git a/src/HOMARDGUI/MonEditIteration.cxx b/src/HOMARDGUI/MonEditIteration.cxx index a6368637..6ea10add 100644 --- a/src/HOMARDGUI/MonEditIteration.cxx +++ b/src/HOMARDGUI/MonEditIteration.cxx @@ -36,7 +36,7 @@ MonEditIteration::MonEditIteration ( QWidget* parent, bool modal, herite de MonCreateIteration */ MonCreateIteration(parent, modal, myHomardGen, IterParentName), - _rank(0), _step(0), _IterationName(""), _FieldFile(""),_aTypeAdap() + _rank(-1), _step(-1), _IterationName(""), _FieldFile(""),_aTypeAdap() { MESSAGE("Debut de MonEditIteration" << IterName.toStdString().c_str()); setWindowTitle(QObject::tr("HOM_ITER_EDIT_WINDOW_TITLE")); diff --git a/src/HOMARD_I/HOMARD_Gen_i.cxx b/src/HOMARD_I/HOMARD_Gen_i.cxx index 5bb00f44..da4aa8b4 100755 --- a/src/HOMARD_I/HOMARD_Gen_i.cxx +++ b/src/HOMARD_I/HOMARD_Gen_i.cxx @@ -17,7 +17,6 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "HOMARD_version.h" #include "HOMARD_Gen_i.hxx" #include "HOMARD_Cas_i.hxx" #include "HOMARD_Hypothesis_i.hxx" @@ -28,6 +27,8 @@ #include "HOMARD_DriverTools.hxx" #include "HomardMedCommun.h" +#include "HOMARD_version.h" + #include "utilities.h" #include "Utils_SINGLETON.hxx" #include "Utils_CorbaException.hxx" @@ -672,6 +673,7 @@ HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::CreateHypothesis(const char* nomHypo myHypothesis->SetNivMax(-1); myHypothesis->SetDiamMin(-1.0); myHypothesis->SetAdapInit(0); + myHypothesis->SetLevelOutput(0); return HOMARD::HOMARD_Hypothesis::_duplicate(myHypothesis); } @@ -1451,7 +1453,9 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatMena MESSAGE ( ". DiamMin = " << DiamMin ); int AdapInit = myHypo->GetAdapInit(); MESSAGE ( ". AdapInit = " << AdapInit ); - myDriver->TexteAdvanced(Pyram, NivMax, DiamMin, AdapInit); + int LevelOutput = myHypo->GetLevelOutput(); + MESSAGE ( ". LevelOutput = " << LevelOutput ); + myDriver->TexteAdvanced(Pyram, NivMax, DiamMin, AdapInit, LevelOutput); // F. Ecriture du texte dans le fichier if (codret == 0) @@ -2702,7 +2706,8 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, return aStreamFile._retn(); } -//========================================================================== + +// Version information char* HOMARD_Gen_i::getVersion() { #if HOMARD_DEVELOPMENT diff --git a/src/HOMARD_I/HOMARD_Hypothesis_i.cxx b/src/HOMARD_I/HOMARD_Hypothesis_i.cxx index dd84483b..22ce2886 100644 --- a/src/HOMARD_I/HOMARD_Hypothesis_i.cxx +++ b/src/HOMARD_I/HOMARD_Hypothesis_i.cxx @@ -395,6 +395,18 @@ CORBA::Long HOMARD_Hypothesis_i::GetAdapInit() ASSERT( myHomardHypothesis ); return myHomardHypothesis->GetAdapInit(); } +//============================================================================= +void HOMARD_Hypothesis_i::SetLevelOutput( CORBA::Long LevelOutput ) +{ + ASSERT( myHomardHypothesis ); + myHomardHypothesis->SetLevelOutput( LevelOutput ); +} +//============================================================================= +CORBA::Long HOMARD_Hypothesis_i::GetLevelOutput() +{ + ASSERT( myHomardHypothesis ); + return myHomardHypothesis->GetLevelOutput(); +} //============================================================================= std::string HOMARD_Hypothesis_i::Dump() const diff --git a/src/HOMARD_I/HOMARD_Hypothesis_i.hxx b/src/HOMARD_I/HOMARD_Hypothesis_i.hxx index ea7649a3..b2f60182 100644 --- a/src/HOMARD_I/HOMARD_Hypothesis_i.hxx +++ b/src/HOMARD_I/HOMARD_Hypothesis_i.hxx @@ -91,6 +91,8 @@ public: CORBA::Double GetDiamMin(); void SetAdapInit( CORBA::Long AdapInit ); CORBA::Long GetAdapInit(); + void SetLevelOutput( CORBA::Long LevelOutput ); + CORBA::Long GetLevelOutput(); std::string Dump() const; bool Restore( const std::string& stream ); diff --git a/src/HOMARD_I/Makefile.am b/src/HOMARD_I/Makefile.am index 86c0c4b5..a363abf9 100644 --- a/src/HOMARD_I/Makefile.am +++ b/src/HOMARD_I/Makefile.am @@ -71,7 +71,7 @@ libHOMARDEngine_la_LDFLAGS = \ ../../idl/libSalomeIDLHOMARD.la \ ../HOMARD/libHOMARDImpl.la \ $(KERNEL_LDFLAGS) \ - $(MED3_LIBS) \ + $(MED3_LIBS_C_ONLY) \ -lSalomeContainer \ -lSalomeNS \ -lRegistry \ @@ -80,5 +80,4 @@ libHOMARDEngine_la_LDFLAGS = \ -lTOOLSDS \ -lSalomeGenericObj \ $(SMESH_LDFLAGS) \ - -lSalomeIDLSMESH \ - -lSMESHClient + -lSalomeIDLSMESH diff --git a/tests/test_1.py b/tests/test_1.py index 01a07768..74a1f658 100644 --- a/tests/test_1.py +++ b/tests/test_1.py @@ -132,6 +132,8 @@ Copyright EDF-R&D 2010 ###################################################################################### homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD') +assert homard is not None, "Impossible to load homard engine" + # # Exec of HOMARD-SALOME # @@ -139,9 +141,9 @@ try : error_main = homard_exec(salome.myStudy) if error_main : raise Exception('Pb in homard_exec at iteration %d' %error_main ) -except : - raise Exception('Pb in homard_exec at iteration %d' %error_main ) - sys.exit(1) +except Exception, e: + raise Exception('Pb in homard_exec: '+e.message) + # # Test of the result # diff --git a/tests/test_2.py b/tests/test_2.py index 60110999..afb705f2 100644 --- a/tests/test_2.py +++ b/tests/test_2.py @@ -121,6 +121,7 @@ Copyright EDF-R&D 2010 ###################################################################################### homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD') +assert homard is not None, "Impossible to load homard engine" # # Exec of HOMARD-SALOME # @@ -128,9 +129,9 @@ try : error_main = homard_exec(salome.myStudy) if error_main : raise Exception('Pb in homard_exec at iteration %d' %error_main ) -except : - raise Exception('Pb in homard_exec at iteration %d' %error_main ) - sys.exit(1) +except Exception, e: + raise Exception('Pb in homard_exec: '+e.message) + # # Test of the result # diff --git a/tests/test_3.py b/tests/test_3.py index 5e7cdcc4..98c4e6e3 100644 --- a/tests/test_3.py +++ b/tests/test_3.py @@ -120,6 +120,8 @@ Copyright EDF-R&D 2010 ###################################################################################### homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD') +assert homard is not None, "Impossible to load homard engine" + # # Exec of HOMARD-SALOME # @@ -127,10 +129,9 @@ try : error_main = homard_exec(salome.myStudy) if error_main : raise Exception('Pb in homard_exec at iteration %d' %error_main ) -except : - if error_main : - raise Exception('Pb in homard_exec at iteration %d' %error_main ) - sys.exit(1) +except Exception, e: + raise Exception('Pb in homard_exec: '+e.message) + # # Test of the result # -- 2.39.2