Salome HOME
Switch development flag to 1
[modules/hexablock.git] / src / HEXABLOCK / test_quads.cxx
index eb431ba58e24965543b668a86d0307eb9d544d52..02cf34db3ebeb6222f123f63023e96f91e9deab0 100644 (file)
@@ -1,24 +1,23 @@
 
 // C++ : Tests unitaires sur les creations h'hexaedres
 
-//  Copyright (C) 2009-2011  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2016  CEA/DEN, EDF R&D
 //
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-//  See http://www.salome-platform.org/ 
-//  or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 #include "Hex.hxx"
 
@@ -26,7 +25,6 @@
 
 #include "HexDocument.hxx"
 #include "HexElements.hxx"
-#include "HexCrossElements.hxx"
 
 #include "HexHexa.hxx"
 #include "HexQuad.hxx"
@@ -45,13 +43,7 @@ int test_hexa_quads_5 (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
 
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_5";
@@ -66,7 +58,7 @@ int test_hexa_quads_5 (int nbargs, cpchar tabargs[])
    Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
    Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
 
-   qb->setScalar (5);
+   qb->setColor (5);
    doc->saveVtk (fic_vtk, nvtk);
 
    qb->remove ();
@@ -94,13 +86,7 @@ int test_hexa_quads_ab (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
 
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_ab";
@@ -143,13 +129,7 @@ int test_hexa_quads_ac (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_ac";
    doc->saveVtk (fic_vtk, nvtk);
@@ -196,13 +176,7 @@ int test_hexa_quads_ace (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_ace";
    doc->saveVtk (fic_vtk, nvtk);
@@ -248,13 +222,7 @@ int test_hexa_quads_acd (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_acd";
    doc->saveVtk (fic_vtk, nvtk);
@@ -300,13 +268,7 @@ int test_hexa_quads_abcd (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid  = doc->makeCartesian (orig, vx, vy, vz, 
-                                              size_x,size_y,size_z);
+   Hex::Elements* grid  = doc->makeCartesianTop (size_x,size_y,size_z);
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_abcd";
    doc->saveVtk (fic_vtk, nvtk);
@@ -351,13 +313,7 @@ int test_hexa_quads_abce (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz, 
-                                            size_x,size_y,size_z);
+   Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
    int nvtk = 0;
    cpchar fic_vtk = "HexaQuad_abce";
    doc->saveVtk (fic_vtk, nvtk);
@@ -472,131 +428,6 @@ int test_hexa_quads_ac1 (int nbargs, cpchar tabargs[])
    doc->saveVtk ("hexa_quads.vtk");
    return HOK;
 }
-// ======================================================== test_part_rind
-int test_part_rind (int& nvtk)
-{
-   Hex::Hex mon_ex;
-   Hex::Document* doc = mon_ex.addDocument ();
-
-   Hex::Vertex* center  = doc->addVertex (0,0,0);
-   Hex::Real    radius  = 8;
-   Hex::Real    radint  = 7;
-   Hex::Vertex* orig    = NULL;
-   Hex::Vector* vz      = doc->addVector (0,0,1);
-   Hex::Vector* vx      = doc->addVector (1,0,0);
-   Hex::Real    angle   = 90;
-   Hex::Real    radhole = 1;
-   int nrad  = 3;
-   int nang  = 4;
-   int nhaut = 8;
-
-   Hex::Elements* grid = doc->makePartRind (center, vx, vz, radius, radint, 
-                                      radhole, orig, angle, nrad, nang, nhaut);
-   if (grid!=NULL)
-       doc->saveVtk ("makeSphere", nvtk);
-   return HOK;
-}
-// ======================================================== test_rind
-int test_rind (int& nvtk)
-{
-   Hex::Hex mon_ex;
-   Hex::Document* doc = mon_ex.addDocument ();
-
-   Hex::Vertex* center  = doc->addVertex (0,0,0);
-   Hex::Real    radius  = 8;
-   Hex::Real    radint  = 7;
-   Hex::Vertex* orig    = doc->addVertex (0,0,0);
-   Hex::Vector* vz      = doc->addVector (0,1,1);
-   Hex::Vector* vx      = doc->addVector (1,0,0);
-   Hex::Real    radhole = 1;
-   int nrad  = 3;
-   int nang  = 16;
-   int nhaut = 8;
-
-   Hex::Elements* grid = doc->makeRind (center, vx, vz, radius, radint, 
-                                      radhole, orig, nrad, nang, nhaut);
-   if (grid!=NULL)
-       doc->saveVtk ("makeSphere", nvtk);
-   return HOK;
-}
-// ======================================================== test_part_sphere
-int test_part_sphere (int& nvtk)
-{
-   Hex::Hex mon_ex;
-   Hex::Document* doc = mon_ex.addDocument ();
-
-   Hex::Vertex* center  = doc->addVertex (0,0,0);
-   Hex::Real    radius  = 8;
-   Hex::Vertex* orig    = doc->addVertex (0,0,-4);
-   Hex::Vector* vz      = doc->addVector (0,0,1);
-   Hex::Vector* vx      = doc->addVector (1,0,0);
-   Hex::Real    angle   = 90;
-   Hex::Real    radhole = 1;
-   int nrad  = 3;
-   int nang  = 4;
-   int nhaut = 8;
-
-   Hex::Elements* grid = doc->makePartSphere (center, vx, vz, radius, 
-                                      radhole, orig, angle, nrad, nang, nhaut);
-   if (grid!=NULL)
-       doc->saveVtk ("makeSphere", nvtk);
-   return HOK;
-}
-// ======================================================== test_sphere
-int test_sphere (int& nvtk)
-{
-   Hex::Hex mon_ex;
-   Hex::Document* doc = mon_ex.addDocument ();
-
-   Hex::Vertex* center  = doc->addVertex (0,0,0);
-   Hex::Real    radius  = 8;
-   Hex::Vertex* orig    = doc->addVertex (0,0,0);
-   Hex::Vector* vz      = doc->addVector (0,0,1);
-   Hex::Vector* vx      = doc->addVector (1,0,0);
-   Hex::Real    radhole = 1;
-   int nrad  = 3;
-   int nang  = 16;
-   int nhaut = 8;
-
-   Hex::Elements* grid = doc->makeSphere (center, vx, vz, radius, 
-                                      radhole, orig, nrad, nang, nhaut);
-   if (grid!=NULL)
-       doc->saveVtk ("makeSphere", nvtk);
-   return HOK;
-}
-// ================================================== test_asso_grid
-int test_asso_grid (int nbargs, cpchar tabargs[])
-{
-   Hex::Hex mon_ex;
-   Hex::Document* doc = mon_ex.addDocument ();
-
-   Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
-
-   Hex::Vector* vz = doc->addVector (0,0,1);
-   Hex::Vector* vx = doc->addVector (1,0,0);
-
-   double dr = 1;
-   double dl = 1;
-   int    nr = 2;
-   int    nl = 3;
-   int    na = 8;
-
-   Hex::Elements *c1 = NULL;
-
-   c1 = doc->makeCylindrical (orig1, vx,vz,dr, 300, dl, nr, na, nl, false);
-   for (int ned=0 ; ned<na ; ned++)
-       { 
-       Hex::Edge* edge = c1->getEdgeJ (nr, ned, 1);
-       if (edge != NULL)
-          edge->setScalar (5);
-       else 
-          printf (" ... c1->getEdgeJ (nr, %d, 1) = NULL\n", ned);
-       }
-
-   doc->saveVtk ("asso_grid.vtk");
-
-   return HOK;
-}
 // ======================================================== test_piquage
 int test_piquage (int nbargs, cpchar tabargs[])
 {
@@ -607,15 +438,11 @@ int test_piquage (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
    Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
    Hex::Vector* vz   = doc->addVector (0,0,1);
 
-   Hex::Elements* grid    = doc->makeCartesian (orig, vx, vy, vz, 
-                                                size_x,size_y,size_z);
+   Hex::Elements* grid    = doc->makeCartesianTop (size_x,size_y,size_z);
 
-   double dr = 1;
    double dl = 1;
 
    int nr = 1;
@@ -623,8 +450,8 @@ int test_piquage (int nbargs, cpchar tabargs[])
    int nl = 1;
 
    Hex::Vertex*   orig2 = doc->addVertex (0,0,5);
-   Hex::Elements* grid2 = doc->makeCylindrical (orig2, vx,vz,
-                                                dr, 360, dl, nr, na, nl, false);
+   Hex::Elements* grid2 = doc->makeCylinderUni (orig2, vx,vz, 1.0, 5.0, 
+                                                360, dl, nr, na, nl);
 
    Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
    Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
@@ -634,13 +461,13 @@ int test_piquage (int nbargs, cpchar tabargs[])
    Hex::Vertex* p2 = grid2->getVertexIJK (1, 1, 1);
    Hex::Vertex* p3 = grid2->getVertexIJK (1, 2, 1);
 
-   c1->setScalar (4);
-   c2->setScalar (6);
-   c3->setScalar (6);
+   c1->setColor (4);
+   c2->setColor (6);
+   c3->setColor (6);
 
-   p1->setScalar (4);
-   p2->setScalar (6);
-   p3->setScalar (6);
+   p1->setColor (4);
+   p2->setColor (6);
+   p3->setColor (6);
 
    int nvtk=0;
    doc->saveVtk ("piquage", nvtk);
@@ -649,7 +476,7 @@ int test_piquage (int nbargs, cpchar tabargs[])
    for (int ny=0; ny<4 ; ny++)
        {
        Hex::Quad* quad = grid2->getQuadIJ (0, ny, 1);
-       quad->setScalar(5);
+       quad->setColor(5);
        qpattern.push_back (quad);
        }
    
@@ -660,8 +487,8 @@ int test_piquage (int nbargs, cpchar tabargs[])
 
    return HOK;
 }
-// ======================================================== test_replace
-int test_replace (int nbargs, cpchar tabargs[])
+// ======================================================== test_replace0
+int test_replace0 (int nbargs, cpchar tabargs[])
 {
    const int size_x = 3;
    const int size_y = 3;
@@ -670,13 +497,7 @@ int test_replace (int nbargs, cpchar tabargs[])
    Hex::Hex mon_ex;
    Hex::Document* doc = mon_ex.addDocument ();
 
-   Hex::Vertex* orig = doc->addVertex (0,0,0);
-   Hex::Vector* vx   = doc->addVector (1,0,0);
-   Hex::Vector* vy   = doc->addVector (0,1,0);
-   Hex::Vector* vz   = doc->addVector (0,0,1);
-
-   Hex::Elements* grid    = doc->makeCartesian (orig, vx, vy, vz, 
-                                                size_x,size_y,size_z);
+   Hex::Elements* grid    = doc->makeCartesianTop (size_x,size_y,size_z);
 
    Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
    Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
@@ -718,21 +539,131 @@ int test_replace (int nbargs, cpchar tabargs[])
 
    doc->replace (qpattern, pd2,c1, pa2,c2, pb2,c3);
 
-   c1->setScalar (4);
-   c2->setScalar (6);
-   c3->setScalar (6);
+   c1->setColor (4);
+   c2->setColor (6);
+   c3->setColor (6);
    doc->saveVtk ("replace1.vtk");
 
    return HOK;
 }
-// ======================================================== test_hemispheres
-int test_hemispheres (int nbargs, cpchar tabargs[])
+// ======================================================== test_replace1
+int test_replace1 (int nbargs, cpchar tabargs[])
 {
-   int nvtk = 0;
-   test_sphere      (nvtk);
-   test_rind        (nvtk);
-   test_part_rind   (nvtk);
-   test_part_sphere (nvtk);
+   const int size_x   = 3;
+   const int size_y   = 3;
+   const int size_z   = 3;
+   const int size_cyl = 4;
+
+   Hex::Hex mon_ex;
+   Hex::Document* doc = mon_ex.addDocument ();
+   Hex::Vector*   vx  = doc->addVector (1, 0, 0);
+   Hex::Vector*   vz  = doc->addVector (0, 0, 1);
+   Hex::Vertex*   ori = doc->addVertex (8, 0, 0);
+   const double   rint  = 1;
+   const double   rext  = 3;
+   const double   angle = 360;
+   const double   haut  = 1;
+   const int      nr    = 1;
+   const int      nh    = 1;
+
+   Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
+   Hex::Elements* pipe = doc->makePipeUni  (ori, vx, vz, rint, rext, angle,
+                                            haut, nr, size_cyl, nh); 
+
+   Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
+   Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
+   Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
+
+   Hex::Vertex* p1 = pipe->getVertexIJK (1, 1, 1);
+   Hex::Vertex* p2 = pipe->getVertexIJK (1, 2, 1);
+   Hex::Vertex* p3 = pipe->getVertexIJK (1, 3, 1);
+
+   Hex::Quads qpattern;
+   for (int na=0; na<size_cyl;  ++na)
+       {
+       Hex::Quad* quad =pipe->getQuadIJ (0, na, 1);
+       quad->setColor (2);
+       qpattern.push_back (quad);
+       }
+
+   c1->setColor (6);
+   c2->setColor (4);
+   c3->setColor (2);
+
+   p1->setColor (6);
+   p2->setColor (5);
+   p3->setColor (4);
+   doc->saveVtk ("replace0.vtk");
+
+   Hex::Elements* rep = doc->replaceHexa (qpattern, p1,c1, p2,c2, p3,c3);
+   HexDisplay (rep->isValid());
+   Hex::what ();
+
+   doc->saveVtk ("replace1.vtk");
+   doc->saveVtk ("replace2.vtk");
+   doc->saveVtk ("replace3.vtk");
+   return HOK;
+}
+// ======================================================== test_replace
+int test_replace (int nbargs, cpchar tabargs[])
+{
+   const int size_x   = 5;
+   const int size_y   = 5;
+   const int size_z   = 3;
+   const int size_cyl = 12;
+
+   Hex::Hex mon_ex;
+   Hex::Document* doc = mon_ex.addDocument ();
+   Hex::Vector*   vx  = doc->addVector (1, 0, 0);
+   Hex::Vector*   vz  = doc->addVector (0, 0, 1);
+   Hex::Vertex*   ori = doc->addVertex (8, 0, 0);
+   const double   rint  = 2;
+   const double   rext  = 3;
+   const double   angle = 360;
+   const double   haut  = 1;
+   const int      nr    = 1;
+   const int      nh    = 1;
+
+   Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
+   Hex::Elements* pipe = doc->makePipeUni  (ori, vx, vz, rint, rext, angle,
+                                            haut, nr, size_cyl, nh); 
+
+   Hex::Vertex* c1 = grid->getVertexIJK (2, 1, size_z);
+   Hex::Vertex* c2 = grid->getVertexIJK (3, 1, size_z);
+
+   Hex::Vertex* p1 = pipe->getVertexIJK (1, 7, 1);
+   Hex::Vertex* p2 = pipe->getVertexIJK (1, 8, 1);
+
+   Hex::Quads qpattern, qtarget;
+   for (int na=0; na<size_cyl;  ++na)
+       {
+       Hex::Quad* quad =pipe->getQuadIJ (0, na, 1);
+       quad->setColor (2);
+       qpattern.push_back (quad);
+       }
+
+   for (int ni=1; ni<size_x-1;  ++ni)
+       for (int nj=1; nj<size_y-1;  ++nj)
+           {
+           cout << " grid->getQuad (" << ni << "," << nj << ")\n";
+           Hex::Quad* quad = grid->getQuadIJ (ni, nj, size_z);
+           quad->setColor (2);
+           qtarget.push_back (quad);
+           }
+
+   c1->setColor (6);
+   c2->setColor (4);
+
+   p1->setColor (6);
+   p2->setColor (4);
+   doc->saveVtk ("replace0.vtk");
+
+   Hex::Elements* rep = doc->replace (qpattern, qtarget, p1,c1, p2,c2);
+   HexDisplay (rep->isValid());
+   Hex::what ();
+
+   doc->saveVtk ("replace1.vtk");
+   doc->saveVtk ("replace2.vtk");
    return HOK;
 }
 // ======================================================== test_quads