17#include <Domaine_VDF.h>
26 s <<
"Aretes " << finl;
62 int f1,
int f2,
int f3,
int f4,
const ArrOfInt& est_une_plaque)
65 nb_plaques += f1>=0 ? est_une_plaque[f1] : 0;
66 nb_plaques += f2>=0 ? est_une_plaque[f2] : 0;
67 nb_plaques += f3>=0 ? est_une_plaque[f3] : 0;
68 nb_plaques += f4>=0 ? est_une_plaque[f4] : 0;
73 if (nb_plaques!=0)
return;
74 if( (f1<nb_face) || (f2<nb_face) || (f3<nb_face) || (f4<nb_face) )
81 if( (f1<nb_face) || (f2<nb_face) || (f3<nb_face) )
88 if( (f1<nb_face) && (f2<nb_face) && (f3<nb_face) && (f4<nb_face) )
94 faces_(numero_a, 0)=f1;
95 faces_(numero_a, 1)=f2;
96 faces_(numero_a, 2)=f3;
97 faces_(numero_a, 3)=f4;
99 type2_(numero_a)=type;
103 assert(faces_(numero_a, 0) !=-1);
104 assert(faces_(numero_a, 1) !=-1);
105 assert(faces_(numero_a, 2) !=-1);
106 assert(faces_(numero_a, 3) !=-1);
112 const IntTab& so = domaine.face_sommets();
113 const DoubleTab& co = domaine.domaine().les_sommets();
114 DoubleTab& xa_ = domaine.xa();
116 int f0=-1,f1=-1,s00,s01,s10,s11;
124 for(i=0; i<nb_aretes; i++)
127 if((type==2)||(type==1))
135 if((s00==s10)||(s00==s11))
137 xa_(i,0) = co(s00,0);
138 xa_(i,1) = co(s00,1);
140 else if((s01==s10)||(s01==s11))
142 xa_(i,0) = co(s01,0);
143 xa_(i,1) = co(s01,1);
147 Cerr<<
"Error: no common vertices found"<<finl;
151 else if((type == 0)||(type == -1))
170 if((s00==s10)||(s00==s11))
172 xa_(i,0) = co(s00,0);
173 xa_(i,1) = co(s00,1);
175 else if((s01==s10)||(s01==s11))
177 xa_(i,0) = co(s01,0);
178 xa_(i,1) = co(s01,1);
182 Cerr<<
"Error: no common vertices found"<<finl;
191 for(i=0; i<nb_aretes; i++)
194 if((type==2)||(type==1))
204 if(s0j==so(f1,k))
break;
210 for(j=deux; j<4; j++)
214 if(s0j==so(f1,k))
break;
219 xa_(i,0) = (co(s0,0)+co(s1,0))/2.0;
220 xa_(i,1) = (co(s0,1)+co(s1,1))/2.0;
221 xa_(i,2) = (co(s0,2)+co(s1,2))/2.0;
223 else if((type == 0)||(type == -1))
235 for(f=fdeux; f<4; f++)
244 if(s0j==so(f1,k))
break;
250 for(j=deux; j<4; j++)
254 if(s0j==so(f1,k))
break;
259 xa_(i,0) = (co(s0,0)+co(s1,0))/2.0;
260 xa_(i,1) = (co(s0,1)+co(s1,1))/2.0;
261 xa_(i,2) = (co(s0,2)+co(s1,2))/2.0;
280void Aretes::swap(
int a1,
int a2)
284 faces_(a1, 0) = faces_(a2, 0);
287 faces_(a1, 1) = faces_(a2, 1);
290 faces_(a1, 2) = faces_(a2, 2);
293 faces_(a1, 3) = faces_(a2, 3);
296 type1_(a1)=type1_(a2);
299 type2_(a1)=type2_(a2);
310 int& nb_aretes_mixte,
int& nb_aretes_interne)
313 nb_aretes_coin=nb_aretes_bord=nb_aretes_mixte=nb_aretes_interne=0;
318 int nb_aretes = type1_.
size();
321 while( (courante<nb_aretes)&&(type2_(courante)==coin) )
326 for(arete=courante; arete<nb_aretes; arete++)
328 if(type2_(arete)==coin)
330 swap(arete, courante);
331 while( (courante<nb_aretes)&&(type2_(courante)==coin) )
339 while( (courante<nb_aretes)&&(type2_(courante)==bord) )
344 for(arete=courante; arete<nb_aretes; arete++)
346 if(type2_(arete)==bord)
348 swap(arete, courante);
349 assert(type2_(courante) == bord);
350 while( (courante<nb_aretes)&&(type2_(courante)==bord) )
358 while( (courante<nb_aretes)&&(type2_(courante)==mixte) )
363 for(arete=courante; arete<nb_aretes; arete++)
365 if(type2_(arete)==mixte)
367 swap(arete, courante);
368 assert(faces_(courante, 0) !=-1);
369 assert(faces_(courante, 1) !=-1);
370 assert(faces_(courante, 2) !=-1);
371 assert(faces_(courante, 3) !=-1);
372 while( (courante<nb_aretes)&&(type2_(courante)==mixte) )
380 while( (courante<nb_aretes)&&(type2_(courante)==interne) )
385 for(arete=courante; arete<nb_aretes; arete++)
387 if(type2_(arete)==interne)
389 swap(arete, courante);
390 assert(faces_(courante, 0) !=-1);
391 assert(faces_(courante, 1) !=-1);
392 assert(faces_(courante, 2) !=-1);
393 assert(faces_(courante, 3) !=-1);
394 while( (courante<nb_aretes)&&(type2_(courante)==interne) )
405 int& nb_aretes_mixte,
int& nb_aretes_interne,
const DoubleTab&
410 int nb_aretes = type1_.size();
412 for (
int boucle=0; boucle<3; boucle++)
414 int deb=nb_aretes - nb_aretes_interne;
419 deb-=nb_aretes_mixte;
424 deb-= nb_aretes_bord;
426 for ( arete=deb; arete<fin; arete++)
428 if ((boucle==2)&&(type2_(arete)!=0))
430 Cerr<<
"gros pb "<<arete<<finl;
433 int ref=faces_(arete,0);
434 for (
int i=0; i<
dimension; i++) XVref[i]=xv(ref,i);
437 for (
int arete2=arete; arete2<fin; arete2++)
439 ref2=faces_(arete2,0);
440 for (
int i=0; i<
dimension; i++) XVref2[i]=xv(ref2,i);
445 if (sup_strict(XVref2[1],XVref[1])) test=1;
446 else if ((XVref2[1]==XVref[1])&&(sup_strict(XVref2[0],XVref[0]))) test=0;
450 if (XVref2[2]>XVref[2]) test=2;
451 else if (XVref2[2]==XVref[2])
453 if (XVref2[1]>XVref[1]) test=1;
454 else if ((XVref2[1]==XVref[1])&&(XVref2[0]>XVref[0])) test=0;
463 if (marq!=-1) swap(arete,marq);
466 for (arete=nb_aretes - nb_aretes_interne; arete<nb_aretes*0; arete++)
468 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 &)
Assigns faces f1, f2, f3, f4 to edge numero.
void calculer_centre_de_gravite(Domaine_VDF &domaine)
void dimensionner(int)
Resizes the arrays.
void trier(int &, int &, int &, int &)
Reorders the edge array: first corner edges (they have only two faces),.
Class defining operators and methods for all reading operation in an input flow (file,...
Base class for TRUST objects (Objet_U).
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
static int me()
Returns the rank of the local processor in the current communication group. See Comm_Group::rank() an...
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)