MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_maillage.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 //####// fem_maillage.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef __FEMMAILLAGE_
23 #define __FEMMAILLAGE_
24 
25 
26 
27 
28 
29 #include <map>
30 #include <set>
31 
32 
33 
34 #include "mg_identificateur.h"
35 #include "fem_noeud.h"
36 #include "fem_element0.h"
37 #include "fem_element1.h"
38 #include "fem_element2.h"
39 #include "fem_element3.h"
40 #include "xfem_element0.h"
41 #include "xfem_element1.h"
42 #include "xfem_element2.h"
43 #include "xfem_element3.h"
44 #include "ot_boite_3d.h"
45 #include "tpl_map_entite.h"
46 
47 #include "mg_definition.h"
48 
49 
50 
51 
52 typedef std::set<MG_IDENTIFICATEUR*,inf<MG_IDENTIFICATEUR*> > LISTE_ENTITE;
53 typedef std::map<unsigned long,FEM_NOEUD*,std::less<unsigned long> > LISTE_FEM_NOEUD;
54 typedef std::map<unsigned long,FEM_ELEMENT0*,std::less<unsigned long> > LISTE_FEM_ELEMENT0;
55 typedef std::map<unsigned long,FEM_ELEMENT1*,std::less<unsigned long> > LISTE_FEM_ELEMENT1;
56 typedef std::map<unsigned long,FEM_ELEMENT2*,std::less<unsigned long> > LISTE_FEM_ELEMENT2;
57 typedef std::map<unsigned long,FEM_ELEMENT3*,std::less<unsigned long> > LISTE_FEM_ELEMENT3;
58 typedef std::map<unsigned long,XFEM_ELEMENT0*,std::less<unsigned long> > LISTE_XFEM_ELEMENT0;
59 typedef std::map<unsigned long,XFEM_ELEMENT1*,std::less<unsigned long> > LISTE_XFEM_ELEMENT1;
60 typedef std::map<unsigned long,XFEM_ELEMENT2*,std::less<unsigned long> > LISTE_XFEM_ELEMENT2;
61 typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3;
62 
63  std::ostream& operator << (std::ostream& o,class FEM_MAILLAGE& maillage);
64 
65 
67 {
68 public:
69  FEM_MAILLAGE(class MG_GEOMETRIE* geo,class MG_MAILLAGE* mai,int deg);
70  FEM_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg);
71  virtual ~FEM_MAILLAGE();
74  void change_gestionnaire(class MG_GESTIONNAIRE* mggest);
75  int get_degre(void);
77 
78 
79  FEM_NOEUD* ajouter_fem_noeud(MG_NOEUD* mgnoeud,unsigned long num=0);
80  int ajouter_fem_noeud(FEM_NOEUD *femnoeud);
81  FEM_NOEUD* get_fem_noeudid(unsigned long num);
82  FEM_NOEUD* get_fem_noeud(unsigned int num);
83  FEM_NOEUD* get_premier_noeud(LISTE_FEM_NOEUD::iterator & it);
84  FEM_NOEUD* get_suivant_noeud(LISTE_FEM_NOEUD::iterator & it);
85  unsigned int get_nb_fem_noeud(void);
86  int supprimer_fem_noeudid(unsigned long num);
87  int supprimer_fem_noeud(unsigned int num);
88  void supprimer_tout_fem_noeud(void);
89 
90 
91 
92  int ajouter_fem_element0(FEM_ELEMENT0 *femnoeud);
93  FEM_ELEMENT0* get_fem_element0id(unsigned long num);
94  FEM_ELEMENT0* get_fem_element0(unsigned int num);
95  FEM_ELEMENT0* get_premier_element0(LISTE_FEM_ELEMENT0::iterator & it);
96  FEM_ELEMENT0* get_suivant_element0(LISTE_FEM_ELEMENT0::iterator & it);
97  unsigned int get_nb_fem_element0(void);
98  int supprimer_fem_element0id(unsigned long num);
99  int supprimer_fem_element0(unsigned int num);
100  void supprimer_tout_fem_element0(void);
101 
102  int ajouter_fem_element1(FEM_ELEMENT1 *femsegment);
103  FEM_ELEMENT1* get_fem_element1id(unsigned long num);
104  FEM_ELEMENT1* get_fem_element1(unsigned int num);
105  FEM_ELEMENT1* get_premier_element1(LISTE_FEM_ELEMENT1::iterator & it);
106  FEM_ELEMENT1* get_suivant_element1(LISTE_FEM_ELEMENT1::iterator & it);
107  unsigned int get_nb_fem_element1(void);
108  int supprimer_fem_element1id(unsigned long num);
109  int supprimer_fem_element1(unsigned int num);
110  void supprimer_tout_fem_element1(void);
111 
112 
113 
114  int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle);
115  FEM_ELEMENT2* get_fem_element2id(unsigned long num);
116  FEM_ELEMENT2* get_fem_element2(unsigned int num);
117  FEM_ELEMENT2* get_premier_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
118  FEM_ELEMENT2* get_suivant_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
119  unsigned int get_nb_fem_element2(void);
120  int supprimer_fem_element2id(unsigned long num);
121  int supprimer_fem_element2(unsigned int num);
122  void supprimer_tout_fem_element2(void);
123 
124  int ajouter_fem_element3(FEM_ELEMENT3 *femelement3);
125  FEM_ELEMENT3* get_fem_element3id(unsigned long num);
126  FEM_ELEMENT3* get_fem_element3(unsigned int num);
127  FEM_ELEMENT3* get_premier_element3(LISTE_FEM_ELEMENT3::iterator & it);
128  FEM_ELEMENT3* get_suivant_element3(LISTE_FEM_ELEMENT3::iterator & it);
129  unsigned int get_nb_fem_element3(void);
130  int supprimer_fem_element3id(unsigned long num);
131  int supprimer_fem_element3(unsigned int num);
132  void supprimer_tout_fem_element3(void);
133 
134  int ajouter_xfem_element0(XFEM_ELEMENT0 *femelement0);
135  XFEM_ELEMENT0* get_xfem_element0id(unsigned long num);
136  XFEM_ELEMENT0* get_xfem_element0(unsigned int num);
137  XFEM_ELEMENT0* get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
138  XFEM_ELEMENT0* get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
139  unsigned int get_nb_xfem_element0(void);
140  int supprimer_xfem_element0id(unsigned long num);
141  int supprimer_xfem_element0(unsigned int num);
142  void supprimer_tout_xfem_element0(void);
143 
144  int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1);
145  XFEM_ELEMENT1* get_xfem_element1id(unsigned long num);
146  XFEM_ELEMENT1* get_xfem_element1(unsigned int num);
147  XFEM_ELEMENT1* get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
148  XFEM_ELEMENT1* get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
149  unsigned int get_nb_xfem_element1(void);
150  int supprimer_xfem_element1id(unsigned long num);
151  int supprimer_xfem_element1(unsigned int num);
152  void supprimer_tout_xfem_element1(void);
153 
154  int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2);
155  XFEM_ELEMENT2* get_xfem_element2id(unsigned long num);
156  XFEM_ELEMENT2* get_xfem_element2(unsigned int num);
157  XFEM_ELEMENT2* get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
158  XFEM_ELEMENT2* get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
159  unsigned int get_nb_xfem_element2(void);
160  int supprimer_xfem_element2id(unsigned long num);
161  int supprimer_xfem_element2(unsigned int num);
162  void supprimer_tout_xfem_element2(void);
163 
164  int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3);
165  XFEM_ELEMENT3* get_xfem_element3id(unsigned long num);
166  XFEM_ELEMENT3* get_xfem_element3(unsigned int num);
167  XFEM_ELEMENT3* get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
168  XFEM_ELEMENT3* get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
169  unsigned int get_nb_xfem_element3(void);
170  int supprimer_xfem_element3id(unsigned long num);
171  int supprimer_xfem_element3(unsigned int num);
172  void supprimer_tout_xfem_element3(void);
173 
174 
175  //void construire(int num=0);
176  void exporter_cosmos(std::string& nomfic);
177  //void optimise_numerotation(void);
178  //void copie_numerotation_opt(void);
179  bool contient ( MG_IDENTIFICATEUR * id );
180 
182 
183 
184  void calcul_deforme(class FEM_SOLUTION* solx,int numx,class FEM_SOLUTION* soly,int numy,class FEM_SOLUTION* solz,int numz);
185  int existe_deforme(void);
186  void active_deforme(void);
187  void desactive_deforme(void);
188  int existe_reaction(void);
189  void active_reaction(void);
190  void desactive_reaction(void);
191  double calcul_coef(void);
192  void calcul_somme_reaction(double &rx,double &ry,double &rz);
193  virtual void enregistrer(std::ostream& o,double version);
194  virtual void get_fichier_dependant(std::vector<std::string> &liste_fichier);
196  void decompte(int &nb_noeud,int &nb_seg2,int &nb_seg3,int &nb_tri3,int &nb_tri6,int &nb_quad4,int &nb_quad8,int &nb_tet4,int &nb_tet10,int &nb_hex8,int &nb_hex20);
197  friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage);
198  void change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp);
199  bool get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp);
200  bool get_est_structure(void);
201 
202 private:
203  //void construire_lineaire(TPL_MAP_ENTITE<MG_SEGMENT*> &mini);
204  //void construire_quadratique(void);
218  int degre;
219  int deforme;
220  int reaction;
221 
222 
224  int nx,ny,nz;
226 
227 };
228 
229 
230 
231 #endif
232 
233 
FEM_ELEMENT0 * get_premier_element0(LISTE_FEM_ELEMENT0::iterator &it)
XFEM_ELEMENT2 * get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
FEM_ELEMENT0 * get_fem_element0id(unsigned long num)
BOITE_3D boite_englobante
Definition: fem_maillage.h:223
XFEM_ELEMENT1 * get_xfem_element1(unsigned int num)
LISTE_XFEM_ELEMENT0 lst_xfem_element0
Definition: fem_maillage.h:211
void supprimer_tout_fem_element0(void)
void change_param_structure(BOITE_3D btmp, int nxtmp, int nytmp, int nztmp)
FEM_ELEMENT0 * get_fem_element0(unsigned int num)
MG_MAILLAGE * maillage
Definition: fem_maillage.h:217
int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2)
LISTE_FEM_NOEUD lst_fem_noeud
Definition: fem_maillage.h:206
unsigned int get_nb_fem_element2(void)
void supprimer_tout_xfem_element2(void)
void calcul_deforme(class FEM_SOLUTION *solx, int numx, class FEM_SOLUTION *soly, int numy, class FEM_SOLUTION *solz, int numz)
FEM_ELEMENT3 * get_fem_element3(unsigned int num)
LISTE_FEM_ELEMENT3 lst_fem_element3
Definition: fem_maillage.h:210
unsigned int get_nb_xfem_element0(void)
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
void recherche_connexion_multidimension(TPL_MAP_ENTITE< class MG_SEGMENT * > &mini)
FEM_NOEUD * get_fem_noeudid(unsigned long num)
LISTE_FEM_ELEMENT1 lst_fem_element1
Definition: fem_maillage.h:208
LISTE_XFEM_ELEMENT3 lst_xfem_element3
Definition: fem_maillage.h:214
int supprimer_xfem_element1id(unsigned long num)
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
XFEM_ELEMENT3 * get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
bool contient(MG_IDENTIFICATEUR *id)
FEM_ELEMENT2 * get_fem_element2id(unsigned long num)
unsigned int get_nb_fem_element1(void)
FEM_ELEMENT0 * get_suivant_element0(LISTE_FEM_ELEMENT0::iterator &it)
XFEM_ELEMENT0 * get_xfem_element0id(unsigned long num)
unsigned int get_nb_fem_element0(void)
int existe_deforme(void)
FEM_MAILLAGE * dupliquer(MG_GESTIONNAIRE *gest)
int supprimer_fem_element2(unsigned int num)
MG_GEOMETRIE * get_mg_geometrie(void)
XFEM_ELEMENT3 * get_xfem_element3(unsigned int num)
int supprimer_fem_noeud(unsigned int num)
void calcul_somme_reaction(double &rx, double &ry, double &rz)
MG_MAILLAGE * get_mg_maillage(void)
void change_gestionnaire(class MG_GESTIONNAIRE *mggest)
unsigned int get_nb_fem_element3(void)
virtual void enregistrer(std::ostream &o, double version)
LISTE_FEM_ELEMENT2 lst_fem_element2
Definition: fem_maillage.h:209
int get_degre(void)
unsigned int get_nb_xfem_element1(void)
int existe_reaction(void)
int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3)
int supprimer_xfem_element1(unsigned int num)
int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1)
int supprimer_xfem_element3id(unsigned long num)
XFEM_ELEMENT3 * get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
MG_GESTIONNAIRE * gest
Definition: fem_maillage.h:216
int supprimer_fem_element0id(unsigned long num)
int supprimer_fem_element3(unsigned int num)
friend std::ostream & operator<<(std::ostream &o, FEM_MAILLAGE &maillage)
void adapte_degre_importation_maillage(int deg)
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
LISTE_XFEM_ELEMENT1 lst_xfem_element1
Definition: fem_maillage.h:212
int supprimer_fem_element0(unsigned int num)
int supprimer_xfem_element2id(unsigned long num)
void supprimer_tout_xfem_element1(void)
void supprimer_tout_fem_element3(void)
void supprimer_tout_xfem_element3(void)
XFEM_ELEMENT2 * get_xfem_element2id(unsigned long num)
unsigned int get_nb_xfem_element2(void)
XFEM_ELEMENT1 * get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
XFEM_ELEMENT0 * get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
int supprimer_fem_element3id(unsigned long num)
FEM_NOEUD * ajouter_fem_noeud(MG_NOEUD *mgnoeud, unsigned long num=0)
XFEM_ELEMENT0 * get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
XFEM_ELEMENT1 * get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
XFEM_ELEMENT2 * get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
MG_GEOMETRIE * mg_geometrie
Definition: fem_maillage.h:215
int supprimer_xfem_element2(unsigned int num)
int supprimer_xfem_element0id(unsigned long num)
unsigned int get_nb_xfem_element3(void)
bool est_structure
Definition: fem_maillage.h:225
FEM_NOEUD * get_fem_noeud(unsigned int num)
void active_reaction(void)
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
void supprimer_tout_fem_element1(void)
int supprimer_fem_element1(unsigned int num)
void supprimer_tout_fem_noeud(void)
void exporter_cosmos(std::string &nomfic)
int ajouter_xfem_element0(XFEM_ELEMENT0 *femelement0)
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
FEM_ELEMENT1 * get_fem_element1(unsigned int num)
XFEM_ELEMENT3 * get_xfem_element3id(unsigned long num)
LISTE_XFEM_ELEMENT2 lst_xfem_element2
Definition: fem_maillage.h:213
XFEM_ELEMENT0 * get_xfem_element0(unsigned int num)
LISTE_ENTITE lst_entite
Definition: fem_maillage.h:205
unsigned int get_nb_fem_noeud(void)
void decompte(int &nb_noeud, int &nb_seg2, int &nb_seg3, int &nb_tri3, int &nb_tri6, int &nb_quad4, int &nb_quad8, int &nb_tet4, int &nb_tet10, int &nb_hex8, int &nb_hex20)
void active_deforme(void)
void desactive_deforme(void)
LISTE_FEM_ELEMENT0 lst_fem_element0
Definition: fem_maillage.h:207
XFEM_ELEMENT2 * get_xfem_element2(unsigned int num)
int ajouter_fem_element3(FEM_ELEMENT3 *femelement3)
int supprimer_xfem_element3(unsigned int num)
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
FEM_ELEMENT2 * get_fem_element2(unsigned int num)
FEM_MAILLAGE(class MG_GEOMETRIE *geo, class MG_MAILLAGE *mai, int deg)
int supprimer_fem_element2id(unsigned long num)
void desactive_reaction(void)
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
int ajouter_fem_element1(FEM_ELEMENT1 *femsegment)
double calcul_coef(void)
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
XFEM_ELEMENT1 * get_xfem_element1id(unsigned long num)
bool get_est_structure(void)
FEM_ELEMENT3 * get_fem_element3id(unsigned long num)
int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle)
int supprimer_fem_noeudid(unsigned long num)
void supprimer_tout_fem_element2(void)
FEM_ELEMENT1 * get_fem_element1id(unsigned long num)
bool get_param_structure(BOITE_3D &btmp, int &nxtmp, int &nytmp, int &nztmp)
void supprimer_tout_xfem_element0(void)
int supprimer_xfem_element0(unsigned int num)
virtual ~FEM_MAILLAGE()
int ajouter_fem_element0(FEM_ELEMENT0 *femnoeud)
int supprimer_fem_element1id(unsigned long num)
std::set< MG_IDENTIFICATEUR *, inf< MG_IDENTIFICATEUR * > > LISTE_ENTITE
Definition: fem_maillage.h:52
std::map< unsigned long, FEM_ELEMENT1 *, std::less< unsigned long > > LISTE_FEM_ELEMENT1
Definition: fem_maillage.h:55
std::map< unsigned long, FEM_ELEMENT3 *, std::less< unsigned long > > LISTE_FEM_ELEMENT3
Definition: fem_maillage.h:57
std::map< unsigned long, FEM_ELEMENT2 *, std::less< unsigned long > > LISTE_FEM_ELEMENT2
Definition: fem_maillage.h:56
std::ostream & operator<<(std::ostream &o, class FEM_MAILLAGE &maillage)
std::map< unsigned long, XFEM_ELEMENT1 *, std::less< unsigned long > > LISTE_XFEM_ELEMENT1
Definition: fem_maillage.h:59
std::map< unsigned long, XFEM_ELEMENT0 *, std::less< unsigned long > > LISTE_XFEM_ELEMENT0
Definition: fem_maillage.h:58
std::map< unsigned long, XFEM_ELEMENT2 *, std::less< unsigned long > > LISTE_XFEM_ELEMENT2
Definition: fem_maillage.h:60
std::map< unsigned long, XFEM_ELEMENT3 *, std::less< unsigned long > > LISTE_XFEM_ELEMENT3
Definition: fem_maillage.h:61
std::map< unsigned long, FEM_ELEMENT0 *, std::less< unsigned long > > LISTE_FEM_ELEMENT0
Definition: fem_maillage.h:54
std::map< unsigned long, FEM_NOEUD *, std::less< unsigned long > > LISTE_FEM_NOEUD
Definition: fem_maillage.h:53