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