116 Cerr <<
"number of 3D nodes :" << nb_som3D << finl;
118 Cerr <<
"number of 3D faces of " << nom_bord <<
" :" << nb_faces3D << finl;
120 Cerr <<
"number of nodes per faces in 3D :" << nb_som_fac3D << finl;
124 for (
int_t i=0; i<nb_som3D ; i++)
127 for (
int i=0; i<nb_faces3D; i++)
128 for (
int j=0; j<nb_som_fac3D; j++)
130 int_t& tmp=renum_som3D2D[les_faces3D(i,j)];
135 int_t nb_som2D=compteur;
139 for (
int_t i=0; i<nb_som3D ; i++)
142 if((j=renum_som3D2D[i])!=-1)
145 coord_sommets2D.
resize(nb_som2D,2);
149 dom2D.
typer(
"Rectangle_2D_axi");
151 dom2D.
typer(
"Rectangle");
152 else if(dom3D.type_elem()->
que_suis_je()==
"Tetraedre")
153 dom2D.
typer(
"Triangle");
154 else if(dom3D.type_elem()->
que_suis_je()==
"Hexaedre_VEF")
155 dom2D.
typer(
"Quadrangle");
185 xa = coord_sommets3D(les_faces3D(0,0),0);
186 ya = coord_sommets3D(les_faces3D(0,0),1);
187 za = coord_sommets3D(les_faces3D(0,0),2);
189 xb = coord_sommets3D(les_faces3D(0,1),0);
190 yb = coord_sommets3D(les_faces3D(0,1),1);
191 zb = coord_sommets3D(les_faces3D(0,1),2);
193 xc = coord_sommets3D(les_faces3D(0,2),0);
194 yc = coord_sommets3D(les_faces3D(0,2),1);
195 zc = coord_sommets3D(les_faces3D(0,2),2);
201 norm = sqrt(Ix*Ix+Iy*Iy+Iz*Iz);
210 norm = sqrt(ux*ux+uy*uy+uz*uz);
217 norm = sqrt(Kx*Kx+Ky*Ky+Kz*Kz);
228 scalI = xa*Ix+ya*Iy+za*Iz;
229 scalJ = xa*Jx+ya*Jy+za*Jz;
233 for(
int_t i=0; i<nb_som2D; i++)
235 double x = coord_sommets3D(renum_som2D3D[i],0);
236 double y = coord_sommets3D(renum_som2D3D[i],1);
237 double z = coord_sommets3D(renum_som2D3D[i],2);
240 coord_sommets2D(i,0) = -scalI + x*Ix + y*Iy + z*Iz;
241 coord_sommets2D(i,1) = -scalJ + x*Jx + y*Jy + z*Jz;
247 coord_sommets2D(i,0)=x;
248 coord_sommets2D(i,1)=y;
249 coord_sommets2D(i,2)=z;
262 double precision=DMAXFLOAT;
263 for (test=2; test>-1; test--)
266 x1=coord_sommets3D(les_faces3D(0,0),test);
267 x2=coord_sommets3D(les_faces3D(0,1),test);
268 x3=coord_sommets3D(les_faces3D(0,2),test);
269 double tmp=std::fabs(x1-x2);
270 precision=(tmp<precision && tmp>0?tmp:precision);
271 tmp=std::fabs(x3-x2);
272 precision=(tmp<precision && tmp>0?tmp:precision);
273 if (est_egal(x1,x2)&&est_egal(x2,x3))
break;
277 Cerr <<
"Error into TroisDto2D_32_64.cpp..." << finl;
278 Cerr <<
"May be the " << dom2D.
le_nom() <<
" boundary domain is not plane enough" << finl;
279 Cerr <<
"Try to use: PrecisionGeom " << 100*precision <<
" in your data file" << finl;
280 Cerr <<
"Or contact TRUST support." << finl;
285 for (
int jj=0; jj<3; jj++)
291 for(
int_t i=0; i<nb_som2D; i++)
292 for(
int j=0; j<2; j++)
293 coord_sommets2D(i,j)=coord_sommets3D(renum_som2D3D[i],dir[j]);
297 les_elems2D=les_faces3D;
298 for (
int_t i=0; i< nb_faces3D; i++)
299 for (
int j=0; j< nb_som_fac3D; j++)
300 les_elems2D(i,j)=renum_som3D2D[les_elems2D(i,j)];
308 if ( (front.
le_nom()!=nom_bord))
325 aretes.
resize(nb_faces, 2);
328 for(
int_t face=0; face < nb_faces; face++)
332 for(
int i=0; i<nb_som_fac3D; i++)
334 tmpbis=renum_som3D2D[faces_sommets(face,i)];
339 aretes(compteur2,0)=tmpbis;
342 aretes(compteur2,1)=tmpbis;
351 aretes(compteur2,0)=aretes(compteur2-1,1);
352 aretes(compteur2,1)=tmpbis;
354 aretes(compteur2,0)=aretes(compteur2-1,1);
355 aretes(compteur2,1)=aretes(compteur2-2,0);
364 for (
int_t i=0; i<compteur2; i++)
366 int_t& S10=aretes(i,0);
367 int_t& S11=aretes(i,1);
368 for (
int_t j=i+1; j<compteur2; j++)
370 int_t& S20=aretes(j,0);
371 int_t& S21=aretes(j,1);
372 if ( (S10==S20 && S11==S21) || (S10==S21 && S11==S20) )
382 for (
int_t i=0; i<compteur2; i++)
385 for (
int_t j=i; j<compteur2-1; j++)
387 aretes(j,0)=aretes(j+1,0);
388 aretes(j,1)=aretes(j+1,1);
393 aretes.
resize(compteur2, 2);
394 faces_voisins.
resize(compteur2,2);
398 Cerr<<
"boundary to eliminate " << front.
le_nom()<<finl;
403 Cerr<<
"boundary maintained " << front.
le_nom()<<finl;
413 if ( (front.
le_nom()!=nom_bord))
417 bord2D.typer(itr->le_type());
418 bord2D->nommer(front.
le_nom());
421 bord2D->typer_faces(
"QUADRILATERE_2D_AXI");
423 bord2D->typer_faces(
"segment_2D");
428 IntTab_t& aretes=bord2D->les_sommets_des_faces();
429 IntTab_t& faces_voisins=bord2D->faces().voisins();
431 aretes.
resize(nb_faces, 2);
432 for(
int_t face=0; face < nb_faces; face++)
436 for(
int i=0; i<nb_som_fac3D; i++)
438 tmp=renum_som3D2D[faces_sommets(face,i)];
443 aretes(compteur2,0)=tmp;
446 aretes(compteur2,1)=tmp;
453 aretes.
resize(compteur2, 2);
454 faces_voisins.
resize(compteur2,2);
458 Cerr<<
"connector to eliminate " << front.
le_nom()<<finl;
462 Cerr<<
"connector maintained " << front.
le_nom()<<finl;
466 if(dom3D.type_elem()->
que_suis_je()!=
"Hexaedre_VEF")
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
const DoubleTab_t & coord_sommets() const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.