ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_maillage.h
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
Content type: text/plain
File size: 9737 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

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 310
58 francois 375 #include "mg_definition.h"
59 francois 283
60    
61    
62    
63     typedef std::set<MG_IDENTIFICATEUR*,inf<MG_IDENTIFICATEUR*> > LISTE_ENTITE;
64     typedef std::map<unsigned long,FEM_NOEUD*,std::less<unsigned long> > LISTE_FEM_NOEUD;
65 francois 399 typedef std::map<unsigned long,FEM_ELEMENT0*,std::less<unsigned long> > LISTE_FEM_ELEMENT0;
66 francois 309 typedef std::map<unsigned long,FEM_ELEMENT1*,std::less<unsigned long> > LISTE_FEM_ELEMENT1;
67     typedef std::map<unsigned long,FEM_ELEMENT2*,std::less<unsigned long> > LISTE_FEM_ELEMENT2;
68     typedef std::map<unsigned long,FEM_ELEMENT3*,std::less<unsigned long> > LISTE_FEM_ELEMENT3;
69 francois 399 typedef std::map<unsigned long,XFEM_ELEMENT0*,std::less<unsigned long> > LISTE_XFEM_ELEMENT0;
70 francois 380 typedef std::map<unsigned long,XFEM_ELEMENT1*,std::less<unsigned long> > LISTE_XFEM_ELEMENT1;
71     typedef std::map<unsigned long,XFEM_ELEMENT2*,std::less<unsigned long> > LISTE_XFEM_ELEMENT2;
72 francois 339 typedef std::map<unsigned long,XFEM_ELEMENT3*,std::less<unsigned long> > LISTE_XFEM_ELEMENT3;
73 francois 283
74     DLLPORTGEOMETRIE std::ostream& operator << (std::ostream& o,class FEM_MAILLAGE& maillage);
75    
76    
77     class DLLPORTGEOMETRIE FEM_MAILLAGE : public MG_IDENTIFICATEUR
78     {
79     public:
80     FEM_MAILLAGE(class MG_GEOMETRIE* geo,class MG_MAILLAGE* mai,int deg);
81     FEM_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg);
82     virtual ~FEM_MAILLAGE();
83     MG_GEOMETRIE* get_mg_geometrie(void);
84     MG_MAILLAGE* get_mg_maillage(void);
85     void change_gestionnaire(class MG_GESTIONNAIRE* mggest);
86     int get_degre(void);
87    
88    
89     FEM_NOEUD* ajouter_fem_noeud(MG_NOEUD* mgnoeud,unsigned long num=0);
90     int ajouter_fem_noeud(FEM_NOEUD *femnoeud);
91     FEM_NOEUD* get_fem_noeudid(unsigned long num);
92     FEM_NOEUD* get_fem_noeud(unsigned int num);
93     FEM_NOEUD* get_premier_noeud(LISTE_FEM_NOEUD::iterator & it);
94     FEM_NOEUD* get_suivant_noeud(LISTE_FEM_NOEUD::iterator & it);
95     unsigned int get_nb_fem_noeud(void);
96     int supprimer_fem_noeudid(unsigned long num);
97     int supprimer_fem_noeud(unsigned int num);
98     void supprimer_tout_fem_noeud(void);
99    
100    
101    
102 francois 399 int ajouter_fem_element0(FEM_ELEMENT0 *femnoeud);
103     FEM_ELEMENT0* get_fem_element0id(unsigned long num);
104     FEM_ELEMENT0* get_fem_element0(unsigned int num);
105     FEM_ELEMENT0* get_premier_element0(LISTE_FEM_ELEMENT0::iterator & it);
106     FEM_ELEMENT0* get_suivant_element0(LISTE_FEM_ELEMENT0::iterator & it);
107     unsigned int get_nb_fem_element0(void);
108     int supprimer_fem_element0id(unsigned long num);
109     int supprimer_fem_element0(unsigned int num);
110     void supprimer_tout_fem_element0(void);
111    
112 francois 309 int ajouter_fem_element1(FEM_ELEMENT1 *femsegment);
113     FEM_ELEMENT1* get_fem_element1id(unsigned long num);
114     FEM_ELEMENT1* get_fem_element1(unsigned int num);
115     FEM_ELEMENT1* get_premier_element1(LISTE_FEM_ELEMENT1::iterator & it);
116     FEM_ELEMENT1* get_suivant_element1(LISTE_FEM_ELEMENT1::iterator & it);
117     unsigned int get_nb_fem_element1(void);
118     int supprimer_fem_element1id(unsigned long num);
119     int supprimer_fem_element1(unsigned int num);
120     void supprimer_tout_fem_element1(void);
121 francois 283
122    
123    
124 francois 309 int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle);
125     FEM_ELEMENT2* get_fem_element2id(unsigned long num);
126     FEM_ELEMENT2* get_fem_element2(unsigned int num);
127     FEM_ELEMENT2* get_premier_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
128     FEM_ELEMENT2* get_suivant_element2(LISTE_FEM_ELEMENT2::iterator & it) ;
129     unsigned int get_nb_fem_element2(void);
130     int supprimer_fem_element2id(unsigned long num);
131     int supprimer_fem_element2(unsigned int num);
132     void supprimer_tout_fem_element2(void);
133 francois 283
134 francois 309 int ajouter_fem_element3(FEM_ELEMENT3 *femelement3);
135     FEM_ELEMENT3* get_fem_element3id(unsigned long num);
136     FEM_ELEMENT3* get_fem_element3(unsigned int num);
137     FEM_ELEMENT3* get_premier_element3(LISTE_FEM_ELEMENT3::iterator & it);
138     FEM_ELEMENT3* get_suivant_element3(LISTE_FEM_ELEMENT3::iterator & it);
139     unsigned int get_nb_fem_element3(void);
140     int supprimer_fem_element3id(unsigned long num);
141     int supprimer_fem_element3(unsigned int num);
142     void supprimer_tout_fem_element3(void);
143 francois 399
144     int ajouter_xfem_element0(XFEM_ELEMENT0 *femelement0);
145     XFEM_ELEMENT0* get_xfem_element0id(unsigned long num);
146     XFEM_ELEMENT0* get_xfem_element0(unsigned int num);
147     XFEM_ELEMENT0* get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
148     XFEM_ELEMENT0* get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator & it);
149     unsigned int get_nb_xfem_element0(void);
150     int supprimer_xfem_element0id(unsigned long num);
151     int supprimer_xfem_element0(unsigned int num);
152     void supprimer_tout_xfem_element0(void);
153    
154 francois 380 int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1);
155     XFEM_ELEMENT1* get_xfem_element1id(unsigned long num);
156     XFEM_ELEMENT1* get_xfem_element1(unsigned int num);
157     XFEM_ELEMENT1* get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
158     XFEM_ELEMENT1* get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator & it);
159     unsigned int get_nb_xfem_element1(void);
160     int supprimer_xfem_element1id(unsigned long num);
161     int supprimer_xfem_element1(unsigned int num);
162     void supprimer_tout_xfem_element1(void);
163    
164     int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2);
165     XFEM_ELEMENT2* get_xfem_element2id(unsigned long num);
166     XFEM_ELEMENT2* get_xfem_element2(unsigned int num);
167     XFEM_ELEMENT2* get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
168     XFEM_ELEMENT2* get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator & it);
169     unsigned int get_nb_xfem_element2(void);
170     int supprimer_xfem_element2id(unsigned long num);
171     int supprimer_xfem_element2(unsigned int num);
172     void supprimer_tout_xfem_element2(void);
173    
174 francois 339 int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3);
175     XFEM_ELEMENT3* get_xfem_element3id(unsigned long num);
176     XFEM_ELEMENT3* get_xfem_element3(unsigned int num);
177     XFEM_ELEMENT3* get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
178     XFEM_ELEMENT3* get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator & it);
179     unsigned int get_nb_xfem_element3(void);
180     int supprimer_xfem_element3id(unsigned long num);
181     int supprimer_xfem_element3(unsigned int num);
182     void supprimer_tout_xfem_element3(void);
183 francois 380
184    
185 francois 283 void construire(int num=0);
186     void exporter_cosmos(std::string& nomfic);
187     void optimise_numerotation(void);
188     void echange_numerotation(void);
189     bool contient ( MG_IDENTIFICATEUR * id );
190    
191 francois 339
192    
193    
194 francois 283 void calcul_deforme(class FEM_SOLUTION* solx,int numx,class FEM_SOLUTION* soly,int numy,class FEM_SOLUTION* solz,int numz);
195     int existe_deforme(void);
196     void active_deforme(void);
197 gervaislavoie 304 void desactive_deforme(void);
198 francois 339 int existe_reaction(void);
199     void active_reaction(void);
200     void desactive_reaction(void);
201 francois 283 double calcul_coef(void);
202 francois 325 void calcul_somme_reaction(double &rx,double &ry,double &rz);
203 francois 763 virtual void enregistrer(std::ostream& o,double version);
204 francois 283 FEM_MAILLAGE* dupliquer(MG_GESTIONNAIRE* gest);
205 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);
206 francois 283 friend std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage);
207 francois 465 void change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp);
208     bool get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp);
209     bool get_est_structure(void);
210    
211 francois 283 private:
212 francois 310 void construire_lineaire(void);
213 francois 283 void construire_quadratique(void);
214     LISTE_ENTITE lst_entite;
215     LISTE_FEM_NOEUD lst_fem_noeud;
216 francois 399 LISTE_FEM_ELEMENT0 lst_fem_element0;
217 francois 309 LISTE_FEM_ELEMENT1 lst_fem_element1;
218     LISTE_FEM_ELEMENT2 lst_fem_element2;
219     LISTE_FEM_ELEMENT3 lst_fem_element3;
220 francois 399 LISTE_XFEM_ELEMENT0 lst_xfem_element0;
221 francois 380 LISTE_XFEM_ELEMENT1 lst_xfem_element1;
222     LISTE_XFEM_ELEMENT2 lst_xfem_element2;
223 francois 339 LISTE_XFEM_ELEMENT3 lst_xfem_element3;
224 francois 283 MG_GEOMETRIE* mg_geometrie;
225     MG_GESTIONNAIRE *gest;
226     MG_MAILLAGE* maillage;
227     int degre;
228     int deforme;
229 francois 339 int reaction;
230 francois 465
231    
232     BOITE_3D boite_englobante;
233     int nx,ny,nz;
234     bool est_structure;
235 francois 339
236 francois 283 };
237    
238    
239    
240     #endif
241    
242