ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/optimisation/src/opt_triangle.h
Revision: 495
Committed: Thu Mar 20 19:43:02 2014 UTC (11 years, 1 month ago) by gervaislavoie
Content type: text/plain
File size: 4594 byte(s)
Log Message:
Mise a jour de la methode du mouvement normal.

Minimisation, par l'algorithme du gradient, d'une fonction f definie comme la somme de la difference au carre entre la norme du gradient de deplacement de chaque triangle et la valeur seuil imposee.

La methode fonctionne globalement mais il reste quelques problemes mineurs:

- Gradient non respecte si plus d'un noeud d'un triangle, ayant 3 noeuds mobiles au debut de l'iteration, sont bloques au cours de cette iteration (l'algo diverge).

- Gradient non respecte pour certains noeuds reintegres au processus d'optimisation et dont tous les noeuds voisins sont fixes (l'algo diverge).

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     // mg_triangle.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #ifndef _OPTTRIANGLE_
24     #define _OPTTRIANGLE_
25    
26     #ifdef WINDOWS_VERSION
27     #ifdef BUILT_DLL_GEOMETRIE
28     #define DLLPORTGEOMETRIE __declspec(dllexport)
29     #else
30     #define DLLPORTGEOMETRIE __declspec(dllimport)
31     #endif
32     #else
33     #define DLLPORTGEOMETRIE
34     #endif
35    
36    
37     #include "mg_element_maillage.h"
38     #include "mg_segment.h"
39     #include "mg_noeud.h"
40 francois 470 #include "opt_noeud.h"
41 gervaislavoie 332 #include "ot_reference.h"
42    
43    
44     class DLLPORTGEOMETRIE OPT_TRIANGLE
45     {
46     public:
47 francois 470
48     OPT_TRIANGLE(class FEM_TRIANGLE3* fem_tri3,OPT_NOEUD* noeud1,OPT_NOEUD* noeud2,OPT_NOEUD* noeud3);
49 gervaislavoie 332 OPT_TRIANGLE(OPT_TRIANGLE& mdd);
50     virtual ~OPT_TRIANGLE();
51    
52 francois 470 virtual OPT_NOEUD* get_noeud1(void);
53     virtual OPT_NOEUD* get_noeud2(void);
54     virtual OPT_NOEUD* get_noeud3(void);
55 gervaislavoie 332
56     virtual unsigned long get_id(void);
57 gervaislavoie 382 virtual void change_normale_unitaire(OT_VECTEUR_3D vec);
58 francois 470
59 gervaislavoie 332 virtual double change_angle1_initial(double angle);
60     virtual double change_angle2_initial(double angle);
61     virtual double change_angle3_initial(double angle);
62     virtual double change_angle1(double angle);
63     virtual double change_angle2(double angle);
64     virtual double change_angle3(double angle);
65 gervaislavoie 398
66 francois 470 virtual OT_VECTEUR_3D get_normale_unitaire(void); //Enlever?
67    
68 gervaislavoie 392 virtual OT_MATRICE_3D get_jacobien_inverse(void);
69 gervaislavoie 398 virtual OT_MATRICE_3D get_matrice_abc(void);
70    
71 francois 470 virtual OT_MATRICE_3D change_jacobien_inverse(void);
72     virtual OT_MATRICE_3D change_matrice_abc(void);
73    
74     //virtual OT_MATRICE_3D get_jacobien_inverse_initial(void);
75     //virtual OT_MATRICE_3D get_matrice_abc_initiale(void);
76    
77     virtual OT_VECTEUR_3D get_vecteur_deplacement(void);
78     virtual void change_vecteur_deplacement(void);
79    
80 gervaislavoie 495 virtual double get_norme_gradient_deplacement_reel(void);
81     virtual void change_norme_gradient_deplacement_reel(void);
82 francois 470
83 gervaislavoie 495 virtual double get_norme_gradient_deplacement_virtuel(void);
84     virtual void change_norme_gradient_deplacement_virtuel(void);
85    
86     virtual int get_noeuds_fixes_3(void);
87     virtual void change_noeuds_fixes_3(int val);
88    
89 gervaislavoie 332 virtual double get_angle1_initial(void);
90     virtual double get_angle2_initial(void);
91     virtual double get_angle3_initial(void);
92     virtual double get_angle1(void);
93     virtual double get_angle2(void);
94     virtual double get_angle3(void);
95    
96    
97     virtual int get_num(void);
98     virtual void change_num(int val);
99    
100     virtual OPT_TRIANGLE* get_voisin1(void);
101     virtual OPT_TRIANGLE* get_voisin2(void);
102     virtual OPT_TRIANGLE* get_voisin3(void);
103     virtual void change_voisin1(OPT_TRIANGLE* tri);
104     virtual void change_voisin2(OPT_TRIANGLE* tri);
105     virtual void change_voisin3(OPT_TRIANGLE* tri);
106    
107 francois 470
108 gervaislavoie 332 protected:
109 francois 470
110     class FEM_TRIANGLE3* fem_triangle3;
111     OPT_NOEUD* opt_noeud1;
112     OPT_NOEUD* opt_noeud2;
113     OPT_NOEUD* opt_noeud3;
114    
115 gervaislavoie 382 OT_VECTEUR_3D normale_unitaire;
116 francois 470 OT_MATRICE_3D dNi_transpose;
117 gervaislavoie 392 OT_MATRICE_3D jacobien_inverse;
118 gervaislavoie 495 OT_MATRICE_3D matrice_abc; // Matrice résultant du produit de la matrice jacobienne inverse par la matrice des dérivées des fonctions d'interpolation
119 francois 470 OT_VECTEUR_3D vec_deplacement; // Vecteur contenant les déplacements des noeuds par rapport à leur position initiale
120 gervaislavoie 495 double norme_gradient_deplacement_reel;
121     double norme_gradient_deplacement_virtuel;
122     int noeuds_fixes_3; // Si noeuds_fixes_3==1, le triangle a 3 noeuds fixes
123 francois 470
124 gervaislavoie 332 int num;
125     double a1_init;
126     double a2_init;
127     double a3_init;
128     double a1;
129     double a2;
130     double a3;
131     OPT_TRIANGLE* voisin1;
132     OPT_TRIANGLE* voisin2;
133     OPT_TRIANGLE* voisin3;
134     };
135    
136     #endif