]> SALOME platform Git repositories - modules/hexablock.git/blob - src/TEST_CPP/ModelTest.cxx
Salome HOME
First publish of HEXABLOCKcomponant
[modules/hexablock.git] / src / TEST_CPP / ModelTest.cxx
1 #include <cppunit/extensions/HelperMacros.h>
2
3
4 #include "hexa_base.hxx"
5 #include "Hex.hxx"
6 #include "HexDocument.hxx"
7 #include "HexElements.hxx"
8 #include "HexCrossElements.hxx"
9
10 #include "HexHexa.hxx"
11 #include "HexQuad.hxx"
12 #include "HexEdge.hxx"
13 #include "HexVertex.hxx"
14
15 #include "HexPropagation.hxx"
16 #include "HexShape.hxx"
17 #include "HexLaw.hxx"
18 #include "HexMatrix.hxx"
19
20 #include "ModelTest.hxx"
21
22 CPPUNIT_TEST_SUITE_REGISTRATION( ModelTest );
23
24
25 ModelTest::ModelTest(void)
26 {
27 //   _myHexEngine = new HEXA_NS::Hex();
28 //   _myDoc= _myHexEngine->addDocument();
29 }
30
31 ModelTest::~ModelTest(void)
32 {
33 //   delete _myDoc;
34 //   delete _myHexEngine; //CS_TODO : Crash
35 }
36
37
38 // ======================================================== print_propagations
39 void ModelTest::_print_propagations (Hex::Document* doc)
40 {
41    int nb = doc->countPropagation ();
42    Display (nb);
43    for (int nro=0 ; nro<nb ; nro++)
44        {
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++)
49            {
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);
54
55            if (way)
56               {
57               printf ("     (");
58               v0->printName (", ");
59               v1->printName (")\n");
60               }
61           else
62               {
63               v1->printName (", ");
64               v0->printName (")\n");
65               printf ("     (");
66               }
67            }
68        }
69 }
70 // // ======================================================== Test_sphere
71 // void ModelTest::Test_sphere ()
72 // {
73 //    Hex::Hex mon_ex;
74 //    Hex::Document* doc = mon_ex.addDocument ();
75 //    Hex::Vertex*  orig = doc->addVertex (0,0,0);
76 // 
77 //    int    ncouches = 1;
78 //    double k = 0.8;
79 //    Hex::Vector*   decal  = doc->addVector (1,1,1);
80 //    Hex::Elements* sphere = doc->makeSpherical (orig, decal, ncouches, k);
81 // 
82 //    for (int nc=0 ; nc <= ncouches ; nc++)
83 //        {
84 //        Hex::Hexa* cell = sphere->getStrate (nc, Hex::Q_A);
85 //        cell->remove ();
86 //        // sphere->getStrate (nc, Hex::Q_A)->remove ();
87 //        // sphere->getStrate (nc, Hex::Q_B)->remove ();
88 //        }
89 // 
90 //    sphere->saveVtk ("sphere.vtk");
91 //    CPPUNIT_ASSERT( true );
92 // }
93 // ======================================================== Test_cartesi1
94 void ModelTest::Test_cartesi1 ()
95 {
96    
97    const int size_x = 15;
98    const int size_y = 12;
99    const int size_z = 8;
100
101    Hex::Hex mon_ex;
102    Hex::Document* doc = mon_ex.addDocument ();
103    Hex::Vertex* orig = doc->addVertex (0,0,0);
104
105    Hex::Vector*   dir  = doc->addVector (1,1,1);
106    Hex::Elements* grid = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
107
108    //  print_propagations (doc);
109
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++)
113                {
114                Hex::Hexa* cell = grid->getHexaIJK (nx, ny, nz);
115                cell->remove ();
116                }
117    
118    doc->setLevel (1);
119    _print_propagations (doc);
120    grid->saveVtk ("grid_cart.vtk");
121
122    // doc->dump ();
123    CPPUNIT_ASSERT( true );
124 }
125 // ======================================================== afficher
126 #define Afficher(elt) _afficher (#elt, elt)
127 int ModelTest::_afficher (cpchar nom, Hex::EltBase* elt)
128 {
129    if (elt==NULL)
130       {
131       printf (" .... %s = 0x0\n", nom);
132       return HOK;
133       }
134
135    printf (" .... %s = 0x%08lx = %03d\n", nom, (unsigned long) elt, elt->getId());
136    return HOK;
137 }
138 // ======================================================== Test_find
139 void ModelTest::Test_find ()
140 {
141    
142    const int size_x = 2;
143    const int size_y = 2;
144    const int size_z = 2;
145
146    Hex::Hex mon_ex;
147    Hex::Document* doc = mon_ex.addDocument ();
148
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);
152
153    grid->saveVtk ("mini1.vtk");
154    doc->dump ();
155
156    Hex::Vertex *v00, *v02, *v06, *v08, *v10, *v22, *v26;
157
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));
165
166    printf ("\n");
167
168    Afficher (doc->findEdge (v06, v10));
169    Afficher (doc->findEdge (v10, v06));
170    printf ("\n");
171
172    Afficher (doc->findQuad (v02, v10));
173    Afficher (doc->findQuad (v06, v08));
174    Afficher (doc->findQuad (v02, v06));
175
176    printf ("\n");
177    Afficher (doc->findHexa (v00, v06));
178    Afficher (doc->findHexa (v06, v26));
179    Afficher (doc->findHexa (v26, v06));
180
181    CPPUNIT_ASSERT( true );
182 }
183 // ======================================================== Test_joint
184 void ModelTest::Test_joint ()
185 {
186    
187    const int dimx = 11;
188    const int dimy = 11;
189    const int dimz = 2;
190
191    Hex::Hex mon_ex;
192    Hex::Document* doc = mon_ex.addDocument ();
193
194    Hex::Vertex* orig1 = doc->addVertex (0,0,0);
195    Hex::Vector* dir   = doc->addVector (1,1,1);
196
197    Hex::Elements* grid1 = doc->makeCartesian   (orig1, dir, dimx,dimy,dimz);
198
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);
204
205    int mx = dimx/2;
206    int my = dimy/2;
207    Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz); 
208    Hex::Quad* cible = grid2->getQuadJK (dimz, mx, my); 
209
210
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);
215
216    Hex::Quads liste;
217    Hex::Quads miroir;
218
219    liste.push_back (prems);
220    for (int nx=0; nx<dimx; nx++)
221        if (nx!=mx) 
222           liste.push_back (grid1->getQuadIJ (nx, my, dimz)); 
223
224    for (int ny=0; ny<dimy; ny++)
225        if (ny!=my) 
226           liste.push_back (grid1->getQuadIJ (mx, ny, dimz)); 
227
228    // Hex::Elements* joint = 
229    //
230    doc->joinQuads  (liste, cible, v1, v2, v3, v4, 5);
231    doc->saveVtk ("joint.vtk");
232
233    CPPUNIT_ASSERT( true );
234 }
235 // ======================================================== Test_prism
236 void ModelTest::Test_prism ()
237 {
238    
239    const int dimx = 11;
240    const int dimy = 11;
241    const int dimz = 2;
242
243    Hex::Hex mon_ex;
244    Hex::Document* doc = mon_ex.addDocument ();
245
246    Hex::Vertex* orig1 = doc->addVertex (0,0,0);
247    Hex::Vector* dir   = doc->addVector (1,1,1);
248
249    Hex::Elements* grid1 = doc->makeCartesian   (orig1, dir, dimx,dimy,dimz);
250
251    int mx = dimx/2;
252    int my = dimy/2;
253    Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz); 
254    Hex::Quads liste;
255
256    liste.push_back (prems);
257    for (int nx=0; nx<dimx; nx++)
258        if (nx!=mx) 
259           liste.push_back (grid1->getQuadIJ (nx, my, dimz)); 
260
261    for (int ny=0; ny<dimy; ny++)
262        if (ny!=my) 
263           liste.push_back (grid1->getQuadIJ (mx, ny, dimz)); 
264
265    doc->prismQuads  (liste, dir, 5);
266    doc->saveVtk ("prisme.vtk");
267
268    CPPUNIT_ASSERT( true );
269 }
270
271
272 // ======================================================== Test_prism2
273 void ModelTest::Test_prism2 ()
274 {
275     
276     const int dimx = 11;
277     const int dimy = 11;
278     const int dimz = 2;
279     
280     Hex::Hex mon_ex;
281     Hex::Document* doc = mon_ex.addDocument ();
282     
283     Hex::Vertex* orig1 = doc->addVertex (0,0,0);
284     Hex::Vector* dir   = doc->addVector (1,1,1);
285     
286     Hex::Elements* grid1 = doc->makeCartesian   (orig1, dir, dimx,dimy,dimz);
287     
288     int mx = dimx/2;
289     int my = dimy/2;
290     Hex::Quad* prems = grid1->getQuadIJ (mx, my, dimz); 
291     Hex::Elements*  prism = doc->prismQuad(prems, dir, 5);
292
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");
304
305     CPPUNIT_ASSERT( true );
306 }
307
308
309
310
311
312
313
314
315 // ======================================================== Test_hexa1
316 void ModelTest::Test_hexa1 ()
317 {
318    
319    const int size_x = 1;
320    const int size_y = 1;
321    const int size_z = 1;
322
323    Hex::Hex mon_ex;
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);
329
330    doc ->dump ();
331
332    CPPUNIT_ASSERT( true );
333 }
334 // ======================================================== Test_decoupage
335 void ModelTest::Test_decoupage ()
336 {
337    
338    const int size_x = 2;
339    const int size_y = 1;
340    const int size_z = 1;
341
342    Hex::Hex mon_ex;
343    Hex::Document* doc = mon_ex.addDocument ();
344
345    Hex::Vertex* orig = doc->addVertex (0,0,0);
346    Hex::Vector* dir  = doc->addVector (1,1,1);
347
348    Hex::Elements* grid  = doc->makeCartesian (orig, dir, size_x,size_y,size_z);
349    Hex::Edge*     arete = grid->getEdgeK (0, 0, 0);
350
351    doc ->dump ();
352    doc ->saveVtk ("no_decoupe.vtk");
353 /* Hex::Elements* grid2 = */  doc->cut (arete, 1);
354
355    doc ->dump ();
356    doc ->saveVtk ("decoupe.vtk");
357    // doc ->saveFile ();
358
359    CPPUNIT_ASSERT( true );
360 }
361 // ======================================================== Test_gen_xml
362 void ModelTest::Test_gen_xml ()
363 {
364    
365    const int size_x = 2;
366    const int size_y = 2;
367    const int size_z = 2;
368
369    Hex::Hex mon_ex;
370    Hex::Document* doc = mon_ex.addDocument ();
371
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);
375
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);
380
381    Hex::Shape* shape1 = new Hex::Shape("riri");
382    Hex::Shape* shape2 = new Hex::Shape("fifi");
383    Hex::Shape* shape3 = new Hex::Shape("loulou");
384
385    noeud->setAssociation (shape1);
386    arete->setAssociation (shape2);
387    face ->setAssociation (shape3);
388
389    Hex::Law* law1 = doc->addLaw("loi1", 1);
390    Hex::Law* law2 = doc->addLaw("loi2", 2);
391    Hex::Law* law3 = doc->addLaw("loi3", 3);
392
393    law1->setKind (Hex::Uniform);
394    law2->setKind (Hex::Arithmetic);
395    law3->setKind (Hex::Geometric);
396
397    Hex::Propagation* prop1 = doc->getPropagation (0);
398    Hex::Propagation* prop2 = doc->getPropagation (1);
399    Hex::Propagation* prop3 = doc->getPropagation (2);
400
401    prop1->setLaw (law1);
402    prop2->setLaw (law2);
403    prop3->setLaw (law3);
404
405    prop1->setWay (true);
406    prop2->setWay (false);
407    prop3->setWay (true);
408
409    doc ->saveVtk ("mini.vtk");
410    doc ->setFile ("Essai");
411    doc ->saveFile ();
412
413    CPPUNIT_ASSERT( true );
414 }
415 // ======================================================== Test_relecture
416 void ModelTest::Test_relecture ()
417 {
418    
419    Hex::Hex mon_ex;
420    Hex::Document* doc = mon_ex.loadDocument ("Essai");
421
422    doc ->dump ();
423    doc ->saveVtk ("restore.vtk");
424
425    CPPUNIT_ASSERT( true );
426 }
427 // ======================================================== Test_clone
428 void ModelTest::Test_clone ()
429 {
430    
431    const int size_x = 2;
432    const int size_y = 2;
433    const int size_z = 2;
434
435    Hex::Hex mon_ex;
436    Hex::Document* doc = mon_ex.addDocument ();
437
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);
441
442    Hex::Vector*   bond  = doc->addVector (0, 0, 7);
443    Hex::Elements* grid2 = doc->makeTranslation (grid, bond);
444
445    doc ->saveVtk ("clonage.vtk");
446    doc ->dump();
447
448    HexDump (grid2->getHexa      (1));
449    HexDump (grid2->getHexaIJK   (1,1,1));
450    HexDump (grid2->getVertexIJK (1,1,1));
451
452    CPPUNIT_ASSERT( true );
453 }
454 // ======================================================== Test_separ
455 void ModelTest::Test_separ ()
456 {
457    
458    const int size_x = 2;
459    const int size_y = 2;
460    const int size_z = 2;
461
462    Hex::Hex mon_ex;
463    Hex::Document* doc = mon_ex.addDocument ();
464
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);
469
470    doc ->saveVtk ("separ.vtk");
471    doc ->dump();
472
473    CPPUNIT_ASSERT( true );
474 }
475 // // ======================================================== Test_cyl_karima
476 // void ModelTest::Test_cyl_karima ()
477 // {
478 //    
479 //    Hex::Hex mon_ex;
480 //    Hex::Document* doc = mon_ex.addDocument ();
481 // 
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);
485 // 
486 //    double dr = 4.12;
487 // 
488 //    double a2 = 180;
489 //    int    l2 = 70;
490 // 
491 //    int nr2 = 5;
492 //    int na2 = 5;
493 //    int nl2 = 1;
494 // 
495 // /* Hex::Elements* cyl2 = */ doc->makeCylindrical (c2, dx, dz, dr, a2, l2, 
496 //                                                   nr2, na2, nl2, false );
497 //    doc->saveVtk ("cyl_karima.vtk");
498 //    // doc->dump ();
499 // 
500 //    CPPUNIT_ASSERT( true );
501 // }
502 // ================================================== Test_grille_cyl
503 void ModelTest::Test_grille_cyl ()
504 {
505    
506    Hex::Hex mon_ex;
507    Hex::Document* doc = mon_ex.addDocument ();
508
509    Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
510    Hex::Vertex* orig2 = doc->addVertex (10, 0,0);
511
512    Hex::Vertex* orig3 = doc->addVertex ( 0,10,0);
513    Hex::Vertex* orig4 = doc->addVertex (10,10,0);
514
515    Hex::Vertex* orig5 = doc->addVertex ( 0,20,0);
516    Hex::Vertex* orig6 = doc->addVertex (10,20,0);
517
518    Hex::Vector* vz = doc->addVector (0,0,1);
519    Hex::Vector* vx = doc->addVector (1,0,0);
520
521    double dr = 1;
522    double dl = 1;
523    int    nr = 2;
524    int    nl = 5;
525    nl = 1;
526
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");
534    // doc->dump ();
535
536    CPPUNIT_ASSERT( true );
537 }
538 // ===================================================== Test_cylinder
539 void ModelTest::Test_cylinder ()
540 {
541    
542    int    nvtk    = 0;
543    cpchar fic_vtk = "cylindre";
544
545    Hex::Hex mon_ex;
546    Hex::Document* doc = mon_ex.addDocument ();
547
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);
552
553    int nr  = 4;
554    int nri = 3;
555    int nre = nr;
556    int na = 9;
557    int nl = 5;
558
559    Hex::Cylinder* cyl  = doc->addCylinder   (orig1, vz, nr, nl);
560    Hex::Pipe*     pipe = doc->addPipe       (orig2, vz, nri, nre, nl);
561
562    doc->makeCylinder (cyl,  vx, nr, na, nl);
563    doc ->saveVtk (fic_vtk, nvtk);
564
565    doc->makePipe     (pipe, vx, nr, na, nl);
566    doc ->saveVtk (fic_vtk, nvtk);
567
568    CPPUNIT_ASSERT( true );
569 }
570
571
572
573 void ModelTest::myTest_croix ()
574 {
575   Hex::Hex mon_ex;
576   Hex::Document* doc = mon_ex.addDocument ();
577
578
579 //   Hex::Vector* dx1 = doc->addVector( -1, 0, 0 );
580 //   Hex::Vector* dz1 = doc->addVector( 0, 0, 1 );
581 //   
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 );
587
588   Hex::Vector* dx2 = doc->addVector(-1, 0, 0 );
589   Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
590   
591   Hex::Vertex* c_pte_2 = doc->addVertex( 110., 0. , 400. );
592   Hex::Vertex* c_grd_2 = doc->addVertex( 0.  , 0. , 0. );
593
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 );
597
598
599 /*
600   Hex::Vector* dx2 = doc->addVector( 1, 0, 0 );
601   Hex::Vector* dz2 = doc->addVector( 0, 0, 1 );
602
603   Hex::Vertex* c_pte_2 = doc->addVertex( -130. , 0. , 400. );
604   Hex::Vertex* c_grd_2 = doc->addVertex( 0. , 0. , 0. );
605
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 );
608
609   Hex::CrossElements* cross2 = doc->makeCylinders( cyl_pte_2, cyl_grd_2 );*/
610   doc->saveVtk ("/tmp/ffffffff.vtk");
611   doc->dump ();
612
613   CPPUNIT_ASSERT( true );
614 }
615
616
617
618
619 // ======================================================== Test_croix
620 void ModelTest::Test_croix ()
621 {
622    
623    Hex::Hex mon_ex;
624    Hex::Document* doc = mon_ex.addDocument ();
625
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);
630
631    int nr1 = 2;
632    int nl1 = 10;
633    int nr2 = 1;
634    int nl2 = 10;
635
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);
639
640    grid->dump();
641    grid->dumpVertex();
642
643 #if 0
644    for (int ny=0; ny<Hex::S_MAXI; ny++)
645        {
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 ();
652
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 ();
657        }
658
659    for (int ny=0; ny<4 ;  ny++)
660        {
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 ();
667
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 ();
672        }
673
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 ();
678
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     ********************************* */
683 #endif
684
685    doc->saveVtk ("croix.vtk");
686    doc->dump ();
687
688    CPPUNIT_ASSERT( true );
689 }
690 // ======================================================== Test_pipes
691 void ModelTest::Test_pipes ()
692 {
693    
694    Hex::Hex mon_ex;
695    Hex::Document* doc = mon_ex.addDocument ();
696
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);
701
702    double h1  = 10, h2  = 10;
703    double ri1 = 1,  ri2 = 1.5;
704    double re1 = 2,  re2 = 3;
705
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);
709
710    grid->dump();
711    grid->dumpVertex();
712
713    doc->saveVtk ("pipes.vtk");
714    doc->dump ();
715    CPPUNIT_ASSERT( true );
716 }
717 // ======================================================== Test_lorraine
718 void ModelTest::Test_lorraine()
719 {
720    
721    Hex::Hex mon_ex;
722    Hex::Document* doc = mon_ex.addDocument ();
723
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);
728
729    Hex::Vector* vz   = doc->addVector ( 0,0,1);
730    Hex::Vector* vx   = doc->addVector ( 1,0,0);
731
732    int nl1 = 10;
733    int nl2 = 10;
734
735    double rsmall = 1;
736    double rmoy   = 2;
737    double rbig   = 3;
738
739    Hex::Cylinder* cyl1  = doc->addCylinder (ori1, vz, rmoy,   nl1);
740    Hex::Cylinder* cyl2  = doc->addCylinder (ori2, vx, rsmall, nl2);
741
742    Hex::Cylinder* cyl3  = doc->addCylinder (ori3, vz, rmoy, nl1);
743    Hex::Cylinder* cyl4  = doc->addCylinder (ori4, vx, rbig, nl2);
744
745    Hex::CrossElements* grid1 = doc->makeCylinders (cyl1, cyl2);
746    Hex::CrossElements* grid2 = doc->makeCylinders (cyl4, cyl3);
747
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;
751
752    //           vc2 = grid1->getVertexIJK (Hex::Cyl2, 0,0,0);
753    //           vc3 = grid2->getVertexIJK (Hex::Cyl1, 0,0,0);
754                                      //    Cyl     i     j     k
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); 
757
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);
762
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);
767
768    Imprimer (vh0);
769    Imprimer (vh1);
770    Imprimer (vb0);
771    Imprimer (vb1);
772
773    // qb->remove ();
774    // qh->remove ();
775    Hex::Quads hliste;
776
777    hliste.push_back (qh);
778    for (int ny=1; ny<Hex::S_MAXI; ny++)
779        {
780        int ns = (ny + Hex::S_N) MODULO Hex::S_MAXI;
781        hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_ext, ns, 0)); 
782        }
783
784    for (int ny=0; ny<4 ;  ny++)
785        hliste.push_back (grid2->getQuadIJ (Hex::Cyl1, nx_int, ny, 0)); 
786
787    doc->joinQuads  (hliste, qb, vh0, vb0, vh1, vb1, 5);
788    doc->saveVtk ("lorraine.vtk");
789    // doc->dump ();
790    CPPUNIT_ASSERT( true );
791 }
792 // ======================================================== Test_disconnect
793 void ModelTest::Test_disconnect ()
794 {
795    
796    const int size_x = 2;
797    const int size_y = 2;
798    const int size_z = 1;
799
800    Hex::Hex mon_ex;
801    Hex::Document* doc = mon_ex.addDocument ();
802
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);
806
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);
811
812    int nvtk = 0;
813    doc->setLevel (1);
814    Hex::Matrix  matrice;
815    Hex::Vector* ecart  = doc->addVector (0.5,0.5,0);
816    matrice.defTranslation (ecart);
817
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);
821
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);
825
826    quad->setScalar   (5);
827    edge->setScalar   (5);
828    vertex->setScalar (5);
829
830    doc->saveVtk ("Test_disco", nvtk);
831    doc->disconnectQuad (hexa1, quad);
832
833    hexa1 ->transform (&matrice);
834    doc->saveVtk ("Test_disco", nvtk);
835
836    doc->disconnectEdge (hexa2, edge);
837
838    hexa2->transform (&matrice);
839    doc->saveVtk ("Test_disco", nvtk);
840
841    doc->disconnectVertex (hexa3, vertex);
842
843    hexa3->transform (&matrice);
844    doc->saveVtk ("Test_disco", nvtk);
845
846    doc->dumpPropagation ();
847    // doc->dump  ();
848
849    CPPUNIT_ASSERT( true );
850 }
851 // ======================================================== Test_propagation
852 void ModelTest::Test_propagation ()
853 {
854    
855    const int size_x = 2;
856    const int size_y = 1;
857    const int size_z = 1;
858
859    Hex::Hex mon_ex;
860    Hex::Document* doc = mon_ex.addDocument ();
861
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);
866
867    int nb = doc->countPropagation ();
868    for (int nro=0 ; nro<nb ; nro++)
869        {
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++)
874            {
875            bool way = table [ned]->getWay ();
876
877            if (way)
878               {
879               printf ("     (");
880               table [ned]->getVertex (0)->printName (", ");
881               table [ned]->getVertex (1)->printName (")\n");
882               }
883           else
884               {
885               printf ("     (");
886               table [ned]->getVertex (1)->printName (", ");
887               table [ned]->getVertex (0)->printName (")\n");
888               }
889            }
890        }
891
892    doc->dump  ();
893    doc->saveVtk ("Test_propagation.vtk");
894    doc->setFile ("Test_propagation");
895    doc->saveFile ();
896
897    CPPUNIT_ASSERT( true );
898 }
899 // ======================================================== Test_move
900 void ModelTest::Test_move ()
901 {
902    
903    const int size_x = 1;
904    const int size_y = 1;
905    const int size_z = 2;
906
907    Hex::Hex mon_ex;
908    Hex::Document* doc = mon_ex.addDocument ();
909
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);
913
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);
917
918    Hex::Matrix matrice;
919    matrice.defTranslation (enhaut);
920
921    Hex::Hexa* cube    = grid->getHexa (1);
922    Hex::Quad* dessous = cube->getQuad (Hex::Q_A);
923    dessous->dump();
924    
925    Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
926    /* Hex::Elements* grid3 = doc->makeTranslation (grid, agauche); */
927    Hex::Hexa* cube2     = grid2->getHexa (1);
928
929    doc ->saveVtk ("move0.vtk");
930
931    cube ->disconnectQuad (dessous);
932    cube ->transform (&matrice);
933    cube2->transform (&matrice);
934
935    doc ->saveVtk ("move1.vtk");
936    doc ->dump();
937
938    CPPUNIT_ASSERT( true );
939 }
940 // ======================================================== Test_deux_cyl
941 void ModelTest::Test_deux_cyl ()
942 {
943    
944    Hex::Hex mon_ex;
945    Hex::Document* doc = mon_ex.addDocument ();
946
947    Hex::Vertex* orig1 = doc->addVertex (0,0,-5);
948    Hex::Vertex* orig2 = doc->addVertex (-5,0,0);
949
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);
953
954    double dr = 1;
955    double da = 360; // degres
956    double dl = 1.0;
957    int    nr = 2;
958    int    na = 6;
959    int    nl = 10;
960
961    /* Hex::Elements* cyl1 = */ doc->makeCylindrical(orig1, vy,vz, dr, da, 
962                                        dl,nr,na,nl);
963
964    /* Hex::Elements* cyl2 = */ doc->makeCylindrical(orig2, vz,vx, dr/2, da, 
965                                        dl,nr,na,nl);
966    doc->saveVtk ("deux_cylindres.vtk");
967    CPPUNIT_ASSERT( true );
968 }
969 // ======================================================== Test_move2
970 void ModelTest::Test_transfo ()
971 {
972    
973    const int size_x = 1;
974    const int size_y = 1;
975    const int size_z = 2;
976
977    int    nvtk    = 0;
978    cpchar fic_vtk = "transfo";
979
980    Hex::Hex mon_ex;
981    Hex::Document* doc = mon_ex.addDocument ();
982    doc ->setLevel (1);
983
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,
987                                                         size_z);
988    if (grid==NULL)
989       CPPUNIT_ASSERT( false );
990
991    orig->setScalar(2);
992
993    doc ->saveVtk (fic_vtk, nvtk);
994
995    Hex::Vector*   devant  = doc->addVector (5, 0, 0);
996
997    Hex::Elements* grid2 = doc->makeTranslation (grid, devant);
998    if (grid2==NULL)
999       CPPUNIT_ASSERT( false );
1000    doc ->saveVtk (fic_vtk, nvtk);
1001
1002    Hex::Elements* grid3  = doc->makeScale (grid2, orig, 2);
1003    if (grid3==NULL)
1004       CPPUNIT_ASSERT( false );
1005    doc ->saveVtk (fic_vtk, nvtk);
1006
1007    Hex::Elements* grid4 = doc->makeRotation (grid2, orig, dir, 45);
1008    if (grid4==NULL)
1009       CPPUNIT_ASSERT( false );
1010    doc ->saveVtk (fic_vtk, nvtk);
1011
1012    Hex::Elements* grid5 = doc->makeSymmetryPoint (grid4, orig);
1013    if (grid5==NULL)
1014       CPPUNIT_ASSERT( false );
1015
1016    doc ->saveVtk (fic_vtk, nvtk);
1017
1018    Hex::Vector* dir1  = doc->addVector (1,0,0);
1019    Hex::Elements* grid6 = doc->makeSymmetryLine (grid4, orig, dir1);
1020    if (grid6==NULL)
1021       CPPUNIT_ASSERT( false );
1022
1023    grid4->getHexa(0)->getVertex(0)->setScalar(3);
1024    grid6->getHexa(0)->getVertex(0)->setScalar(3);
1025    doc ->saveVtk (fic_vtk, nvtk);
1026
1027    grid4->getHexa(0)->getVertex(0)->setScalar(0);
1028    grid6->getHexa(0)->getVertex(0)->setScalar(0);
1029
1030    Hex::Elements* grid7 = doc->makeSymmetryLine (grid2, orig, dir1);
1031    if (grid7==NULL)
1032       CPPUNIT_ASSERT( false );
1033
1034    grid2->getHexa(0)->getVertex(0)->setScalar(4);
1035    grid7->getHexa(0)->getVertex(0)->setScalar(4);
1036    doc ->saveVtk (fic_vtk, nvtk);
1037
1038    grid2->getHexa(0)->getVertex(0)->setScalar(0);
1039    grid7->getHexa(0)->getVertex(0)->setScalar(0);
1040
1041    Hex::Elements* grid8 = doc->makeSymmetryPlane (grid2, orig, dir1);
1042    if (grid8==NULL)
1043       CPPUNIT_ASSERT( false );
1044
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);
1050
1051    Hex::Elements* grid9 = doc->makeSymmetryPlane (grid3, orig, dir);
1052    if (grid9==NULL)
1053       CPPUNIT_ASSERT( false );
1054
1055    grid3->getHexa(0)->getVertex(0)->setScalar(4);
1056    grid9->getHexa(0)->getVertex(0)->setScalar(4);
1057    doc ->saveVtk (fic_vtk, nvtk);
1058
1059    grid9->getHexa(0)->removeConnected ();
1060    doc ->saveVtk (fic_vtk, nvtk);
1061
1062    CPPUNIT_ASSERT( true );
1063 }
1064
1065
1066
1067
1068