ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_maillage.h
Revision: 380
Committed: Thu Nov 29 15:40:22 2012 UTC (12 years, 5 months ago) by francois
Content type: text/plain
File size: 8055 byte(s)
Log Message:
gestion des entités xfem 1d et 2d 

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 310 #include "fem_element1.h"
49     #include "fem_element2.h"
50     #include "fem_element3.h"
51 francois 380 #include "xfem_element1.h"
52     #include "xfem_element2.h"
53 francois 339 #include "xfem_element3.h"
54 francois 310
55 francois 375 #include "mg_definition.h"
56 francois 283
57    
58    
59    
60     typedef std::set<MG_IDENTIFICATEUR*,inf<MG_IDENTIFICATEUR*> > LISTE_ENTITE;
61     typedef std::map<unsigned long,FEM_NOEUD*,std::less<unsigned long> > LISTE_FEM_NOEUD;
62 francois 309 typedef std::map<unsigned long,FEM_ELEMENT1*,std::less<unsigned long> > LISTE_FEM_ELEMENT1;
63     typedef std::map<unsigned long,FEM_ELEMENT2*,std::less<unsigned long> > LISTE_FEM_ELEMENT2;
64     typedef std::map<unsigned long,FEM_ELEMENT3*,std::less<unsigned long> > LISTE_FEM_ELEMENT3;
65 francois 380 typedef std::map<unsigned long,XFEM_ELEMENT1*,std::less<unsigned long> > LISTE_XFEM_ELEMENT1;
66     typedef std::map<unsigned long,XFEM_ELEMENT2*,std::less<unsigned long> > LISTE_XFEM_ELEMENT2;
67 francois 339 typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3;
68 francois 283
69     DLLPORTGEOMETRIE std::ostream& operator << (std::ostream& o,class FEM_MAILLAGE& maillage);
70    
71    
72     class DLLPORTGEOMETRIE FEM_MAILLAGE : public MG_IDENTIFICATEUR
73     {
74     public:
75     FEM_MAILLAGE(class MG_GEOMETRIE* geo,class MG_MAILLAGE* mai,int deg);
76     FEM_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg);
77     virtual ~FEM_MAILLAGE();
78     MG_GEOMETRIE* get_mg_geometrie(void);
79     MG_MAILLAGE* get_mg_maillage(void);
80     void change_gestionnaire(class MG_GESTIONNAIRE* mggest);
81     int get_degre(void);
82    
83    
84     FEM_NOEUD* ajouter_fem_noeud(MG_NOEUD* mgnoeud,unsigned long num=0);
85     int ajouter_fem_noeud(FEM_NOEUD *femnoeud);
86     FEM_NOEUD* get_fem_noeudid(unsigned long num);
87     FEM_NOEUD* get_fem_noeud(unsigned int num);
88     FEM_NOEUD* get_premier_noeud(LISTE_FEM_NOEUD::iterator & it);
89     FEM_NOEUD* get_suivant_noeud(LISTE_FEM_NOEUD::iterator & it);
90     unsigned int get_nb_fem_noeud(void);
91     int supprimer_fem_noeudid(unsigned long num);
92     int supprimer_fem_noeud(unsigned int num);
93     void supprimer_tout_fem_noeud(void);
94    
95    
96    
97 francois 309 int ajouter_fem_element1(FEM_ELEMENT1 *femsegment);
98     FEM_ELEMENT1* get_fem_element1id(unsigned long num);
99     FEM_ELEMENT1* get_fem_element1(unsigned int num);
100     FEM_ELEMENT1* get_premier_element1(LISTE_FEM_ELEMENT1::iterator & it);
101     FEM_ELEMENT1* get_suivant_element1(LISTE_FEM_ELEMENT1::iterator & it);
102     unsigned int get_nb_fem_element1(void);
103     int supprimer_fem_element1id(unsigned long num);
104     int supprimer_fem_element1(unsigned int num);
105     void supprimer_tout_fem_element1(void);
106 francois 283
107    
108    
109 francois 309 int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle);
110     FEM_ELEMENT2* get_fem_element2id(unsigned long num);
111     FEM_ELEMENT2* get_fem_element2(unsigned int num);
112     FEM_ELEMENT2* get_premier_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
113     FEM_ELEMENT2* get_suivant_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
114     unsigned int get_nb_fem_element2(void);
115     int supprimer_fem_element2id(unsigned long num);
116     int supprimer_fem_element2(unsigned int num);
117     void supprimer_tout_fem_element2(void);
118 francois 283
119 francois 309 int ajouter_fem_element3(FEM_ELEMENT3 *femelement3);
120     FEM_ELEMENT3* get_fem_element3id(unsigned long num);
121     FEM_ELEMENT3* get_fem_element3(unsigned int num);
122     FEM_ELEMENT3* get_premier_element3(LISTE_FEM_ELEMENT3::iterator & it);
123     FEM_ELEMENT3* get_suivant_element3(LISTE_FEM_ELEMENT3::iterator & it);
124     unsigned int get_nb_fem_element3(void);
125     int supprimer_fem_element3id(unsigned long num);
126     int supprimer_fem_element3(unsigned int num);
127     void supprimer_tout_fem_element3(void);
128 francois 283
129 francois 380 int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1);
130     XFEM_ELEMENT1* get_xfem_element1id(unsigned long num);
131     XFEM_ELEMENT1* get_xfem_element1(unsigned int num);
132     XFEM_ELEMENT1* get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
133     XFEM_ELEMENT1* get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
134     unsigned int get_nb_xfem_element1(void);
135     int supprimer_xfem_element1id(unsigned long num);
136     int supprimer_xfem_element1(unsigned int num);
137     void supprimer_tout_xfem_element1(void);
138    
139     int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2);
140     XFEM_ELEMENT2* get_xfem_element2id(unsigned long num);
141     XFEM_ELEMENT2* get_xfem_element2(unsigned int num);
142     XFEM_ELEMENT2* get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
143     XFEM_ELEMENT2* get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
144     unsigned int get_nb_xfem_element2(void);
145     int supprimer_xfem_element2id(unsigned long num);
146     int supprimer_xfem_element2(unsigned int num);
147     void supprimer_tout_xfem_element2(void);
148    
149 francois 339 int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3);
150     XFEM_ELEMENT3* get_xfem_element3id(unsigned long num);
151     XFEM_ELEMENT3* get_xfem_element3(unsigned int num);
152     XFEM_ELEMENT3* get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
153     XFEM_ELEMENT3* get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
154     unsigned int get_nb_xfem_element3(void);
155     int supprimer_xfem_element3id(unsigned long num);
156     int supprimer_xfem_element3(unsigned int num);
157     void supprimer_tout_xfem_element3(void);
158 francois 380
159    
160 francois 283 void construire(int num=0);
161     void exporter_cosmos(std::string& nomfic);
162     void optimise_numerotation(void);
163     void echange_numerotation(void);
164     bool contient ( MG_IDENTIFICATEUR * id );
165    
166 francois 339
167    
168    
169 francois 283 void calcul_deforme(class FEM_SOLUTION* solx,int numx,class FEM_SOLUTION* soly,int numy,class FEM_SOLUTION* solz,int numz);
170     int existe_deforme(void);
171     void active_deforme(void);
172 gervaislavoie 304 void desactive_deforme(void);
173 francois 339 int existe_reaction(void);
174     void active_reaction(void);
175     void desactive_reaction(void);
176 francois 283 double calcul_coef(void);
177 francois 325 void calcul_somme_reaction(double &rx,double &ry,double &rz);
178 francois 283 virtual void enregistrer(std::ostream& o);
179     FEM_MAILLAGE* dupliquer(MG_GESTIONNAIRE* gest);
180 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);
181 francois 283 friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage);
182 francois 339
183 francois 283 private:
184 francois 310 void construire_lineaire(void);
185 francois 283 void construire_quadratique(void);
186     LISTE_ENTITE lst_entite;
187     LISTE_FEM_NOEUD lst_fem_noeud;
188 francois 309 LISTE_FEM_ELEMENT1 lst_fem_element1;
189     LISTE_FEM_ELEMENT2 lst_fem_element2;
190     LISTE_FEM_ELEMENT3 lst_fem_element3;
191 francois 380 LISTE_XFEM_ELEMENT1 lst_xfem_element1;
192     LISTE_XFEM_ELEMENT2 lst_xfem_element2;
193 francois 339 LISTE_XFEM_ELEMENT3 lst_xfem_element3;
194 francois 283 MG_GEOMETRIE* mg_geometrie;
195     MG_GESTIONNAIRE *gest;
196     MG_MAILLAGE* maillage;
197     int degre;
198     int deforme;
199 francois 339 int reaction;
200    
201 francois 283 };
202    
203    
204    
205     #endif
206    
207