ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_maillage.h
Revision: 883
Committed: Thu Apr 20 13:38:18 2017 UTC (8 years, 4 months ago) by francois
Content type: text/plain
File size: 9888 byte(s)
Log Message:
Creation d'un mailleur FEM pour pouvoir avoir des stratégies paramétrées de maillage. L'ancienne méthode construit disparait et est remplacée par l'utilisation d'un MAILLEUR_FEM.
Stratégie de quadratisation mise en place : déplacer les noeuds pour s'assurer que les tetras quadratiques présentent une distortion au dessu d'une borne inférieure. Mais ces noeuds quittent la géométrie.

Les paramètres dans ~/.magic.

File Contents

# Content
1 //------------------------------------------------------------
2 //------------------------------------------------------------
3 // MAGiC
4 // Jean Christophe Cuilli�re et Vincent FRANCOIS
5 // D�partement de G�nie M�canique - UQTR
6 //------------------------------------------------------------
7 // Le projet MAGIC est un projet de recherche du d�partement
8 // de g�nie m�canique de l'Universit� du Qu�bec �
9 // Trois Rivi�res
10 // Les librairies ne peuvent �tre utilis�es sans l'accord
11 // des auteurs (contact : francois@uqtr.ca)
12 //------------------------------------------------------------
13 //------------------------------------------------------------
14 //
15 // fem_maillage.h
16 //
17 //------------------------------------------------------------
18 //------------------------------------------------------------
19 // COPYRIGHT 2000
20 // Version du 02/03/2006 � 11H22
21 //------------------------------------------------------------
22 //------------------------------------------------------------
23 #ifndef __FEMMAILLAGE_
24 #define __FEMMAILLAGE_
25
26
27 #ifdef WINDOWS_VERSION
28 #ifdef BUILT_DLL_GEOMETRIE
29 #define DLLPORTGEOMETRIE __declspec(dllexport)
30 #else
31 #define DLLPORTGEOMETRIE __declspec(dllimport)
32 #endif
33 #else
34 #define DLLPORTGEOMETRIE
35 #endif
36
37 #ifdef BORLANDCPP
38 #include <map.h>
39 #include <set.h>
40 #else
41 #include <map>
42 #include <set>
43 #endif
44
45
46 #include "mg_identificateur.h"
47 #include "fem_noeud.h"
48 #include "fem_element0.h"
49 #include "fem_element1.h"
50 #include "fem_element2.h"
51 #include "fem_element3.h"
52 #include "xfem_element0.h"
53 #include "xfem_element1.h"
54 #include "xfem_element2.h"
55 #include "xfem_element3.h"
56 #include "ot_boite_3d.h"
57 #include "tpl_map_entite.h"
58
59 #include "mg_definition.h"
60
61
62
63
64 typedef std::set<MG_IDENTIFICATEUR*,inf<MG_IDENTIFICATEUR*> > LISTE_ENTITE;
65 typedef std::map<unsigned long,FEM_NOEUD*,std::less<unsigned long> > LISTE_FEM_NOEUD;
66 typedef std::map<unsigned long,FEM_ELEMENT0*,std::less<unsigned long> > LISTE_FEM_ELEMENT0;
67 typedef std::map<unsigned long,FEM_ELEMENT1*,std::less<unsigned long> > LISTE_FEM_ELEMENT1;
68 typedef std::map<unsigned long,FEM_ELEMENT2*,std::less<unsigned long> > LISTE_FEM_ELEMENT2;
69 typedef std::map<unsigned long,FEM_ELEMENT3*,std::less<unsigned long> > LISTE_FEM_ELEMENT3;
70 typedef std::map<unsigned long,XFEM_ELEMENT0*,std::less<unsigned long> > LISTE_XFEM_ELEMENT0;
71 typedef std::map<unsigned long,XFEM_ELEMENT1*,std::less<unsigned long> > LISTE_XFEM_ELEMENT1;
72 typedef std::map<unsigned long,XFEM_ELEMENT2*,std::less<unsigned long> > LISTE_XFEM_ELEMENT2;
73 typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3;
74
75 DLLPORTGEOMETRIE std::ostream& operator << (std::ostream& o,class FEM_MAILLAGE& maillage);
76
77
78 class DLLPORTGEOMETRIE FEM_MAILLAGE : public MG_IDENTIFICATEUR
79 {
80 public:
81 FEM_MAILLAGE(class MG_GEOMETRIE* geo,class MG_MAILLAGE* mai,int deg);
82 FEM_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg);
83 virtual ~FEM_MAILLAGE();
84 MG_GEOMETRIE* get_mg_geometrie(void);
85 MG_MAILLAGE* get_mg_maillage(void);
86 void change_gestionnaire(class MG_GESTIONNAIRE* mggest);
87 int get_degre(void);
88
89
90 FEM_NOEUD* ajouter_fem_noeud(MG_NOEUD* mgnoeud,unsigned long num=0);
91 int ajouter_fem_noeud(FEM_NOEUD *femnoeud);
92 FEM_NOEUD* get_fem_noeudid(unsigned long num);
93 FEM_NOEUD* get_fem_noeud(unsigned int num);
94 FEM_NOEUD* get_premier_noeud(LISTE_FEM_NOEUD::iterator & it);
95 FEM_NOEUD* get_suivant_noeud(LISTE_FEM_NOEUD::iterator & it);
96 unsigned int get_nb_fem_noeud(void);
97 int supprimer_fem_noeudid(unsigned long num);
98 int supprimer_fem_noeud(unsigned int num);
99 void supprimer_tout_fem_noeud(void);
100
101
102
103 int ajouter_fem_element0(FEM_ELEMENT0 *femnoeud);
104 FEM_ELEMENT0* get_fem_element0id(unsigned long num);
105 FEM_ELEMENT0* get_fem_element0(unsigned int num);
106 FEM_ELEMENT0* get_premier_element0(LISTE_FEM_ELEMENT0::iterator & it);
107 FEM_ELEMENT0* get_suivant_element0(LISTE_FEM_ELEMENT0::iterator & it);
108 unsigned int get_nb_fem_element0(void);
109 int supprimer_fem_element0id(unsigned long num);
110 int supprimer_fem_element0(unsigned int num);
111 void supprimer_tout_fem_element0(void);
112
113 int ajouter_fem_element1(FEM_ELEMENT1 *femsegment);
114 FEM_ELEMENT1* get_fem_element1id(unsigned long num);
115 FEM_ELEMENT1* get_fem_element1(unsigned int num);
116 FEM_ELEMENT1* get_premier_element1(LISTE_FEM_ELEMENT1::iterator & it);
117 FEM_ELEMENT1* get_suivant_element1(LISTE_FEM_ELEMENT1::iterator & it);
118 unsigned int get_nb_fem_element1(void);
119 int supprimer_fem_element1id(unsigned long num);
120 int supprimer_fem_element1(unsigned int num);
121 void supprimer_tout_fem_element1(void);
122
123
124
125 int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle);
126 FEM_ELEMENT2* get_fem_element2id(unsigned long num);
127 FEM_ELEMENT2* get_fem_element2(unsigned int num);
128 FEM_ELEMENT2* get_premier_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
129 FEM_ELEMENT2* get_suivant_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
130 unsigned int get_nb_fem_element2(void);
131 int supprimer_fem_element2id(unsigned long num);
132 int supprimer_fem_element2(unsigned int num);
133 void supprimer_tout_fem_element2(void);
134
135 int ajouter_fem_element3(FEM_ELEMENT3 *femelement3);
136 FEM_ELEMENT3* get_fem_element3id(unsigned long num);
137 FEM_ELEMENT3* get_fem_element3(unsigned int num);
138 FEM_ELEMENT3* get_premier_element3(LISTE_FEM_ELEMENT3::iterator & it);
139 FEM_ELEMENT3* get_suivant_element3(LISTE_FEM_ELEMENT3::iterator & it);
140 unsigned int get_nb_fem_element3(void);
141 int supprimer_fem_element3id(unsigned long num);
142 int supprimer_fem_element3(unsigned int num);
143 void supprimer_tout_fem_element3(void);
144
145 int ajouter_xfem_element0(XFEM_ELEMENT0 *femelement0);
146 XFEM_ELEMENT0* get_xfem_element0id(unsigned long num);
147 XFEM_ELEMENT0* get_xfem_element0(unsigned int num);
148 XFEM_ELEMENT0* get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
149 XFEM_ELEMENT0* get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
150 unsigned int get_nb_xfem_element0(void);
151 int supprimer_xfem_element0id(unsigned long num);
152 int supprimer_xfem_element0(unsigned int num);
153 void supprimer_tout_xfem_element0(void);
154
155 int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1);
156 XFEM_ELEMENT1* get_xfem_element1id(unsigned long num);
157 XFEM_ELEMENT1* get_xfem_element1(unsigned int num);
158 XFEM_ELEMENT1* get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
159 XFEM_ELEMENT1* get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
160 unsigned int get_nb_xfem_element1(void);
161 int supprimer_xfem_element1id(unsigned long num);
162 int supprimer_xfem_element1(unsigned int num);
163 void supprimer_tout_xfem_element1(void);
164
165 int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2);
166 XFEM_ELEMENT2* get_xfem_element2id(unsigned long num);
167 XFEM_ELEMENT2* get_xfem_element2(unsigned int num);
168 XFEM_ELEMENT2* get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
169 XFEM_ELEMENT2* get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
170 unsigned int get_nb_xfem_element2(void);
171 int supprimer_xfem_element2id(unsigned long num);
172 int supprimer_xfem_element2(unsigned int num);
173 void supprimer_tout_xfem_element2(void);
174
175 int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3);
176 XFEM_ELEMENT3* get_xfem_element3id(unsigned long num);
177 XFEM_ELEMENT3* get_xfem_element3(unsigned int num);
178 XFEM_ELEMENT3* get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
179 XFEM_ELEMENT3* get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
180 unsigned int get_nb_xfem_element3(void);
181 int supprimer_xfem_element3id(unsigned long num);
182 int supprimer_xfem_element3(unsigned int num);
183 void supprimer_tout_xfem_element3(void);
184
185
186 //void construire(int num=0);
187 void exporter_cosmos(std::string& nomfic);
188 //void optimise_numerotation(void);
189 //void copie_numerotation_opt(void);
190 bool contient ( MG_IDENTIFICATEUR * id );
191
192 void recherche_connexion_multidimension(TPL_MAP_ENTITE<class MG_SEGMENT*> &mini);
193
194
195 void calcul_deforme(class FEM_SOLUTION* solx,int numx,class FEM_SOLUTION* soly,int numy,class FEM_SOLUTION* solz,int numz);
196 int existe_deforme(void);
197 void active_deforme(void);
198 void desactive_deforme(void);
199 int existe_reaction(void);
200 void active_reaction(void);
201 void desactive_reaction(void);
202 double calcul_coef(void);
203 void calcul_somme_reaction(double &rx,double &ry,double &rz);
204 virtual void enregistrer(std::ostream& o,double version);
205 FEM_MAILLAGE* dupliquer(MG_GESTIONNAIRE* gest);
206 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);
207 friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage);
208 void change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp);
209 bool get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp);
210 bool get_est_structure(void);
211
212 private:
213 //void construire_lineaire(TPL_MAP_ENTITE<MG_SEGMENT*> &mini);
214 //void construire_quadratique(void);
215 LISTE_ENTITE lst_entite;
216 LISTE_FEM_NOEUD lst_fem_noeud;
217 LISTE_FEM_ELEMENT0 lst_fem_element0;
218 LISTE_FEM_ELEMENT1 lst_fem_element1;
219 LISTE_FEM_ELEMENT2 lst_fem_element2;
220 LISTE_FEM_ELEMENT3 lst_fem_element3;
221 LISTE_XFEM_ELEMENT0 lst_xfem_element0;
222 LISTE_XFEM_ELEMENT1 lst_xfem_element1;
223 LISTE_XFEM_ELEMENT2 lst_xfem_element2;
224 LISTE_XFEM_ELEMENT3 lst_xfem_element3;
225 MG_GEOMETRIE* mg_geometrie;
226 MG_GESTIONNAIRE *gest;
227 MG_MAILLAGE* maillage;
228 int degre;
229 int deforme;
230 int reaction;
231
232
233 BOITE_3D boite_englobante;
234 int nx,ny,nz;
235 bool est_structure;
236
237 };
238
239
240
241 #endif
242
243