ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/calculs/src/main2.cpp
Revision: 896
Committed: Thu Jun 29 16:19:18 2017 UTC (8 years, 2 months ago) by francois
File size: 6060 byte(s)
Log Message:
mise a jour Fast marching pour travail exterieur

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...");
51
52 p1.ajouter_dependance(1),p1.ajouter_dependance(3);p1.ajouter_dependance(4);p1.ajouter_dependance(5);p1.ajouter_dependance(6);p1.ajouter_dependance(7);
53 lst.push_back(p1);
54 lst.push_back(p2);
55 lst.push_back(p3);
56 lst.push_back(p4);
57 lst.push_back(p5);
58 lst.push_back(p6);
59 MAGIC_APPLICATION app((char*)"Fast Marching",argc,argv,lst,true,false);
60 if (app.get_erreur()==true) return 0;
61 if (app.get_action()==2)
62 {
63 char fichiermagic[500];
64 char entite[5000];
65 int numsol=0;
66 int nummai=0;
67 int numchamp=1;
68 app.recupere_parametre_string(1,fichiermagic,(char*)"Fichier MAGIC entrant manquant");
69 app.recupere_parametre_int_avec_defaut(4,numsol,0);
70 app.recupere_parametre_int_avec_defaut(5,nummai,0);
71 app.recupere_parametre_int_avec_defaut(6,numchamp,0);numchamp--;
72 app.recupere_parametre_string(7,entite,(char*)"pas de liste d'entité d'initialisation");
73 if (app.get_erreur()==true) return 0;
74
75 MG_FILE gest(fichiermagic);
76 FEM_SOLUTION* sol=NULL;
77 char chaine[500];
78 char chaine2[500];
79 char *p=strrchr(fichiermagic,'.');
80 strncpy(chaine,fichiermagic,p-fichiermagic);
81 if ((numsol==0) && (nummai==0)) sol=gest.get_fem_solution(0);
82 else if (numsol!=0) sol=gest.get_fem_solutionid(numsol);
83 if (sol==NULL)
84 {
85 FEM_MAILLAGE* fem=NULL;
86 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
87 sprintf(chaine2,"%s%d_fm.sol",chaine,gest.get_nb_fem_solution());
88 sol=new FEM_SOLUTION(fem,1,chaine2,1,"Distance");
89 gest.ajouter_fem_solution(sol);
90 numchamp=0;
91 }
92 MAGIC::MG_FAST_MARCHING fm(sol,numchamp);
93 fm.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
94 fm.init_noeud(entite);
95 fm.propage(1.0);
96 fm.finalise();
97 MG_EXPORT exp;
98 exp.gmsh(sol->get_maillage(),chaine);
99 gest.enregistrer(fichiermagic);
100 }
101
102
103
104
105 /*
106
107
108
109
110 MG_FILE gest((char*)"/home/francois/dev/magic/cas_debug/fm/plaquetroueemaille.magic");
111 FEM_SOLUTION* sol=gest.get_fem_solution(0);
112 if (sol==NULL)
113 {
114 FEM_MAILLAGE* fem=gest.get_fem_maillage(0);
115 sol=new FEM_SOLUTION(fem,4,(char*)"plaquetrouee.sol",1,"Distance");
116 gest.ajouter_fem_solution(sol);
117 }
118 std::vector<FEM_NOEUD*> lst;
119 lst.push_back((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(25)->get_lien_fem_maillage()->get(0));
120 std::cout << "LS1" << std::endl;
121 MAGIC::MG_FAST_MARCHING fm(sol,0);
122 fm.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
123 fm.init_noeud(lst);
124 fm.propage(1.0);
125 fm.finalise();
126 sol->active_solution(0);
127 double val1=((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(34)->get_lien_fem_maillage()->get(0))->get_solution();
128 std::cout << " Distance " << val1 << std::endl;
129 std::vector<FEM_NOEUD*> lst2;
130 lst2.push_back((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(34)->get_lien_fem_maillage()->get(0));
131 std::cout << "LS2" << std::endl;
132 MAGIC::MG_FAST_MARCHING fm2(sol,1);
133 fm2.init(MAGIC::VERSION_GRADT_TRI_SETHIAN,MAGIC::VERSION_CONSERVE_DISTANCE);
134 fm2.init_noeud(lst2);
135 fm2.propage(1.0);
136 fm2.finalise();
137 sol->active_solution(1);
138 double val2=((FEM_NOEUD*)gest.get_mg_geometrie(0)->get_mg_sommetid(25)->get_lien_fem_maillage()->get(0))->get_solution();
139 std::cout << " Distance " << val2 << std::endl;
140 FEM_MAILLAGE_OUTILS ot;
141 std::cout << "+" << std::endl;
142 ot.operation_champs_solution(sol,0,sol,1,sol,2,MAGIC::OPERATION_FEM_SOLUTION::ADDITION);
143 std::cout << "-" << std::endl;
144 ot.operation_champs_solution(sol,0,sol,1,sol,3,MAGIC::OPERATION_FEM_SOLUTION::SOUSTRACTION);
145
146
147 MG_EXPORT exp;
148 exp.gmsh(sol->get_maillage(),"distance");
149 gest.enregistrer((char*)"/home/francois/dev/magic/cas_debug/fm/plaquetroueemaille.magic");*/
150 }
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165