ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/opt_triangle.cpp
Revision: 647
Committed: Fri Feb 6 23:18:47 2015 UTC (10 years, 3 months ago) by francois
File size: 7075 byte(s)
Log Message:
Amelioration du calcul du jacobien et inverse dans FEM_TRIANGLE3

File Contents

# User Rev Content
1 gervaislavoie 332 //------------------------------------------------------------
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     // opt_triangle.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include "mg_maillage.h"
27     #include "ot_decalage_parametre.h"
28     #include "opt_triangle.h"
29 francois 470 #include "fem_triangle3.h"
30     #include "opt_noeud.h"
31 gervaislavoie 332
32    
33 francois 470 OPT_TRIANGLE::OPT_TRIANGLE(FEM_TRIANGLE3* fem_tri3,OPT_NOEUD* noeud1,OPT_NOEUD* noeud2,OPT_NOEUD* noeud3):fem_triangle3(fem_tri3),opt_noeud1(noeud1),opt_noeud2(noeud2),opt_noeud3(noeud3)
34 gervaislavoie 332 {
35 francois 470 double uv[6];
36 gervaislavoie 332
37 francois 470 OT_VECTEUR_3D dNi_de(fem_tri3->get_fonction_derive_interpolation(1,1,uv),fem_tri3->get_fonction_derive_interpolation(2,1,uv),fem_tri3->get_fonction_derive_interpolation(3,1,uv));
38     OT_VECTEUR_3D dNi_dn(fem_tri3->get_fonction_derive_interpolation(1,2,uv),fem_tri3->get_fonction_derive_interpolation(2,2,uv),fem_tri3->get_fonction_derive_interpolation(3,2,uv));
39     OT_VECTEUR_3D dNi_dZ(0.,0.,0.);
40    
41     OT_MATRICE_3D dNi(dNi_de,dNi_dn,dNi_dZ);
42     dNi_transpose=dNi.transpose();
43 gervaislavoie 332 }
44    
45 francois 470 OPT_TRIANGLE::OPT_TRIANGLE(OPT_TRIANGLE& mdd):fem_triangle3(mdd.fem_triangle3),opt_noeud1(mdd.opt_noeud1),opt_noeud2(mdd.opt_noeud2),opt_noeud3(mdd.opt_noeud3)
46 gervaislavoie 332 {
47 francois 470
48 gervaislavoie 332 }
49    
50     OPT_TRIANGLE::~OPT_TRIANGLE()
51     {
52 francois 470
53 gervaislavoie 332 }
54    
55     unsigned long OPT_TRIANGLE::get_id(void)
56     {
57 francois 470 return fem_triangle3->get_id();
58 gervaislavoie 332 }
59    
60     double OPT_TRIANGLE::change_angle1_initial(double angle)
61     {
62     a1_init=angle;
63     }
64    
65     double OPT_TRIANGLE::change_angle2_initial(double angle)
66     {
67     a2_init=angle;
68     }
69    
70     double OPT_TRIANGLE::change_angle3_initial(double angle)
71     {
72     a3_init=angle;
73     }
74    
75     double OPT_TRIANGLE::change_angle1(double angle)
76     {
77     a1=angle;
78     }
79    
80     double OPT_TRIANGLE::change_angle2(double angle)
81     {
82     a2=angle;
83     }
84    
85     double OPT_TRIANGLE::change_angle3(double angle)
86     {
87     a3=angle;
88     }
89    
90 gervaislavoie 495 void OPT_TRIANGLE::change_normale_unitaire(OT_VECTEUR_3D vec)
91     {
92     normale_unitaire=vec;
93     }
94    
95 gervaislavoie 382 OT_VECTEUR_3D OPT_TRIANGLE::get_normale_unitaire(void)
96 gervaislavoie 332 {
97 gervaislavoie 382 return normale_unitaire;
98 gervaislavoie 332 }
99    
100 francois 470 OT_MATRICE_3D OPT_TRIANGLE::change_jacobien_inverse(void)
101 gervaislavoie 392 {
102 francois 470 double j[9];
103     double uv[6];
104     double unite;
105    
106     fem_triangle3->get_inverse_jacob(j,uv,unite);
107    
108 francois 647 OT_VECTEUR_3D col1_ji(j[0],j[3],j[6]);
109     OT_VECTEUR_3D col2_ji(j[1],j[4],j[7]);
110     OT_VECTEUR_3D col3_ji(j[2],j[5],j[8]);
111 francois 470
112     OT_MATRICE_3D ji(col1_ji,col2_ji,col3_ji);
113     jacobien_inverse=ji;
114 gervaislavoie 392 }
115    
116 gervaislavoie 495 OT_MATRICE_3D OPT_TRIANGLE::get_jacobien_inverse(void)
117 gervaislavoie 398 {
118 gervaislavoie 495 return jacobien_inverse;
119 gervaislavoie 398 }
120    
121 gervaislavoie 495 OT_MATRICE_3D OPT_TRIANGLE::change_matrice_abc(void)
122 gervaislavoie 332 {
123 gervaislavoie 495 matrice_abc=jacobien_inverse*dNi_transpose;
124 gervaislavoie 332 }
125    
126 francois 470 OT_MATRICE_3D OPT_TRIANGLE::get_matrice_abc(void)
127 gervaislavoie 332 {
128 francois 470 return matrice_abc;
129 gervaislavoie 332 }
130    
131 gervaislavoie 528 void OPT_TRIANGLE::change_vecteur_deplacement_reel(void)
132 gervaislavoie 332 {
133 francois 470 OPT_NOEUD* opt_n1=get_noeud1();
134     OPT_NOEUD* opt_n2=get_noeud2();
135     OPT_NOEUD* opt_n3=get_noeud3();
136    
137     double d1=opt_n1->get_norme_orientee_deplacement();
138     double d2=opt_n2->get_norme_orientee_deplacement();
139     double d3=opt_n3->get_norme_orientee_deplacement();
140    
141 gervaislavoie 528 OT_VECTEUR_3D D(d1,d2,d3);
142     vec_deplacement_reel=D;
143 gervaislavoie 332 }
144    
145 gervaislavoie 528 OT_VECTEUR_3D OPT_TRIANGLE::get_vecteur_deplacement_reel(void)
146 gervaislavoie 332 {
147 gervaislavoie 528 return vec_deplacement_reel;
148 gervaislavoie 332 }
149    
150 gervaislavoie 528 void OPT_TRIANGLE::change_vecteur_sol_deplacement_virtuel(void )
151     {
152     OPT_NOEUD* opt_n1=get_noeud1();
153     OPT_NOEUD* opt_n2=get_noeud2();
154     OPT_NOEUD* opt_n3=get_noeud3();
155    
156     double d1=opt_n1->get_sol_deplacement_virtuel();
157     double d2=opt_n2->get_sol_deplacement_virtuel();
158     double d3=opt_n3->get_sol_deplacement_virtuel();
159    
160     OT_VECTEUR_3D D(d1,d2,d3);
161     vec_sol_deplacement_virtuel=D;
162     }
163    
164     OT_VECTEUR_3D OPT_TRIANGLE::get_vecteur_sol_deplacement_virtuel(void )
165     {
166     return vec_sol_deplacement_virtuel;
167     }
168    
169 gervaislavoie 495 void OPT_TRIANGLE::change_norme_gradient_deplacement_reel(void)
170 gervaislavoie 332 {
171 gervaislavoie 528 OT_VECTEUR_3D gradient_deplacement_reel=matrice_abc*vec_deplacement_reel;
172     norme_gradient_deplacement_reel=gradient_deplacement_reel.get_longueur();
173 gervaislavoie 332 }
174    
175 gervaislavoie 495 double OPT_TRIANGLE::get_norme_gradient_deplacement_reel(void)
176     {
177     return norme_gradient_deplacement_reel;
178     }
179    
180     void OPT_TRIANGLE::change_norme_gradient_deplacement_virtuel(void)
181     {
182 gervaislavoie 528 /*OPT_NOEUD* opt_n1=get_noeud1();
183 gervaislavoie 495 OPT_NOEUD* opt_n2=get_noeud2();
184     OPT_NOEUD* opt_n3=get_noeud3();
185    
186     OT_MATRICE_3D abc=get_matrice_abc();
187    
188 gervaislavoie 528 double d1=opt_n1->get_sol_deplacement_virtuel();
189     double d2=opt_n2->get_sol_deplacement_virtuel();
190     double d3=opt_n3->get_sol_deplacement_virtuel();
191 gervaislavoie 495
192     OT_VECTEUR_3D D(d1,d2,d3);
193    
194 gervaislavoie 528 OT_VECTEUR_3D gradient_deplacement=abc*D;*/
195     OT_VECTEUR_3D gradient_deplacement_virtuel=matrice_abc*vec_sol_deplacement_virtuel;
196     norme_gradient_deplacement_virtuel=gradient_deplacement_virtuel.get_longueur();
197 gervaislavoie 495 }
198    
199     double OPT_TRIANGLE::get_norme_gradient_deplacement_virtuel(void)
200     {
201     return norme_gradient_deplacement_virtuel;
202     }
203    
204     void OPT_TRIANGLE::change_noeuds_fixes_3(int val)
205     {
206     noeuds_fixes_3=val;
207     }
208    
209     int OPT_TRIANGLE::get_noeuds_fixes_3(void)
210     {
211     return noeuds_fixes_3;
212     }
213    
214 gervaislavoie 528 void OPT_TRIANGLE::change_nb_noeuds_fixes_iter(int nb)
215     {
216     nb_noeuds_fixes_iter=nb;
217     }
218    
219     int OPT_TRIANGLE::get_nb_noeuds_fixes_iter(void)
220     {
221     return nb_noeuds_fixes_iter;
222     }
223    
224 francois 470 double OPT_TRIANGLE::get_angle1_initial(void)
225 gervaislavoie 332 {
226 francois 470 return a1_init;
227 gervaislavoie 332 }
228    
229 francois 470 double OPT_TRIANGLE::get_angle2_initial(void)
230 gervaislavoie 332 {
231 francois 470 return a2_init;
232 gervaislavoie 332 }
233    
234 francois 470 double OPT_TRIANGLE::get_angle3_initial(void)
235 gervaislavoie 332 {
236 francois 470 return a3_init;
237 gervaislavoie 332 }
238    
239 francois 470 double OPT_TRIANGLE::get_angle1(void)
240 gervaislavoie 332 {
241 francois 470 return a1;
242 gervaislavoie 332 }
243    
244 francois 470 double OPT_TRIANGLE::get_angle2(void)
245 gervaislavoie 332 {
246 francois 470 return a2;
247 gervaislavoie 332 }
248    
249 francois 470 double OPT_TRIANGLE::get_angle3(void)
250 gervaislavoie 332 {
251 francois 470 return a3;
252 gervaislavoie 332 }
253    
254 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud1(void)
255 gervaislavoie 332 {
256 francois 470 return opt_noeud1;
257 gervaislavoie 332 }
258    
259 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud2(void)
260 gervaislavoie 332 {
261 francois 470 return opt_noeud2;
262 gervaislavoie 332 }
263    
264 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud3(void)
265 gervaislavoie 332 {
266 francois 470 return opt_noeud3;
267 gervaislavoie 332 }
268    
269     int OPT_TRIANGLE::get_num(void)
270     {
271 francois 470 return num;
272 gervaislavoie 332 }
273    
274     void OPT_TRIANGLE::change_num(int val)
275     {
276     num=val;
277     }
278    
279     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin1(void)
280     {
281     return voisin1;
282     }
283    
284     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin2(void)
285     {
286     return voisin2;
287     }
288    
289     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin3(void)
290     {
291     return voisin3;
292     }
293    
294     void OPT_TRIANGLE::change_voisin1(OPT_TRIANGLE* tri)
295     {
296     voisin1=tri;
297     }
298    
299     void OPT_TRIANGLE::change_voisin2(OPT_TRIANGLE* tri)
300     {
301     voisin2=tri;
302     }
303    
304     void OPT_TRIANGLE::change_voisin3(OPT_TRIANGLE* tri)
305     {
306     voisin3=tri;
307     }