1 #include <cppunit/extensions/HelperMacros.h>
4 #include "hexa_base.hxx"
6 #include "HexDocument.hxx"
7 #include "HexElements.hxx"
8 #include "HexCrossElements.hxx"
10 #include "HexHexa.hxx"
11 #include "HexQuad.hxx"
12 #include "HexEdge.hxx"
13 #include "HexVertex.hxx"
15 #include "HexPropagation.hxx"
16 #include "HexShape.hxx"
18 #include "HexMatrix.hxx"
20 #include "ModelTest.hxx"
22 CPPUNIT_TEST_SUITE_REGISTRATION( ModelTest );
25 ModelTest::ModelTest(void)
27 // _myHexEngine = new HEXA_NS::Hex();
28 // _myDoc= _myHexEngine->addDocument();
31 ModelTest::~ModelTest(void)
34 // delete _myHexEngine; //CS_TODO : Crash
38 // ======================================================== print_propagations
39 void ModelTest::_print_propagations (Hex::Document* doc)
41 int nb = doc->countPropagation ();
43 for (int nro=0 ; nro<nb ; nro++)
45 Hex::Propagation* prop = doc ->getPropagation (nro);
46 const Hex::Edges& table = prop->getEdges ();
47 printf (" ____________________________________ Prop nro %d\n", nro);
48 for (int ned=0 ; ned<(int)table.size() ; ned++)
50 bool way = table [ned]->getWay ();
51 Hex::Edge* edge = table [ned];
52 Hex::Vertex* v0 = edge->getVertex (0);
53 Hex::Vertex* v1 = edge->getVertex (1);
59 v1->printName (")\n");
64 v0->printName (")\n");
70 // // ======================================================== Test_sphere
71 // void ModelTest::Test_sphere ()
74 // Hex::Document* doc = mon_ex.addDocument ();
75 // Hex::Vertex* orig = doc->addVertex (0,0,0);
79 // Hex::Vector* decal = doc->addVector (1,1,1);
80 // Hex::Elements* sphere = doc->makeSpherical (orig, decal, ncouches, k);
82 // for (int nc=0 ; nc <= ncouches ; nc++)
84 // Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
86 // // sphere->getStrate (nc, Hex::Q_A)->remove ();
87 // // sphere->getStrate (nc, Hex::Q_B)->remove ();
90 // sphere->saveVtk ("sphere.vtk");
91 // CPPUNIT_ASSERT( true );
93 // ======================================================== Test_cartesi1
94 void ModelTest::Test_cartesi1 ()
97 const int size_x = 15;
98 const int size_y = 12;
102 Hex::Document* doc = mon_ex.addDocument ();
103 Hex::Vertex* orig = doc->addVertex (0,0,0);
105 Hex::Vector* dir = doc->addVector (1,1,1);
106 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
108 // print_propagations (doc);
110 for (int nz=0; nz<size_z ; nz++)
111 for (int ny=nz+1; ny<size_y-nz-1 ; ny++)
112 for (int nx=nz+1; nx<size_x-nz-1 ; nx++)
114 Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
119 _print_propagations (doc);
120 grid->saveVtk ("grid_cart.vtk");
123 CPPUNIT_ASSERT( true );
125 // ======================================================== afficher
126 #define Afficher(elt) _afficher (#elt, elt)
127 int ModelTest::_afficher (cpchar nom, Hex::EltBase* elt)
131 printf (" .... %s = 0x0\n", nom);
135 printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
138 // ======================================================== Test_find
139 void ModelTest::Test_find ()
142 const int size_x = 2;
143 const int size_y = 2;
144 const int size_z = 2;
147 Hex::Document* doc = mon_ex.addDocument ();
149 Hex::Vertex* orig = doc->addVertex (0,0,0);
150 Hex::Vector* dir = doc->addVector (1,1,1);
151 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
153 grid->saveVtk ("mini1.vtk");
156 Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
158 Afficher ( v00 = doc->findVertex (0, 0, 0));
159 Afficher ( v02 = doc->findVertex (1, 1, 0));
160 Afficher ( v06 = doc->findVertex (1, 1, 1));
161 Afficher ( v08 = doc->findVertex (2, 1, 0));
162 Afficher ( v10 = doc->findVertex (2, 1, 1));
163 Afficher ( v22 = doc->findVertex (2, 1, 2));
164 Afficher ( v26 = doc->findVertex (2, 2, 2));
168 Afficher (doc->findEdge (v06, v10));
169 Afficher (doc->findEdge (v10, v06));
172 Afficher (doc->findQuad (v02, v10));
173 Afficher (doc->findQuad (v06, v08));
174 Afficher (doc->findQuad (v02, v06));
177 Afficher (doc->findHexa (v00, v06));
178 Afficher (doc->findHexa (v06, v26));
179 Afficher (doc->findHexa (v26, v06));
181 CPPUNIT_ASSERT( true );
183 // ======================================================== Test_joint
184 void ModelTest::Test_joint ()
192 Hex::Document* doc = mon_ex.addDocument ();
194 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
195 Hex::Vector* dir = doc->addVector (1,1,1);
197 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
199 Hex::Vertex* orig2 = doc->addVertex (dimx/2.0,0,8);
200 Hex::Vector* vectj = doc->addVector (0,1,0);
201 Hex::Vector* vecti = doc->addVector (1,0,0);
202 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vecti, vectj,
203 1, 180, 1, dimz,dimy,dimx);
207 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
208 Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my);
211 Hex::Vertex* v1 = prems->getVertex (0);
212 Hex::Vertex* v2 = cible->getVertex (0);
213 Hex::Vertex* v3 = prems->getVertex (1);
214 Hex::Vertex* v4 = cible->getVertex (3);
219 liste.push_back (prems);
220 for (int nx=0; nx<dimx; nx++)
222 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
224 for (int ny=0; ny<dimy; ny++)
226 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
228 // Hex::Elements* joint =
230 doc->joinQuads (liste, cible, v1, v2, v3, v4, 5);
231 doc->saveVtk ("joint.vtk");
233 CPPUNIT_ASSERT( true );
235 // ======================================================== Test_prism
236 void ModelTest::Test_prism ()
244 Hex::Document* doc = mon_ex.addDocument ();
246 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
247 Hex::Vector* dir = doc->addVector (1,1,1);
249 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
253 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
256 liste.push_back (prems);
257 for (int nx=0; nx<dimx; nx++)
259 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
261 for (int ny=0; ny<dimy; ny++)
263 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
265 doc->prismQuads (liste, dir, 5);
266 doc->saveVtk ("prisme.vtk");
268 CPPUNIT_ASSERT( true );
272 // ======================================================== Test_prism2
273 void ModelTest::Test_prism2 ()
281 Hex::Document* doc = mon_ex.addDocument ();
283 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
284 Hex::Vector* dir = doc->addVector (1,1,1);
286 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
290 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
291 Hex::Elements* prism = doc->prismQuad(prems, dir, 5);
293 int nbHexa = prism->countHexa();
294 std::cout << "nbHexa " << nbHexa << std::endl;
295 Hex::Hexa* hp1 = prism->getHexa(1);
296 std::cout << "getHexa(1) " << hp1 << std::endl;
297 Hex::Vertex* hp1_v0 = hp1->getVertex(0);
298 std::cout << "getVertex ->" << hp1_v0 << std::endl;
299 Hex::Shape* s = new Hex::Shape("la shape");
300 std::cout << "new Hex::Shape->" << s << std::endl;
301 hp1_v0->setAssociation(s);
302 std::cout << "setAssociation ->" << std::endl;
303 doc->saveVtk ("prisme2.vtk");
305 CPPUNIT_ASSERT( true );
315 // ======================================================== Test_hexa1
316 void ModelTest::Test_hexa1 ()
319 const int size_x = 1;
320 const int size_y = 1;
321 const int size_z = 1;
324 Hex::Document* doc = mon_ex.addDocument ();
325 Hex::Vertex* orig = doc->addVertex (0,0,0);
326 Hex::Vector* dir = doc->addVector (1,1,1);
327 // Hex::Elements* grid =
328 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
332 CPPUNIT_ASSERT( true );
334 // ======================================================== Test_decoupage
335 void ModelTest::Test_decoupage ()
338 const int size_x = 2;
339 const int size_y = 1;
340 const int size_z = 1;
343 Hex::Document* doc = mon_ex.addDocument ();
345 Hex::Vertex* orig = doc->addVertex (0,0,0);
346 Hex::Vector* dir = doc->addVector (1,1,1);
348 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
349 Hex::Edge* arete = grid->getEdgeK (0, 0, 0);
352 doc ->saveVtk ("no_decoupe.vtk");
353 /* Hex::Elements* grid2 = */ doc->cut (arete, 1);
356 doc ->saveVtk ("decoupe.vtk");
357 // doc ->saveFile ();
359 CPPUNIT_ASSERT( true );
361 // ======================================================== Test_gen_xml
362 void ModelTest::Test_gen_xml ()
365 const int size_x = 2;
366 const int size_y = 2;
367 const int size_z = 2;
370 Hex::Document* doc = mon_ex.addDocument ();
372 Hex::Vertex* orig = doc->addVertex (0,0,0);
373 Hex::Vector* dir = doc->addVector (1,1,1);
374 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
376 Hex::Hexa* cell = grid->getHexa (0);
377 Hex::Quad* face = cell->getQuad (0);
378 Hex::Edge* arete = cell->getEdge (0);
379 Hex::Vertex* noeud = cell->getVertex (0);
381 Hex::Shape* shape1 = new Hex::Shape("riri");
382 Hex::Shape* shape2 = new Hex::Shape("fifi");
383 Hex::Shape* shape3 = new Hex::Shape("loulou");
385 noeud->setAssociation (shape1);
386 arete->setAssociation (shape2);
387 face ->setAssociation (shape3);
389 Hex::Law* law1 = doc->addLaw("loi1", 1);
390 Hex::Law* law2 = doc->addLaw("loi2", 2);
391 Hex::Law* law3 = doc->addLaw("loi3", 3);
393 law1->setKind (Hex::Uniform);
394 law2->setKind (Hex::Arithmetic);
395 law3->setKind (Hex::Geometric);
397 Hex::Propagation* prop1 = doc->getPropagation (0);
398 Hex::Propagation* prop2 = doc->getPropagation (1);
399 Hex::Propagation* prop3 = doc->getPropagation (2);
401 prop1->setLaw (law1);
402 prop2->setLaw (law2);
403 prop3->setLaw (law3);
405 prop1->setWay (true);
406 prop2->setWay (false);
407 prop3->setWay (true);
409 doc ->saveVtk ("mini.vtk");
410 doc ->setFile ("Essai");
413 CPPUNIT_ASSERT( true );
415 // ======================================================== Test_relecture
416 void ModelTest::Test_relecture ()
420 Hex::Document* doc = mon_ex.loadDocument ("Essai");
423 doc ->saveVtk ("restore.vtk");
425 CPPUNIT_ASSERT( true );
427 // ======================================================== Test_clone
428 void ModelTest::Test_clone ()
431 const int size_x = 2;
432 const int size_y = 2;
433 const int size_z = 2;
436 Hex::Document* doc = mon_ex.addDocument ();
438 Hex::Vertex* orig = doc->addVertex (0,0,0);
439 Hex::Vector* dir = doc->addVector (1,1,1);
440 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
442 Hex::Vector* bond = doc->addVector (0, 0, 7);
443 Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
445 doc ->saveVtk ("clonage.vtk");
448 HexDump (grid2->getHexa (1));
449 HexDump (grid2->getHexaIJK (1,1,1));
450 HexDump (grid2->getVertexIJK (1,1,1));
452 CPPUNIT_ASSERT( true );
454 // ======================================================== Test_separ
455 void ModelTest::Test_separ ()
458 const int size_x = 2;
459 const int size_y = 2;
460 const int size_z = 2;
463 Hex::Document* doc = mon_ex.addDocument ();
465 Hex::Vertex* orig = doc->addVertex (0,0,0);
466 Hex::Vector* dir = doc->addVector (1,1,1);
467 // Hex::Elements* grid =
468 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
470 doc ->saveVtk ("separ.vtk");
473 CPPUNIT_ASSERT( true );
475 // // ======================================================== Test_cyl_karima
476 // void ModelTest::Test_cyl_karima ()
480 // Hex::Document* doc = mon_ex.addDocument ();
482 // Hex::Vertex* c2 = doc->addVertex (0,0,0);
483 // Hex::Vector* dz = doc->addVector (0,0,1);
484 // Hex::Vector* dx = doc->addVector (1,0,0);
495 // /* Hex::Elements* cyl2 = */ doc->makeCylindrical (c2, dx, dz, dr, a2, l2,
496 // nr2, na2, nl2, false );
497 // doc->saveVtk ("cyl_karima.vtk");
500 // CPPUNIT_ASSERT( true );
502 // ================================================== Test_grille_cyl
503 void ModelTest::Test_grille_cyl ()
507 Hex::Document* doc = mon_ex.addDocument ();
509 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
510 Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
512 Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
513 Hex::Vertex* orig4 = doc->addVertex (10,10,0);
515 Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
516 Hex::Vertex* orig6 = doc->addVertex (10,20,0);
518 Hex::Vector* vz = doc->addVector (0,0,1);
519 Hex::Vector* vx = doc->addVector (1,0,0);
527 doc->makeCylindrical(orig1,vx,vz,dr, 360, dl,nr,4,nl, true);
528 doc->makeCylindrical(orig2,vx,vz,dr, 360, dl,nr,8,nl, true);
529 doc->makeCylindrical(orig3,vx,vz,dr, 270, dl,nr,8,nl, true);
530 doc->makeCylindrical(orig6,vx,vz,dr, 360, dl,nr,6,nl, true);
531 doc->makeCylindrical(orig4,vx,vz,dr, 270, dl,nr,7,nl, true);
532 doc->makeCylindrical(orig5,vx,vz,dr, 360, dl,nr,5,nl, true);
533 doc->saveVtk ("cylindres.vtk");
536 CPPUNIT_ASSERT( true );
538 // ===================================================== Test_cylinder
539 void ModelTest::Test_cylinder ()
543 cpchar fic_vtk = "cylindre";
546 Hex::Document* doc = mon_ex.addDocument ();
548 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
549 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
550 Hex::Vector* vz = doc->addVector (0,0,1);
551 Hex::Vector* vx = doc->addVector (1,0,0);
559 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
560 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
562 doc->makeCylinder (cyl, vx, nr, na, nl);
563 doc ->saveVtk (fic_vtk, nvtk);
565 doc->makePipe (pipe, vx, nr, na, nl);
566 doc ->saveVtk (fic_vtk, nvtk);
568 CPPUNIT_ASSERT( true );
573 void ModelTest::myTest_croix ()
576 Hex::Document* doc = mon_ex.addDocument ();
579 // Hex::Vector* dx1 = doc->addVector( -1, 0, 0 );
580 // Hex::Vector* dz1 = doc->addVector( 0, 0, 1 );
582 // Hex::Vertex* c_pte_1 = doc->addVertex ( 195., 0., 220. );
583 // Hex::Vertex* c_grd_1 = doc->addVertex ( 300., 0., 400. );
584 // Hex::Cylinder* cyl_pte_1 = doc->addCylinder( c_pte_1 , dz1 , 25 , 360 );
585 // Hex::Cylinder* cyl_grd_1 = doc->addCylinder( c_grd_1 , dx1 , 50 , 140 );
586 // Hex::CrossElements* cross1 = doc->makeCylinders( cyl_pte_1 , cyl_grd_1 );
588 Hex::Vector* dx2 = doc->addVector(-1, 0, 0 );
589 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
591 Hex::Vertex* c_pte_2 = doc->addVertex( 110., 0. , 400. );
592 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
594 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 220 );
595 Hex::Cylinder* cyl_grd_2 = doc->addCylinder( c_grd_2 , dz2 , 100, 800 );
596 Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );
600 Hex::Vector* dx2 = doc->addVector( 1, 0, 0 );
601 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
603 Hex::Vertex* c_pte_2 = doc->addVertex( -130. , 0. , 400. );
604 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
606 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 260 );
607 Hex::Cylinder* cyl_grd_2 = doc->addCylinder( c_grd_2 , dz2 , 100, 800 );
609 Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );*/
610 doc->saveVtk ("/tmp/ffffffff.vtk");
613 CPPUNIT_ASSERT( true );
619 // ======================================================== Test_croix
620 void ModelTest::Test_croix ()
624 Hex::Document* doc = mon_ex.addDocument ();
626 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
627 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
628 Hex::Vector* vz = doc->addVector ( 0,0,1);
629 Hex::Vector* vx = doc->addVector ( 1,0,0);
636 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, nr1, nl1);
637 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, nr2, nl2);
638 Hex::CrossElements* grid = doc->makeCylinders (cyl1, cyl2);
644 for (int ny=0; ny<Hex::S_MAXI; ny++)
646 grid->getHexaIJK (Hex::Cyl1, 1, ny, 0)->remove ();
647 grid->getHexaIJK (Hex::Cyl1, 1, ny, 1)->remove ();
648 grid->getHexaIJK (Hex::Cyl1, 1, ny, 2)->remove ();
649 grid->getHexaIJK (Hex::Cyl1, 1, ny, 3)->remove ();
650 grid->getHexaIJK (Hex::Cyl1, 1, ny, 4)->remove ();
651 grid->getHexaIJK (Hex::Cyl1, 1, ny, 5)->remove ();
653 grid->getHexaIJK (Hex::Cyl2, 1, ny, 0)->remove ();
654 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 1)->remove ();
655 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 2)->remove ();
656 grid->getHexaIJK (Hex::Cyl2, 1, ny, 3)->remove ();
659 for (int ny=0; ny<4 ; ny++)
661 grid->getHexaIJK (Hex::Cyl1, 0, ny, 0)->remove ();
662 grid->getHexaIJK (Hex::Cyl1, 0, ny, 1)->remove ();
663 grid->getHexaIJK (Hex::Cyl1, 0, ny, 2)->remove ();
664 grid->getHexaIJK (Hex::Cyl1, 0, ny, 3)->remove ();
665 grid->getHexaIJK (Hex::Cyl1, 0, ny, 4)->remove ();
666 grid->getHexaIJK (Hex::Cyl1, 0, ny, 5)->remove ();
668 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 0)->remove ();
669 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 1)->remove ();
670 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 2)->remove ();
671 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 3)->remove ();
674 /*********************************
675 grid->getHexaIJK (Hex::Cyl2, 0, 3, 1)->remove ();
676 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 2)->remove ();
677 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 1)->remove ();
679 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 3)->remove ();
680 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 2)->remove ();
681 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 1)->remove ();
682 ********************************* */
685 doc->saveVtk ("croix.vtk");
688 CPPUNIT_ASSERT( true );
690 // ======================================================== Test_pipes
691 void ModelTest::Test_pipes ()
695 Hex::Document* doc = mon_ex.addDocument ();
697 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
698 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
699 Hex::Vector* vz = doc->addVector ( 0,0,1);
700 Hex::Vector* vx = doc->addVector ( 1,0,0);
702 double h1 = 10, h2 = 10;
703 double ri1 = 1, ri2 = 1.5;
704 double re1 = 2, re2 = 3;
706 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
707 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
708 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
713 doc->saveVtk ("pipes.vtk");
715 CPPUNIT_ASSERT( true );
717 // ======================================================== Test_lorraine
718 void ModelTest::Test_lorraine()
722 Hex::Document* doc = mon_ex.addDocument ();
724 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
725 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
726 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
727 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
729 Hex::Vector* vz = doc->addVector ( 0,0,1);
730 Hex::Vector* vx = doc->addVector ( 1,0,0);
739 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
740 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
742 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
743 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
745 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
746 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
748 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
749 const int nx_int = 0;
750 const int nx_ext = 1;
752 // vc2 = grid1->getVertexIJK (Hex::Cyl2, 0,0,0);
753 // vc3 = grid2->getVertexIJK (Hex::Cyl1, 0,0,0);
755 Hex::Quad* qb = grid1-> getQuadIJ (Hex::Cyl2, nx_ext, Hex::S_E, 4);
756 Hex::Quad* qh = grid2-> getQuadIJ (Hex::Cyl1, nx_ext, Hex::S_N, 0);
758 Hex::Vertex* vb0 = qb->getVertex (3);
759 Hex::Vertex* vb1 = qb->getVertex (2);
760 Hex::Vertex* vh0 = qh->getVertex (0);
761 Hex::Vertex* vh1 = qh->getVertex (1);
763 vb0 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_E, 4); // cible
764 vb1 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_NE, 4);
765 vh0 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_N, 0); // depart
766 vh1 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_NW, 0);
777 hliste.push_back (qh);
778 for (int ny=1; ny<Hex::S_MAXI; ny++)
780 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
781 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_ext, ns, 0));
784 for (int ny=0; ny<4 ; ny++)
785 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_int, ny, 0));
787 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, 5);
788 doc->saveVtk ("lorraine.vtk");
790 CPPUNIT_ASSERT( true );
792 // ======================================================== Test_disconnect
793 void ModelTest::Test_disconnect ()
796 const int size_x = 2;
797 const int size_y = 2;
798 const int size_z = 1;
801 Hex::Document* doc = mon_ex.addDocument ();
803 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
804 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
805 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
807 Hex::Vector* dir = doc->addVector (1,1,1);
808 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
809 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
810 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
815 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
816 matrice.defTranslation (ecart);
818 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
819 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
820 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
822 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
823 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
824 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
828 vertex->setScalar (5);
830 doc->saveVtk ("Test_disco", nvtk);
831 doc->disconnectQuad (hexa1, quad);
833 hexa1 ->transform (&matrice);
834 doc->saveVtk ("Test_disco", nvtk);
836 doc->disconnectEdge (hexa2, edge);
838 hexa2->transform (&matrice);
839 doc->saveVtk ("Test_disco", nvtk);
841 doc->disconnectVertex (hexa3, vertex);
843 hexa3->transform (&matrice);
844 doc->saveVtk ("Test_disco", nvtk);
846 doc->dumpPropagation ();
849 CPPUNIT_ASSERT( true );
851 // ======================================================== Test_propagation
852 void ModelTest::Test_propagation ()
855 const int size_x = 2;
856 const int size_y = 1;
857 const int size_z = 1;
860 Hex::Document* doc = mon_ex.addDocument ();
862 Hex::Vertex* orig = doc->addVertex (0,0,0);
863 Hex::Vector* dir = doc->addVector (1,1,1);
864 // Hex::Elements* grid =
865 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
867 int nb = doc->countPropagation ();
868 for (int nro=0 ; nro<nb ; nro++)
870 Hex::Propagation* prop = doc ->getPropagation (nro);
871 const Hex::Edges& table = prop->getEdges ();
872 printf (" ____________________________________ Prop nro %d\n", nro);
873 for (int ned=0 ; ned<(int)table.size() ; ned++)
875 bool way = table [ned]->getWay ();
880 table [ned]->getVertex (0)->printName (", ");
881 table [ned]->getVertex (1)->printName (")\n");
886 table [ned]->getVertex (1)->printName (", ");
887 table [ned]->getVertex (0)->printName (")\n");
893 doc->saveVtk ("Test_propagation.vtk");
894 doc->setFile ("Test_propagation");
897 CPPUNIT_ASSERT( true );
899 // ======================================================== Test_move
900 void ModelTest::Test_move ()
903 const int size_x = 1;
904 const int size_y = 1;
905 const int size_z = 2;
908 Hex::Document* doc = mon_ex.addDocument ();
910 Hex::Vertex* orig = doc->addVertex (0,0,0);
911 Hex::Vector* dir = doc->addVector (1,1,1);
912 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
914 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
915 Hex::Vector* devant = doc->addVector (5, 0, 0);
916 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
919 matrice.defTranslation (enhaut);
921 Hex::Hexa* cube = grid->getHexa (1);
922 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
925 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
926 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
927 Hex::Hexa* cube2 = grid2->getHexa (1);
929 doc ->saveVtk ("move0.vtk");
931 cube ->disconnectQuad (dessous);
932 cube ->transform (&matrice);
933 cube2->transform (&matrice);
935 doc ->saveVtk ("move1.vtk");
938 CPPUNIT_ASSERT( true );
940 // ======================================================== Test_deux_cyl
941 void ModelTest::Test_deux_cyl ()
945 Hex::Document* doc = mon_ex.addDocument ();
947 Hex::Vertex* orig1 = doc->addVertex (0,0,-5);
948 Hex::Vertex* orig2 = doc->addVertex (-5,0,0);
950 Hex::Vector* vx = doc->addVector (1,0,0);
951 Hex::Vector* vy = doc->addVector (0,1,0);
952 Hex::Vector* vz = doc->addVector (0,0,1);
955 double da = 360; // degres
961 /* Hex::Elements* cyl1 = */ doc->makeCylindrical(orig1, vy,vz, dr, da,
964 /* Hex::Elements* cyl2 = */ doc->makeCylindrical(orig2, vz,vx, dr/2, da,
966 doc->saveVtk ("deux_cylindres.vtk");
967 CPPUNIT_ASSERT( true );
969 // ======================================================== Test_move2
970 void ModelTest::Test_transfo ()
973 const int size_x = 1;
974 const int size_y = 1;
975 const int size_z = 2;
978 cpchar fic_vtk = "transfo";
981 Hex::Document* doc = mon_ex.addDocument ();
984 Hex::Vertex* orig = doc->addVertex (0,0,0);
985 Hex::Vector* dir = doc->addVector (1,1,1);
986 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
989 CPPUNIT_ASSERT( false );
993 doc ->saveVtk (fic_vtk, nvtk);
995 Hex::Vector* devant = doc->addVector (5, 0, 0);
997 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
999 CPPUNIT_ASSERT( false );
1000 doc ->saveVtk (fic_vtk, nvtk);
1002 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1004 CPPUNIT_ASSERT( false );
1005 doc ->saveVtk (fic_vtk, nvtk);
1007 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1009 CPPUNIT_ASSERT( false );
1010 doc ->saveVtk (fic_vtk, nvtk);
1012 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1014 CPPUNIT_ASSERT( false );
1016 doc ->saveVtk (fic_vtk, nvtk);
1018 Hex::Vector* dir1 = doc->addVector (1,0,0);
1019 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1021 CPPUNIT_ASSERT( false );
1023 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1024 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1025 doc ->saveVtk (fic_vtk, nvtk);
1027 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1028 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1030 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1032 CPPUNIT_ASSERT( false );
1034 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1035 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1036 doc ->saveVtk (fic_vtk, nvtk);
1038 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1039 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1041 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1043 CPPUNIT_ASSERT( false );
1045 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1046 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1047 doc ->saveVtk (fic_vtk, nvtk);
1048 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1049 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1051 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1053 CPPUNIT_ASSERT( false );
1055 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1056 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1057 doc ->saveVtk (fic_vtk, nvtk);
1059 grid9->getHexa(0)->removeConnected ();
1060 doc ->saveVtk (fic_vtk, nvtk);
1062 CPPUNIT_ASSERT( true );