MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_tetra.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 //####// mg_tetra.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "mg_tetra.h"
26 #include "mg_maillage.h"
27 
28 MG_TETRA::MG_TETRA(unsigned long num,MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_TRIANGLE* mgtriangle1,class MG_TRIANGLE* mgtriangle2,class MG_TRIANGLE* mgtriangle3,class MG_TRIANGLE* mgtriangle4,int origine):MG_ELEMENT_MAILLAGE(num,topo,origine),noeud1(mgnoeud1),noeud2(mgnoeud2),noeud3(mgnoeud3),noeud4(mgnoeud4),triangle1(mgtriangle1),triangle2(mgtriangle2),triangle3(mgtriangle3),triangle4(mgtriangle4)
29 {
30  init_tetra();
31 }
32 
33 MG_TETRA::MG_TETRA(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_TRIANGLE* mgtriangle1,class MG_TRIANGLE* mgtriangle2,class MG_TRIANGLE* mgtriangle3,class MG_TRIANGLE* mgtriangle4,int origine):MG_ELEMENT_MAILLAGE(topo,origine),noeud1(mgnoeud1),noeud2(mgnoeud2),noeud3(mgnoeud3),noeud4(mgnoeud4),triangle1(mgtriangle1),triangle2(mgtriangle2),triangle3(mgtriangle3),triangle4(mgtriangle4)
34 {
35  init_tetra();
36 }
37 
38 
39 MG_TETRA::MG_TETRA(MG_TETRA& mdd):MG_ELEMENT_MAILLAGE(mdd),noeud1(mdd.noeud1),noeud2(mdd.noeud2),noeud3(mdd.noeud3),noeud4(mdd.noeud4),triangle1(mdd.triangle1),triangle2(mdd.triangle2),triangle3(mdd.triangle3),triangle4(mdd.triangle4)
40 {
41  init_tetra();
42 }
43 
45 {
46  MG_NOEUD* nd1=mgmai->get_mg_noeudid(noeud1->get_id()+decalage);
47  MG_NOEUD* nd2=mgmai->get_mg_noeudid(noeud2->get_id()+decalage);
48  MG_NOEUD* nd3=mgmai->get_mg_noeudid(noeud3->get_id()+decalage);
49  MG_NOEUD* nd4=mgmai->get_mg_noeudid(noeud4->get_id()+decalage);
50  MG_TRIANGLE* tri1=mgmai->get_mg_triangleid(triangle1->get_id()+decalage);
51  MG_TRIANGLE* tri2=mgmai->get_mg_triangleid(triangle2->get_id()+decalage);
52  MG_TRIANGLE* tri3=mgmai->get_mg_triangleid(triangle3->get_id()+decalage);
53  MG_TRIANGLE* tri4=mgmai->get_mg_triangleid(triangle4->get_id()+decalage);
54  MG_TETRA* tet=new MG_TETRA(this->get_id()+decalage,liaison_topologique,nd1,nd2,nd3,nd4,tri1,tri2,tri3,tri4,MAGIC::ORIGINE::DUPLIQUER);
55  mgmai->ajouter_mg_tetra(tet);
56  return tet;
57 }
58 
60 {
61  if (noeud1!=NULL) noeud1->get_lien_tetra()->supprimer(this);
62  if (noeud2!=NULL) noeud2->get_lien_tetra()->supprimer(this);
63  if (noeud3!=NULL) noeud3->get_lien_tetra()->supprimer(this);
64  if (noeud4!=NULL) noeud4->get_lien_tetra()->supprimer(this);
65  unsigned long noeudminid=std::min(noeud1->get_id(),noeud2->get_id());
66  noeudminid=std::min(noeudminid,noeud3->get_id());
67  noeudminid=std::min(noeudminid,noeud4->get_id());
68  if (noeud1!=NULL)
69  if (noeud1->get_id()==noeudminid) noeud1->get_lien_petit_tetra()->supprimer(this);
70  if (noeud2!=NULL)
71  if (noeud2->get_id()==noeudminid) noeud2->get_lien_petit_tetra()->supprimer(this);
72  if (noeud3!=NULL)
73  if (noeud3->get_id()==noeudminid) noeud3->get_lien_petit_tetra()->supprimer(this);
74  if (noeud4!=NULL)
75  if (noeud4->get_id()==noeudminid) noeud4->get_lien_petit_tetra()->supprimer(this);
76  if (triangle1!=NULL) {
79  }
80  if (triangle2!=NULL) {
83  }
84  if (triangle3!=NULL) {
87  }
88  if (triangle4!=NULL) {
91  }
92  if (liaison_topologique!=NULL)
94 }
95 
97 {
98  if (noeud1!=NULL) noeud1->get_lien_tetra()->ajouter(this);
99  if (noeud2!=NULL) noeud2->get_lien_tetra()->ajouter(this);
100  if (noeud3!=NULL) noeud3->get_lien_tetra()->ajouter(this);
101  if (noeud4!=NULL) noeud4->get_lien_tetra()->ajouter(this);
102  unsigned long noeudminid=std::min(noeud1->get_id(),noeud2->get_id());
103  noeudminid=std::min(noeudminid,noeud3->get_id());
104  noeudminid=std::min(noeudminid,noeud4->get_id());
105  if (noeud1!=NULL)
106  if (noeud1->get_id()==noeudminid) noeud1->get_lien_petit_tetra()->ajouter(this);
107  if (noeud2!=NULL)
108  if (noeud2->get_id()==noeudminid) noeud2->get_lien_petit_tetra()->ajouter(this);
109  if (noeud3!=NULL)
110  if (noeud3->get_id()==noeudminid) noeud3->get_lien_petit_tetra()->ajouter(this);
111  if (noeud4!=NULL)
112  if (noeud4->get_id()==noeudminid) noeud4->get_lien_petit_tetra()->ajouter(this);
113  if (triangle1!=NULL) {
115  triangle1->get_lien_tetra()->ajouter(this);
116  }
117  if (triangle2!=NULL) {
119  triangle2->get_lien_tetra()->ajouter(this);
120  }
121  if (triangle3!=NULL) {
123  triangle3->get_lien_tetra()->ajouter(this);
124  }
125  if (triangle4!=NULL) {
127  triangle4->get_lien_tetra()->ajouter(this);
128  }
129  if (liaison_topologique==NULL) return;
131 }
132 
133 
135 {
137 }
138 
139 
140 
141 
142 
144 {
145  return noeud1;
146 }
147 
149 {
150  return noeud2;
151 }
152 
154 {
155  return noeud3;
156 }
157 
159 {
160  return noeud4;
161 }
162 
164 {
165  return triangle1;
166 }
167 
169 {
170  return triangle2;
171 }
172 
174 {
175  return triangle3;
176 }
177 
179 {
180  return triangle4;
181 }
182 
184 {
185 MG_NOEUD* noeud=noeud4;
186 noeud4=noeud3;
187 noeud3=noeud;
188 MG_TRIANGLE* triangle=triangle1;
190 triangle2=triangle;
191 }
192 
193 
195 {
196  return 3;
197 }
198 
199 
201 {
202  double coo1[3];
203  double coo2[3];
204  double coo3[3];
205  double coo4[3];
206  coo1[0]=noeud1->get_x();
207  coo1[1]=noeud1->get_y();
208  coo1[2]=noeud1->get_z();
209  coo2[0]=noeud2->get_x();
210  coo2[1]=noeud2->get_y();
211  coo2[2]=noeud2->get_z();
212  coo3[0]=noeud3->get_x();
213  coo3[1]=noeud3->get_y();
214  coo3[2]=noeud3->get_z();
215  coo4[0]=noeud4->get_x();
216  coo4[1]=noeud4->get_y();
217  coo4[2]=noeud4->get_z();
218  double xmin,ymin,zmin,xmax,ymax,zmax;
219  xmin=std::min(coo1[0],coo2[0]);
220  xmin=std::min(xmin,coo3[0]);
221  xmin=std::min(xmin,coo4[0]);
222  xmax=std::max(coo1[0],coo2[0]);
223  xmax=std::max(xmax,coo3[0]);
224  xmax=std::max(xmax,coo4[0]);
225  ymin=std::min(coo1[1],coo2[1]);
226  ymin=std::min(ymin,coo3[1]);
227  ymin=std::min(ymin,coo4[1]);
228  ymax=std::max(coo1[1],coo2[1]);
229  ymax=std::max(ymax,coo3[1]);
230  ymax=std::max(ymax,coo4[1]);
231  zmin=std::min(coo1[2],coo2[2]);
232  zmin=std::min(zmin,coo3[2]);
233  zmin=std::min(zmin,coo4[2]);
234  zmax=std::max(coo1[2],coo2[2]);
235  zmax=std::max(zmax,coo3[2]);
236  zmax=std::max(zmax,coo4[2]);
237  BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
238  return boite;
239 }
241 {
242  for (int j=0;j<MAX_TYPE_SOLUTION;j++)
243  {
248  }
249 }
250 
251 void MG_TETRA::enregistrer(std::ostream& o,double version)
252 {
254  if (liaison_topologique==NULL) o << "%" << get_id() << "=TETRAEDRE(NULL,$" << noeud1->get_id() << ",$" << noeud2->get_id() << ",$" << noeud3->get_id() << ",$" << noeud4->get_id() << "," << origine_creation << ");" << std::endl;
255  else if (liaison_topologique->get_dimension()==3) o << "%" << get_id() << "=TETRAEDRE($"<< get_lien_topologie()->get_id() << ",$" << noeud1->get_id() << ",$" << noeud2->get_id() << ",$" << noeud3->get_id() << ",$" << noeud4->get_id() << "," << origine_creation << ");" << std::endl;
256 }
257 
258 
259 
260 
261 
262 
MG_TETRA::noeud4
class MG_NOEUD * noeud4
Definition: mg_tetra.h:72
MG_TETRA::noeud1
class MG_NOEUD * noeud1
Definition: mg_tetra.h:69
MG_MAILLAGE::ajouter_mg_tetra
MG_TETRA * ajouter_mg_tetra(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:1158
MG_ELEMENT_MAILLAGE::change_solution
virtual void change_solution(double val, int num=0)
Definition: mg_element_maillage.cpp:107
MG_TETRA::extrapoler_solution_noeud
virtual void extrapoler_solution_noeud(void)
Definition: mg_tetra.cpp:240
MG_TETRA::get_boite_3D
virtual class BOITE_3D get_boite_3D(void)
Definition: mg_tetra.cpp:200
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
gestionversion.h
MG_TETRA::noeud3
class MG_NOEUD * noeud3
Definition: mg_tetra.h:71
MG_TETRA::get_dimension
virtual int get_dimension(void)
Definition: mg_tetra.cpp:194
MG_ELEMENT_MAILLAGE::origine_creation
int origine_creation
Definition: mg_element_maillage.h:72
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
MG_TETRA::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_tetra.cpp:251
MG_TETRA::triangle4
class MG_TRIANGLE * triangle4
Definition: mg_tetra.h:77
MG_TETRA::~MG_TETRA
virtual ~MG_TETRA()
Definition: mg_tetra.cpp:59
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
TPL_SET::supprimer
void supprimer(X x)
Definition: tpl_set.h:62
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_TETRA
Definition: mg_tetra.h:37
MG_TETRA::triangle1
class MG_TRIANGLE * triangle1
Definition: mg_tetra.h:74
MG_TRIANGLE::get_lien_tetra
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_tetra(void)
Definition: mg_triangle.cpp:177
MG_TETRA::triangle3
class MG_TRIANGLE * triangle3
Definition: mg_tetra.h:76
MG_ELEMENT_TOPOLOGIQUE::get_lien_maillage
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
Definition: mg_element_topologique.cpp:62
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_ELEMENT_MAILLAGE::solution
double solution[MAX_TYPE_SOLUTION]
Definition: mg_element_maillage.h:73
MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO
static int DIMENSIONMAILLAGESANSTOPO
Definition: mg_maillage.h:177
MAGIC::TYPE_ENTITE::IDMG_TETRA
@ IDMG_TETRA
Definition: mg_definition.h:69
MG_TETRA::noeud2
class MG_NOEUD * noeud2
Definition: mg_tetra.h:70
TPL_SET::ajouter
void ajouter(X x)
Definition: tpl_set.h:55
MG_TETRA::triangle2
class MG_TRIANGLE * triangle2
Definition: mg_tetra.h:75
MG_NOEUD
Definition: mg_noeud.h:41
MAX_TYPE_SOLUTION
const int MAX_TYPE_SOLUTION
Definition: mg_definition.h:42
MG_ELEMENT_MAILLAGE::liaison_topologique
MG_ELEMENT_TOPOLOGIQUE * liaison_topologique
Definition: mg_element_maillage.h:69
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
mg_tetra.h
MG_TETRA::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_tetra.cpp:163
MAGIC::ORIGINE::DUPLIQUER
@ DUPLIQUER
Definition: mg_definition.h:79
MG_NOEUD::get_lien_tetra
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_tetra(void)
Definition: mg_noeud.cpp:175
MG_TETRA::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_tetra.cpp:168
MG_MAILLAGE::get_mg_noeudid
MG_NOEUD * get_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:451
MG_TETRA::dupliquer
virtual MG_TETRA * dupliquer(class MG_MAILLAGE *mgmai, long decalage)
Definition: mg_tetra.cpp:44
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
OT_REFERENCE::decrementer
void decrementer(void)
Definition: ot_reference.cpp:45
MG_TETRA::MG_TETRA
MG_TETRA(unsigned long num, MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, class MG_TRIANGLE *mgtriangle1, class MG_TRIANGLE *mgtriangle2, class MG_TRIANGLE *mgtriangle3, class MG_TRIANGLE *mgtriangle4, int origine)
Definition: mg_tetra.cpp:28
BOITE_3D
Definition: ot_boite_3d.h:27
mg_maillage.h
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MG_TETRA::inverse_sens
virtual void inverse_sens(void)
Definition: mg_tetra.cpp:183
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
MG_NOEUD::get_lien_petit_tetra
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_petit_tetra(void)
Definition: mg_noeud.cpp:181
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
OT_REFERENCE::incrementer
void incrementer(void)
Definition: ot_reference.cpp:40
MG_TETRA::get_type_entite
virtual int get_type_entite(void)
Definition: mg_tetra.cpp:134
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_TETRA::init_tetra
void init_tetra(void)
Definition: mg_tetra.cpp:96
MG_TETRA::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_tetra.cpp:178
MG_MAILLAGE::get_mg_triangleid
MG_TRIANGLE * get_mg_triangleid(unsigned long num)
Definition: mg_maillage.cpp:772
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
MG_TETRA::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_tetra.cpp:173
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82