2 // C++ : Tests unitaires
4 // Copyright (C) 2009-2011 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/
21 // or email : webmaster.salome@opencascade.com
23 #include "test_unit.hxx"
26 #include "HexDocument.hxx"
27 #include "HexElements.hxx"
28 #include "HexCrossElements.hxx"
30 #include "HexHexa.hxx"
31 #include "HexQuad.hxx"
32 #include "HexEdge.hxx"
33 #include "HexVertex.hxx"
35 #include "HexPropagation.hxx"
36 #include "HexOldShape.hxx"
38 #include "HexMatrix.hxx"
39 #include "HexCramer.hxx"
40 #include "HexGroup.hxx"
45 static int nbr_vtk = 0;
46 static cpchar case_name = "hexa";
47 static Hex::Document* docu = NULL;
49 // ======================================================== print_propagations
50 void print_propagations (Hex::Document* doc)
52 int nb = doc->countPropagation ();
54 for (int nro=0 ; nro<nb ; nro++)
56 Hex::Propagation* prop = doc ->getPropagation (nro);
57 const Hex::Edges& table = prop->getEdges ();
58 printf (" ____________________________________ Prop nro %d\n", nro);
59 for (int ned=0 ; ned<(int)table.size() ; ned++)
61 bool way = table [ned]->getWay ();
62 Hex::Edge* edge = table [ned];
63 Hex::Vertex* v0 = edge->getVertex (0);
64 Hex::Vertex* v1 = edge->getVertex (1);
70 v1->printName (")\n");
75 v0->printName (")\n");
81 // ======================================================== save_vtk
87 docu->saveVtk (case_name, nbr_vtk);
89 // ======================================================== remove_hexa
90 void remove_hexa (Hex::Hexa* hexa)
100 docu->saveVtk (case_name, nbr_vtk);
102 // ======================================================== test_sphere
103 int test_sphere (int nbargs, cpchar tabargs[])
106 Hex::Document* doc = mon_ex.addDocument ();
107 Hex::Vertex* orig = doc->addVertex (0,0,0);
112 Hex::Elements* sphere = doc->makeSpherical (orig, rayon, ncouches, k);
116 for (int nc=0 ; nc <= ncouches ; nc++)
118 Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
122 // sphere->getStrate (nc, Hex::Q_A)->remove ();
123 // sphere->getStrate (nc, Hex::Q_B)->remove ();
127 sphere->saveVtk ("sphere.vtk");
130 // ======================================================== test_cartesi1
133 const int size_x = 15;
134 const int size_y = 12;
135 const int size_z = 8;
138 Hex::Document* doc = mon_ex.addDocument ();
139 Hex::Vertex* orig = doc->addVertex (0,0,0);
141 Hex::Vector* dir = doc->addVector (1,1,1);
142 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
144 // print_propagations (doc);
146 for (int nz=0; nz<size_z ; nz++)
147 for (int ny=nz+1; ny<size_y-nz-1 ; ny++)
148 for (int nx=nz+1; nx<size_x-nz-1 ; nx++)
150 Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
155 print_propagations (doc);
156 grid->saveVtk ("grid_cart.vtk");
161 // ======================================================== afficher
162 #define Afficher(elt) afficher (#elt, elt)
163 int afficher (cpchar nom, Hex::EltBase* elt)
167 printf (" .... %s = 0x0\n", nom);
171 printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
174 // ======================================================== test_find
177 const int size_x = 2;
178 const int size_y = 2;
179 const int size_z = 2;
182 Hex::Document* doc = mon_ex.addDocument ();
184 Hex::Vertex* orig = doc->addVertex (0,0,0);
185 Hex::Vector* dir = doc->addVector (1,1,1);
186 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
188 grid->saveVtk ("mini1.vtk");
191 Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
193 Afficher ( v00 = doc->findVertex (0, 0, 0));
194 Afficher ( v02 = doc->findVertex (1, 1, 0));
195 Afficher ( v06 = doc->findVertex (1, 1, 1));
196 Afficher ( v08 = doc->findVertex (2, 1, 0));
197 Afficher ( v10 = doc->findVertex (2, 1, 1));
198 Afficher ( v22 = doc->findVertex (2, 1, 2));
199 Afficher ( v26 = doc->findVertex (2, 2, 2));
203 Afficher (doc->findEdge (v06, v10));
204 Afficher (doc->findEdge (v10, v06));
207 Afficher (doc->findQuad (v02, v10));
208 Afficher (doc->findQuad (v06, v08));
209 Afficher (doc->findQuad (v02, v06));
212 Afficher (doc->findHexa (v00, v06));
213 Afficher (doc->findHexa (v06, v26));
214 Afficher (doc->findHexa (v26, v06));
218 // ======================================================== test_joint
219 int test_joint (int nbargs, cpchar tabargs[])
226 Hex::Document* doc = mon_ex.addDocument ();
228 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
229 Hex::Vector* dir = doc->addVector (1,1,1);
231 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
233 Hex::Vertex* orig2 = doc->addVertex (dimx/2.0,0,8);
234 Hex::Vector* vectj = doc->addVector (0,1,0);
235 Hex::Vector* vecti = doc->addVector (1,0,0);
236 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vecti, vectj,
237 1, 180, 1, dimz,dimy,dimx);
241 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
242 Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my);
244 Hex::Vertex* v1 = prems->getVertex (0);
245 Hex::Vertex* v3 = prems->getVertex (1);
247 Hex::Vertex* v2 = cible->getVertex (1);
248 Hex::Vertex* v4 = cible->getVertex (2);
250 // v1->setScalar (3);
251 // v2->setScalar (3);
252 // v3->setScalar (6);
253 // v4->setScalar (6);
257 liste.push_back (prems);
258 for (int nx=0; nx<dimx; nx++)
260 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
262 for (int ny=0; ny<dimy; ny++)
264 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
266 doc->saveVtk ("joint1.vtk");
267 const int hauteur = 5;
268 Hex::Elements* joint = doc->joinQuads(liste, cible, v1,v2,v3,v4, hauteur);
269 // for (int nh=0 ; nh<hauteur ; nh++) joint->getHexa(nh)->setScalar (5);
271 int nbr_joint_vertex = joint->countVertex ();
272 int nbr_surf_vertex = nbr_joint_vertex/(hauteur+1);
274 HexDisplay (nbr_joint_vertex);
275 HexDisplay (nbr_surf_vertex);
277 int indice0 = joint->findVertex (v1);
278 HexDisplay (indice0);
280 for (int nh=0 ; nh<nbr_surf_vertex ; nh++)
281 joint->getVertex(nh)->setScalar (5);
283 for (int nh=0 ; nh<=hauteur ; nh++)
284 joint->getVertex(nh*nbr_surf_vertex)->setScalar (3);
286 doc->saveVtk ("joint2.vtk");
289 // ======================================================== test_prism
290 int test_prism (int nbargs, cpchar tabargs[])
297 Hex::Document* doc = mon_ex.addDocument ();
299 Hex::Vertex* orig1 = doc->addVertex ( 0,0,0);
300 Hex::Vector* dir1 = doc->addVector ( 1,1,1);
301 Hex::Vector* dir2 = doc->addVector ( 1,1,-1);
303 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir1, dimx,dimy,dimz);
307 Hex::Quads liste1, liste2;
309 liste1.push_back (grid1->getQuadIJ (mx, my, dimz));
310 liste2.push_back (grid1->getQuadIJ (mx, my, 0));
311 for (int nx=0; nx<dimx; nx++)
314 liste1.push_back (grid1->getQuadIJ (nx, my, dimz));
315 liste2.push_back (grid1->getQuadIJ (nx, my, 0));
318 for (int ny=0; ny<dimy; ny++)
321 liste1.push_back (grid1->getQuadIJ (mx, ny, dimz));
322 liste2.push_back (grid1->getQuadIJ (mx, ny, 0));
325 Hex::RealVector tlen;
327 for (int nro=0; nro<5; nro++)
333 const int nbiter = 5;
334 doc->saveVtk ("prisme1.vtk");
335 Hex::Elements* prisme2 = doc->prismQuads (liste2, dir2, nbiter);
336 doc->saveVtk ("prisme2.vtk");
338 Hex::Elements* prisme1 = doc->prismQuadsVec (liste1, dir1, tlen, 0);
340 PutData (liste1.size());
341 PutData (tlen.size());
342 PutData (prisme1->countHexa());
343 PutData (prisme1->countQuad());
344 PutData (prisme1->countEdge());
345 PutData (prisme1->countVertex());
347 for (int nro=0 ; nro <nbiter ; nro++)
349 Hex::Hexa* cell = prisme2-> getHexa (nbiter+nro);
353 doc->saveVtk ("prisme3.vtk");
356 // ======================================================== test_revolution9
357 int test_revolution9 (int nbargs, cpchar tabargs[])
364 Hex::Document* doc = mon_ex.addDocument ();
366 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
367 Hex::Vector* dir = doc->addVector (1,1,1);
369 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
373 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
376 liste.push_back (prems);
377 prems -> setScalar (5);
378 for (int nx=0; nx<dimx; nx++)
381 Hex::Quad* cell = grid1->getQuadIJ (nx, my, dimz);
382 liste.push_back (cell);
383 cell -> setScalar (5);
386 for (int ny=0; ny<dimy; ny++)
389 Hex::Quad* cell = grid1->getQuadIJ (mx, ny, dimz);
390 liste.push_back (cell);
391 cell -> setScalar (5);
394 Hex::Vertex* center = doc->addVertex (0, -10, 0);
395 Hex::Vector* axis = doc->addVector (1, 0, 0);
396 Hex::RealVector angles;
398 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
399 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
400 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
403 doc->saveVtk ("revolution1.vtk");
408 for (int na=0 ; na<niter ; na++)
410 angles.push_back (alpha);
413 for (int na=1 ; na<niter ; na++)
416 angles.push_back (alpha);
419 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
421 doc->saveVtk ("revolution2.vtk");
425 // ======================================================== test_revolution
426 int test_revolution (int nbargs, cpchar tabargs[])
429 Hex::Document* doc = mon_ex.addDocument ();
431 Hex::Vertex* ori = doc->addVertex (0,0,0);
432 Hex::Vector* vx = doc->addVector (1,0,0);
433 Hex::Vector* vz = doc->addVector (0,0,1);
443 Hex::Elements* grid = doc->makeCylindrical (ori, vx,vz, dr,da,dl,
447 for (int nx=0; nx<nr; nx++)
448 for (int ny=0; ny<na; ny++)
450 Hex::Quad* cell = grid->getQuadIJ (nx, ny, nl);
451 liste.push_back (cell);
452 cell -> setScalar (5);
455 Hex::Vertex* center = doc->addVertex (0, -10, 0);
456 Hex::Vector* axis = doc->addVector (1, 0, 0);
457 Hex::RealVector angles;
459 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
460 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
461 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
464 doc->saveVtk ("revolution1.vtk");
469 for (int na=0 ; na<niter ; na++)
471 angles.push_back (alpha);
474 for (int na=1 ; na<niter ; na++)
477 angles.push_back (alpha);
480 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
482 doc->saveVtk ("revolution2.vtk");
486 // ======================================================== test_coude
487 int test_coude (int nbargs, cpchar tabargs[])
495 Hex::Document* doc = mon_ex.addDocument ();
497 Hex::Vertex* orig = doc->addVertex (0,0,0);
498 Hex::Vector* vx = doc->addVector (1,0,0);
499 Hex::Vector* vz = doc->addVector (0,0,1);
501 // grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
507 Hex::Elements* grid1 = doc->makeCylindrical (orig1, vx,vz,dr,360, dl,
511 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
514 liste.push_back (prems);
515 prems -> setScalar (5);
516 for (int nx=0; nx<dimx; nx++)
519 Hex::Quad* cell = grid1->getQuadIJ (nx, my, dimz);
520 liste.push_back (cell);
521 cell -> setScalar (5);
524 for (int ny=0; ny<dimy; ny++)
527 Hex::Quad* cell = grid1->getQuadIJ (mx, ny, dimz);
528 liste.push_back (cell);
529 cell -> setScalar (5);
533 Hex::Vertex* center = doc->addVertex (0, -10, 0);
534 Hex::Vector* axis = doc->addVector (1, 0, 0);
535 Hex::RealVector angles;
537 Hex::Vector* dir1 = doc->addVector (10,0.3,0.3);
538 Hex::Elements* grid2 = doc->makeCartesian (center, dir1, 1,1,1);
539 Hex::Hexa* cell = grid2->getHexaIJK (0,0,0);
542 doc->saveVtk ("revolution1.vtk");
547 for (int na=0 ; na<niter ; na++)
549 angles.push_back (alpha);
552 for (int na=1 ; na<niter ; na++)
555 angles.push_back (alpha);
558 Hex::Elements* bloc = doc->revolutionQuads (liste, center, axis, angles);
560 doc->saveVtk ("revolution2.vtk");
564 // ======================================================== test_count
565 int test_count (int nbargs, cpchar tabargs[])
568 Hex::Document* doc = mon_ex.addDocument ();
570 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
571 Hex::Vector* vx = doc->addVector (1,0,0);
572 Hex::Vector* vz = doc->addVector (0,0,1);
581 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 360, dl,nr, 10, nl, false);
583 HexDisplay (doc->countVertex ());
584 HexDisplay (doc->countUsedVertex ());
585 doc ->saveVtk ("hexa1.vtk");
589 // ======================================================== test_decoupage
590 int test_decoupage (int nbargs, cpchar tabargs[])
592 const int size_x = 2;
593 const int size_y = 1;
594 const int size_z = 1;
597 Hex::Document* doc = mon_ex.addDocument ();
599 Hex::Vertex* orig = doc->addVertex (0,0,0);
600 Hex::Vector* dir = doc->addVector (1,1,1);
602 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
603 Hex::Edge* arete = grid->getEdgeK (0, 0, 0);
607 doc ->saveVtk ("decoupe", nvtk);
608 /* Hex::Elements* grid2 = */ doc->cut (arete, 1);
611 doc ->saveVtk ("decoupe", nvtk);
615 // ======================================================== test_gen_xml
616 int test_gen_xml (int nbargs, cpchar tabargs[])
618 const int size_x = 2;
619 const int size_y = 2;
620 const int size_z = 2;
623 Hex::Document* doc = mon_ex.addDocument ();
625 Hex::Vertex* orig = doc->addVertex (0,0,0);
626 Hex::Vector* dir = doc->addVector (1,1,1);
627 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
629 Hex::Hexa* cell = grid->getHexa (0);
630 // Hex::Quad* face = cell->getQuad (0);
631 // Hex::Edge* arete = cell->getEdge (0);
632 // Hex::Vertex* noeud = cell->getVertex (0);
634 // Hex::Shape* shape1 = new Hex::Shape("riri");
635 // Hex::Shape* shape2 = new Hex::Shape("fifi");
636 // Hex::Shape* shape3 = new Hex::Shape("loulou");
638 // noeud->setAssociation (shape1);
639 // arete->setAssociation (shape2);
640 // face ->setAssociation (shape3);
642 Hex::Law* law1 = doc->addLaw("loi1", 1);
643 Hex::Law* law2 = doc->addLaw("loi2", 2);
644 Hex::Law* law3 = doc->addLaw("loi3", 3);
646 law1->setKind (Hex::Uniform);
647 law2->setKind (Hex::Arithmetic);
648 law3->setKind (Hex::Geometric);
650 Hex::Propagation* prop1 = doc->getPropagation (0);
651 Hex::Propagation* prop2 = doc->getPropagation (1);
652 Hex::Propagation* prop3 = doc->getPropagation (2);
654 prop1->setLaw (law1);
655 prop2->setLaw (law2);
656 prop3->setLaw (law3);
658 prop1->setWay (true);
659 prop2->setWay (false);
660 prop3->setWay (true);
662 doc ->saveVtk ("mini.vtk");
663 doc ->save ("Essai");
667 // ======================================================== test_string_xml
668 int test_string_xml (int nbargs, cpchar tabargs[])
670 const int size_x = 2;
671 const int size_y = 2;
672 const int size_z = 2;
675 Hex::Document* doc = mon_ex.addDocument ();
677 Hex::Vertex* orig = doc->addVertex (0,0,0);
678 Hex::Vector* dir = doc->addVector (1,1,1);
679 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
681 Hex::Hexa* cell = grid->getHexa (0);
682 // Hex::Quad* face = cell->getQuad (0);
683 // Hex::Edge* arete = cell->getEdge (0);
684 // Hex::Vertex* noeud = cell->getVertex (0);
686 // Hex::Shape* shape1 = new Hex::Shape("riri");
687 // Hex::Shape* shape2 = new Hex::Shape("fifi");
688 // Hex::Shape* shape3 = new Hex::Shape("loulou");
690 // noeud->setAssociation (shape1);
691 // arete->setAssociation (shape2);
692 // face ->setAssociation (shape3);
694 Hex::Law* law1 = doc->addLaw("loi1", 1);
695 Hex::Law* law2 = doc->addLaw("loi2", 2);
696 Hex::Law* law3 = doc->addLaw("loi3", 3);
698 law1->setKind (Hex::Uniform);
699 law2->setKind (Hex::Arithmetic);
700 law3->setKind (Hex::Geometric);
702 Hex::Propagation* prop1 = doc->getPropagation (0);
703 Hex::Propagation* prop2 = doc->getPropagation (1);
704 Hex::Propagation* prop3 = doc->getPropagation (2);
706 prop1->setLaw (law1);
707 prop2->setLaw (law2);
708 prop3->setLaw (law3);
710 prop1->setWay (true);
711 prop2->setWay (false);
712 prop3->setWay (true);
714 doc ->saveVtk ("mini.vtk");
715 doc ->save ("Essai");
717 cpchar flux = doc ->getXml ();
718 Hex::Document* docbis = mon_ex.addDocument ();
719 docbis->setXml (flux);
720 docbis->saveVtk ("clone.vtk");
724 // ======================================================== test_relecture
725 int test_relecture (int nbargs, cpchar tabargs[])
728 cpchar nomdoc = "Essai";
731 Hex::Document* doc = mon_ex.loadDocument (nomdoc);
733 /*********************
734 Hex::Vertex* v4 = doc->findVertex (80.0, 0.0, 0.0);
735 Hex::Vertex* v5 = doc->findVertex (80.0, 0.0, 40.0);
736 Hex::Edge* e4 = doc->findEdge (v4, v5);
743 ***********************/
746 doc ->saveVtk ("restore.vtk");
747 doc ->save ("restore");
749 // doc ->reorderFaces ();
752 // Hex::Elements* grid2 = doc->cut (e4, 2);
755 // ======================================================== test_clone
758 const int size_x = 2;
759 const int size_y = 2;
760 const int size_z = 2;
763 Hex::Document* doc = mon_ex.addDocument ();
765 Hex::Vertex* orig = doc->addVertex (0,0,0);
766 Hex::Vector* dir = doc->addVector (1,1,1);
767 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
769 Hex::Vector* bond = doc->addVector (0, 0, 7);
770 Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
772 doc ->saveVtk ("clonage.vtk");
775 HexDump (grid2->getHexa (1));
776 HexDump (grid2->getHexaIJK (1,1,1));
777 HexDump (grid2->getVertexIJK (1,1,1));
781 // ======================================================== test_separ
784 const int size_x = 2;
785 const int size_y = 2;
786 const int size_z = 2;
789 Hex::Document* doc = mon_ex.addDocument ();
791 Hex::Vertex* orig = doc->addVertex (0,0,0);
792 Hex::Vector* dir = doc->addVector (1,1,1);
793 // Hex::Elements* grid =
794 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
796 doc ->saveVtk ("separ.vtk");
801 // ======================================================== test_shperical
802 int test_spherical (int nbargs, const char* tabargs[])
805 Hex::Document* doc = mon_ex.addDocument ();
807 Hex::Vertex* orig = doc->addVertex (0,0,0);
811 Hex::Elements* grid = doc->makeSpherical (orig, rayon, nbr);
813 int nbhexas = grid->countHexa ();
814 HexDisplay (nbhexas);
815 for (int nro=0 ; nro<nbhexas ; nro +=3)
816 grid->getHexa(nro)->remove();
817 HexDisplay (doc->countHexa ());
818 doc->saveVtk ("shperical.vtk");
823 // ================================================== test_grille_cyl
824 int test_grille_cyl (int nbargs, cpchar tabargs[])
827 Hex::Document* doc = mon_ex.addDocument ();
829 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
830 Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
832 Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
833 Hex::Vertex* orig4 = doc->addVertex (10,10,0);
835 Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
836 Hex::Vertex* orig6 = doc->addVertex (10,20,0);
838 Hex::Vector* vz = doc->addVector (0,0,1);
839 Hex::Vector* vx = doc->addVector (1,0,0);
846 Hex::Elements *c1, *c2, *c3, *c4, *c5, *c6;
848 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 360, dl,nr, 4, nl, true);
849 c2 = doc->makeCylindrical (orig2, vx,vz,dr, 360, dl,nr, 8, nl, true);
850 c3 = doc->makeCylindrical (orig3, vx,vz,dr, 270, dl,nr, 8, nl, true);
851 c4 = doc->makeCylindrical (orig4, vx,vz,dr, 270, dl,nr, 7, nl, true);
852 c5 = doc->makeCylindrical (orig5, vx,vz,dr, 360, dl,nr, 5, nl, true);
853 c6 = doc->makeCylindrical (orig6, vx,vz,dr, 360, dl,nr, 6, nl, true);
856 c2->getHexa(base2 + 0)->setScalar (5);
857 c2->getHexa(base2 + 1)->setScalar (5);
858 c2->getHexa(base2 + 2)->setScalar (5);
860 doc->saveVtk ("cylindres.vtk");
865 // ===================================================== test_cylindrical
866 int test_cylindrical (int nbargs, cpchar tabargs[])
868 cpchar fic_vtk = "cylindre";
871 Hex::Document* doc = mon_ex.addDocument ();
873 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
874 Hex::Vector* vx = doc->addVector (1, 0, 0);
875 Hex::Vector* vz = doc->addVector (0, 0, 1);
887 na = atoi (tabargs[1]);
895 da = atof (tabargs[2]);
899 // Hex::Cylinder* cyl = doc->addCylinder (orig, vz, nr, nl);
900 // Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
901 doc->makeCylindrical (orig,vx, vz, dr,da,dl, nr,na, nl, true);
902 doc ->saveVtk (fic_vtk, na);
905 // ===================================================== test_cylinder
906 int test_cylinder (int nbargs, cpchar tabargs[])
909 cpchar fic_vtk = "cylindre";
912 Hex::Document* doc = mon_ex.addDocument ();
914 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
915 Hex::Vector* vx = doc->addVector (1, 0, 0);
916 Hex::Vector* vz = doc->addVector (0, 0, 1);
925 Hex::Cylinder* cyl = doc->addCylinder (orig, vz, rayon, hauteur);
926 doc->makeCylinder (cyl, vx, nr, na, nl);
927 doc ->saveVtk (fic_vtk, nvtk);
930 // ===================================================== test_xml_cylinder
931 int test_xml_cylinder (int nbargs, cpchar tabargs[])
934 cpchar fic_vtk = "cylindre";
937 Hex::Document* doc = mon_ex.addDocument ();
939 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
940 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
941 Hex::Vector* vz = doc->addVector (0,0,1);
942 Hex::Vector* vx = doc->addVector (1,0,0);
946 orig1->setName ("orig1");
947 orig2->setName ("orig2");
955 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
956 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
958 Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
959 doc ->saveVtk (fic_vtk, nvtk);
961 Hex::Group* groupe = doc->addGroup ("GroupeAMA", Hex::HexaCell);
962 groupe->addElement (grid->getHexaIJK (0,0,0));
963 groupe->addElement (grid->getHexaIJK (1,0,0));
964 groupe->addElement (grid->getHexaIJK (0,1,0));
965 groupe->addElement (grid->getHexaIJK (1,1,0));
966 groupe->addElement (grid->getHexaIJK (2,1,0));
968 grid->getHexaIJK (0,0,0)->setName ("Hexa0");
969 grid->getQuadIJ (0,0,0)->setName ("QuadIJ0");
970 grid->getEdgeK (0,0,0)->setName ("EdgeK0");
972 doc->makePipe (pipe, vx, nr, na, nl);
973 doc ->saveVtk (fic_vtk, nvtk);
974 doc->save ("cylindre");
978 // ===================================================== test_pipe
979 int test_pipe (int nbargs, cpchar tabargs[])
982 cpchar fic_vtk = "cylindre";
985 Hex::Document* doc = mon_ex.addDocument ();
987 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
988 Hex::Vector* vx = doc->addVector (1,0,0);
989 Hex::Vector* vy = doc->addVector (0,1,0);
997 Hex::Pipe* pipe = doc->addPipe (orig1, vx, nri, nre, nl);
998 doc->makePipe (pipe, vy, nr, na, nl);
999 doc ->saveVtk (fic_vtk, nvtk);
1003 // ======================================================== del_hexa
1004 void del_hexa (Hex::CrossElements* gr, int cyl, int ni, int nj, int nk, int dr)
1006 Hex::Hexa* hexa = gr->getHexaIJK (cyl, ni, nj, nk);
1014 // ======================================================== del_tranche
1015 int del_tranche (Hex::CrossElements* grid, int cyl, int ni, int nk, int dr=1)
1017 for (int nj = 0 ; nj < 8 ; nj++)
1018 del_hexa (grid, cyl, ni, nj, nk, dr);
1022 printf ("del_tranche (g=%d, i=%d, k=%d) : fic = %d\n",
1023 cyl, ni, nk, nbr_vtk-1);
1026 // ======================================================== test_joint2
1027 int test_joint2 (int nbargs, cpchar tabargs[])
1030 docu = mon_ex.addDocument ();
1031 case_name = "pb_joint";
1033 Hex::Vector* vx = docu->addVector (1, 0, 0);
1034 Hex::Vector* vz = docu->addVector (0, 0, 1);
1035 Hex::Vertex* hori = docu->addVertex (0, 0, 0);
1045 Hex::Elements *bgrid=NULL, *hgrid=NULL;
1047 hgrid = docu->makeCylindrical (hori, vx,vz, dr,da,dl, nr,na,nl, fill);
1051 Hex::Vertex* bori = docu->addVertex (0, 0, -5);
1052 bgrid = docu->makeCylindrical (bori, vx,vz, dr,da,dl, nr,na,nl, fill);
1055 Hex::Quads qsource, qdest;
1056 printf (" Source = ");
1057 for (int ny=0 ; ny< na ; ny++)
1059 Hex::Quad* quad = hgrid->getQuadIJ (0, ny, 0);
1061 qsource.push_back (quad);
1064 for (int ny=0 ; ny<4 ; ny++)
1066 Hex::Quad* quad = hgrid->getKerHQuad (ny);
1068 qsource.push_back (quad);
1073 printf (" Cible = ");
1074 for (int ny=0 ; ny< na ; ny++)
1076 Hex::Quad* quad = bgrid->getQuadIJ (0, ny, 1);
1078 qdest.push_back (quad);
1081 for (int ny=0 ; ny<4 ; ny++)
1083 Hex::Quad* quad = bgrid->getKerHQuad (ny+4);
1085 qdest.push_back (quad);
1088 docu ->setLevel (1);
1089 Hex::Quad* cible = bgrid->getQuadIJ (0, 1, 1);
1090 Hex::Vertex* vc1 = bgrid->getVertexIJK (0, 1, 1);
1091 Hex::Vertex* vc2 = bgrid->getVertexIJK (1, 1, 1);
1093 Hex::Vertex* vs1 = hgrid->getVertexIJK (0, 0, 0);
1094 Hex::Vertex* vs2 = hgrid->getVertexIJK (1, 0, 0);
1096 docu->joinQuads (qsource, cible, vs1, vc1, vs2, vc2, 1);
1101 // ======================================================== test_croix
1102 int test_croix (int nbargs, cpchar tabargs[])
1105 docu = mon_ex.addDocument ();
1107 Hex::Vertex* ori1 = docu->addVertex ( 100,0,0);
1108 Hex::Vertex* ori2 = docu->addVertex (-5,0,5);
1109 Hex::Vector* vz = docu->addVector ( 0,0,1);
1110 Hex::Vector* vx = docu->addVector ( 1,0,0);
1117 Hex::Cylinder* cyl1 = docu->addCylinder (ori1, vz, r1, l1);
1118 Hex::Cylinder* cyl2 = docu->addCylinder (ori2, vx, r2, l2);
1119 Hex::CrossElements* grid = docu->makeCylinders (cyl1, cyl2);
1121 case_name = "croix";
1123 PutData ((BadElement (grid)));
1126 Hex::Edge* pipo = docu->addEdge (ori1, ori1);
1127 PutData (pipo->isValid());
1128 PutData ((BadElement (pipo)));
1131 del_tranche (grid, 0, 1, 0);
1132 del_tranche (grid, 0, 1, 5);
1134 del_tranche (grid, 1, 1, 0);
1135 del_tranche (grid, 1, 1, 3);
1137 del_tranche (grid, 1, 0, 0);
1138 del_tranche (grid, 1, 0, 3);
1140 del_tranche (grid, 0, 0, 0);
1141 del_tranche (grid, 0, 0, 5);
1142 del_tranche (grid, 0, 0, 1);
1143 del_tranche (grid, 0, 0, 2);
1144 del_tranche (grid, 0, 0, 3);
1145 del_tranche (grid, 0, 0, 4);
1148 del_tranche (grid, 1, 1, 1, 2);
1150 del_tranche (grid, 0, 1, 1, 2);
1151 del_tranche (grid, 0, 1, 4, 2);
1152 del_tranche (grid, 0, 1, 3, 2);
1153 del_tranche (grid, 0, 1, 2, 2);
1155 del_tranche (grid, 1, 1, 2, 2);
1158 // ======================================================== test_pipes
1159 int test_pipes (int nbargs, cpchar tabargs[])
1162 Hex::Document* doc = mon_ex.addDocument ();
1164 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1165 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1166 Hex::Vector* vz = doc->addVector ( 0,0,1);
1167 Hex::Vector* vx = doc->addVector ( 1,0,0);
1169 // double h1 = 5, ri1 = 1, re1 = 2;
1170 double h1 = 10, ri1 = 1, re1 = 2;
1171 double h2 = 10, ri2 = 2, re2 = 3;
1173 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
1174 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
1175 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
1181 del_tranche (grid, 0, 1, 0);
1182 del_tranche (grid, 0, 1, 5);
1184 del_tranche (grid, 1, 1, 0);
1185 del_tranche (grid, 1, 1, 3);
1188 del_tranche (grid, 1, 1, 1, 2);
1190 del_tranche (grid, 0, 1, 1, 2);
1191 del_tranche (grid, 0, 1, 4, 2);
1192 del_tranche (grid, 0, 1, 3, 2);
1193 del_tranche (grid, 0, 1, 2, 2);
1195 del_tranche (grid, 1, 1, 2, 2);
1196 /* ***************************************************
1198 int nbz [2] = { 8, 4 };
1200 for (int cyl = 0 ; cyl < 2 ; cyl++)
1201 for (int nk = 0 ; nk < nbz[cyl] ; nk++)
1202 for (int nj = 0 ; nj < 4 ; nj++)
1205 if (cyl==0) jj = (jj+6) MODULO 8 ;
1206 Hex::Hexa* hexa = grid->getHexaIJK (cyl, ni, jj, nk);
1210 doc->saveVtk (case_name, nbr_vtk);
1213 *************************************************** */
1216 // ======================================================== test_lorraine
1217 int test_lorraine(int nbargs, cpchar tabargs[])
1220 Hex::Document* doc = mon_ex.addDocument ();
1222 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1223 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1224 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
1225 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
1227 Hex::Vector* vz = doc->addVector ( 0,0,1);
1228 Hex::Vector* vx = doc->addVector ( 1,0,0);
1237 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
1238 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
1240 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
1241 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
1243 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
1244 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
1246 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
1247 const int nx_int = 0;
1248 const int nx_ext = 1;
1250 // vc2 = grid1->getVertexIJK (Hex::CylBig, 0,0,0);
1251 // vc3 = grid2->getVertexIJK (Hex::CylSmall, 0,0,0);
1253 Hex::Quad* qb = grid1-> getQuadIJ (Hex::CylBig, nx_ext, Hex::S_E, 4);
1254 Hex::Quad* qh = grid2-> getQuadIJ (Hex::CylSmall, nx_ext, Hex::S_N, 0);
1256 Hex::Vertex* vb0 = qb->getVertex (3);
1257 Hex::Vertex* vb1 = qb->getVertex (2);
1258 Hex::Vertex* vh0 = qh->getVertex (0);
1259 Hex::Vertex* vh1 = qh->getVertex (1);
1261 vb0 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_E, 4); // cible
1262 vb1 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_NE, 4);
1263 vh0 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_N, 0); // depart
1264 vh1 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_NW, 0);
1275 hliste.push_back (qh);
1276 for (int ny=1; ny<Hex::S_MAXI; ny++)
1278 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
1279 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_ext, ns, 0));
1282 for (int ny=0; ny<4 ; ny++)
1283 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_int, ny, 0));
1286 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, hauteur);
1287 doc->saveVtk ("lorraine.vtk");
1292 // ======================================================== test_disconnect2
1293 // === Disconnect Edge seul
1294 int test_disconnect2 (int nbargs, cpchar tabargs[])
1296 const int size_x = 2;
1297 const int size_y = 2;
1298 const int size_z = 1;
1301 Hex::Document* doc = mon_ex.addDocument ();
1303 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1304 Hex::Vector* dir = doc->addVector (1,1,1);
1305 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1311 Hex::Matrix matrice;
1312 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1313 matrice.defTranslation (ecart);
1315 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1316 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1318 hexa2->setScalar (2);
1319 edge->setScalar (5);
1321 doc->saveVtk ("test_disco", nvtk);
1325 Hex::Elements* disco_edges = doc->disconnectEdge (hexa2, edge);
1326 HexDisplay (disco_edges->countVertex());
1327 HexDisplay (disco_edges->countEdge());
1328 HexDisplay (disco_edges->countQuad());
1329 HexDisplay (disco_edges->countHexa());
1331 // hexa2->transform (&matrice);
1332 /**********************************
1333 for (int ns=0; ns<disco_edges->countVertex(); ns++)
1335 Hex::Vertex* sommet = disco_edges->getVertex(ns);
1336 sommet->setX (sommet->getX()+0.5);
1337 sommet->setY (sommet->getY()+0.5);
1339 ********************************* */
1341 doc->saveVtk ("test_disco", nvtk);
1342 doc->save ("test_disco");
1349 // ======================================================== test_disconnect4
1350 // === Disconnect Edges
1351 int test_disconnect4 (int nbargs, cpchar tabargs[])
1353 const int size_x = 1;
1354 const int size_y = 2;
1355 const int size_z = 2;
1358 Hex::Document* doc = mon_ex.addDocument ();
1360 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1361 Hex::Vector* vx = doc->addVector (1,0,0);
1362 Hex::Vector* vy = doc->addVector (0,1,0);
1363 Hex::Vector* vz = doc->addVector (0,0,1);
1364 Hex::Elements* grid2 = doc->makeCartesian (orig2, vx,vy,vz, size_x,size_y,size_z);
1371 for (int nk=0 ; nk< size_z; nk++)
1373 Hex::Hexa* hexa2 = grid2->getHexaIJK (0,0,nk);
1374 Hex::Edge* edge = grid2->getEdgeK (0,1,nk);
1376 hexa2->setScalar (2);
1377 edge->setScalar (5);
1378 t_hexas.push_back (hexa2);
1379 t_edges.push_back (edge);
1385 doc->saveVtk ("test_disco", nvtk);
1386 /* Hex::Elements* disco_edges = */ doc->disconnectEdges (t_hexas, t_edges);
1387 doc->saveVtk ("test_disco", nvtk);
1389 // hexa2->dumpFull ();
1394 // ======================================================== test_disconnect
1395 // ==== Disconnect Quad
1396 int test_disconnect1 (int nbargs, cpchar tabargs[])
1398 const int size_x = 2;
1399 const int size_y = 2;
1400 const int size_z = 1;
1403 Hex::Document* doc = mon_ex.addDocument ();
1405 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1406 Hex::Vector* dir = doc->addVector (1,1,1);
1407 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1411 Hex::Matrix matrice;
1412 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1413 matrice.defTranslation (ecart);
1415 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1416 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1418 quad->setScalar (5);
1420 doc->saveVtk ("test_disco", nvtk);
1421 doc->disconnectQuad (hexa1, quad);
1422 // hexa1 ->transform (&matrice);
1423 doc->saveVtk ("test_disco", nvtk);
1425 // doc->dumpPropagation ();
1428 doc->save ("disco_all");
1431 // ======================================================== test_disconnect3
1432 // ==== disconnectVertex
1433 int test_disconnect3 (int nbargs, cpchar tabargs[])
1435 const int size_x = 2;
1436 const int size_y = 2;
1437 const int size_z = 1;
1440 Hex::Document* doc = mon_ex.addDocument ();
1442 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1444 Hex::Vector* dir = doc->addVector (1,1,1);
1445 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1449 Hex::Matrix matrice;
1450 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1451 matrice.defTranslation (ecart);
1453 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1454 Hex::Vertex* vertex = grid1->getVertexIJK (1,1,1);
1456 vertex->setScalar (5);
1458 doc->saveVtk ("test_disco", nvtk);
1460 doc->disconnectVertex (hexa1, vertex);
1461 // hexa1->transform (&matrice);
1462 doc->saveVtk ("test_disco", nvtk);
1464 // doc->dumpPropagation ();
1467 doc->save ("disco_all");
1470 // ======================================================== contraction
1471 void contraction (Hex::Hexa* hexa, Hex::Elements* grid)
1474 Hex::Real3 cg = { 0, 0, 0 };
1476 for (int nro=0; nro<Hex::HV_MAXI ; nro++)
1478 cg [0] += hexa->getVertex(nro)->getX()/Hex::HV_MAXI;
1479 cg [1] += hexa->getVertex(nro)->getY()/Hex::HV_MAXI;
1480 cg [2] += hexa->getVertex(nro)->getZ()/Hex::HV_MAXI;
1483 int nbvertex = grid->countVertex();
1484 const double coeff = 0.5;
1485 for (int nro=0; nro<nbvertex ; nro++)
1487 Hex::Vertex* pv = grid->getVertex(nro);
1488 Hex::Real3 pold = { pv->getX(), pv->getY(), pv->getZ() };
1490 for (int dd=0; dd<3 ; dd++)
1491 pnew [dd] = cg[dd] + coeff * (pold[dd]-cg[dd]);
1498 // ======================================================== test_disconnect
1499 // ==== Les 3 disconnect
1500 int test_disconnect (int nbargs, cpchar tabargs[])
1502 const int size_x = 2;
1503 const int size_y = 2;
1504 const int size_z = 1;
1507 Hex::Document* doc = mon_ex.addDocument ();
1509 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1510 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
1511 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
1513 Hex::Vector* dir = doc->addVector (1,1,1);
1514 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1515 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1516 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
1520 Hex::Matrix matrice;
1521 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1522 matrice.defTranslation (ecart);
1524 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1525 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1526 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
1528 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1529 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1530 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
1532 quad->setScalar (5);
1533 edge->setScalar (5);
1534 vertex->setScalar (5);
1536 doc->saveVtk ("test_disco", nvtk);
1537 doc->disconnectQuad (hexa1, quad);
1538 doc->saveVtk ("test_disco", nvtk);
1540 doc->disconnectEdge (hexa2, edge);
1541 doc->saveVtk ("test_disco", nvtk);
1543 doc->disconnectVertex (hexa3, vertex);
1544 doc->saveVtk ("test_disco", nvtk);
1546 // doc->dumpPropagation ();
1549 doc->save ("disco_all");
1552 // ======================================================== test_propagation
1553 int test_propagation ()
1555 const int size_x = 2;
1556 const int size_y = 1;
1557 const int size_z = 1;
1560 Hex::Document* doc = mon_ex.addDocument ();
1562 Hex::Vertex* orig = doc->addVertex (0,0,0);
1563 Hex::Vector* dir = doc->addVector (1,1,1);
1564 // Hex::Elements* grid =
1565 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1567 int nb = doc->countPropagation ();
1568 for (int nro=0 ; nro<nb ; nro++)
1570 Hex::Propagation* prop = doc ->getPropagation (nro);
1571 const Hex::Edges& table = prop->getEdges ();
1572 printf (" ____________________________________ Prop nro %d\n", nro);
1573 for (int ned=0 ; ned<(int)table.size() ; ned++)
1575 bool way = table [ned]->getWay ();
1580 table [ned]->getVertex (0)->printName (", ");
1581 table [ned]->getVertex (1)->printName (")\n");
1586 table [ned]->getVertex (1)->printName (", ");
1587 table [ned]->getVertex (0)->printName (")\n");
1593 doc->saveVtk ("test_propagation.vtk");
1594 doc->save ("test_propagation");
1598 // ======================================================== test_move
1601 const int size_x = 1;
1602 const int size_y = 1;
1603 const int size_z = 2;
1606 Hex::Document* doc = mon_ex.addDocument ();
1608 Hex::Vertex* orig = doc->addVertex (0,0,0);
1609 Hex::Vector* dir = doc->addVector (1,1,1);
1610 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1612 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
1613 Hex::Vector* devant = doc->addVector (5, 0, 0);
1614 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
1616 Hex::Matrix matrice;
1617 matrice.defTranslation (enhaut);
1619 Hex::Hexa* cube = grid->getHexa (1);
1620 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
1623 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1624 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
1625 Hex::Hexa* cube2 = grid2->getHexa (1);
1627 doc ->saveVtk ("move0.vtk");
1629 cube ->disconnectQuad (dessous);
1630 cube ->transform (&matrice);
1631 cube2->transform (&matrice);
1633 doc ->saveVtk ("move1.vtk");
1638 // ======================================================== test_transfo2
1639 int test_transfo2 (int nbargs, cpchar tabargs[])
1641 const int size_x = 1;
1642 const int size_y = 1;
1643 const int size_z = 2;
1646 cpchar fic_vtk = "transfo";
1649 Hex::Document* doc = mon_ex.addDocument ();
1652 Hex::Vertex* orig = doc->addVertex (0,0,0);
1653 Hex::Vector* dir = doc->addVector (1,1,1);
1654 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
1661 doc ->saveVtk (fic_vtk, nvtk);
1663 Hex::Vector* devant = doc->addVector (5, 0, 0);
1665 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1668 doc ->saveVtk (fic_vtk, nvtk);
1670 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1673 doc ->saveVtk (fic_vtk, nvtk);
1675 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1678 doc ->saveVtk (fic_vtk, nvtk);
1680 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1684 doc ->saveVtk (fic_vtk, nvtk);
1686 Hex::Vector* dir1 = doc->addVector (1,0,0);
1687 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1691 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1692 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1693 doc ->saveVtk (fic_vtk, nvtk);
1695 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1696 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1698 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1702 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1703 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1704 doc ->saveVtk (fic_vtk, nvtk);
1706 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1707 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1709 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1713 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1714 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1715 doc ->saveVtk (fic_vtk, nvtk);
1716 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1717 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1719 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1723 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1724 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1725 doc ->saveVtk (fic_vtk, nvtk);
1727 grid9->getHexa(0)->removeConnected ();
1728 doc ->saveVtk (fic_vtk, nvtk);
1732 // ======================================================== test_transfo
1733 int test_transfo (int nbargs, cpchar tabargs[])
1736 cpchar fic_vtk = "transfo";
1739 Hex::Document* doc = mon_ex.addDocument ();
1742 Hex::Vertex* orig = doc->addVertex (0,0,0);
1743 Hex::Vector* vx = doc->addVector (1,0,0);
1744 Hex::Vector* vz = doc->addVector (0,0,1);
1751 Hex::Elements* grid = doc->makeCylindrical (orig, vx,vz, dr, da, dl,
1756 doc ->saveVtk (fic_vtk, nvtk);
1757 Hex::Vector* devant = doc->addVector (10, 0, 0);
1759 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1762 doc ->saveVtk (fic_vtk, nvtk);
1766 // ======================================================== test_copy_document
1767 int test_copy_document (int nbargs, cpchar tabargs[])
1770 Hex::Document* doc = mon_ex.loadDocument ("Essai");
1771 doc ->saveVtk ("restore1.vtk");
1773 Hex::Document* clone = doc->copyDocument();
1774 clone->saveVtk ("restore2.vtk");
1778 // ======================================================== test_remove
1781 const int size_x = 2;
1782 const int size_y = 2;
1783 const int size_z = 2;
1786 Hex::Document* doc = mon_ex.addDocument ();
1788 Hex::Vertex* orig = doc->addVertex (0,0,0);
1789 Hex::Vertex* orig1 = doc->addVertex (6,0,0);
1790 Hex::Vector* dir = doc->addVector (1,1,1);
1791 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1792 doc->makeCartesian (orig1, dir, 1,1,1);
1793 doc->saveVtk ("removeConn1.vtk");
1795 Echo ("--------- Avant destruction");
1796 HexDisplay (doc->countVertex ());
1797 HexDisplay (doc->countEdge ());
1798 HexDisplay (doc->countQuad ());
1799 HexDisplay (doc->countHexa ());
1800 HexDisplay (doc->countUsedVertex ());
1801 HexDisplay (doc->countUsedEdge ());
1802 HexDisplay (doc->countUsedQuad ());
1803 HexDisplay (doc->countUsedHexa ());
1806 doc->removeConnectedHexa (grid->getHexaIJK (0,0,0));
1808 Echo ("--------- Apres destruction");
1809 HexDisplay (doc->countVertex ());
1810 HexDisplay (doc->countEdge ());
1811 HexDisplay (doc->countQuad ());
1812 HexDisplay (doc->countHexa ());
1814 HexDisplay (doc->countUsedVertex ());
1815 HexDisplay (doc->countUsedEdge ());
1816 HexDisplay (doc->countUsedQuad ());
1817 HexDisplay (doc->countUsedHexa ());
1818 doc->saveVtk ("removeConn2.vtk");
1822 // ================================================== init_vec
1823 void init_vec (Hex::RealVector& tab, double n0=0, double n1=0, double n2=0,
1824 double n3=0, double n4=0, double n5=0, double n6=0,
1825 double n7=0, double n8=0, double n9=0, double n10=0,
1826 double n11=0, double n12=0, double n13=0, double n14=0,
1827 double n15=0, double n16=0)
1829 if (n0>0.0) tab.push_back (n0);
1830 if (n1>0.0) tab.push_back (n1);
1831 if (n2>0.0) tab.push_back (n2);
1832 if (n3>0.0) tab.push_back (n3);
1833 if (n4>0.0) tab.push_back (n4);
1834 if (n5>0.0) tab.push_back (n5);
1835 if (n6>0.0) tab.push_back (n6);
1836 if (n7>0.0) tab.push_back (n7);
1837 if (n8>0.0) tab.push_back (n8);
1838 if (n9>0.0) tab.push_back (n9);
1840 if (n10>0.0) tab.push_back (n10);
1841 if (n11>0.0) tab.push_back (n11);
1842 if (n12>0.0) tab.push_back (n12);
1843 if (n13>0.0) tab.push_back (n13);
1844 if (n14>0.0) tab.push_back (n14);
1845 if (n15>0.0) tab.push_back (n15);
1846 if (n16>0.0) tab.push_back (n16);
1848 // ================================================== test_cylindricals
1849 int test_cylindricals (int nbargs, cpchar tabargs[])
1852 Hex::Document* doc = mon_ex.addDocument ();
1854 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
1855 Hex::Vector* vz = doc->addVector (0, 0, 1);
1856 Hex::Vector* vx = doc->addVector (1 ,0, 0);
1858 Hex::RealVector tdr, tda, tdl;
1861 init_vec (tdr, 2, 1, 0.5);
1862 init_vec (tda, 40, 35, 30, 25, 20, 15, 10, 5,
1863 5, 10, 15, 20, 25, 30, 35, 40);
1864 init_vec (tdl, 1, 2, 3 );
1866 init_vec (tdr, 1, 1, 1, 1);
1867 init_vec (tda, 45,45, 45,45, 45,45, 45,45 );
1868 init_vec (tdl, 1, 1, 1 );
1870 ****************** */
1873 init_vec (tdr, 1, 2, 1, 2);
1874 init_vec (tda, 20, 20, 20 );
1877 Hex::Elements* grid=doc->makeCylindricals (orig, vx,vz, tdr,tda,tdl, false);
1879 doc->saveVtk ("cylindricals.vtk");
1881 grid->clearAssociation();
1882 doc->clearAssociation();
1885 // ======================================================== test_edge
1886 int test_edge (int nbargs, cpchar tabargs[])
1889 Hex::Document* doc = mon_ex.addDocument ();
1891 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
1892 Hex::Vector* vx = doc->addVector (1 ,0, 0);
1893 doc->addEdge (orig, vx);
1895 HexDisplay (doc->countVertex());
1896 HexDisplay (doc->countEdge());
1900 // ======================================================== test_hexa
1901 int test_hexa (int nbargs, cpchar tabargs[])
1905 Hex::Document* doc1 = mon_ex.loadDocument ("bielle_triang");
1906 Hex::Document* doc2 = mon_ex.loadDocument ("bielle_triang");
1907 PutData (doc1->getName ());
1908 PutData (doc2->getName ());
1913 ier = test_cylindricals (nbargs, tabargs);
1914 ier = test_transfo (nbargs, tabargs);