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_asso_line
866 int test_asso_line (int nbargs, cpchar tabargs[])
869 Hex::Document* doc = mon_ex.addDocument ();
871 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
873 Hex::Vector* vz = doc->addVector (0,0,1);
874 Hex::Vector* vx = doc->addVector (1,0,0);
882 Hex::Elements *c1 = NULL;
884 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 360, dl,nr, ntheta, nl, true);
887 Hex::Edge* m_start = c1->getEdgeJ (nr, 1, 0);
889 for (int na=2 ; na<ntheta ; na++)
891 Hex::Edge* arete = c1->getEdgeJ (nr, na, 0);
892 arete->setScalar (5);
893 m_line.push_back (arete);
896 // m_line.push_back (c1->getEdgeJ (nr, 0, 2));
897 // m_line.push_back (NULL);
898 Hex::Shape* gstart = NULL;
900 double pstart = 0 , pend = 0;
902 int ier = doc-> associateOpenedLine (m_start, m_line,
903 gstart, pstart, gline, pend);
905 doc->saveVtk ("asso_line.vtk");
907 m_line.push_back (c1->getEdgeJ (nr, 0, 0));
908 Hex::Vertex* m_first = m_start->getVertex (Hex::V_AMONT);
909 ier = doc-> associateClosedLine (m_first, m_start, m_line,
910 gstart, pstart, false, gline);
916 // ===================================================== test_cylindrical
917 int test_cylindrical (int nbargs, cpchar tabargs[])
919 cpchar fic_vtk = "cylindre";
922 Hex::Document* doc = mon_ex.addDocument ();
924 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
925 Hex::Vector* vx = doc->addVector (1, 0, 0);
926 Hex::Vector* vz = doc->addVector (0, 0, 1);
938 na = atoi (tabargs[1]);
946 da = atof (tabargs[2]);
950 // Hex::Cylinder* cyl = doc->addCylinder (orig, vz, nr, nl);
951 // Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
952 doc->makeCylindrical (orig,vx, vz, dr,da,dl, nr,na, nl, true);
953 doc ->saveVtk (fic_vtk, na);
956 // ===================================================== test_cylinder
957 int test_cylinder (int nbargs, cpchar tabargs[])
960 cpchar fic_vtk = "cylindre";
963 Hex::Document* doc = mon_ex.addDocument ();
965 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
966 Hex::Vector* vx = doc->addVector (1, 0, 0);
967 Hex::Vector* vz = doc->addVector (0, 0, 1);
976 Hex::Cylinder* cyl = doc->addCylinder (orig, vz, rayon, hauteur);
977 doc->makeCylinder (cyl, vx, nr, na, nl);
978 doc ->saveVtk (fic_vtk, nvtk);
981 // ===================================================== test_xml_cylinder
982 int test_xml_cylinder (int nbargs, cpchar tabargs[])
985 cpchar fic_vtk = "cylindre";
988 Hex::Document* doc = mon_ex.addDocument ();
990 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
991 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
992 Hex::Vector* vz = doc->addVector (0,0,1);
993 Hex::Vector* vx = doc->addVector (1,0,0);
997 orig1->setName ("orig1");
998 orig2->setName ("orig2");
1006 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
1007 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
1009 Hex::Elements* grid = doc->makeCylinder (cyl, vx, nr, na, nl);
1010 doc ->saveVtk (fic_vtk, nvtk);
1012 Hex::Group* groupe = doc->addGroup ("GroupeAMA", Hex::HexaCell);
1013 groupe->addElement (grid->getHexaIJK (0,0,0));
1014 groupe->addElement (grid->getHexaIJK (1,0,0));
1015 groupe->addElement (grid->getHexaIJK (0,1,0));
1016 groupe->addElement (grid->getHexaIJK (1,1,0));
1017 groupe->addElement (grid->getHexaIJK (2,1,0));
1019 grid->getHexaIJK (0,0,0)->setName ("Hexa0");
1020 grid->getQuadIJ (0,0,0)->setName ("QuadIJ0");
1021 grid->getEdgeK (0,0,0)->setName ("EdgeK0");
1023 doc->makePipe (pipe, vx, nr, na, nl);
1024 doc ->saveVtk (fic_vtk, nvtk);
1025 doc->save ("cylindre");
1029 // ===================================================== test_pipe
1030 int test_pipe (int nbargs, cpchar tabargs[])
1033 cpchar fic_vtk = "cylindre";
1036 Hex::Document* doc = mon_ex.addDocument ();
1038 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
1039 Hex::Vector* vx = doc->addVector (1,0,0);
1040 Hex::Vector* vy = doc->addVector (0,1,0);
1048 Hex::Pipe* pipe = doc->addPipe (orig1, vx, nri, nre, nl);
1049 doc->makePipe (pipe, vy, nr, na, nl);
1050 doc ->saveVtk (fic_vtk, nvtk);
1054 // ======================================================== del_hexa
1055 void del_hexa (Hex::CrossElements* gr, int cyl, int ni, int nj, int nk, int dr)
1057 Hex::Hexa* hexa = gr->getHexaIJK (cyl, ni, nj, nk);
1065 // ======================================================== del_tranche
1066 int del_tranche (Hex::CrossElements* grid, int cyl, int ni, int nk, int dr=1)
1068 for (int nj = 0 ; nj < 8 ; nj++)
1069 del_hexa (grid, cyl, ni, nj, nk, dr);
1073 printf ("del_tranche (g=%d, i=%d, k=%d) : fic = %d\n",
1074 cyl, ni, nk, nbr_vtk-1);
1077 // ======================================================== test_joint2
1078 int test_joint2 (int nbargs, cpchar tabargs[])
1081 docu = mon_ex.addDocument ();
1082 case_name = "pb_joint";
1084 Hex::Vector* vx = docu->addVector (1, 0, 0);
1085 Hex::Vector* vz = docu->addVector (0, 0, 1);
1086 Hex::Vertex* hori = docu->addVertex (0, 0, 0);
1096 Hex::Elements *bgrid=NULL, *hgrid=NULL;
1098 hgrid = docu->makeCylindrical (hori, vx,vz, dr,da,dl, nr,na,nl, fill);
1102 Hex::Vertex* bori = docu->addVertex (0, 0, -5);
1103 bgrid = docu->makeCylindrical (bori, vx,vz, dr,da,dl, nr,na,nl, fill);
1106 Hex::Quads qsource, qdest;
1107 printf (" Source = ");
1108 for (int ny=0 ; ny< na ; ny++)
1110 Hex::Quad* quad = hgrid->getQuadIJ (0, ny, 0);
1112 qsource.push_back (quad);
1115 for (int ny=0 ; ny<4 ; ny++)
1117 Hex::Quad* quad = hgrid->getKerHQuad (ny);
1119 qsource.push_back (quad);
1124 printf (" Cible = ");
1125 for (int ny=0 ; ny< na ; ny++)
1127 Hex::Quad* quad = bgrid->getQuadIJ (0, ny, 1);
1129 qdest.push_back (quad);
1132 for (int ny=0 ; ny<4 ; ny++)
1134 Hex::Quad* quad = bgrid->getKerHQuad (ny+4);
1136 qdest.push_back (quad);
1139 docu ->setLevel (1);
1140 Hex::Quad* cible = bgrid->getQuadIJ (0, 1, 1);
1141 Hex::Vertex* vc1 = bgrid->getVertexIJK (0, 1, 1);
1142 Hex::Vertex* vc2 = bgrid->getVertexIJK (1, 1, 1);
1144 Hex::Vertex* vs1 = hgrid->getVertexIJK (0, 0, 0);
1145 Hex::Vertex* vs2 = hgrid->getVertexIJK (1, 0, 0);
1147 docu->joinQuads (qsource, cible, vs1, vc1, vs2, vc2, 1);
1152 // ======================================================== test_croix
1153 int test_croix (int nbargs, cpchar tabargs[])
1156 docu = mon_ex.addDocument ();
1158 Hex::Vertex* ori1 = docu->addVertex ( 100,0,0);
1159 Hex::Vertex* ori2 = docu->addVertex (-5,0,5);
1160 Hex::Vector* vz = docu->addVector ( 0,0,1);
1161 Hex::Vector* vx = docu->addVector ( 1,0,0);
1168 Hex::Cylinder* cyl1 = docu->addCylinder (ori1, vz, r1, l1);
1169 Hex::Cylinder* cyl2 = docu->addCylinder (ori2, vx, r2, l2);
1170 Hex::CrossElements* grid = docu->makeCylinders (cyl1, cyl2);
1172 case_name = "croix";
1174 PutData ((BadElement (grid)));
1177 Hex::Edge* pipo = docu->addEdge (ori1, ori1);
1178 PutData (pipo->isValid());
1179 PutData ((BadElement (pipo)));
1182 del_tranche (grid, 0, 1, 0);
1183 del_tranche (grid, 0, 1, 5);
1185 del_tranche (grid, 1, 1, 0);
1186 del_tranche (grid, 1, 1, 3);
1188 del_tranche (grid, 1, 0, 0);
1189 del_tranche (grid, 1, 0, 3);
1191 del_tranche (grid, 0, 0, 0);
1192 del_tranche (grid, 0, 0, 5);
1193 del_tranche (grid, 0, 0, 1);
1194 del_tranche (grid, 0, 0, 2);
1195 del_tranche (grid, 0, 0, 3);
1196 del_tranche (grid, 0, 0, 4);
1199 del_tranche (grid, 1, 1, 1, 2);
1201 del_tranche (grid, 0, 1, 1, 2);
1202 del_tranche (grid, 0, 1, 4, 2);
1203 del_tranche (grid, 0, 1, 3, 2);
1204 del_tranche (grid, 0, 1, 2, 2);
1206 del_tranche (grid, 1, 1, 2, 2);
1209 // ======================================================== test_pipes
1210 int test_pipes (int nbargs, cpchar tabargs[])
1213 Hex::Document* doc = mon_ex.addDocument ();
1215 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1216 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1217 Hex::Vector* vz = doc->addVector ( 0,0,1);
1218 Hex::Vector* vx = doc->addVector ( 1,0,0);
1220 // double h1 = 5, ri1 = 1, re1 = 2;
1221 double h1 = 10, ri1 = 1, re1 = 2;
1222 double h2 = 10, ri2 = 2, re2 = 3;
1224 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
1225 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
1226 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
1232 del_tranche (grid, 0, 1, 0);
1233 del_tranche (grid, 0, 1, 5);
1235 del_tranche (grid, 1, 1, 0);
1236 del_tranche (grid, 1, 1, 3);
1239 del_tranche (grid, 1, 1, 1, 2);
1241 del_tranche (grid, 0, 1, 1, 2);
1242 del_tranche (grid, 0, 1, 4, 2);
1243 del_tranche (grid, 0, 1, 3, 2);
1244 del_tranche (grid, 0, 1, 2, 2);
1246 del_tranche (grid, 1, 1, 2, 2);
1247 /* ***************************************************
1249 int nbz [2] = { 8, 4 };
1251 for (int cyl = 0 ; cyl < 2 ; cyl++)
1252 for (int nk = 0 ; nk < nbz[cyl] ; nk++)
1253 for (int nj = 0 ; nj < 4 ; nj++)
1256 if (cyl==0) jj = (jj+6) MODULO 8 ;
1257 Hex::Hexa* hexa = grid->getHexaIJK (cyl, ni, jj, nk);
1261 doc->saveVtk (case_name, nbr_vtk);
1264 *************************************************** */
1267 // ======================================================== test_lorraine
1268 int test_lorraine(int nbargs, cpchar tabargs[])
1271 Hex::Document* doc = mon_ex.addDocument ();
1273 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
1274 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
1275 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
1276 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
1278 Hex::Vector* vz = doc->addVector ( 0,0,1);
1279 Hex::Vector* vx = doc->addVector ( 1,0,0);
1288 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
1289 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
1291 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
1292 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
1294 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
1295 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
1297 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
1298 const int nx_int = 0;
1299 const int nx_ext = 1;
1301 // vc2 = grid1->getVertexIJK (Hex::CylBig, 0,0,0);
1302 // vc3 = grid2->getVertexIJK (Hex::CylSmall, 0,0,0);
1304 Hex::Quad* qb = grid1-> getQuadIJ (Hex::CylBig, nx_ext, Hex::S_E, 4);
1305 Hex::Quad* qh = grid2-> getQuadIJ (Hex::CylSmall, nx_ext, Hex::S_N, 0);
1307 Hex::Vertex* vb0 = qb->getVertex (3);
1308 Hex::Vertex* vb1 = qb->getVertex (2);
1309 Hex::Vertex* vh0 = qh->getVertex (0);
1310 Hex::Vertex* vh1 = qh->getVertex (1);
1312 vb0 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_E, 4); // cible
1313 vb1 = grid1->getVertexIJK (Hex::CylBig, 2, Hex::S_NE, 4);
1314 vh0 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_N, 0); // depart
1315 vh1 = grid2->getVertexIJK (Hex::CylSmall, 2, Hex::S_NW, 0);
1326 hliste.push_back (qh);
1327 for (int ny=1; ny<Hex::S_MAXI; ny++)
1329 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
1330 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_ext, ns, 0));
1333 for (int ny=0; ny<4 ; ny++)
1334 hliste.push_back (grid2->getQuadIJ (Hex::CylSmall, nx_int, ny, 0));
1337 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, hauteur);
1338 doc->saveVtk ("lorraine.vtk");
1343 // ======================================================== test_disconnect2
1344 // === Disconnect Edge seul
1345 int test_disconnect2 (int nbargs, cpchar tabargs[])
1347 const int size_x = 2;
1348 const int size_y = 2;
1349 const int size_z = 1;
1352 Hex::Document* doc = mon_ex.addDocument ();
1354 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1355 Hex::Vector* dir = doc->addVector (1,1,1);
1356 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1362 Hex::Matrix matrice;
1363 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1364 matrice.defTranslation (ecart);
1366 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1367 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1369 hexa2->setScalar (2);
1370 edge->setScalar (5);
1372 doc->saveVtk ("test_disco", nvtk);
1376 Hex::Elements* disco_edges = doc->disconnectEdge (hexa2, edge);
1377 HexDisplay (disco_edges->countVertex());
1378 HexDisplay (disco_edges->countEdge());
1379 HexDisplay (disco_edges->countQuad());
1380 HexDisplay (disco_edges->countHexa());
1382 // hexa2->transform (&matrice);
1383 /**********************************
1384 for (int ns=0; ns<disco_edges->countVertex(); ns++)
1386 Hex::Vertex* sommet = disco_edges->getVertex(ns);
1387 sommet->setX (sommet->getX()+0.5);
1388 sommet->setY (sommet->getY()+0.5);
1390 ********************************* */
1392 doc->saveVtk ("test_disco", nvtk);
1393 doc->save ("test_disco");
1400 // ======================================================== test_disconnect4
1401 // === Disconnect Edges
1402 int test_disconnect4 (int nbargs, cpchar tabargs[])
1404 const int size_x = 1;
1405 const int size_y = 2;
1406 const int size_z = 2;
1409 Hex::Document* doc = mon_ex.addDocument ();
1411 Hex::Vertex* orig2 = doc->addVertex (0,0,0);
1412 Hex::Vector* vx = doc->addVector (1,0,0);
1413 Hex::Vector* vy = doc->addVector (0,1,0);
1414 Hex::Vector* vz = doc->addVector (0,0,1);
1415 Hex::Elements* grid2 = doc->makeCartesian (orig2, vx,vy,vz, size_x,size_y,size_z);
1422 for (int nk=0 ; nk< size_z; nk++)
1424 Hex::Hexa* hexa2 = grid2->getHexaIJK (0,0,nk);
1425 Hex::Edge* edge = grid2->getEdgeK (0,1,nk);
1427 hexa2->setScalar (2);
1428 edge->setScalar (5);
1429 t_hexas.push_back (hexa2);
1430 t_edges.push_back (edge);
1436 doc->saveVtk ("test_disco", nvtk);
1437 /* Hex::Elements* disco_edges = */ doc->disconnectEdges (t_hexas, t_edges);
1438 doc->saveVtk ("test_disco", nvtk);
1440 // hexa2->dumpFull ();
1445 // ======================================================== test_disconnect
1446 // ==== Disconnect Quad
1447 int test_disconnect1 (int nbargs, cpchar tabargs[])
1449 const int size_x = 2;
1450 const int size_y = 2;
1451 const int size_z = 1;
1454 Hex::Document* doc = mon_ex.addDocument ();
1456 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1457 Hex::Vector* dir = doc->addVector (1,1,1);
1458 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1462 Hex::Matrix matrice;
1463 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1464 matrice.defTranslation (ecart);
1466 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1467 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1469 quad->setScalar (5);
1471 doc->saveVtk ("test_disco", nvtk);
1472 doc->disconnectQuad (hexa1, quad);
1473 // hexa1 ->transform (&matrice);
1474 doc->saveVtk ("test_disco", nvtk);
1476 // doc->dumpPropagation ();
1479 doc->save ("disco_all");
1482 // ======================================================== test_disconnect3
1483 // ==== disconnectVertex
1484 int test_disconnect3 (int nbargs, cpchar tabargs[])
1486 const int size_x = 2;
1487 const int size_y = 2;
1488 const int size_z = 1;
1491 Hex::Document* doc = mon_ex.addDocument ();
1493 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1495 Hex::Vector* dir = doc->addVector (1,1,1);
1496 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1500 Hex::Matrix matrice;
1501 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1502 matrice.defTranslation (ecart);
1504 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1505 Hex::Vertex* vertex = grid1->getVertexIJK (1,1,1);
1507 vertex->setScalar (5);
1509 doc->saveVtk ("test_disco", nvtk);
1511 doc->disconnectVertex (hexa1, vertex);
1512 // hexa1->transform (&matrice);
1513 doc->saveVtk ("test_disco", nvtk);
1515 // doc->dumpPropagation ();
1518 doc->save ("disco_all");
1521 // ======================================================== contraction
1522 void contraction (Hex::Hexa* hexa, Hex::Elements* grid)
1525 Hex::Real3 cg = { 0, 0, 0 };
1527 for (int nro=0; nro<Hex::HV_MAXI ; nro++)
1529 cg [0] += hexa->getVertex(nro)->getX()/Hex::HV_MAXI;
1530 cg [1] += hexa->getVertex(nro)->getY()/Hex::HV_MAXI;
1531 cg [2] += hexa->getVertex(nro)->getZ()/Hex::HV_MAXI;
1534 int nbvertex = grid->countVertex();
1535 const double coeff = 0.5;
1536 for (int nro=0; nro<nbvertex ; nro++)
1538 Hex::Vertex* pv = grid->getVertex(nro);
1539 Hex::Real3 pold = { pv->getX(), pv->getY(), pv->getZ() };
1541 for (int dd=0; dd<3 ; dd++)
1542 pnew [dd] = cg[dd] + coeff * (pold[dd]-cg[dd]);
1549 // ======================================================== test_disconnect
1550 // ==== Les 3 disconnect
1551 int test_disconnect (int nbargs, cpchar tabargs[])
1553 const int size_x = 2;
1554 const int size_y = 2;
1555 const int size_z = 1;
1558 Hex::Document* doc = mon_ex.addDocument ();
1560 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
1561 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
1562 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
1564 Hex::Vector* dir = doc->addVector (1,1,1);
1565 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
1566 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
1567 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
1571 Hex::Matrix matrice;
1572 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
1573 matrice.defTranslation (ecart);
1575 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
1576 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
1577 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
1579 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
1580 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
1581 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
1583 quad->setScalar (5);
1584 edge->setScalar (5);
1585 vertex->setScalar (5);
1587 doc->saveVtk ("test_disco", nvtk);
1588 doc->disconnectQuad (hexa1, quad);
1589 doc->saveVtk ("test_disco", nvtk);
1591 doc->disconnectEdge (hexa2, edge);
1592 doc->saveVtk ("test_disco", nvtk);
1594 doc->disconnectVertex (hexa3, vertex);
1595 doc->saveVtk ("test_disco", nvtk);
1597 // doc->dumpPropagation ();
1600 doc->save ("disco_all");
1603 // ======================================================== test_propagation
1604 int test_propagation ()
1606 const int size_x = 2;
1607 const int size_y = 1;
1608 const int size_z = 1;
1611 Hex::Document* doc = mon_ex.addDocument ();
1613 Hex::Vertex* orig = doc->addVertex (0,0,0);
1614 Hex::Vector* dir = doc->addVector (1,1,1);
1615 // Hex::Elements* grid =
1616 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1618 int nb = doc->countPropagation ();
1619 for (int nro=0 ; nro<nb ; nro++)
1621 Hex::Propagation* prop = doc ->getPropagation (nro);
1622 const Hex::Edges& table = prop->getEdges ();
1623 printf (" ____________________________________ Prop nro %d\n", nro);
1624 for (int ned=0 ; ned<(int)table.size() ; ned++)
1626 bool way = table [ned]->getWay ();
1631 table [ned]->getVertex (0)->printName (", ");
1632 table [ned]->getVertex (1)->printName (")\n");
1637 table [ned]->getVertex (1)->printName (", ");
1638 table [ned]->getVertex (0)->printName (")\n");
1644 doc->saveVtk ("test_propagation.vtk");
1645 doc->save ("test_propagation");
1649 // ======================================================== test_move
1652 const int size_x = 1;
1653 const int size_y = 1;
1654 const int size_z = 2;
1657 Hex::Document* doc = mon_ex.addDocument ();
1659 Hex::Vertex* orig = doc->addVertex (0,0,0);
1660 Hex::Vector* dir = doc->addVector (1,1,1);
1661 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1663 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
1664 Hex::Vector* devant = doc->addVector (5, 0, 0);
1665 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
1667 Hex::Matrix matrice;
1668 matrice.defTranslation (enhaut);
1670 Hex::Hexa* cube = grid->getHexa (1);
1671 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
1674 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1675 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
1676 Hex::Hexa* cube2 = grid2->getHexa (1);
1678 doc ->saveVtk ("move0.vtk");
1680 cube ->disconnectQuad (dessous);
1681 cube ->transform (&matrice);
1682 cube2->transform (&matrice);
1684 doc ->saveVtk ("move1.vtk");
1689 // ======================================================== test_transfo2
1690 int test_transfo2 (int nbargs, cpchar tabargs[])
1692 const int size_x = 1;
1693 const int size_y = 1;
1694 const int size_z = 2;
1697 cpchar fic_vtk = "transfo";
1700 Hex::Document* doc = mon_ex.addDocument ();
1703 Hex::Vertex* orig = doc->addVertex (0,0,0);
1704 Hex::Vector* dir = doc->addVector (1,1,1);
1705 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
1712 doc ->saveVtk (fic_vtk, nvtk);
1714 Hex::Vector* devant = doc->addVector (5, 0, 0);
1716 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1719 doc ->saveVtk (fic_vtk, nvtk);
1721 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1724 doc ->saveVtk (fic_vtk, nvtk);
1726 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1729 doc ->saveVtk (fic_vtk, nvtk);
1731 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1735 doc ->saveVtk (fic_vtk, nvtk);
1737 Hex::Vector* dir1 = doc->addVector (1,0,0);
1738 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1742 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1743 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1744 doc ->saveVtk (fic_vtk, nvtk);
1746 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1747 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1749 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1753 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1754 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1755 doc ->saveVtk (fic_vtk, nvtk);
1757 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1758 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1760 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1764 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1765 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1766 doc ->saveVtk (fic_vtk, nvtk);
1767 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1768 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1770 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1774 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1775 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1776 doc ->saveVtk (fic_vtk, nvtk);
1778 grid9->getHexa(0)->removeConnected ();
1779 doc ->saveVtk (fic_vtk, nvtk);
1783 // ======================================================== test_transfo
1784 int test_transfo (int nbargs, cpchar tabargs[])
1787 cpchar fic_vtk = "transfo";
1790 Hex::Document* doc = mon_ex.addDocument ();
1793 Hex::Vertex* orig = doc->addVertex (0,0,0);
1794 Hex::Vector* vx = doc->addVector (1,0,0);
1795 Hex::Vector* vz = doc->addVector (0,0,1);
1802 Hex::Elements* grid = doc->makeCylindrical (orig, vx,vz, dr, da, dl,
1807 doc ->saveVtk (fic_vtk, nvtk);
1808 Hex::Vector* devant = doc->addVector (10, 0, 0);
1810 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1813 doc ->saveVtk (fic_vtk, nvtk);
1817 // ======================================================== test_copy_document
1818 int test_copy_document (int nbargs, cpchar tabargs[])
1821 Hex::Document* doc = mon_ex.loadDocument ("Essai");
1822 doc ->saveVtk ("restore1.vtk");
1824 Hex::Document* clone = doc->copyDocument();
1825 clone->saveVtk ("restore2.vtk");
1829 // ======================================================== test_remove
1832 const int size_x = 2;
1833 const int size_y = 2;
1834 const int size_z = 2;
1837 Hex::Document* doc = mon_ex.addDocument ();
1839 Hex::Vertex* orig = doc->addVertex (0,0,0);
1840 Hex::Vertex* orig1 = doc->addVertex (6,0,0);
1841 Hex::Vector* dir = doc->addVector (1,1,1);
1842 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
1843 doc->makeCartesian (orig1, dir, 1,1,1);
1844 doc->saveVtk ("removeConn1.vtk");
1846 Echo ("--------- Avant destruction");
1847 HexDisplay (doc->countVertex ());
1848 HexDisplay (doc->countEdge ());
1849 HexDisplay (doc->countQuad ());
1850 HexDisplay (doc->countHexa ());
1851 HexDisplay (doc->countUsedVertex ());
1852 HexDisplay (doc->countUsedEdge ());
1853 HexDisplay (doc->countUsedQuad ());
1854 HexDisplay (doc->countUsedHexa ());
1857 doc->removeConnectedHexa (grid->getHexaIJK (0,0,0));
1859 Echo ("--------- Apres destruction");
1860 HexDisplay (doc->countVertex ());
1861 HexDisplay (doc->countEdge ());
1862 HexDisplay (doc->countQuad ());
1863 HexDisplay (doc->countHexa ());
1865 HexDisplay (doc->countUsedVertex ());
1866 HexDisplay (doc->countUsedEdge ());
1867 HexDisplay (doc->countUsedQuad ());
1868 HexDisplay (doc->countUsedHexa ());
1869 doc->saveVtk ("removeConn2.vtk");
1873 // ================================================== init_vec
1874 void init_vec (Hex::RealVector& tab, double n0=0, double n1=0, double n2=0,
1875 double n3=0, double n4=0, double n5=0, double n6=0,
1876 double n7=0, double n8=0, double n9=0, double n10=0,
1877 double n11=0, double n12=0, double n13=0, double n14=0,
1878 double n15=0, double n16=0)
1880 if (n0>0.0) tab.push_back (n0);
1881 if (n1>0.0) tab.push_back (n1);
1882 if (n2>0.0) tab.push_back (n2);
1883 if (n3>0.0) tab.push_back (n3);
1884 if (n4>0.0) tab.push_back (n4);
1885 if (n5>0.0) tab.push_back (n5);
1886 if (n6>0.0) tab.push_back (n6);
1887 if (n7>0.0) tab.push_back (n7);
1888 if (n8>0.0) tab.push_back (n8);
1889 if (n9>0.0) tab.push_back (n9);
1891 if (n10>0.0) tab.push_back (n10);
1892 if (n11>0.0) tab.push_back (n11);
1893 if (n12>0.0) tab.push_back (n12);
1894 if (n13>0.0) tab.push_back (n13);
1895 if (n14>0.0) tab.push_back (n14);
1896 if (n15>0.0) tab.push_back (n15);
1897 if (n16>0.0) tab.push_back (n16);
1899 // ================================================== test_cylindricals
1900 int test_cylindricals (int nbargs, cpchar tabargs[])
1903 Hex::Document* doc = mon_ex.addDocument ();
1905 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
1906 Hex::Vector* vz = doc->addVector (0, 0, 1);
1907 Hex::Vector* vx = doc->addVector (1 ,0, 0);
1909 Hex::RealVector tdr, tda, tdl;
1912 init_vec (tdr, 2, 1, 0.5);
1913 init_vec (tda, 40, 35, 30, 25, 20, 15, 10, 5,
1914 5, 10, 15, 20, 25, 30, 35, 40);
1915 init_vec (tdl, 1, 2, 3 );
1917 init_vec (tdr, 1, 1, 1, 1);
1918 init_vec (tda, 45,45, 45,45, 45,45, 45,45 );
1919 init_vec (tdl, 1, 1, 1 );
1921 ****************** */
1924 init_vec (tdr, 1, 2, 1, 2);
1925 init_vec (tda, 20, 20, 20 );
1928 Hex::Elements* grid=doc->makeCylindricals (orig, vx,vz, tdr,tda,tdl, false);
1930 doc->saveVtk ("cylindricals.vtk");
1932 grid->clearAssociation();
1933 doc->clearAssociation();
1936 // ======================================================== test_edge
1937 int test_edge (int nbargs, cpchar tabargs[])
1940 Hex::Document* doc = mon_ex.addDocument ();
1942 Hex::Vertex* orig = doc->addVertex (0, 0, 0);
1943 Hex::Vector* vx = doc->addVector (1 ,0, 0);
1944 doc->addEdge (orig, vx);
1946 HexDisplay (doc->countVertex());
1947 HexDisplay (doc->countEdge());
1951 // ======================================================== test_hexa
1952 int test_hexa (int nbargs, cpchar tabargs[])
1956 Hex::Document* doc1 = mon_ex.loadDocument ("bielle_triang");
1957 Hex::Document* doc2 = mon_ex.loadDocument ("bielle_triang");
1958 PutData (doc1->getName ());
1959 PutData (doc2->getName ());
1964 ier = test_cylindricals (nbargs, tabargs);
1965 ier = test_transfo (nbargs, tabargs);