ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 881
Committed: Wed Apr 12 23:14:07 2017 UTC (8 years, 2 months ago) by francois
File size: 78859 byte(s)
Log Message:
Changement de strategie pour le mailleur couche.
Il fonctionne maintenant avec des volumes minces et non des coquilles
mince est une propriète de volume et ne change pas son nom.
cela necessite un changement de version de fichier -> maintenant 2.3 compatible en arrière
valider sur ancien exemple plus sphere creuse

File Contents

# User Rev Content
1 francois 283
2     //------------------------------------------------------------
3     //------------------------------------------------------------
4     // MAGiC
5     // Jean Christophe Cuilli�e et Vincent FRANCOIS
6     // D�artement de G�ie M�anique - UQTR
7     //------------------------------------------------------------
8     // Le projet MAGIC est un projet de recherche du d�artement
9     // de g�ie m�anique de l'Universit�du Qu�ec �
10     // Trois Rivi�es
11     // Les librairies ne peuvent �re utilis�s sans l'accord
12     // des auteurs (contact : francois@uqtr.ca)
13     //------------------------------------------------------------
14     //------------------------------------------------------------
15     //
16     // main.cpp
17     //
18     //------------------------------------------------------------
19     //------------------------------------------------------------
20     // COPYRIGHT 2000
21     // Version du 02/03/2006 �11H25
22     //------------------------------------------------------------
23     //------------------------------------------------------------
24     #include "gestionversion.h"
25     #ifdef WINDOWS_VERSION
26     #include "fenetre.h"
27     #endif
28    
29    
30     #include <string.h>
31     #include "mg_file.h"
32     #include "mg_export.h"
33 francois 492 #include "fct_export.h"
34 francois 283 #include "mg_import.h"
35     #include "step_import.h"
36     #include "acis_import.h"
37     #include "step_import.h"
38 francois 428 #include "stl_import.h"
39 francois 283 #include "occ_import.h"
40 francois 296 #include "mc_gestionnaire.h"
41 francois 283 #include "vct_multi_modele.h"
42 francois 326 #include "mgaster.h"
43 francois 283 #include <ctype.h>
44     #include <math.h>
45 francois 425 #include "mailleur_analyse.h"
46 francois 432 #include "magic_application.h"
47 francois 469 #include "fct_taille_fem_solution.h"
48 francois 612 #include "fem_maillage_quadratique_outils.h"
49 francois 628 #include "fem_maillage_outils.h"
50 francois 697 #include "mg_table.h"
51 francois 283 //---------------------------------------------------------------------------
52    
53    
54     void minuscule(char * mess)
55     {
56     int nb=strlen(mess);
57     for (int i=0;i<nb;i++)
58     mess[i]=tolower(mess[i]);
59     }
60    
61 francois 432
62 francois 283 int main(int argc,char **argv)
63     {
64 francois 432 std::vector<MAGIC_PARAMETRE_APPLICATION> lst;
65     MAGIC_PARAMETRE_APPLICATION p1(2,(char*)"-gmsh",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en gmsh");
66     MAGIC_PARAMETRE_APPLICATION p2(3,(char*)"-nodeforme",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Ne convertit pas les deformes des maillages FEM");
67     MAGIC_PARAMETRE_APPLICATION p3(4,(char*)"-copie",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Copie un fichier MAGiC en un autre");
68     MAGIC_PARAMETRE_APPLICATION p4(5,(char*)"-out",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier de sortie");
69 francois 694 MAGIC_PARAMETRE_APPLICATION p5(6,(char*)"-aster",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion MAGiC en format ASTER (uniquement calcul mecanique)");
70 francois 514 MAGIC_PARAMETRE_APPLICATION p6(7,(char*)"-coderesu",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Choix des valeurs à calculer par EF - Defaut 11111111 - |Surface moyenne|Surface inferieure|Surface superieur|Deplacement|Contraintes|Deformations|Contraintes equivalentes|Energie|");
71 francois 505 MAGIC_PARAMETRE_APPLICATION p7(8,(char*)"-carte",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion carte de taille ancien format en format gmsh");
72 francois 432 MAGIC_PARAMETRE_APPLICATION p8(9,(char*)"-step",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier step en format MAGiC");
73     MAGIC_PARAMETRE_APPLICATION p9(10,(char*)"-unite",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Facteur d'unité pour obtenir des métres - Defaut 1.");
74     MAGIC_PARAMETRE_APPLICATION p10(11,(char*)"-stepocc",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier step en format MAGiC via opencascade");
75     MAGIC_PARAMETRE_APPLICATION p11(12,(char*)"-sat",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier sat en format MAGiC");
76     MAGIC_PARAMETRE_APPLICATION p12(13,(char*)"-eps",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Tolérance pour un double - Defaut 0.000001");
77     MAGIC_PARAMETRE_APPLICATION p13(14,(char*)"-epsgeo",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Distance max entre la triangulation et la géométrie - Defaut 1.");
78     MAGIC_PARAMETRE_APPLICATION p14(15,(char*)"-importstl",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Importation de la triangulation STL");
79     MAGIC_PARAMETRE_APPLICATION p15(16,(char*)"-importtriangulation",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Importation de la triangulation STL avec noeuds fusionnés");
80     MAGIC_PARAMETRE_APPLICATION p16(17,(char*)"-occ",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier opencascade en format MAGiC");
81     MAGIC_PARAMETRE_APPLICATION p17(18,(char*)"-fem",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Création d'un maillage fem");
82     MAGIC_PARAMETRE_APPLICATION p18(19,(char*)"-nummai",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de maillage - Defaut le premier");
83     MAGIC_PARAMETRE_APPLICATION p19(20,(char*)"-degre",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Degre du maillage à créer");
84     MAGIC_PARAMETRE_APPLICATION p20(21,(char*)"-astermagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation des resultats ASTER dans un maillage");
85     MAGIC_PARAMETRE_APPLICATION p21(22,(char*)"-fichieraster",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier aster");
86 francois 706 MAGIC_PARAMETRE_APPLICATION p22(23,(char*)"-optis",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier magic en format OPTIS - Fonction esactivée");
87 francois 432 MAGIC_PARAMETRE_APPLICATION p23(24,(char*)"-optismagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation des résultats OPTIS");
88     MAGIC_PARAMETRE_APPLICATION p24(25,(char*)"-fichieroptis",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier optis");
89     MAGIC_PARAMETRE_APPLICATION p25(26,(char*)"-fichierflottant",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier flottant - Optionnel");
90     MAGIC_PARAMETRE_APPLICATION p26(27,(char*)"-seuil",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Seuil de densité pour conserver les éléments");
91     MAGIC_PARAMETRE_APPLICATION p27(28,(char*)"-niveau",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Facteur pour le seuil (parametre incertain)");
92     MAGIC_PARAMETRE_APPLICATION p28(29,(char*)"-selectgr",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Selection de groupe topologique");
93     MAGIC_PARAMETRE_APPLICATION p29(30,(char*)"-deselectgr",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Deselection de groupe topologique");
94     MAGIC_PARAMETRE_APPLICATION p30(31,(char*)"-numgeo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de geometrie - Defaut la première");
95     MAGIC_PARAMETRE_APPLICATION p31(32,(char*)"-numgt",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de groupe topologique - Defaut le premier");
96     MAGIC_PARAMETRE_APPLICATION p32(33,(char*)"-numentite",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro d'entité à selectionner");
97     MAGIC_PARAMETRE_APPLICATION p33(34,(char*)"-expand",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Prend en compte la topologie sous-jacente dans la selection");
98     MAGIC_PARAMETRE_APPLICATION p34(35,(char*)"-examine",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Contenu d'un fichier MAGiC. Si un numero de maillage est présent l'action analyse ce maillage");
99     MAGIC_PARAMETRE_APPLICATION p35(36,(char*)"-angle",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Angle limite pour l'analyse de retournement de triangle - Defaut 0.03");
100     MAGIC_PARAMETRE_APPLICATION p36(37,(char*)"-fichierlog",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier log");
101 francois 516 MAGIC_PARAMETRE_APPLICATION p37(38,(char*)"-deforme",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Calcul un maillage déforme");
102 francois 432 MAGIC_PARAMETRE_APPLICATION p38(39,(char*)"-fusiongeo",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Fusionne deux géométries");
103     MAGIC_PARAMETRE_APPLICATION p39(40,(char*)"-numsol1",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 1");
104     MAGIC_PARAMETRE_APPLICATION p40(41,(char*)"-numsol2",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 2");
105     MAGIC_PARAMETRE_APPLICATION p41(42,(char*)"-numsol3",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 3");
106     MAGIC_PARAMETRE_APPLICATION p42(43,(char*)"-numchamp1",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 1");
107     MAGIC_PARAMETRE_APPLICATION p43(44,(char*)"-numchamp2",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 2");
108     MAGIC_PARAMETRE_APPLICATION p44(45,(char*)"-numchamp3",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 3");
109     MAGIC_PARAMETRE_APPLICATION p45(46,(char*)"-ccf",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie");
110     MAGIC_PARAMETRE_APPLICATION p46(47,(char*)"-ccft",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous jacente");
111     MAGIC_PARAMETRE_APPLICATION p47(48,(char*)"-ccfhelp",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Liste des conditions aux limites disponibles");
112 francois 788 MAGIC_PARAMETRE_APPLICATION p48(49,(char*)"-valeur",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Condition aux limites à appliquer sous la forme id:ccf:valeur(:NS|SU) ou id:ccf:formule:var1,var2(:NS|SU)");
113 francois 432 MAGIC_PARAMETRE_APPLICATION p49(50,(char*)"-oricoque",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Orientation d'une coque");
114     MAGIC_PARAMETRE_APPLICATION p50(51,(char*)"-numcoque",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de la coque - Defaut la premiere");
115 francois 517 MAGIC_PARAMETRE_APPLICATION p51(52,(char*)"-stlmagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation de fichier STL");
116 francois 432 MAGIC_PARAMETRE_APPLICATION p52(53,(char*)"-epsf",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Tolérance pour un float - Defaut 0.0001");
117 mejrim 597 MAGIC_PARAMETRE_APPLICATION p53(54,(char*)"-calculaster",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Calcul ASTER");
118 francois 454 MAGIC_PARAMETRE_APPLICATION p54(55,(char*)"-correspondance",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Ajout d'un fichier de correspondance entre GMSH et MAGIC");
119 francois 505 MAGIC_PARAMETRE_APPLICATION p55(56,(char*)"-carte2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion carte de taille nouvelle version en format gmsh");
120 francois 517 MAGIC_PARAMETRE_APPLICATION p56(57,(char*)"-stlout",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en stl");
121 francois 514 MAGIC_PARAMETRE_APPLICATION p57(58,(char*)"-comparetaille",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Compare la taille d'un maillage avec la taille d'une carte de taille isotrope ancienne version");
122     MAGIC_PARAMETRE_APPLICATION p58(59,(char*)"-cartetaille",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom de la carte de taille a fournir");
123     MAGIC_PARAMETRE_APPLICATION p59(60,(char*)"-comparetaille2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Compare la taille d'un maillage avec la taille d'une carte de taille isotrope nouvelle version");
124 francois 516 MAGIC_PARAMETRE_APPLICATION p60(61,(char*)"-coefdef",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Coefficient de déformé - par defaut 0. = pas de creation de maillage");
125 francois 517 MAGIC_PARAMETRE_APPLICATION p61(62,(char*)"-detachemaillage",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Détache un maillage des ses liens avec la géométrie");
126 francois 706 MAGIC_PARAMETRE_APPLICATION p62(63,(char*)"-elastique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en elasticité");
127 mejrim 597 MAGIC_PARAMETRE_APPLICATION p63(64,(char*)"-thermique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en thermique");
128 francois 603 MAGIC_PARAMETRE_APPLICATION p64(65,(char*)"-contrainteplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en contrainte plane");
129     MAGIC_PARAMETRE_APPLICATION p65(66,(char*)"-deformationplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en deformation plane");
130 francois 604 MAGIC_PARAMETRE_APPLICATION p66(67,(char*)"-sonde",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Obtenir un resultat sur une arete dans un fichier csv");
131     MAGIC_PARAMETRE_APPLICATION p67(68,(char*)"-numsol",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de la solution (la premiere par defaut)");
132     MAGIC_PARAMETRE_APPLICATION p68(69,(char*)"-numchamp",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero du champs de la solution (le premier par defaut)");
133     MAGIC_PARAMETRE_APPLICATION p69(70,(char*)"-csvout",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier csv");
134     MAGIC_PARAMETRE_APPLICATION p70(71,(char*)"-numare",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de l'arete à sonder (la premiere par default)");
135 francois 628 MAGIC_PARAMETRE_APPLICATION p71(72,(char*)"-projsolution",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Projeter une solution sur un autre maillage");
136     MAGIC_PARAMETRE_APPLICATION p72(73,(char*)"-fichiersolution",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier contenant la solution");
137     MAGIC_PARAMETRE_APPLICATION p73(74,(char*)"-comparesolution",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Comparer deux champs de solution. La reference est la deuxième solution.");
138 francois 828 MAGIC_PARAMETRE_APPLICATION p74(75,(char*)"-analyse",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Analyse le maillage quadratique. Defaut non.");
139 francois 697 MAGIC_PARAMETRE_APPLICATION p75(76,(char*)"-table",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Extraire des tables de valeurs d'un maillage fem");
140     MAGIC_PARAMETRE_APPLICATION p76(77,(char*)"-noeud",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les noeuds");
141     MAGIC_PARAMETRE_APPLICATION p77(78,(char*)"-element1",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element1D");
142     MAGIC_PARAMETRE_APPLICATION p78(79,(char*)"-element2",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element2D");
143     MAGIC_PARAMETRE_APPLICATION p79(80,(char*)"-element3",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element3D");
144 francois 698 MAGIC_PARAMETRE_APPLICATION p80(81,(char*)"-numtopo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Action uniquement sur le numero de topologie mentionnée");
145 francois 702 MAGIC_PARAMETRE_APPLICATION p81(82,(char*)"-maigmsh",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation d'un maillage de GMSH (-in peut être omis -out peut etre omis si -in n'est pas omis -numgeo le defaut correspond à un non attechement du maillage)");
146     MAGIC_PARAMETRE_APPLICATION p82(83,(char*)"-fichiergmsh",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier gmsh");
147 francois 706 MAGIC_PARAMETRE_APPLICATION p83(84,(char*)"-param",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier parametre");
148     MAGIC_PARAMETRE_APPLICATION p84(85,(char*)"-creeparam",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Création d'un fichier parametre");
149 francois 712 MAGIC_PARAMETRE_APPLICATION p85(86,(char*)"-importefonction",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation d'une fonction dans une géométrie");
150     MAGIC_PARAMETRE_APPLICATION p86(87,(char*)"-fichier",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier à importer");
151 couturad 719 MAGIC_PARAMETRE_APPLICATION p87(88,(char*)"-elastique_gd",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en elasticite grandes deformations");
152     MAGIC_PARAMETRE_APPLICATION p88(89,(char*)"-plastique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en plasticite");
153 francois 757 MAGIC_PARAMETRE_APPLICATION p89(90,(char*)"-base",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Base de numerotation des entités code aster - Defaut 10");
154     MAGIC_PARAMETRE_APPLICATION p90(91,(char*)"-element_gauss1",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element1D");
155     MAGIC_PARAMETRE_APPLICATION p91(92,(char*)"-element_gauss2",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element2D");
156     MAGIC_PARAMETRE_APPLICATION p92(93,(char*)"-element_gauss3",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element3D");
157 francois 763 MAGIC_PARAMETRE_APPLICATION p93(94,(char*)"-ccfi",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie par identificateur d'une autre entité MAGiC");
158     MAGIC_PARAMETRE_APPLICATION p94(95,(char*)"-ccfit",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous jacente par identificateur d'une autre entité MAGiC");
159     MAGIC_PARAMETRE_APPLICATION p95(96,(char*)"-ccff",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie sous forme de formule");
160     MAGIC_PARAMETRE_APPLICATION p96(97,(char*)"-ccfft",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous forme de formule");
161 sattarpa 784 MAGIC_PARAMETRE_APPLICATION p97(98,(char*)"-opt",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Optimisation de la numerotation des noeuds");
162 francois 786 MAGIC_PARAMETRE_APPLICATION p98(99,(char*)"-rigidite",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite elastique par code aster");
163     MAGIC_PARAMETRE_APPLICATION p99(100,(char*)"-rigiditecontrainteplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite en contrainte plane par code aster");
164     MAGIC_PARAMETRE_APPLICATION p100(101,(char*)"-rigiditedeformationplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite en deformation plane par code aster");
165 francois 789 MAGIC_PARAMETRE_APPLICATION p101(102,(char*)"-elementnd",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les tous les elements (solution de calcul mixte)");
166 francois 796 MAGIC_PARAMETRE_APPLICATION p102(103,(char*)"-changefonction",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Modifie une fonction dans une géométrie");
167     MAGIC_PARAMETRE_APPLICATION p103(104,(char*)"-numfonction",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero d'une fonction dans la géométrie (defaut la premiere)");
168 francois 843 MAGIC_PARAMETRE_APPLICATION p104(105,(char*)"-offout",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en off");
169 francois 880 MAGIC_PARAMETRE_APPLICATION p105(106,(char*)"-mince",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion d'une coquille mince");
170 francois 881 MAGIC_PARAMETRE_APPLICATION p106(107,(char*)"-volcor",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Ajout d'une face de base et d'une face en vis a vis pour un volume mince sous la forme idgeo:idvol:idfacebase:idfacevisavis");
171 couturad 719
172 francois 763
173 francois 454 p1.ajouter_dependance(1);p1.ajouter_dependance(3);p1.ajouter_dependance(55);
174 francois 432 p3.ajouter_dependance(1);p3.ajouter_dependance(5);
175 francois 706 p5.ajouter_dependance(1);p5.ajouter_dependance(7);p5.ajouter_dependance(85);
176 francois 432 p7.ajouter_dependance(1);
177     p8.ajouter_dependance(1);p8.ajouter_dependance(10);
178 francois 652 p10.ajouter_dependance(1);p10.ajouter_dependance(13);p10.ajouter_dependance(14);p10.ajouter_dependance(15);;p10.ajouter_dependance(16);
179 francois 432 p11.ajouter_dependance(1);p11.ajouter_dependance(10);
180 francois 652 p16.ajouter_dependance(1);p16.ajouter_dependance(13);p16.ajouter_dependance(14);p16.ajouter_dependance(15);;p16.ajouter_dependance(16);
181 francois 828 p17.ajouter_dependance(1);p17.ajouter_dependance(5);p17.ajouter_dependance(19);p17.ajouter_dependance(20);p17.ajouter_dependance(75);p17.ajouter_dependance(98);
182 francois 757 p20.ajouter_dependance(1);p20.ajouter_dependance(19);p20.ajouter_dependance(22);p20.ajouter_dependance(90);
183 francois 706 //p22.ajouter_dependance(1);p22.ajouter_dependance(7);
184 francois 432 p23.ajouter_dependance(1);p23.ajouter_dependance(19);p23.ajouter_dependance(25);p23.ajouter_dependance(26);p23.ajouter_dependance(27);p23.ajouter_dependance(28);
185     p28.ajouter_dependance(1);p28.ajouter_dependance(31);p28.ajouter_dependance(32);p28.ajouter_dependance(33);p28.ajouter_dependance(34);
186     p29.ajouter_dependance(1);p29.ajouter_dependance(31);p29.ajouter_dependance(32);p29.ajouter_dependance(33);p29.ajouter_dependance(34);
187     p34.ajouter_dependance(1);p34.ajouter_dependance(19);p34.ajouter_dependance(36);p34.ajouter_dependance(37);
188 francois 516 p37.ajouter_dependance(1);p37.ajouter_dependance(19);p37.ajouter_dependance(40);p37.ajouter_dependance(41);p37.ajouter_dependance(42);p37.ajouter_dependance(43);p37.ajouter_dependance(44);p37.ajouter_dependance(45);p37.ajouter_dependance(61);
189 francois 432 p38.ajouter_dependance(1);p38.ajouter_dependance(31);
190     p45.ajouter_dependance(1);p45.ajouter_dependance(31);p45.ajouter_dependance(49);
191     p46.ajouter_dependance(1);p46.ajouter_dependance(31);p46.ajouter_dependance(49);
192     p49.ajouter_dependance(1);p49.ajouter_dependance(19);p49.ajouter_dependance(51);p49.ajouter_dependance(5);
193     p51.ajouter_dependance(1);p51.ajouter_dependance(10);p51.ajouter_dependance(53);
194 francois 790 p53.ajouter_dependance(1);p53.ajouter_dependance(5);p53.ajouter_dependance(7);p53.ajouter_dependance(19);p53.ajouter_dependance(63);p53.ajouter_dependance(64);p53.ajouter_dependance(65);p53.ajouter_dependance(66);p53.ajouter_dependance(84);p53.ajouter_dependance(85);p53.ajouter_dependance(88);p53.ajouter_dependance(89);p53.ajouter_dependance(99);p53.ajouter_dependance(100);p53.ajouter_dependance(101);
195 francois 469 p55.ajouter_dependance(1);
196 francois 475 p56.ajouter_dependance(1);p56.ajouter_dependance(19);
197 francois 514 p57.ajouter_dependance(1);p57.ajouter_dependance(19);p57.ajouter_dependance(59);
198     p59.ajouter_dependance(1);p59.ajouter_dependance(19);p59.ajouter_dependance(59);
199 francois 517 p61.ajouter_dependance(1);p61.ajouter_dependance(5);p61.ajouter_dependance(19);
200 francois 628 p66.ajouter_dependance(1);p66.ajouter_dependance(31);p66.ajouter_dependance(68);p66.ajouter_dependance(69);p66.ajouter_dependance(70);p66.ajouter_dependance(71);
201     p71.ajouter_dependance(1);p71.ajouter_dependance(73);p71.ajouter_dependance(68);p71.ajouter_dependance(69);p71.ajouter_dependance(19);p71.ajouter_dependance(5);
202     p73.ajouter_dependance(1);p73.ajouter_dependance(5);p73.ajouter_dependance(40);p73.ajouter_dependance(41);p73.ajouter_dependance(43);p73.ajouter_dependance(44);
203 francois 789 p75.ajouter_dependance(1);p75.ajouter_dependance(5);p75.ajouter_dependance(19);p75.ajouter_dependance(77);p75.ajouter_dependance(78);p75.ajouter_dependance(79);p75.ajouter_dependance(80);p75.ajouter_dependance(81);p75.ajouter_dependance(91);p75.ajouter_dependance(92);p75.ajouter_dependance(93);p75.ajouter_dependance(102);
204 francois 702 p81.ajouter_dependance(1);p81.ajouter_dependance(5);p81.ajouter_dependance(31);p81.ajouter_dependance(83);
205 francois 712 p85.ajouter_dependance(1);p85.ajouter_dependance(31);p85.ajouter_dependance(87);
206 francois 763 p93.ajouter_dependance(1);p93.ajouter_dependance(31);p93.ajouter_dependance(49);
207     p94.ajouter_dependance(1);p94.ajouter_dependance(31);p94.ajouter_dependance(49);
208     p95.ajouter_dependance(1);p95.ajouter_dependance(31);p95.ajouter_dependance(49);
209     p96.ajouter_dependance(1);p96.ajouter_dependance(31);p96.ajouter_dependance(49);
210 francois 796 p102.ajouter_dependance(1);p102.ajouter_dependance(31);p102.ajouter_dependance(87);p102.ajouter_dependance(104);
211 francois 843 p104.ajouter_dependance(1);p104.ajouter_dependance(19);
212 francois 880 p105.ajouter_dependance(1);p105.ajouter_dependance(107);
213 francois 432 lst.push_back(p1);
214     lst.push_back(p2);
215     lst.push_back(p3);
216     lst.push_back(p4);
217     lst.push_back(p5);
218     lst.push_back(p6);
219     lst.push_back(p7);
220     lst.push_back(p8);
221     lst.push_back(p9);
222     lst.push_back(p10);
223     lst.push_back(p11);
224     lst.push_back(p12);
225     lst.push_back(p13);
226     lst.push_back(p14);
227     lst.push_back(p15);
228     lst.push_back(p16);
229     lst.push_back(p17);
230     lst.push_back(p18);
231     lst.push_back(p19);
232     lst.push_back(p20);
233     lst.push_back(p21);
234     lst.push_back(p22);
235     lst.push_back(p23);
236     lst.push_back(p24);
237     lst.push_back(p25);
238     lst.push_back(p26);
239     lst.push_back(p27);
240     lst.push_back(p28);
241     lst.push_back(p29);
242     lst.push_back(p30);
243     lst.push_back(p31);
244     lst.push_back(p32);
245     lst.push_back(p33);
246     lst.push_back(p34);
247     lst.push_back(p35);
248     lst.push_back(p36);
249     lst.push_back(p37);
250     lst.push_back(p38);
251     lst.push_back(p39);
252     lst.push_back(p40);
253     lst.push_back(p41);
254     lst.push_back(p42);
255     lst.push_back(p43);
256     lst.push_back(p44);
257     lst.push_back(p45);
258     lst.push_back(p46);
259     lst.push_back(p47);
260     lst.push_back(p48);
261     lst.push_back(p49);
262     lst.push_back(p50);
263     lst.push_back(p51);
264     lst.push_back(p52);
265     lst.push_back(p53);
266 francois 454 lst.push_back(p54);
267 francois 469 lst.push_back(p55);
268 francois 475 lst.push_back(p56);
269 francois 514 lst.push_back(p57);
270     lst.push_back(p58);
271     lst.push_back(p59);
272 francois 516 lst.push_back(p60);
273 francois 517 lst.push_back(p61);
274 mejrim 597 lst.push_back(p62);
275     lst.push_back(p63);
276 francois 603 lst.push_back(p64);
277     lst.push_back(p65);
278 francois 604 lst.push_back(p66);
279     lst.push_back(p67);
280     lst.push_back(p68);
281     lst.push_back(p69);
282     lst.push_back(p70);
283 francois 628 lst.push_back(p71);
284     lst.push_back(p72);
285     lst.push_back(p73);
286 francois 697 lst.push_back(p74);
287     lst.push_back(p75);
288     lst.push_back(p76);
289     lst.push_back(p77);
290     lst.push_back(p78);
291     lst.push_back(p79);
292 francois 698 lst.push_back(p80);
293 francois 702 lst.push_back(p81);
294     lst.push_back(p82);
295 francois 706 lst.push_back(p83);
296     lst.push_back(p84);
297 francois 712 lst.push_back(p85);
298     lst.push_back(p86);
299 couturad 719 lst.push_back(p87);
300     lst.push_back(p88);
301 francois 757 lst.push_back(p89);
302     lst.push_back(p90);
303     lst.push_back(p91);
304     lst.push_back(p92);
305 francois 763 lst.push_back(p93);
306     lst.push_back(p94);
307     lst.push_back(p95);
308     lst.push_back(p96);
309 sattarpa 784 lst.push_back(p97);
310 francois 786 lst.push_back(p98);
311     lst.push_back(p99);
312     lst.push_back(p100);
313 francois 789 lst.push_back(p101);
314 francois 796 lst.push_back(p102);
315     lst.push_back(p103);
316 francois 843 lst.push_back(p104);
317 francois 880 lst.push_back(p105);
318     lst.push_back(p106);
319 francois 432 MAGIC_APPLICATION app((char*)"Operation dans l'environnement MAGiC",argc,argv,lst,true,false);
320     char nomfichier[3000];
321     char* p;
322     if (app.get_action()!=48)
323     {
324     if (app.get_erreur()==true) return 0;
325 francois 748 if ((app.get_action()!=82) && (app.get_action()!=54)&& (app.get_action()!=6))
326 francois 702 {
327     app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
328     p=strrchr(nomfichier,'.');
329     }
330 francois 432 }
331     char chaine[1000];for (int i=0;i<1000;i++) chaine[i]=0;
332     if (app.get_action()==2)
333     {
334     bool desactivedeforme;
335     app.recupere_parametre_bool_avec_defaut(4,desactivedeforme,false);
336 francois 454 bool corres;
337     app.recupere_parametre_bool_avec_defaut(55,corres,false);
338 francois 432 if (app.get_erreur()==true) return 0;
339     char mess[2000];
340     sprintf(mess,"Conversion MAGiC vers GMSH");
341     app.affiche(mess);
342 francois 283 MG_FILE gest(nomfichier);
343     int nb=gest.get_nb_mg_maillage();
344     for (int i=0;i<nb;i++)
345     {
346     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
347     unsigned long id=mai->get_id();
348     strncpy(chaine,nomfichier,p-nomfichier);
349     char chaine2[3000];
350     sprintf(chaine2,"%s%lu",chaine,id);
351     std::string namefic=chaine2;
352     MG_EXPORT exp;
353 francois 339 sprintf(mess," Maillage geometrique : creation de %s.msh",namefic.c_str());
354 francois 432 app.affiche(mess);
355 francois 454 if (corres==false) exp.gmsh(mai,namefic); else exp.gmsh_avec_correspondance(mai,namefic);
356     }
357 francois 283 nb=gest.get_nb_fem_maillage();
358     for (int i=0;i<nb;i++)
359     {
360     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
361 francois 432 if (desactivedeforme) mai->desactive_deforme();
362 gervaislavoie 304 unsigned long id=mai->get_id();
363 francois 283 strncpy(chaine,nomfichier,p-nomfichier);
364     char chaine2[3000];
365     sprintf(chaine2,"%s%lu",chaine,id);
366     std::string namefic=chaine2;
367     MG_EXPORT exp;
368 francois 331 sprintf(mess," Maillage EF : Creation de %s.msh",namefic.c_str());
369 francois 432 app.affiche(mess);
370 francois 454 if (corres==false) exp.gmsh(mai,namefic); else exp.gmsh_avec_correspondance(mai,namefic);
371 francois 283 }
372     }
373 francois 432 if (app.get_action()==4)
374 francois 331 {
375 francois 432 char fichierout[2000];
376     app.recupere_parametre_string(5,fichierout,(char*)"Fichier sortant manquant");
377     if (app.get_erreur()==true) return 0;
378     char mess[2000];
379     sprintf(mess,"Copie de fichier MAGiC");
380     app.affiche(mess);
381 francois 331 MG_FILE gest(nomfichier);
382     gest.enregistrer(fichierout);
383 francois 432 }
384     if (app.get_action()==6)
385 francois 283 {
386 francois 432 char mess[500];
387     char coderesu[10];
388 francois 706 char nomparam[500];
389 francois 748 bool creeparam;
390 francois 706 app.recupere_parametre_string_avec_defaut(7,coderesu,(char*)"11111111");
391 francois 748 app.recupere_parametre_bool_avec_defaut(85,creeparam,false);
392     if (!creeparam) app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
393     if (!creeparam) app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
394 francois 706 app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
395 francois 748 if (app.get_erreur()==true) return 0;
396     if (creeparam)
397     {
398     char mess[500];
399     sprintf(mess," Calcul ASTER\n\nCréation d'un fichier parametre\n");
400     app.affiche(mess);
401     MG_EXPORT exp;
402     exp.ecrire_params_aster(nomparam);
403     }
404     else
405     {
406 francois 432 sprintf(mess,"Conversion MAGiC vers code ASTER");
407     app.affiche(mess);
408 francois 283 MG_FILE gest(nomfichier);
409     int nb=gest.get_nb_fem_maillage();
410     for (int i=0;i<nb;i++)
411     {
412     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
413 francois 748 MG_GEOMETRIE* geo=mai->get_mg_geometrie();
414 francois 283 unsigned long id=mai->get_id();
415 francois 748 p=strrchr(nomfichier,'.');
416     strncpy(chaine,nomfichier,p-nomfichier);
417 francois 283 char chaine2[3000];
418     sprintf(chaine2,"%s%lu",chaine,id);
419     std::string namefic=chaine2;
420     MG_EXPORT exp;
421 francois 706 exp.lire_params_aster(nomparam);
422 francois 748 exp.aster(geo,mai,namefic,MAGIC::CALCUL_ASTER::ELASTIQUE,coderesu);
423 francois 283 }
424 francois 748
425     }
426 francois 283 }
427 francois 432 if (app.get_action()==8)
428 francois 283 {
429 francois 432 if (app.get_erreur()==true) return 0;
430     char mess[500];
431 francois 505 sprintf(mess," Conversion carte de taille ancienne version vers GMSH");
432 francois 432 app.affiche(mess);
433     FCT_GENERATEUR_3D<4> carte;
434 francois 283 carte.lire(nomfichier);
435     strncpy(chaine,nomfichier,p-nomfichier);
436     std::string namefic=chaine;
437 francois 492 FCT_EXPORT exp;
438 francois 283 exp.gmsh(&carte,namefic);
439 francois 432 }
440     #ifdef BREP_STEP
441     if (app.get_action()==9)
442 francois 283 {
443 francois 432 double unite;
444     app.recupere_parametre_double_avec_defaut(10,unite,1.);
445     if (app.get_erreur()==true) return 0;
446     char mess[500];
447     sprintf(mess," Conversion STEP vers MAGiC");
448     app.affiche(mess);
449 francois 283 STEP_IMPORT stepimport;
450     MG_GESTIONNAIRE gest;
451     stepimport.importer(gest,nomfichier) ;
452     strncpy(chaine,nomfichier,p-nomfichier);
453     std::string namefic=chaine;
454     namefic=namefic + ".magic";
455     int nb=gest.get_nb_mg_geometrie();
456     for (int i=0;i<nb;i++)
457     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
458     gest.enregistrer(namefic.c_str());
459     }
460 francois 432 #endif
461     #ifdef BREP_OCC
462     if (app.get_action()==11)
463 francois 283 {
464 francois 652 double eps,eps2;
465 francois 432 bool importstl,importtriangulation;
466     app.recupere_parametre_double_avec_defaut(13,eps,0.000001);
467     app.recupere_parametre_double_avec_defaut(14,eps2,1.);
468     app.recupere_parametre_bool_avec_defaut(15,importstl,false);
469     app.recupere_parametre_bool_avec_defaut(16,importtriangulation,false);
470     if (app.get_erreur()==true) return 0;
471     int importtri=0;
472     if (importstl) importtri=1;
473     if (importtriangulation) importtri=2;
474     char mess[500];
475     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
476     app.affiche(mess);
477 francois 283 MG_GESTIONNAIRE gest;
478 francois 432 OCC_IMPORT occimport;
479 francois 652 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,eps) ;
480 francois 432 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
481 francois 283 strncpy(chaine,nomfichier,p-nomfichier);
482     std::string namefic=chaine;
483     namefic=namefic + ".magic";
484     gest.enregistrer(namefic.c_str());
485     }
486 francois 432 #endif
487     #ifdef BREP_SAT
488     if (app.get_action()==12)
489 francois 283 {
490 francois 432 double unite;
491     app.recupere_parametre_double_avec_defaut(10,unite,1.);
492     if (app.get_erreur()==true) return 0;
493     char mess[500];
494     sprintf(mess," Conversion SAT vers MAGiC");
495     app.affiche(mess);
496 francois 283 MG_GESTIONNAIRE gest;
497 francois 432 ACIS_IMPORT acisimport;
498     acisimport.importer(gest,nomfichier) ;
499 francois 283 strncpy(chaine,nomfichier,p-nomfichier);
500     std::string namefic=chaine;
501     namefic=namefic + ".magic";
502     int nb=gest.get_nb_mg_geometrie();
503     for (int i=0;i<nb;i++)
504     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
505     gest.enregistrer(namefic.c_str());
506     }
507 francois 432 #endif
508     #ifdef BREP_OCC
509     if (app.get_action()==17)
510 francois 283 {
511 francois 652 double eps,eps2;
512 francois 432 bool importstl,importtriangulation;
513     app.recupere_parametre_double_avec_defaut(13,eps,0.000001);
514     app.recupere_parametre_double_avec_defaut(14,eps2,1.);
515     app.recupere_parametre_bool_avec_defaut(15,importstl,false);
516     app.recupere_parametre_bool_avec_defaut(16,importtriangulation,false);
517     if (app.get_erreur()==true) return 0;
518     int importtri=0;
519     if (importstl) importtri=1;
520     if (importtriangulation) importtri=2;
521     char mess[500];
522     sprintf(mess," Conversion OpenCascade vers MAGiC");
523     app.affiche(mess);
524 francois 283 MG_GESTIONNAIRE gest;
525     OCC_IMPORT occimport;
526 francois 652 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,eps) ;
527 francois 283 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
528     strncpy(chaine,nomfichier,p-nomfichier);
529     std::string namefic=chaine;
530     namefic=namefic + ".magic";
531     gest.enregistrer(namefic.c_str());
532 francois 432 }
533 francois 283 #endif
534 francois 432 if (app.get_action()==18)
535 francois 283 {
536 francois 432 int degre,nummai;
537 francois 656 bool analyse;
538 sattarpa 784 bool optno;
539 francois 828 char fichierout[2000];
540     app.recupere_parametre_string_avec_defaut(5,fichierout,nomfichier);
541 francois 432 app.recupere_parametre_int_avec_defaut(19,nummai,0);
542     app.recupere_parametre_int(20,degre,(char*)"Degré du maillage manquant");
543 francois 656 app.recupere_parametre_bool_avec_defaut(75,analyse,false);
544 sattarpa 784 app.recupere_parametre_bool_avec_defaut(98,optno,false);
545 francois 432 if (app.get_erreur()==true) return 0;
546     char mess[500];
547 francois 283 sprintf(mess," Creation d'un maillage FEM");
548 francois 432 app.affiche(mess);
549 francois 283 MG_FILE gest(nomfichier);
550 francois 432 MG_MAILLAGE* mai;
551     if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
552 francois 283 FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
553     gest.ajouter_fem_maillage(fem);
554 francois 786 if (!optno) fem->construire(0); else fem->construire(1);
555 francois 828 gest.enregistrer(fichierout);
556 francois 656 if (analyse==true)
557 francois 828 {
558     MAILLEUR_ANALYSE m3d(fem);
559     m3d.active_affichage(app.affiche);
560     m3d.analyse();
561     }
562     /*if (degre==2)
563 francois 612 {
564     //char message [5000];
565     FEM_MAILLAGE_QUADRATIQUE_OUTILS ou ;
566     double moy=ou.get_distortion_moy(fem);
567     double min=ou.get_distortion_min (fem);
568     int nb=ou.get_nombre_elements_invalides(fem);
569     sprintf(mess," maillage quadratique :");
570     app.affiche(mess);
571     sprintf(mess," ");
572     app.affiche(mess);
573     sprintf(mess," distorsion moy %f ",moy);
574     app.affiche(mess);
575     sprintf(mess," distorsion min %f ",min);
576     app.affiche(mess);
577     sprintf(mess," nombre elements invalides %d ",nb);
578     app.affiche(mess);
579 francois 828 }*/
580 francois 612
581    
582 francois 432 }
583     if (app.get_action()==21)
584 francois 283 {
585 francois 432 int nummai;
586     char fichieraster[500];
587 francois 757 int base;
588 francois 432 app.recupere_parametre_int_avec_defaut(19,nummai,0);
589 francois 535 app.recupere_parametre_string(22,fichieraster,(char*)"Fichier aster manquant");
590 francois 757 app.recupere_parametre_int_avec_defaut(90,base,10);
591 francois 432 if (app.get_erreur()==true) return 0;
592     char mess[500];
593 francois 283 sprintf(mess," Importation des résultats ASTER vers MAGIC");
594 francois 432 app.affiche(mess);
595 francois 283 MG_FILE gest(nomfichier);
596 francois 432 FEM_MAILLAGE* mai;
597     if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
598 francois 283 MG_IMPORT imp;
599 francois 757 std::string res=imp.aster(base,mai,fichieraster,nomfichier);
600 francois 691 app.affiche((char*)("\033[1;31m"+res+"\033[1;32m").c_str());
601 francois 283 gest.enregistrer(nomfichier);
602 francois 432 }
603    
604     if (app.get_action()==23)
605 francois 283 {
606 francois 706
607 francois 283 }
608 francois 432 if (app.get_action()==24)
609 francois 283 {
610 francois 432 int nummai;
611     char fichieroptis[500];
612     char fichierflottant[500];
613     double niveau,seuil;
614     app.recupere_parametre_int_avec_defaut(19,nummai,0);
615     app.recupere_parametre_string(25,fichieroptis,(char*)"Fichier OPTIS manquant");
616     app.recupere_parametre_string_avec_defaut(26,fichieroptis,(char*)"");
617     app.recupere_parametre_double(27,seuil,(char*)"Seuil manquant");
618     app.recupere_parametre_double(28,niveau,(char*)"Niveau manquant");
619     if (app.get_erreur()==true) return 0;
620     char mess[500];
621     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
622     app.affiche(mess);
623 francois 283 MG_FILE gest(nomfichier);
624 francois 432 FEM_MAILLAGE* mai;
625     if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
626 francois 283 MG_IMPORT imp;
627 francois 432 int flottant=0;
628     if (strlen(fichierflottant)>0) flottant=1;
629 francois 283 imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
630     gest.enregistrer(nomfichier);
631 francois 432 }
632    
633     if (app.get_action()==29)
634 francois 283 {
635 francois 432 int numgeo,numgt,numentite;
636     bool expand;
637     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
638     app.recupere_parametre_int_avec_defaut(32,numgt,0);
639     app.recupere_parametre_int(33,numentite,(char*)"Numéro d'entité manquant");
640     app.recupere_parametre_bool_avec_defaut(34,expand,false);
641     if (app.get_erreur()==true) return 0;
642     char mess[500];
643     sprintf(mess," Selection de groupe topologique");
644     app.affiche(mess);
645 francois 283 MG_FILE gest(nomfichier);
646 francois 432 MG_GEOMETRIE* mggeo;
647     if (numgeo==0) mggeo=gest.get_mg_geometrie(numgeo); else mggeo=gest.get_mg_geometrieid(numgeo);
648 francois 283 MG_GROUPE_TOPOLOGIQUE* mggt;
649     if (numgt==0)
650     {
651     mggt=new MG_GROUPE_TOPOLOGIQUE;
652     mggeo->ajouter_mg_groupe_topologique(mggt);
653     }
654     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
655     MG_ELEMENT_TOPOLOGIQUE* ele;
656     ele=mggeo->get_mg_sommetid(numentite);
657     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
658     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
659     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
660     if (ele!=NULL)
661     {
662     mggt->ajouter(ele);
663     if (expand)
664     {
665     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
666     ele->get_topologie_sousjacente(&lst);
667     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
668     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
669     mggt->ajouter(ele2);
670     }
671     }
672     gest.enregistrer(nomfichier);
673     }
674 francois 432 if (app.get_action()==30)
675 francois 283 {
676 francois 432 int numgeo,numgt,numentite;
677     bool expand;
678     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
679     app.recupere_parametre_int_avec_defaut(32,numgt,0);
680     app.recupere_parametre_int(33,numentite,(char*)"Numéro d'entité manquant");
681     app.recupere_parametre_bool_avec_defaut(34,expand,false);
682     if (app.get_erreur()==true) return 0;
683     char mess[500];
684     sprintf(mess," Deselection de groupe topologique");
685     app.affiche(mess);
686 francois 283 MG_FILE gest(nomfichier);
687     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
688     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
689     MG_ELEMENT_TOPOLOGIQUE* ele;
690     ele=mggeo->get_mg_sommetid(numentite);
691     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
692     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
693     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
694     if (ele!=NULL)
695     {
696     mggt->supprimer(ele);
697     if (expand)
698     {
699     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
700     ele->get_topologie_sousjacente(&lst);
701     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
702     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
703     mggt->supprimer(ele2);
704     }
705     }
706     gest.enregistrer(nomfichier);
707 francois 432 }
708    
709     if (app.get_action()==35)
710 francois 283 {
711 francois 432 int nummai;
712     double angle;
713     char fichierlog[500];
714 francois 477 strcpy(fichierlog,"");
715 francois 432 app.recupere_parametre_int_avec_defaut(19,nummai,-1);
716     app.recupere_parametre_double_avec_defaut(36,angle,0.03);
717     app.recupere_parametre_string_avec_defaut(37,fichierlog,(char*)fichierlog);
718     if (app.get_erreur()==true) return 0;
719     char mess[500];
720     sprintf(mess," Contenu d'un fichier MAGIC");
721     app.affiche(mess);
722 francois 283 MG_FILE gest(nomfichier);
723 francois 425 if (nummai!=-1)
724     {
725     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
726 francois 828 if (mai!=NULL)
727     {
728     MAILLEUR_ANALYSE m3d(mai);
729     m3d.active_affichage(app.affiche);
730     m3d.change_eps_angle_retourne(angle);
731     if (strlen(fichierlog)==0)
732 francois 425 m3d.analyse();
733     else
734     m3d.analyse(fichierlog);
735 francois 828 }
736     else
737     {
738     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
739     if (mai!=NULL)
740     {
741     MAILLEUR_ANALYSE m3d(mai);
742     m3d.active_affichage(app.affiche);
743     m3d.change_eps_angle_retourne(angle);
744     if (strlen(fichierlog)==0)
745     m3d.analyse();
746     else
747     m3d.analyse(fichierlog);
748     }
749    
750     }
751    
752 francois 425 }
753 francois 828
754 francois 425 else
755     {
756     char message [5000];
757 francois 691 int nbarbre=gest.get_nb_mg_arbre();
758     sprintf(message," \033[1;32m%d\033[1;33m arbres :",nbarbre);
759     for (int i=0;i<nbarbre;i++)
760     {
761     MG_ARBRE* arb=gest.get_mg_arbre(i);
762     sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,arb->get_id());
763     }
764     app.affiche(message);
765     for (int i=0;i<nbarbre;i++)
766     {
767     MG_ARBRE* arb=gest.get_mg_arbre(i);
768     sprintf(message," arbre \033[1;31m%lu\033[1;33m",arb->get_id());
769     app.affiche(message);
770 francois 742 int nbass=arb->get_nb_mg_assemblage();
771     sprintf(message," \033[1;32m%d\033[1;33m assemblages",nbass);
772     app.affiche(message);
773 francois 691 int nbprim=arb->get_nb_mg_primitive();
774     sprintf(message," \033[1;32m%d\033[1;33m primitives",nbprim);
775     //for (int i=0;i<nbprim;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,arb->get_mg_primitive(i)->get_id());
776     app.affiche(message);
777     int nbope=arb->get_nb_mg_operateur_boolean();
778     sprintf(message," \033[1;32m%d\033[1;33m operateurs booleans",nbope);
779     app.affiche(message);
780     }
781     int nbgeo=gest.get_nb_mg_geometrie();
782     sprintf(message," \033[1;32m%d\033[1;33m geometries :",nbgeo);
783 francois 283 for (int i=0;i<nbgeo;i++)
784     {
785     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
786 francois 691 sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,geo->get_id());
787 francois 283 }
788 francois 432 app.affiche(message);
789 francois 283 for (int i=0;i<nbgeo;i++)
790     {
791     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
792 francois 691 sprintf(message," geometrie \033[1;31m%lu\033[1;33m",geo->get_id());
793 francois 432 app.affiche(message);
794 francois 283 int nbmg=geo->get_nb_mg_groupe_topologique();
795 francois 691 sprintf(message," \033[1;32m%d\033[1;33m groupe topologique",nbmg);
796 francois 283 for (int j=0;j<nbmg;j++)
797     {
798     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
799 francois 691 sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,mggp->get_id());
800 francois 283 }
801 francois 432 app.affiche(message);
802 francois 299 int nbvolume=geo->get_nb_mg_volume();
803 francois 691 if (nbvolume==0) sprintf(message," \033[1;32m%d\033[1;33m volumes",geo->get_nb_mg_volume());
804     else sprintf(message," \033[1;32m%d\033[1;33m volumes : ",geo->get_nb_mg_volume());
805     for (int i=0;i<nbvolume;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_volume(i)->get_id());
806 francois 432 app.affiche(message);
807 francois 299 int nbcoque=geo->get_nb_mg_coque();
808 francois 691 if (nbcoque==0) sprintf(message," \033[1;32m%d\033[1;33m coques",geo->get_nb_mg_coque());
809     else sprintf(message," \033[1;32m%d\033[1;33m coques : ",geo->get_nb_mg_coque());
810     for (int i=0;i<nbcoque;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_coque(i)->get_id());
811 francois 432 app.affiche(message);
812 francois 299 int nbpoutre=geo->get_nb_mg_poutre();
813 francois 691 if (nbpoutre==0) sprintf(message," \033[1;32m%d\033[1;33m poutres",geo->get_nb_mg_poutre());
814     else sprintf(message," \033[1;32m%d\033[1;33m poutres : ",geo->get_nb_mg_poutre());
815     for (int i=0;i<nbpoutre;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_poutre(i)->get_id());
816 francois 432 app.affiche(message);
817 francois 691 sprintf(message," \033[1;32m%d\033[1;33m coquilles",geo->get_nb_mg_coquille());
818 francois 432 app.affiche(message);
819 francois 691 sprintf(message," \033[1;32m%d\033[1;33m faces",geo->get_nb_mg_face());
820 francois 432 app.affiche(message);
821 francois 691 sprintf(message," \033[1;32m%d\033[1;33m aretes",geo->get_nb_mg_arete());
822 francois 432 app.affiche(message);
823 francois 691 sprintf(message," \033[1;32m%d\033[1;33m sommets",geo->get_nb_mg_sommet());
824 francois 432 app.affiche(message);
825 francois 716 int nbgef=geo->get_nb_mg_geom_fonction();
826     if (nbgef==0) sprintf(message," \033[1;32m%d\033[1;33m fonctions geometriques",nbgef);
827     else sprintf(message," \033[1;32m%d\033[1;33m fonctions geometriques : ",nbgef);
828     for (int i=0;i<nbgef;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_geom_fonction(i)->get_id());
829     app.affiche(message);
830 francois 283
831     }
832     int nbmai=gest.get_nb_mg_maillage();
833 francois 691 sprintf(message," \033[1;32m%d\033[1;33m maillage geometrique :",nbmai);
834 francois 432 app.affiche(message);
835 francois 283 for (int i=0;i<nbmai;i++)
836     {
837     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
838 francois 691 sprintf(message," maillage geometrique \033[1;31m%lu\033[1;33m ",mai->get_id());
839 francois 432 app.affiche(message);
840 francois 691 sprintf(message," \033[1;32m%d\033[1;33m noeuds",mai->get_nb_mg_noeud());
841 francois 432 app.affiche(message);
842 francois 691 sprintf(message," \033[1;32m%d\033[1;33m segments",mai->get_nb_mg_segment());
843 francois 432 app.affiche(message);
844 francois 691 sprintf(message," \033[1;32m%d\033[1;33m triangles",mai->get_nb_mg_triangle());
845 francois 432 app.affiche(message);
846 francois 691 sprintf(message," \033[1;32m%d\033[1;33m quadrangles",mai->get_nb_mg_quadrangle());
847 francois 674 app.affiche(message);
848 francois 691 sprintf(message," \033[1;32m%d\033[1;33m tetras",mai->get_nb_mg_tetra());
849 francois 432 app.affiche(message);
850 francois 691 sprintf(message," \033[1;32m%d\033[1;33m hexas",mai->get_nb_mg_hexa());
851 francois 674 app.affiche(message);
852 francois 880 sprintf(message," \033[1;32m%d\033[1;33m pentas",mai->get_nb_mg_penta());
853     app.affiche(message);
854 francois 283 }
855     int nbmaif=gest.get_nb_fem_maillage();
856 francois 691 sprintf(message," \033[1;32m%d\033[1;33m maillage FEM :",nbmaif);
857 francois 432 app.affiche(message);
858 francois 283 for (int i=0;i<nbmaif;i++)
859     {
860     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
861 francois 748 sprintf(message," maillage FEM \033[1;31m%lu\033[1;33m ",maif->get_id());
862 francois 432 app.affiche(message);
863 francois 691 sprintf(message," \033[1;32m%d\033[1;33m noeuds",maif->get_nb_fem_noeud());
864 francois 432 app.affiche(message);
865 francois 691 sprintf(message," \033[1;32m%d\033[1;33m elements 1D",maif->get_nb_fem_element1());
866 francois 432 app.affiche(message);
867 francois 691 sprintf(message," \033[1;32m%d\033[1;33m elements 2D",maif->get_nb_fem_element2());
868 francois 432 app.affiche(message);
869 francois 691 sprintf(message," \033[1;32m%d\033[1;33m elements 3D",maif->get_nb_fem_element3());
870 francois 432 app.affiche(message);
871 francois 325 double rx,ry,rz;
872     maif->calcul_somme_reaction(rx,ry,rz);
873 francois 867 sprintf(message," Reactions : \n Rx=\033[1;31m%le\033[1;33m\n Ry=\033[1;31m%le\033[1;33m\n Rz=\033[1;31m%le\033[1;33m",rx,ry,rz);
874 francois 432 app.affiche(message);
875 francois 325
876 francois 283 }
877     int nbsol=gest.get_nb_mg_solution();
878 francois 691 sprintf(message," \033[1;32m%d\033[1;33m solution maillage geometrique :",nbsol);
879     app.affiche(message);
880     message[0]=0;
881     for (int i=0;i<nbsol;i++)
882 francois 283 {
883     MG_SOLUTION* sol=gest.get_mg_solution(i);
884 francois 628 char legende[500];
885 francois 691 legende[0]=0;
886     message[0]=0;
887 francois 628 for (int j=0;j<sol->get_nb_champ();j++)
888     sprintf(legende,"%s%s_%s ",legende,(char*)sol->get_nom().c_str(),(char*)sol->get_legende(j).c_str());
889 francois 691 sprintf(message," \033[1;31m%lu(%s)\033[1;33m ",sol->get_id(),legende);
890 francois 628 app.affiche(message);
891 francois 283 }
892     int nbsolf=gest.get_nb_fem_solution();
893 francois 691 sprintf(message," \033[1;32m%d\033[1;33m solution maillage FEM :",nbsolf);
894 francois 628 app.affiche(message);
895 francois 660 message[0]=0;
896     for (int i=0;i<nbsolf;i++)
897 francois 283 {
898 francois 628 FEM_SOLUTION* sol=gest.get_fem_solution(i);
899     char legende[500];
900 francois 670 legende[0]=0;
901 francois 660 message[0]=0;
902 francois 628 for (int j=0;j<sol->get_nb_champ();j++)
903     sprintf(legende,"%s%s_%s ",legende,(char*)sol->get_nom().c_str(),(char*)sol->get_legende(j).c_str());
904 francois 691 sprintf(message," \033[1;31m%lu(%s)\033[1;33m ",sol->get_id(),legende);
905 francois 628 app.affiche(message);
906     }
907 francois 283 }
908     }
909 francois 432 if (app.get_action()==38)
910 francois 283 {
911 francois 432 int nummai;
912     int numsol1,numsol2,numsol3;
913     int numchamp1,numchamp2,numchamp3;
914 francois 516 double coef;
915 francois 432 app.recupere_parametre_int_avec_defaut(19,nummai,0);
916     app.recupere_parametre_int(40,numsol1,(char*)"Numéro solution 1 manquant");
917     app.recupere_parametre_int(41,numsol2,(char*)"Numéro solution 2 manquant");
918     app.recupere_parametre_int(42,numsol3,(char*)"Numéro solution 3 manquant");
919     app.recupere_parametre_int(43,numchamp1,(char*)"Numéro champs 1 manquant");
920     app.recupere_parametre_int(44,numchamp2,(char*)"Numéro champs 2 manquant");
921     app.recupere_parametre_int(45,numchamp3,(char*)"Numéro champs 3 manquant");
922 francois 516 app.recupere_parametre_double_avec_defaut(61,coef,0.);
923 francois 432 if (app.get_erreur()==true) return 0;
924     char mess[500];
925     sprintf(mess," Calcul de deforme");
926     app.affiche(mess);
927 francois 283 MG_FILE gest(nomfichier);
928 francois 432 FEM_MAILLAGE* mai;
929     if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
930 francois 283 FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
931     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
932     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
933     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
934 francois 516 if (coef>1e-16)
935     {
936     sprintf(mess," Création du maillage deforme");
937     app.affiche(mess);
938     MG_MAILLAGE* mgmai=new MG_MAILLAGE(mai,coef);
939     }
940     sprintf(mess," Enregistrement");
941     app.affiche(mess);
942     gest.enregistrer(nomfichier);
943 francois 283 }
944 francois 432 if (app.get_action()==39)
945 francois 283 {
946 francois 432 int numgeo;
947     app.recupere_parametre_int_avec_defaut (31,numgeo,0);
948     if (app.get_erreur()==true) return 0;
949     char mess[500];
950     sprintf(mess," Fusion de géométrie");
951     app.affiche(mess);
952 francois 283 MG_FILE gest(nomfichier);
953 francois 432 MG_GEOMETRIE* mggeo;
954     if (numgeo==0) mggeo=gest.get_mg_geometrie(numgeo); else mggeo=gest.get_mg_geometrieid(numgeo);
955 francois 283 VCT_MULTI_MODELE fusion(mggeo);
956     fusion.recherche_identite();
957     gest.enregistrer(nomfichier);
958 francois 432 }
959     if ((app.get_action()==46) || (app.get_action()==47))
960 francois 283 {
961 francois 432 int numgeo;
962     char ccf[500];
963     app.recupere_parametre_int_avec_defaut (31,numgeo,0);
964     app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
965     if (app.get_erreur()==true) return 0;
966     char mess[500];
967     sprintf(mess," Selection de condition aux limites");
968 francois 296 unsigned long identity;
969     char typeccf[3];
970 francois 788 char effortsuiv[3]={'N','S',0};
971 gervaislavoie 318 typeccf[2]=0;
972 gervaislavoie 302 double valccf=0.5; // Valeur par défaut
973 francois 788 sscanf(ccf,"%lu:%c%c:%le:%c%c\n",&identity,&typeccf[0],&typeccf[1],&valccf,&effortsuiv[0],&effortsuiv[1]);
974 francois 296 MC_GESTIONNAIRE mcgest;
975     int res=mcgest.existe(typeccf);
976     if (res==0)
977     {
978     sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
979 francois 432 app.affiche(mess);
980 francois 296 return 0;
981     }
982 francois 788 std::string effortsuivstr=effortsuiv;
983     if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
984     {
985     sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
986     app.affiche(mess);
987     return 0;
988     }
989 francois 296 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
990 francois 432 app.affiche(mess);
991 francois 292 MG_FILE gest(nomfichier);
992 francois 432 MG_GEOMETRIE* geo;
993     if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
994 francois 292 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
995 francois 296 MG_VOLUME* ele;
996     ele=geo->get_mg_volumeid(identity);
997 francois 292 if (ele!=NULL) liste.ajouter(ele);
998 francois 296 else
999     {
1000     MG_COQUE* ele;
1001     ele=geo->get_mg_coqueid(identity);
1002     if (ele!=NULL) liste.ajouter(ele);
1003     else
1004 francois 292 {
1005 francois 296 MG_POUTRE* ele;
1006     ele=geo->get_mg_poutreid(identity);
1007 francois 292 if (ele!=NULL) liste.ajouter(ele);
1008     else
1009 francois 296 {
1010     MG_FACE* ele;
1011     ele=geo->get_mg_faceid(identity);
1012     if (ele!=NULL) liste.ajouter(ele);
1013     else
1014     {
1015     MG_ARETE* ele;
1016     ele=geo->get_mg_areteid(identity);
1017     if (ele!=NULL) liste.ajouter(ele);
1018     else
1019     {
1020     MG_SOMMET* ele;
1021     ele=geo->get_mg_sommetid(identity);
1022     if (ele!=NULL) liste.ajouter(ele);
1023     }
1024     }
1025     }
1026 francois 292 }
1027 francois 296 }
1028 francois 432 if (app.get_action()==47)
1029 francois 292 {
1030     int nb=liste.get_nb();
1031     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1032     }
1033     int nb=liste.get_nb();
1034 francois 788 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,effortsuiv);
1035 francois 292 gest.enregistrer(nomfichier);
1036 francois 432 }
1037 francois 763 if ((app.get_action()==94) || (app.get_action()==95))
1038     {
1039     int numgeo;
1040     char ccf[500];
1041     app.recupere_parametre_int_avec_defaut (31,numgeo,0);
1042     app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
1043     if (app.get_erreur()==true) return 0;
1044     char mess[500];
1045     sprintf(mess," Selection de condition aux limites");
1046     unsigned long identity;
1047     char typeccf[3];
1048 francois 788 char effortsuiv[3]={'N','S',0};
1049 francois 763 typeccf[2]=0;
1050     unsigned long valccf=0; // Valeur par défaut
1051 francois 788 sscanf(ccf,"%lu:%c%c:%lu:%c%c\n",&identity,&typeccf[0],&typeccf[1],&valccf,&effortsuiv[0],&effortsuiv[1]);
1052 francois 763 MC_GESTIONNAIRE mcgest;
1053     int res=mcgest.existe(typeccf);
1054     if (res==0)
1055     {
1056     sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
1057     app.affiche(mess);
1058     return 0;
1059     }
1060 francois 788 std::string effortsuivstr=effortsuiv;
1061     if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
1062     {
1063     sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
1064     app.affiche(mess);
1065     return 0;
1066     }
1067 francois 763 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
1068     app.affiche(mess);
1069     MG_FILE gest(nomfichier);
1070     MG_GEOMETRIE* geo;
1071     if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1072     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
1073     MG_VOLUME* ele;
1074     ele=geo->get_mg_volumeid(identity);
1075     if (ele!=NULL) liste.ajouter(ele);
1076     else
1077     {
1078     MG_COQUE* ele;
1079     ele=geo->get_mg_coqueid(identity);
1080     if (ele!=NULL) liste.ajouter(ele);
1081     else
1082     {
1083     MG_POUTRE* ele;
1084     ele=geo->get_mg_poutreid(identity);
1085     if (ele!=NULL) liste.ajouter(ele);
1086     else
1087     {
1088     MG_FACE* ele;
1089     ele=geo->get_mg_faceid(identity);
1090     if (ele!=NULL) liste.ajouter(ele);
1091     else
1092     {
1093     MG_ARETE* ele;
1094     ele=geo->get_mg_areteid(identity);
1095     if (ele!=NULL) liste.ajouter(ele);
1096     else
1097     {
1098     MG_SOMMET* ele;
1099     ele=geo->get_mg_sommetid(identity);
1100     if (ele!=NULL) liste.ajouter(ele);
1101     }
1102     }
1103     }
1104     }
1105     }
1106     if (app.get_action()==95)
1107     {
1108     int nb=liste.get_nb();
1109     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1110     }
1111     int nb=liste.get_nb();
1112 francois 788 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,effortsuiv);
1113 francois 763 gest.enregistrer(nomfichier);
1114     }
1115     if ((app.get_action()==96) || (app.get_action()==97))
1116     {
1117     int numgeo;
1118     char ccf[500];
1119     app.recupere_parametre_int_avec_defaut (31,numgeo,0);
1120     app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
1121     if (app.get_erreur()==true) return 0;
1122     char mess[500];
1123     sprintf(mess," Selection de condition aux limites");
1124     unsigned long identity;
1125     char typeccf[3];
1126 francois 788 char effortsuiv[3]={'N','S',0};
1127 francois 763 typeccf[2]=0;
1128     char valccf[500];
1129     char formule[500];
1130 francois 788 sscanf(ccf,"%lu:%c%c:%s:%c%c\n",&identity,&typeccf[0],&typeccf[1],formule,&effortsuiv[0],&effortsuiv[1]);
1131 francois 763 OT_CHAINE ot;
1132     std::vector<std::string> variable=ot.split(formule,':');
1133     strcpy(valccf,variable[0].c_str());
1134     std::vector<std::string> listvariable=ot.split(variable[1].c_str(),',');
1135     MC_GESTIONNAIRE mcgest;
1136     int res=mcgest.existe(typeccf);
1137     if (res==0)
1138     {
1139     sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
1140     app.affiche(mess);
1141     return 0;
1142     }
1143 francois 788 std::string effortsuivstr=effortsuiv;
1144     if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
1145     {
1146     sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
1147     app.affiche(mess);
1148     return 0;
1149     }
1150 francois 763 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
1151     app.affiche(mess);
1152     MG_FILE gest(nomfichier);
1153     MG_GEOMETRIE* geo;
1154     if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1155     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
1156     MG_VOLUME* ele;
1157     ele=geo->get_mg_volumeid(identity);
1158     if (ele!=NULL) liste.ajouter(ele);
1159     else
1160     {
1161     MG_COQUE* ele;
1162     ele=geo->get_mg_coqueid(identity);
1163     if (ele!=NULL) liste.ajouter(ele);
1164     else
1165     {
1166     MG_POUTRE* ele;
1167     ele=geo->get_mg_poutreid(identity);
1168     if (ele!=NULL) liste.ajouter(ele);
1169     else
1170     {
1171     MG_FACE* ele;
1172     ele=geo->get_mg_faceid(identity);
1173     if (ele!=NULL) liste.ajouter(ele);
1174     else
1175     {
1176     MG_ARETE* ele;
1177     ele=geo->get_mg_areteid(identity);
1178     if (ele!=NULL) liste.ajouter(ele);
1179     else
1180     {
1181     MG_SOMMET* ele;
1182     ele=geo->get_mg_sommetid(identity);
1183     if (ele!=NULL) liste.ajouter(ele);
1184     }
1185     }
1186     }
1187     }
1188     }
1189     if (app.get_action()==97)
1190     {
1191     int nb=liste.get_nb();
1192     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1193     }
1194     int nb=liste.get_nb();
1195 francois 788 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,listvariable,effortsuiv);
1196 francois 763 gest.enregistrer(nomfichier);
1197     }
1198 francois 432 if (app.get_action()==48)
1199 francois 296 {
1200 francois 432 char mess[500];
1201 francois 296 sprintf(mess," Liste des conditions aux limites disponibles");
1202 francois 432 app.affiche(mess);
1203 francois 296 MC_GESTIONNAIRE mcgest;
1204     int ok=0;
1205     do
1206     {
1207     std::string code;
1208     std::string description;
1209     int res=mcgest.get_description(code,description);
1210     if (res)
1211     {
1212     sprintf(mess," %s : %s",code.c_str(),description.c_str());
1213 francois 432 app.affiche(mess);
1214 francois 296 }
1215     else ok=1;
1216     }
1217     while (ok==0);
1218 francois 432 }
1219     if (app.get_action()==50)
1220 francois 326 {
1221 francois 432 int numgeo,nummai,numcoque;
1222     char fichierout[500];
1223     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1224     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1225     app.recupere_parametre_int_avec_defaut(51,numcoque,0);
1226     app.recupere_parametre_string_avec_defaut(5,fichierout,nomfichier);
1227     if (app.get_erreur()==true) return 0;
1228     char mess[500];
1229 gervaislavoie 328 sprintf(mess," Orientation d'une coque");
1230 francois 432 app.affiche(mess);
1231 gervaislavoie 328 MG_FILE gest(nomfichier);
1232 francois 432 MG_GEOMETRIE* geo;
1233     if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1234     MG_MAILLAGE* mai;
1235     if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
1236     MG_COQUE* coque;
1237     if (numcoque==0) coque=mai->get_mg_geometrie()->get_mg_coque(numcoque); else coque=mai->get_mg_geometrie()->get_mg_coqueid(numcoque);
1238 gervaislavoie 328 coque->orienter(mai);
1239     gest.enregistrer(fichierout);
1240 francois 432 }
1241     if (app.get_action()==52)
1242 francois 428 {
1243 francois 432 double epsf,unite;
1244     app.recupere_parametre_double_avec_defaut(10,unite,1.);
1245     app.recupere_parametre_double_avec_defaut(53,epsf,0.0001);
1246     if (app.get_erreur()==true) return 0;
1247     char mess[500];
1248     sprintf(mess," Conversion STL vers MAGiC");
1249     app.affiche(mess);
1250     MG_GESTIONNAIRE gest;
1251 francois 428 STL_IMPORT stlimport;
1252 francois 429 stlimport.change_eps(epsf);
1253 francois 428 stlimport.importer(gest,nomfichier) ;
1254     strncpy(chaine,nomfichier,p-nomfichier);
1255     std::string namefic=chaine;
1256     namefic=namefic + ".magic";
1257     int nb=gest.get_nb_mg_geometrie();
1258     for (int i=0;i<nb;i++)
1259     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
1260     gest.enregistrer(namefic.c_str());
1261     }
1262 francois 432 if (app.get_action()==54)
1263 mejrim 597 {
1264 francois 432 int nummai;
1265     char coderesu[10];
1266 francois 706 bool elastique;
1267 couturad 719 bool elastique_gd;
1268     bool plastique;
1269 mejrim 597 bool thermique;
1270 francois 603 bool conplane;
1271     bool defplane;
1272 francois 786 bool rigiditeconplane;
1273     bool rigiditedefplane;
1274 francois 706 bool creeparam;
1275 francois 786 bool rigidite;
1276 francois 706 char nomparam[500];
1277 francois 790 char nomfichierout[500];
1278 francois 432 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1279     app.recupere_parametre_string_avec_defaut(7,coderesu,(char*)"11111111");
1280 francois 706 app.recupere_parametre_bool_avec_defaut(63,elastique,false);
1281 mejrim 597 app.recupere_parametre_bool_avec_defaut(64,thermique,false);
1282 francois 603 app.recupere_parametre_bool_avec_defaut(65,conplane,false);
1283     app.recupere_parametre_bool_avec_defaut(66,defplane,false);
1284 francois 706 app.recupere_parametre_bool_avec_defaut(85,creeparam,false);
1285 couturad 719 app.recupere_parametre_bool_avec_defaut(88,elastique_gd,false);
1286     app.recupere_parametre_bool_avec_defaut(89,plastique,false);
1287 francois 786 app.recupere_parametre_bool_avec_defaut(99,rigidite,false);
1288     app.recupere_parametre_bool_avec_defaut(100,rigiditeconplane,false);
1289     app.recupere_parametre_bool_avec_defaut(101,rigiditedefplane,false);
1290 francois 706 if (!creeparam) app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
1291     app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
1292 francois 791 app.recupere_parametre_string_avec_defaut(5,nomfichierout,nomfichier);
1293 francois 432 if (app.get_erreur()==true) return 0;
1294 francois 706 if (creeparam)
1295     {
1296     char mess[500];
1297     sprintf(mess," Calcul ASTER\n\nCréation d'un fichier parametre\n");
1298     app.affiche(mess);
1299     MG_EXPORT exp;
1300     exp.ecrire_params_aster(nomparam);
1301     }
1302     else
1303     {
1304 francois 432 char mess[500];
1305     sprintf(mess," Calcul ASTER");
1306     app.affiche(mess);
1307     char nometude[1000];
1308 francois 790 char *p=strchr(nomfichierout,'.');
1309     strncpy(nometude,nomfichierout,p-nomfichierout);
1310     nometude[p-nomfichierout]=0;
1311 francois 432 MG_FILE gest(nomfichier);
1312     FEM_MAILLAGE* mai;
1313     if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
1314     MGASTER mgaster;
1315     mgaster.active_affichage(app.affiche);
1316 francois 706 if (elastique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE,coderesu);
1317 francois 786 if (rigidite) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE,coderesu);
1318 francois 706 if (conplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::CONTRAINTE_PLANE,coderesu);
1319     if (defplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::DEFORMATION_PLANE,coderesu);
1320 francois 786 if (rigiditeconplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE_CONTRAINTE_PLANE,coderesu);
1321     if (rigiditedefplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE_DEFORMATION_PLANE,coderesu);
1322 francois 706 if (thermique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::THERMIQUE,(char*)"");
1323 couturad 719 if (elastique_gd) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF,coderesu);
1324     if (plastique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::PLASTIQUE,coderesu);
1325    
1326 francois 706 }
1327 francois 432 }
1328 francois 469 if (app.get_action()==56)
1329     {
1330     if (app.get_erreur()==true) return 0;
1331     char mess[500];
1332 francois 505 sprintf(mess," Conversion carte de taille nouvelle version vers GMSH");
1333 francois 469 app.affiche(mess);
1334     FCT_TAILLE_FEM_SOLUTION carte(nomfichier);
1335     strncpy(chaine,nomfichier,p-nomfichier);
1336     std::string namefic=chaine;
1337     MG_EXPORT exp;
1338 francois 505 exp.gmsh(&carte,namefic);
1339 francois 469 sprintf(mess," Carte de taille FEM : Creation de %s.msh",namefic.c_str());
1340     app.affiche(mess);
1341     }
1342 francois 514 if ((app.get_action()==58) || (app.get_action()==60))
1343     {
1344     int nummai;
1345     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1346     char nomcarte[500];
1347     if (app.get_action()==58)
1348     app.recupere_parametre_string(59,nomcarte,(char*)"Fichier carte manquant");
1349     if (app.get_action()==60)
1350     app.recupere_parametre_string(59,nomcarte,(char*)"Fichier carte manquant");
1351     if (app.get_erreur()==true) return 0;
1352     char mess[500];
1353     sprintf(mess," Comparaison de la taille reelle d'un maillage avec la carte de taille");
1354     app.affiche(mess);
1355     sprintf(mess," Lecture fichier MAGiC");
1356     app.affiche(mess);
1357     MG_FILE gest(nomfichier);
1358     MG_MAILLAGE* mai;
1359     if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
1360     sprintf(mess," Lecture fichier carte de taille");
1361     app.affiche(mess);
1362     FCT_TAILLE *carte;
1363     if (app.get_action()==58)
1364     carte=new FCT_GENERATEUR_3D<4>(nomcarte);
1365 francois 518 if (app.get_action()==60)
1366 francois 514 carte=new FCT_TAILLE_FEM_SOLUTION(nomcarte);
1367     char nometude[1000];
1368     char *p=strchr(nomfichier,'.');
1369     strncpy(nometude,nomfichier,p-nomfichier);
1370     nometude[p-nomfichier]=0;
1371     char nomsolution[500];
1372     sprintf(nomsolution,"%s_comp%lu.sol",nometude,mai->get_id());
1373     sprintf(mess," Comparaison");
1374     app.affiche(mess);
1375     MAILLEUR_ANALYSE m3d(mai);
1376 francois 577 sprintf(mess," Respect global de la taille demandee");
1377     app.affiche(mess);
1378     double tabtaille[3];
1379     m3d.compare_maillage_carte_isotrope(carte,nomsolution,tabtaille);
1380     sprintf(mess," Nombre de maille théorique : %lf - Nombre de maille reelle : %lf",tabtaille[0],tabtaille[1]);
1381     app.affiche(mess);
1382     sprintf(mess," Erreur : %lf%%",tabtaille[2]);
1383     app.affiche(mess);
1384 francois 560 MG_SOLUTION *sol=gest.get_mg_solution(gest.get_nb_mg_solution()-1);
1385     sol->active_solution(2);
1386     LISTE_MG_NOEUD::iterator it;
1387     int tab[201];
1388     for (int i=0;i<201;i++) tab[i]=0;
1389     for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
1390     {
1391     double val=no->get_solution();
1392     int valint=(int)val+100;
1393     if (valint<0) valint=0;
1394     if (valint>200) valint=200;
1395     tab[valint]++;
1396     }
1397 francois 577 sprintf(mess," Repartition du respect de la taille demandee");
1398 francois 560 app.affiche(mess);
1399     char nomanalyse[500];
1400     sprintf(nomanalyse,"%s_comp%lu.csv",nometude,mai->get_id());
1401     FILE *in=fopen(nomanalyse,"wt");
1402     for (int i=0;i<201;i++)
1403     if (i<101) fprintf(in,"%d;%d;\n",i-100,tab[i]);
1404     else fprintf(in,"%d;%d;%d;\n",i-100,tab[i],tab[i]+tab[200-i]);
1405     fclose(in);
1406 francois 514 sprintf(mess," Enregistrement");
1407     app.affiche(mess);
1408     sprintf(nomsolution,"%s_comp%lu.magic",nometude,mai->get_id());
1409     gest.enregistrer(nomsolution);
1410     delete carte;
1411     }
1412 francois 475 if (app.get_action()==57)
1413     {
1414     int nummai;
1415     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1416     if (app.get_erreur()==true) return 0;
1417     char mess[500];
1418     sprintf(mess," Conversion mg maillage en stl");
1419     app.affiche(mess);
1420     MG_FILE gest(nomfichier);
1421     strncpy(chaine,nomfichier,p-nomfichier);
1422     MG_MAILLAGE* mai;
1423     if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1424     sprintf(chaine,"%s%lu",chaine,mai->get_id());
1425     std::string namefic=chaine;
1426     MG_EXPORT exp;
1427     exp.stl(mai,namefic);
1428     sprintf(mess," creation de %s.stl",namefic.c_str());
1429     app.affiche(mess);
1430    
1431     }
1432 francois 843 if (app.get_action()==105)
1433     {
1434     int nummai;
1435     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1436     if (app.get_erreur()==true) return 0;
1437     char mess[500];
1438     sprintf(mess," Conversion mg maillage en off");
1439     app.affiche(mess);
1440     MG_FILE gest(nomfichier);
1441     strncpy(chaine,nomfichier,p-nomfichier);
1442     MG_MAILLAGE* mai;
1443     if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1444     sprintf(chaine,"%s%lu",chaine,mai->get_id());
1445     std::string namefic=chaine;
1446     MG_EXPORT exp;
1447     exp.off(mai,namefic);
1448     sprintf(mess," creation de %s.off",namefic.c_str());
1449     app.affiche(mess);
1450    
1451     }
1452 francois 517 if (app.get_action()==62)
1453     {
1454     int nummai;
1455     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1456     char outfile[500];
1457     app.recupere_parametre_string(5,outfile,(char*)"Fichier de sortie manquant");
1458     if (app.get_erreur()==true) return 0;
1459     char mess[500];
1460     sprintf(mess," Détachement d'un mg maillage de sa geometrie");
1461     app.affiche(mess);
1462     MG_FILE gest(nomfichier);
1463     MG_MAILLAGE* mai;
1464     if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1465     MG_GESTIONNAIRE gest2;
1466     MG_MAILLAGE *mai2=mai->detacher(&gest2);
1467     sprintf(mess," Enregistrement");
1468     app.affiche(mess);
1469     gest2.enregistrer(outfile);
1470 francois 604 }
1471     if (app.get_action()==67)
1472     {
1473     int numsol;
1474     int numchamp;
1475     int numare;
1476     int numgeo;
1477     char outfile[500];
1478     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1479     app.recupere_parametre_int_avec_defaut(68,numsol,0);
1480     app.recupere_parametre_int_avec_defaut(69,numchamp,0);
1481     app.recupere_parametre_int_avec_defaut(71,numare,0);
1482     app.recupere_parametre_string(70,outfile,(char*)"Fichier de sortie manquant");
1483     if (app.get_erreur()==true) return 0;
1484     MG_FILE gest(nomfichier);
1485     FEM_SOLUTION* sol;
1486     if (numsol==0) sol=gest.get_fem_solution(0); else sol=gest.get_fem_solutionid(numsol);
1487     MG_GEOMETRIE* geo;
1488     if (numgeo==0) geo=gest.get_mg_geometrie(0); else geo=gest.get_mg_geometrie(numgeo);
1489     MG_ARETE *are;
1490     if (numare==0) are=geo->get_mg_arete(0); else are=geo->get_mg_areteid(numare);
1491     char mess[500];
1492 francois 628 sprintf(mess," Sonde de %s_%s sur l'arète %lu",(char*)sol->get_nom().c_str(),(char*)sol->get_legende(numchamp).c_str(),are->get_id());
1493 francois 604 app.affiche(mess);
1494     are->recupere_resultat(sol,numchamp,outfile);
1495    
1496     }
1497 francois 628 if (app.get_action()==72)
1498     {
1499     int numsol;
1500     int numchamp;
1501     int nummai;
1502     char outfile[500];
1503     char infile[500];
1504     app.recupere_parametre_int_avec_defaut(68,numsol,0);
1505     app.recupere_parametre_int_avec_defaut(69,numchamp,0);
1506     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1507     app.recupere_parametre_string(73,infile,(char*)"Fichier de solution manquant");
1508     app.recupere_parametre_string_avec_defaut(5,outfile,infile);
1509     if (app.get_erreur()==true) return 0;
1510 francois 633 app.affiche((char*)"Lecture du fichier MAGIC");
1511     MG_FILE gest(nomfichier);
1512     app.affiche((char*)"Lecture de la solution a projeter");
1513     MG_FILE gestsol(infile);
1514 francois 628 FEM_SOLUTION* sol;
1515     if (numsol==0) sol=gestsol.get_fem_solution(0); else sol=gestsol.get_fem_solutionid(numsol);
1516     FEM_MAILLAGE* fem;
1517     if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
1518     char mess[500];
1519     sprintf(mess," Projection de la solution %s_%s du maillage %lu sur le maillage %lu",(char*)sol->get_nom().c_str(),(char*)sol->get_legende(numchamp).c_str(),sol->get_maillage()->get_id(),fem->get_id());
1520     app.affiche(mess);
1521     FEM_MAILLAGE_OUTILS otfem;
1522 francois 635 int res=otfem.projete_solution_maillage(sol,numchamp,fem);
1523     if (res==MAGIC::PROJECTION::SUCCES) gest.enregistrer(outfile);
1524     if (res==MAGIC::PROJECTION::DIMENSION_MAILLAGE_INCOMPATIBLE) app.affiche((char*)" Erreur : Dimension des maillages incompatibles");
1525     if (res==MAGIC::PROJECTION::TYPE_SOLUTION_INCORRECT) app.affiche((char*)" Erreur : Solution a projeter n'est pas exprimer aux noeuds");
1526     if (res==MAGIC::PROJECTION::NON_IMPLEMENTER) app.affiche((char*)" Erreur : Cas de projection non implementer");
1527 francois 628 }
1528     if (app.get_action()==74)
1529     {
1530     int numsol1;
1531     int numchamp1;
1532     int numsol2;
1533     int numchamp2;
1534     char outfile[500];
1535     app.recupere_parametre_int_avec_defaut(40,numsol1,0);
1536     app.recupere_parametre_int_avec_defaut(41,numsol2,0);
1537     app.recupere_parametre_int_avec_defaut(43,numchamp1,0);
1538     app.recupere_parametre_int_avec_defaut(44,numchamp2,0);
1539     app.recupere_parametre_string_avec_defaut(5,outfile,nomfichier);
1540     if (app.get_erreur()==true) return 0;
1541     MG_FILE gest(nomfichier);
1542     FEM_SOLUTION* sol1;
1543     if (numsol1==0) sol1=gest.get_fem_solution(0); else sol1=gest.get_fem_solutionid(numsol1);
1544     FEM_SOLUTION* sol2;
1545     if (numsol2==0) sol2=gest.get_fem_solution(0); else sol2=gest.get_fem_solutionid(numsol2);
1546     char mess[500];
1547     sprintf(mess," Comparaison de %s_%s et de %s_%s",(char*)sol1->get_nom().c_str(),(char*)sol1->get_legende(numchamp1).c_str(),(char*)sol2->get_nom().c_str(),(char*)sol2->get_legende(numchamp2).c_str());
1548     app.affiche(mess);
1549     FEM_MAILLAGE_OUTILS otfem;
1550 francois 674 otfem.compare_champs_solution(sol1,numchamp1,sol2,numchamp2);
1551 francois 628 gest.enregistrer(outfile);
1552     }
1553 francois 697 if (app.get_action()==76)
1554     {
1555 francois 789 bool bnoeud,belement1,belement2,belement3,bgelement1,bgelement2,bgelement3,belementnd;
1556 francois 698 int nummai,numtopo;
1557 francois 697 char out[500];
1558     app.recupere_parametre_string(5,out,(char*)"Fichier sortant manquant");
1559     app.recupere_parametre_int_avec_defaut(19,nummai,0);
1560     app.recupere_parametre_bool_avec_defaut(77,bnoeud,false);
1561     app.recupere_parametre_bool_avec_defaut(78,belement1,false);
1562     app.recupere_parametre_bool_avec_defaut(79,belement2,false);
1563     app.recupere_parametre_bool_avec_defaut(80,belement3,false);
1564 francois 757 app.recupere_parametre_bool_avec_defaut(91,bgelement3,false);
1565     app.recupere_parametre_bool_avec_defaut(92,bgelement3,false);
1566     app.recupere_parametre_bool_avec_defaut(93,bgelement3,false);
1567 francois 789 app.recupere_parametre_bool_avec_defaut(102,belementnd,false);
1568 francois 698 app.recupere_parametre_int_avec_defaut(81,numtopo,0);
1569 francois 697 if (app.get_erreur()==true) return 0;
1570 francois 698 char mess[500];
1571     sprintf(mess," Extraction de tables de valeurs");
1572     app.affiche(mess);
1573 francois 697 MG_FILE gest(nomfichier);
1574     FEM_MAILLAGE *fem;
1575 francois 698 MG_ELEMENT_TOPOLOGIQUE *topo;
1576 francois 697 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
1577 francois 698 if (numtopo==0) topo=NULL;
1578     else
1579     {
1580     MG_GEOMETRIE* geo=fem->get_mg_geometrie();
1581     topo=geo->get_mg_faceid(numtopo);
1582     if (topo==NULL) topo=geo->get_mg_volumeid(numtopo);
1583     if (topo==NULL) topo=geo->get_mg_areteid(numtopo);
1584     if (topo==NULL) topo=geo->get_mg_sommetid(numtopo);
1585     }
1586 francois 697 MG_TABLE tab;
1587     if (bnoeud)
1588     {
1589 francois 698 app.affiche((char*)" Création de la table aux noeuds");
1590 francois 697 char nomout[500];
1591     sprintf(nomout,"%s_noeud.csv",out);
1592 francois 698 tab.info_noeud(fem,nomout,topo);
1593 francois 697 }
1594     if (belement1)
1595     {
1596 francois 698 app.affiche((char*)" Création de la table aux elements 1D");
1597 francois 697 char nomout[500];
1598     sprintf(nomout,"%s_element1.csv",out);
1599 francois 698 tab.info_element1(fem,nomout,topo);
1600 francois 697 }
1601     if (belement2)
1602     {
1603 francois 698 app.affiche((char*)" Création de la table aux elements 2D");
1604 francois 697 char nomout[500];
1605     sprintf(nomout,"%s_element2.csv",out);
1606 francois 698 tab.info_element2(fem,nomout,topo);
1607 francois 697 }
1608     if (belement3)
1609     {
1610 francois 698 app.affiche((char*)" Création de la table aux elements 3D");
1611 francois 697 char nomout[500];
1612     sprintf(nomout,"%s_element3.csv",out);
1613 francois 698 tab.info_element3(fem,nomout,topo);
1614 francois 697 }
1615 francois 789 if (belementnd)
1616     {
1617     app.affiche((char*)" Création de la table aux elements de solutions mixtes");
1618     char nomout[500];
1619     sprintf(nomout,"%s_elementnd.csv",out);
1620     tab.info_element_nd(fem,nomout,topo);
1621     }
1622 francois 757 if (bgelement1)
1623     {
1624     app.affiche((char*)" Création de la table aux point de gauss des elements 1D");
1625     char nomout[500];
1626     sprintf(nomout,"%s_elementgauss1.csv",out);
1627     tab.info_element_gauss1(fem,nomout,topo);
1628     }
1629     if (bgelement2)
1630     {
1631     app.affiche((char*)" Création de la table aux point de gauss des elements 2D");
1632     char nomout[500];
1633     sprintf(nomout,"%s_elementgauss2.csv",out);
1634     tab.info_element_gauss2(fem,nomout,topo);
1635     }
1636     if (bgelement3)
1637     {
1638     app.affiche((char*)" Création de la table aux point de gauss des elements 3D");
1639     char nomout[500];
1640     sprintf(nomout,"%s_elementgauss3.csv",out);
1641     tab.info_element_gauss3(fem,nomout,topo);
1642     }
1643 francois 697 }
1644 francois 702 if (app.get_action()==82)
1645     {
1646     int numgeo;
1647     char out[500];
1648     char in[500];
1649     char fgmsh[500];
1650     app.recupere_parametre_string_avec_defaut(1,in,(char*)"");
1651     if (strcmp(in,"")==0)
1652     app.recupere_parametre_string(5,out,(char*)"Fichier sortant manquant");
1653     else
1654     app.recupere_parametre_string_avec_defaut(5,out,in);
1655     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1656     app.recupere_parametre_string(83,fgmsh,(char*)"Fichier GMSH manquant");
1657     if (app.get_erreur()==true) return 0;
1658     char mess[2000];
1659     sprintf(mess,"Importation d'un maillage GMSH");
1660     app.affiche(mess);
1661     MG_GESTIONNAIRE *gest;
1662     if (strcmp(in,"")==0) gest=new MG_GESTIONNAIRE; else gest=new MG_FILE(in);
1663     MG_GEOMETRIE *geo;
1664     if ((numgeo!=0) && (gest->get_nb_mg_geometrie()>0)) geo=gest->get_mg_geometrieid(numgeo);
1665     MG_IMPORT imp;
1666     imp.maillage_gmsh(gest,fgmsh,geo);
1667     sprintf(mess,"Enregistrement du fichier");
1668     app.affiche(mess);
1669     gest->enregistrer(out);
1670     delete gest;
1671     }
1672 francois 796 if ((app.get_action()==86)||(app.get_action()==103))
1673 francois 712 {
1674 francois 796 int numgeo,numfonc;
1675 francois 712 char chemin[1000];
1676     app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1677     app.recupere_parametre_string(87,chemin,(char*)"Fichier de fonction manquant");
1678 francois 796 if (app.get_action()==103) app.recupere_parametre_int_avec_defaut(104,numfonc,0);
1679 francois 712 if (app.get_erreur()==true) return 0;
1680     char mess[2000];
1681 francois 796 if (app.get_action()==86) sprintf(mess,"Importation d'une fonction geometrique");
1682     if (app.get_action()==103) sprintf(mess,"Modification d'une fonction geometrique");
1683 francois 712 app.affiche(mess);
1684     sprintf(mess,"\nLecture du fichier MAGiC");
1685     app.affiche(mess);
1686     MG_FILE gest(nomfichier);
1687     MG_GEOMETRIE *geo;
1688     if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1689 francois 796 if (app.get_action()==86)
1690     {
1691     sprintf(mess,"Importation de la courbe");
1692     app.affiche(mess);
1693     MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(chemin);
1694     geo->ajouter_mg_geom_fonction(gf);
1695     gest.enregistrer(nomfichier);
1696     }
1697     if (app.get_action()==103)
1698     {
1699     sprintf(mess,"Importation de la courbe");
1700     app.affiche(mess);
1701     MG_GEOM_FONCTION *gf;
1702     if (numfonc==0) gf=geo->get_mg_geom_fonction(0); else gf=geo->get_mg_geom_fonctionid(numfonc);
1703     gf->change(chemin);
1704     gest.enregistrer(nomfichier);
1705     }
1706 francois 880 }
1707     if (app.get_action()==106)
1708     {
1709     char mess[255];
1710     sprintf(mess,"Définition d'une coque mince");
1711     app.affiche(mess);
1712     char valeur[500];
1713 francois 881 app.recupere_parametre_string(107,valeur,(char*)"Faces en vis a vis manquantes");
1714 francois 880 if (app.get_erreur()==true) return 0;
1715     MG_FILE gest(nomfichier);
1716     unsigned long id,id1,id2,idgeo;
1717     sscanf(valeur,"%lu:%lu:%lu:%lu\n",&idgeo,&id,&id1,&id2);
1718     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(idgeo);
1719     if (geo!=NULL)
1720     {
1721 francois 881 MG_VOLUME* vol=geo->get_mg_volumeid(id);
1722     if (vol!=NULL)
1723 francois 880 {
1724 francois 881 MG_FACE* face1=geo->get_mg_faceid(id1);
1725     MG_FACE* face2=geo->get_mg_faceid(id2);
1726     if (face1!=NULL)
1727     if (face2!=NULL)
1728 francois 880 {
1729 francois 881 vol->ajouter_face_correspondante(face1,face2);
1730     sprintf(mess," Ajout de la face de base %lu et de la face correspondante %lu dans le volume mince %lu",id1,id2,id);
1731 francois 880 app.affiche(mess);
1732     }
1733     }
1734     }
1735     sprintf(mess,"Enregistrement du fichier");
1736     gest.enregistrer(nomfichier);
1737     }
1738 francois 796
1739 francois 432 char mess[255];
1740     sprintf(mess,"Fin");
1741     app.affiche(mess);
1742     }
1743    
1744    
1745    
1746    
1747    
1748    
1749    
1750    
1751    
1752    
1753    
1754    
1755    
1756    
1757