ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/calculs/src/main2.cpp
Revision: 1075
Committed: Tue Aug 10 17:02:54 2021 UTC (4 years ago) by francois
File size: 8119 byte(s)
Log Message:
suppression de warning avec le dernier compilateur

File Contents

# Content
1
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 <math.h>
33 #include "magic_application.h"
34 #include "mg_fast_marching.h"
35 #include "fem_maillage_outils.h"
36 #include "mg_export.h"
37 //---------------------------------------------------------------------------
38
39
40
41
42 int main(int argc,char **argv)
43 {
44 std::vector<MAGIC_PARAMETRE_APPLICATION> lst;
45 MAGIC_PARAMETRE_APPLICATION p1(2,(char*)"-fm2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Fast marching sur une face");
46 MAGIC_PARAMETRE_APPLICATION p2(3,(char*)"-num",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Id de la face à calculer");
47 MAGIC_PARAMETRE_APPLICATION p3(4,(char*)"-numsol",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Id de la solution pour le calcul de fast_marching (defaut la premiere)");
48 MAGIC_PARAMETRE_APPLICATION p4(5,(char*)"-nummai",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Id du maillage à utiliser pour effectuer le fast_marching pour une nouvelle solution (defaut le premier)");
49 MAGIC_PARAMETRE_APPLICATION p5(6,(char*)"-numchamp",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero du champ dans la solution (defaut le premier)");
50 MAGIC_PARAMETRE_APPLICATION p6(7,(char*)"-init",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Liste des entités initialisées à 0 sous la forme id1,id2,id3... ou x,y,z,x,y,z");
51 MAGIC_PARAMETRE_APPLICATION p7(8,(char*)"-geodesic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Fast marching pour calculer la geodesic entre deux sommets sur une face");
52 MAGIC_PARAMETRE_APPLICATION p8(9,(char*)"-geodesic2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Fast marching pour calculer la geodesic entre deux points sur une face");
53
54 p1.ajouter_dependance(1),p1.ajouter_dependance(3);p1.ajouter_dependance(4);p1.ajouter_dependance(5);p1.ajouter_dependance(6);p1.ajouter_dependance(7);
55 p7.ajouter_dependance(1),p7.ajouter_dependance(3);p7.ajouter_dependance(5);p7.ajouter_dependance(7);
56 p8.ajouter_dependance(1),p8.ajouter_dependance(3);p8.ajouter_dependance(5);p8.ajouter_dependance(7);
57 lst.push_back(p1);
58 lst.push_back(p2);
59 lst.push_back(p3);
60 lst.push_back(p4);
61 lst.push_back(p5);
62 lst.push_back(p6);
63 lst.push_back(p7);
64 lst.push_back(p8);
65 MAGIC_APPLICATION app((char*)"Fast Marching",argc,argv,lst,true,false);
66 if (app.get_erreur()==true) return 0;
67 if (app.get_action()==2)
68 {
69 char fichiermagic[500];
70 char entite[5000];
71 int numsol=0;
72 int nummai=0;
73 int numchamp=1;
74 app.recupere_parametre_string(1,fichiermagic,(char*)"Fichier MAGIC entrant manquant",MAGIC_APPLICATION::VERIFFICHIEREXISTE);
75 app.recupere_parametre_int_avec_defaut(4,numsol,0);
76 app.recupere_parametre_int_avec_defaut(5,nummai,0);
77 app.recupere_parametre_int_avec_defaut(6,numchamp,0);numchamp--;
78 app.recupere_parametre_string(7,entite,(char*)"pas de liste d'entité d'initialisation");
79 if (app.get_erreur()==true) return 0;
80
81 MG_FILE gest(fichiermagic);
82 FEM_SOLUTION* sol=NULL;
83 char chaine[500];
84 char chaine2[5000];
85 char *p=strrchr(fichiermagic,'.');
86 strncpy(chaine,fichiermagic,p-fichiermagic);
87 if ((numsol==0) && (nummai==0)) sol=gest.get_fem_solution(0);
88 else if (numsol!=0) sol=gest.get_fem_solutionid(numsol);
89 if (sol==NULL)
90 {
91 FEM_MAILLAGE* fem=NULL;
92 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
93 sprintf(chaine2,"%s%d_fm.sol",chaine,gest.get_nb_fem_solution());
94 sol=new FEM_SOLUTION(fem,1,chaine2,1,"Distance");
95 gest.ajouter_fem_solution(sol);
96 numchamp=0;
97 }
98 MAGIC::MG_FAST_MARCHING fm(sol,numchamp);
99 fm.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
100 fm.init_noeud(entite);
101 fm.propage(1.0);
102 fm.finalise();
103 MG_EXPORT exp;
104 exp.gmsh(sol->get_maillage(),chaine);
105 gest.enregistrer(fichiermagic);
106 }
107
108 if ((app.get_action()==8) || (app.get_action()==9))
109 {
110 char fichiermagic[500];
111 char entite[5000];
112 int nummai=0;
113 app.recupere_parametre_string(1,fichiermagic,(char*)"Fichier MAGIC entrant manquant",MAGIC_APPLICATION::VERIFFICHIEREXISTE);
114 app.recupere_parametre_int_avec_defaut(5,nummai,0);
115 app.recupere_parametre_string(7,entite,(char*)"pas de liste d'entité d'initialisation");
116 if (app.get_erreur()==true) return 0;
117
118 MG_FILE gest(fichiermagic);
119 char chaine[1000];for (int i=0;i<1000;i++) chaine[i]=0;
120 char *p=strrchr(fichiermagic,'.');
121 strncpy(chaine,fichiermagic,p-fichiermagic);
122 FEM_MAILLAGE *fem;
123 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
124 MAGIC::MG_GEODESIC geod(chaine,&gest,fem);
125 bool ok;
126 if (app.get_action()==8) ok=geod.init_noeud(entite);
127 if (app.get_action()==9) ok=geod.init_coord(entite);
128 if (ok==false)
129 {
130 app.affiche_erreur((char*)"Initialisation incorrecte");
131 }
132 else
133 {
134 double tab[3];
135 double val=geod.calcul(tab);
136 char mess[500];
137 sprintf(mess,"La longueur calculée est %lf",val);
138 app.affiche_erreur(mess);
139 MG_EXPORT exp;
140 exp.gmsh(fem,chaine);
141 gest.enregistrer(fichiermagic);
142 FILE *out=fopen("convergence.txt","a+t");
143 fprintf(out,"%lf;%lf;%lf;a\n",tab[0],tab[1],tab[2]);
144 fclose(out);
145 }
146 }
147
148
149
150
151 /*
152
153
154
155
156 MG_FILE gest((char*)"/home/francois/dev/magic/cas_debug/fm/plaquetroueemaille.magic");
157 FEM_SOLUTION* sol=gest.get_fem_solution(0);
158 if (sol==NULL)
159 {
160 FEM_MAILLAGE* fem=gest.get_fem_maillage(0);
161 sol=new FEM_SOLUTION(fem,4,(char*)"plaquetrouee.sol",1,"Distance");
162 gest.ajouter_fem_solution(sol);
163 }
164 std::vector<FEM_NOEUD*> lst;
165 lst.push_back((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(25)->get_lien_fem_maillage()->get(0));
166 std::cout << "LS1" << std::endl;
167 MAGIC::MG_FAST_MARCHING fm(sol,0);
168 fm.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
169 fm.init_noeud(lst);
170 fm.propage(1.0);
171 fm.finalise();
172 sol->active_solution(0);
173 double val1=((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(34)->get_lien_fem_maillage()->get(0))->get_solution();
174 std::cout << " Distance " << val1 << std::endl;
175 std::vector<FEM_NOEUD*> lst2;
176 lst2.push_back((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(34)->get_lien_fem_maillage()->get(0));
177 std::cout << "LS2" << std::endl;
178 MAGIC::MG_FAST_MARCHING fm2(sol,1);
179 fm2.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
180 fm2.init_noeud(lst2);
181 fm2.propage(1.0);
182 fm2.finalise();
183 sol->active_solution(1);
184 double val2=((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(25)->get_lien_fem_maillage()->get(0))->get_solution();
185 std::cout << " Distance " << val2 << std::endl;
186 FEM_MAILLAGE_OUTILS ot;
187 std::cout << "+" << std::endl;
188 ot.operation_champs_solution(sol,0,sol,1,sol,2,MAGIC::OPERATION_FEM_SOLUTION::ADDITION);
189 std::cout << "-" << std::endl;
190 ot.operation_champs_solution(sol,0,sol,1,sol,3,MAGIC::OPERATION_FEM_SOLUTION::SOUSTRACTION);
191
192
193 MG_EXPORT exp;
194 exp.gmsh(sol->get_maillage(),"distance");
195 gest.enregistrer((char*)"/home/francois/dev/magic/cas_debug/fm/plaquetroueemaille.magic");*/
196 }
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211