MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mgopt_mvt_normal.h
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mgopt_mvt_normal.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:57 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef mgoptmvtnormalH
23 #define mgoptmvtnormalH
24 
25 
26 
27 #include "tpl_map_entite.h"
28 #include "ot_mathematique.h"
29 #include "ot_parametres.h"
30 #include "mg_gestionnaire.h"
31 #include "opt_noeud.h"
32 #include "fem_triangle3.h"
33 
34 class OPT_NOEUD;
35 class OPT_TRIANGLE;
36 class FEM_TRIANGLE3;
37 
39 {
40 public :
41 
46 
47  virtual void active_affichage(void (*fonc)(char*));
48  virtual void init_parametre(void);
49  virtual void ecrire_fichier_params(char *fichierparam);
51  virtual void lissage(TPL_MAP_ENTITE<OPT_NOEUD*> lst_noeud);
52  virtual void lissage_controle(TPL_MAP_ENTITE<OPT_NOEUD*> lst_noeud, double ecart_max_pondere_norme_pos);
53  virtual void optimisation(char* fichierin, char* fichierout, char* fichierparam, char* fichierparamaster);
54  //virtual void lissage(char* fichier);
55  //virtual void deplacement_normal(double dpl_max, double angle_min, int nbpas);
56  //virtual void visualisation(int facteur);
57 
58  // Correspondance entre opt_noeud et fem_noeud
60  class OPT_NOEUD* get_noeud(class FEM_NOEUD* fem_noeud);
61  std::map<unsigned long, std::pair<class OPT_NOEUD*,class FEM_NOEUD*> > correspondance_noeud;
62 
63  void printf(const char* arg1);
64  std::ostream fem_tri3();
65 
66 protected:
67 
68  // Fonctions essentielles méthode du mouvement normal
69  virtual void lire_params(char *fichier);
70  //virtual void get_liste_noeud_deplacer_initiale(TPL_MAP_ENTITE< OPT_NOEUD* > listenoeud, TPL_MAP_ENTITE< OPT_NOEUD* >* lstnoeud_deplacer_initiale);
71  //virtual void change_liste_noeud_voisin(TPL_MAP_ENTITE<OPT_NOEUD*> lstnoeud_deplacer_initiale);
72  virtual void change_liste_noeud_voisin(OPT_NOEUD* opt_noeud);
73  virtual double get_aire_fem_tri3(FEM_TRIANGLE3* fem_tri);
74  virtual void calcul_normale_opt_noeud(class OPT_NOEUD* noeud);
75  virtual double get_sigma_vm_max(MG_GESTIONNAIRE* gest, FEM_NOEUD* fem_noeud, int num_sol_inf, int num_sol_moy, int num_sol_sup);
76  virtual double get_ecart_type_sigma_vm(MG_GESTIONNAIRE* gest, TPL_MAP_ENTITE<OPT_NOEUD*> lstnoeud, double moyenne, int numsolinf, int numsolmoy, int numsolsup);
77 
78  // Fonctions pour la gestion des déplacement virtuels et réels
79  virtual void change_deplacement_virtuel_opt_noeud(OPT_NOEUD* opt_noeud, double d);
80  virtual void deplace_opt_noeud(OPT_NOEUD* opt_noeud, double d);
81 
82  // Fonctions de visualisation des déplacements
84 
85  // Fonctions pour le contrôle par gradient de déplacement
88  virtual void get_liste_noeud_mobile_tri_2nd_fixe(TPL_MAP_ENTITE<OPT_TRIANGLE*> lst_tri_2nd_fixe, TPL_MAP_ENTITE< OPT_NOEUD* > lstnoeud_deplacer, TPL_MAP_ENTITE<OPT_NOEUD*> *lst_noeud_mobile_tri_2nd_fixe);
89  //virtual void get_liste_opt_tri_3nd_fixe(FEM_MAILLAGE* fem, TPL_MAP_ENTITE<OPT_NOEUD*> lstnoeud_deplacer, TPL_MAP_ENTITE<OPT_TRIANGLE*>* lst_opt_tri_3nd_fixe);
90  //virtual void get_noeud_mobile_opt_tri(OPT_TRIANGLE* opt_tri, TPL_MAP_ENTITE<OPT_NOEUD*> lstnoeud_deplacer, OPT_NOEUD** opt_noeud_mobile);
91  virtual double evaluer_fonction_f(double norme_max_grad, TPL_MAP_ENTITE< OPT_TRIANGLE* > lst_tri, int affichage);//, TPL_MAP_ENTITE<OPT_NOEUD*> lst_noeud_mobile_tri_2nd_fixe);
92  virtual void evaluer_gradient_f(int num_repl, double norme_max_grad, TPL_MAP_ENTITE<OPT_TRIANGLE*> lst_tri);
93  virtual double get_norme_gradient_f(int num_repl, TPL_MAP_ENTITE<OPT_NOEUD*> lst_noeud);
94  virtual int algorithme_gradient(int num_repl, double norme_max_grad, double pas, double epsilon, int iter_max_grad, TPL_MAP_ENTITE<OPT_TRIANGLE*> lst_tri, TPL_MAP_ENTITE<OPT_NOEUD*> lst_noeud, int affichage);
95 
96  // Fonction non utilisée pour calculer l'angle entre deux triangles
97  //virtual double calcul_angle(class OPT_TRIANGLE* tri1,class OPT_TRIANGLE* tri2);
98 
99  // Correspondance entre opt_triangle et fem_triangle
102  std::map<unsigned long, std::pair<class OPT_TRIANGLE*,class FEM_TRIANGLE3*> > correspondance_triangle;
103 
104  class MG_MAILLAGE *mai;
105  class FEM_MAILLAGE *fem; // Maillage servant pour l'optimisation
106  class FEM_MAILLAGE* fem_visu; // Maillage servant pour la visualisation
109 
110  void (*affiche)(char *mess);
113  char etude[500];
114  char etudesortie[500];
115 
116  int nb_tri_grad_depasse; // Nb de triangles dont la norme du gradient de déplacement dépasse la valeur seuil lors de l'écriture de la fonction f
117  //int nb_tri_3noeud_fixe; // Nb de triangles qui ont 3 noeuds fixes et qui avaient au moins 1 noeud mobile au départ
118 };
119 
120 #endif
class OPT_TRIANGLE * get_triangle(class FEM_TRIANGLE3 *fem_tri3)
virtual void init_parametre(void)
virtual void deplace_opt_noeud(OPT_NOEUD *opt_noeud, double d)
virtual void ecrire_fichier_params(char *fichierparam)
virtual void get_liste_tri_2nd_fixe(FEM_MAILLAGE *fem, TPL_MAP_ENTITE< OPT_NOEUD * > lstnoeud_deplacer, TPL_MAP_ENTITE< class OPT_TRIANGLE * > *lst_tri_2nd_fixe)
virtual void ecriture_fem_solution_deplacement(FEM_SOLUTION *sol, FEM_NOEUD *fem_noeud)
virtual double get_norme_gradient_f(int num_repl, TPL_MAP_ENTITE< OPT_NOEUD * > lst_noeud)
virtual void active_affichage(void(*fonc)(char *))
class FEM_MAILLAGE * fem
virtual void change_deplacement_virtuel_opt_noeud(OPT_NOEUD *opt_noeud, double d)
void printf(const char *arg1)
virtual void optimisation(char *fichierin, char *fichierout, char *fichierparam, char *fichierparamaster)
virtual double evaluer_fonction_f(double norme_max_grad, TPL_MAP_ENTITE< OPT_TRIANGLE * > lst_tri, int affichage)
std::map< unsigned long, std::pair< class OPT_NOEUD *, class FEM_NOEUD * > > correspondance_noeud
virtual void calcul_normale_opt_noeud(class OPT_NOEUD *noeud)
virtual void change_liste_noeud_voisin(OPT_NOEUD *opt_noeud)
class FEM_MAILLAGE * fem_visu
std::map< unsigned long, std::pair< class OPT_TRIANGLE *, class FEM_TRIANGLE3 * > > correspondance_triangle
virtual double get_ecart_type_sigma_vm(MG_GESTIONNAIRE *gest, TPL_MAP_ENTITE< OPT_NOEUD * > lstnoeud, double moyenne, int numsolinf, int numsolmoy, int numsolsup)
virtual int algorithme_gradient(int num_repl, double norme_max_grad, double pas, double epsilon, int iter_max_grad, TPL_MAP_ENTITE< OPT_TRIANGLE * > lst_tri, TPL_MAP_ENTITE< OPT_NOEUD * > lst_noeud, int affichage)
virtual void lissage(TPL_MAP_ENTITE< OPT_NOEUD * > lst_noeud)
std::ostream fem_tri3()
virtual void get_liste_noeud_mobile_tri_2nd_fixe(TPL_MAP_ENTITE< OPT_TRIANGLE * > lst_tri_2nd_fixe, TPL_MAP_ENTITE< OPT_NOEUD * > lstnoeud_deplacer, TPL_MAP_ENTITE< OPT_NOEUD * > *lst_noeud_mobile_tri_2nd_fixe)
class MG_MAILLAGE * mai
virtual void get_liste_noeud_a_partir_liste_tri(TPL_MAP_ENTITE< OPT_TRIANGLE * > lst_tri, TPL_MAP_ENTITE< OPT_NOEUD * > *lst_noeud)
virtual void lire_params(char *fichier)
TPL_MAP_ENTITE< class OPT_TRIANGLE * > listetriangle
virtual void get_liste_noeud_deplacer_initiale(TPL_MAP_ENTITE< OPT_NOEUD * > listenoeud, TPL_MAP_ENTITE< OPT_NOEUD * > *lstnoeud_deplacer_initiale)
TPL_MAP_ENTITE< class OPT_NOEUD * > listenoeud
virtual void lissage_controle(TPL_MAP_ENTITE< OPT_NOEUD * > lst_noeud, double ecart_max_pondere_norme_pos)
class OPT_NOEUD * get_noeud(class FEM_NOEUD *fem_noeud)
class MG_GEOMETRIE * geo
virtual double get_sigma_vm_max(MG_GESTIONNAIRE *gest, FEM_NOEUD *fem_noeud, int num_sol_inf, int num_sol_moy, int num_sol_sup)
void(* affiche)(char *mess)
OT_PARAMETRES params
virtual double get_aire_fem_tri3(FEM_TRIANGLE3 *fem_tri)
virtual void evaluer_gradient_f(int num_repl, double norme_max_grad, TPL_MAP_ENTITE< OPT_TRIANGLE * > lst_tri)
FEM_NOEUD * fem_noeud
Definition: opt_noeud.h:133