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"
35 #include "HexShape.hxx"
37 #include "HexMatrix.hxx"
39 #include "ModelTest.hxx"
41 CPPUNIT_TEST_SUITE_REGISTRATION( ModelTest );
44 ModelTest::ModelTest(void)
46 // _myHexEngine = new HEXA_NS::Hex();
47 // _myDoc= _myHexEngine->addDocument();
50 ModelTest::~ModelTest(void)
53 // delete _myHexEngine; //CS_TODO : Crash
57 // ======================================================== print_propagations
58 void ModelTest::_print_propagations (Hex::Document* doc)
60 int nb = doc->countPropagation ();
62 for (int nro=0 ; nro<nb ; nro++)
64 Hex::Propagation* prop = doc ->getPropagation (nro);
65 const Hex::Edges& table = prop->getEdges ();
66 printf (" ____________________________________ Prop nro %d\n", nro);
67 for (int ned=0 ; ned<(int)table.size() ; ned++)
69 bool way = table [ned]->getWay ();
70 Hex::Edge* edge = table [ned];
71 Hex::Vertex* v0 = edge->getVertex (0);
72 Hex::Vertex* v1 = edge->getVertex (1);
78 v1->printName (")\n");
83 v0->printName (")\n");
89 // // ======================================================== Test_sphere
90 // void ModelTest::Test_sphere ()
93 // Hex::Document* doc = mon_ex.addDocument ();
94 // Hex::Vertex* orig = doc->addVertex (0,0,0);
98 // Hex::Vector* decal = doc->addVector (1,1,1);
99 // Hex::Elements* sphere = doc->makeSpherical (orig, decal, ncouches, k);
101 // for (int nc=0 ; nc <= ncouches ; nc++)
103 // Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
105 // // sphere->getStrate (nc, Hex::Q_A)->remove ();
106 // // sphere->getStrate (nc, Hex::Q_B)->remove ();
109 // sphere->saveVtk ("sphere.vtk");
110 // CPPUNIT_ASSERT( true );
112 // ======================================================== Test_cartesi1
113 void ModelTest::Test_cartesi1 ()
116 const int size_x = 15;
117 const int size_y = 12;
118 const int size_z = 8;
121 Hex::Document* doc = mon_ex.addDocument ("foo");
122 Hex::Vertex* orig = doc->addVertex (0,0,0);
124 Hex::Vector* dir = doc->addVector (1,1,1);
125 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
127 // print_propagations (doc);
129 for (int nz=0; nz<size_z ; nz++)
130 for (int ny=nz+1; ny<size_y-nz-1 ; ny++)
131 for (int nx=nz+1; nx<size_x-nz-1 ; nx++)
133 Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
138 _print_propagations (doc);
139 grid->saveVtk ("grid_cart.vtk");
142 CPPUNIT_ASSERT( true );
144 // ======================================================== afficher
145 #define Afficher(elt) _afficher (#elt, elt)
146 int ModelTest::_afficher (cpchar nom, Hex::EltBase* elt)
150 printf (" .... %s = 0x0\n", nom);
154 printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
157 // ======================================================== Test_find
158 void ModelTest::Test_find ()
161 const int size_x = 2;
162 const int size_y = 2;
163 const int size_z = 2;
166 Hex::Document* doc = mon_ex.addDocument ("foo");
168 Hex::Vertex* orig = doc->addVertex (0,0,0);
169 Hex::Vector* dir = doc->addVector (1,1,1);
170 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
172 grid->saveVtk ("mini1.vtk");
175 Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
177 Afficher ( v00 = doc->findVertex (0, 0, 0));
178 Afficher ( v02 = doc->findVertex (1, 1, 0));
179 Afficher ( v06 = doc->findVertex (1, 1, 1));
180 Afficher ( v08 = doc->findVertex (2, 1, 0));
181 Afficher ( v10 = doc->findVertex (2, 1, 1));
182 Afficher ( v22 = doc->findVertex (2, 1, 2));
183 Afficher ( v26 = doc->findVertex (2, 2, 2));
187 Afficher (doc->findEdge (v06, v10));
188 Afficher (doc->findEdge (v10, v06));
191 Afficher (doc->findQuad (v02, v10));
192 Afficher (doc->findQuad (v06, v08));
193 Afficher (doc->findQuad (v02, v06));
196 Afficher (doc->findHexa (v00, v06));
197 Afficher (doc->findHexa (v06, v26));
198 Afficher (doc->findHexa (v26, v06));
200 CPPUNIT_ASSERT( true );
202 // ======================================================== Test_joint
203 void ModelTest::Test_joint ()
211 Hex::Document* doc = mon_ex.addDocument ("foo");
213 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
214 Hex::Vector* dir = doc->addVector (1,1,1);
216 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
218 Hex::Vertex* orig2 = doc->addVertex (dimx/2.0,0,8);
219 Hex::Vector* vectj = doc->addVector (0,1,0);
220 Hex::Vector* vecti = doc->addVector (1,0,0);
221 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vecti, vectj,
222 1, 180, 1, dimz,dimy,dimx);
226 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
227 Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my);
230 Hex::Vertex* v1 = prems->getVertex (0);
231 Hex::Vertex* v2 = cible->getVertex (0);
232 Hex::Vertex* v3 = prems->getVertex (1);
233 Hex::Vertex* v4 = cible->getVertex (3);
238 liste.push_back (prems);
239 for (int nx=0; nx<dimx; nx++)
241 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
243 for (int ny=0; ny<dimy; ny++)
245 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
247 // Hex::Elements* joint =
249 doc->joinQuads (liste, cible, v1, v2, v3, v4, 5);
250 doc->saveVtk ("joint.vtk");
252 CPPUNIT_ASSERT( true );
254 // ======================================================== Test_prism
255 void ModelTest::Test_prism ()
263 Hex::Document* doc = mon_ex.addDocument ("foo");
265 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
266 Hex::Vector* dir = doc->addVector (1,1,1);
268 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
272 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
275 liste.push_back (prems);
276 for (int nx=0; nx<dimx; nx++)
278 liste.push_back (grid1->getQuadIJ (nx, my, dimz));
280 for (int ny=0; ny<dimy; ny++)
282 liste.push_back (grid1->getQuadIJ (mx, ny, dimz));
284 doc->prismQuads (liste, dir, 5);
285 doc->saveVtk ("prisme.vtk");
287 CPPUNIT_ASSERT( true );
291 // ======================================================== Test_prism2
292 void ModelTest::Test_prism2 ()
300 Hex::Document* doc = mon_ex.addDocument ("foo");
302 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
303 Hex::Vector* dir = doc->addVector (1,1,1);
305 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, dimx,dimy,dimz);
309 Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz);
310 Hex::Elements* prism = doc->prismQuad(prems, dir, 5);
312 int nbHexa = prism->countHexa();
313 std::cout << "nbHexa " << nbHexa << std::endl;
314 Hex::Hexa* hp1 = prism->getHexa(1);
315 std::cout << "getHexa(1) " << hp1 << std::endl;
316 Hex::Vertex* hp1_v0 = hp1->getVertex(0);
317 std::cout << "getVertex ->" << hp1_v0 << std::endl;
318 Hex::Shape* s = new Hex::Shape("la shape");
319 std::cout << "new Hex::Shape->" << s << std::endl;
320 hp1_v0->setAssociation(s);
321 std::cout << "setAssociation ->" << std::endl;
322 doc->saveVtk ("prisme2.vtk");
324 CPPUNIT_ASSERT( true );
334 // ======================================================== Test_hexa1
335 void ModelTest::Test_hexa1 ()
338 const int size_x = 1;
339 const int size_y = 1;
340 const int size_z = 1;
343 Hex::Document* doc = mon_ex.addDocument ("foo");
344 Hex::Vertex* orig = doc->addVertex (0,0,0);
345 Hex::Vector* dir = doc->addVector (1,1,1);
346 // Hex::Elements* grid =
347 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
351 CPPUNIT_ASSERT( true );
353 // ======================================================== Test_decoupage
354 void ModelTest::Test_decoupage ()
357 const int size_x = 2;
358 const int size_y = 1;
359 const int size_z = 1;
362 Hex::Document* doc = mon_ex.addDocument ("foo");
364 Hex::Vertex* orig = doc->addVertex (0,0,0);
365 Hex::Vector* dir = doc->addVector (1,1,1);
367 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
368 Hex::Edge* arete = grid->getEdgeK (0, 0, 0);
371 doc ->saveVtk ("no_decoupe.vtk");
372 /* Hex::Elements* grid2 = */ doc->cut (arete, 1);
375 doc ->saveVtk ("decoupe.vtk");
376 // doc ->saveFile ();
378 CPPUNIT_ASSERT( true );
380 // ======================================================== Test_gen_xml
381 void ModelTest::Test_gen_xml ()
384 const int size_x = 2;
385 const int size_y = 2;
386 const int size_z = 2;
389 Hex::Document* doc = mon_ex.addDocument ("foo");
391 Hex::Vertex* orig = doc->addVertex (0,0,0);
392 Hex::Vector* dir = doc->addVector (1,1,1);
393 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
395 Hex::Hexa* cell = grid->getHexa (0);
396 Hex::Quad* face = cell->getQuad (0);
397 Hex::Edge* arete = cell->getEdge (0);
398 Hex::Vertex* noeud = cell->getVertex (0);
400 Hex::Shape* shape1 = new Hex::Shape("riri");
401 Hex::Shape* shape2 = new Hex::Shape("fifi");
402 Hex::Shape* shape3 = new Hex::Shape("loulou");
404 noeud->setAssociation (shape1);
405 arete->setAssociation (shape2);
406 face ->setAssociation (shape3);
408 Hex::Law* law1 = doc->addLaw("loi1", 1);
409 Hex::Law* law2 = doc->addLaw("loi2", 2);
410 Hex::Law* law3 = doc->addLaw("loi3", 3);
412 law1->setKind (Hex::Uniform);
413 law2->setKind (Hex::Arithmetic);
414 law3->setKind (Hex::Geometric);
416 Hex::Propagation* prop1 = doc->getPropagation (0);
417 Hex::Propagation* prop2 = doc->getPropagation (1);
418 Hex::Propagation* prop3 = doc->getPropagation (2);
420 prop1->setLaw (law1);
421 prop2->setLaw (law2);
422 prop3->setLaw (law3);
424 prop1->setWay (true);
425 prop2->setWay (false);
426 prop3->setWay (true);
428 doc ->saveVtk ("mini.vtk");
429 doc ->save ("Essai");
431 CPPUNIT_ASSERT( true );
433 // ======================================================== Test_relecture
434 void ModelTest::Test_relecture ()
438 Hex::Document* doc = mon_ex.loadDocument ("Essai");
441 doc ->saveVtk ("restore.vtk");
443 CPPUNIT_ASSERT( true );
447 // ======================================================== Test_clone
448 void ModelTest::Test_clone ()
451 const int size_x = 2;
452 const int size_y = 2;
453 const int size_z = 2;
456 Hex::Document* doc = mon_ex.addDocument ("foo");
458 Hex::Vertex* orig = doc->addVertex (0,0,0);
459 Hex::Vector* dir = doc->addVector (1,1,1);
460 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
462 Hex::Vector* bond = doc->addVector (0, 0, 7);
463 Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
465 doc ->saveVtk ("clonage.vtk");
468 HexDump (grid2->getHexa (1));
469 HexDump (grid2->getHexaIJK (1,1,1));
470 HexDump (grid2->getVertexIJK (1,1,1));
472 CPPUNIT_ASSERT( true );
474 // ======================================================== Test_separ
475 void ModelTest::Test_separ ()
478 const int size_x = 2;
479 const int size_y = 2;
480 const int size_z = 2;
483 Hex::Document* doc = mon_ex.addDocument ("foo");
485 Hex::Vertex* orig = doc->addVertex (0,0,0);
486 Hex::Vector* dir = doc->addVector (1,1,1);
487 // Hex::Elements* grid =
488 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
490 doc ->saveVtk ("separ.vtk");
493 CPPUNIT_ASSERT( true );
495 // // ======================================================== Test_cyl_karima
496 // void ModelTest::Test_cyl_karima ()
500 // Hex::Document* doc = mon_ex.addDocument ("foo");
502 // Hex::Vertex* c2 = doc->addVertex (0,0,0);
503 // Hex::Vector* dz = doc->addVector (0,0,1);
504 // Hex::Vector* dx = doc->addVector (1,0,0);
515 // /* Hex::Elements* cyl2 = */ doc->makeCylindrical (c2, dx, dz, dr, a2, l2,
516 // nr2, na2, nl2, false );
517 // doc->saveVtk ("cyl_karima.vtk");
520 // CPPUNIT_ASSERT( true );
522 // ================================================== Test_grille_cyl
523 void ModelTest::Test_grille_cyl ()
527 Hex::Document* doc = mon_ex.addDocument ("foo");
529 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
530 Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
532 Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
533 Hex::Vertex* orig4 = doc->addVertex (10,10,0);
535 Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
536 Hex::Vertex* orig6 = doc->addVertex (10,20,0);
538 Hex::Vector* vz = doc->addVector (0,0,1);
539 Hex::Vector* vx = doc->addVector (1,0,0);
547 doc->makeCylindrical(orig1,vx,vz,dr, 360, dl,nr,4,nl, true);
548 doc->makeCylindrical(orig2,vx,vz,dr, 360, dl,nr,8,nl, true);
549 doc->makeCylindrical(orig3,vx,vz,dr, 270, dl,nr,8,nl, true);
550 doc->makeCylindrical(orig6,vx,vz,dr, 360, dl,nr,6,nl, true);
551 doc->makeCylindrical(orig4,vx,vz,dr, 270, dl,nr,7,nl, true);
552 doc->makeCylindrical(orig5,vx,vz,dr, 360, dl,nr,5,nl, true);
553 doc->saveVtk ("cylindres.vtk");
556 CPPUNIT_ASSERT( true );
558 // ===================================================== Test_cylinder
559 void ModelTest::Test_cylinder ()
563 cpchar fic_vtk = "cylindre";
566 Hex::Document* doc = mon_ex.addDocument ("foo");
568 Hex::Vertex* orig1 = doc->addVertex (0, 0,0);
569 Hex::Vertex* orig2 = doc->addVertex (50,0,0);
570 Hex::Vector* vz = doc->addVector (0,0,1);
571 Hex::Vector* vx = doc->addVector (1,0,0);
579 Hex::Cylinder* cyl = doc->addCylinder (orig1, vz, nr, nl);
580 Hex::Pipe* pipe = doc->addPipe (orig2, vz, nri, nre, nl);
582 doc->makeCylinder (cyl, vx, nr, na, nl);
583 doc ->saveVtk (fic_vtk, nvtk);
585 doc->makePipe (pipe, vx, nr, na, nl);
586 doc ->saveVtk (fic_vtk, nvtk);
588 CPPUNIT_ASSERT( true );
593 void ModelTest::myTest_croix ()
596 Hex::Document* doc = mon_ex.addDocument ("foo");
599 // Hex::Vector* dx1 = doc->addVector( -1, 0, 0 );
600 // Hex::Vector* dz1 = doc->addVector( 0, 0, 1 );
602 // Hex::Vertex* c_pte_1 = doc->addVertex ( 195., 0., 220. );
603 // Hex::Vertex* c_grd_1 = doc->addVertex ( 300., 0., 400. );
604 // Hex::Cylinder* cyl_pte_1 = doc->addCylinder( c_pte_1 , dz1 , 25 , 360 );
605 // Hex::Cylinder* cyl_grd_1 = doc->addCylinder( c_grd_1 , dx1 , 50 , 140 );
606 // Hex::CrossElements* cross1 = doc->makeCylinders( cyl_pte_1 , cyl_grd_1 );
608 Hex::Vector* dx2 = doc->addVector(-1, 0, 0 );
609 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
611 Hex::Vertex* c_pte_2 = doc->addVertex( 110., 0. , 400. );
612 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
614 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 220 );
615 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 );
620 Hex::Vector* dx2 = doc->addVector( 1, 0, 0 );
621 Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
623 Hex::Vertex* c_pte_2 = doc->addVertex( -130. , 0. , 400. );
624 Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
626 Hex::Cylinder* cyl_pte_2 = doc->addCylinder( c_pte_2 , dx2 , 50, 260 );
627 Hex::Cylinder* cyl_grd_2 = doc->addCylinder( c_grd_2 , dz2 , 100, 800 );
629 Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );*/
630 doc->saveVtk ("/tmp/ffffffff.vtk");
633 CPPUNIT_ASSERT( true );
639 // ======================================================== Test_croix
640 void ModelTest::Test_croix ()
644 Hex::Document* doc = mon_ex.addDocument ("foo");
646 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
647 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
648 Hex::Vector* vz = doc->addVector ( 0,0,1);
649 Hex::Vector* vx = doc->addVector ( 1,0,0);
656 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, nr1, nl1);
657 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, nr2, nl2);
658 Hex::CrossElements* grid = doc->makeCylinders (cyl1, cyl2);
664 for (int ny=0; ny<Hex::S_MAXI; ny++)
666 grid->getHexaIJK (Hex::Cyl1, 1, ny, 0)->remove ();
667 grid->getHexaIJK (Hex::Cyl1, 1, ny, 1)->remove ();
668 grid->getHexaIJK (Hex::Cyl1, 1, ny, 2)->remove ();
669 grid->getHexaIJK (Hex::Cyl1, 1, ny, 3)->remove ();
670 grid->getHexaIJK (Hex::Cyl1, 1, ny, 4)->remove ();
671 grid->getHexaIJK (Hex::Cyl1, 1, ny, 5)->remove ();
673 grid->getHexaIJK (Hex::Cyl2, 1, ny, 0)->remove ();
674 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 1)->remove ();
675 // grid->getHexaIJK (Hex::Cyl2, 1, ny, 2)->remove ();
676 grid->getHexaIJK (Hex::Cyl2, 1, ny, 3)->remove ();
679 for (int ny=0; ny<4 ; ny++)
681 grid->getHexaIJK (Hex::Cyl1, 0, ny, 0)->remove ();
682 grid->getHexaIJK (Hex::Cyl1, 0, ny, 1)->remove ();
683 grid->getHexaIJK (Hex::Cyl1, 0, ny, 2)->remove ();
684 grid->getHexaIJK (Hex::Cyl1, 0, ny, 3)->remove ();
685 grid->getHexaIJK (Hex::Cyl1, 0, ny, 4)->remove ();
686 grid->getHexaIJK (Hex::Cyl1, 0, ny, 5)->remove ();
688 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 0)->remove ();
689 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 1)->remove ();
690 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 2)->remove ();
691 // grid->getHexaIJK (Hex::Cyl2, 0, ny, 3)->remove ();
694 /*********************************
695 grid->getHexaIJK (Hex::Cyl2, 0, 3, 1)->remove ();
696 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 2)->remove ();
697 grid->getHexaIJK (Hex::Cyl2, 1, Hex::S_SE, 1)->remove ();
699 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 3)->remove ();
700 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 2)->remove ();
701 grid->getHexaIJK (Hex::Cyl1, 1, Hex::S_SE, 1)->remove ();
702 ********************************* */
705 doc->saveVtk ("croix.vtk");
708 CPPUNIT_ASSERT( true );
710 // ======================================================== Test_pipes
711 void ModelTest::Test_pipes ()
715 Hex::Document* doc = mon_ex.addDocument ("foo");
717 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
718 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
719 Hex::Vector* vz = doc->addVector ( 0,0,1);
720 Hex::Vector* vx = doc->addVector ( 1,0,0);
722 double h1 = 10, h2 = 10;
723 double ri1 = 1, ri2 = 1.5;
724 double re1 = 2, re2 = 3;
726 Hex::Pipe* pipe1 = doc->addPipe (ori1, vz, ri1, re1, h1);
727 Hex::Pipe* pipe2 = doc->addPipe (ori2, vx, ri2, re2, h2);
728 Hex::CrossElements* grid = doc->makePipes (pipe1, pipe2);
733 doc->saveVtk ("pipes.vtk");
735 CPPUNIT_ASSERT( true );
737 // ======================================================== Test_lorraine
738 void ModelTest::Test_lorraine()
742 Hex::Document* doc = mon_ex.addDocument ("foo");
744 Hex::Vertex* ori1 = doc->addVertex ( 0,0,0);
745 Hex::Vertex* ori2 = doc->addVertex (-5,0,5);
746 Hex::Vertex* ori3 = doc->addVertex ( 0,0,12);
747 Hex::Vertex* ori4 = doc->addVertex (-5,0,17);
749 Hex::Vector* vz = doc->addVector ( 0,0,1);
750 Hex::Vector* vx = doc->addVector ( 1,0,0);
759 Hex::Cylinder* cyl1 = doc->addCylinder (ori1, vz, rmoy, nl1);
760 Hex::Cylinder* cyl2 = doc->addCylinder (ori2, vx, rsmall, nl2);
762 Hex::Cylinder* cyl3 = doc->addCylinder (ori3, vz, rmoy, nl1);
763 Hex::Cylinder* cyl4 = doc->addCylinder (ori4, vx, rbig, nl2);
765 Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
766 Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
768 #define Imprimer(x) printf (#x " = ") ; if (x) x->dump() ; else printf ("NULL\n")
769 const int nx_int = 0;
770 const int nx_ext = 1;
772 // vc2 = grid1->getVertexIJK (Hex::Cyl2, 0,0,0);
773 // vc3 = grid2->getVertexIJK (Hex::Cyl1, 0,0,0);
775 Hex::Quad* qb = grid1-> getQuadIJ (Hex::Cyl2, nx_ext, Hex::S_E, 4);
776 Hex::Quad* qh = grid2-> getQuadIJ (Hex::Cyl1, nx_ext, Hex::S_N, 0);
778 Hex::Vertex* vb0 = qb->getVertex (3);
779 Hex::Vertex* vb1 = qb->getVertex (2);
780 Hex::Vertex* vh0 = qh->getVertex (0);
781 Hex::Vertex* vh1 = qh->getVertex (1);
783 vb0 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_E, 4); // cible
784 vb1 = grid1->getVertexIJK (Hex::Cyl2, 2, Hex::S_NE, 4);
785 vh0 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_N, 0); // depart
786 vh1 = grid2->getVertexIJK (Hex::Cyl1, 2, Hex::S_NW, 0);
797 hliste.push_back (qh);
798 for (int ny=1; ny<Hex::S_MAXI; ny++)
800 int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
801 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_ext, ns, 0));
804 for (int ny=0; ny<4 ; ny++)
805 hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_int, ny, 0));
807 doc->joinQuads (hliste, qb, vh0, vb0, vh1, vb1, 5);
808 doc->saveVtk ("lorraine.vtk");
810 CPPUNIT_ASSERT( true );
812 // ======================================================== Test_disconnect
813 void ModelTest::Test_disconnect ()
816 const int size_x = 2;
817 const int size_y = 2;
818 const int size_z = 1;
821 Hex::Document* doc = mon_ex.addDocument ("foo");
823 Hex::Vertex* orig1 = doc->addVertex (0,0,0);
824 Hex::Vertex* orig2 = doc->addVertex (4,0,0);
825 Hex::Vertex* orig3 = doc->addVertex (8,0,0);
827 Hex::Vector* dir = doc->addVector (1,1,1);
828 Hex::Elements* grid1 = doc->makeCartesian (orig1, dir, size_x,size_y,size_z);
829 Hex::Elements* grid2 = doc->makeCartesian (orig2, dir, size_x,size_y,size_z);
830 Hex::Elements* grid3 = doc->makeCartesian (orig3, dir, size_x,size_y,size_z);
835 Hex::Vector* ecart = doc->addVector (0.5,0.5,0);
836 matrice.defTranslation (ecart);
838 Hex::Hexa* hexa1 = grid1->getHexaIJK (1,1,0);
839 Hex::Hexa* hexa2 = grid2->getHexaIJK (1,1,0);
840 Hex::Hexa* hexa3 = grid3->getHexaIJK (1,1,0);
842 Hex::Quad* quad = grid1->getQuadJK (1,1,0);
843 Hex::Edge* edge = grid2->getEdgeK (1,2,0);
844 Hex::Vertex* vertex = grid3->getVertexIJK (1,1,1);
848 vertex->setScalar (5);
850 doc->saveVtk ("Test_disco", nvtk);
851 doc->disconnectQuad (hexa1, quad);
853 hexa1 ->transform (&matrice);
854 doc->saveVtk ("Test_disco", nvtk);
856 doc->disconnectEdge (hexa2, edge);
858 hexa2->transform (&matrice);
859 doc->saveVtk ("Test_disco", nvtk);
861 doc->disconnectVertex (hexa3, vertex);
863 hexa3->transform (&matrice);
864 doc->saveVtk ("Test_disco", nvtk);
866 doc->dumpPropagation ();
869 CPPUNIT_ASSERT( true );
871 // ======================================================== Test_propagation
872 void ModelTest::Test_propagation ()
875 const int size_x = 2;
876 const int size_y = 1;
877 const int size_z = 1;
880 Hex::Document* doc = mon_ex.addDocument ("foo");
882 Hex::Vertex* orig = doc->addVertex (0,0,0);
883 Hex::Vector* dir = doc->addVector (1,1,1);
884 // Hex::Elements* grid =
885 doc->makeCartesian (orig, dir, size_x,size_y,size_z);
887 int nb = doc->countPropagation ();
888 for (int nro=0 ; nro<nb ; nro++)
890 Hex::Propagation* prop = doc ->getPropagation (nro);
891 const Hex::Edges& table = prop->getEdges ();
892 printf (" ____________________________________ Prop nro %d\n", nro);
893 for (int ned=0 ; ned<(int)table.size() ; ned++)
895 bool way = table [ned]->getWay ();
900 table [ned]->getVertex (0)->printName (", ");
901 table [ned]->getVertex (1)->printName (")\n");
906 table [ned]->getVertex (1)->printName (", ");
907 table [ned]->getVertex (0)->printName (")\n");
913 doc->saveVtk ("Test_propagation.vtk");
914 doc->save ("Test_propagation");
916 CPPUNIT_ASSERT( true );
918 // ======================================================== Test_move
919 void ModelTest::Test_move ()
922 const int size_x = 1;
923 const int size_y = 1;
924 const int size_z = 2;
927 Hex::Document* doc = mon_ex.addDocument ("foo");
929 Hex::Vertex* orig = doc->addVertex (0,0,0);
930 Hex::Vector* dir = doc->addVector (1,1,1);
931 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
933 Hex::Vector* enhaut = doc->addVector (0, 0, 5);
934 Hex::Vector* devant = doc->addVector (5, 0, 0);
935 // Hex::Vector* agauche = doc->addVector (0, 5, 0);
938 matrice.defTranslation (enhaut);
940 Hex::Hexa* cube = grid->getHexa (1);
941 Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
944 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
945 /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
946 Hex::Hexa* cube2 = grid2->getHexa (1);
948 doc ->saveVtk ("move0.vtk");
950 cube ->disconnectQuad (dessous);
951 cube ->transform (&matrice);
952 cube2->transform (&matrice);
954 doc ->saveVtk ("move1.vtk");
957 CPPUNIT_ASSERT( true );
959 // ======================================================== Test_deux_cyl
960 void ModelTest::Test_deux_cyl ()
964 Hex::Document* doc = mon_ex.addDocument ("foo");
966 Hex::Vertex* orig1 = doc->addVertex (0,0,-5);
967 Hex::Vertex* orig2 = doc->addVertex (-5,0,0);
969 Hex::Vector* vx = doc->addVector (1,0,0);
970 Hex::Vector* vy = doc->addVector (0,1,0);
971 Hex::Vector* vz = doc->addVector (0,0,1);
974 double da = 360; // degres
980 /* Hex::Elements* cyl1 = */ doc->makeCylindrical(orig1, vy,vz, dr, da,
983 /* Hex::Elements* cyl2 = */ doc->makeCylindrical(orig2, vz,vx, dr/2, da,
985 doc->saveVtk ("deux_cylindres.vtk");
986 CPPUNIT_ASSERT( true );
988 // ======================================================== Test_move2
989 void ModelTest::Test_transfo ()
992 const int size_x = 1;
993 const int size_y = 1;
994 const int size_z = 2;
997 cpchar fic_vtk = "transfo";
1000 Hex::Document* doc = mon_ex.addDocument ("foo");
1003 Hex::Vertex* orig = doc->addVertex (0,0,0);
1004 Hex::Vector* dir = doc->addVector (1,1,1);
1005 Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x, size_y,
1008 CPPUNIT_ASSERT( false );
1012 doc ->saveVtk (fic_vtk, nvtk);
1014 Hex::Vector* devant = doc->addVector (5, 0, 0);
1016 Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
1018 CPPUNIT_ASSERT( false );
1019 doc ->saveVtk (fic_vtk, nvtk);
1021 Hex::Elements* grid3 = doc->makeScale (grid2, orig, 2);
1023 CPPUNIT_ASSERT( false );
1024 doc ->saveVtk (fic_vtk, nvtk);
1026 Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1028 CPPUNIT_ASSERT( false );
1029 doc ->saveVtk (fic_vtk, nvtk);
1031 Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1033 CPPUNIT_ASSERT( false );
1035 doc ->saveVtk (fic_vtk, nvtk);
1037 Hex::Vector* dir1 = doc->addVector (1,0,0);
1038 Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1040 CPPUNIT_ASSERT( false );
1042 grid4->getHexa(0)->getVertex(0)->setScalar(3);
1043 grid6->getHexa(0)->getVertex(0)->setScalar(3);
1044 doc ->saveVtk (fic_vtk, nvtk);
1046 grid4->getHexa(0)->getVertex(0)->setScalar(0);
1047 grid6->getHexa(0)->getVertex(0)->setScalar(0);
1049 Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1051 CPPUNIT_ASSERT( false );
1053 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1054 grid7->getHexa(0)->getVertex(0)->setScalar(4);
1055 doc ->saveVtk (fic_vtk, nvtk);
1057 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1058 grid7->getHexa(0)->getVertex(0)->setScalar(0);
1060 Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1062 CPPUNIT_ASSERT( false );
1064 grid2->getHexa(0)->getVertex(0)->setScalar(4);
1065 grid8->getHexa(0)->getVertex(0)->setScalar(4);
1066 doc ->saveVtk (fic_vtk, nvtk);
1067 grid2->getHexa(0)->getVertex(0)->setScalar(0);
1068 grid8->getHexa(0)->getVertex(0)->setScalar(0);
1070 Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1072 CPPUNIT_ASSERT( false );
1074 grid3->getHexa(0)->getVertex(0)->setScalar(4);
1075 grid9->getHexa(0)->getVertex(0)->setScalar(4);
1076 doc ->saveVtk (fic_vtk, nvtk);
1078 grid9->getHexa(0)->removeConnected ();
1079 doc ->saveVtk (fic_vtk, nvtk);
1081 CPPUNIT_ASSERT( true );