ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_maillage.h
Revision: 767
Committed: Wed Dec 23 20:52:36 2015 UTC (9 years, 4 months ago) by francois
Content type: text/plain
File size: 9876 byte(s)
Log Message:
calcul sur des structures mixtes volume poutre.
cela fonctionne pour l'instant pour des blocages appliquées uniquement aux mailles 3D et pour des résultats aux mailles 3D uniquement aux noeuds

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
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 francois 399 #include "fem_element0.h"
49 francois 310 #include "fem_element1.h"
50     #include "fem_element2.h"
51     #include "fem_element3.h"
52 francois 399 #include "xfem_element0.h"
53 francois 380 #include "xfem_element1.h"
54     #include "xfem_element2.h"
55 francois 339 #include "xfem_element3.h"
56 francois 481 #include "ot_boite_3d.h"
57 francois 767 #include "tpl_map_entite.h"
58 francois 310
59 francois 375 #include "mg_definition.h"
60 francois 283
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 francois 399 typedef std::map<unsigned long,FEM_ELEMENT0*,std::less<unsigned long> > LISTE_FEM_ELEMENT0;
67 francois 309 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 francois 399 typedef std::map<unsigned long,XFEM_ELEMENT0*,std::less<unsigned long> > LISTE_XFEM_ELEMENT0;
71 francois 380 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 francois 339 typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3;
74 francois 283
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 francois 399 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 francois 309 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 francois 283
123    
124    
125 francois 309 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 francois 283
135 francois 309 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 francois 399
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 francois 380 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 francois 339 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 francois 380
185    
186 francois 283 void construire(int num=0);
187     void exporter_cosmos(std::string& nomfic);
188     void optimise_numerotation(void);
189     void echange_numerotation(void);
190     bool contient ( MG_IDENTIFICATEUR * id );
191    
192 francois 767 void recherche_connexion_multidimension(TPL_MAP_ENTITE<class MG_SEGMENT*> &mini);
193 francois 339
194    
195 francois 283 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 gervaislavoie 304 void desactive_deforme(void);
199 francois 339 int existe_reaction(void);
200     void active_reaction(void);
201     void desactive_reaction(void);
202 francois 283 double calcul_coef(void);
203 francois 325 void calcul_somme_reaction(double &rx,double &ry,double &rz);
204 francois 763 virtual void enregistrer(std::ostream& o,double version);
205 francois 283 FEM_MAILLAGE* dupliquer(MG_GESTIONNAIRE* gest);
206 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);
207 francois 283 friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage);
208 francois 465 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 francois 283 private:
213 francois 767 void construire_lineaire(TPL_MAP_ENTITE<MG_SEGMENT*> &mini);
214 francois 283 void construire_quadratique(void);
215     LISTE_ENTITE lst_entite;
216     LISTE_FEM_NOEUD lst_fem_noeud;
217 francois 399 LISTE_FEM_ELEMENT0 lst_fem_element0;
218 francois 309 LISTE_FEM_ELEMENT1 lst_fem_element1;
219     LISTE_FEM_ELEMENT2 lst_fem_element2;
220     LISTE_FEM_ELEMENT3 lst_fem_element3;
221 francois 399 LISTE_XFEM_ELEMENT0 lst_xfem_element0;
222 francois 380 LISTE_XFEM_ELEMENT1 lst_xfem_element1;
223     LISTE_XFEM_ELEMENT2 lst_xfem_element2;
224 francois 339 LISTE_XFEM_ELEMENT3 lst_xfem_element3;
225 francois 283 MG_GEOMETRIE* mg_geometrie;
226     MG_GESTIONNAIRE *gest;
227     MG_MAILLAGE* maillage;
228     int degre;
229     int deforme;
230 francois 339 int reaction;
231 francois 465
232    
233     BOITE_3D boite_englobante;
234     int nx,ny,nz;
235     bool est_structure;
236 francois 339
237 francois 283 };
238    
239    
240    
241     #endif
242    
243