2 // C++ : Tests unitaires
4 // Copyright (C) 2009-2012 CEA/DEN, EDF R&D
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "test_unit.hxx"
25 #include "test_unit.hxx"
28 #include "HexDocument.hxx"
29 #include "HexElements.hxx"
30 #include "HexCrossElements.hxx"
32 #include "HexHexa.hxx"
33 #include "HexQuad.hxx"
34 #include "HexEdge.hxx"
35 #include "HexVertex.hxx"
37 #include "HexPropagation.hxx"
39 #include "HexMatrix.hxx"
40 #include "HexCramer.hxx"
41 #include "HexGroup.hxx"
46 static int nbr_vtk = 0;
47 static cpchar case_name = "hexa";
48 static Hex::Document* docu = NULL;
50 // ======================================================== print_propagations
51 void print_propagations (Hex::Document* doc)
53 int nb = doc->countPropagation ();
55 for (int nro=0 ; nro<nb ; nro++)
57 Hex::Propagation* prop = doc ->getPropagation (nro);
58 const Hex::Edges& table = prop->getEdges ();
59 printf (" ____________________________________ Prop nro %d\n", nro);
60 for (int ned=0 ; ned<(int)table.size() ; ned++)
62 bool way = table [ned]->getWay ();
63 Hex::Edge* edge = table [ned];
64 Hex::Vertex* v0 = edge->getVertex (0);
65 Hex::Vertex* v1 = edge->getVertex (1);
71 v1->printName (")\n");
76 v0->printName (")\n");
82 // ======================================================== save_vtk
88 docu->saveVtk (case_name, nbr_vtk);
90 // ======================================================== remove_hexa
91 void remove_hexa (Hex::Hexa* hexa)
101 docu->saveVtk (case_name, nbr_vtk);
103 // ======================================================== test_sphere
104 int test_sphere (int nbargs, cpchar tabargs[])
107 Hex::Document* doc = mon_ex.addDocument ();
108 Hex::Vertex* orig = doc->addVertex (0,0,0);
113 Hex::Elements* sphere = doc->makeSpherical (orig, rayon, ncouches, k);
117 for (int nc=0 ; nc <= ncouches ; nc++)
119 Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
123 // sphere->getStrate (nc, Hex::Q_A)->remove ();
124 // sphere->getStrate (nc, Hex::Q_B)->remove ();
128 sphere->saveVtk ("sphere.vtk");
131 // ======================================================== test_cartesi1
134 const int size_x = 15;
135 const int size_y = 12;
136 const int size_z = 8;
139 Hex::Document* doc = mon_ex.addDocument ();
140 Hex::Vertex* orig = doc->addVertex (0,0,0);
142 Hex::Vector* dir = doc->addVector (1,1,1);
143 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
145 // print_propagations (doc);
147 for (int nz=0; nz<size_z ; nz++)
148 for (int ny=nz+1; ny<size_y-nz-1 ; ny++)
149 for (int nx=nz+1; nx<size_x-nz-1 ; nx++)
151 Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
156 print_propagations (doc);
157 grid->saveVtk ("grid_cart.vtk");
162 // ======================================================== afficher
163 #define Afficher(elt) afficher (#elt, elt)
164 int afficher (cpchar nom, Hex::EltBase* elt)
168 printf (" .... %s = 0x0\n", nom);
172 printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
175 // ======================================================== test_find
178 const int size_x = 2;
179 const int size_y = 2;
180 const int size_z = 2;
183 Hex::Document* doc = mon_ex.addDocument ();
185 Hex::Vertex* orig = doc->addVertex (0,0,0);
186 Hex::Vector* dir = doc->addVector (1,1,1);
187 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
189 grid->saveVtk ("mini1.vtk");
192 Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
194 Afficher ( v00 = doc->findVertex (0, 0, 0));
195 Afficher ( v02 = doc->findVertex (1, 1, 0));
196 Afficher ( v06 = doc->findVertex (1, 1, 1));
197 Afficher ( v08 = doc->findVertex (2, 1, 0));
198 Afficher ( v10 = doc->findVertex (2, 1, 1));
199 Afficher ( v22 = doc->findVertex (2, 1, 2));
200 Afficher ( v26 = doc->findVertex (2, 2, 2));
204 Afficher (doc->findEdge (v06, v10));
205 Afficher (doc->findEdge (v10, v06));
208 Afficher (doc->findQuad (v02, v10));
209 Afficher (doc->findQuad (v06, v08));
210 Afficher (doc->findQuad (v02, v06));
213 Afficher (doc->findHexa (v00, v06));
214 Afficher (doc->findHexa (v06, v26));
215 Afficher (doc->findHexa (v26, v06));
219 // ======================================================== test_joint
220 int test_joint (int nbargs, cpchar tabargs[])
227 Hex::Document* doc = mon_ex.addDocument ();
229 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
230 Hex::Vector* dir = doc->addVector (1,1,1);
232 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
234 Hex::Vertex* orig2 = doc->addVertex (dimx/2.0,0,8);
235 Hex::Vector* vectj = doc->addVector (0,1,0);
236 Hex::Vector* vecti = doc->addVector (1,0,0);
237 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vecti, vectj,
238 1, 180, 1, dimz,dimy,dimx);
242 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
243 Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my);
245 Hex::Vertex* v1 = prems->getVertex (0);
246 Hex::Vertex* v3 = prems->getVertex (1);
248 Hex::Vertex* v2 = cible->getVertex (1);
249 Hex::Vertex* v4 = cible->getVertex (2);
251 // v1->setScalar (3);
252 // v2->setScalar (3);
253 // v3->setScalar (6);
254 // v4->setScalar (6);
258 liste.push_back (prems);
259 for (int nx=0; nx<dimx; nx++)
261 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
263 for (int ny=0; ny<dimy; ny++)
265 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
267 doc->saveVtk ("joint1.vtk");
268 const int hauteur = 5;
269 Hex::Elements* joint = doc->joinQuads(liste, cible, v1,v2,v3,v4, hauteur);
270 // for (int nh=0 ; nh<hauteur ; nh++) joint->getHexa(nh)->setScalar (5);
272 int nbr_joint_vertex = joint->countVertex ();
273 int nbr_surf_vertex = nbr_joint_vertex/(hauteur+1);
275 HexDisplay (nbr_joint_vertex);
276 HexDisplay (nbr_surf_vertex);
278 int indice0 = joint->findVertex (v1);
279 HexDisplay (indice0);
281 for (int nh=0 ; nh<nbr_surf_vertex ; nh++)
282 joint->getVertex(nh)->setScalar (5);
284 for (int nh=0 ; nh<=hauteur ; nh++)
285 joint->getVertex(nh*nbr_surf_vertex)->setScalar (3);
287 doc->saveVtk ("joint2.vtk");
290 // ======================================================== test_prism
291 int test_prism (int nbargs, cpchar tabargs[])
298 Hex::Document* doc = mon_ex.addDocument ();
300 Hex::Vertex* orig1 = doc->addVertex ( 0,0,0);
301 Hex::Vector* dir1 = doc->addVector ( 1,1,1);
302 Hex::Vector* dir2 = doc->addVector ( 1,1,-1);
304 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir1, dimx,dimy,dimz);
308 Hex::Quads liste1, liste2;
310 liste1.push_back (grid1->getQuadIJ (mx, my, dimz));
311 liste2.push_back (grid1->getQuadIJ (mx, my, 0));
312 for (int nx=0; nx<dimx; nx++)
315 liste1.push_back (grid1->getQuadIJ (nx, my, dimz));
316 liste2.push_back (grid1->getQuadIJ (nx, my, 0));
319 for (int ny=0; ny<dimy; ny++)
322 liste1.push_back (grid1->getQuadIJ (mx, ny, dimz));
323 liste2.push_back (grid1->getQuadIJ (mx, ny, 0));
326 Hex::RealVector tlen;
328 for (int nro=0; nro<5; nro++)
334 const int nbiter = 5;
335 doc->saveVtk ("prisme1.vtk");
336 Hex::Elements* prisme2 = doc->prismQuads (liste2, dir2, nbiter);
337 doc->saveVtk ("prisme2.vtk");
339 Hex::Elements* prisme1 = doc->prismQuadsVec (liste1, dir1, tlen, 0);
341 PutData (liste1.size());
342 PutData (tlen.size());
343 PutData (prisme1->countHexa());
344 PutData (prisme1->countQuad());
345 PutData (prisme1->countEdge());
346 PutData (prisme1->countVertex());
348 for (int nro=0 ; nro <nbiter ; nro++)
350 Hex::Hexa* cell = prisme2-> getHexa (nbiter+nro);
354 doc->saveVtk ("prisme3.vtk");
357 // ======================================================== test_revolution9
358 int test_revolution9 (int nbargs, cpchar tabargs[])
365 Hex::Document* doc = mon_ex.addDocument ();
367 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
368 Hex::Vector* dir = doc->addVector (1,1,1);
370 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
374 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
377 liste.push_back (prems);
378 prems -> setScalar (5);
379 for (int nx=0; nx<dimx; nx++)
382 Hex::Quad* cell = grid1->getQuadIJ (nx, my, dimz);
383 liste.push_back (cell);
384 cell -> setScalar (5);
387 for (int ny=0; ny<dimy; ny++)
390 Hex::Quad* cell = grid1->getQuadIJ (mx, ny, dimz);
391 liste.push_back (cell);
392 cell -> setScalar (5);
395 Hex::Vertex* center = doc->addVertex (0, -10, 0);
396 Hex::Vector* axis = doc->addVector (1, 0, 0);
397 Hex::RealVector angles;
399 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
400 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
401 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
404 doc->saveVtk ("revolution1.vtk");
409 for (int na=0 ; na<niter ; na++)
411 angles.push_back (alpha);
414 for (int na=1 ; na<niter ; na++)
417 angles.push_back (alpha);
420 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
422 doc->saveVtk ("revolution2.vtk");
426 // ======================================================== test_revolution
427 int test_revolution (int nbargs, cpchar tabargs[])
430 Hex::Document* doc = mon_ex.addDocument ();
432 Hex::Vertex* ori = doc->addVertex (0,0,0);
433 Hex::Vector* vx = doc->addVector (1,0,0);
434 Hex::Vector* vz = doc->addVector (0,0,1);
444 Hex::Elements* grid = doc->makeCylindrical (ori, vx,vz, dr,da,dl,
448 for (int nx=0; nx<nr; nx++)
449 for (int ny=0; ny<na; ny++)
451 Hex::Quad* cell = grid->getQuadIJ (nx, ny, nl);
452 liste.push_back (cell);
453 cell -> setScalar (5);
456 Hex::Vertex* center = doc->addVertex (0, -10, 0);
457 Hex::Vector* axis = doc->addVector (1, 0, 0);
458 Hex::RealVector angles;
460 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
461 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
462 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
465 doc->saveVtk ("revolution1.vtk");
470 for (int na=0 ; na<niter ; na++)
472 angles.push_back (alpha);
475 for (int na=1 ; na<niter ; na++)
478 angles.push_back (alpha);
481 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
483 doc->saveVtk ("revolution2.vtk");
487 // ======================================================== test_coude
488 int test_coude (int nbargs, cpchar tabargs[])
496 Hex::Document* doc = mon_ex.addDocument ();
498 Hex::Vertex* orig = doc->addVertex (0,0,0);
499 Hex::Vector* vx = doc->addVector (1,0,0);
500 Hex::Vector* vz = doc->addVector (0,0,1);
502 // grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
508 Hex::Elements* grid1 = doc->makeCylindrical (orig1, vx,vz,dr,360, dl,
512 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
515 liste.push_back (prems);
516 prems -> setScalar (5);
517 for (int nx=0; nx<dimx; nx++)
520 Hex::Quad* cell = grid1->getQuadIJ (nx, my, dimz);
521 liste.push_back (cell);
522 cell -> setScalar (5);
525 for (int ny=0; ny<dimy; ny++)
528 Hex::Quad* cell = grid1->getQuadIJ (mx, ny, dimz);
529 liste.push_back (cell);
530 cell -> setScalar (5);
534 Hex::Vertex* center = doc->addVertex (0, -10, 0);
535 Hex::Vector* axis = doc->addVector (1, 0, 0);
536 Hex::RealVector angles;
538 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
539 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
540 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
543 doc->saveVtk ("revolution1.vtk");
548 for (int na=0 ; na<niter ; na++)
550 angles.push_back (alpha);
553 for (int na=1 ; na<niter ; na++)
556 angles.push_back (alpha);
559 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
561 doc->saveVtk ("revolution2.vtk");
565 // ======================================================== test_count
566 int test_count (int nbargs, cpchar tabargs[])
569 Hex::Document* doc = mon_ex.addDocument ();
571 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
572 Hex::Vector* vx = doc->addVector (1,0,0);
573 Hex::Vector* vz = doc->addVector (0,0,1);
582 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 360, dl,nr, 10, nl, false);
584 HexDisplay (doc->countVertex ());
585 HexDisplay (doc->countUsedVertex ());
586 doc ->saveVtk ("hexa1.vtk");
590 // ======================================================== test_decoupage
591 int test_decoupage (int nbargs, cpchar tabargs[])
593 const int size_x = 2;
594 const int size_y = 1;
595 const int size_z = 1;
598 Hex::Document* doc = mon_ex.addDocument ();
600 Hex::Vertex* orig = doc->addVertex (0,0,0);
601 Hex::Vector* dir = doc->addVector (1,1,1);
603 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
604 Hex::Edge* arete = grid->getEdgeK (0, 0, 0);
608 doc ->saveVtk ("decoupe", nvtk);
609 /* Hex::Elements* grid2 = */ doc->cut (arete, 1);
612 doc ->saveVtk ("decoupe", nvtk);
616 // ======================================================== test_gen_xml
617 int test_gen_xml (int nbargs, cpchar tabargs[])
619 const int size_x = 2;
620 const int size_y = 2;
621 const int size_z = 2;
624 Hex::Document* doc = mon_ex.addDocument ();
626 Hex::Vertex* orig = doc->addVertex (0,0,0);
627 Hex::Vector* dir = doc->addVector (1,1,1);
628 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
630 Hex::Hexa* cell = grid->getHexa (0);
631 Hex::Quad* face = cell->getQuad (0);
632 Hex::Edge* arete = cell->getEdge (0);
633 Hex::Vertex* noeud = cell->getVertex (0);
635 Hex::Law* law1 = doc->addLaw("loi1", 1);
636 Hex::Law* law2 = doc->addLaw("loi2", 2);
637 Hex::Law* law3 = doc->addLaw("loi3", 3);
639 law1->setKind (Hex::Uniform);
640 law2->setKind (Hex::Arithmetic);
641 law3->setKind (Hex::Geometric);
643 Hex::Propagation* prop1 = doc->getPropagation (0);
644 Hex::Propagation* prop2 = doc->getPropagation (1);
645 Hex::Propagation* prop3 = doc->getPropagation (2);
647 prop1->setLaw (law1);
648 prop2->setLaw (law2);
649 prop3->setLaw (law3);
651 prop1->setWay (true);
652 prop2->setWay (false);
653 prop3->setWay (true);
655 doc ->saveVtk ("mini.vtk");
656 doc ->save ("Essai");
660 // ======================================================== test_string_xml
661 int test_string_xml (int nbargs, cpchar tabargs[])
663 const int size_x = 2;
664 const int size_y = 2;
665 const int size_z = 2;
668 Hex::Document* doc = mon_ex.addDocument ();
670 Hex::Vertex* orig = doc->addVertex (0,0,0);
671 Hex::Vector* dir = doc->addVector (1,1,1);
672 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
674 Hex::Hexa* cell = grid->getHexa (0);
675 Hex::Quad* face = cell->getQuad (0);
676 Hex::Edge* arete = cell->getEdge (0);
677 Hex::Vertex* noeud = cell->getVertex (0);
679 Hex::Law* law1 = doc->addLaw("loi1", 1);
680 Hex::Law* law2 = doc->addLaw("loi2", 2);
681 Hex::Law* law3 = doc->addLaw("loi3", 3);
683 law1->setKind (Hex::Uniform);
684 law2->setKind (Hex::Arithmetic);
685 law3->setKind (Hex::Geometric);
687 Hex::Propagation* prop1 = doc->getPropagation (0);
688 Hex::Propagation* prop2 = doc->getPropagation (1);
689 Hex::Propagation* prop3 = doc->getPropagation (2);
691 prop1->setLaw (law1);
692 prop2->setLaw (law2);
693 prop3->setLaw (law3);
695 prop1->setWay (true);
696 prop2->setWay (false);
697 prop3->setWay (true);
699 doc ->saveVtk ("mini.vtk");
700 doc ->save ("Essai");
702 cpchar flux = doc ->getXml ();
703 Hex::Document* docbis = mon_ex.addDocument ();
704 docbis->setXml (flux);
705 docbis->saveVtk ("clone.vtk");
709 // ======================================================== test_relecture
710 int test_relecture (int nbargs, cpchar tabargs[])
713 cpchar nomdoc = "Essai";
716 Hex::Document* doc = mon_ex.loadDocument (nomdoc);
718 /*********************
719 Hex::Vertex* v4 = doc->findVertex (80.0, 0.0, 0.0);
720 Hex::Vertex* v5 = doc->findVertex (80.0, 0.0, 40.0);
721 Hex::Edge* e4 = doc->findEdge (v4, v5);
728 ***********************/
731 doc ->saveVtk ("restore.vtk");
732 doc ->save ("restore");
734 // doc ->reorderFaces ();
737 // Hex::Elements* grid2 = doc->cut (e4, 2);
740 // ======================================================== test_clone
743 const int size_x = 2;
744 const int size_y = 2;
745 const int size_z = 2;
748 Hex::Document* doc = mon_ex.addDocument ();
750 Hex::Vertex* orig = doc->addVertex (0,0,0);
751 Hex::Vector* dir = doc->addVector (1,1,1);
752 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
754 Hex::Vector* bond = doc->addVector (0, 0, 7);
755 Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
757 doc ->saveVtk ("clonage.vtk");
760 HexDump (grid2->getHexa (1));
761 HexDump (grid2->getHexaIJK (1,1,1));
762 HexDump (grid2->getVertexIJK (1,1,1));
766 // ======================================================== test_separ
769 const int size_x = 2;
770 const int size_y = 2;
771 const int size_z = 2;
774 Hex::Document* doc = mon_ex.addDocument ();
776 Hex::Vertex* orig = doc->addVertex (0,0,0);
777 Hex::Vector* dir = doc->addVector (1,1,1);
778 // Hex::Elements* grid =
779 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
781 doc ->saveVtk ("separ.vtk");
786 // ======================================================== test_shperical
787 int test_spherical (int nbargs, const char* tabargs[])
790 Hex::Document* doc = mon_ex.addDocument ();
792 Hex::Vertex* orig = doc->addVertex (0,0,0);
796 Hex::Elements* grid = doc->makeSpherical (orig, rayon, nbr);
798 int nbhexas = grid->countHexa ();
799 HexDisplay (nbhexas);
800 for (int nro=0 ; nro<nbhexas ; nro +=3)
801 grid->getHexa(nro)->remove();
802 HexDisplay (doc->countHexa ());
803 doc->saveVtk ("shperical.vtk");
808 // ================================================== test_grille_cyl
809 int test_grille_cyl (int nbargs, cpchar tabargs[])
812 Hex::Document* doc = mon_ex.addDocument ();
814 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
815 Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
817 Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
818 Hex::Vertex* orig4 = doc->addVertex (10,10,0);
820 Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
821 Hex::Vertex* orig6 = doc->addVertex (10,20,0);
823 Hex::Vector* vz = doc->addVector (0,0,1);
824 Hex::Vector* vx = doc->addVector (1,0,0);
831 Hex::Elements *c1, *c2, *c3, *c4, *c5, *c6;
833 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 360, dl,nr, 4, nl, true);
834 c2 = doc->makeCylindrical (orig2, vx,vz,dr, 360, dl,nr, 8, nl, true);
835 c3 = doc->makeCylindrical (orig3, vx,vz,dr, 270, dl,nr, 8, nl, true);
836 c4 = doc->makeCylindrical (orig4, vx,vz,dr, 270, dl,nr, 7, nl, true);
837 c5 = doc->makeCylindrical (orig5, vx,vz,dr, 360, dl,nr, 5, nl, true);
838 c6 = doc->makeCylindrical (orig6, vx,vz,dr, 360, dl,nr, 6, nl, true);
841 c2->getHexa(base2 + 0)->setScalar (5);
842 c2->getHexa(base2 + 1)->setScalar (5);
843 c2->getHexa(base2 + 2)->setScalar (5);
845 doc->saveVtk ("cylindres.vtk");
850 // ===================================================== test_cylindrical
851 int test_cylindrical (int nbargs, cpchar tabargs[])
853 cpchar fic_vtk = "cylindre";
856 Hex::Document* doc = mon_ex.addDocument ();
858 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
859 Hex::Vector* vx = doc->addVector (1, 0, 0);
860 Hex::Vector* vz = doc->addVector (0, 0, 1);
872 na = atoi (tabargs[1]);
880 da = atof (tabargs[2]);
884 // Hex::Cylinder* cyl = doc->addCylinder (orig, vz, nr, nl);
885 // Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
886 doc->makeCylindrical (orig,vx, vz, dr,da,dl, nr,na, nl, true);
887 doc ->saveVtk (fic_vtk, na);
890 // ===================================================== test_cylinder
891 int test_cylinder (int nbargs, cpchar tabargs[])
894 cpchar fic_vtk = "cylindre";
897 Hex::Document* doc = mon_ex.addDocument ();
899 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
900 Hex::Vector* vx = doc->addVector (1, 0, 0);
901 Hex::Vector* vz = doc->addVector (0, 0, 1);
910 Hex::Cylinder* cyl = doc->addCylinder (orig, vz, rayon, hauteur);
911 doc->makeCylinder (cyl, vx, nr, na, nl);
912 doc ->saveVtk (fic_vtk, nvtk);
915 // ===================================================== test_xml_cylinder
916 int test_xml_cylinder (int nbargs, cpchar tabargs[])
919 cpchar fic_vtk = "cylindre";
922 Hex::Document* doc = mon_ex.addDocument ();
924 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
925 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
926 Hex::Vector* vz = doc->addVector (0,0,1);
927 Hex::Vector* vx = doc->addVector (1,0,0);
931 orig1->setName ("orig1");
932 orig2->setName ("orig2");
940 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
941 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
943 Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
944 doc ->saveVtk (fic_vtk, nvtk);
946 Hex::Group* groupe = doc->addGroup ("GroupeAMA", Hex::HexaCell);
947 groupe->addElement (grid->getHexaIJK (0,0,0));
948 groupe->addElement (grid->getHexaIJK (1,0,0));
949 groupe->addElement (grid->getHexaIJK (0,1,0));
950 groupe->addElement (grid->getHexaIJK (1,1,0));
951 groupe->addElement (grid->getHexaIJK (2,1,0));
953 grid->getHexaIJK (0,0,0)->setName ("Hexa0");
954 grid->getQuadIJ (0,0,0)->setName ("QuadIJ0");
955 grid->getEdgeK (0,0,0)->setName ("EdgeK0");
957 doc->makePipe (pipe, vx, nr, na, nl);
958 doc ->saveVtk (fic_vtk, nvtk);
959 doc->save ("cylindre");
963 // ===================================================== test_pipe
964 int test_pipe (int nbargs, cpchar tabargs[])
967 cpchar fic_vtk = "cylindre";
970 Hex::Document* doc = mon_ex.addDocument ();
972 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
973 Hex::Vector* vx = doc->addVector (1,0,0);
974 Hex::Vector* vy = doc->addVector (0,1,0);
982 Hex::Pipe* pipe = doc->addPipe (orig1, vx, nri, nre, nl);
983 doc->makePipe (pipe, vy, nr, na, nl);
984 doc ->saveVtk (fic_vtk, nvtk);
988 // ======================================================== del_hexa
989 void del_hexa (Hex::CrossElements* gr, int cyl, int ni, int nj, int nk, int dr)
991 Hex::Hexa* hexa = gr->getHexaIJK (cyl, ni, nj, nk);
999 // ======================================================== del_tranche
1000 int del_tranche (Hex::CrossElements* grid, int cyl, int ni, int nk, int dr=1)
1002 for (int nj = 0 ; nj < 8 ; nj++)
1003 del_hexa (grid, cyl, ni, nj, nk, dr);
1007 printf ("del_tranche (g=%d, i=%d, k=%d) : fic = %d\n",
1008 cyl, ni, nk, nbr_vtk-1);
1011 // ======================================================== test_joint2
1012 int test_joint2 (int nbargs, cpchar tabargs[])
1015 docu = mon_ex.addDocument ();
1016 case_name = "pb_joint";
1018 Hex::Vector* vx = docu->addVector (1, 0, 0);
1019 Hex::Vector* vz = docu->addVector (0, 0, 1);
1020 Hex::Vertex* hori = docu->addVertex (0, 0, 0);
1030 Hex::Elements *bgrid=NULL, *hgrid=NULL;
1032 hgrid = docu->makeCylindrical (hori, vx,vz, dr,da,dl, nr,na,nl, fill);
1036 Hex::Vertex* bori = docu->addVertex (0, 0, -5);
1037 bgrid = docu->makeCylindrical (bori, vx,vz, dr,da,dl, nr,na,nl, fill);
1040 Hex::Quads qsource, qdest;
1041 printf (" Source = ");
1042 for (int ny=0 ; ny< na ; ny++)
1044 Hex::Quad* quad = hgrid->getQuadIJ (0, ny, 0);
1046 qsource.push_back (quad);
1049 for (int ny=0 ; ny<4 ; ny++)
1051 Hex::Quad* quad = hgrid->getKerHQuad (ny);
1053 qsource.push_back (quad);
1058 printf (" Cible = ");
1059 for (int ny=0 ; ny< na ; ny++)
1061 Hex::Quad* quad = bgrid->getQuadIJ (0, ny, 1);
1063 qdest.push_back (quad);
1066 for (int ny=0 ; ny<4 ; ny++)
1068 Hex::Quad* quad = bgrid->getKerHQuad (ny+4);
1070 qdest.push_back (quad);
1073 docu ->setLevel (1);
1074 Hex::Quad* cible = bgrid->getQuadIJ (0, 1, 1);
1075 Hex::Vertex* vc1 = bgrid->getVertexIJK (0, 1, 1);
1076 Hex::Vertex* vc2 = bgrid->getVertexIJK (1, 1, 1);
1078 Hex::Vertex* vs1 = hgrid->getVertexIJK (0, 0, 0);
1079 Hex::Vertex* vs2 = hgrid->getVertexIJK (1, 0, 0);
1081 docu->joinQuads (qsource, cible, vs1, vc1, vs2, vc2, 1);
1086 // ======================================================== test_croix
1087 int test_croix (int nbargs, cpchar tabargs[])
1090 docu = mon_ex.addDocument ();
1092 Hex::Vertex* ori1 = docu->addVertex ( 0,0,0);
1093 Hex::Vertex* ori2 = docu->addVertex (-5,0,5);
1094 Hex::Vector* vz = docu->addVector ( 0,0,1);
1095 Hex::Vector* vx = docu->addVector ( 1,0,0);
1102 Hex::Cylinder* cyl1 = docu->addCylinder (ori1, vz, r1, l1);
1103 Hex::Cylinder* cyl2 = docu->addCylinder (ori2, vx, r2, l2);
1104 Hex::CrossElements* grid = docu->makeCylinders (cyl1, cyl2);
1106 case_name = "croix";
1109 del_tranche (grid, 0, 1, 0);
1110 del_tranche (grid, 0, 1, 5);
1112 del_tranche (grid, 1, 1, 0);
1113 del_tranche (grid, 1, 1, 3);
1115 del_tranche (grid, 1, 0, 0);
1116 del_tranche (grid, 1, 0, 3);
1118 del_tranche (grid, 0, 0, 0);
1119 del_tranche (grid, 0, 0, 5);
1120 del_tranche (grid, 0, 0, 1);
1121 del_tranche (grid, 0, 0, 2);
1122 del_tranche (grid, 0, 0, 3);
1123 del_tranche (grid, 0, 0, 4);
1126 del_tranche (grid, 1, 1, 1, 2);
1128 del_tranche (grid, 0, 1, 1, 2);
1129 del_tranche (grid, 0, 1, 4, 2);
1130 del_tranche (grid, 0, 1, 3, 2);
1131 del_tranche (grid, 0, 1, 2, 2);
1133 del_tranche (grid, 1, 1, 2, 2);
1136 // ======================================================== test_pipes
1137 int test_pipes (int nbargs, cpchar tabargs[])
1140 Hex::Document* doc = mon_ex.addDocument ();
1142 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1143 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1144 Hex::Vector* vz = doc->addVector ( 0,0,1);
1145 Hex::Vector* vx = doc->addVector ( 1,0,0);
1147 // double h1 = 5, ri1 = 1, re1 = 2;
1148 double h1 = 10, ri1 = 1, re1 = 2;
1149 double h2 = 10, ri2 = 2, re2 = 3;
1151 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
1152 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
1153 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
1159 del_tranche (grid, 0, 1, 0);
1160 del_tranche (grid, 0, 1, 5);
1162 del_tranche (grid, 1, 1, 0);
1163 del_tranche (grid, 1, 1, 3);
1166 del_tranche (grid, 1, 1, 1, 2);
1168 del_tranche (grid, 0, 1, 1, 2);
1169 del_tranche (grid, 0, 1, 4, 2);
1170 del_tranche (grid, 0, 1, 3, 2);
1171 del_tranche (grid, 0, 1, 2, 2);
1173 del_tranche (grid, 1, 1, 2, 2);
1174 /* ***************************************************
1176 int nbz [2] = { 8, 4 };
1178 for (int cyl = 0 ; cyl < 2 ; cyl++)
1179 for (int nk = 0 ; nk < nbz[cyl] ; nk++)
1180 for (int nj = 0 ; nj < 4 ; nj++)
1183 if (cyl==0) jj = (jj+6) MODULO 8 ;
1184 Hex::Hexa* hexa = grid->getHexaIJK (cyl, ni, jj, nk);
1188 doc->saveVtk (case_name, nbr_vtk);
1191 *************************************************** */
1194 // ======================================================== test_lorraine
1195 int test_lorraine(int nbargs, cpchar tabargs[])
1198 Hex::Document* doc = mon_ex.addDocument ();
1200 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1201 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1202 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
1203 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
1205 Hex::Vector* vz = doc->addVector ( 0,0,1);
1206 Hex::Vector* vx = doc->addVector ( 1,0,0);
1215 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
1216 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
1218 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
1219 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
1221 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
1222 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
1224 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
1225 const int nx_int = 0;
1226 const int nx_ext = 1;
1228 // vc2 = grid1->getVertexIJK (Hex::CylBig, 0,0,0);
1229 // vc3 = grid2->getVertexIJK (Hex::CylSmall, 0,0,0);
1231 Hex::Quad* qb = grid1-> getQuadIJ (Hex::CylBig, nx_ext, Hex::S_E, 4);
1232 Hex::Quad* qh = grid2-> getQuadIJ (Hex::CylSmall, nx_ext, Hex::S_N, 0);
1234 Hex::Vertex* vb0 = qb->getVertex (3);
1235 Hex::Vertex* vb1 = qb->getVertex (2);
1236 Hex::Vertex* vh0 = qh->getVertex (0);
1237 Hex::Vertex* vh1 = qh->getVertex (1);
1239 vb0 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_E, 4); // cible
1240 vb1 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_NE, 4);
1241 vh0 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_N, 0); // depart
1242 vh1 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_NW, 0);
1253 hliste.push_back (qh);
1254 for (int ny=1; ny<Hex::S_MAXI; ny++)
1256 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
1257 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_ext, ns, 0));
1260 for (int ny=0; ny<4 ; ny++)
1261 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_int, ny, 0));
1264 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, hauteur);
1265 doc->saveVtk ("lorraine.vtk");
1270 // ======================================================== test_disconnect2
1271 // === Disconnect Edge seul
1272 int test_disconnect2 (int nbargs, cpchar tabargs[])
1274 const int size_x = 2;
1275 const int size_y = 2;
1276 const int size_z = 1;
1279 Hex::Document* doc = mon_ex.addDocument ();
1281 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1282 Hex::Vector* dir = doc->addVector (1,1,1);
1283 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1289 Hex::Matrix matrice;
1290 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1291 matrice.defTranslation (ecart);
1293 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1294 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1296 hexa2->setScalar (2);
1297 edge->setScalar (5);
1299 doc->saveVtk ("test_disco", nvtk);
1303 Hex::Elements* disco_edges = doc->disconnectEdge (hexa2, edge);
1304 HexDisplay (disco_edges->countVertex());
1305 HexDisplay (disco_edges->countEdge());
1306 HexDisplay (disco_edges->countQuad());
1307 HexDisplay (disco_edges->countHexa());
1309 // hexa2->transform (&matrice);
1310 /**********************************
1311 for (int ns=0; ns<disco_edges->countVertex(); ns++)
1313 Hex::Vertex* sommet = disco_edges->getVertex(ns);
1314 sommet->setX (sommet->getX()+0.5);
1315 sommet->setY (sommet->getY()+0.5);
1317 ********************************* */
1319 doc->saveVtk ("test_disco", nvtk);
1320 doc->save ("test_disco");
1327 // ======================================================== test_disconnect4
1328 // === Disconnect Edges
1329 int test_disconnect4 (int nbargs, cpchar tabargs[])
1331 const int size_x = 2;
1332 const int size_y = 2;
1333 const int size_z = 5;
1336 Hex::Document* doc = mon_ex.addDocument ();
1338 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1339 Hex::Vector* dir = doc->addVector (1,1,1);
1340 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1349 for (int nk=0 ; nk< size_z; nk++)
1351 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,nk);
1352 Hex::Edge* edge = grid2->getEdgeK (1,2,nk);
1354 hexa2->setScalar (2);
1355 edge->setScalar (5);
1356 t_hexas.push_back (hexa2);
1357 t_edges.push_back (edge);
1363 doc->saveVtk ("test_disco", nvtk);
1364 Hex::Elements* disco_edges = doc->disconnectEdges (t_hexas, t_edges);
1365 doc->saveVtk ("test_disco", nvtk);
1367 // hexa2->dumpFull ();
1372 // ======================================================== test_disconnect
1373 // ==== Disconnect Quad
1374 int test_disconnect1 (int nbargs, cpchar tabargs[])
1376 const int size_x = 2;
1377 const int size_y = 2;
1378 const int size_z = 1;
1381 Hex::Document* doc = mon_ex.addDocument ();
1383 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1384 Hex::Vector* dir = doc->addVector (1,1,1);
1385 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1389 Hex::Matrix matrice;
1390 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1391 matrice.defTranslation (ecart);
1393 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1394 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1396 quad->setScalar (5);
1398 doc->saveVtk ("test_disco", nvtk);
1399 doc->disconnectQuad (hexa1, quad);
1400 // hexa1 ->transform (&matrice);
1401 doc->saveVtk ("test_disco", nvtk);
1403 // doc->dumpPropagation ();
1406 doc->save ("disco_all");
1409 // ======================================================== test_disconnect3
1410 // ==== disconnectVertex
1411 int test_disconnect3 (int nbargs, cpchar tabargs[])
1413 const int size_x = 2;
1414 const int size_y = 2;
1415 const int size_z = 1;
1418 Hex::Document* doc = mon_ex.addDocument ();
1420 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1422 Hex::Vector* dir = doc->addVector (1,1,1);
1423 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1427 Hex::Matrix matrice;
1428 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1429 matrice.defTranslation (ecart);
1431 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1432 Hex::Vertex* vertex = grid1->getVertexIJK (1,1,1);
1434 vertex->setScalar (5);
1436 doc->saveVtk ("test_disco", nvtk);
1438 doc->disconnectVertex (hexa1, vertex);
1439 // hexa1->transform (&matrice);
1440 doc->saveVtk ("test_disco", nvtk);
1442 // doc->dumpPropagation ();
1445 doc->save ("disco_all");
1448 // ======================================================== contraction
1449 void contraction (Hex::Hexa* hexa, Hex::Elements* grid)
1452 Hex::Real3 cg = { 0, 0, 0 };
1454 for (int nro=0; nro<Hex::HV_MAXI ; nro++)
1456 cg [0] += hexa->getVertex(nro)->getX()/Hex::HV_MAXI;
1457 cg [1] += hexa->getVertex(nro)->getY()/Hex::HV_MAXI;
1458 cg [2] += hexa->getVertex(nro)->getZ()/Hex::HV_MAXI;
1461 int nbvertex = grid->countVertex();
1462 const double coeff = 0.5;
1463 for (int nro=0; nro<nbvertex ; nro++)
1465 Hex::Vertex* pv = grid->getVertex(nro);
1466 Hex::Real3 pold = { pv->getX(), pv->getY(), pv->getZ() };
1468 for (int dd=0; dd<3 ; dd++)
1469 pnew [dd] = cg[dd] + coeff * (pold[dd]-cg[dd]);
1476 // ======================================================== test_disconnect
1477 // ==== Les 3 disconnect
1478 int test_disconnect (int nbargs, cpchar tabargs[])
1480 const int size_x = 2;
1481 const int size_y = 2;
1482 const int size_z = 1;
1485 Hex::Document* doc = mon_ex.addDocument ();
1487 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1488 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
1489 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
1491 Hex::Vector* dir = doc->addVector (1,1,1);
1492 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1493 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1494 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
1498 Hex::Matrix matrice;
1499 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1500 matrice.defTranslation (ecart);
1502 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1503 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1504 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
1506 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1507 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1508 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
1510 quad->setScalar (5);
1511 edge->setScalar (5);
1512 vertex->setScalar (5);
1514 doc->saveVtk ("test_disco", nvtk);
1515 doc->disconnectQuad (hexa1, quad);
1516 doc->saveVtk ("test_disco", nvtk);
1518 doc->disconnectEdge (hexa2, edge);
1519 doc->saveVtk ("test_disco", nvtk);
1521 doc->disconnectVertex (hexa3, vertex);
1522 doc->saveVtk ("test_disco", nvtk);
1524 // doc->dumpPropagation ();
1527 doc->save ("disco_all");
1530 // ======================================================== test_propagation
1531 int test_propagation ()
1533 const int size_x = 2;
1534 const int size_y = 1;
1535 const int size_z = 1;
1538 Hex::Document* doc = mon_ex.addDocument ();
1540 Hex::Vertex* orig = doc->addVertex (0,0,0);
1541 Hex::Vector* dir = doc->addVector (1,1,1);
1542 // Hex::Elements* grid =
1543 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1545 int nb = doc->countPropagation ();
1546 for (int nro=0 ; nro<nb ; nro++)
1548 Hex::Propagation* prop = doc ->getPropagation (nro);
1549 const Hex::Edges& table = prop->getEdges ();
1550 printf (" ____________________________________ Prop nro %d\n", nro);
1551 for (int ned=0 ; ned<(int)table.size() ; ned++)
1553 bool way = table [ned]->getWay ();
1558 table [ned]->getVertex (0)->printName (", ");
1559 table [ned]->getVertex (1)->printName (")\n");
1564 table [ned]->getVertex (1)->printName (", ");
1565 table [ned]->getVertex (0)->printName (")\n");
1571 doc->saveVtk ("test_propagation.vtk");
1572 doc->save ("test_propagation");
1576 // ======================================================== test_move
1579 const int size_x = 1;
1580 const int size_y = 1;
1581 const int size_z = 2;
1584 Hex::Document* doc = mon_ex.addDocument ();
1586 Hex::Vertex* orig = doc->addVertex (0,0,0);
1587 Hex::Vector* dir = doc->addVector (1,1,1);
1588 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1590 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
1591 Hex::Vector* devant = doc->addVector (5, 0, 0);
1592 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
1594 Hex::Matrix matrice;
1595 matrice.defTranslation (enhaut);
1597 Hex::Hexa* cube = grid->getHexa (1);
1598 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
1601 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1602 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
1603 Hex::Hexa* cube2 = grid2->getHexa (1);
1605 doc ->saveVtk ("move0.vtk");
1607 cube ->disconnectQuad (dessous);
1608 cube ->transform (&matrice);
1609 cube2->transform (&matrice);
1611 doc ->saveVtk ("move1.vtk");
1616 // ======================================================== test_transfo2
1617 int test_transfo2 (int nbargs, cpchar tabargs[])
1619 const int size_x = 1;
1620 const int size_y = 1;
1621 const int size_z = 2;
1624 cpchar fic_vtk = "transfo";
1627 Hex::Document* doc = mon_ex.addDocument ();
1630 Hex::Vertex* orig = doc->addVertex (0,0,0);
1631 Hex::Vector* dir = doc->addVector (1,1,1);
1632 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
1639 doc ->saveVtk (fic_vtk, nvtk);
1641 Hex::Vector* devant = doc->addVector (5, 0, 0);
1643 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1646 doc ->saveVtk (fic_vtk, nvtk);
1648 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1651 doc ->saveVtk (fic_vtk, nvtk);
1653 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1656 doc ->saveVtk (fic_vtk, nvtk);
1658 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1662 doc ->saveVtk (fic_vtk, nvtk);
1664 Hex::Vector* dir1 = doc->addVector (1,0,0);
1665 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1669 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1670 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1671 doc ->saveVtk (fic_vtk, nvtk);
1673 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1674 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1676 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1680 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1681 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1682 doc ->saveVtk (fic_vtk, nvtk);
1684 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1685 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1687 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1691 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1692 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1693 doc ->saveVtk (fic_vtk, nvtk);
1694 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1695 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1697 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1701 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1702 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1703 doc ->saveVtk (fic_vtk, nvtk);
1705 grid9->getHexa(0)->removeConnected ();
1706 doc ->saveVtk (fic_vtk, nvtk);
1710 // ======================================================== test_transfo
1711 int test_transfo (int nbargs, cpchar tabargs[])
1714 cpchar fic_vtk = "transfo";
1717 Hex::Document* doc = mon_ex.addDocument ();
1720 Hex::Vertex* orig = doc->addVertex (0,0,0);
1721 Hex::Vector* vx = doc->addVector (1,0,0);
1722 Hex::Vector* vz = doc->addVector (0,0,1);
1729 Hex::Elements* grid = doc->makeCylindrical (orig, vx,vz, dr, da, dl,
1734 doc ->saveVtk (fic_vtk, nvtk);
1735 Hex::Vector* devant = doc->addVector (10, 0, 0);
1737 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1740 doc ->saveVtk (fic_vtk, nvtk);
1744 // ======================================================== test_copy_document
1745 int test_copy_document (int nbargs, cpchar tabargs[])
1748 Hex::Document* doc = mon_ex.loadDocument ("Essai");
1749 doc ->saveVtk ("restore1.vtk");
1751 Hex::Document* clone = doc->copyDocument();
1752 clone->saveVtk ("restore2.vtk");
1756 // ======================================================== test_remove
1759 const int size_x = 2;
1760 const int size_y = 2;
1761 const int size_z = 2;
1764 Hex::Document* doc = mon_ex.addDocument ();
1766 Hex::Vertex* orig = doc->addVertex (0,0,0);
1767 Hex::Vertex* orig1 = doc->addVertex (6,0,0);
1768 Hex::Vector* dir = doc->addVector (1,1,1);
1769 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1770 doc->makeCartesian (orig1, dir, 1,1,1);
1771 doc->saveVtk ("removeConn1.vtk");
1773 Echo ("--------- Avant destruction");
1774 HexDisplay (doc->countVertex ());
1775 HexDisplay (doc->countEdge ());
1776 HexDisplay (doc->countQuad ());
1777 HexDisplay (doc->countHexa ());
1778 HexDisplay (doc->countUsedVertex ());
1779 HexDisplay (doc->countUsedEdge ());
1780 HexDisplay (doc->countUsedQuad ());
1781 HexDisplay (doc->countUsedHexa ());
1784 doc->removeConnectedHexa (grid->getHexaIJK (0,0,0));
1786 Echo ("--------- Apres destruction");
1787 HexDisplay (doc->countVertex ());
1788 HexDisplay (doc->countEdge ());
1789 HexDisplay (doc->countQuad ());
1790 HexDisplay (doc->countHexa ());
1792 HexDisplay (doc->countUsedVertex ());
1793 HexDisplay (doc->countUsedEdge ());
1794 HexDisplay (doc->countUsedQuad ());
1795 HexDisplay (doc->countUsedHexa ());
1796 doc->saveVtk ("removeConn2.vtk");
1800 // ================================================== init_vec
1801 void init_vec (Hex::RealVector& tab, double n0=0, double n1=0, double n2=0,
1802 double n3=0, double n4=0, double n5=0, double n6=0,
1803 double n7=0, double n8=0, double n9=0, double n10=0,
1804 double n11=0, double n12=0, double n13=0, double n14=0,
1805 double n15=0, double n16=0)
1807 if (n0>0.0) tab.push_back (n0);
1808 if (n1>0.0) tab.push_back (n1);
1809 if (n2>0.0) tab.push_back (n2);
1810 if (n3>0.0) tab.push_back (n3);
1811 if (n4>0.0) tab.push_back (n4);
1812 if (n5>0.0) tab.push_back (n5);
1813 if (n6>0.0) tab.push_back (n6);
1814 if (n7>0.0) tab.push_back (n7);
1815 if (n8>0.0) tab.push_back (n8);
1816 if (n9>0.0) tab.push_back (n9);
1818 if (n10>0.0) tab.push_back (n10);
1819 if (n11>0.0) tab.push_back (n11);
1820 if (n12>0.0) tab.push_back (n12);
1821 if (n13>0.0) tab.push_back (n13);
1822 if (n14>0.0) tab.push_back (n14);
1823 if (n15>0.0) tab.push_back (n15);
1824 if (n16>0.0) tab.push_back (n16);
1826 // ================================================== test_cylindricals
1827 int test_cylindricals (int nbargs, cpchar tabargs[])
1830 Hex::Document* doc = mon_ex.addDocument ();
1832 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
1833 Hex::Vector* vz = doc->addVector (0, 0, 1);
1834 Hex::Vector* vx = doc->addVector (1 ,0, 0);
1836 Hex::RealVector tdr, tda, tdl;
1839 init_vec (tdr, 2, 1, 0.5);
1840 init_vec (tda, 40, 35, 30, 25, 20, 15, 10, 5,
1841 5, 10, 15, 20, 25, 30, 35, 40);
1842 init_vec (tdl, 1, 2, 3 );
1844 init_vec (tdr, 1, 1, 1, 1);
1845 init_vec (tda, 45,45, 45,45, 45,45, 45,45 );
1846 init_vec (tdl, 1, 1, 1 );
1848 ****************** */
1851 init_vec (tdr, 1, 2, 1, 2);
1852 init_vec (tda, 20, 20, 20 );
1855 Hex::Elements* grid=doc->makeCylindricals (orig, vx,vz, tdr,tda,tdl, false);
1857 doc->saveVtk ("cylindricals.vtk");
1859 grid->clearAssociation();
1860 doc->clearAssociation();
1863 // ======================================================== test_hexa
1864 int test_hexa (int nbargs, cpchar tabargs[])
1867 int ier = test_cylindricals (nbargs, tabargs);
1868 ier = test_transfo (nbargs, tabargs);