MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
toibrep.h
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
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 #ifndef _TOIBREP_
23 #define _TOIBREP_
24 
25 
26 
27 
28 
29 #include <string>
30 #include "tpl_octree.h"
31 #include "mg_geometrie_outils.h"
32 #ifdef ENABLE_IBREP
33  #include "IBrep.h"
34 #endif
35 #include "fem_maillage_outils.h"
36 
37 
38 class XFEM_TRIANGLE3;
39 
40 class TOIBREP
41 {
42 public:
44 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 ~TOIBREP();
49 #ifdef ENABLE_IBREP
50 IBrep importer(std::string nomfichier,std::string nomfichieribrep,class MG_GROUPE_TOPOLOGIQUE* mggt=NULL);
51 #endif
52 void active_affichage(void (*fonc)(char*));
53 
54 #ifdef ENABLE_IBREP
55 IBrep exporter_IBrep(string chemin,class FEM_SOLUTION* solution,class FEM_SOLUTION* solution_ele,MG_GROUPE_TOPOLOGIQUE* mggt=NULL);
56 #endif
58 
59 private:
60 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 typedef std::vector<FEM_ELEMENT3*> LISTE_FM;
63 
67 void remplir_trou_tangeant(std::vector<class TOIBREP_POINT*> *lst,MG_ARETE* are,FEM_SOLUTION* solution_ele);
68 void remplir_trou(std::vector<class TOIBREP_POINT*> *lst,MG_FACE* face,int orientation,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopoface);
69 void decoupe_tetra_noeud(FEM_ELEMENT3* tet,double* lst,int *nbtet);
70 int decoupe_tetra(FEM_ELEMENT3* tet,MG_FACE* face);
71 void traite_arete_tangeante(class MG_ARETE* are,int numsol,class FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele);
72 void ajouter_liste(LISTE_FM_TRI& lst,LISTE_FM_TRI_ID &lstid,FEM_ELEMENT3* tet,double val);
74 void ajouter_liste(LISTE_FM& lst,FEM_ELEMENT3* tet);
75 void supprimer_liste(LISTE_FM& lst,FEM_ELEMENT3* tet);
76 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);
80 double calcul_distance(class FEM_NOEUD* noeud,class MG_ARETE* are,class TOIBREP_POINT *pt,double &tii,double *xyz,double precision=1e-6);
81 double calcul_distance(FEM_NOEUD* noeud,class MG_FACE* are,TOIBREP_POINT* pt,double *xyz,double *uv,double precision=1e-6);
82 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 double calculdist(double *n,double x,double y,double z,class FEM_NOEUD* noeud);
86 void echantillonne_aretes(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face);
87 void echantillonne_sommets(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face);
88 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 void etendrelevelset(FEM_SOLUTION* sol,int numsol);
91 double resoudgradT(FEM_ELEMENT3* tet,int *signe);
92 int signe_tetra(FEM_ELEMENT3* tet);
95 FEM_NOEUD* inserer_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double x,double y, double z);
101 int NPAS;
104 void (*affiche)(char *mess);
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);
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 };
122 
123 
124 
125 
126 
127 
128 #endif
TOIBREP::test_du_point_milieu
int test_du_point_milieu(FEM_NOEUD *no1, FEM_NOEUD *no2, FEM_ELEMENT3 *tet)
Definition: toibrep.cpp:110
FEM_SOLUTION
Definition: fem_solution.h:40
TOIBREP::outilfem
FEM_MAILLAGE_OUTILS outilfem
Definition: toibrep.h:64
TOIBREP_POINT
Definition: toibrep_point.h:29
XFEM_ELEMENT2
Definition: xfem_element2.h:34
TOIBREP::inserer_xtriangle
XFEM_TRIANGLE3 * inserer_xtriangle(FEM_ELEMENT_MAILLAGE *tet, MG_FACE *face, FEM_NOEUD **tabnoeud)
Definition: toibrep.cpp:2936
TOIBREP::calcul_distance_level_ortho
double calcul_distance_level_ortho(FEM_NOEUD *no, MG_ARETE *are, TOIBREP_POINT *pt, double precision=1e-6)
Definition: toibrep.cpp:1758
TOIBREP::XINTERIEUR
@ XINTERIEUR
Definition: toibrep.h:43
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
TOIBREP::decoupe_element2_par_element1et0
void decoupe_element2_par_element1et0(FEM_ELEMENT3 *ele, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lstentitetopo)
Definition: toibrep.cpp:2390
TOIBREP::mai
FEM_MAILLAGE * mai
Definition: toibrep.h:99
TOIBREP::oriente_tri
void oriente_tri(XFEM_ELEMENT2 *tri, MG_FACE *face)
Definition: toibrep.cpp:124
TOIBREP::decoupe_tetra_noeud
void decoupe_tetra_noeud(FEM_ELEMENT3 *tet, double *lst, int *nbtet)
Definition: toibrep.cpp:1490
TOIBREP::element_classe
element_classe
Definition: toibrep.h:43
OT_CPU
Definition: ot_cpu.h:31
TOIBREP::XINCONNU
@ XINCONNU
Definition: toibrep.h:43
TOIBREP::TOIBREP
TOIBREP(class MG_GESTIONNAIRE *g, class MG_GEOMETRIE *ge, class FEM_MAILLAGE *femm, int nbpas, class OT_CPU *compt)
Definition: toibrep.cpp:58
TOIBREP::decoupe_maillage
void decoupe_maillage(int num, FEM_SOLUTION *solution, FEM_SOLUTION *solution_ele, int avecsuppression)
Definition: toibrep.cpp:406
TOIBREP::supprimer_liste
void supprimer_liste(LISTE_FM_TRI &lst, LISTE_FM_TRI_ID &lstid, FEM_ELEMENT3 *tet)
Definition: toibrep.cpp:3565
TOIBREP::traite_arete_tangeante
void traite_arete_tangeante(class MG_ARETE *are, int numsol, class FEM_SOLUTION *solution, FEM_SOLUTION *solution_ele)
Definition: toibrep.cpp:535
FEM_ELEMENT3
Definition: fem_element3.h:34
TOIBREP::recherche_arete_tangeante
void recherche_arete_tangeante(TPL_MAP_ENTITE< class MG_ARETE * > &lst, TPL_MAP_ENTITE< class MG_ELEMENT_TOPOLOGIQUE * > &lsttopo)
Definition: toibrep.cpp:97
TOIBREP::decoupe_tetra
int decoupe_tetra(FEM_ELEMENT3 *tet, MG_FACE *face)
Definition: toibrep.cpp:1231
TOIBREP::ot
MG_GEOMETRIE_OUTILS ot
Definition: toibrep.h:97
XFEM_ELEMENT1
Definition: xfem_element1.h:34
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
TOIBREP::intersection_segment_triangle
int intersection_segment_triangle(FEM_NOEUD *nos1, FEM_NOEUD *nos2, FEM_NOEUD *no1, FEM_NOEUD *no2, FEM_NOEUD *no3, double *uv, double *xyz)
Definition: toibrep.cpp:2293
TOIBREP::testtopo
void testtopo(void)
Definition: toibrep.cpp:3730
TOIBREP::active_affichage
void active_affichage(void(*fonc)(char *))
Definition: toibrep.cpp:78
TOIBREP::cree_tag_maillage
void cree_tag_maillage(void)
Definition: toibrep.cpp:325
TOIBREP::calcullevelsetdeuxiemepasse
void calcullevelsetdeuxiemepasse(std::vector< TOIBREP_POINT * > *lst)
Definition: toibrep.cpp:1698
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
TOIBREP::echantillonne_sommets
void echantillonne_sommets(std::vector< TOIBREP_POINT * > &lst, MG_FACE *face)
Definition: toibrep.cpp:629
TOIBREP
Definition: toibrep.h:40
TOIBREP::NPAS
int NPAS
Definition: toibrep.h:101
TOIBREP::INCONNU
@ INCONNU
Definition: toibrep.h:43
TOIBREP::echantillonne_aretes
void echantillonne_aretes(std::vector< TOIBREP_POINT * > &lst, MG_FACE *face)
Definition: toibrep.cpp:673
TOIBREP::EXTERIEUR
@ EXTERIEUR
Definition: toibrep.h:43
TOIBREP::FRONTIERE
@ FRONTIERE
Definition: toibrep.h:43
TOIBREP::octree_noeud
TPL_OCTREE< class FEM_NOEUD *, class FEM_NOEUD * > octree_noeud
Definition: toibrep.h:94
FEM_ELEMENT_MAILLAGE
Definition: fem_element_maillage.h:35
TOIBREP::XFRONTIERE
@ XFRONTIERE
Definition: toibrep.h:43
FEM_MAILLAGE
Definition: fem_maillage.h:66
TOIBREP::calcullevelsetpremierepasse
void calcullevelsetpremierepasse(MG_FACE *face, int sens, std::vector< TOIBREP_POINT * > *lst, int n1, int n2)
Definition: toibrep.cpp:1564
TOIBREP::inserer_noeud
FEM_NOEUD * inserer_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double x, double y, double z)
Definition: toibrep.cpp:2961
TOIBREP::etendrelevelset
void etendrelevelset(FEM_SOLUTION *sol, int numsol)
Definition: toibrep.cpp:1853
TOIBREP::decoupe_segment_xtetra
int decoupe_segment_xtetra(FEM_ELEMENT3 *ele, XFEM_ELEMENT1 *seg, double *xyz, double *xyzcible, double &t, inter_ele_arete &xele_inter)
Definition: toibrep.cpp:3338
TOIBREP::calculdist
double calculdist(double *n, double x, double y, double z, class FEM_NOEUD *noeud)
Definition: toibrep.cpp:86
TOIBREP::octree_tetra
TPL_OCTREE< class FEM_ELEMENT3 *, class FEM_NOEUD * > octree_tetra
Definition: toibrep.h:93
TOIBREP::compteur
OT_CPU * compteur
Definition: toibrep.h:65
tpl_octree.h
inter_ele_arete
Definition: toibrep.cpp:42
TOIBREP::recherche_interieur_face
void recherche_interieur_face(FEM_ELEMENT3 *tet, MG_FACE *face, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lstentitetopo)
Definition: toibrep.cpp:2826
FEM_NOEUD
Definition: fem_noeud.h:35
TOIBREP::decoupe_element
int decoupe_element(XFEM_ELEMENT2 *ele, FEM_NOEUD *no)
Definition: toibrep.cpp:2421
TOIBREP::LISTE_FM_TRI
std::multimap< double, FEM_ELEMENT3 *, std::less< double > > LISTE_FM_TRI
Definition: toibrep.h:60
TOIBREP::decoupe_arete_tetra
int decoupe_arete_tetra(MG_ARETE *are, double *xyz, double *xyzcible, double &t, class inter_ele_arete &ele_inter)
Definition: toibrep.cpp:3424
TOIBREP::ajouter_liste
void ajouter_liste(LISTE_FM_TRI &lst, LISTE_FM_TRI_ID &lstid, FEM_ELEMENT3 *tet, double val)
Definition: toibrep.cpp:3558
TOIBREP::gest
MG_GESTIONNAIRE * gest
Definition: toibrep.h:100
FEM_MAILLAGE_OUTILS
Definition: fem_maillage_outils.h:56
MG_GROUPE_TOPOLOGIQUE
Definition: mg_groupe_topologique.h:31
XFEM_TRIANGLE3
Definition: xfem_triangle3.h:34
TOIBREP::LISTE_FM_TRI_ID
std::map< unsigned long, LISTE_FM_TRI::iterator, std::less< unsigned long > > LISTE_FM_TRI_ID
Definition: toibrep.h:61
TOIBREP::inter_segment_segment_plan
int inter_segment_segment_plan(XFEM_ELEMENT2 *xfem2, FEM_NOEUD *no1, FEM_NOEUD *no2, FEM_NOEUD *nos1, FEM_NOEUD *nos2, double *xyz)
Definition: toibrep.cpp:3659
mg_geometrie_outils.h
TOIBREP::affichageactif
int affichageactif
Definition: toibrep.h:103
MG_GEOMETRIE
Definition: mg_geometrie.h:84
TOIBREP::get_volume
double get_volume(FEM_ELEMENT3 *tet)
Definition: toibrep.cpp:392
TOIBREP::affiche
void(* affiche)(char *mess)
Definition: toibrep.h:104
TOIBREP::LISTE_FM
std::vector< FEM_ELEMENT3 * > LISTE_FM
Definition: toibrep.h:62
TOIBREP::importer_et_decouper
void importer_et_decouper(MG_GROUPE_TOPOLOGIQUE *mggt)
Definition: toibrep.cpp:2985
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
TOIBREP::levelsetn
void levelsetn(TPL_MAP_ENTITE< class MG_ELEMENT_TOPOLOGIQUE * > *lst, MG_FACE *face, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lstentitetopo)
Definition: toibrep.cpp:711
TOIBREP::geo
MG_GEOMETRIE * geo
Definition: toibrep.h:98
TOIBREP::signe_tetra
int signe_tetra(FEM_ELEMENT3 *tet)
Definition: toibrep.cpp:495
TOIBREP::calcul_valeur_sous_element
void calcul_valeur_sous_element(FEM_ELEMENT3 *ele, FEM_ELEMENT3 *xele)
Definition: toibrep.cpp:458
TOIBREP::INTERIEUR
@ INTERIEUR
Definition: toibrep.h:43
TOIBREP::resoudgradT
double resoudgradT(FEM_ELEMENT3 *tet, int *signe)
Definition: toibrep.cpp:3586
TOIBREP::decoupe_element2
int decoupe_element2(FEM_ELEMENT3 *ele, FEM_NOEUD *no)
Definition: toibrep.cpp:2410
TOIBREP::XEXTERIEUR
@ XEXTERIEUR
Definition: toibrep.h:43
MG_GEOMETRIE_OUTILS
Definition: mg_geometrie_outils.h:37
TOIBREP::decoupe_xtri
void decoupe_xtri(FEM_ELEMENT3 *tet, int nb_xtri)
Definition: toibrep.cpp:2731
TOIBREP::remplir_trou
void remplir_trou(std::vector< class TOIBREP_POINT * > *lst, MG_FACE *face, int orientation, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lstentitetopoface)
Definition: toibrep.cpp:1042
TPL_OCTREE< class FEM_ELEMENT3 *, class FEM_NOEUD * >
TOIBREP::intersection_arete_triangle
int intersection_arete_triangle(MG_ARETE *are, FEM_NOEUD *no1, FEM_NOEUD *no2, FEM_NOEUD *no3, double *uv, double *xyz)
Definition: toibrep.cpp:2325
TOIBREP::calcul_distance
double calcul_distance(class FEM_NOEUD *noeud, class MG_ARETE *are, class TOIBREP_POINT *pt, double &tii, double *xyz, double precision=1e-6)
Definition: toibrep.cpp:1720
TOIBREP::longueur_caracteristique
double longueur_caracteristique
Definition: toibrep.h:102
TOIBREP::~TOIBREP
~TOIBREP()
Definition: toibrep.cpp:72
fem_maillage_outils.h
TOIBREP::remplir_trou_tangeant
void remplir_trou_tangeant(std::vector< class TOIBREP_POINT * > *lst, MG_ARETE *are, FEM_SOLUTION *solution_ele)
Definition: toibrep.cpp:879