ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/optimisation/src/opt_noeud.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: 3709 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 #ifndef _OPTNOEUD_
2     #define _OPTNOEUD_
3    
4     #ifdef WINDOWS_VERSION
5     #ifdef BUILT_DLL_GEOMETRIE
6     #define DLLPORTGEOMETRIE __declspec(dllexport)
7     #else
8     #define DLLPORTGEOMETRIE __declspec(dllimport)
9     #endif
10     #else
11     #define DLLPORTGEOMETRIE
12     #endif
13    
14 francois 470 #include "fem_noeud.h"
15 gervaislavoie 332
16    
17    
18     class DLLPORTGEOMETRIE OPT_NOEUD
19     {
20     public:
21 francois 470 OPT_NOEUD(FEM_NOEUD* noeud);
22 gervaislavoie 332 OPT_NOEUD(OPT_NOEUD& mdd);
23     virtual ~OPT_NOEUD();
24 francois 470
25     virtual FEM_NOEUD* get_fem_noeud(void);
26 gervaislavoie 332 virtual unsigned long get_id(void);
27 francois 470
28 gervaislavoie 332 virtual double get_x(void);
29     virtual double get_y(void);
30     virtual double get_z(void);
31 gervaislavoie 398 virtual double get_x_initial(void);
32     virtual double get_y_initial(void);
33     virtual double get_z_initial(void);
34 gervaislavoie 332 virtual double* get_coord(void);
35    
36     virtual void change_x(double xx);
37     virtual void change_y(double yy);
38     virtual void change_z(double zz);
39 gervaislavoie 398 virtual void change_x_initial(double x_initial);
40     virtual void change_y_initial(double y_initial);
41     virtual void change_z_initial(double z_initial);
42 gervaislavoie 332 virtual void change_coord(double *coo);
43    
44 francois 470 virtual double get_norme_orientee_deplacement(void);
45     virtual void change_norme_orientee_deplacement(void);
46    
47     virtual OT_VECTEUR_3D get_normale(void);
48 gervaislavoie 332 virtual void change_normale(OT_VECTEUR_3D vec);
49 francois 470
50 gervaislavoie 332 virtual OT_VECTEUR_3D get_normale_initiale(void);
51     virtual void change_normale_initiale(void);
52 francois 470
53 gervaislavoie 332 virtual void change_solution(double val);
54     virtual double get_solution(void);
55    
56     virtual int get_num(void);
57     virtual void change_num(int val);
58    
59 gervaislavoie 495 virtual int get_mvt_normal(void);
60     virtual void change_mvt_normal(int mvt);
61 gervaislavoie 398
62 gervaislavoie 495 /*virtual int get_contrainte(void);
63     virtual void change_contrainte(int cont);*/
64 francois 470
65 gervaislavoie 495 virtual int get_gradient(void);
66     virtual void change_gradient(int grad);
67 gervaislavoie 398
68 gervaislavoie 495 /*virtual int get_fixe_au_depart(void);
69     virtual void change_fixe_au_depart(int fixe);*/
70 gervaislavoie 398
71 gervaislavoie 495 virtual int get_mobile_au_depart(void);
72     virtual void change_mobile_au_depart(int mob);
73    
74     virtual int get_mobile(void);
75     virtual void change_mobile(int mob);
76    
77     virtual int get_a_replacer(void);
78     virtual void change_a_replacer(int replacer);
79    
80     virtual int get_a_ete_replace(void);
81     virtual void change_a_ete_replace(int replace);
82    
83 gervaislavoie 398 virtual double get_terme_gradient_f(void);
84     virtual void change_terme_gradient_f(double valeur);
85    
86 gervaislavoie 495 virtual double get_sol_deplacement(void);
87     virtual void change_sol_deplacement(double deplacement);
88 gervaislavoie 332
89     private:
90 francois 470 FEM_NOEUD* fem_noeud;
91     double xyz0[3];
92     double norme_orientee_deplacement;
93 gervaislavoie 332 OT_VECTEUR_3D normale;
94 gervaislavoie 398 OT_VECTEUR_3D normale_initiale;
95 gervaislavoie 332 int num;
96 gervaislavoie 495 int mvt_normal; // Si mvt_normal==1, le noeud doit être déplacé par la méthode du mouvement normal
97     //int contrainte; // Si contrainte==1, le noeud a été bloqué par la contrainte
98     int gradient; // Si gradient==1, le noeud a été bloqué par le gradient
99     //int fixe_au_depart; // Si fixe_au_depart==1, le noeud ne doit pas être déplacé par la méthode d'optimisation
100     int mobile_au_depart; // Pour afficher le gradient des triangles qui ont 3 noeuds fixes et qui avaient 3 noeuds mobiles au départ
101     int mobile; // Si mobile==1, le noeud peut être déplacé et appartient à un triangle ayant 1 ou 2 noeuds fixes
102     int a_replacer; // Noeud mobile à replacer par l'algo du gradient (au moins un triangle dépasse la valeur seuil)
103     int a_ete_replace; // Noeud replacé par l'algorithme du gradient
104 gervaislavoie 398 double terme_gradient_f; // Terme i du gradient de f où i correspond à la numérotation globale du noeud
105 gervaislavoie 495 double sol_deplacement; // Déplacement virtuel du noeud
106 gervaislavoie 332 };
107    
108     #endif