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, 8 months ago) by francois
File size: 5837 byte(s)
Log Message:
MAGIC V4 pour l'optimisation de mouvement normal

File Contents

# Content
1 //------------------------------------------------------------
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 #include "fem_triangle3.h"
30 #include "opt_noeud.h"
31
32
33 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 {
35 double uv[6];
36
37 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 }
44
45 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 {
47
48 }
49
50 OPT_TRIANGLE::~OPT_TRIANGLE()
51 {
52
53 }
54
55 unsigned long OPT_TRIANGLE::get_id(void)
56 {
57 return fem_triangle3->get_id();
58 }
59
60 void OPT_TRIANGLE::change_normale_unitaire(OT_VECTEUR_3D vec)
61 {
62 normale_unitaire=vec;
63 }
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 OT_VECTEUR_3D OPT_TRIANGLE::get_normale_unitaire(void)
96 {
97 return normale_unitaire;
98 }
99
100 OT_MATRICE_3D OPT_TRIANGLE::change_jacobien_inverse(void)
101 {
102 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 }
115
116 OT_MATRICE_3D OPT_TRIANGLE::change_matrice_abc(void)
117 {
118 matrice_abc=jacobien_inverse*dNi_transpose;
119 }
120
121 OT_MATRICE_3D OPT_TRIANGLE::get_jacobien_inverse(void)
122 {
123 return jacobien_inverse;
124 }
125
126 OT_MATRICE_3D OPT_TRIANGLE::get_matrice_abc(void)
127 {
128 return matrice_abc;
129 }
130
131 /*OT_MATRICE_3D OPT_TRIANGLE::get_jacobien_inverse_initial(void)
132 {
133 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 }
145
146 void OPT_TRIANGLE::change_vecteur_deplacement(void)
147 {
148 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 }
159
160 double OPT_TRIANGLE::get_norme_gradient_deplacement(void)
161 {
162 return norme_gradient_deplacement;
163 }
164
165 void OPT_TRIANGLE::change_norme_gradient_deplacement(void)
166 {
167 //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 }
172
173 double OPT_TRIANGLE::get_angle1_initial(void)
174 {
175 return a1_init;
176 }
177
178 double OPT_TRIANGLE::get_angle2_initial(void)
179 {
180 return a2_init;
181 }
182
183 double OPT_TRIANGLE::get_angle3_initial(void)
184 {
185 return a3_init;
186 }
187
188 double OPT_TRIANGLE::get_angle1(void)
189 {
190 return a1;
191 }
192
193 double OPT_TRIANGLE::get_angle2(void)
194 {
195 return a2;
196 }
197
198 double OPT_TRIANGLE::get_angle3(void)
199 {
200 return a3;
201 }
202
203 OPT_NOEUD* OPT_TRIANGLE::get_noeud1(void)
204 {
205 return opt_noeud1;
206 }
207
208 OPT_NOEUD* OPT_TRIANGLE::get_noeud2(void)
209 {
210 return opt_noeud2;
211 }
212
213 OPT_NOEUD* OPT_TRIANGLE::get_noeud3(void)
214 {
215 return opt_noeud3;
216 }
217
218 int OPT_TRIANGLE::get_num(void)
219 {
220 return num;
221 }
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 }