ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d.h
Revision: 1162
Committed: Wed Jul 10 20:31:22 2024 UTC (10 months ago) by ghazal
Content type: text/plain
Original Path: magic/lib/mailleur_auto/src/mailleur3d.h
File size: 9403 byte(s)
Log Message:
utilisation des M3D dans le mailleur particule

File Contents

# User Rev Content
1 ghazal 1162 //####//------------------------------------------------------------
2     //####//------------------------------------------------------------
3     //####// MAGiC
4     //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5     //####// Departement de Genie Mecanique - UQTR
6     //####//------------------------------------------------------------
7     //####// MAGIC est un projet de recherche de l equipe ERICCA
8     //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9     //####// http://www.uqtr.ca/ericca
10     //####// http://www.uqtr.ca/
11     //####//------------------------------------------------------------
12     //####//------------------------------------------------------------
13     //####//
14     //####// mailleur3d.h
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 5
23     #ifndef mailleur3dH
24     #define mailleur3dH
25    
26    
27    
28    
29    
30    
31    
32 francois 1158
33     #include <map>
34    
35    
36 5 #include <vector>
37     #include "mailleur.h"
38     #include "mg_front_3D.h"
39     #include "mg_maillage.h"
40     #include "mg_geometrie.h"
41     #include "mg_volume.h"
42 francois 467 #include "fct_taille.h"
43 5 #include "tpl_octree.h"
44    
45    
46    
47    
48 francois 551 #define EPS_BASE_RELATIVE 1e-14 //en réalite 2^(1-nombre de bit de la mantisse d'un reel) 52+1(le premier bit toujours 1 n'est pas represente) en 64 bits
49 francois 78
50 francois 190
51 francois 1158 class MAILLEUR3D:public MAILLEUR
52 5 {
53     public:
54    
55    
56    
57 francois 287
58 francois 420
59 francois 1150 MAILLEUR3D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,FCT_TAILLE* fct_taille,bool save,MG_VOLUME* mgvol=NULL,int destruction=MAGIC::MAILLEURFRONTALETAT::TOUTDETRUIRE);
60     MAILLEUR3D(FCT_TAILLE* met,MG_MAILLAGE* mgmai,class OT_CPU* comp=NULL,int destruction=MAGIC::MAILLEURFRONTALETAT::TOUTDETRUIRE);
61 5 virtual ~MAILLEUR3D();
62    
63 couturad 966 virtual int maille(MG_GROUPE_TOPOLOGIQUE* mggt=NULL);
64     virtual int maille(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri=NULL,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet=NULL);
65 5
66 francois 419
67 francois 421 virtual void active_log(char* nomfile);
68     virtual void desactive_log(void);
69 francois 424 virtual void analyse_maillage_obtenu(double &vol,int *tab,double borne1=0.1,double borne2=0.2,double borne3=0.5);
70 francois 421 virtual void change_niveau_optimisation(int num);
71     virtual int get_niveau_optimisation(void);
72     virtual void change_coef(double val);
73     virtual void verifie_conformite_octale(MG_MAILLAGE* mai,MG_MAILLAGE* maisur);
74 5
75 francois 420 protected:
76     typedef std::multimap<double,MG_FRONT_3D*,std::less<double> > FRONT;
77 couturad 966 virtual int maille(FCT_TAILLE *metri);
78 5
79 francois 421 virtual void insere_contrainte_tetra(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet);
80     virtual void insere_contrainte_triangle(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri);
81 francois 54
82    
83    
84 francois 632 virtual void cree_ntree(void);
85 francois 421 virtual void initialise_front(MG_VOLUME* mgvol);
86 francois 420 virtual void cree_front(MG_VOLUME* mgvol);
87 francois 421 virtual void recherche_voisin_front(void);
88 couturad 919 virtual int progresse_front(MG_VOLUME* mgvol);
89 francois 421 virtual int genere_noeud(MG_VOLUME* mgvol,MG_FRONT_3D* ft,TPL_MAP_ENTITE<MG_NOEUD*> &liste_noeud,std::vector<class CAS_FRONT*> &liste_cas);
90     virtual void detruit_element_inactif(void);
91 5
92 francois 421 virtual int traite_front(class MG_VOLUME* mgvol,int type,MG_FRONT_3D* ft,std::vector<class CAS_FRONT*>& liste_cas,std::vector<class CAS_FRONT*>& liste_classe_cas,class CAS_FRONT **cas);
93     virtual int traite_front_adjacent3(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
94     virtual int traite_front_adjacent2(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
95     virtual int traite_front_adjacent1(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
96     virtual int traite_front_lie(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
97     virtual int traite_front_general(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
98 5
99 francois 421 virtual int traite_destruction(MG_FRONT_3D* ft,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
100     virtual void detruit_tetra(MG_TRIANGLE* tri);
101 5
102 francois 1150 virtual class MG_FRONT_3D* mise_a_jour_front(MG_TETRA* tet,int cote,int numfront=MAGIC::MAILLEURFRONTALETAT::ATTENTE);
103 francois 421 virtual void mise_a_jour_voisin_front(MG_FRONT_3D* ft);
104 5
105 francois 421 virtual int test_front(void);
106     virtual void genere_log(int fincouche);
107     virtual void ini_log(void);
108     virtual void fin_log(void);
109 5
110    
111 francois 421 virtual double angle_front(MG_FRONT_3D* ft1,MG_FRONT_3D* ft2);
112     virtual double angle_front(MG_FRONT_3D* ft1,MG_SEGMENT* seg);
113     virtual double evaluer_distance_noeud_triangle(double x,double y,double z,MG_TRIANGLE* tri);
114     virtual void insere_cas_front(int type,MG_NOEUD* noeud,int numero_cote,double angle,std::vector<CAS_FRONT*>& liste_cas);
115     virtual void efface_cas_front(std::vector<CAS_FRONT*>& liste_cas,std::vector<CAS_FRONT*> liste_classe_cas[8]);
116 5
117 francois 421 virtual int inter_tetra_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6,MG_NOEUD* noeud7);
118     virtual int inter_triangle_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6);
119     virtual int inter_segment_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5);
120     virtual int inter_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
121 francois 551 virtual int inter_segment_segment1(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
122     virtual int inter_segment_segment2(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
123     virtual int examine_solution(double sol1,double sol2,double epssol1,double epssol2,int type);
124 5
125    
126 francois 421 virtual double calcule_volume(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
127     virtual double calcule_longueur_caracteristique(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3=NULL,MG_NOEUD* noeud4=NULL);
128 5
129 francois 532 double calcul_distance_metrique_segment(MG_SEGMENT *seg,int pas);
130 5
131 ghazal 1162 virtual class MG_TETRA* insere_tetra(class MG_ELEMENT_TOPOLOGIQUE* mgvol,class MG_FRONT_3D* ft,MG_NOEUD* noeud4,int type,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
132     virtual MG_TETRA* insere_tetra(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_TRIANGLE* triangle1=NULL,MG_TRIANGLE* triangle2=NULL,MG_TRIANGLE* triangle3=NULL,MG_TRIANGLE* triangle4=NULL);
133     int supprimer_mg_tetra(MG_TETRA* mgtetra);
134     virtual class MG_TRIANGLE* insere_triangle(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,int origine);
135     virtual class MG_SEGMENT* insere_segment(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
136     virtual class MG_TETRA* cree_tetra(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_TRIANGLE* triangle1,MG_TRIANGLE* triangle2,MG_TRIANGLE* triangle3,MG_TRIANGLE* triangle4,int origine);
137     virtual class MG_TRIANGLE* cree_triangle(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_SEGMENT* segment1,MG_SEGMENT* segment2,MG_SEGMENT* segment3,int origine);
138     virtual class MG_SEGMENT* cree_segment(class MG_ELEMENT_TOPOLOGIQUE* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
139 5
140 francois 421 virtual void insere_tetra(MG_MAILLAGE* mai,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
141 francois 78
142    
143 francois 421 virtual MG_FRONT_3D* ajouter_front_courant(int numero_front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
144     virtual MG_FRONT_3D* ajouter_front(FRONT& front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
145     virtual void ajouter_front(FRONT& front,MG_FRONT_3D *ft);
146 francois 551 virtual MG_FRONT_3D* get_premier_front(FRONT& front);
147     virtual MG_FRONT_3D* get_premier_front(FRONT& front,FRONT::iterator &it);
148     virtual MG_FRONT_3D* get_suivant_front(FRONT& front,FRONT::iterator &it);
149 francois 421 virtual unsigned int get_nb_front(FRONT& front);
150     virtual unsigned int get_nb_front_courant(void);
151     virtual void supprimer_front_en_avancant(MG_FRONT_3D* ft);
152     virtual void supprimer_front_en_avancant_sans_delete(MG_FRONT_3D* ft);
153     virtual void supprimer_front_en_reculant(MG_FRONT_3D* ft);
154     virtual void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_3D* ft);
155     virtual void echange_de_front(MG_FRONT_3D* ft,int num);
156     virtual void swap_front(FRONT& front_original,FRONT& front_destination);
157     virtual int premier_front_courant(void);
158 5
159    
160    
161 francois 54
162 francois 558 TPL_MAP_ENTITE<MG_TETRA*> lsttet_a_detruire;
163     TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud_a_detruire;
164    
165 5
166 francois 35
167 5 MG_MAILLAGE* mg_maillage;
168     MG_GEOMETRIE* mg_geometrie;
169     MG_VOLUME* mg_volume;
170     FCT_TAILLE *metrique;
171 francois 78 int type_mailleur;
172 francois 445 double distance_maximale;
173 couturad 944 FRONT front_courant[12];
174 5 FRONT front_attente;
175    
176     int activelog;
177     std::string nomlog;
178    
179 francois 632 TPL_NTREE_FCT<MG_FRONT_3D*,FCT_TAILLE > *ntree_de_front;
180 5
181 francois 61 int niveau_optimisation;
182 francois 190 int typedestruction;
183 francois 61 FILE* inlog;
184 francois 78 double coef;
185 francois 551
186    
187    
188 francois 558 int passe;
189 5 };
190    
191    
192    
193    
194    
195    
196    
197    
198    
199    
200    
201    
202    
203    
204 francois 287
205 5 #endif