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