ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/optimisation/src/opt_triangle.cpp
Revision: 470
Committed: Fri Dec 6 22:32:32 2013 UTC (11 years, 5 months ago) by francois
File size: 5837 byte(s)
Log Message:
MAGIC V4 pour l'optimisation de mouvement normal

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 gervaislavoie 382 void OPT_TRIANGLE::change_normale_unitaire(OT_VECTEUR_3D vec)
61 gervaislavoie 332 {
62 gervaislavoie 382 normale_unitaire=vec;
63 gervaislavoie 332 }
64    
65     double OPT_TRIANGLE::change_angle1_initial(double angle)
66     {
67     a1_init=angle;
68     }
69    
70     double OPT_TRIANGLE::change_angle2_initial(double angle)
71     {
72     a2_init=angle;
73     }
74    
75     double OPT_TRIANGLE::change_angle3_initial(double angle)
76     {
77     a3_init=angle;
78     }
79    
80     double OPT_TRIANGLE::change_angle1(double angle)
81     {
82     a1=angle;
83     }
84    
85     double OPT_TRIANGLE::change_angle2(double angle)
86     {
87     a2=angle;
88     }
89    
90     double OPT_TRIANGLE::change_angle3(double angle)
91     {
92     a3=angle;
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     OT_VECTEUR_3D col1_ji(j[0],j[1],j[2]);
109     OT_VECTEUR_3D col2_ji(j[3],j[4],j[5]);
110     OT_VECTEUR_3D col3_ji(j[6],j[7],j[8]);
111    
112     OT_MATRICE_3D ji(col1_ji,col2_ji,col3_ji);
113     jacobien_inverse=ji;
114 gervaislavoie 392 }
115    
116 francois 470 OT_MATRICE_3D OPT_TRIANGLE::change_matrice_abc(void)
117 gervaislavoie 398 {
118 francois 470 matrice_abc=jacobien_inverse*dNi_transpose;
119 gervaislavoie 398 }
120    
121 francois 470 OT_MATRICE_3D OPT_TRIANGLE::get_jacobien_inverse(void)
122 gervaislavoie 332 {
123 francois 470 return jacobien_inverse;
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 francois 470 /*OT_MATRICE_3D OPT_TRIANGLE::get_jacobien_inverse_initial(void)
132 gervaislavoie 332 {
133 francois 470 return jacobien_inverse_initial;
134     }*/
135    
136     /*OT_MATRICE_3D OPT_TRIANGLE::get_matrice_abc_initiale(void)
137     {
138     return matrice_abc_initiale;
139     }*/
140    
141     OT_VECTEUR_3D OPT_TRIANGLE::get_vecteur_deplacement(void)
142     {
143     return vec_deplacement;
144 gervaislavoie 332 }
145    
146 francois 470 void OPT_TRIANGLE::change_vecteur_deplacement(void)
147 gervaislavoie 332 {
148 francois 470 OPT_NOEUD* opt_n1=get_noeud1();
149     OPT_NOEUD* opt_n2=get_noeud2();
150     OPT_NOEUD* opt_n3=get_noeud3();
151    
152     double d1=opt_n1->get_norme_orientee_deplacement();
153     double d2=opt_n2->get_norme_orientee_deplacement();
154     double d3=opt_n3->get_norme_orientee_deplacement();
155    
156     OT_VECTEUR_3D D(d1,d2,d3); // Vecteur contenant la norme orientée du déplacement de chaque noeud du triangle
157     vec_deplacement=D;
158 gervaislavoie 332 }
159    
160 francois 470 double OPT_TRIANGLE::get_norme_gradient_deplacement(void)
161 gervaislavoie 332 {
162 francois 470 return norme_gradient_deplacement;
163 gervaislavoie 332 }
164    
165 francois 470 void OPT_TRIANGLE::change_norme_gradient_deplacement(void)
166 gervaislavoie 332 {
167 francois 470 //OT_VECTEUR_3D D=get_vecteur_deplacement_opt_tri(opt_tri);
168     //OT_VECTEUR_3D gradient_deplacement=matrice_abc_initiale*vec_deplacement;
169     OT_VECTEUR_3D gradient_deplacement=matrice_abc*vec_deplacement;
170     norme_gradient_deplacement=gradient_deplacement.get_longueur();
171 gervaislavoie 332 }
172    
173 francois 470 double OPT_TRIANGLE::get_angle1_initial(void)
174 gervaislavoie 332 {
175 francois 470 return a1_init;
176 gervaislavoie 332 }
177    
178 francois 470 double OPT_TRIANGLE::get_angle2_initial(void)
179 gervaislavoie 332 {
180 francois 470 return a2_init;
181 gervaislavoie 332 }
182    
183 francois 470 double OPT_TRIANGLE::get_angle3_initial(void)
184 gervaislavoie 332 {
185 francois 470 return a3_init;
186 gervaislavoie 332 }
187    
188 francois 470 double OPT_TRIANGLE::get_angle1(void)
189 gervaislavoie 332 {
190 francois 470 return a1;
191 gervaislavoie 332 }
192    
193 francois 470 double OPT_TRIANGLE::get_angle2(void)
194 gervaislavoie 332 {
195 francois 470 return a2;
196 gervaislavoie 332 }
197    
198 francois 470 double OPT_TRIANGLE::get_angle3(void)
199 gervaislavoie 332 {
200 francois 470 return a3;
201 gervaislavoie 332 }
202    
203 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud1(void)
204 gervaislavoie 332 {
205 francois 470 return opt_noeud1;
206 gervaislavoie 332 }
207    
208 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud2(void)
209 gervaislavoie 332 {
210 francois 470 return opt_noeud2;
211 gervaislavoie 332 }
212    
213 francois 470 OPT_NOEUD* OPT_TRIANGLE::get_noeud3(void)
214 gervaislavoie 332 {
215 francois 470 return opt_noeud3;
216 gervaislavoie 332 }
217    
218     int OPT_TRIANGLE::get_num(void)
219     {
220 francois 470 return num;
221 gervaislavoie 332 }
222    
223     void OPT_TRIANGLE::change_num(int val)
224     {
225     num=val;
226     }
227    
228     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin1(void)
229     {
230     return voisin1;
231     }
232    
233     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin2(void)
234     {
235     return voisin2;
236     }
237    
238     OPT_TRIANGLE* OPT_TRIANGLE::get_voisin3(void)
239     {
240     return voisin3;
241     }
242    
243     void OPT_TRIANGLE::change_voisin1(OPT_TRIANGLE* tri)
244     {
245     voisin1=tri;
246     }
247    
248     void OPT_TRIANGLE::change_voisin2(OPT_TRIANGLE* tri)
249     {
250     voisin2=tri;
251     }
252    
253     void OPT_TRIANGLE::change_voisin3(OPT_TRIANGLE* tri)
254     {
255     voisin3=tri;
256     }