ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_triangle6.cpp
Revision: 310
Committed: Thu Jan 26 21:14:45 2012 UTC (13 years, 3 months ago) by francois
File size: 7627 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 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_triangle6.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_triangle6.h"
27     #include "fem_noeud.h"
28     #include "mg_element_maillage.h"
29     #include "fem_maillage.h"
30    
31    
32 francois 309 FEM_TRIANGLE6::FEM_TRIANGLE6(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
33 francois 283 {
34     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
35 francois 309 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     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
42 francois 283 }
43    
44 francois 309 FEM_TRIANGLE6::FEM_TRIANGLE6(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT2(mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
45 francois 283 {
46     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
47 francois 309 tab[0]->get_lien_element2()->ajouter(this);
48     tab[1]->get_lien_element2()->ajouter(this);
49     tab[2]->get_lien_element2()->ajouter(this);
50     tab[3]->get_lien_element2()->ajouter(this);
51     tab[4]->get_lien_element2()->ajouter(this);
52     tab[5]->get_lien_element2()->ajouter(this);
53     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
54 francois 283 }
55    
56 francois 309 FEM_TRIANGLE6::FEM_TRIANGLE6(FEM_TRIANGLE6& mdd):FEM_ELEMENT2(mdd),FEM_TEMPLATE_ELEMENT<6>(mdd)
57 francois 283 {
58     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
59 francois 309 tab[0]->get_lien_element2()->ajouter(this);
60     tab[1]->get_lien_element2()->ajouter(this);
61     tab[2]->get_lien_element2()->ajouter(this);
62     tab[3]->get_lien_element2()->ajouter(this);
63     tab[4]->get_lien_element2()->ajouter(this);
64     tab[5]->get_lien_element2()->ajouter(this);
65     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
66 francois 283 }
67     FEM_TRIANGLE6::~FEM_TRIANGLE6()
68     {
69     if (liaison_topologique==NULL) return;
70     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
71 francois 309 tab[0]->get_lien_element2()->supprimer(this);
72     tab[1]->get_lien_element2()->supprimer(this);
73     tab[2]->get_lien_element2()->supprimer(this);
74     tab[3]->get_lien_element2()->supprimer(this);
75     tab[4]->get_lien_element2()->supprimer(this);
76     tab[5]->get_lien_element2()->supprimer(this);
77     get_fem_noeudpetitid()->get_lien_petit_element2()->supprimer(this);
78 francois 283 }
79    
80     FEM_ELEMENT_MAILLAGE* FEM_TRIANGLE6::dupliquer(FEM_MAILLAGE *femmai,long decalage)
81     {
82     FEM_NOEUD* tabnoeud[6];
83     tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
84     tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
85     tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
86     tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
87     tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
88     tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
89     FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(get_id()+decalage,maillage,tabnoeud);
90 francois 309 femmai->ajouter_fem_element2(tri);
91 francois 283 return tri;
92     }
93    
94    
95    
96    
97     int FEM_TRIANGLE6::get_type_entite(void)
98     {
99     return IDFEM_TRIANGLE6;
100     }
101    
102     int FEM_TRIANGLE6::get_dimension(void)
103     {
104     return 2;
105     }
106    
107    
108     int FEM_TRIANGLE6::get_nb_fem_noeud(void)
109     {
110     return FEM_TEMPLATE_ELEMENT<6>::get_nb_fem_noeud();
111     }
112    
113     FEM_NOEUD* FEM_TRIANGLE6::get_fem_noeud(int num)
114     {
115     return FEM_TEMPLATE_ELEMENT<6>::get_fem_noeud(num);
116     }
117    
118     void FEM_TRIANGLE6::change_noeud(int num,FEM_NOEUD* noeud)
119     {
120     FEM_TEMPLATE_ELEMENT<6>::change_noeud(num,noeud);
121     }
122    
123     BOITE_3D& FEM_TRIANGLE6::get_boite_3D(void)
124     {
125     return FEM_TEMPLATE_ELEMENT<6>::get_boite_3D();
126     }
127    
128    
129     void FEM_TRIANGLE6::enregistrer(std::ostream& o)
130     {
131     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_TRIANGLE6($"<< 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() << ");" << std::endl;
132     else o << "%" << get_id() << "=FEM_TRIANGLE6(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() << ");" << std::endl;
133     }
134 francois 310
135    
136     int FEM_TRIANGLE6::nb_fonction_interpolation(void)
137     {
138     return 6;
139     }
140    
141     double FEM_TRIANGLE6::get_fonction_interpolation(int num,double *uv)
142     {
143     double val;
144     switch (num)
145     {
146     case 1:
147     val=(-1+uv[0]+uv[1])*(-1+2*uv[0]+2*uv[1]);
148     break;
149     case 2:
150     val=4.*uv[0]*(1-uv[0]-uv[1]);
151     break;
152     case 3:
153     val=-uv[0]*(1.-2.*uv[0]);
154     break;
155     case 4:
156     val=4.*uv[0]*uv[1];
157     break;
158     case 5:
159     val=-uv[1]*(1-2*uv[1]);
160     break;
161     case 6:
162     val=4.*uv[1]*(1-uv[0]-uv[1]);
163     break;
164    
165     }
166     return val;
167     }
168    
169     double FEM_TRIANGLE6::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
170     {
171     double val;
172    
173     switch (num)
174     {
175     case 1:
176     switch (num_variable)
177     {
178     case 1:
179     val=-3.+4*uv[0]+4*uv[1];
180     break;
181     case 2:
182     val=-3.+4*uv[0]+4*uv[1];
183     break;
184     } break;
185     case 2:
186     switch (num_variable)
187     {
188     case 1:
189     val=4.-8*uv[0]-4*uv[1];
190     break;
191     case 2:
192     val=-4.*uv[0];
193     break;
194     }break;
195     case 3:
196     switch (num_variable)
197     {
198     case 1:
199     val=1.+4*uv[0];
200     break;
201     case 2:
202     val=0.;
203     break;
204     }break;
205     case 4:
206     switch (num_variable)
207     {
208     case 1:
209     val=4*uv[1];
210     break;
211     case 2:
212     val=4*uv[0];
213     break;
214     }break;
215     case 5:
216     switch (num_variable)
217     {
218     case 1:
219     val=0.;
220     break;
221     case 2:
222     val=-1+4.*uv[1];
223     break;
224     }break;
225     case 6:
226     switch (num_variable)
227     {
228     case 1:
229     val=-4*uv[1];
230     break;
231     case 2:
232     val=4-4*uv[0]-8*uv[1];
233     break;
234     }break;
235    
236     }
237     return val;
238     }
239    
240     double FEM_TRIANGLE6::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
241     {
242    
243     }
244    
245     void FEM_TRIANGLE6::get_inverse_jacob(double* j,double *uv,double unite)
246     {
247    
248     }