ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/calculs/src/main2.cpp
Revision: 1019
Committed: Tue Jun 4 21:16:50 2019 UTC (6 years, 2 months ago) by francois
File size: 8041 byte(s)
Log Message:
restructuration de magic
outil est sorti de lib pour pouvoir etre utiliser en dehors de lib
template est merge avec outil
poly_occ et un sous projet de magic qui utilise le nouveau outil

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 francois 900 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 francois 896
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 francois 1019 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 francois 896 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 francois 900 lst.push_back(p7);
64     lst.push_back(p8);
65 francois 896 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");
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[500];
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 francois 900 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");
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 francois 1019 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 francois 900 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 francois 1019 double tab[3];
135     double val=geod.calcul(tab);
136 francois 900 char mess[500];
137     sprintf(mess,"La longueur calculée est %lf",val);
138     app.affiche_erreur(mess);
139     MG_EXPORT exp;
140 francois 1019 exp.gmsh(fem,chaine);
141 francois 900 gest.enregistrer(fichiermagic);
142 francois 1019 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 francois 900 }
146     }
147 francois 896
148    
149    
150 francois 900
151 francois 896 /*
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