1 |
francois |
1158 |
//####//------------------------------------------------------------ |
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 |
|
|
//####// toibrep.h |
15 |
|
|
//####// |
16 |
|
|
//####//------------------------------------------------------------ |
17 |
|
|
//####//------------------------------------------------------------ |
18 |
|
|
//####// COPYRIGHT 2000-2024 |
19 |
|
|
//####// jeu 13 jun 2024 11:58:56 EDT |
20 |
|
|
//####//------------------------------------------------------------ |
21 |
|
|
//####//------------------------------------------------------------ |
22 |
francois |
259 |
#ifndef _TOIBREP_ |
23 |
|
|
#define _TOIBREP_ |
24 |
francois |
104 |
|
25 |
|
|
|
26 |
|
|
|
27 |
|
|
|
28 |
francois |
1158 |
|
29 |
francois |
104 |
#include <string> |
30 |
francois |
106 |
#include "tpl_octree.h" |
31 |
francois |
222 |
#include "mg_geometrie_outils.h" |
32 |
francois |
488 |
#ifdef ENABLE_IBREP |
33 |
|
|
#include "IBrep.h" |
34 |
|
|
#endif |
35 |
francois |
433 |
#include "fem_maillage_outils.h" |
36 |
francois |
104 |
|
37 |
francois |
433 |
|
38 |
|
|
class XFEM_TRIANGLE3; |
39 |
|
|
|
40 |
francois |
1158 |
class TOIBREP |
41 |
francois |
104 |
{ |
42 |
|
|
public: |
43 |
francois |
433 |
enum element_classe {INCONNU=1,EXTERIEUR=3,INTERIEUR=2,FRONTIERE=4,XINCONNU=11,XEXTERIEUR=13,XINTERIEUR=12,XFRONTIERE=14}; |
44 |
francois |
276 |
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,int nbpas,class OT_CPU* compt); |
45 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,int nbpas); |
46 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm); |
47 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,class OT_CPU* compt); |
48 |
francois |
259 |
~TOIBREP(); |
49 |
francois |
488 |
#ifdef ENABLE_IBREP |
50 |
francois |
276 |
IBrep importer(std::string nomfichier,std::string nomfichieribrep,class MG_GROUPE_TOPOLOGIQUE* mggt=NULL); |
51 |
francois |
488 |
#endif |
52 |
francois |
276 |
void active_affichage(void (*fonc)(char*)); |
53 |
francois |
104 |
|
54 |
francois |
488 |
#ifdef ENABLE_IBREP |
55 |
francois |
276 |
IBrep exporter_IBrep(string chemin,class FEM_SOLUTION* solution,class FEM_SOLUTION* solution_ele,MG_GROUPE_TOPOLOGIQUE* mggt=NULL); |
56 |
francois |
488 |
#endif |
57 |
francois |
433 |
void importer_et_decouper(MG_GROUPE_TOPOLOGIQUE* mggt); |
58 |
francois |
104 |
|
59 |
|
|
private: |
60 |
couturad |
951 |
typedef std::multimap<double,FEM_ELEMENT3*,std::less<double> > LISTE_FM_TRI; |
61 |
|
|
typedef std::map<unsigned long,LISTE_FM_TRI::iterator,std::less<unsigned long> > LISTE_FM_TRI_ID; |
62 |
francois |
309 |
typedef std::vector<FEM_ELEMENT3*> LISTE_FM; |
63 |
francois |
104 |
|
64 |
francois |
433 |
FEM_MAILLAGE_OUTILS outilfem; |
65 |
francois |
276 |
OT_CPU* compteur; |
66 |
francois |
281 |
void recherche_arete_tangeante(TPL_MAP_ENTITE<class MG_ARETE*> &lst,TPL_MAP_ENTITE<class MG_ELEMENT_TOPOLOGIQUE*> &lsttopo); |
67 |
|
|
void remplir_trou_tangeant(std::vector<class TOIBREP_POINT*> *lst,MG_ARETE* are,FEM_SOLUTION* solution_ele); |
68 |
francois |
433 |
void remplir_trou(std::vector<class TOIBREP_POINT*> *lst,MG_FACE* face,int orientation,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopoface); |
69 |
francois |
346 |
void decoupe_tetra_noeud(FEM_ELEMENT3* tet,double* lst,int *nbtet); |
70 |
francois |
433 |
int decoupe_tetra(FEM_ELEMENT3* tet,MG_FACE* face); |
71 |
francois |
281 |
void traite_arete_tangeante(class MG_ARETE* are,int numsol,class FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele); |
72 |
francois |
309 |
void ajouter_liste(LISTE_FM_TRI& lst,LISTE_FM_TRI_ID &lstid,FEM_ELEMENT3* tet,double val); |
73 |
|
|
void supprimer_liste(LISTE_FM_TRI& lst,LISTE_FM_TRI_ID &lstid,FEM_ELEMENT3* tet); |
74 |
|
|
void ajouter_liste(LISTE_FM& lst,FEM_ELEMENT3* tet); |
75 |
|
|
void supprimer_liste(LISTE_FM& lst,FEM_ELEMENT3* tet); |
76 |
francois |
346 |
void decoupe_maillage(int num,FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele,int avecsuppression); |
77 |
|
|
void cree_tag_maillage(void); |
78 |
|
|
double get_volume(FEM_ELEMENT3* tet); |
79 |
|
|
void calcul_valeur_sous_element(FEM_ELEMENT3* ele,FEM_ELEMENT3 *xele); |
80 |
francois |
281 |
double calcul_distance(class FEM_NOEUD* noeud,class MG_ARETE* are,class TOIBREP_POINT *pt,double &tii,double *xyz,double precision=1e-6); |
81 |
francois |
280 |
double calcul_distance(FEM_NOEUD* noeud,class MG_FACE* are,TOIBREP_POINT* pt,double *xyz,double *uv,double precision=1e-6); |
82 |
francois |
281 |
double calcul_distance_level_ortho(FEM_NOEUD* no,MG_ARETE* are,TOIBREP_POINT* pt,double precision=1e-6); |
83 |
|
|
double calcul_distance_level_ortho(FEM_NOEUD* no,MG_ARETE* are,TOIBREP_POINT* pt,double &t,double *xyz,double precision=1e-6); |
84 |
francois |
222 |
double calculdist(double *n,double x,double y,double z,class FEM_NOEUD* noeud); |
85 |
francois |
433 |
void levelsetn(TPL_MAP_ENTITE<class MG_ELEMENT_TOPOLOGIQUE*> *lst,MG_FACE *face,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
86 |
francois |
281 |
void echantillonne_aretes(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face); |
87 |
|
|
void echantillonne_sommets(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face); |
88 |
couturad |
951 |
void calcullevelsetpremierepasse(MG_FACE* face,int sens,std::vector<TOIBREP_POINT*> *lst,int n1,int n2); |
89 |
|
|
void calcullevelsetdeuxiemepasse(std::vector<TOIBREP_POINT*> *lst); |
90 |
francois |
222 |
void etendrelevelset(FEM_SOLUTION* sol,int numsol); |
91 |
francois |
309 |
double resoudgradT(FEM_ELEMENT3* tet,int *signe); |
92 |
francois |
346 |
int signe_tetra(FEM_ELEMENT3* tet); |
93 |
francois |
433 |
TPL_OCTREE<class FEM_ELEMENT3*,class FEM_NOEUD*> octree_tetra; |
94 |
|
|
TPL_OCTREE<class FEM_NOEUD*,class FEM_NOEUD*> octree_noeud; |
95 |
|
|
FEM_NOEUD* inserer_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double x,double y, double z); |
96 |
|
|
XFEM_TRIANGLE3* inserer_xtriangle(FEM_ELEMENT_MAILLAGE* tet,MG_FACE* face,FEM_NOEUD** tabnoeud); |
97 |
francois |
222 |
MG_GEOMETRIE_OUTILS ot; |
98 |
|
|
MG_GEOMETRIE* geo; |
99 |
|
|
FEM_MAILLAGE* mai; |
100 |
|
|
MG_GESTIONNAIRE* gest; |
101 |
|
|
int NPAS; |
102 |
francois |
433 |
double longueur_caracteristique; |
103 |
francois |
276 |
int affichageactif; |
104 |
|
|
void (*affiche)(char *mess); |
105 |
francois |
433 |
void recherche_interieur_face(FEM_ELEMENT3* tet,MG_FACE* face,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
106 |
|
|
void decoupe_element2_par_element1et0(FEM_ELEMENT3* ele,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
107 |
|
|
int decoupe_element2(FEM_ELEMENT3* ele,FEM_NOEUD* no); |
108 |
|
|
int decoupe_element(XFEM_ELEMENT2 *ele,FEM_NOEUD* no); |
109 |
|
|
void decoupe_element(int status,FEM_NOEUD* no,FEM_ELEMENT3* ele); |
110 |
|
|
int decoupe_element(int status,FEM_ELEMENT3 *ele,FEM_NOEUD* no,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3,FEM_NOEUD* no4); |
111 |
|
|
void decoupe_element(XFEM_ELEMENT1* seg,class inter_ele_arete *ele_inter); |
112 |
|
|
void decoupe_xtri(FEM_ELEMENT3* tet,int nb_xtri); |
113 |
|
|
int intersection_arete_triangle(MG_ARETE* are,FEM_NOEUD* no1,FEM_NOEUD *no2,FEM_NOEUD *no3,double *uv,double *xyz); |
114 |
|
|
int decoupe_arete_tetra(MG_ARETE* are,double *xyz,double *xyzcible,double &t,class inter_ele_arete& ele_inter); |
115 |
|
|
int decoupe_segment_xtetra(FEM_ELEMENT3* ele,XFEM_ELEMENT1* seg,double *xyz,double *xyzcible,double &t,inter_ele_arete& xele_inter); |
116 |
|
|
int intersection_segment_triangle(FEM_NOEUD* nos1,FEM_NOEUD* nos2,FEM_NOEUD* no1,FEM_NOEUD *no2,FEM_NOEUD *no3,double *uv,double *xyz); |
117 |
|
|
int test_du_point_milieu(FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_ELEMENT3* tet); |
118 |
|
|
void oriente_tri(XFEM_ELEMENT2* tri,MG_FACE* face); |
119 |
|
|
int inter_segment_segment_plan(XFEM_ELEMENT2 *xfem2,FEM_NOEUD *no1,FEM_NOEUD *no2,FEM_NOEUD *nos1,FEM_NOEUD *nos2,double *xyz); |
120 |
|
|
void testtopo(void); |
121 |
francois |
104 |
}; |
122 |
|
|
|
123 |
|
|
|
124 |
|
|
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
|
128 |
|
|
#endif |