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 |
|
|
//####// fem_maillage.h |
15 |
|
|
//####// |
16 |
|
|
//####//------------------------------------------------------------ |
17 |
|
|
//####//------------------------------------------------------------ |
18 |
|
|
//####// COPYRIGHT 2000-2024 |
19 |
|
|
//####// jeu 13 jun 2024 11:58:54 EDT |
20 |
|
|
//####//------------------------------------------------------------ |
21 |
|
|
//####//------------------------------------------------------------ |
22 |
francois |
283 |
#ifndef __FEMMAILLAGE_ |
23 |
|
|
#define __FEMMAILLAGE_ |
24 |
|
|
|
25 |
|
|
|
26 |
|
|
|
27 |
francois |
1158 |
|
28 |
|
|
|
29 |
francois |
283 |
#include <map> |
30 |
|
|
#include <set> |
31 |
|
|
|
32 |
|
|
|
33 |
francois |
1158 |
|
34 |
francois |
283 |
#include "mg_identificateur.h" |
35 |
|
|
#include "fem_noeud.h" |
36 |
francois |
399 |
#include "fem_element0.h" |
37 |
francois |
310 |
#include "fem_element1.h" |
38 |
|
|
#include "fem_element2.h" |
39 |
|
|
#include "fem_element3.h" |
40 |
francois |
399 |
#include "xfem_element0.h" |
41 |
francois |
380 |
#include "xfem_element1.h" |
42 |
|
|
#include "xfem_element2.h" |
43 |
francois |
339 |
#include "xfem_element3.h" |
44 |
francois |
481 |
#include "ot_boite_3d.h" |
45 |
francois |
767 |
#include "tpl_map_entite.h" |
46 |
francois |
310 |
|
47 |
francois |
375 |
#include "mg_definition.h" |
48 |
francois |
283 |
|
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 |
francois |
399 |
typedef std::map<unsigned long,FEM_ELEMENT0*,std::less<unsigned long> > LISTE_FEM_ELEMENT0; |
55 |
francois |
309 |
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 |
francois |
399 |
typedef std::map<unsigned long,XFEM_ELEMENT0*,std::less<unsigned long> > LISTE_XFEM_ELEMENT0; |
59 |
francois |
380 |
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 |
francois |
339 |
typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3; |
62 |
francois |
283 |
|
63 |
francois |
1158 |
std::ostream& operator << (std::ostream& o,class FEM_MAILLAGE& maillage); |
64 |
francois |
283 |
|
65 |
|
|
|
66 |
francois |
1158 |
class FEM_MAILLAGE : public MG_IDENTIFICATEUR |
67 |
francois |
283 |
{ |
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(); |
72 |
|
|
MG_GEOMETRIE* get_mg_geometrie(void); |
73 |
|
|
MG_MAILLAGE* get_mg_maillage(void); |
74 |
|
|
void change_gestionnaire(class MG_GESTIONNAIRE* mggest); |
75 |
|
|
int get_degre(void); |
76 |
francois |
1112 |
void adapte_degre_importation_maillage(int deg); |
77 |
francois |
283 |
|
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 |
francois |
399 |
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 |
francois |
309 |
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 |
francois |
283 |
|
112 |
|
|
|
113 |
|
|
|
114 |
francois |
309 |
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 |
francois |
283 |
|
124 |
francois |
309 |
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 |
francois |
399 |
|
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 |
francois |
380 |
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 |
francois |
339 |
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 |
francois |
380 |
|
174 |
|
|
|
175 |
francois |
883 |
//void construire(int num=0); |
176 |
francois |
283 |
void exporter_cosmos(std::string& nomfic); |
177 |
francois |
883 |
//void optimise_numerotation(void); |
178 |
|
|
//void copie_numerotation_opt(void); |
179 |
francois |
283 |
bool contient ( MG_IDENTIFICATEUR * id ); |
180 |
|
|
|
181 |
francois |
767 |
void recherche_connexion_multidimension(TPL_MAP_ENTITE<class MG_SEGMENT*> &mini); |
182 |
francois |
339 |
|
183 |
|
|
|
184 |
francois |
283 |
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 |
gervaislavoie |
304 |
void desactive_deforme(void); |
188 |
francois |
339 |
int existe_reaction(void); |
189 |
|
|
void active_reaction(void); |
190 |
|
|
void desactive_reaction(void); |
191 |
francois |
283 |
double calcul_coef(void); |
192 |
francois |
325 |
void calcul_somme_reaction(double &rx,double &ry,double &rz); |
193 |
francois |
763 |
virtual void enregistrer(std::ostream& o,double version); |
194 |
francois |
910 |
virtual void get_fichier_dependant(std::vector<std::string> &liste_fichier); |
195 |
francois |
283 |
FEM_MAILLAGE* dupliquer(MG_GESTIONNAIRE* gest); |
196 |
francois |
310 |
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 |
francois |
283 |
friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage); |
198 |
francois |
465 |
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 |
francois |
283 |
private: |
203 |
francois |
883 |
//void construire_lineaire(TPL_MAP_ENTITE<MG_SEGMENT*> &mini); |
204 |
|
|
//void construire_quadratique(void); |
205 |
francois |
283 |
LISTE_ENTITE lst_entite; |
206 |
|
|
LISTE_FEM_NOEUD lst_fem_noeud; |
207 |
francois |
399 |
LISTE_FEM_ELEMENT0 lst_fem_element0; |
208 |
francois |
309 |
LISTE_FEM_ELEMENT1 lst_fem_element1; |
209 |
|
|
LISTE_FEM_ELEMENT2 lst_fem_element2; |
210 |
|
|
LISTE_FEM_ELEMENT3 lst_fem_element3; |
211 |
francois |
399 |
LISTE_XFEM_ELEMENT0 lst_xfem_element0; |
212 |
francois |
380 |
LISTE_XFEM_ELEMENT1 lst_xfem_element1; |
213 |
|
|
LISTE_XFEM_ELEMENT2 lst_xfem_element2; |
214 |
francois |
339 |
LISTE_XFEM_ELEMENT3 lst_xfem_element3; |
215 |
francois |
283 |
MG_GEOMETRIE* mg_geometrie; |
216 |
|
|
MG_GESTIONNAIRE *gest; |
217 |
|
|
MG_MAILLAGE* maillage; |
218 |
|
|
int degre; |
219 |
|
|
int deforme; |
220 |
francois |
339 |
int reaction; |
221 |
francois |
465 |
|
222 |
|
|
|
223 |
|
|
BOITE_3D boite_englobante; |
224 |
|
|
int nx,ny,nz; |
225 |
|
|
bool est_structure; |
226 |
francois |
339 |
|
227 |
francois |
283 |
}; |
228 |
|
|
|
229 |
|
|
|
230 |
|
|
|
231 |
|
|
#endif |
232 |
|
|
|
233 |
|
|
|