17#include <Domaine_VDF.h>
26 s <<
"Aretes " << finl;
53 int f1,
int f2,
int f3,
int f4,
const ArrOfInt& est_une_plaque)
56 nb_plaques += f1>=0 ? est_une_plaque[f1] : 0;
57 nb_plaques += f2>=0 ? est_une_plaque[f2] : 0;
58 nb_plaques += f3>=0 ? est_une_plaque[f3] : 0;
59 nb_plaques += f4>=0 ? est_une_plaque[f4] : 0;
64 if (nb_plaques!=0)
return;
65 if( (f1<nb_face) || (f2<nb_face) || (f3<nb_face) || (f4<nb_face) )
72 if( (f1<nb_face) || (f2<nb_face) || (f3<nb_face) )
79 if( (f1<nb_face) && (f2<nb_face) && (f3<nb_face) && (f4<nb_face) )
85 faces_(numero_a, 0)=f1;
86 faces_(numero_a, 1)=f2;
87 faces_(numero_a, 2)=f3;
88 faces_(numero_a, 3)=f4;
90 type2_(numero_a)=type;
94 assert(faces_(numero_a, 0) !=-1);
95 assert(faces_(numero_a, 1) !=-1);
96 assert(faces_(numero_a, 2) !=-1);
97 assert(faces_(numero_a, 3) !=-1);
103 const IntTab& so = domaine.face_sommets();
104 const DoubleTab& co = domaine.domaine().les_sommets();
105 DoubleTab& xa_ = domaine.xa();
107 int f0=-1,f1=-1,s00,s01,s10,s11;
115 for(i=0; i<nb_aretes; i++)
118 if((type==2)||(type==1))
126 if((s00==s10)||(s00==s11))
128 xa_(i,0) = co(s00,0);
129 xa_(i,1) = co(s00,1);
131 else if((s01==s10)||(s01==s11))
133 xa_(i,0) = co(s01,0);
134 xa_(i,1) = co(s01,1);
138 Cerr<<
"Erreur on a pas trouve de sommets communs"<<finl;
142 else if((type == 0)||(type == -1))
161 if((s00==s10)||(s00==s11))
163 xa_(i,0) = co(s00,0);
164 xa_(i,1) = co(s00,1);
166 else if((s01==s10)||(s01==s11))
168 xa_(i,0) = co(s01,0);
169 xa_(i,1) = co(s01,1);
173 Cerr<<
"Erreur on a pas trouve de sommets communs"<<finl;
182 for(i=0; i<nb_aretes; i++)
185 if((type==2)||(type==1))
195 if(s0j==so(f1,k))
break;
201 for(j=deux; j<4; j++)
205 if(s0j==so(f1,k))
break;
210 xa_(i,0) = (co(s0,0)+co(s1,0))/2.0;
211 xa_(i,1) = (co(s0,1)+co(s1,1))/2.0;
212 xa_(i,2) = (co(s0,2)+co(s1,2))/2.0;
214 else if((type == 0)||(type == -1))
226 for(f=fdeux; f<4; f++)
235 if(s0j==so(f1,k))
break;
241 for(j=deux; j<4; j++)
245 if(s0j==so(f1,k))
break;
250 xa_(i,0) = (co(s0,0)+co(s1,0))/2.0;
251 xa_(i,1) = (co(s0,1)+co(s1,1))/2.0;
252 xa_(i,2) = (co(s0,2)+co(s1,2))/2.0;
271void Aretes::swap(
int a1,
int a2)
275 faces_(a1, 0) = faces_(a2, 0);
278 faces_(a1, 1) = faces_(a2, 1);
281 faces_(a1, 2) = faces_(a2, 2);
284 faces_(a1, 3) = faces_(a2, 3);
287 type1_(a1)=type1_(a2);
290 type2_(a1)=type2_(a2);
301 int& nb_aretes_mixte,
int& nb_aretes_interne)
304 nb_aretes_coin=nb_aretes_bord=nb_aretes_mixte=nb_aretes_interne=0;
309 int nb_aretes = type1_.
size();
312 while( (courante<nb_aretes)&&(type2_(courante)==coin) )
317 for(arete=courante; arete<nb_aretes; arete++)
319 if(type2_(arete)==coin)
321 swap(arete, courante);
322 while( (courante<nb_aretes)&&(type2_(courante)==coin) )
330 while( (courante<nb_aretes)&&(type2_(courante)==bord) )
335 for(arete=courante; arete<nb_aretes; arete++)
337 if(type2_(arete)==bord)
339 swap(arete, courante);
340 assert(type2_(courante) == bord);
341 while( (courante<nb_aretes)&&(type2_(courante)==bord) )
349 while( (courante<nb_aretes)&&(type2_(courante)==mixte) )
354 for(arete=courante; arete<nb_aretes; arete++)
356 if(type2_(arete)==mixte)
358 swap(arete, courante);
359 assert(faces_(courante, 0) !=-1);
360 assert(faces_(courante, 1) !=-1);
361 assert(faces_(courante, 2) !=-1);
362 assert(faces_(courante, 3) !=-1);
363 while( (courante<nb_aretes)&&(type2_(courante)==mixte) )
371 while( (courante<nb_aretes)&&(type2_(courante)==interne) )
376 for(arete=courante; arete<nb_aretes; arete++)
378 if(type2_(arete)==interne)
380 swap(arete, courante);
381 assert(faces_(courante, 0) !=-1);
382 assert(faces_(courante, 1) !=-1);
383 assert(faces_(courante, 2) !=-1);
384 assert(faces_(courante, 3) !=-1);
385 while( (courante<nb_aretes)&&(type2_(courante)==interne) )
396 int& nb_aretes_mixte,
int& nb_aretes_interne,
const DoubleTab&
401 int nb_aretes = type1_.size();
403 for (
int boucle=0; boucle<3; boucle++)
405 int deb=nb_aretes - nb_aretes_interne;
410 deb-=nb_aretes_mixte;
415 deb-= nb_aretes_bord;
417 for ( arete=deb; arete<fin; arete++)
419 if ((boucle==2)&&(type2_(arete)!=0))
421 Cerr<<
"gros pb "<<arete<<finl;
424 int ref=faces_(arete,0);
425 for (
int i=0; i<
dimension; i++) XVref[i]=xv(ref,i);
428 for (
int arete2=arete; arete2<fin; arete2++)
430 ref2=faces_(arete2,0);
431 for (
int i=0; i<
dimension; i++) XVref2[i]=xv(ref2,i);
436 if (sup_strict(XVref2[1],XVref[1])) test=1;
437 else if ((XVref2[1]==XVref[1])&&(sup_strict(XVref2[0],XVref[0]))) test=0;
441 if (XVref2[2]>XVref[2]) test=2;
442 else if (XVref2[2]==XVref[2])
444 if (XVref2[1]>XVref[1]) test=1;
445 else if ((XVref2[1]==XVref[1])&&(XVref2[0]>XVref[0])) test=0;
454 if (marq!=-1) swap(arete,marq);
457 for (arete=nb_aretes - nb_aretes_interne; arete<nb_aretes*0; arete++)
459 Cerr <<
me()<<
" arete "<<arete<<
" "<< faces_(arete,0)<<
" "<< faces_(arete,1)<<
" "<< faces_(arete,2)<<
" "<< faces_(arete,3)<<finl;
void trier_pour_debog(int &, int &, int &, int &, const DoubleTab &)
void affecter(int &, int, int, int, int, int, int, int, const ArrOfInt &)
affecte a l'arete numero les faces f1, f2, f3, f4
void calculer_centre_de_gravite(Domaine_VDF &domaine)
void dimensionner(int)
Dimensionne les tableaux.
void trier(int &, int &, int &, int &)
reoordonne le tableaux des aretes avec d'abord les aretes coins (elles n'ont que deux faces)
Class defining operators and methods for all reading operation in an input flow (file,...
classe Objet_U Cette classe est la classe de base des Objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static int me()
renvoie mon rang dans le groupe de communication courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)