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 (7 years, 11 months ago) by francois
File size: 6060 byte(s)
Log Message:
mise a jour Fast marching pour travail exterieur

File Contents

# User Rev Content
1 francois 896
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