From b93f68e791d9a197c7130c94d2e317b1ebcd7220 Mon Sep 17 00:00:00 2001 From: nicolas Date: Mon, 25 Feb 2013 09:20:38 +0000 Subject: [PATCH] Introduction of informations on the meshes --- doc/Makefile.am | 1 + doc/conf.py.in | 2 +- doc/gui_create_case.rst | 2 +- doc/gui_homard.rst | 9 +- doc/gui_mesh_info.rst | 92 +++ doc/gui_usage.rst | 1 + doc/images/intro_37.png | Bin 9709 -> 10471 bytes doc/images/intro_40.png | Bin 16136 -> 16126 bytes doc/images/lancement_1.png | Bin 29246 -> 20378 bytes doc/images/lancement_2.png | Bin 23848 -> 46605 bytes doc/images/lancement_3.png | Bin 27974 -> 29295 bytes doc/images/mesh_info_1.png | Bin 0 -> 12437 bytes doc/images/mesh_info_2.png | Bin 0 -> 17849 bytes doc/images/mesh_info_3.png | Bin 0 -> 20046 bytes doc/images/mesh_info_4.png | Bin 0 -> 9674 bytes doc/images/mesh_info_5.png | Bin 0 -> 13639 bytes doc/intro.rst | 16 +- doc/tui_create_case.rst | 21 + doc/tui_create_iteration.rst | 26 + idl/HOMARD_Cas.idl | 3 + idl/HOMARD_Gen.idl | 6 +- idl/HOMARD_Iteration.idl | 12 +- resources/Makefile.am | 1 + resources/advanced_mesh_info.png | Bin 0 -> 988 bytes src/HOMARD/HOMARD_DriverTools.cxx | 4 +- src/HOMARD/HOMARD_Iteration.cxx | 23 +- src/HOMARD/HOMARD_Iteration.hxx | 10 +- src/HOMARD/HomardDriver.cxx | 151 +++-- src/HOMARD/HomardDriver.hxx | 9 +- src/HOMARDGUI/HOMARDGUI.cxx | 67 +- src/HOMARDGUI/HOMARDGUI.h | 1 + src/HOMARDGUI/HOMARDGUI_Utils.cxx | 4 +- src/HOMARDGUI/HOMARDGUI_Utils.h | 2 +- src/HOMARDGUI/HOMARD_msg_en.ts | 16 + src/HOMARDGUI/HOMARD_msg_fr.ts | 40 ++ src/HOMARDGUI/IterInfo.h | 156 +++++ src/HOMARDGUI/IterInfo.ui | 129 ++++ src/HOMARDGUI/Makefile.am | 26 +- src/HOMARDGUI/MeshInfo.h | 270 ++++++++ src/HOMARDGUI/MeshInfo.ui | 285 +++++++++ src/HOMARDGUI/MonIterInfo.cxx | 196 ++++++ src/HOMARDGUI/MonIterInfo.h | 77 +++ src/HOMARDGUI/MonMeshInfo.cxx | 263 ++++++++ src/HOMARDGUI/MonMeshInfo.h | 74 +++ src/HOMARD_I/HOMARD_Cas_i.cxx | 21 +- src/HOMARD_I/HOMARD_Cas_i.hxx | 2 + src/HOMARD_I/HOMARD_Gen_i.cxx | 946 +++++++++++++++++----------- src/HOMARD_I/HOMARD_Gen_i.hxx | 16 +- src/HOMARD_I/HOMARD_Iteration_i.cxx | 58 +- src/HOMARD_I/HOMARD_Iteration_i.hxx | 13 +- 50 files changed, 2576 insertions(+), 475 deletions(-) create mode 100644 doc/gui_mesh_info.rst create mode 100644 doc/images/mesh_info_1.png create mode 100644 doc/images/mesh_info_2.png create mode 100644 doc/images/mesh_info_3.png create mode 100644 doc/images/mesh_info_4.png create mode 100644 doc/images/mesh_info_5.png create mode 100644 resources/advanced_mesh_info.png create mode 100644 src/HOMARDGUI/IterInfo.h create mode 100644 src/HOMARDGUI/IterInfo.ui create mode 100644 src/HOMARDGUI/MeshInfo.h create mode 100644 src/HOMARDGUI/MeshInfo.ui create mode 100644 src/HOMARDGUI/MonIterInfo.cxx create mode 100644 src/HOMARDGUI/MonIterInfo.h create mode 100644 src/HOMARDGUI/MonMeshInfo.cxx create mode 100644 src/HOMARDGUI/MonMeshInfo.h diff --git a/doc/Makefile.am b/doc/Makefile.am index 5c5c24e9..6eae2243 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -62,6 +62,7 @@ gui_create_iteration.rst \ gui_create_zone.rst \ gui_homard.rst \ gui_usage.rst \ +gui_mesh_info.rst \ index.rst \ intro.rst \ tui_create_boundary.rst \ diff --git a/doc/conf.py.in b/doc/conf.py.in index 4aa0a92c..c2d218e5 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -38,7 +38,7 @@ master_doc = 'index' # General information about the project. project = u'HOMARD' -copyright = u'1996, 2011, 2012, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret' +copyright = u'1996, 2011, 2013, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/doc/gui_create_case.rst b/doc/gui_create_case.rst index aaac4a77..e1dcac09 100644 --- a/doc/gui_create_case.rst +++ b/doc/gui_create_case.rst @@ -22,7 +22,7 @@ Un nom de cas est propos Le répertoire """"""""""""" -Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. Ce répertoire doit exister. Par défaut, Salome propose ``/tmp``. Ce choix peut être modifié, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement ; ces noms de fichiers seront visibles dans l'arbre d'études. +Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. 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. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement. Ces fichiers seront visibles dans l'arbre d'études. .. image:: images/create_case_2.png :align: center diff --git a/doc/gui_homard.rst b/doc/gui_homard.rst index c4df6439..08f8928c 100644 --- a/doc/gui_homard.rst +++ b/doc/gui_homard.rst @@ -12,7 +12,6 @@ Lancer une adaptation s'obtient en s .. image:: images/lancement_1.png :align: center - .. index:: single: arbre d'étude L'arbre d'étude @@ -20,11 +19,12 @@ L'arbre d' A l'issue de ce calcul, l'arbre d'études a été enrichi. L'icone devant l'itération est validée. Sous l'itération, on trouve la référence aux fichiers de résultats créés, identifiés par leur nom dans le répertoire *rep* qui a été défini à la création du cas : - - *rep*/I(n+1)/Liste.n.vers.(n+1) + - *rep*/I(n+1)/Liste.n.vers.(n+1).log - *rep*/I(n+1)/apad.n.vers.(n+1).bilan - *rep*/maill.(n+1).med -Les deux premiers fichiers sont des fichiers de texte, éditables. Liste.n.vers.(n+1) contient des informations sur le déroulement de l'adaptation : récapitulatif du mode d'adaptation, pourcentage de mailles concernées, etc. Le fichier apad.n.vers.(n+1).bilan est un résumé des caractéristiques du maillage obtenus. +Les deux premiers fichiers sont des fichiers de texte, éditables. Liste.n.vers.(n+1).log contient des informations sur le déroulement de l'adaptation : récapitulatif du mode d'adaptation, pourcentage de mailles concernées, etc. Le fichier apad.n.vers.(n+1).bilan est un résumé des caractéristiques du maillage obtenu. + Le fichier maill.(n+1).med est celui qui contient le maillage produit au format MED. On retrouve ce maillage dans la section de l'arbre d'études du module SMESH. Il est alors visible dans ce module et utilisable ensuite comme tout autre maillage. @@ -33,13 +33,12 @@ Le fichier maill.(n+1).med est celui qui contient le maillage produit au format Consulter le résultat d'une adaptation """""""""""""""""""""""""""""""""""""" -Les deux fichiers de texte, Liste.n.vers.(n+1) et apad.n.vers.(n+1).bilan, sont visibles en les sélectionnant. On choisit ensuite "*Afficher le fichier*" dans le menu HOMARD ou à la souris. +Les deux fichiers de texte, Liste.n.vers.(n+1).log et apad.n.vers.(n+1).bilan, sont visibles en les sélectionnant. On choisit ensuite "*Afficher le fichier*" dans le menu HOMARD ou à la souris. .. image:: images/lancement_3.png :align: center - .. note:: Par défaut, le calcul est lancé avec l'exécutable de HOMARD installé avec Salome. Si on souhaite utiliser une version privée de HOMARD, pour tester une évolution par exemple, il faut préciser où le nouvel exécutable est disponible. Pour cela, il faut renseigner deux variables d'environnement. "*HOMARD_REP_EXE_PRIVATE*" définit le répertoire dans lequel se trouve l'exécutable voulu. diff --git a/doc/gui_mesh_info.rst b/doc/gui_mesh_info.rst new file mode 100644 index 00000000..58b00ca4 --- /dev/null +++ b/doc/gui_mesh_info.rst @@ -0,0 +1,92 @@ +.. _gui_mesh_info: + +Analyse de maillage +=================== +.. index:: single: analyse +.. index:: single: information + +La demande d'analyse d'un maillage se fait par la donnée des informations suivantes : + + - Un répertoire + - Le fichier du maillage + +Si le maillage fait partie d'un cas enregistré, son analyse est faite à partir de son itération dans l'arbre d'études. Voir plus loin. + + +Maillage à importer +""""""""""""""""""" +La sélection de la fonction d'analyse est faite par le menu de la barre supérieure de la fenêtre : + +.. image:: images/mesh_info_1.png + :align: center + +La fenêtre de choix s'affiche. + +.. image:: images/mesh_info_2.png + :align: center + +Le nom du cas +------------- +Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas. + +Le répertoire +------------- +Le répertoire est celui qui contiendra les fichiers produits par l'information. 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. C'est dans ce répertoire que seront exportés les fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``. Ces fichiers seront visibles dans l'arbre d'études. + +.. image:: images/create_case_2.png + :align: center + +.. index:: single: maillage;initial +.. index:: single: MED + +Le maillage à analyser +---------------------- +Le maillage à analyser doit se trouver dans un fichier au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. + +.. image:: images/create_case_3.png + :align: center + +.. note:: + Le fichier ne doit contenir qu'un seul maillage. + +.. warning:: + Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre l'analyse des différents niveaux de raffinement/déraffinement + +Options d'analyse +----------------- +L'analyse est faite selon les options cochées. + - qualité des mailles + - diamètre des mailles + - connexité du domaine ; en un seul morceau, combien de trous, etc. + - tailles des constituants du domaine, groupe par groupe + - interpénétration des mailles, par dimension + +Le résultat de l'analyse est contenu dans le fichier ``info_av.00.bilan`` ; ce fichier est à consulter en l'affichant après sa désignation avec "*Afficher le fichier*" dans le menu HOMARD ou à la souris. + +L'arbre d'étude +--------------- +A l'issue de cette demande d'information, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, et les deux fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``. + +.. image:: images/mesh_info_3.png + :align: center + + +Itération calculée +"""""""""""""""""" + +Pour analyser le maillage produit par une itération d'adaptation de maillage, on désigne à la souris cette itération dans l'arbre d'études et on lance l'analyse. On retrouve le menu similaire au cas initial : + +.. image:: images/mesh_info_4.png + :align: center + +Comme pour un maillage importé, l'arbre d'études a été enrichi avec les deux fichiers d'information de nom ``Liste.log`` et ``info_ap.xx.bilan``, où xx est le numéro de l'itération dans le cas. + +.. image:: images/mesh_info_5.png + :align: center + + + +Méthodes python correspondantes +""""""""""""""""""""""""""""""" +Consulter :ref:`tui_create_case` et :ref:`tui_create_iteration` + diff --git a/doc/gui_usage.rst b/doc/gui_usage.rst index 81e7bf59..e3654810 100644 --- a/doc/gui_usage.rst +++ b/doc/gui_usage.rst @@ -35,4 +35,5 @@ Mode d'emploi de la saisie des donn gui_create_zone gui_create_boundary gui_homard + gui_mesh_info diff --git a/doc/images/intro_37.png b/doc/images/intro_37.png index c6f7943deb12990895c8f08bb38aeabb563f2b7f..f04c51229b41ef4d333784421e155446e77af338 100644 GIT binary patch literal 10471 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 f4$jqJF) diff --git a/doc/images/intro_40.png b/doc/images/intro_40.png index 36c447a01ccb36b7689b516dbcddfca8319b41b0..88f3077ea0afdc88fa805a1e5e6164d4a823058f 100644 GIT binary patch literal 16126 zcmb`uby$>dxA#3DF_aS03ew#TQiHT~mox|nNOvd$N=tW_bV)Y?QX(KB-7VeebK>v0 z_r0IJ-~ArX@gDE|F*6KT%ynMpxz_rAzH5S&6{WGzNzfq>2$rnO3sndNVHUiv>h7t#X+HYu8g~~z4hGxNf62XpGE&n2uy`Mojge1pmv1u@uoWFk6J*sv z!g|yDLhoHUiB!nCl(k6KFGgLP9bQ@sP5KvQXrJjB={pa&Bi;5=7sv_AC%yLdgOZGi zf__}{u)R7@_aYP7aC%5ClG?E0{Q^A@ky!f8n>W_h+a)^HVI`>G3s+Fdj#A?%6_G(8 z{_ik}%)v((h+&-IFJuHMVhE)DJtPNHo9or9S7>NxLT-Dx_N1hw*P7H2?4SjDa$(Oe zMMXt-c9u3DINuCHBNwLF3>wwzDcSq|%~e%Y4v&9`Mm`maZww4Z*XDmNb(!WikA_Yh zN*+qGx9eKkdRfP7o~SlZT;3|^b@qEB-AhqRl6?|kz-+BQZfa@@^$}UFU16~2N>6xf zY^?jK!+5UIMXOAIs==usEp09ci!@&;V?MzL zf`a=dr`h;x&?C{CgF&{@;8zlRvyF}CG3P-jJzs7p$|?@xva_@A|7-7eO=>S`6bsJ1 zH`_2%Xa8qC#ool!bR;0S(erd$HimY0q0Mg~o~2l;oRyI=o3mKG$Z2CJO~gl#hGs3C zZ~o%$dS59+q{ZTUa(#Wh$ZtgUO!qGOwu|LZa=)8O8EQw|ChVi@T{mB!+3#g)o@!Z@ zRI-jsoq^yn_y;M;Uj>C3FU-N(+FDU@Xtgf}ocHRdlBmzgh_tJ#YbYUGI=2f>*L?$nx~$D( zUb5y?6^?KJ{{1^T8W$!}!I-^+011UjSexW`{r*+CaBef7Qb_L6)H;s!x!Kt! z`>ic^|=1#uMCHbl-$^)YVU}cFO-aZHQ)&oIe)!O8Tii$pblI zjAS;<&Cm0#+z4%Q+ZPe(y>nZpyOmm>wWqUv^J0E^qOE-1^>llj?aVjJ#|FAf~{^GyPZ`+t-)Xj=K!ImhTlwl6`bx~l<5)vk7O2J3k20X#JCel@W-!8)AQY#4;=G# z_6speBC-k5eP(22WNmj>#VILzmX>tIib*fm7Z=-YwJ4+DA3p4iD}cZy&GGFhu(d=# z*y1}(y<+Ll4Jr?Bc6lo-QrM!-S2!e8A}g!62c_kT@#?&7q~2lka>GS~%0!G#Q&Uqh zO)#!CP0+>K+?>WIB_*ZFbyqiBs@ipTdUjS{@U}OKYGh=jqoX5+R)LX$!MHYCvsm=c z&GF)*Q5hsEDhk9P4lx99<*q&~kN`tJ$pybi6O&IVq*s@g6JM{P1`QruSDPv)%c0<; zBOh@Zi#j4%4L5%}>g%VLm+#B7wQ#@r#m*Q_+FfSQ6dfIn4Z|R0oo#U1=nTY28V?Ez zA`|vh-`@jga8}y)?9Z0Y!Yy30SXbh0sTh1pM&^5UVs&+Pvh{OmX=xBsKtSNn)nuEa zqvK{Q*j24SvE`r>gEDHfo6zt%m|JN=Ze-Apq$DI{UcW1kjvVduHhyG0!o=kEAcR1O zuun#-K2q59Gifd+aXCml=piB`Tp2Gu+#Yvde|dAgU}|XidnYu*hrsWO;qJW6K^&pg zHN5U&uBk#peZ70vM;s6w)r!YKX#M&Thw9-|!7e?xV&C`g2F>mqX%`?CY^<+y9)m?3 z_C(-lzQxNqTP}~0i3tM}lbM-$Yzo{*$eebxiUrJPMC(-q6_tZ;>!IO^ahT}!?`oAC zsi~QnND`i+&!1(qa0F?XnO{;y4F?w}Wjw^dFkSnznG?DGBO{W${wyLQ!r0h&rq=dn zaU?k86VJmq{&}s1lexJ%;|Ixt_&#UE=ntj7e}CPLzPcBIy%JYHrvAk`t}qV;0@*ZW zJ{1ND(H{XV)d!5Zk$C$Q7#auxJTJq?c*uzhyuW&K5bK38!SLk%y-~zdpPmwi9i8}# z1Bun`kS9-Z#242s^bI4+4Zof5$EaF8kd0_`3DtWsIU?C(1e3tzeF{OLjlW2-Z%-jD z3dGo`tDT;j!a*AO^-J5pU~XhYT=?pw@>}%Y!Un;XZ4Ra;J_I7c{>9 zJS;6N6o;1T*2pmvdOuZoTnzpfBRC4dd_4W0wEge-= zSe*6i*Y4{{mQS8MK}1CC@9+QI<#T<8jD+-SY6^tjH{T+jG9S8UAVQ2v6IVh-Oy@uR zJbpp35lWcmce&P>k}^O*Cv z^WRf=cz7%O`;pjS-dfw)rE^&-%E_UhatjD}T%BxzZ|LCQ(AU?u`HmugOm2+=x;#;; z2QuuT(0;Q-f^LP8xR=-U`uCK=oCs`~ee+>Y#8aVF$4j>bpYyMeL@VHrebFKQHO44k z?ZXNNW0f;J&AtXvz*|pFe)G~T&wOHul6n9By-f6&bq!eM39JU$WU_gxVU_BP_@UkE zzLu7jjFowLfr@4m!Pu(wkBLmfr6gF)jlvA{^rnQj)8Ymvd)oeVL+&>u;y?y)^e5hX*8SoaP|~1shosA0o&_$%u%E9zQk{qv2Lm zRD@FK>FM3HyY&z)wECo|ww%4gXtVm64~7T{390$d-8BXQvylen&0`3}<|}5nZQwgOgkytx-@=Anq)JV(979r}OjkYWXjd zguQsZ9y1Tmg1q52Iwu^;ae;eWB+~2`C<6uieqPLx?i~__Aag|zSH>jq|XS+K{ z4obzl!`6Rh$4*8TI|foxPVLj4eVlyd#lph_ipN;FcL_5P2s`QeujeNI1+zcr#-~Hj z>oWXkp|C*@^*qfT!$=wGs+yYHlb=dfp_pLJD>9F$@n*j1##6eH!%jfUj(+1?x}F7EQ?=H~vsp}P8*8rmtmA%heG5hIM>WFUPjmnuV@9DUT_et;L*@W-zA z*|&l2EfC2JeJ{=HY~x~MbMy0k?=Ck$zC1lW1%+~k&sow^wi{}*0V+g{FVQ$4gjg~7 zD-jjkWMS%0!Edf|pPQcxBISeA=R2taPGEU}8~ywpD9}|vQC(ApjspW@E*(jhr|SOb z&5H1af|$$_`0|)iEP$AZ`E_(M)(fsXpC4c2+HYp-m@QEl#lVv$r%(X< zIWa*SCF7~CVP&{P&G_0?hFMw3gsWj=1W6~12JyByk1Vu3@K)~Xt zw)kFDR>o`f0c5GS+GPdIo{t$-E@JsrS?FRpVIw1~bknOZio@tHjrJ0D)-!~?G_{yO z4zL_bUCO7Up}Af7bDN>hYHx4} zl)z;Smt#<~4$=Dds>xO1mzRRPyk4X8)>O46+WUH-3zoY>3!UTS*0#5cR0}z|xV8pC z%n1S-q{@82(aA|(UcRvF;^N}u#JNyi*U<1!KT|o;uo@T_l7Z7$EJV{%O?m4txmN=x zvd)Pj2q0&*0sSy(=r`BhO(P=W+aJrI?g<2e(+}Z|m6esHC2`Aj;fnC{MLyQ%ZxRoH zdaLNFX2ayCiGWe#D!l9$t#cCa#7;$nKr;P|gUi2@9Het1uf5YXy3c(lUAV&L0Ry_d z6PSD3a2gq8h*(=YWeE}ZmzZ&bz2S*1sM-8Q5T37nco`P*0@}CA3I8Nl2!k3F7VerR zfe|tSOQt(k7B53r|6pwS{U)EAR9k}+?5GT_uPF#60*{pjH~4ISL1|%cp)I2!)B9ib zYhSwDLrA+n@^f=Ib~2|GC5--!u?S2ihXM!YSVKVJY^{e5+nk7VG(eW5R8dw|*3gIx z4-eNY#=^n^ck52Nn45#6vbp&=C8Y@{S1mS?ArMW7d;jZY_~%7ra%8rPkIH?}_sTZh zoO!wm*w*i%9u5+{p``G0Pkuo`vghvD6wU{W;&gO$f(EP!K(jjkxw{3CDW=a1D z_rSdUO)g8F(q8dA+C~vZmxA}h1?qNod($;GJS5-2vy+q4)(Mq##0zO@R8&-@WbVS; z++54-2M~5;1SMjI)g#xWB7=NYoZOJ%qA}e(-C}AP{H&4Bulm)+gnK&rN$jLLrv z!U_!!&->}NJ6-d32?ieqRh{uAUofjU;a^G^^?+AyC-d zP7a6>UtbZQ^;wW-6QZM4b#$f%3=klh3#PZ}j&)yT@;DphXtfy3(nxCLax|mi@2O*{ zv#1~M!n2=JnB}Y>W0qCstAa>k6&i*e5*&;GBCo%Qe?i#noG%~iB?Kl@toaNMje9AN ztE(DNqZ<{D1>3xd;FE+}p*ClOc>Z9KA*c3CQ8kB_#~Q0}vMI|1uJuc6ZpJ{V zJTd4yVH8OFb8y5Llq0cYR8Wd&WePZV$U``GAvp3EU0e$FRvVi4D|`qLb_`9I^eSWX z-6!3#Xap$tD8vE+X6{8q-iAn^%s2#+h@h<|^$|}XB~Y^%`TnbVK$IH1ScR|O9E{{Z zvl0`D@>B~|3m0#BArMcrgV?|e8rCxFtCOYcv$+;8H?XLe*ldZK-kM%ydxJ3aE?{A^ z8+%Cu#|K-uy%z|`O*a36!5@JRD=%tmdwZnJY?uc6bXvVH)q=^bWJ*JZ8OO~EqWMoF zMQdtn8|&-e4vfy+yu|Mvhaq-?@(ZP1ZJq9*X}>q(VO8nw!VeKWP0fkf*;!h(y8ba+ zPM6}Bd9ef7FnoM`L>}cmmfa0rUS7ov5m0P$u(Kcho~m|ES4iQ#ytw%FE79~B2r=G^ z&&_>V1L3p1L$v0c{YSifeBel>Y1ZqG{xtTUuJ0nUI{NVnQlBOMa>m2%{JC z8n|4M3-#DU;lRqu%I@y&a3WzWHgB^OHa?L1(#Q0Do&nMEoQ8(RvEc?pDYn)NN~Qu< zZ7+<|T~P?+mcYgfL35HY;L6*W-{Z)vL7z2Y!0!$yQH);Bq>{?Y%IfNvq|NPZLB~~@ z6>}hXGAnEA*f42%dC&T^9Ag<(^G7ksMViaXBCHZXf$KSQ=UBI^GqoTOa!E(>g4#p| zs9+X1CK<+aVWldcxpCxO8=9Ih-sJ9K)uU1*Rl9(?2#M(=7E3#54{WK9E%!c_iH8$k zoW7Cwx8#c#2X?vlDvPGXR$+=g=n=Wd-l-BkBUm~%>W<-ZXDbmjI}@cTqJAPJBo9C# zR&u->njUX!Wn~ppxK^cD^Rg(u&N}uflwyz13*@kta2^o!{H7uz9@aFcDZ559BFoZa z{i*=d#0a-tZEtx{n(bEk;z~(!;B?{dr;bJn#1wE4b{a^}z|_OV!~6R6>$MysAUMyk zzmxoBpGtobs6UVS&jgTl*oh8e72e6foeQH*Wu6s8Au6}OMidi8eQv(e-+IN^=z>83 zx0{2Nw_3k->UqzRXbP#ot(Rtn2xqpEwH+WzLBUh2ODNp~`LEC=`?l_P?-Hq-RAc3y zJJXjHc0iXjiYv6kBqSVMTqb``>pme4269LJajR=7sj(3^Lgt?b=~cn~jzjKVt2npf zP=&OR=H}sd4-9~866fIfD40CehsMK~BjBVgCpYG#42t!%-!#gF z!yNtS!tY&xDazkmIs5 z94VSz-X;ajBIX+I3Z@r+YHpd6;U{J2GagV2=E(>Df;U%Hp7)175GyM)AV`80z6e0g zp^{bx;#W=_;cA-+i0;-)6#U1VCE>3s^4Y*%8K7p7#zyko<%vxWfk`x}w*LS(^7-04 z{fsarj-#uT-_44|eWmY@ji}V{r^6u49|sA-g!mlX@m+(@-@OJOfocQE{T~GA-cL)< zwET53--}c}{<};`y^WY(2U1Lh5}$|O1O2DCBvp44X>`pkrwqP#H1V$`&?f7RN~BzhbjAN%Pf?AWCuR3d|N_|_j3TQqh9c@9|cUm{!|A5Wl5_G+M= zrK}i3*t7q=7WMoKu3@U%VIonq4mDnJol=6R)vrqO#k1FFz4o81rNS@g^}b-=e(RmC+R zb&B9r(+=NeRK(x{Fc2(qz&ydl)Yweg%{A5#HqK*7Mc~v;woGb9S`YR2qeG#ut*p?X z(BA(3Y+R2Ivf347F3Lo&qTKPmi$$K8%7t-ngKRIk*o80PNTaA96;n@HuzX}o^UhrE zsHy6BXlSUj`}XDrtXYnp>$6=9D72!w8qkMdK<0lg07@0$IdJ~LsS1ac9w4kkUQh}m zQ>^ap`kZX43?8a_*jy|IJOX3-Tv%9MPOd(h-7@e6CEBA$1!WnY+YDtnBm@Mm%Ux)3 zavHk2Bse(Yd=!~wcA;E>IHBDjosDVWSFa5A{~xqOnBU+L#TUQ{-Q3Q<0TKaVy3It% z;lTkBr&%vxsZX+Shf^fq!}#s3+JYQp%~X z`D(JTM^(U14VzB!E}=GEzkgsrI-Eq(;1LP;Ccuf-HCH|1q_VQI>dS*kTw0~NpuS1` z-U8%1D924FB%*U)P!e;PAf}R7-$|768`K4XV6nu&sAqs zO6A8PBI?EOso*dnSt}`F4ukL^p)dVBhFmM$oyOpNj5Fb2X;0xap!kEldrf2UV2@hiJjD3-yQd?KIP-QL; zXcSn7_ey{W4^K^5S*%pFtE-Ehw9)I_PFHujD;Q6wl*`@&%-*bR0ms$etJ9r;_wO~! z^b3`~rKP3isWSA`=jBN<6F3PC6(bQ65>A({jE5PUc5(N|s;d^pGT^7h@SqRMxtp)V zeVC*_jwrvAlAb&<%5!FVWY3mJWE9K9$O!5ewD-!z;{YJU3jLVDmd|S*b!7@;rFlz! zs0g#P+?bfqyys`gN)2`Wl<+;bMN)+ePrTLb9imX^*ndmIA~?DlAYO^v~%GVvPYNAu~)2{Q|eMxi<&frEy=f&p)_PI%OC zErRUZZsT9I9vmM7RYzo+^wPrKUWrDKpC6Q3j36jPjf*$vD{idDWz_M@vv4aYD4eVk z?A5d8Fqa?!1a^I9tC`ai8FeS6GfBT04HjXPOzy~Q_8!LueRuEEKj->l?3(CWWD{>z zcaas864>ZXOia#pXX@PcUtR4B+Dqv7HQZlzSy6o?^Yq`_FI0L_C-f-IeEl>{Gi^mn zN2l+}7L9!T*!VaOlEc~WDe(Xlm0&K*p_fWZmbW&8C0*aYD^Ny#sjF+dJ)3#C0xLI0 zn-nvsrq06EVARmj(J?YIGB&1&O9!?jzU4+EB-(H=f;nDv3_3Oa1gJ`9*6XxdT z24dnBAGYbuyw`qkx5>6&RI^X)Oqhm;DXt6K$G`es|*)p@SoV+|(t-nFC+ukN2C6%umm~ptu&d;ai zfzP#o1t8$aWz*S2Wbf~A^-$#Lo<~m8gq9wiRP^ah0;I{$dgY1^8@67qqTts zc@6`fgM7rR0PLdH>tP<&;+~TqAm5I=xsa@Zu$U_9H$OOfWFio4R7@b%-oojjM_V$L zE!8EcT&V8h;Q@kYv(opaT%^&rTLe3tHn5 zH%&i3ZOf4g2iinSUH!2VN+OLEC2laI-O_iDhGV>+5AoMVx5jou#=d;a$^>fc1P~(A z`{QNUEnel9>FwrhKUoj%dGsI$i0oGX7Ip$)hwhQE4*G3Ui5@3>v47|~*IN19Hk+It zl<7VQN>jh8#*PBTP_$d`m00^LqEHdK(|6GbkYPN2nxS7+SIr2f6##f)a<{7i=~3~l zU5(cVP%lUT*ca)5l}WF}q|_ZF0N?F9Bgc|En$~z5EsA@8PyAZCm`q^65t*QR#xgKE zO_h~DbvSP0_W7%Rp&pB%0%7jp-~h}wi*y#?$&>O9_VfhVW#{I0Ei5by4cUPb52&;+ zkXh}(<`InhhgB*CdpPlPKJigW@)m)ft}ZCW z)>l`#ZKt`nhdFai6FoK93528N67NW=D^W>n5k#Bv`YzPBx2=dp5mFDR3EY~nkf@+Hm_QIW(CwoDS(fOT)*a!TNXt}7=O z;;-I9O|aVsO#uEDM$zyl`iOf=_vsL;ykAVQFVk9Iake4Zly+b&( zAo=UaFGf#EN3>1~M4!c@y??8W{m}YZV8Cdehux&R(@-LZ1V34H$Ds(4^8jNne)=`( z$h`n~ql2`R`RvJ<7&>a6{PAqr;W{WNoE3kPm?O-M5;np&6oW*Nz$_BSeu&;Fj+OgX zxsm(FE{Xk+U3gW;0O1wUnw_5^QZhT~!C4?$f01nNv*Bcy2Av(p>WQ_G-%mnC7F3FiYn6d>Nkr=-ZYnX;Sr#{yfpMz^%s>OV8! zdr#%|%0<{_QEqgcq2>xO75mmp3r9!Jxad!xDx5YH8}wU&%??~+Mh7r8GW_luU|IBx zj3mG!sScW$m^j^;lz#C7%Ke>X2-gDS3Sew%GRA?F2sXXMQ+iG@?2rr`Cj0qjojg_B z*?JCIS}8FI?cw3!*4CD4;TOOHgNNe(u2;2YW=YPY>2|S7pW&HL1r#LP>4>+WKwZBc@hwg| zZ#>NKk4A<5NfLZv01IVa?}^~gp3 z6G|vVn^f~nEs$I5sCTWz81Mi@NIM)%hxb(^xKHO|gf=KvxL@lS^+ zrdEpa(?cLHq4%PVltZ2RfI}NBdX#62T>$rMV=pqKv@!$T*Wq7qZ`6qYm6rrEepnru zsG74p1Mf7eB&}w$;T$wR)ltJC?q^e$8D4u0fc@_nuHIZ8oA!iploEAH6z(vvpz#o= zrlx9d7#M{e|0C`UA&hH43IJ^NrKaZe_*lsMf_)CjP4!TbYkv8qF{@!~>Zecl_Uh*5 zJ)GI=ySj3lH41x@Lxv@7KZqJL7RFy7ad1}L&>+CdIt1VxD{F)Z`wvWl9^LPR_aW&P z;95!S7hUq?z#sVu434YE0?wPm;EQ3!e}}WvbP(0m)ZjmU{AT)#6_85m%X@Q8qL-^N zE8ikxsDsIG@>yOryMyFCM$rqZT4&pn5|g|Nl5vex0t?Uq1xh9m-)(JeZ6?b=bCnI7 za|>zM6DqrMukzCQVx1qa%*@S!`TOO|7vM;O_ao+Bxk!r?7I#!e=G4^G%7g%U$=AiP z%^$@iBoJ~TFzl#m;eoWcDB^f9AESCL|TtQhf?|oC@jB zlN!%XPEs?DZ&Odr(QI1rF9J|0GM^zmR->@MK%gl>HJ(E!H4iWiBx2{DlZvTAEUDJA zFul1r>Q2Bn80bgO@yf{CH+h-=rin8jidCEGnn&_-Bfz=+#DgL{dJ zwjq=HC0;M-+-{)4{oi9N4-Q&9M9ACG1)G2IrttngM$*` zX=!S5TJ8dH2Q&)wJwIq$1FGe7R}zh>3{@*TBdag>8IKse3(= z4Wc=4_*k_o{F&~{dEHiJ#yC*Oog5(xYd7bJeZ4O;T3cH|dmRX8xeu(NV}o8SC3?m= z&2OfvK&{YkcK^((R~x4FNFS4kWRS?5F+HZN|C(o!ffO0`dU`=FQO$LEIg*laeKVOA z8!@DgAMU?gn#%_h+iE13D6Mee<@b*{;ITjV$dT0{o|s~C>P&qb73%16+50#iZ>QIh zxX zBx-_xlbAWDttrdG(8R>V-rnAWgSRp2pp~l~ln@lY!J&9l(^pRgMyIAO6WVTQes}wQ z=E;RAq)%Tsy14K-eZ#@KYI?fTw#vZD>ig&R90+>g2Q|6uOaRqIq6VDU_($&jH~K_; zdnRVo3^7rhI+Bvzpl4F*hasI74riWJ*%+L4ers=!HKq@<%uoqbh>xD|KZ}zCEi`{R zG1yLAoj^Gwu*h&s71PHmdiof)scu3Edkw@R-uw-nxb-+(Gi&0tdPwypn;doY=H_cV zoe6nIC`Fiqsp$&v-~o{r_P#jqyF1QM7mt$p0&qq+Dc^jnk6!UOdhgGXk;99XNVSyL zz>GHmz<)zkrZ@cen|=i;D9`_Z=i4Lqm}C_dU;RgmMA8SSmX?-b{af*0lvHqD`}vz$ zrys<#PeCIK#>6@U29e1vU-bV*^q_$tb}Bsb{*iGs1l*HoxLmPH6nuL*eGIf_0>i)| z^tg+q(A64s_W_P02pmGN)7+i)+P#*VX>z}3)IY+u!ge8p2$$cv3o8+6|MCA z5Q(WpFZ5q^rY33Q<&GeN&f}t4-5=o2v?+R)UsHt=PIV- zOED7|w)y&iCM9UrUw8HdIO1-uu3!c4PgP5kdw`yjI?EsF0Is+BU3?|S+yV^n7V92m z=X3J%DpO{$RDo}JJE|usDXF4@Q`1@^I*`Ej2n{W3=pidJvwoFXa9v#;X#N9|`?Ta8 zdb!y3ub>8Su)uOQk__rps@LT8@IafU z)ML`fP)tbGRTm+A23n z)aRWCkbkJX`>DnkSC*qg@zYa!E4o&lDRI$Agh@ukFVz_VLbtYwl7Y{AJ!+`WtYBAH`+0h@t??K?@X3>5INIjbY5Ey( zmwi77gjKBpgIT<(lZj|>EwE56DuGb&ZRXBax-dO0%H=f`{8J2`wVjmHdS+~FSwUal z>nrE6`H1CZV5LPiApn~`z>7br@4j2}I=6&lbH>huvaI|Ybm_|TX0q+b%*ZOSF-`^) z(6q883 zvT&wR%$Sc$jC!}S;x$14mIk)_b#?-d`?X2`V?f{|$o(!}k28KT$2dBc`0yyl9|FfN zDwV__$iyHVu6KC7|7vxkpcxi4V)b%5y;etgk8LEv-6AotRn8m9*lg7SQk;aswb zh$?&?Cp7Hjm6K7c5o*%~qLh}+Iw$*L`(!~V+1x(d93X@(^9>~`hlu`fczop>%0n`BK zH@7e~mEcoRRbAfSx3{$91F#L0*t!sseD#vY2Hi=WH)k{U)s{b80gnJUAvlb%aZSw8ykmn z3Ygs`m(v6+GNrFLXe@k~rb)!1QPdN!$$auUwud zn?Q^#G`T4is)IzOQ*A*!>kzON&XH~0H|u3v*+Xc0GofeC0=oWbW56>v4Nah&H|R|& zE-C^(0cfK5tdfHivLhRLbR1$PCQO?peU-)WO7Yi-<(nob1^zoct<~N*eg{d#<&e~n zfx0-Pc!s|H{vi<0FbL0&kBdu6x`_5?>e!w=YX?I5SA{WX0?SOF7$29EmY$iO9;FJ$ zp00OT8P1ZhdX#pxvi%S0zuEkw&}jYNSbyBVS%0DFw}{HsM;I7F4$E-Rddk8Q{_$gG z3bwLV9k^c~yO%))wOtf4)=CJ|I zZb6vDM{5a&s>CEDB&r6o}hN-V# za|#QC8*QzvNuImEb#mgemtc-NvQ|NG^NhYqYcf;OA&>ApTI zKOiMJ2 z0b0{;yam3{E6**OcgwSyjd3692wx(-7&Y$%v=tNs(guLFx1CMfG?JJU#%k#b2O4jE z&{CY2q9o$d8Nk@a543*N?lP+5S7+T{Py zAi9MKt^=(3l665r!Oa;kA(2r~RP9K9x)GF#XDJ(n@sMB{z!`#BbKcn7x0w&bgUxSl zZa#g&W(0yiKQmK|HfC*OZZr?eh8> z!#VXb!&FlMUugSiQ8 zn;pwfkx9zlG_D?=o(j7k7y;^ez2C;h-b%CrCg+Hu8DO7ba)U!d7CKLiI}#b1kJv4# zfKhZ1l3Q$$yu7^p`R@Zb&S>0SMenqx?E;s!r4xAF>5TRDXF(VR=|@wOz`b8s>c?>` z4s3FNCDf(0TLWknc(>Z#-$Me zjC){ToQ4ym$>bFC%O{SGjso^3Bq-R}*x1w4GrD`^n%epqgygWWFV)qdAtB%gV?|{V z)nzHk$?HRDJHLNFH|hEan&p$M!xFc~2z@}q9e`!VSOjj56XV{R|D;iJa5(%#ApvaZ zs_JT&a5fhQ(4Yu@0swLdDCF1IE#{54L8na`*`P!2zp;Oz2&Kb+hyI1^W1i4`=jAjw z=w3%hN5>8A2GV4sOwDb)J;hqLWL~Z8f1>`*l%x@BGVe=ui4Y8btlB13ScH<`?1<&5 zf&?KcC3Pec_*A(E6hN#zi#-H)1+M~B4#>s&Ah3!hY%!?tFAOg0vCjrgu0RtxaJ5H> z;C+$*^!hwPANif@es7-W7>oE>dYG8#17=Qt>`o$^nrYw$ALyDPfktl7bbYmjQf9y1 zI4)8&WSsu`hFux--CZGqN^N@l)8=Nn{LJ`xZ$~Cma3h zRQI1=iqAPKAjND>Z;GmvJl4!<4EfnPm?p#rCKqt@OG|A*t0*8tyMbkH0a2!7IryFP zDUW88tE;NOk1#-a2cADmfNnmJ1yLV9`6QQjyz#?tDUfjR8Br*iEX_+lgA|@|9MT5_ z|CySXlx_9vfV4|O!ifE-Z}HhneFW@U6Zb>?ugBZU>Khzfy&Y%ghvI2L z_PVgsdG%|~(E!D(nXzT2599c+&cUk&M;dBs_^Bj$bu|jA@iKaQsiFJy+wpn2lNO}g zr(hsnhTvmR-C!(~e-+nx&r(e?_}9!DUle}U6U&2gI}`X;**{&|fuEjfFZmKdg9O7R z{b;>;_A=P&Lx|&+^R}y`HAyO9#{PHrhQ$3Gfk5yO&pNe1b7_N3J^P=m$eTgK(N=+9 zF4sLrUxIxz|K)An9~uZ@>>sk~e?Lc34Cbme@R@hm(og|3hxR|FXl;or0)%MM zzu@_^ie4AqqUM~rZ8Y!)y{ze4NR7ECBLhfyEut^BR#VDiL<>I$j+9NgUM88@JN4v@h7IB|D+7vVe_@kfe5LQdF1uS>0-_t& z0y_h^6W&Y*hS0wh_hn!r3sP(a8Qg{GO)S>KMYHx{XHtcJbRhpeyMoo1p|8CMOwzgS zYI>yqf|W_$#0Ea#Ck9vq1aq00!XoCHpX)# zwcaDP5V|Fs`Mm%YUaZ>@wFx{z!UXsuYOXuq_X0M^H|Bst>pg*q9cqq}Qe-+CVEpeZ zlD$Z-yZ#S+{eXgd*PdpOLCE1yIts(dS%L8XVK+fA5Px@T9?8A$r3()fP@p1Q+dhh7 zV5Xah`X_W7e>JY8$n+QK60GY=#M@?qUh#Mh)3tZ$x}_nsp#I+EA{e~fz<|6ql7k2% g--Z3fBY(&*3fXnOjmyjfdIFJ^RD4keGkX8O0P&yfc>n+a literal 16136 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 Q2O9JfCEf6C{_kD) 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 WMKO?Bm5wiA5Q^sHL9KBN&iofY`o}~7 literal 29246 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 fs5n_OpN?5 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 diff --git a/doc/images/lancement_2.png b/doc/images/lancement_2.png index d5713d51ddf823b88d24c24f61841d2f1ccd60d3..9655bcb1ce1aa32d03510f9876ebf5dd34dd5cf7 100644 GIT binary patch literal 46605 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 literal 23848 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 TcY^-|0xx3&6a740`_O*@kr8j_ diff --git a/doc/images/lancement_3.png b/doc/images/lancement_3.png index bd1eb64444cae32697a7fb54a5218e66db9687bf..aef0b242458a233346dae5f26c8e6219517ad6ae 100644 GIT binary patch literal 29295 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 D)idsI diff --git a/doc/images/mesh_info_1.png b/doc/images/mesh_info_1.png new file mode 100644 index 0000000000000000000000000000000000000000..044f8dcc47548baf7f64e99765e4d49f41087e8f GIT binary patch literal 12437 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 W6Nl3-(E_jt$OmC*p#rGR*Z%?iOMxT+ literal 0 HcmV?d00001 diff --git a/doc/images/mesh_info_3.png b/doc/images/mesh_info_3.png new file mode 100644 index 0000000000000000000000000000000000000000..04193271110d6dc9fbc4400a514b20249e4fca69 GIT binary patch literal 20046 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 JILCw0017!%e_?x0JH+I+=qh> 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 _mesIterFilles; + std::string _FileInfo; }; #endif diff --git a/src/HOMARD/HomardDriver.cxx b/src/HOMARD/HomardDriver.cxx index ac6d4ca5..1cfa5f32 100644 --- a/src/HOMARD/HomardDriver.cxx +++ b/src/HOMARD/HomardDriver.cxx @@ -31,7 +31,7 @@ //============================================================================= HomardDriver::HomardDriver(const std::string siter, const std::string siterp1): _HOMARD_Exec( "" ), _NomDir( "" ), _NomFichierConfBase( "HOMARD.Configuration" ), - _NomFichierConf( "" ), _siter( "" ), _siterp1( "" ), + _NomFichierConf( "" ), _NomFichierDonn( "" ), _siter( "" ), _siterp1( "" ), _Texte( "" ), _bLu( false ) { // Memorisation du nom complet de l'executable HOMARD @@ -59,28 +59,56 @@ HomardDriver::~HomardDriver() { } -////============================================================================= -void HomardDriver::TexteInit( const std::string DirCompute, const std::string DirComputePa, const std::string MessFile ) +//=============================================================================== +void HomardDriver::TexteInit( const std::string DirCompute, const std::string LogFile ) { - MESSAGE("TexteInit, MessFile ="<show(); break; @@ -276,7 +282,7 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID) if (monIter == QString("")) break; try { - homardGen->Compute(monIter.toStdString().c_str(), 0); + homardGen->Compute(monIter.toStdString().c_str(), 0, 1, -1); } catch( SALOME::SALOME_Exception& S_ex ) { @@ -288,6 +294,16 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID) break; } + case 1121: // Information sur le maillage de l'iteration + { + MESSAGE("command " << theCommandID << " activated"); + QString IterName=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 0); + MESSAGE("IterName " << IterName.toStdString().c_str() << " choisi dans arbre"); + MonIterInfo *IterDlg = new MonIterInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), IterName ) ; + IterDlg->show(); + break; + } + case 1201: // Edition d'un objet { MESSAGE("command " << theCommandID << " activated"); @@ -317,21 +333,21 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID) // Edition d'une zone else if (HOMARD_UTILS::isZone(obj)) { - MonEditZone *aDlg = new MonEditZone(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; + MonEditZone *aDlg = new MonEditZone(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; aDlg->show(); } // Edition d'une frontiere discrete else if (HOMARD_UTILS::isBoundaryDi(obj)) { MESSAGE(".. Lancement de MonEditBoundaryDi" ); - MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; + MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; aDlg->show(); } // Edition d'une frontiere analytique else if (HOMARD_UTILS::isBoundaryAn(obj)) { MESSAGE(".. Lancement de MonEditBoundaryAn" ); - MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; + MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; aDlg->show(); } } @@ -415,11 +431,20 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID) break; } - case 1301: // Affichage du fichier mess + case 1301: // Information sur un maillage + { + MESSAGE("etape 1301") + MESSAGE("command " << theCommandID << " activated"); + MonMeshInfo *aDlg = new MonMeshInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ; + aDlg->show(); + break; + } + + case 1302: // Affichage du fichier mess { MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() ); _PTR(SObject) obj = chercheMonObjet(); - if ((obj) and ((HOMARD_UTILS::isFileMess(obj) or HOMARD_UTILS::isFileSummary(obj)))) + if ((obj) and ((HOMARD_UTILS::isFilelog(obj) or HOMARD_UTILS::isFileSummary(obj)))) { MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ; aDlg->show(); @@ -560,7 +585,9 @@ void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& t pix = resMgr->loadPixmap( "HOMARD", "iter_next.png" ); menu->addAction(QIcon(pix), tr(QString("HOM_MEN_NEW_ITERATION").toLatin1().data()), this,SLOT(NextIter())); QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" ); - menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this,SLOT(LanceCalcul())); + menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this, SLOT(LanceCalcul())); + pix2 = resMgr->loadPixmap( "HOMARD", "advanced_mesh_info.png" ); + menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_MESH_INFO").toLatin1().data()), this, SLOT(IterInfo())); EditObject = true ; DeleteObject = true ; } @@ -569,7 +596,7 @@ void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& t EditObject = true ; DeleteObject = true ; } - else if ( HOMARD_UTILS::isFileMess(obj) or HOMARD_UTILS::isFileSummary(obj) ) + else if ( HOMARD_UTILS::isFilelog(obj) or HOMARD_UTILS::isFileSummary(obj) ) { pix = resMgr->loadPixmap( "HOMARD", "texte.png" ); menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_MESS_FILE").toLatin1().data()), this,SLOT(EditAsciiFile())); @@ -599,6 +626,11 @@ void HOMARDGUI::LanceCalcul() this->OnGUIEvent(1111); } +void HOMARDGUI::IterInfo() +{ + this->OnGUIEvent(1121); +} + void HOMARDGUI::Edit() { this->OnGUIEvent(1201); @@ -609,9 +641,14 @@ void HOMARDGUI::Delete() this->OnGUIEvent(1211); } +// void HOMARDGUI::EditAsciiFile() +// { +// this->OnGUIEvent(1301); +// } + void HOMARDGUI::EditAsciiFile() { - this->OnGUIEvent(1301); + this->OnGUIEvent(1302); } // diff --git a/src/HOMARDGUI/HOMARDGUI.h b/src/HOMARDGUI/HOMARDGUI.h index 610571f8..31101477 100644 --- a/src/HOMARDGUI/HOMARDGUI.h +++ b/src/HOMARDGUI/HOMARDGUI.h @@ -63,6 +63,7 @@ private slots: void OnGUIEvent(); void EditAsciiFile(); void LanceCalcul(); + void IterInfo(); void NextIter(); void Edit(); void Delete(); diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.cxx b/src/HOMARDGUI/HOMARDGUI_Utils.cxx index 91e47210..fc1398ad 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.cxx +++ b/src/HOMARDGUI/HOMARDGUI_Utils.cxx @@ -254,9 +254,9 @@ bool HOMARD_UTILS::isCase(_PTR(SObject) MonObj) //================================================================ // Retourne vrai si l objet est un fichier de messages //================================================================ -bool HOMARD_UTILS::isFileMess(_PTR(SObject) MonObj) +bool HOMARD_UTILS::isFilelog(_PTR(SObject) MonObj) { - return isObject( MonObj, QString("Mess"), 0 ) ; + return isObject( MonObj, QString("log"), 0 ) ; } //================================================================ // Retourne vrai si l objet est un fichier de bilan diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.h b/src/HOMARDGUI/HOMARDGUI_Utils.h index f202cadb..52bb4177 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.h +++ b/src/HOMARDGUI/HOMARDGUI_Utils.h @@ -79,7 +79,7 @@ namespace HOMARD_UTILS { bool isHypo(_PTR(SObject) MonObj); bool isIter(_PTR(SObject) MonObj); bool isCase(_PTR(SObject) MonObj); - bool isFileMess(_PTR(SObject) MonObj); + bool isFilelog(_PTR(SObject) MonObj); bool isFileSummary(_PTR(SObject) MonObj); bool isObject(_PTR(SObject) MonObj, QString TypeObject, int option ); diff --git a/src/HOMARDGUI/HOMARD_msg_en.ts b/src/HOMARDGUI/HOMARD_msg_en.ts index d740bb40..89aca2f5 100644 --- a/src/HOMARDGUI/HOMARD_msg_en.ts +++ b/src/HOMARDGUI/HOMARD_msg_en.ts @@ -35,6 +35,10 @@ HOM_MEN_DELETE Delete + + HOM_MEN_MESH_INFO + Mesh analysis + HOM_MEN_EDIT_MESS_FILE Show the file @@ -303,5 +307,17 @@ HOM_GROU_EDIT_WINDOW_TITLE Selected groups + + HOM_MESH_INFO_0 + Mesh analysis + + + HOM_MESH_INFO_1 + Select at least one option. + + + HOM_MESH_INFO_2 + Analysis in the object browser, file + diff --git a/src/HOMARDGUI/HOMARD_msg_fr.ts b/src/HOMARDGUI/HOMARD_msg_fr.ts index a4cb3ae1..3a63a413 100644 --- a/src/HOMARDGUI/HOMARD_msg_fr.ts +++ b/src/HOMARDGUI/HOMARD_msg_fr.ts @@ -35,6 +35,10 @@ HOM_MEN_DELETE Supprimer + + HOM_MEN_MESH_INFO + Analyse de maillage + HOM_MEN_EDIT_MESS_FILE Afficher le fichier @@ -647,6 +651,18 @@ HOM_GROU_EDIT_WINDOW_TITLE Groupes choisis + + HOM_MESH_INFO_0 + Analyse de maillage + + + HOM_MESH_INFO_1 + Choisir au moins une option. + + + HOM_MESH_INFO_2 + Bilan de l'analyse dans l'arbre d'études, fichier + Filtering with groups Filtrage par les groupes @@ -663,6 +679,30 @@ Group Groupe + + Information on a mesh + Analyse d'un maillage + + + Group size + Taille des domaines + + + Quality + Qualité + + + Connection + Connexité + + + Diametre + Diamètre + + + Entanglement + Interpénétration + Edit a file Affichage d'un fichier diff --git a/src/HOMARDGUI/IterInfo.h b/src/HOMARDGUI/IterInfo.h new file mode 100644 index 00000000..452a9dab --- /dev/null +++ b/src/HOMARDGUI/IterInfo.h @@ -0,0 +1,156 @@ +/******************************************************************************** +** Form generated from reading UI file 'IterInfo.ui' +** +** Created: Wed Feb 20 17:10:38 2013 +** by: Qt User Interface Compiler version 4.6.3 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef ITERINFO_H +#define ITERINFO_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_IterInfo +{ +public: + QGridLayout *gridLayout_2; + QGroupBox *GBOptions; + QGridLayout *gridLayout; + QCheckBox *CBQuality; + QCheckBox *CBConnection; + QCheckBox *CBDiametre; + QCheckBox *CBBlockSize; + QCheckBox *CBEntanglement; + QGroupBox *GroupButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonApply; + QPushButton *buttonOk; + QPushButton *buttonCancel; + + void setupUi(QDialog *IterInfo) + { + if (IterInfo->objectName().isEmpty()) + IterInfo->setObjectName(QString::fromUtf8("IterInfo")); + IterInfo->resize(420, 220); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(IterInfo->sizePolicy().hasHeightForWidth()); + IterInfo->setSizePolicy(sizePolicy); + IterInfo->setAutoFillBackground(true); + gridLayout_2 = new QGridLayout(IterInfo); + gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); + GBOptions = new QGroupBox(IterInfo); + GBOptions->setObjectName(QString::fromUtf8("GBOptions")); + gridLayout = new QGridLayout(GBOptions); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + CBQuality = new QCheckBox(GBOptions); + CBQuality->setObjectName(QString::fromUtf8("CBQuality")); + + gridLayout->addWidget(CBQuality, 0, 0, 1, 1); + + CBConnection = new QCheckBox(GBOptions); + CBConnection->setObjectName(QString::fromUtf8("CBConnection")); + + gridLayout->addWidget(CBConnection, 0, 1, 1, 1); + + CBDiametre = new QCheckBox(GBOptions); + CBDiametre->setObjectName(QString::fromUtf8("CBDiametre")); + + gridLayout->addWidget(CBDiametre, 1, 0, 1, 1); + + CBBlockSize = new QCheckBox(GBOptions); + CBBlockSize->setObjectName(QString::fromUtf8("CBBlockSize")); + + gridLayout->addWidget(CBBlockSize, 1, 1, 1, 1); + + CBEntanglement = new QCheckBox(GBOptions); + CBEntanglement->setObjectName(QString::fromUtf8("CBEntanglement")); + + gridLayout->addWidget(CBEntanglement, 2, 0, 1, 2); + + + gridLayout_2->addWidget(GBOptions, 0, 0, 2, 2); + + GroupButtons = new QGroupBox(IterInfo); + GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); + gridLayout1 = new QGridLayout(GroupButtons); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GroupButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + buttonHelp->setAutoDefault(false); + + gridLayout1->addWidget(buttonHelp, 0, 4, 1, 1); + + buttonApply = new QPushButton(GroupButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + buttonApply->setAutoDefault(false); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GroupButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + buttonOk->setAutoDefault(false); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + buttonCancel = new QPushButton(GroupButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + buttonCancel->setAutoDefault(false); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + + gridLayout_2->addWidget(GroupButtons, 2, 0, 1, 2); + + + retranslateUi(IterInfo); + + QMetaObject::connectSlotsByName(IterInfo); + } // setupUi + + void retranslateUi(QDialog *IterInfo) + { + IterInfo->setWindowTitle(QApplication::translate("IterInfo", "Information on a mesh", 0, QApplication::UnicodeUTF8)); + GBOptions->setTitle(QApplication::translate("IterInfo", "Options", 0, QApplication::UnicodeUTF8)); + CBQuality->setText(QApplication::translate("IterInfo", "Quality", 0, QApplication::UnicodeUTF8)); + CBConnection->setText(QApplication::translate("IterInfo", "Connection", 0, QApplication::UnicodeUTF8)); + CBDiametre->setText(QApplication::translate("IterInfo", "Diametre", 0, QApplication::UnicodeUTF8)); + CBBlockSize->setText(QApplication::translate("IterInfo", "Group size", 0, QApplication::UnicodeUTF8)); + CBEntanglement->setText(QApplication::translate("IterInfo", "Entanglement", 0, QApplication::UnicodeUTF8)); + GroupButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("IterInfo", "Help", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("IterInfo", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("IterInfo", "OK", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("IterInfo", "Cancel", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class IterInfo: public Ui_IterInfo {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // ITERINFO_H diff --git a/src/HOMARDGUI/IterInfo.ui b/src/HOMARDGUI/IterInfo.ui new file mode 100644 index 00000000..04b2664a --- /dev/null +++ b/src/HOMARDGUI/IterInfo.ui @@ -0,0 +1,129 @@ + + + IterInfo + + + + 0 + 0 + 420 + 220 + + + + + 0 + 0 + + + + Information on a mesh + + + true + + + + + + Options + + + + + + Quality + + + + + + + Connection + + + + + + + Diametre + + + + + + + Group size + + + + + + + Entanglement + + + + + + + + + + + + + + 9 + + + 6 + + + + + Help + + + false + + + + + + + Apply + + + false + + + + + + + OK + + + false + + + + + + + Cancel + + + false + + + + + + + + + + + diff --git a/src/HOMARDGUI/Makefile.am b/src/HOMARDGUI/Makefile.am index ae5f5bc7..5eab8cfa 100644 --- a/src/HOMARDGUI/Makefile.am +++ b/src/HOMARDGUI/Makefile.am @@ -45,6 +45,10 @@ salomeinclude_HEADERS = \ MonCreateIteration.h \ CreateIteration.h \ MonEditIteration.h \ + MonMeshInfo.h \ + MeshInfo.h \ + MonIterInfo.h \ + IterInfo.h \ HOMARDGUI.h \ HOMARDGUI_Utils.h \ EditFile.h \ @@ -59,19 +63,21 @@ dist_libHOMARD_la_SOURCES = \ HOMARDGUI.cxx \ HOMARDGUI_Utils.cxx \ MonCreateBoundaryAn.cxx \ - MonEditBoundaryAn.cxx \ + MonEditBoundaryAn.cxx \ MonCreateBoundaryDi.cxx \ - MonEditBoundaryDi.cxx \ + MonEditBoundaryDi.cxx \ MonCreateCase.cxx \ MonEditCase.cxx \ MonCreateHypothesis.cxx \ MonEditHypothesis.cxx \ - MonCreateListGroup.cxx \ - MonEditListGroup.cxx \ + MonCreateListGroup.cxx \ + MonEditListGroup.cxx \ MonCreateIteration.cxx \ MonEditIteration.cxx \ MonCreateZone.cxx \ MonEditZone.cxx \ + MonMeshInfo.cxx \ + MonIterInfo.cxx \ MonEditFile.cxx \ HomardQtCommun.cxx @@ -92,6 +98,8 @@ MOC_FILES = \ MonEditListGroup_moc.cxx \ MonCreateIteration_moc.cxx \ MonEditIteration_moc.cxx \ + MonMeshInfo_moc.cxx \ + MonIterInfo_moc.cxx \ MonEditFile_moc.cxx nodist_libHOMARD_la_SOURCES = $(MOC_FILES) @@ -133,11 +141,13 @@ nodist_salomeres_DATA = \ UI_FILES = \ CreateBoundaryAn.ui \ CreateBoundaryDi.ui \ -CreateCase.ui \ +CreateCase.ui \ CreateHypothesis.ui \ -CreateIteration.ui \ -CreateListGroup.ui \ -CreateZone.ui \ +CreateIteration.ui \ +CreateListGroup.ui \ +CreateZone.ui \ +MeshInfo.ui \ +IterInfo.ui \ EditFile.ui EXTRA_DIST += $(UI_FILES) diff --git a/src/HOMARDGUI/MeshInfo.h b/src/HOMARDGUI/MeshInfo.h new file mode 100644 index 00000000..95dc88bf --- /dev/null +++ b/src/HOMARDGUI/MeshInfo.h @@ -0,0 +1,270 @@ +/******************************************************************************** +** Form generated from reading UI file 'MeshInfo.ui' +** +** Created: Tue Feb 19 10:05:35 2013 +** by: Qt User Interface Compiler version 4.6.3 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef MESHINFO_H +#define MESHINFO_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MeshInfo +{ +public: + QGridLayout *gridLayout_2; + QHBoxLayout *hboxLayout; + QLabel *Name; + QLineEdit *LECaseName; + QHBoxLayout *hboxLayout1; + QLabel *Directory; + QPushButton *PushDir; + QLineEdit *LEDirName; + QSpacerItem *spacerItem; + QHBoxLayout *hboxLayout2; + QLabel *Mesh_2; + QPushButton *PushFichier; + QLineEdit *LEFileName; + QSpacerItem *spacerItem1; + QGroupBox *GBOptions; + QGridLayout *gridLayout; + QCheckBox *CBQuality; + QCheckBox *CBConnection; + QCheckBox *CBDiametre; + QCheckBox *CBBlockSize; + QCheckBox *CBEntanglement; + QSpacerItem *verticalSpacer; + QGroupBox *GroupButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonApply; + QPushButton *buttonOk; + QPushButton *buttonCancel; + QSpacerItem *spacer_2; + + void setupUi(QDialog *MeshInfo) + { + if (MeshInfo->objectName().isEmpty()) + MeshInfo->setObjectName(QString::fromUtf8("MeshInfo")); + MeshInfo->resize(536, 372); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(MeshInfo->sizePolicy().hasHeightForWidth()); + MeshInfo->setSizePolicy(sizePolicy); + MeshInfo->setAutoFillBackground(true); + gridLayout_2 = new QGridLayout(MeshInfo); + gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); + hboxLayout = new QHBoxLayout(); +#ifndef Q_OS_MAC + hboxLayout->setSpacing(6); +#endif +#ifndef Q_OS_MAC + hboxLayout->setContentsMargins(0, 0, 0, 0); +#endif + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + Name = new QLabel(MeshInfo); + Name->setObjectName(QString::fromUtf8("Name")); + + hboxLayout->addWidget(Name); + + LECaseName = new QLineEdit(MeshInfo); + LECaseName->setObjectName(QString::fromUtf8("LECaseName")); + LECaseName->setMinimumSize(QSize(382, 21)); + + hboxLayout->addWidget(LECaseName); + + + gridLayout_2->addLayout(hboxLayout, 0, 0, 1, 2); + + hboxLayout1 = new QHBoxLayout(); +#ifndef Q_OS_MAC + hboxLayout1->setSpacing(6); +#endif + hboxLayout1->setContentsMargins(0, 0, 0, 0); + hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); + Directory = new QLabel(MeshInfo); + Directory->setObjectName(QString::fromUtf8("Directory")); + + hboxLayout1->addWidget(Directory); + + PushDir = new QPushButton(MeshInfo); + PushDir->setObjectName(QString::fromUtf8("PushDir")); + PushDir->setAutoDefault(false); + + hboxLayout1->addWidget(PushDir); + + LEDirName = new QLineEdit(MeshInfo); + LEDirName->setObjectName(QString::fromUtf8("LEDirName")); + LEDirName->setMinimumSize(QSize(382, 21)); + + hboxLayout1->addWidget(LEDirName); + + + gridLayout_2->addLayout(hboxLayout1, 1, 0, 1, 2); + + spacerItem = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); + + gridLayout_2->addItem(spacerItem, 2, 0, 1, 1); + + hboxLayout2 = new QHBoxLayout(); +#ifndef Q_OS_MAC + hboxLayout2->setSpacing(6); +#endif + hboxLayout2->setContentsMargins(0, 0, 0, 0); + hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); + Mesh_2 = new QLabel(MeshInfo); + Mesh_2->setObjectName(QString::fromUtf8("Mesh_2")); + + hboxLayout2->addWidget(Mesh_2); + + PushFichier = new QPushButton(MeshInfo); + PushFichier->setObjectName(QString::fromUtf8("PushFichier")); + PushFichier->setAutoDefault(false); + + hboxLayout2->addWidget(PushFichier); + + LEFileName = new QLineEdit(MeshInfo); + LEFileName->setObjectName(QString::fromUtf8("LEFileName")); + LEFileName->setMinimumSize(QSize(382, 21)); + + hboxLayout2->addWidget(LEFileName); + + + gridLayout_2->addLayout(hboxLayout2, 3, 0, 1, 2); + + spacerItem1 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding); + + gridLayout_2->addItem(spacerItem1, 4, 0, 1, 1); + + GBOptions = new QGroupBox(MeshInfo); + GBOptions->setObjectName(QString::fromUtf8("GBOptions")); + gridLayout = new QGridLayout(GBOptions); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + CBQuality = new QCheckBox(GBOptions); + CBQuality->setObjectName(QString::fromUtf8("CBQuality")); + + gridLayout->addWidget(CBQuality, 0, 0, 1, 1); + + CBConnection = new QCheckBox(GBOptions); + CBConnection->setObjectName(QString::fromUtf8("CBConnection")); + + gridLayout->addWidget(CBConnection, 0, 1, 1, 1); + + CBDiametre = new QCheckBox(GBOptions); + CBDiametre->setObjectName(QString::fromUtf8("CBDiametre")); + + gridLayout->addWidget(CBDiametre, 1, 0, 1, 1); + + CBBlockSize = new QCheckBox(GBOptions); + CBBlockSize->setObjectName(QString::fromUtf8("CBBlockSize")); + + gridLayout->addWidget(CBBlockSize, 1, 1, 1, 1); + + CBEntanglement = new QCheckBox(GBOptions); + CBEntanglement->setObjectName(QString::fromUtf8("CBEntanglement")); + + gridLayout->addWidget(CBEntanglement, 2, 0, 1, 2); + + + gridLayout_2->addWidget(GBOptions, 5, 0, 1, 1); + + verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + + gridLayout_2->addItem(verticalSpacer, 6, 0, 1, 1); + + GroupButtons = new QGroupBox(MeshInfo); + GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); + gridLayout1 = new QGridLayout(GroupButtons); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GroupButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + buttonHelp->setAutoDefault(false); + + gridLayout1->addWidget(buttonHelp, 0, 4, 1, 1); + + buttonApply = new QPushButton(GroupButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + buttonApply->setAutoDefault(false); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GroupButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + buttonOk->setAutoDefault(false); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + buttonCancel = new QPushButton(GroupButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + buttonCancel->setAutoDefault(false); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + + gridLayout_2->addWidget(GroupButtons, 7, 0, 1, 1); + + spacer_2 = new QSpacerItem(128, 25, QSizePolicy::Fixed, QSizePolicy::Minimum); + + gridLayout_2->addItem(spacer_2, 7, 1, 1, 1); + + + retranslateUi(MeshInfo); + + QMetaObject::connectSlotsByName(MeshInfo); + } // setupUi + + void retranslateUi(QDialog *MeshInfo) + { + MeshInfo->setWindowTitle(QApplication::translate("MeshInfo", "Information on a mesh", 0, QApplication::UnicodeUTF8)); + Name->setText(QApplication::translate("MeshInfo", "Name", 0, QApplication::UnicodeUTF8)); + Directory->setText(QApplication::translate("MeshInfo", "Directory", 0, QApplication::UnicodeUTF8)); + PushDir->setText(QString()); + Mesh_2->setText(QApplication::translate("MeshInfo", "Mesh", 0, QApplication::UnicodeUTF8)); + PushFichier->setText(QString()); + GBOptions->setTitle(QApplication::translate("MeshInfo", "Options", 0, QApplication::UnicodeUTF8)); + CBQuality->setText(QApplication::translate("MeshInfo", "Quality", 0, QApplication::UnicodeUTF8)); + CBConnection->setText(QApplication::translate("MeshInfo", "Connection", 0, QApplication::UnicodeUTF8)); + CBDiametre->setText(QApplication::translate("MeshInfo", "Diametre", 0, QApplication::UnicodeUTF8)); + CBBlockSize->setText(QApplication::translate("MeshInfo", "Group size", 0, QApplication::UnicodeUTF8)); + CBEntanglement->setText(QApplication::translate("MeshInfo", "Entanglement", 0, QApplication::UnicodeUTF8)); + GroupButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("MeshInfo", "Help", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("MeshInfo", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("MeshInfo", "OK", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("MeshInfo", "Cancel", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class MeshInfo: public Ui_MeshInfo {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // MESHINFO_H diff --git a/src/HOMARDGUI/MeshInfo.ui b/src/HOMARDGUI/MeshInfo.ui new file mode 100644 index 00000000..c3e55aa0 --- /dev/null +++ b/src/HOMARDGUI/MeshInfo.ui @@ -0,0 +1,285 @@ + + + MeshInfo + + + + 0 + 0 + 536 + 372 + + + + + 0 + 0 + + + + Information on a mesh + + + true + + + + + + 6 + + + 0 + + + + + Name + + + + + + + + 382 + 21 + + + + + + + + + + 6 + + + 0 + + + + + Directory + + + + + + + + + + false + + + + + + + + 382 + 21 + + + + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + 6 + + + 0 + + + + + Mesh + + + + + + + + + + false + + + + + + + + 382 + 21 + + + + + + + + + + Qt::Vertical + + + + 20 + 1 + + + + + + + + Options + + + + + + Quality + + + + + + + Connection + + + + + + + Diametre + + + + + + + Group size + + + + + + + Entanglement + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 9 + + + 6 + + + + + Help + + + false + + + + + + + Apply + + + false + + + + + + + OK + + + false + + + + + + + Cancel + + + false + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 128 + 25 + + + + + + + + + diff --git a/src/HOMARDGUI/MonIterInfo.cxx b/src/HOMARDGUI/MonIterInfo.cxx new file mode 100644 index 00000000..4709685e --- /dev/null +++ b/src/HOMARDGUI/MonIterInfo.cxx @@ -0,0 +1,196 @@ +// Copyright (C) 2011-2012 CEA/DEN, EDF R&D +// +// 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. +// +// 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 +// + +using namespace std; + +#include "MonIterInfo.h" + +#include +#include +#include +#include + +#include "SalomeApp_Tools.h" +#include "HOMARDGUI_Utils.h" +#include "HomardQtCommun.h" +#include + + +// ----------------------------------------------------------------------------------------- +MonIterInfo::MonIterInfo(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen, QString IterName) +// ----------------------------------------------------------------------------------------- +/* Constructs a MonIterInfo + * Inherits from CasHomard + * Sets attributes to default values + */ + : + Ui_IterInfo(), + _IterName(IterName), + _aCaseName(""), + _BlockSize(0), + _Connection(0), + _Diametre(0), + _Entanglement(0), + _Quality(0), + _Option(-1) +{ + MESSAGE("appel de _duplicate"); + _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); + setupUi(this); + setModal(modal); + InitConnect(); + + adjustSize(); +} + +// ------------------------------------------------------------------------ +MonIterInfo::~MonIterInfo() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void MonIterInfo::InitConnect() +// ------------------------------------------------------------------------ +{ + MESSAGE("InitConnect"); + connect( CBBlockSize, SIGNAL(stateChanged(int)), this, SLOT(SetBlockSize())); + connect( CBConnection, SIGNAL(stateChanged(int)), this, SLOT(SetConnection())); + connect( CBDiametre, SIGNAL(stateChanged(int)), this, SLOT(SetDiametre())); + connect( CBEntanglement, SIGNAL(stateChanged(int)), this, SLOT(SetEntanglement())); + connect( CBQuality, SIGNAL(stateChanged(int)), this, SLOT(SetQuality())); + + connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); +} +// ------------------------------- +bool MonIterInfo::PushOnApply() +// -------------------------------- +{ + MESSAGE("PushOnApply"); + + // Au moins une option a ete choisie + if ( ( _Quality == 0 ) and ( _Diametre == 0 ) and ( _Connection == 0 ) and ( _BlockSize == 0 ) and ( _Entanglement == 0 ) ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MESH_INFO_1") ); + return false; + } + + // Recuperation de l'iteration + aIter = _myHomardGen->GetIteration(_IterName.toStdString().c_str()) ; + + // Lancement de l'analyse + try + { + aIter->MeshInfoOption( _Quality, _Diametre, _Connection, _BlockSize, _Entanglement, _Option ); + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QString(CORBA::string_dup(S_ex.details.text)) ); + return false; + } + + // Le bilan de l'analyse a afficher + QString aFileName = aIter->GetFileInfo() ; +// // Creation de l'objet fichier QT associe +// QFile file( aFileName ); +// // Ouverture +// bool bOpen = file.open( QIODevice::ReadOnly | QIODevice::Text ) ; +// // +// if ( bOpen ) +// { +// Ui_EditFile() ; +// // Lecture +// // Remarque : il serait plus clair de tout lire d'un coup mais cela ne marche pas ! +// // alors on fait ligne par ligne et on cumule en ajoutant un saut de ligne. +// QTextStream stream( &file ); +// QString tout; +// while ( !stream.atEnd() ) +// { +// tout = tout + stream.readLine() + "\n" ; +// } +// QTBEditFile->setPlainText( tout ); +// QMessageBox::information( 0, QObject::tr("HOM_MESH_INFO_0"), +// tout ); +// } + + // Message simple en attendant de savoir faire + QMessageBox::information( 0, QObject::tr("HOM_MESH_INFO_0"), + QObject::tr("HOM_MESH_INFO_2")+aFileName ); + + HOMARD_UTILS::updateObjBrowser(); + return true; +} +// --------------------------- +void MonIterInfo::PushOnOK() +// --------------------------- +{ + bool bOK = PushOnApply(); + if ( bOK ) this->close(); +} +//------------------------------ +void MonIterInfo::PushOnHelp() +//------------------------------- +{ + HOMARD_UTILS::PushOnHelp(QString("gui_mesh_info.html")); +} +// ------------------------------------------------------------------------ +void MonIterInfo::SetBlockSize() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetBlockSize "); + if ( CBBlockSize->isChecked() ) { _BlockSize = 1 ; } + else { _BlockSize = 0 ; } +} +// ------------------------------------------------------------------------ +void MonIterInfo::SetConnection() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetConnection "); + if ( CBConnection->isChecked() ) { _Connection = 1 ; } + else { _Connection = 0 ; } +} +// ------------------------------------------------------------------------ +void MonIterInfo::SetDiametre() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetDiametre "); + if ( CBDiametre->isChecked() ) { _Diametre = 1 ; } + else { _Diametre = 0 ; } +} +// ------------------------------------------------------------------------ +void MonIterInfo::SetEntanglement() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetEntanglement "); + if ( CBEntanglement->isChecked() ) { _Entanglement = 1 ; } + else { _Entanglement = 0 ; } +} +// ------------------------------------------------------------------------ +void MonIterInfo::SetQuality() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetQuality "); + if ( CBQuality->isChecked() ) { _Quality = 1 ; } + else { _Quality = 0 ; } +} diff --git a/src/HOMARDGUI/MonIterInfo.h b/src/HOMARDGUI/MonIterInfo.h new file mode 100644 index 00000000..a0d21d1d --- /dev/null +++ b/src/HOMARDGUI/MonIterInfo.h @@ -0,0 +1,77 @@ +// Copyright (C) 2011-2012 CEA/DEN, EDF R&D +// +// 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. +// +// 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 +// + +#ifndef MON_ITERINFO_H +#define MON_ITERINFO_H + +#include +#include + +#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(HOMARD_Gen) +#include CORBA_CLIENT_HEADER(HOMARD_Cas) + +#include +#include +#include +#include "EditFile.h" + +class QListBox; + +class MonIterInfo : public QDialog, public Ui_IterInfo +{ + Q_OBJECT + +public: + MonIterInfo( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen, QString IterName); + ~MonIterInfo(); + +protected : + MonIterInfo( QWidget* parent, HOMARD::HOMARD_Gen_var myHomardGen, QString IterName ); + + QString _IterName; + QString _aCaseName; + + int _BlockSize; + int _Connection; + int _Diametre; + int _Entanglement; + int _Quality; + int _Option; + + HOMARD::HOMARD_Iteration_var aIter ; + HOMARD::HOMARD_Gen_var _myHomardGen; + + virtual void InitConnect(); + +public slots: + + virtual void SetBlockSize(); + virtual void SetConnection(); + virtual void SetEntanglement(); + virtual void SetDiametre(); + virtual void SetQuality(); + + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + +}; + +#endif // MON_ITERINFO_H diff --git a/src/HOMARDGUI/MonMeshInfo.cxx b/src/HOMARDGUI/MonMeshInfo.cxx new file mode 100644 index 00000000..ffffad6e --- /dev/null +++ b/src/HOMARDGUI/MonMeshInfo.cxx @@ -0,0 +1,263 @@ +// Copyright (C) 2011-2012 CEA/DEN, EDF R&D +// +// 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. +// +// 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 +// + +using namespace std; + +#include "MonMeshInfo.h" + +#include +#include + +#include "SalomeApp_Tools.h" +#include "HOMARDGUI_Utils.h" +#include "HomardQtCommun.h" +#include + + +// ----------------------------------------------------------------------------------------- +MonMeshInfo::MonMeshInfo(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen) +// ----------------------------------------------------------------------------------------- +/* Constructs a MonMeshInfo + * Inherits from CasHomard + * Sets attributes to default values + */ + : + Ui_MeshInfo(), + _aCaseName(""),_aDirName(""), + _BlockSize(0), + _Connection(0), + _Diametre(0), + _Entanglement(0), + _Quality(0) +{ + _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); + setupUi(this); + setModal(modal); + InitConnect(); + + SetNewCaseName() ; + adjustSize(); +} + +// ------------------------------------------------------------------------ +MonMeshInfo::~MonMeshInfo() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void MonMeshInfo::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( LECaseName, SIGNAL(textChanged(QString)), this, SLOT(CaseNameChanged())); + connect( PushDir, SIGNAL(pressed()), this, SLOT(SetDirName())); + connect( PushFichier, SIGNAL(pressed()), this, SLOT(SetFileName())); + + connect( CBBlockSize, SIGNAL(stateChanged(int)), this, SLOT(SetBlockSize())); + connect( CBConnection, SIGNAL(stateChanged(int)), this, SLOT(SetConnection())); + connect( CBDiametre, SIGNAL(stateChanged(int)), this, SLOT(SetDiametre())); + connect( CBEntanglement, SIGNAL(stateChanged(int)), this, SLOT(SetEntanglement())); + connect( CBQuality, SIGNAL(stateChanged(int)), this, SLOT(SetQuality())); + + connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); +} +// ------------------------------- +bool MonMeshInfo::PushOnApply() +// -------------------------------- +{ + MESSAGE("PushOnApply"); + QString aCaseName=LECaseName->text().trimmed(); + if ( aCaseName == "" ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_NAME") ); + return false; + } + + QString aDirName=LEDirName->text().trimmed(); + if (aDirName == QString("")) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_DIRECTORY_1") ); + return false; + } + if ((aDirName != _aDirName) and (_myHomardGen->VerifieDir( aDirName.toStdString().c_str()) == false)) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_DIRECTORY_2") ); + return false; + } + if (chdir(aDirName.toStdString().c_str()) != 0) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_DIRECTORY_3") ); + return false; + } + + QString aFileName=LEFileName->text().trimmed(); + if (aFileName ==QString("")) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_MESH") ); + return false; + } + + QString aMeshName = HOMARD_QT_COMMUN::LireNomMaillage(aFileName); + if (aMeshName == "" ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_2") ); + return false; + } + if ( ( _Quality == 0 ) and ( _Diametre == 0 ) and ( _Connection == 0 ) and ( _BlockSize == 0 ) and ( _Entanglement == 0 ) ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MESH_INFO") ); + return false; + } + + if (aCaseName != _aCaseName ) + { + _aCaseName = aCaseName; + try + { + _myHomardGen->MeshInfo( \ + CORBA::string_dup(_aCaseName.toStdString().c_str()), \ + CORBA::string_dup(aMeshName.toStdString().c_str()), \ + CORBA::string_dup(aFileName.toStdString().c_str()), \ + CORBA::string_dup(aDirName.toStdString().c_str()), \ + _Quality, _Diametre, _Connection, _BlockSize, _Entanglement ); + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QString(CORBA::string_dup(S_ex.details.text)) ); + return false; + } + } + + HOMARD_UTILS::updateObjBrowser(); + return true; +} +// --------------------------- +void MonMeshInfo::PushOnOK() +// --------------------------- +{ + bool bOK = PushOnApply(); + if ( bOK ) this->close(); +} +//------------------------------ +void MonMeshInfo::PushOnHelp() +//------------------------------- +{ + HOMARD_UTILS::PushOnHelp(QString("gui_create_case.html")); +} +// --------------------------------- +void MonMeshInfo::SetNewCaseName() +// ------------------------------ +{ + HOMARD::listeCases_var MyCases = _myHomardGen->GetAllCasesName(); + int num = 0; QString aCaseName=""; + while (aCaseName=="" ) + { + aCaseName.setNum(num+1) ; + aCaseName.insert(0, QString("Case_")) ; + for ( int i=0; ilength(); i++) + { + if ( aCaseName == QString((MyCases)[i])) + { + num=num+1; + aCaseName=""; + break; + } + } + } + LECaseName->clear() ; + LECaseName->insert(aCaseName); +} + +// ------------------------------------------------------------------------ +void MonMeshInfo::SetDirName() +// ------------------------------------------------------------------------ +{ + QString aDirName=QFileDialog::getExistingDirectory (); + if (!(aDirName.isEmpty()))LEDirName->setText(aDirName); +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetFileName() +// ------------------------------------------------------------------------ +{ + QString fileName0 = LEFileName->text().trimmed(); + QString fileName = HOMARD_QT_COMMUN::PushNomFichier(); + if (fileName.isEmpty()) fileName = fileName0 ; + LEFileName->setText(fileName); +} +// ------------------------------------------------------------------------ +void MonMeshInfo::CaseNameChanged() +// ------------------------------------------------------------------------ +{ + if (_aCaseName != LECaseName->text().trimmed()) + { + LEFileName->setReadOnly(false); + PushFichier->show(); + } +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetBlockSize() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetBlockSize "); + if ( CBBlockSize->isChecked() ) { _BlockSize = 1 ; } + else { _BlockSize = 0 ; } +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetConnection() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetConnection "); + if ( CBConnection->isChecked() ) { _Connection = 1 ; } + else { _Connection = 0 ; } +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetDiametre() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetDiametre "); + if ( CBDiametre->isChecked() ) { _Diametre = 1 ; } + else { _Diametre = 0 ; } +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetEntanglement() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetEntanglement "); + if ( CBEntanglement->isChecked() ) { _Entanglement = 1 ; } + else { _Entanglement = 0 ; } +} +// ------------------------------------------------------------------------ +void MonMeshInfo::SetQuality() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetQuality "); + if ( CBQuality->isChecked() ) { _Quality = 1 ; } + else { _Quality = 0 ; } +} diff --git a/src/HOMARDGUI/MonMeshInfo.h b/src/HOMARDGUI/MonMeshInfo.h new file mode 100644 index 00000000..5892ba51 --- /dev/null +++ b/src/HOMARDGUI/MonMeshInfo.h @@ -0,0 +1,74 @@ +// Copyright (C) 2011-2012 CEA/DEN, EDF R&D +// +// 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. +// +// 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 +// + +#ifndef MON_MESHINFO_H +#define MON_MESHINFO_H + +#include +#include + +#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(HOMARD_Gen) +#include CORBA_CLIENT_HEADER(HOMARD_Cas) + +#include +#include + +class MonMeshInfo : public QDialog, public Ui_MeshInfo +{ + Q_OBJECT + +public: + MonMeshInfo( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen); + ~MonMeshInfo(); + +protected : + QString _aCaseName; + QString _aDirName; + + int _BlockSize; + int _Connection; + int _Diametre; + int _Entanglement; + int _Quality; + + HOMARD::HOMARD_Cas_var aCase ; + HOMARD::HOMARD_Gen_var _myHomardGen; + + virtual void InitConnect(); + virtual void SetNewCaseName(); + +public slots: + virtual void SetDirName(); + virtual void SetFileName(); + + virtual void SetBlockSize(); + virtual void SetConnection(); + virtual void SetEntanglement(); + virtual void SetDiametre(); + virtual void SetQuality(); + + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + + virtual void CaseNameChanged(); +}; + +#endif // MON_MESHINFO_H diff --git a/src/HOMARD_I/HOMARD_Cas_i.cxx b/src/HOMARD_I/HOMARD_Cas_i.cxx index 8e456ec3..ec75d436 100755 --- a/src/HOMARD_I/HOMARD_Cas_i.cxx +++ b/src/HOMARD_I/HOMARD_Cas_i.cxx @@ -185,7 +185,6 @@ void HOMARD_Cas_i::SetGroups( const HOMARD::ListGroupType& ListGroup ) { ListString.push_back(std::string(ListGroup[i])); } - myHomardCas->SetGroups( ListString ); } //============================================================================= @@ -259,6 +258,26 @@ CORBA::Long HOMARD_Cas_i::GetPyram() return myHomardCas->GetPyram(); } //============================================================================= +void HOMARD_Cas_i::MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte) +{ + MESSAGE ( "MeshInfo : information sur le maillage initial du cas" ); + ASSERT( myHomardCas ); +// +// Nom de l'iteration + char* IterName = GetIter0Name() ; + CORBA::Long etatMenage = -1 ; + CORBA::Long modeHOMARD = 7 ; + CORBA::Long Option = 1 ; + if ( Qual != 0 ) { modeHOMARD = modeHOMARD*5 ; } + if ( Diam != 0 ) { modeHOMARD = modeHOMARD*19 ; } + if ( Conn != 0 ) { modeHOMARD = modeHOMARD*11 ; } + if ( Tail != 0 ) { modeHOMARD = modeHOMARD*13 ; } + if ( Inte != 0 ) { modeHOMARD = modeHOMARD*3 ; } + CORBA::Long codret = _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option) ; + MESSAGE ( "MeshInfo : codret = " << codret ); + return ; +} +//============================================================================= //============================================================================= // Liens avec les autres structures //============================================================================= diff --git a/src/HOMARD_I/HOMARD_Cas_i.hxx b/src/HOMARD_I/HOMARD_Cas_i.hxx index 740e2eef..27355f2a 100644 --- a/src/HOMARD_I/HOMARD_Cas_i.hxx +++ b/src/HOMARD_I/HOMARD_Cas_i.hxx @@ -85,6 +85,8 @@ public: void SetPyram( CORBA::Long Pyram ); CORBA::Long GetPyram(); + void MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte); + // Liens avec les autres structures char* GetIter0Name(); HOMARD::HOMARD_Iteration_ptr GetIter0() ; diff --git a/src/HOMARD_I/HOMARD_Gen_i.cxx b/src/HOMARD_I/HOMARD_Gen_i.cxx index 3f54b8d5..6aba5456 100755 --- a/src/HOMARD_I/HOMARD_Gen_i.cxx +++ b/src/HOMARD_I/HOMARD_Gen_i.cxx @@ -499,29 +499,6 @@ void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName) }; } //============================================================================= -void HOMARD_Gen_i::InvalideZone(const char* ZoneName) -{ - MESSAGE( "InvalideZone : ZoneName = " << ZoneName ); - HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName]; - if (CORBA::is_nil(myZone)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Zone "; - throw SALOME::SALOME_Exception(es); - return ; - }; - HOMARD::listeHypo* maListe = myZone->GetHypo(); - int numberOfHypo = maListe->length(); - MESSAGE( ".. numberOfHypo = " << numberOfHypo ); - for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++) - { - std::string nomHypo = std::string((*maListe)[NumeHypo]); - MESSAGE( ".. nomHypo = " << nomHypo ); - InvalideHypo(nomHypo.c_str()); - } -} -//============================================================================= void HOMARD_Gen_i::InvalideHypo(const char* nomHypo) { MESSAGE( "InvalideHypo : nomHypo = " << nomHypo ); @@ -597,11 +574,12 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter) throw SALOME::SALOME_Exception(es); return ; }; - const char* dirParent = myCase->GetDirName(); + const char* dirCase = myCase->GetDirName(); const char* nomDir = myIteration->GetDirName(); const char* nomFichier = myIteration->GetMeshFile(); - std::string commande= "rm -rf " + std::string(dirParent) + "/" + std::string(nomDir); + std::string commande= "rm -rf " + std::string(dirCase) + "/" + std::string(nomDir); commande = commande + ";rm -rf " + std::string(nomFichier); + MESSAGE ( "commande = " << commande ); if ((system(commande.c_str())) != 0) { SALOME::ExceptionStruct es; @@ -617,6 +595,85 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter) } //============================================================================= +void HOMARD_Gen_i::InvalideIterInfo(const char* nomIter) +{ + MESSAGE("InvalideIterInfo : nomIter = " << nomIter); + HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter]; + if (CORBA::is_nil(myIteration)) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid Iteration "; + throw SALOME::SALOME_Exception(es); + return ; + }; + + SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration))); + SALOMEDS::ChildIterator_var aIter = myCurrentStudy->NewChildIterator(aIterSO); + for (; aIter->More(); aIter->Next()) + { + SALOMEDS::SObject_var so = aIter->Value(); + SALOMEDS::GenericAttribute_var anAttr; + if (!so->FindAttribute(anAttr, "AttributeComment")) continue; + SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr); + std::string value (aCommentAttr->Value()); +/* MESSAGE("... value = " << value);*/ + if( (value == std::string("logInfo")) or ( value == std::string("SummaryInfo")) ) + { + SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); + aStudyBuilder->RemoveObject(so); + } + } + + const char * nomCas = myIteration->GetCaseName(); + HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas]; + if (CORBA::is_nil(myCase)) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid Case Context "; + throw SALOME::SALOME_Exception(es); + return ; + }; + const char* dirCase = myCase->GetDirName(); + const char* nomDir = myIteration->GetDirName(); + std::string commande = "rm -f " + std::string(dirCase) + "/" + std::string(nomDir) + "/info* " ; + commande += std::string(dirCase) + "/" + std::string(nomDir) + "/Liste.*info" ; +/* MESSAGE ( "commande = " << commande );*/ + if ((system(commande.c_str())) != 0) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Menage du repertoire de calcul impossible" ; + throw SALOME::SALOME_Exception(es); + return ; + } + +} +//============================================================================= +void HOMARD_Gen_i::InvalideZone(const char* ZoneName) +{ + MESSAGE( "InvalideZone : ZoneName = " << ZoneName ); + HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName]; + if (CORBA::is_nil(myZone)) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid Zone "; + throw SALOME::SALOME_Exception(es); + return ; + }; + HOMARD::listeHypo* maListe = myZone->GetHypo(); + int numberOfHypo = maListe->length(); + MESSAGE( ".. numberOfHypo = " << numberOfHypo ); + for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++) + { + std::string nomHypo = std::string((*maListe)[NumeHypo]); + MESSAGE( ".. nomHypo = " << nomHypo ); + InvalideHypo(nomHypo.c_str()); + } +} +//============================================================================= //============================================================================= // //============================================================================= @@ -909,6 +966,28 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary) //============================================================================= //============================================================================= +//============================================================================= +//============================================================================= +// Informations +//============================================================================= +//============================================================================= +void HOMARD_Gen_i::MeshInfo(const char* nomCas, const char* MeshName, const char* MeshFile, const char* DirName, CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte) +{ + MESSAGE ( "MeshInfo : nomCas = " << nomCas << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile ); + MESSAGE ( "Qual = " << Qual << ", Diam = " << Diam << ", Conn = " << Conn << ", Tail = " << Tail << ", Inte = " << Inte ); + IsValidStudy () ; + +// Creation du cas + HOMARD::HOMARD_Cas_ptr myCase = CreateCase(nomCas, MeshName, MeshFile) ; + myCase->SetDirName(DirName) ; +// Analyse + myCase->MeshInfo(Qual, Diam, Conn, Tail, Inte) ; + + return ; +} +//============================================================================= +//============================================================================= + //============================================================================= //============================================================================= // Recuperation des structures par le contexte @@ -1042,7 +1121,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* HOMARD::HOMARD_Iteration_var anIter = newIteration(); myContextMap[GetCurrentStudyID()]._mesIterations[NomIteration] = anIter; std::ostringstream DirName; - DirName << "I_00"; + DirName << "I00"; anIter->SetDirName(DirName.str().c_str()); anIter->SetName(NomIteration.c_str()); @@ -1413,20 +1492,215 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDiskWithHole(const char* ZoneNam //============================================================================= //============================================================================= -// Calcul d'une iteration +// Traitement d'une iteration +// etatMenage = 1 : destruction du repertoire d'execution +// modeHOMARD = 1 : adaptation +// != 1 : information avec les options modeHOMARD +// Option >0 : appel depuis python +// <0 : appel depuis GUI //============================================================================= //============================================================================= -CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMenage) +CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMenage, CORBA::Long modeHOMARD, CORBA::Long Option) { - MESSAGE ( "Compute : calcul de " << NomIteration ); + MESSAGE ( "Compute : traitement de " << NomIteration << ", avec modeHOMARD = " << modeHOMARD << ", avec Option = " << Option ); + + // A. Prealable + int codret = 0; -// A. Prealable -// A.1. La base + // A.1. L'objet iteration HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIteration]; ASSERT(!CORBA::is_nil(myIteration)); -// A.2. On ne calcule pas l iteration 0 + // A.2. Numero de l'iteration + // siterp1 : numero de l'iteration a traiter + // Si adaptation : + // siter : numero de l'iteration parent, ou 0 si deja au debut mais cela ne servira pas ! + // Ou si information : + // siter = siterp1 + int NumeIter = myIteration->GetNumber(); + std::string siterp1 ; + std::stringstream saux1 ; + saux1 << NumeIter ; + siterp1 = saux1.str() ; + if (NumeIter < 10) { siterp1 = "0" + siterp1 ; } + + std::string siter ; + if ( modeHOMARD==1 ) + { + std::stringstream saux0 ; + int iaux = max(0, NumeIter-1) ; + saux0 << iaux ; + siter = saux0.str() ; + if (NumeIter < 11) { siter = "0" + siter ; } + } + else + { siter = siterp1 ; } + + // A.3. Le cas + const char* nomCas = myIteration->GetCaseName(); + HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas]; + ASSERT(!CORBA::is_nil(myCase)); + + // B. Les repertoires + // B.1. Le repertoire courant + char* nomDirWork = getenv("PWD") ; + // B.2. Le sous-repertoire de l'iteration a traiter + char* DirCompute = ComputeDir(myCase, myIteration, etatMenage); + MESSAGE( ". DirCompute = " << DirCompute ); + + // C. Le fichier des messages + // C.1. Le deroulement de l'execution de HOMARD + std::string LogFile = DirCompute ; + LogFile += "/Liste" ; + if ( modeHOMARD == 1 ) { LogFile += "." + siter + ".vers." + siterp1 ; } + LogFile += ".log" ; + MESSAGE (". LogFile = " << LogFile); + if ( modeHOMARD == 1 ) { myIteration->SetLogFile(LogFile.c_str()); } + // C.2. Le bilan de l'analyse du maillage + std::string FileInfo = DirCompute ; + FileInfo += "/" ; + if ( modeHOMARD == 1 ) { FileInfo += "apad" ; } + else + { if ( NumeIter == 0 ) { FileInfo += "info_av" ; } + else { FileInfo += "info_ap" ; } + } + FileInfo += "." + siterp1 + ".bilan" ; + myIteration->SetFileInfo(FileInfo.c_str()); + + // D. On passe dans le repertoire de l'iteration a calculer + MESSAGE ( ". On passe dans DirCompute = " << DirCompute ); + chdir(DirCompute) ; + + // E. Les donnees de l'execution HOMARD + // E.1. L'objet du texte du fichier de configuration + HomardDriver* myDriver = new HomardDriver(siter, siterp1); + myDriver->TexteInit(DirCompute, LogFile); + + // E.2. Le maillage associe a l'iteration + const char* NomMesh = myIteration->GetMeshName(); + MESSAGE ( ". NomMesh = " << NomMesh ); + const char* MeshFile = myIteration->GetMeshFile(); + MESSAGE ( ". MeshFile = " << MeshFile ); + + // E.3. Les donnees du traitement HOMARD + int iaux ; + if ( modeHOMARD == 1 ) + { + iaux = 1 ; + myDriver->TexteMaillageHOMARD( DirCompute, siterp1, iaux ) ; + myDriver->TexteMaillage(NomMesh, MeshFile, 1); + codret = ComputeAdap(myCase, myIteration, etatMenage, myDriver, Option) ; + } + else + { + InvalideIterInfo(NomIteration); + myDriver->TexteInfo( modeHOMARD, NumeIter ) ; + iaux = 0 ; + myDriver->TexteMaillageHOMARD( DirCompute, siterp1, iaux ) ; + myDriver->TexteMaillage(NomMesh, MeshFile, 0); + myDriver->CreeFichierDonn(); + } + + // E.4. Ajout des informations liees a l'eventuel suivi de frontiere + DriverTexteBoundary(myCase, myDriver) ; + + // E.5. Ecriture du texte dans le fichier + if (codret == 0) + { myDriver->CreeFichier(); } + +// G. Execution +// + int codretexec = 12 ; + if (codret == 0) + { + codretexec = myDriver->ExecuteHomard(Option); +// + MESSAGE ( "Erreur en executant HOMARD : " << codretexec ); + if ( modeHOMARD == 1 ) + { + if (codretexec == 0) { SetEtatIter(NomIteration,true); } + else { SetEtatIter(NomIteration,false); } + // GERALD -- QMESSAGE BOX + } + } + + // H. Gestion des resultats + if (codret == 0) + { + std::string Commentaire ; + // H.1. Le fichier des messages, dans tous les cas + Commentaire = "log" ; + if ( modeHOMARD == 1 ) { Commentaire += " " + siterp1 ; } + else { Commentaire += "Info" ; } + PublishFileUnderIteration(NomIteration, LogFile.c_str(), Commentaire.c_str()); + + // H.2. Si tout s'est bien passe : + if (codretexec == 0) + { + // H.2.1. Le fichier de bilan + Commentaire = "Summary" ; + if ( modeHOMARD == 1 ) { Commentaire += " " + siterp1 ; } + else { Commentaire += "Info" ; } + PublishFileUnderIteration(NomIteration, FileInfo.c_str(), Commentaire.c_str()); + // H.2.2. Le fichier de maillage obtenu + if ( modeHOMARD == 1 ) + { + std::stringstream saux0 ; + Commentaire = "Iteration" ; + Commentaire += " " + siter ; + PublishFileUnderIteration(NomIteration, MeshFile, Commentaire.c_str()); + PublishResultInSmesh(MeshFile, 1); + } + } + // H.3 Message d'erreur en cas de probleme + else + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "Error during the adaptation.\n" ; + try + { + ifstream fichier(LogFile.c_str(), ios::in); + string ligne; + while(getline(fichier, ligne) and (ligne != "===== HOMARD ===== STOP =====")); + while (getline(fichier, ligne)) { text += ligne+ "\n";}; + } + catch (...) { + text += "no log file ...."; + } + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + } + + // I. Menage et retour dans le repertoire du cas + if (codret == 0) + { + delete myDriver; + MESSAGE ( ". On retourne dans nomDirWork = " << nomDirWork ); + chdir(nomDirWork); + } + + return codretexec ; +} +//============================================================================= +// Calcul d'une iteration : partie specifique a l'adaptation +//============================================================================= +CORBA::Long HOMARD_Gen_i::ComputeAdap(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage, HomardDriver* myDriver, CORBA::Long Option) +{ + MESSAGE ( "ComputeAdap" ); + + // A. Prealable + // A.1. Bases + int codret = 0; + // Numero de l'iteration int NumeIter = myIteration->GetNumber(); + std::stringstream saux0 ; + saux0 << NumeIter-1 ; + std::string siter = saux0.str() ; + if (NumeIter < 11) { siter = "0" + siter ; } + + // A.2. On ne calcule pas l iteration 0 if ( NumeIter == 0 ) { SALOME::ExceptionStruct es; @@ -1436,7 +1710,7 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena return 1; }; -// A.3. On verifie qu il y a une hypothese (erreur improbable); + // A.3. On verifie qu il y a une hypothese (erreur improbable); const char* nomHypo = myIteration->GetHypoName(); if (std::string(nomHypo) == std::string("")) { @@ -1445,17 +1719,19 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena es.text= "This iteration does not have any associated hypothesis."; throw SALOME::SALOME_Exception(es); return 2; - } + }; HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo]; ASSERT(!CORBA::is_nil(myHypo)); - // A.4. L'iteration parent + // B. L'iteration parent const char* nomIterationParent = myIteration->GetIterParentName(); HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterationParent]; ASSERT(!CORBA::is_nil(myIterationParent)); + // Si l'iteration parent n'est pas calculee, on le fait (recursivite amont) if ( ! myIterationParent->GetEtat() ) { - int codret = Compute(nomIterationParent, etatMenage); + int iaux = 1 ; + int codret = Compute(nomIterationParent, etatMenage, iaux, Option); if (codret != 0) { // GERALD -- QMESSAGE BOX @@ -1463,167 +1739,52 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena } }; - // A.5. Le cas - const char* nomCas = myIteration->GetCaseName(); - HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas]; - ASSERT(!CORBA::is_nil(myCase)); - - // A.6. Les numeros d'iterations - int codret = 0; - std::stringstream saux0 ; - saux0 << NumeIter - 1 ; - std::string siter = saux0.str() ; - if (NumeIter < 11) { siter = "0" + siter ; } -// - std::stringstream saux1 ; - saux1 << NumeIter ; - std::string siterp1 = saux1.str() ; - if (NumeIter < 10) { siterp1 = "0" + siterp1 ; } - - // B. Les repertoires - // B.1. Le repertoire courant - char* nomDirWork = getenv("PWD") ; - // B.2. Le repertoire du cas - const char* nomDirCase = myCase->GetDirName(); - MESSAGE ( ". nomDirCase = " << nomDirCase ); + // C. Le sous-repertoire de l'iteration precedente + char* DirComputePa = ComputeDirPa(myCase, myIteration); + MESSAGE( ". DirComputePa = " << DirComputePa ); - // B.3. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer - // B.3.1. Le nom du sous-repertoire - const char* nomDirIt = myIteration->GetDirName(); + // D. Les donnees de l'adaptation HOMARD + // D.1. Le type de conformite + int ConfType = myCase->GetConfType(); + MESSAGE ( ". ConfType = " << ConfType ); - // B.3.2. Le nom complet du sous-repertoire - std::stringstream DirCompute ; - DirCompute << nomDirCase << "/" << nomDirIt; - MESSAGE (". DirCompute = " << DirCompute.str() ); + // D.2. Le maillage de depart + const char* NomMeshParent = myIterationParent->GetMeshName(); + MESSAGE ( ". NomMeshParent = " << NomMeshParent ); + const char* MeshFileParent = myIterationParent->GetMeshFile(); + MESSAGE ( ". MeshFileParent = " << MeshFileParent ); - // B.3.3. Si le sous-repertoire n'existe pas, on le cree - // Si le sous-repertoire existe : - // etatMenage = 0 : on sort en erreur si le repertoire n'est pas vide - // etatMenage = 1 : on fait le menage du repertoire - if (chdir(DirCompute.str().c_str()) != 0) + // D.3. Le maillage associe a l'iteration + const char* MeshFile = myIteration->GetMeshFile(); + MESSAGE ( ". MeshFile = " << MeshFile ); + FILE *file = fopen(MeshFile,"r"); + if (file != NULL) { -// Creation du repertoire car il n'existe pas : - if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0) + fclose(file); + if (etatMenage == 0) { - // GERALD -- QMESSAGE BOX - std::cerr << "Pb Creation du repertoire DirCompute = " << DirCompute.str() << std::endl; - ASSERT("Pb a la creation du repertoire" == 0); + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "MeshFile : " + std::string(MeshFile) + " already exists "; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + return 4; } - } - else - { -// Le repertoire existe -// On demande de faire le menage de son contenu : - if (etatMenage != 0) - { - MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str()); - std::string commande= "rm -rf " + DirCompute.str()+"/*" ; - int codret = system(commande.c_str()); - if (codret != 0) - { - // GERALD -- QMESSAGE BOX - std::cerr << ". Menage du repertoire de calcul" << DirCompute.str() << std::endl; - ASSERT("Pb au menage du repertoire de calcul" == 0); - } - } -// On n'a pas demande de faire le menage de son contenu : on sort en erreur : else { - DIR *dp; - struct dirent *dirp; - dp = opendir(DirCompute.str().c_str()); - bool result = true; - while ((dirp = readdir(dp)) != NULL && result ) - { - std::string file_name(dirp->d_name); - result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false - } - closedir(dp); - if ( result == false) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - std::string text = "Directory : " + DirCompute.str() + "is not empty"; - es.text = CORBA::string_dup(text.c_str()); - throw SALOME::SALOME_Exception(es); - return 3; - } - } - } - - // B.4. Le sous-repertoire de l'iteration precedente - const char* nomDirItPa ; - std::stringstream DirComputePa ; - if (NumeIter == 1) - { - nomDirItPa = nomDirIt; - DirComputePa << DirCompute.str(); - } - else - { - nomDirItPa = myIterationParent->GetDirName(); - DirComputePa << nomDirCase << "/" << nomDirItPa; - } - MESSAGE( ". nomDirItPa = " << nomDirItPa); - MESSAGE( ". DirComputePa = " << DirComputePa.str() ); - - // B.5. Le fichier des messages - std::string MessFile = DirCompute.str() + "/Liste." + siter + ".vers." + siterp1 ; - MESSAGE (". MessFile = " << MessFile); - myIteration->SetMessFile(MessFile.c_str()); - - // C. On passe dans le repertoire de l'iteration a calculer - MESSAGE ( ". On passe dans DirCompute = " << DirCompute.str() ); - chdir(DirCompute.str().c_str()) ; - - // D. Les donnees du calcul HOMARD - // D.1. Le type de conformite - int ConfType = myCase->GetConfType(); - MESSAGE ( ". ConfType = " << ConfType ); - - // D.2. Le maillage n - const char* NomMeshParent = myIterationParent->GetMeshName(); - MESSAGE ( ". NomMeshParent = " << NomMeshParent ); - const char* MeshFileParent = myIterationParent->GetMeshFile(); - MESSAGE ( ". MeshFileParent = " << MeshFileParent ); - - // D.3. Le maillage n+1 - const char* NomMesh = myIteration->GetMeshName(); - MESSAGE ( ". NomMesh = " << NomMesh ); - const char* MeshFile = myIteration->GetMeshFile(); - MESSAGE ( ". MeshFile = " << MeshFile ); - FILE *file = fopen(MeshFile,"r"); - if (file != NULL) - { - fclose(file); - if (etatMenage == 0) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - std::string text = "MeshFile : " + std::string(MeshFile) + " already exists "; - es.text = CORBA::string_dup(text.c_str()); - throw SALOME::SALOME_Exception(es); - return 4; - } - else - { - std::string commande = "rm -f " + std::string(MeshFile); - codret = system(commande.c_str()); - if (codret != 0) - { + std::string commande = "rm -f " + std::string(MeshFile); + codret = system(commande.c_str()); + if (codret != 0) + { SALOME::ExceptionStruct es; es.type = SALOME::BAD_PARAM; std::string text = "PB with meshfile destruction "; es.text = CORBA::string_dup(text.c_str()); throw SALOME::SALOME_Exception(es); return 5; - } + } } } - else - { - codret = 0 ; - }; // D.4. Les types de raffinement et de deraffinement // Les appels corba sont lourds, il vaut mieux les grouper @@ -1633,119 +1794,256 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena int TypeRaff = (*ListTypes)[1]; int TypeDera = (*ListTypes)[2]; - // D.5. L'option d'interpolation des champs - int TypeFieldInterp = myHypo->GetTypeFieldInterp(); - // E. Texte du fichier de configuration // E.1. Incontournables du texte - HomardDriver* myDriver = new HomardDriver(siter, siterp1); - myDriver->TexteInit(DirCompute.str(), DirComputePa.str(),MessFile); + myDriver->TexteAdap(); + int iaux = 0 ; + myDriver->TexteMaillageHOMARD( DirComputePa, siter, iaux ) ; myDriver->TexteMaillage(NomMeshParent, MeshFileParent, 0); - myDriver->TexteMaillage(NomMesh, MeshFile, 1); myDriver->TexteConfRaffDera(ConfType, TypeAdap, TypeRaff, TypeDera); // E.2. Ajout des informations liees aux zones eventuelles - if (TypeAdap == 0) + if ( TypeAdap == 0 ) + { DriverTexteZone(myHypo, myDriver) ; } + + // E.3. Ajout des informations liees aux champs eventuels + if ( TypeAdap == 1 ) + { DriverTexteField(myIteration, myHypo, myDriver) ; } + + // E.4. Ajout des informations liees au filtrage eventuel par les groupes + HOMARD::ListGroupType* listeGroupes = myHypo->GetGroups(); + int numberOfGroups = listeGroupes->length(); + MESSAGE( ". Filtrage par " << numberOfGroups << " groupes"); + if (numberOfGroups > 0) { - HOMARD::listeZonesHypo* ListZone = myHypo->GetZones(); - int numberOfZonesx2 = ListZone->length(); - int NumZone ; + for (int NumGroup = 0; NumGroup< numberOfGroups; NumGroup++) + { + std::string GroupName = std::string((*listeGroupes)[NumGroup]); + MESSAGE( "... GroupName = " << GroupName ); + myDriver->TexteGroup(GroupName); + } + } - for (int iaux = 0; iaux< numberOfZonesx2; iaux++) + // E.5. Ajout des informations liees a l'eventuelle interpolation des champs + DriverTexteFieldInterp(myIteration, myHypo, myDriver) ; + + // E.6. Ajout des options avancees + int Pyram = myCase->GetPyram(); + MESSAGE ( ". Pyram = " << Pyram ); + int NivMax = myHypo->GetNivMax(); + MESSAGE ( ". NivMax = " << NivMax ); + double DiamMin = myHypo->GetDiamMin() ; + MESSAGE ( ". DiamMin = " << DiamMin ); + int AdapInit = myHypo->GetAdapInit(); + MESSAGE ( ". AdapInit = " << AdapInit ); + int LevelOutput = myHypo->GetLevelOutput(); + MESSAGE ( ". LevelOutput = " << LevelOutput ); + myDriver->TexteAdvanced(Pyram, NivMax, DiamMin, AdapInit, LevelOutput); + + return codret ; +} +//============================================================================= +// Calcul d'une iteration : gestion du repertoire de calcul +// Si le sous-repertoire existe : +// etatMenage = 0 : on sort en erreur si le repertoire n'est pas vide +// etatMenage = 1 : on fait le menage du repertoire +// etatMenage = -1 : on ne fait rien +//============================================================================= +char* HOMARD_Gen_i::ComputeDir(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage) +{ + MESSAGE ( "ComputeDir : repertoires pour le calcul" ); + // B.2. Le repertoire du cas + const char* nomDirCase = myCase->GetDirName(); + MESSAGE ( ". nomDirCase = " << nomDirCase ); + + // B.3. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer + // B.3.1. Le nom du sous-repertoire + const char* nomDirIt = myIteration->GetDirName(); + + // B.3.2. Le nom complet du sous-repertoire + std::stringstream DirCompute ; + DirCompute << nomDirCase << "/" << nomDirIt; + MESSAGE (". DirCompute = " << DirCompute.str() ); + + // B.3.3. Si le sous-repertoire n'existe pas, on le cree + if (chdir(DirCompute.str().c_str()) != 0) + { +// Creation du repertoire car il n'existe pas : + if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0) { - std::string ZoneName = std::string((*ListZone)[iaux]); - MESSAGE ( "... ZoneName = " << ZoneName); - HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName]; - ASSERT(!CORBA::is_nil(myZone)); - - int ZoneType = myZone->GetType(); - std::string TypeUsestr = std::string((*ListZone)[iaux+1]); - int TypeUse = atoi( TypeUsestr.c_str() ); - MESSAGE ( "... ZoneType = " << ZoneType << ", TypeUse = "<GetCoords(); - if ( ZoneType == 2 or ( ZoneType>=11 and ZoneType <=13 ) ) // Cas d un parallelepipede ou d'un rectangle - { - myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], 0., 0., 0.); - } - else if ( ZoneType == 4 ) // Cas d une sphere - { - myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0., 0., 0., 0.); - } - else if ( ZoneType == 5 or ( ZoneType>=31 and ZoneType <=33 ) ) // Cas d un cylindre ou d'un disque - { - myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], 0.); - } - else if ( ZoneType == 7 or ( ZoneType>=61 and ZoneType <=63 ) ) // Cas d un tuyau ou disque perce + // GERALD -- QMESSAGE BOX + std::cerr << "Pb Creation du repertoire DirCompute = " << DirCompute.str() << std::endl; + ASSERT("Pb a la creation du repertoire" == 0); + } + } + else + { +// Le repertoire existe +// On demande de faire le menage de son contenu : + if (etatMenage == 1) + { + MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str()); + std::string commande= "rm -rf " + DirCompute.str()+"/*" ; + int codret = system(commande.c_str()); + if (codret != 0) + { + // GERALD -- QMESSAGE BOX + std::cerr << ". Menage du repertoire de calcul" << DirCompute.str() << std::endl; + ASSERT("Pb au menage du repertoire de calcul" == 0); + } + } +// On n'a pas demande de faire le menage de son contenu : on sort en erreur : + else + { + if (etatMenage == 0) { - myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], (*zone)[8]); + DIR *dp; + struct dirent *dirp; + dp = opendir(DirCompute.str().c_str()); + bool result = true; + while ((dirp = readdir(dp)) != NULL && result ) + { + std::string file_name(dirp->d_name); + result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false + } + closedir(dp); + if ( result == false) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "Directory : " + DirCompute.str() + "is not empty"; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + ASSERT("Directory is not empty" == 0); + } } - else { ASSERT("ZoneType est incorrect." == 0) ; } - iaux += 1 ; } } - // E.3. Ajout des informations liees aux champs eventuels - if (TypeAdap == 1) + + return CORBA::string_dup( DirCompute.str().c_str() ); +} +//============================================================================= +// Calcul d'une iteration : gestion du repertoire de calcul de l'iteration parent +//============================================================================= +char* HOMARD_Gen_i::ComputeDirPa(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration) +{ + MESSAGE ( "ComputeDirPa : repertoires pour le calcul" ); + // Le repertoire du cas + const char* nomDirCase = myCase->GetDirName(); + MESSAGE ( ". nomDirCase = " << nomDirCase ); + + // Le sous-repertoire de l'iteration precedente + + const char* nomIterationParent = myIteration->GetIterParentName(); + HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterationParent]; + const char* nomDirItPa = myIterationParent->GetDirName(); + std::stringstream DirComputePa ; + DirComputePa << nomDirCase << "/" << nomDirItPa; + MESSAGE( ". nomDirItPa = " << nomDirItPa); + MESSAGE( ". DirComputePa = " << DirComputePa.str() ); + + return CORBA::string_dup( DirComputePa.str().c_str() ); +} +//============================================================================= +// Calcul d'une iteration : ecriture des zones dans le fichier de configuration +//============================================================================= +void HOMARD_Gen_i::DriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver) +{ + MESSAGE ( "... DriverTexteZone" ); + HOMARD::listeZonesHypo* ListZone = myHypo->GetZones(); + int numberOfZonesx2 = ListZone->length(); + int NumZone ; + + for (int iaux = 0; iaux< numberOfZonesx2; iaux++) { -// Le fichier du champ - char* FieldFile = myIteration->GetFieldFile(); - MESSAGE ( ". FieldFile = " << FieldFile ); - if (strlen(FieldFile) == 0) + std::string ZoneName = std::string((*ListZone)[iaux]); + MESSAGE ( "... ZoneName = " << ZoneName); + HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName]; + ASSERT(!CORBA::is_nil(myZone)); + + int ZoneType = myZone->GetType(); + std::string TypeUsestr = std::string((*ListZone)[iaux+1]); + int TypeUse = atoi( TypeUsestr.c_str() ); + MESSAGE ( "... ZoneType = " << ZoneType << ", TypeUse = "<GetCoords(); + if ( ZoneType == 2 or ( ZoneType>=11 and ZoneType <=13 ) ) // Cas d un parallelepipede ou d'un rectangle { - // GERALD -- QMESSAGE BOX - std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl; - ASSERT("The file for the field is not given." == 0); + myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], 0., 0., 0.); } + else if ( ZoneType == 4 ) // Cas d une sphere + { + myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0., 0., 0., 0.); + } + else if ( ZoneType == 5 or ( ZoneType>=31 and ZoneType <=33 ) ) // Cas d un cylindre ou d'un disque + { + myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], 0.); + } + else if ( ZoneType == 7 or ( ZoneType>=61 and ZoneType <=63 ) ) // Cas d un tuyau ou disque perce + { + myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], (*zone)[8]); + } + else { ASSERT("ZoneType est incorrect." == 0) ; } + iaux += 1 ; + } + return ; +} +//============================================================================= +// Calcul d'une iteration : ecriture des champs dans le fichier de configuration +//============================================================================= +void HOMARD_Gen_i::DriverTexteField(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver) +{ + MESSAGE ( "... DriverTexteField" ); +// Le fichier du champ + char* FieldFile = myIteration->GetFieldFile(); + MESSAGE ( ". FieldFile = " << FieldFile ); + if (strlen(FieldFile) == 0) + { + // GERALD -- QMESSAGE BOX + std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl; + ASSERT("The file for the field is not given." == 0); + } // Les caracteristiques d'instants - int TimeStep = myIteration->GetTimeStep(); - MESSAGE( ". TimeStep = " << TimeStep ); - int Rank = myIteration->GetRank(); - MESSAGE( ". Rank = " << Rank ); + int TimeStep = myIteration->GetTimeStep(); + MESSAGE( ". TimeStep = " << TimeStep ); + int Rank = myIteration->GetRank(); + MESSAGE( ". Rank = " << Rank ); // Les informations sur les champ - HOMARD::InfosHypo* aInfosHypo = myHypo->GetField(); + HOMARD::InfosHypo* aInfosHypo = myHypo->GetField(); // Le nom - const char* FieldName = aInfosHypo->FieldName; + const char* FieldName = aInfosHypo->FieldName; // Les seuils - int TypeThR = aInfosHypo->TypeThR; - double ThreshR = aInfosHypo->ThreshR; - int TypeThC = aInfosHypo->TypeThC; - double ThreshC = aInfosHypo->ThreshC; + int TypeThR = aInfosHypo->TypeThR; + double ThreshR = aInfosHypo->ThreshR; + int TypeThC = aInfosHypo->TypeThC; + double ThreshC = aInfosHypo->ThreshC; // Saut entre mailles ou non ? - int UsField = aInfosHypo->UsField; - MESSAGE( ". UsField = " << UsField ); + int UsField = aInfosHypo->UsField; + MESSAGE( ". UsField = " << UsField ); // L'usage des composantes - int UsCmpI = aInfosHypo->UsCmpI; - MESSAGE( ". UsCmpI = " << UsCmpI ); + int UsCmpI = aInfosHypo->UsCmpI; + MESSAGE( ". UsCmpI = " << UsCmpI ); // - myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsField, UsCmpI); + myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsField, UsCmpI); // // Les composantes - HOMARD::listeComposantsHypo* mescompo = myHypo->GetListComp(); - int numberOfCompos = mescompo->length(); - MESSAGE( ". numberOfCompos = " << numberOfCompos ); - for (int NumeComp = 0; NumeComp< numberOfCompos; NumeComp++) - { - std::string nomCompo = std::string((*mescompo)[NumeComp]); - MESSAGE( "... nomCompo = " << nomCompo ); - myDriver->TexteCompo(NumeComp, nomCompo); - } - } - // E.4. Ajout des informations liees au filtrage eventuel par les groupes - HOMARD::ListGroupType* listeGroupes = myHypo->GetGroups(); - int numberOfGroups = listeGroupes->length(); - MESSAGE( ". numberOfGroups = " << numberOfGroups ); - if (numberOfGroups > 0) + HOMARD::listeComposantsHypo* mescompo = myHypo->GetListComp(); + int numberOfCompos = mescompo->length(); + MESSAGE( ". numberOfCompos = " << numberOfCompos ); + for (int NumeComp = 0; NumeComp< numberOfCompos; NumeComp++) { - - for (int NumGroup = 0; NumGroup< numberOfGroups; NumGroup++) - { - std::string GroupName = std::string((*listeGroupes)[NumGroup]); - MESSAGE( "... GroupName = " << GroupName ); - myDriver->TexteGroup(GroupName); - } + std::string nomCompo = std::string((*mescompo)[NumeComp]); + MESSAGE( "... nomCompo = " << nomCompo ); + myDriver->TexteCompo(NumeComp, nomCompo); } - - // E.5. Ajout des informations liees a l'eventuel suivi de frontiere + return ; +} +//============================================================================= +// Calcul d'une iteration : ecriture des frontieres dans le fichier de configuration +//============================================================================= +void HOMARD_Gen_i::DriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, HomardDriver* myDriver) +{ + MESSAGE ( "... DriverTexteBoundary" ); // On ecrit d'abord la definition des frontieres, puis les liens avec les groupes std::list ListeBoundaryTraitees ; HOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup(); @@ -1822,9 +2120,15 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena } } myDriver->TexteBoundaryOption(BoundaryOption); - - // E.6. Ajout des informations liees a l'eventuelle interpolation des champs - MESSAGE( "... TypeFieldInterp = " << TypeFieldInterp ); + return ; +} +//============================================================================= +// Calcul d'une iteration : ecriture des interpolations dans le fichier de configuration +//============================================================================= +void HOMARD_Gen_i::DriverTexteFieldInterp(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver) +{ + MESSAGE ( "... DriverTexteFieldInterp" ); + int TypeFieldInterp = myHypo->GetTypeFieldInterp(); if (TypeFieldInterp != 0) { // Le fichier des champs @@ -1836,14 +2140,15 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl; ASSERT("The file for the field is not given." == 0); } -// Les caracteristiques d'instants + // Les caracteristiques d'instants int TimeStep = myIteration->GetTimeStep(); MESSAGE( ". TimeStep = " << TimeStep ); int Rank = myIteration->GetRank(); MESSAGE( ". Rank = " << Rank ); -// + // + const char* MeshFile = myIteration->GetMeshFile(); myDriver->TexteFieldInterp(TypeFieldInterp, FieldFile, MeshFile, TimeStep, Rank); -// Les champs + // Les champs if (TypeFieldInterp == 2) { HOMARD::listFieldInterpHypo* meschamps = myHypo->GetListFieldInterp(); @@ -1857,98 +2162,11 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena } } } - // E.7. Ajout des options avancees - int Pyram = myCase->GetPyram(); - MESSAGE ( ". Pyram = " << Pyram ); - int NivMax = myHypo->GetNivMax(); - MESSAGE ( ". NivMax = " << NivMax ); - double DiamMin = myHypo->GetDiamMin() ; - MESSAGE ( ". DiamMin = " << DiamMin ); - int AdapInit = myHypo->GetAdapInit(); - MESSAGE ( ". AdapInit = " << 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) - { - myDriver->CreeFichier(); - } - -// G. Execution -// - int codretexec = 12 ; - if (codret == 0) - { - codretexec = myDriver->ExecuteHomard(); -// - MESSAGE ( "Erreur en executant HOMARD : " << codretexec ); - if (codretexec == 0) - { - SetEtatIter(NomIteration,true); - } - else - { - // GERALD -- QMESSAGE BOX - SetEtatIter(NomIteration,false); - } - } - - // H. Gestion des resultats - if (codret == 0) - { - // H.1. Le fichier des messages, dans tous les cas - std::stringstream saux1 ; - saux1 << "Mess " << NumeIter ; - PublishFileUnderIteration(NomIteration, MessFile.c_str(), saux1.str().c_str()); - - // H.2. Si tout s'est bien passe : - if (codretexec == 0) - { - // H.2.1. Le fichier de bilan - std::stringstream saux2 ; - saux2 << "Summary " << NumeIter ; - std::string SummaryFile = DirCompute.str() + "/apad." + siterp1 + ".bilan" ; - PublishFileUnderIteration(NomIteration, SummaryFile.c_str(), saux2.str().c_str()); - // H.2.2. Le fichier de maillage obtenu - std::stringstream saux0 ; - saux0 <<"Iteration " << NumeIter ; - PublishFileUnderIteration(NomIteration, MeshFile, saux0.str().c_str()); - PublishResultInSmesh(MeshFile, 1); - } - // H.3 Message d'erreur en cas de probleme - else - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - std::string text = "Error during the adaptation.\n" ; - try - { - ifstream fichier(MessFile.c_str(), ios::in); - string ligne; - while(getline(fichier, ligne) and (ligne != "===== HOMARD ===== STOP =====")); - while (getline(fichier, ligne)) { text += ligne+ "\n";}; - } - catch (...) { - text += "no log file ...."; - } - es.text = CORBA::string_dup(text.c_str()); - throw SALOME::SALOME_Exception(es); - } - } - - // I. Menage et retour dans le repertoire du cas - if (codret == 0) - { - delete myDriver; - MESSAGE ( ". On retourne dans nomDirWork = " << nomDirWork ); - chdir(nomDirWork); - } - - return codretexec ; + return ; } //=========================================================================== +//=========================================================================== + //=========================================================================== //=========================================================================== @@ -2317,7 +2535,6 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy } } } - } // On enregistre le fichier @@ -2401,6 +2618,7 @@ void HOMARD_Gen_i::DeleteResultInSmesh(const char* NomFich, const char* MeshName //============================================================================= void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* NomFich, const char* Commentaire) { +// MESSAGE (" PublishFileUnderIteration pour l'iteration " << NomIter << " du fichier " << NomFich << " avec le commentaire " << Commentaire ); if (CORBA::is_nil(myCurrentStudy)) { SALOME::ExceptionStruct es; diff --git a/src/HOMARD_I/HOMARD_Gen_i.hxx b/src/HOMARD_I/HOMARD_Gen_i.hxx index 5d9033f4..20ae2135 100644 --- a/src/HOMARD_I/HOMARD_Gen_i.hxx +++ b/src/HOMARD_I/HOMARD_Gen_i.hxx @@ -31,6 +31,7 @@ #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) #include "HOMARD_Gen.hxx" +#include "HomardDriver.hxx" #include "SALOME_Component_i.hxx" #include "SALOME_NamingService.hxx" #include "Utils_CorbaException.hxx" @@ -114,6 +115,10 @@ public: HOMARD::listeIterations* GetAllIterationsName(); HOMARD::listeZones* GetAllZonesName(); + void MeshInfo (const char* nomCas, + const char* MeshName, const char* FileName, const char* DirName, + CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte); + HOMARD::HOMARD_Iteration_ptr LastIteration (const char* nomCas); // L'etude @@ -125,6 +130,7 @@ public: void InvalideBoundary(const char* nomBoundary); void InvalideHypo(const char* nomHypo); void InvalideIter(const char* nomIter); + void InvalideIterInfo(const char* nomIter); void InvalideZone(const char* nomZone); CORBA::Long DeleteBoundary(const char* nomBoundary); @@ -144,7 +150,15 @@ public: void SetEtatIter(const char* nomIter,const CORBA::Boolean EtatCalcul); - CORBA::Long Compute(const char* nomIteration, CORBA::Long etatMenage); + CORBA::Long Compute(const char* nomIteration, CORBA::Long etatMenage, CORBA::Long modeHOMARD, CORBA::Long Option); + CORBA::Long ComputeAdap(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage, HomardDriver* myDriver, CORBA::Long Option); + char* ComputeDir(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage); + char* ComputeDirPa(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration); + void DriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver); + void DriverTexteField(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver); + void DriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, HomardDriver* myDriver); + void DriverTexteFieldInterp(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver); + CORBA::Boolean VerifieDir(const char* nomDir); void PublishResultInSmesh(const char* NomFich, CORBA::Long IconeType); diff --git a/src/HOMARD_I/HOMARD_Iteration_i.cxx b/src/HOMARD_I/HOMARD_Iteration_i.cxx index a29d2b3a..222dd663 100644 --- a/src/HOMARD_I/HOMARD_Iteration_i.cxx +++ b/src/HOMARD_I/HOMARD_Iteration_i.cxx @@ -210,27 +210,73 @@ CORBA::Long HOMARD_Iteration_i::GetRank() return CORBA::Long( myHomardIteration->GetRank() ); } //============================================================================= -void HOMARD_Iteration_i::SetMessFile( const char* MessFile ) +void HOMARD_Iteration_i::SetLogFile( const char* LogFile ) { ASSERT( myHomardIteration ); - myHomardIteration->SetMessFile( MessFile ); + myHomardIteration->SetLogFile( LogFile ); } //============================================================================= -char* HOMARD_Iteration_i::GetMessFile() +char* HOMARD_Iteration_i::GetLogFile() { ASSERT( myHomardIteration ); - return CORBA::string_dup( myHomardIteration->GetMessFile().c_str() ); + return CORBA::string_dup( myHomardIteration->GetLogFile().c_str() ); } //============================================================================= -CORBA::Long HOMARD_Iteration_i::Compute(CORBA::Long etatMenage) +CORBA::Long HOMARD_Iteration_i::Compute(CORBA::Long etatMenage) { MESSAGE ( "Compute : calcul d'une iteration" ); ASSERT( myHomardIteration ); // // Nom de l'iteration char* IterName = GetName() ; + CORBA::Long modeHOMARD = 1 ; + CORBA::Long Option = 1 ; MESSAGE ( "Compute : calcul de l'teration " << IterName ); - return _gen_i->Compute(IterName, etatMenage) ; + return _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option) ; +} +//============================================================================= +void HOMARD_Iteration_i::MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte) +{ + MESSAGE ( "MeshInfo : information sur le maillage associe a une iteration" ); + ASSERT( myHomardIteration ); +// + int Option = 1 ; + MeshInfoOption( Qual, Diam, Conn, Tail, Inte, Option ) ; +// + return ; +} +//============================================================================= +void HOMARD_Iteration_i::MeshInfoOption(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte, CORBA::Long Option) +{ + MESSAGE ( "MeshInfoOption : information sur le maillage associe a une iteration" ); + ASSERT( myHomardIteration ); +// +// Nom de l'iteration + char* IterName = GetName() ; + CORBA::Long etatMenage = -1 ; + CORBA::Long modeHOMARD = 7 ; + if ( Qual != 0 ) { modeHOMARD = modeHOMARD*5 ; } + if ( Diam != 0 ) { modeHOMARD = modeHOMARD*19 ; } + if ( Conn != 0 ) { modeHOMARD = modeHOMARD*11 ; } + if ( Tail != 0 ) { modeHOMARD = modeHOMARD*13 ; } + if ( Inte != 0 ) { modeHOMARD = modeHOMARD*3 ; } + MESSAGE ( "MeshInfoOption : information sur le maillage de l'iteration " << IterName ); + CORBA::Long codret = _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option) ; + MESSAGE ( "MeshInfoOption : codret = " << codret ); +// + return ; +} +//============================================================================= +void HOMARD_Iteration_i::SetFileInfo( const char* FileInfo ) +{ + ASSERT( myHomardIteration ); + myHomardIteration->SetFileInfo( FileInfo ); +} +//============================================================================= +char* HOMARD_Iteration_i::GetFileInfo() +{ + ASSERT( myHomardIteration ); + return CORBA::string_dup( myHomardIteration->GetFileInfo().c_str() ); } //============================================================================= //============================================================================= diff --git a/src/HOMARD_I/HOMARD_Iteration_i.hxx b/src/HOMARD_I/HOMARD_Iteration_i.hxx index 91ce9fdc..103a5163 100644 --- a/src/HOMARD_I/HOMARD_Iteration_i.hxx +++ b/src/HOMARD_I/HOMARD_Iteration_i.hxx @@ -87,12 +87,19 @@ public: CORBA::Long GetTimeStep(); CORBA::Long GetRank(); - void SetMessFile( const char* MessFile ); - char* GetMessFile(); + void SetLogFile( const char* LogFile ); + char* GetLogFile(); CORBA::Long Compute(CORBA::Long etatMenage); -// Liens avec les autres iterations + void MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte); + + void MeshInfoOption(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte, CORBA::Long Option); + + void SetFileInfo( const char* FileInfo ); + char* GetFileInfo(); + + // Liens avec les autres iterations HOMARD::HOMARD_Iteration_ptr NextIteration( const char* Name) ; void LinkNextIteration( const char* NomIteration ); -- 2.30.2