1 // Copyright (C) 2009-2012 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include <cppunit/extensions/HelperMacros.h>
23 #include "hexa_base.hxx"
25 #include "HexDocument.hxx"
26 #include "HexElements.hxx"
27 #include "HexCrossElements.hxx"
29 #include "HexHexa.hxx"
30 #include "HexQuad.hxx"
31 #include "HexEdge.hxx"
32 #include "HexVertex.hxx"
34 #include "HexPropagation.hxx"
36 #include "HexMatrix.hxx"
38 #include "ModelTest.hxx"
40 CPPUNIT_TEST_SUITE_REGISTRATION( ModelTest );
43 ModelTest::ModelTest(void)
45 // _myHexEngine = new HEXA_NS::Hex();
46 // _myDoc= _myHexEngine->addDocument();
49 ModelTest::~ModelTest(void)
52 // delete _myHexEngine; //CS_TODO : Crash
56 // ======================================================== print_propagations
57 void ModelTest::_print_propagations (Hex::Document* doc)
59 int nb = doc->countPropagation ();
61 for (int nro=0 ; nro<nb ; nro++)
63 Hex::Propagation* prop = doc ->getPropagation (nro);
64 const Hex::Edges& table = prop->getEdges ();
65 printf (" ____________________________________ Prop nro %d\n", nro);
66 for (int ned=0 ; ned<(int)table.size() ; ned++)
68 bool way = table [ned]->getWay ();
69 Hex::Edge* edge = table [ned];
70 Hex::Vertex* v0 = edge->getVertex (0);
71 Hex::Vertex* v1 = edge->getVertex (1);
77 v1->printName (")\n");
82 v0->printName (")\n");
88 // // ======================================================== Test_sphere
89 // void ModelTest::Test_sphere ()
92 // Hex::Document* doc = mon_ex.addDocument ();
93 // Hex::Vertex* orig = doc->addVertex (0,0,0);
97 // Hex::Vector* decal = doc->addVector (1,1,1);
98 // Hex::Elements* sphere = doc->makeSpherical (orig, decal, ncouches, k);
100 // for (int nc=0 ; nc <= ncouches ; nc++)
102 // Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
104 // // sphere->getStrate (nc, Hex::Q_A)->remove ();
105 // // sphere->getStrate (nc, Hex::Q_B)->remove ();
108 // sphere->saveVtk ("sphere.vtk");
109 // CPPUNIT_ASSERT( true );
111 // ======================================================== Test_cartesi1
112 void ModelTest::Test_cartesi1 ()
115 const int size_x = 15;
116 const int size_y = 12;
117 const int size_z = 8;
120 Hex::Document* doc = mon_ex.addDocument ("foo");
121 Hex::Vertex* orig = doc->addVertex (0,0,0);
123 Hex::Vector* dir = doc->addVector (1,1,1);
124 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
126 // print_propagations (doc);
128 for (int nz=0; nz<size_z ; nz++)
129 for (int ny=nz+1; ny<size_y-nz-1 ; ny++)
130 for (int nx=nz+1; nx<size_x-nz-1 ; nx++)
132 Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
137 _print_propagations (doc);
138 grid->saveVtk ("grid_cart.vtk");
141 CPPUNIT_ASSERT( true );
143 // ======================================================== afficher
144 #define Afficher(elt) _afficher (#elt, elt)
145 int ModelTest::_afficher (cpchar nom, Hex::EltBase* elt)
149 printf (" .... %s = 0x0\n", nom);
153 printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
156 // ======================================================== Test_find
157 void ModelTest::Test_find ()
160 const int size_x = 2;
161 const int size_y = 2;
162 const int size_z = 2;
165 Hex::Document* doc = mon_ex.addDocument ("foo");
167 Hex::Vertex* orig = doc->addVertex (0,0,0);
168 Hex::Vector* dir = doc->addVector (1,1,1);
169 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
171 grid->saveVtk ("mini1.vtk");
174 Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
176 Afficher ( v00 = doc->findVertex (0, 0, 0));
177 Afficher ( v02 = doc->findVertex (1, 1, 0));
178 Afficher ( v06 = doc->findVertex (1, 1, 1));
179 Afficher ( v08 = doc->findVertex (2, 1, 0));
180 Afficher ( v10 = doc->findVertex (2, 1, 1));
181 Afficher ( v22 = doc->findVertex (2, 1, 2));
182 Afficher ( v26 = doc->findVertex (2, 2, 2));
186 Afficher (doc->findEdge (v06, v10));
187 Afficher (doc->findEdge (v10, v06));
190 Afficher (doc->findQuad (v02, v10));
191 Afficher (doc->findQuad (v06, v08));
192 Afficher (doc->findQuad (v02, v06));
195 Afficher (doc->findHexa (v00, v06));
196 Afficher (doc->findHexa (v06, v26));
197 Afficher (doc->findHexa (v26, v06));
199 CPPUNIT_ASSERT( true );
201 // ======================================================== Test_joint
202 void ModelTest::Test_joint ()
210 Hex::Document* doc = mon_ex.addDocument ("foo");
212 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
213 Hex::Vector* dir = doc->addVector (1,1,1);
215 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
217 Hex::Vertex* orig2 = doc->addVertex (dimx/2.0,0,8);
218 Hex::Vector* vectj = doc->addVector (0,1,0);
219 Hex::Vector* vecti = doc->addVector (1,0,0);
220 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vecti, vectj,
221 1, 180, 1, dimz,dimy,dimx);
225 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
226 Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my);
229 Hex::Vertex* v1 = prems->getVertex (0);
230 Hex::Vertex* v2 = cible->getVertex (0);
231 Hex::Vertex* v3 = prems->getVertex (1);
232 Hex::Vertex* v4 = cible->getVertex (3);
237 liste.push_back (prems);
238 for (int nx=0; nx<dimx; nx++)
240 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
242 for (int ny=0; ny<dimy; ny++)
244 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
246 // Hex::Elements* joint =
248 doc->joinQuads (liste, cible, v1, v2, v3, v4, 5);
249 doc->saveVtk ("joint.vtk");
251 CPPUNIT_ASSERT( true );
253 // ======================================================== Test_prism
254 void ModelTest::Test_prism ()
262 Hex::Document* doc = mon_ex.addDocument ("foo");
264 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
265 Hex::Vector* dir = doc->addVector (1,1,1);
267 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
271 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
274 liste.push_back (prems);
275 for (int nx=0; nx<dimx; nx++)
277 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
279 for (int ny=0; ny<dimy; ny++)
281 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
283 doc->prismQuads (liste, dir, 5);
284 doc->saveVtk ("prisme.vtk");
286 CPPUNIT_ASSERT( true );
290 // ======================================================== Test_prism2
291 void ModelTest::Test_prism2 ()
299 Hex::Document* doc = mon_ex.addDocument ("foo");
301 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
302 Hex::Vector* dir = doc->addVector (1,1,1);
304 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
308 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
309 Hex::Elements* prism = doc->prismQuad(prems, dir, 5);
311 int nbHexa = prism->countHexa();
312 std::cout << "nbHexa " << nbHexa << std::endl;
313 Hex::Hexa* hp1 = prism->getHexa(1);
314 std::cout << "getHexa(1) " << hp1 << std::endl;
315 Hex::Vertex* hp1_v0 = hp1->getVertex(0);
316 std::cout << "getVertex ->" << hp1_v0 << std::endl;
317 doc->saveVtk ("prisme2.vtk");
319 CPPUNIT_ASSERT( true );
329 // ======================================================== Test_hexa1
330 void ModelTest::Test_hexa1 ()
333 const int size_x = 1;
334 const int size_y = 1;
335 const int size_z = 1;
338 Hex::Document* doc = mon_ex.addDocument ("foo");
339 Hex::Vertex* orig = doc->addVertex (0,0,0);
340 Hex::Vector* dir = doc->addVector (1,1,1);
341 // Hex::Elements* grid =
342 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
346 CPPUNIT_ASSERT( true );
348 // ======================================================== Test_decoupage
349 void ModelTest::Test_decoupage ()
352 const int size_x = 2;
353 const int size_y = 1;
354 const int size_z = 1;
357 Hex::Document* doc = mon_ex.addDocument ("foo");
359 Hex::Vertex* orig = doc->addVertex (0,0,0);
360 Hex::Vector* dir = doc->addVector (1,1,1);
362 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
363 Hex::Edge* arete = grid->getEdgeK (0, 0, 0);
366 doc ->saveVtk ("no_decoupe.vtk");
367 /* Hex::Elements* grid2 = */ doc->cut (arete, 1);
370 doc ->saveVtk ("decoupe.vtk");
371 // doc ->saveFile ();
373 CPPUNIT_ASSERT( true );
375 // ======================================================== Test_gen_xml
376 void ModelTest::Test_gen_xml ()
379 const int size_x = 2;
380 const int size_y = 2;
381 const int size_z = 2;
384 Hex::Document* doc = mon_ex.addDocument ("foo");
386 Hex::Vertex* orig = doc->addVertex (0,0,0);
387 Hex::Vector* dir = doc->addVector (1,1,1);
388 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
390 Hex::Hexa* cell = grid->getHexa (0);
391 Hex::Quad* face = cell->getQuad (0);
392 Hex::Edge* arete = cell->getEdge (0);
393 Hex::Vertex* noeud = cell->getVertex (0);
395 Hex::Law* law1 = doc->addLaw("loi1", 1);
396 Hex::Law* law2 = doc->addLaw("loi2", 2);
397 Hex::Law* law3 = doc->addLaw("loi3", 3);
399 law1->setKind (Hex::Uniform);
400 law2->setKind (Hex::Arithmetic);
401 law3->setKind (Hex::Geometric);
403 Hex::Propagation* prop1 = doc->getPropagation (0);
404 Hex::Propagation* prop2 = doc->getPropagation (1);
405 Hex::Propagation* prop3 = doc->getPropagation (2);
407 prop1->setLaw (law1);
408 prop2->setLaw (law2);
409 prop3->setLaw (law3);
411 prop1->setWay (true);
412 prop2->setWay (false);
413 prop3->setWay (true);
415 doc ->saveVtk ("mini.vtk");
416 doc ->save ("Essai");
418 CPPUNIT_ASSERT( true );
420 // ======================================================== Test_relecture
421 void ModelTest::Test_relecture ()
425 Hex::Document* doc = mon_ex.loadDocument ("Essai");
428 doc ->saveVtk ("restore.vtk");
430 CPPUNIT_ASSERT( true );
434 // ======================================================== Test_clone
435 void ModelTest::Test_clone ()
438 const int size_x = 2;
439 const int size_y = 2;
440 const int size_z = 2;
443 Hex::Document* doc = mon_ex.addDocument ("foo");
445 Hex::Vertex* orig = doc->addVertex (0,0,0);
446 Hex::Vector* dir = doc->addVector (1,1,1);
447 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
449 Hex::Vector* bond = doc->addVector (0, 0, 7);
450 Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
452 doc ->saveVtk ("clonage.vtk");
455 HexDump (grid2->getHexa (1));
456 HexDump (grid2->getHexaIJK (1,1,1));
457 HexDump (grid2->getVertexIJK (1,1,1));
459 CPPUNIT_ASSERT( true );
461 // ======================================================== Test_separ
462 void ModelTest::Test_separ ()
465 const int size_x = 2;
466 const int size_y = 2;
467 const int size_z = 2;
470 Hex::Document* doc = mon_ex.addDocument ("foo");
472 Hex::Vertex* orig = doc->addVertex (0,0,0);
473 Hex::Vector* dir = doc->addVector (1,1,1);
474 // Hex::Elements* grid =
475 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
477 doc ->saveVtk ("separ.vtk");
480 CPPUNIT_ASSERT( true );
482 // // ======================================================== Test_cyl_karima
483 // void ModelTest::Test_cyl_karima ()
487 // Hex::Document* doc = mon_ex.addDocument ("foo");
489 // Hex::Vertex* c2 = doc->addVertex (0,0,0);
490 // Hex::Vector* dz = doc->addVector (0,0,1);
491 // Hex::Vector* dx = doc->addVector (1,0,0);
502 // /* Hex::Elements* cyl2 = */ doc->makeCylindrical (c2, dx, dz, dr, a2, l2,
503 // nr2, na2, nl2, false );
504 // doc->saveVtk ("cyl_karima.vtk");
507 // CPPUNIT_ASSERT( true );
509 // ================================================== Test_grille_cyl
510 void ModelTest::Test_grille_cyl ()
514 Hex::Document* doc = mon_ex.addDocument ("foo");
516 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
517 Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
519 Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
520 Hex::Vertex* orig4 = doc->addVertex (10,10,0);
522 Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
523 Hex::Vertex* orig6 = doc->addVertex (10,20,0);
525 Hex::Vector* vz = doc->addVector (0,0,1);
526 Hex::Vector* vx = doc->addVector (1,0,0);
534 doc->makeCylindrical(orig1,vx,vz,dr, 360, dl,nr,4,nl, true);
535 doc->makeCylindrical(orig2,vx,vz,dr, 360, dl,nr,8,nl, true);
536 doc->makeCylindrical(orig3,vx,vz,dr, 270, dl,nr,8,nl, true);
537 doc->makeCylindrical(orig6,vx,vz,dr, 360, dl,nr,6,nl, true);
538 doc->makeCylindrical(orig4,vx,vz,dr, 270, dl,nr,7,nl, true);
539 doc->makeCylindrical(orig5,vx,vz,dr, 360, dl,nr,5,nl, true);
540 doc->saveVtk ("cylindres.vtk");
543 CPPUNIT_ASSERT( true );
545 // ===================================================== Test_cylinder
546 void ModelTest::Test_cylinder ()
550 cpchar fic_vtk = "cylindre";
553 Hex::Document* doc = mon_ex.addDocument ("foo");
555 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
556 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
557 Hex::Vector* vz = doc->addVector (0,0,1);
558 Hex::Vector* vx = doc->addVector (1,0,0);
566 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
567 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
569 doc->makeCylinder (cyl, vx, nr, na, nl);
570 doc ->saveVtk (fic_vtk, nvtk);
572 doc->makePipe (pipe, vx, nr, na, nl);
573 doc ->saveVtk (fic_vtk, nvtk);
575 CPPUNIT_ASSERT( true );
580 void ModelTest::myTest_croix ()
583 Hex::Document* doc = mon_ex.addDocument ("foo");
586 // Hex::Vector* dx1 = doc->addVector( -1, 0, 0 );
587 // Hex::Vector* dz1 = doc->addVector( 0, 0, 1 );
589 // Hex::Vertex* c_pte_1 = doc->addVertex ( 195., 0., 220. );
590 // Hex::Vertex* c_grd_1 = doc->addVertex ( 300., 0., 400. );
591 // Hex::Cylinder* cyl_pte_1 = doc->addCylinder( c_pte_1 , dz1 , 25 , 360 );
592 // Hex::Cylinder* cyl_grd_1 = doc->addCylinder( c_grd_1 , dx1 , 50 , 140 );
593 // Hex::CrossElements* cross1 = doc->makeCylinders( cyl_pte_1 , cyl_grd_1 );
595 Hex::Vector* dx2 = doc->addVector(-1, 0, 0 );
596 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
598 Hex::Vertex* c_pte_2 = doc->addVertex( 110., 0. , 400. );
599 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
601 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 220 );
602 Hex::Cylinder* cyl_grd_2 = doc->addCylinder( c_grd_2 , dz2 , 100, 800 );
603 Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );
607 Hex::Vector* dx2 = doc->addVector( 1, 0, 0 );
608 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
610 Hex::Vertex* c_pte_2 = doc->addVertex( -130. , 0. , 400. );
611 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
613 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 260 );
614 Hex::Cylinder* cyl_grd_2 = doc->addCylinder( c_grd_2 , dz2 , 100, 800 );
616 Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );*/
617 doc->saveVtk ("/tmp/ffffffff.vtk");
620 CPPUNIT_ASSERT( true );
626 // ======================================================== Test_croix
627 void ModelTest::Test_croix ()
631 Hex::Document* doc = mon_ex.addDocument ("foo");
633 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
634 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
635 Hex::Vector* vz = doc->addVector ( 0,0,1);
636 Hex::Vector* vx = doc->addVector ( 1,0,0);
643 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, nr1, nl1);
644 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, nr2, nl2);
645 Hex::CrossElements* grid = doc->makeCylinders (cyl1, cyl2);
651 for (int ny=0; ny<Hex::S_MAXI; ny++)
653 grid->getHexaIJK (Hex::Cyl1, 1, ny, 0)->remove ();
654 grid->getHexaIJK (Hex::Cyl1, 1, ny, 1)->remove ();
655 grid->getHexaIJK (Hex::Cyl1, 1, ny, 2)->remove ();
656 grid->getHexaIJK (Hex::Cyl1, 1, ny, 3)->remove ();
657 grid->getHexaIJK (Hex::Cyl1, 1, ny, 4)->remove ();
658 grid->getHexaIJK (Hex::Cyl1, 1, ny, 5)->remove ();
660 grid->getHexaIJK (Hex::Cyl2, 1, ny, 0)->remove ();
661 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 1)->remove ();
662 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 2)->remove ();
663 grid->getHexaIJK (Hex::Cyl2, 1, ny, 3)->remove ();
666 for (int ny=0; ny<4 ; ny++)
668 grid->getHexaIJK (Hex::Cyl1, 0, ny, 0)->remove ();
669 grid->getHexaIJK (Hex::Cyl1, 0, ny, 1)->remove ();
670 grid->getHexaIJK (Hex::Cyl1, 0, ny, 2)->remove ();
671 grid->getHexaIJK (Hex::Cyl1, 0, ny, 3)->remove ();
672 grid->getHexaIJK (Hex::Cyl1, 0, ny, 4)->remove ();
673 grid->getHexaIJK (Hex::Cyl1, 0, ny, 5)->remove ();
675 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 0)->remove ();
676 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 1)->remove ();
677 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 2)->remove ();
678 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 3)->remove ();
681 /*********************************
682 grid->getHexaIJK (Hex::Cyl2, 0, 3, 1)->remove ();
683 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 2)->remove ();
684 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 1)->remove ();
686 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 3)->remove ();
687 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 2)->remove ();
688 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 1)->remove ();
689 ********************************* */
692 doc->saveVtk ("croix.vtk");
695 CPPUNIT_ASSERT( true );
697 // ======================================================== Test_pipes
698 void ModelTest::Test_pipes ()
702 Hex::Document* doc = mon_ex.addDocument ("foo");
704 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
705 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
706 Hex::Vector* vz = doc->addVector ( 0,0,1);
707 Hex::Vector* vx = doc->addVector ( 1,0,0);
709 double h1 = 10, h2 = 10;
710 double ri1 = 1, ri2 = 1.5;
711 double re1 = 2, re2 = 3;
713 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
714 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
715 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
720 doc->saveVtk ("pipes.vtk");
722 CPPUNIT_ASSERT( true );
724 // ======================================================== Test_lorraine
725 void ModelTest::Test_lorraine()
729 Hex::Document* doc = mon_ex.addDocument ("foo");
731 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
732 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
733 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
734 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
736 Hex::Vector* vz = doc->addVector ( 0,0,1);
737 Hex::Vector* vx = doc->addVector ( 1,0,0);
746 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
747 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
749 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
750 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
752 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
753 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
755 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
756 const int nx_int = 0;
757 const int nx_ext = 1;
759 // vc2 = grid1->getVertexIJK (Hex::Cyl2, 0,0,0);
760 // vc3 = grid2->getVertexIJK (Hex::Cyl1, 0,0,0);
762 Hex::Quad* qb = grid1-> getQuadIJ (Hex::Cyl2, nx_ext, Hex::S_E, 4);
763 Hex::Quad* qh = grid2-> getQuadIJ (Hex::Cyl1, nx_ext, Hex::S_N, 0);
765 Hex::Vertex* vb0 = qb->getVertex (3);
766 Hex::Vertex* vb1 = qb->getVertex (2);
767 Hex::Vertex* vh0 = qh->getVertex (0);
768 Hex::Vertex* vh1 = qh->getVertex (1);
770 vb0 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_E, 4); // cible
771 vb1 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_NE, 4);
772 vh0 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_N, 0); // depart
773 vh1 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_NW, 0);
784 hliste.push_back (qh);
785 for (int ny=1; ny<Hex::S_MAXI; ny++)
787 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
788 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_ext, ns, 0));
791 for (int ny=0; ny<4 ; ny++)
792 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_int, ny, 0));
794 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, 5);
795 doc->saveVtk ("lorraine.vtk");
797 CPPUNIT_ASSERT( true );
799 // ======================================================== Test_disconnect
800 void ModelTest::Test_disconnect ()
803 const int size_x = 2;
804 const int size_y = 2;
805 const int size_z = 1;
808 Hex::Document* doc = mon_ex.addDocument ("foo");
810 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
811 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
812 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
814 Hex::Vector* dir = doc->addVector (1,1,1);
815 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
816 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
817 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
822 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
823 matrice.defTranslation (ecart);
825 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
826 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
827 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
829 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
830 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
831 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
835 vertex->setScalar (5);
837 doc->saveVtk ("Test_disco", nvtk);
838 doc->disconnectQuad (hexa1, quad);
840 hexa1 ->transform (&matrice);
841 doc->saveVtk ("Test_disco", nvtk);
843 doc->disconnectEdge (hexa2, edge);
845 hexa2->transform (&matrice);
846 doc->saveVtk ("Test_disco", nvtk);
848 doc->disconnectVertex (hexa3, vertex);
850 hexa3->transform (&matrice);
851 doc->saveVtk ("Test_disco", nvtk);
853 doc->dumpPropagation ();
856 CPPUNIT_ASSERT( true );
858 // ======================================================== Test_propagation
859 void ModelTest::Test_propagation ()
862 const int size_x = 2;
863 const int size_y = 1;
864 const int size_z = 1;
867 Hex::Document* doc = mon_ex.addDocument ("foo");
869 Hex::Vertex* orig = doc->addVertex (0,0,0);
870 Hex::Vector* dir = doc->addVector (1,1,1);
871 // Hex::Elements* grid =
872 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
874 int nb = doc->countPropagation ();
875 for (int nro=0 ; nro<nb ; nro++)
877 Hex::Propagation* prop = doc ->getPropagation (nro);
878 const Hex::Edges& table = prop->getEdges ();
879 printf (" ____________________________________ Prop nro %d\n", nro);
880 for (int ned=0 ; ned<(int)table.size() ; ned++)
882 bool way = table [ned]->getWay ();
887 table [ned]->getVertex (0)->printName (", ");
888 table [ned]->getVertex (1)->printName (")\n");
893 table [ned]->getVertex (1)->printName (", ");
894 table [ned]->getVertex (0)->printName (")\n");
900 doc->saveVtk ("Test_propagation.vtk");
901 doc->save ("Test_propagation");
903 CPPUNIT_ASSERT( true );
905 // ======================================================== Test_move
906 void ModelTest::Test_move ()
909 const int size_x = 1;
910 const int size_y = 1;
911 const int size_z = 2;
914 Hex::Document* doc = mon_ex.addDocument ("foo");
916 Hex::Vertex* orig = doc->addVertex (0,0,0);
917 Hex::Vector* dir = doc->addVector (1,1,1);
918 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
920 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
921 Hex::Vector* devant = doc->addVector (5, 0, 0);
922 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
925 matrice.defTranslation (enhaut);
927 Hex::Hexa* cube = grid->getHexa (1);
928 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
931 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
932 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
933 Hex::Hexa* cube2 = grid2->getHexa (1);
935 doc ->saveVtk ("move0.vtk");
937 cube ->disconnectQuad (dessous);
938 cube ->transform (&matrice);
939 cube2->transform (&matrice);
941 doc ->saveVtk ("move1.vtk");
944 CPPUNIT_ASSERT( true );
946 // ======================================================== Test_deux_cyl
947 void ModelTest::Test_deux_cyl ()
951 Hex::Document* doc = mon_ex.addDocument ("foo");
953 Hex::Vertex* orig1 = doc->addVertex (0,0,-5);
954 Hex::Vertex* orig2 = doc->addVertex (-5,0,0);
956 Hex::Vector* vx = doc->addVector (1,0,0);
957 Hex::Vector* vy = doc->addVector (0,1,0);
958 Hex::Vector* vz = doc->addVector (0,0,1);
961 double da = 360; // degres
967 /* Hex::Elements* cyl1 = */ doc->makeCylindrical(orig1, vy,vz, dr, da,
970 /* Hex::Elements* cyl2 = */ doc->makeCylindrical(orig2, vz,vx, dr/2, da,
972 doc->saveVtk ("deux_cylindres.vtk");
973 CPPUNIT_ASSERT( true );
975 // ======================================================== Test_move2
976 void ModelTest::Test_transfo ()
979 const int size_x = 1;
980 const int size_y = 1;
981 const int size_z = 2;
984 cpchar fic_vtk = "transfo";
987 Hex::Document* doc = mon_ex.addDocument ("foo");
990 Hex::Vertex* orig = doc->addVertex (0,0,0);
991 Hex::Vector* dir = doc->addVector (1,1,1);
992 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
995 CPPUNIT_ASSERT( false );
999 doc ->saveVtk (fic_vtk, nvtk);
1001 Hex::Vector* devant = doc->addVector (5, 0, 0);
1003 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1005 CPPUNIT_ASSERT( false );
1006 doc ->saveVtk (fic_vtk, nvtk);
1008 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1010 CPPUNIT_ASSERT( false );
1011 doc ->saveVtk (fic_vtk, nvtk);
1013 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1015 CPPUNIT_ASSERT( false );
1016 doc ->saveVtk (fic_vtk, nvtk);
1018 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1020 CPPUNIT_ASSERT( false );
1022 doc ->saveVtk (fic_vtk, nvtk);
1024 Hex::Vector* dir1 = doc->addVector (1,0,0);
1025 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1027 CPPUNIT_ASSERT( false );
1029 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1030 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1031 doc ->saveVtk (fic_vtk, nvtk);
1033 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1034 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1036 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1038 CPPUNIT_ASSERT( false );
1040 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1041 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1042 doc ->saveVtk (fic_vtk, nvtk);
1044 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1045 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1047 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1049 CPPUNIT_ASSERT( false );
1051 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1052 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1053 doc ->saveVtk (fic_vtk, nvtk);
1054 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1055 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1057 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1059 CPPUNIT_ASSERT( false );
1061 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1062 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1063 doc ->saveVtk (fic_vtk, nvtk);
1065 grid9->getHexa(0)->removeConnected ();
1066 doc ->saveVtk (fic_vtk, nvtk);
1068 CPPUNIT_ASSERT( true );