ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_quadrangle8.cpp
Revision: 310
Committed: Thu Jan 26 21:14:45 2012 UTC (13 years, 3 months ago) by francois
File size: 9150 byte(s)
Log Message:
Ajout des elements quadrangle et hexaedre dans les maillages FEM
Changement de la version des fichier de visu sous GMSH. Les .pos ont disparus et tout est intégré dans les .msh

File Contents

# User Rev Content
1 francois 310 //------------------------------------------------------------
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_triangle3.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include "fem_quadrangle8.h"
27     #include "fem_maillage.h"
28     #include "fem_noeud.h"
29     #include "mg_element_maillage.h"
30    
31    
32     FEM_QUADRANGLE8::FEM_QUADRANGLE8(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
33     {
34     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
35     tab[0]->get_lien_element2()->ajouter(this);
36     tab[1]->get_lien_element2()->ajouter(this);
37     tab[2]->get_lien_element2()->ajouter(this);
38     tab[3]->get_lien_element2()->ajouter(this);
39     tab[4]->get_lien_element2()->ajouter(this);
40     tab[5]->get_lien_element2()->ajouter(this);
41     tab[6]->get_lien_element2()->ajouter(this);
42     tab[7]->get_lien_element2()->ajouter(this);
43     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
44     }
45    
46     FEM_QUADRANGLE8::FEM_QUADRANGLE8(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT2(mai),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
47     {
48     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
49     tab[0]->get_lien_element2()->ajouter(this);
50     tab[1]->get_lien_element2()->ajouter(this);
51     tab[2]->get_lien_element2()->ajouter(this);
52     tab[3]->get_lien_element2()->ajouter(this);
53     tab[4]->get_lien_element2()->ajouter(this);
54     tab[5]->get_lien_element2()->ajouter(this);
55     tab[6]->get_lien_element2()->ajouter(this);
56     tab[7]->get_lien_element2()->ajouter(this);
57     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
58     }
59    
60     FEM_QUADRANGLE8::FEM_QUADRANGLE8(FEM_QUADRANGLE8& mdd):FEM_ELEMENT2(mdd),FEM_TEMPLATE_ELEMENT<8>(mdd)
61     {
62     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
63     tab[0]->get_lien_element2()->ajouter(this);
64     tab[1]->get_lien_element2()->ajouter(this);
65     tab[2]->get_lien_element2()->ajouter(this);
66     tab[3]->get_lien_element2()->ajouter(this);
67     tab[4]->get_lien_element2()->ajouter(this);
68     tab[5]->get_lien_element2()->ajouter(this);
69     tab[6]->get_lien_element2()->ajouter(this);
70     tab[7]->get_lien_element2()->ajouter(this);
71     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
72     }
73     FEM_QUADRANGLE8::~FEM_QUADRANGLE8()
74     {
75     if (liaison_topologique==NULL) return;
76     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
77     tab[0]->get_lien_element2()->supprimer(this);
78     tab[1]->get_lien_element2()->supprimer(this);
79     tab[2]->get_lien_element2()->supprimer(this);
80     tab[3]->get_lien_element2()->supprimer(this);
81     tab[4]->get_lien_element2()->supprimer(this);
82     tab[5]->get_lien_element2()->supprimer(this);
83     tab[6]->get_lien_element2()->supprimer(this);
84     tab[7]->get_lien_element2()->supprimer(this);
85     get_fem_noeudpetitid()->get_lien_petit_element2()->supprimer(this);
86     }
87    
88    
89     FEM_ELEMENT_MAILLAGE* FEM_QUADRANGLE8::dupliquer(FEM_MAILLAGE *femmai,long decalage)
90     {
91     FEM_NOEUD* tabnoeud[8];
92     tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
93     tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
94     tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
95     tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
96     tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
97     tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
98     tabnoeud[6]=femmai->get_fem_noeudid(tab[6]->get_id()+decalage);
99     tabnoeud[7]=femmai->get_fem_noeudid(tab[7]->get_id()+decalage);
100     FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(get_id()+decalage,maillage,tabnoeud);
101     femmai->ajouter_fem_element2(quad);
102     return quad;
103     }
104    
105    
106    
107    
108    
109     int FEM_QUADRANGLE8::get_type_entite(void)
110     {
111     return IDFEM_QUADRANGLE8;
112     }
113    
114     int FEM_QUADRANGLE8::get_dimension(void)
115     {
116     return 2;
117     }
118    
119    
120    
121     int FEM_QUADRANGLE8::get_nb_fem_noeud(void)
122     {
123     return FEM_TEMPLATE_ELEMENT<8>::get_nb_fem_noeud();
124     }
125    
126     FEM_NOEUD* FEM_QUADRANGLE8::get_fem_noeud(int num)
127     {
128     return FEM_TEMPLATE_ELEMENT<8>::get_fem_noeud(num);
129     }
130    
131     void FEM_QUADRANGLE8::change_noeud(int num,FEM_NOEUD* noeud)
132     {
133     FEM_TEMPLATE_ELEMENT<8>::change_noeud(num,noeud);
134     }
135    
136     BOITE_3D& FEM_QUADRANGLE8::get_boite_3D(void)
137     {
138     return FEM_TEMPLATE_ELEMENT<8>::get_boite_3D();
139     }
140    
141    
142     void FEM_QUADRANGLE8::enregistrer(std::ostream& o)
143     {
144     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_QUADRANGLE8($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<< ");" << std::endl;
145     else o << "%" << get_id() << "=FEM_QUADRANGLE8(NULL,$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<<");" << std::endl;
146     }
147     int FEM_QUADRANGLE8::nb_fonction_interpolation(void)
148     {
149     return 8;
150     }
151    
152    
153     double FEM_QUADRANGLE8::get_fonction_interpolation(int num,double *uv)
154     {
155     double val;
156     switch (num)
157     {
158     case 1:
159     val=-0.25*(1-uv[0])*(1-uv[1])*(1.+uv[0]+uv[1]);
160     break;
161     case 2:
162     val=0.5*(1-uv[0]*uv[0])*(1-uv[1]);
163     break;
164     case 3:
165     val=-0.25*(1+uv[0])*(1-uv[1])*(1.-uv[0]+uv[1]);
166     break;
167     case 4:
168     val=0.5*(1+uv[0])*(1-uv[1]*uv[1]);
169     break;
170     case 5:
171     val=-0.25*(1+uv[0])*(1+uv[1])*(1.-uv[0]-uv[1]);
172     break;
173     case 6:
174     val=0.5*(1-uv[0]*uv[0])*(1+uv[1]);
175     break;
176     case 7:
177     val=-0.25*(1-uv[0])*(1+uv[1])*(1.+uv[0]-uv[1]);
178     break;
179     case 8:
180     val=0.5*(1-uv[0])*(1-uv[1]*uv[1]);
181     break;
182     }
183     return val;
184     }
185    
186     double FEM_QUADRANGLE8::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
187     {
188     double val;
189    
190     switch (num)
191     {
192     case 1:
193     switch (num_variable)
194     {
195     case 1:
196     val=0.25*(1-uv[1])*(2*uv[0]+uv[1]);
197     break;
198     case 2:
199     val=0.25*(1-uv[0])*(uv[0]+2.*uv[1]);
200     break;
201     } break;
202     case 2:
203     switch (num_variable)
204     {
205     case 1:
206     val=-uv[0]*(1.-uv[1]);
207     break;
208     case 2:
209     val=-0.5*(1-uv[0]*uv[0]);
210     break;
211     }break;
212     case 3:
213     switch (num_variable)
214     {
215     case 1:
216     val=0.25*(1.-uv[1])*(2*uv[0]-uv[1]);
217     break;
218     case 2:
219     val=-0.25*(1.+uv[0])*(uv[0]-2.*uv[1]);
220     break;
221     }break;
222     case 4:
223     switch (num_variable)
224     {
225     case 1:
226     val=0.5*(1.-uv[1]*uv[1]);
227     break;
228     case 2:
229     val=-uv[1]*(1+uv[0]);
230     break;
231     }break;
232     case 5:
233     switch (num_variable)
234     {
235     case 1:
236     val=0.25*(1+uv[1])*(2*uv[0]+uv[1]);
237     break;
238     case 2:
239     val=0.25*(1+uv[0])*(uv[0]+2.*uv[1]);
240     break;
241     } break;
242     case 6:
243     switch (num_variable)
244     {
245     case 1:
246     val=-uv[0]*(1.+uv[1]);
247     break;
248     case 2:
249     val=-0.5*(1-uv[0]*uv[0]);
250     break;
251     }break;
252     case 7:
253     switch (num_variable)
254     {
255     case 1:
256     val=0.25*(1.+uv[1])*(2*uv[0]-uv[1]);
257     break;
258     case 2:
259     val=-0.25*(1.-uv[0])*(uv[0]-2.*uv[1]);
260     break;
261     }break;
262     case 8:
263     switch (num_variable)
264     {
265     case 1:
266     val=-0.5*(1.-uv[1]*uv[1]);
267     break;
268     case 2:
269     val=-uv[1]*(1+uv[0]);
270     break;
271     }break;
272    
273     }
274     return val;
275     }
276    
277     double FEM_QUADRANGLE8::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
278     {
279    
280     }
281    
282     void FEM_QUADRANGLE8::get_inverse_jacob(double* j,double *uv,double unite)
283     {
284    
285     }