MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_graph_noeud.cpp
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 //####// fem_graph_noeud.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #pragma hdrstop
25 #include "gestionversion.h"
26 #include "fem_graph_noeud.h"
27 #include "fem_noeud.h"
28 #include "fem_element3.h"
29 #include "fem_maillage.h"
30 
31 
32 
33 FEM_GRAPH_NOEUD::FEM_GRAPH_NOEUD(FEM_NOEUD* rac,FEM_MAILLAGE* mai):racine(rac),maillage(mai)
34 {
35  construire();
36 }
37 
39 {
40 }
41 
42 
44 {
45  int nbnoeudtotal=maillage->get_nb_fem_noeud();
46  int *tab=new int[nbnoeudtotal+1];
47  for (int i=0;i<nbnoeudtotal+1;i++) tab[i]=0;
48  tab[racine->get_numero()]=1;
50  graph.insert(graph.end(),liste);
51  int niveau=0;
52  graph[0].ajouter(racine);
53  while (graph[niveau].get_nb()!=0)
54  {
55  graph.insert(graph.end(),liste);
56  int nb=graph[niveau].get_nb();
57  for (int i=0;i<nb;i++)
58  {
59  FEM_NOEUD* noeud=graph[niveau].get(i);
60  TPL_MAP_ENTITE<FEM_NOEUD*> liste_voisin;
61  get_voisin_noeud(noeud,liste_voisin);
62  int nbvoisin=liste_voisin.get_nb();
63  for (int j=0;j<nbvoisin;j++)
64  {
65  FEM_NOEUD* no=liste_voisin.get(j);
66  if (tab[no->get_numero()]!=1)
67  {
68  tab[no->get_numero()]=1;
69  graph[niveau+1].ajouter(no);
70  }
71  }
72  }
73  niveau++;
74  }
75  delete [] tab;
76 }
77 
79 {
80  return graph.size()-2;
81 }
82 
84 {
85  int num=graph.size()-2;
86  return graph[num];
87 }
88 
90 {
91  return graph[num];
92 }
93 
95 {
96  int dim;
97  int nb_ele=no->get_lien_element3()->get_nb();
98  if (nb_ele!=0) dim=3;
99  else
100  {
101  nb_ele=no->get_lien_element2()->get_nb();
102  if (nb_ele!=0) dim=2;
103  else
104  {
105  nb_ele=no->get_lien_element1()->get_nb();
106  dim=1;
107  }
108  }
109  for (int i=0;i<nb_ele;i++)
110  {
112  if (dim==3)
113  {
114  FEM_ELEMENT3* ele=no->get_lien_element3()->get(i);
115  ele->get_voisin_noeud(no,voisin);
116  }
117  if (dim==2)
118  {
119  FEM_ELEMENT2* ele=no->get_lien_element2()->get(i);
120  ele->get_voisin_noeud(no,voisin);
121  }
122  if (dim==1)
123  {
124  FEM_ELEMENT1* ele=no->get_lien_element1()->get(i);
125  ele->get_voisin_noeud(no,voisin);
126  }
127  for (int i=0;i<voisin.get_nb();i++)
128  liste.ajouter(voisin.get(i));
129 
130  }
131 
132 }
133 
134 #pragma package(smart_init)
gestionversion.h
fem_element3.h
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
fem_maillage.h
fem_noeud.h
FEM_NOEUD::get_lien_element1
TPL_LISTE_ENTITE< class FEM_ELEMENT1 * > * get_lien_element1(void)
Definition: fem_noeud.cpp:394
FEM_ELEMENT3
Definition: fem_element3.h:34
FEM_NOEUD::get_numero
int get_numero(void)
Definition: fem_noeud.cpp:328
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE::get_nb_fem_noeud
unsigned int get_nb_fem_noeud(void)
Definition: fem_maillage.cpp:190
FEM_ELEMENT_MAILLAGE::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)=0
FEM_NOEUD::get_lien_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
Definition: fem_noeud.cpp:406
FEM_GRAPH_NOEUD::~FEM_GRAPH_NOEUD
~FEM_GRAPH_NOEUD()
Definition: fem_graph_noeud.cpp:38
FEM_MAILLAGE
Definition: fem_maillage.h:66
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
FEM_NOEUD::get_lien_element3
TPL_LISTE_ENTITE< class FEM_ELEMENT3 * > * get_lien_element3(void)
Definition: fem_noeud.cpp:417
FEM_GRAPH_NOEUD::construire
void construire(void)
Definition: fem_graph_noeud.cpp:43
FEM_ELEMENT1
Definition: fem_element1.h:34
fem_graph_noeud.h
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
FEM_GRAPH_NOEUD::get_dernier_niveau
TPL_MAP_ENTITE< FEM_NOEUD * > & get_dernier_niveau(void)
Definition: fem_graph_noeud.cpp:83
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
FEM_GRAPH_NOEUD::get_excentricite
int get_excentricite(void)
Definition: fem_graph_noeud.cpp:78
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_GRAPH_NOEUD::get_niveau
TPL_MAP_ENTITE< FEM_NOEUD * > & get_niveau(int num)
Definition: fem_graph_noeud.cpp:89
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
FEM_GRAPH_NOEUD::racine
FEM_NOEUD * racine
Definition: fem_graph_noeud.h:44
TPL_MAP_ENTITE::get
virtual X get(int num)
Definition: tpl_map_entite.h:89
FEM_GRAPH_NOEUD::FEM_GRAPH_NOEUD
FEM_GRAPH_NOEUD(class FEM_NOEUD *rac, class FEM_MAILLAGE *mai)
Definition: fem_graph_noeud.cpp:33
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
FEM_GRAPH_NOEUD::get_voisin_noeud
void get_voisin_noeud(FEM_NOEUD *no, TPL_MAP_ENTITE< FEM_NOEUD * > &liste)
Definition: fem_graph_noeud.cpp:94
FEM_GRAPH_NOEUD::graph
std::vector< TPL_MAP_ENTITE< FEM_NOEUD * > > graph
Definition: fem_graph_noeud.h:45
FEM_GRAPH_NOEUD::maillage
FEM_MAILLAGE * maillage
Definition: fem_graph_noeud.h:43