Salome HOME
Updated copyright comment
[modules/hexablock.git] / src / HEXABLOCK / test_hexa6.cxx
index 017bc7e1c6d0d2ce7985c96665300daaa799035e..71a1741ae6f33a41fceba71a2d397817cbdc2c5d 100644 (file)
@@ -1,24 +1,24 @@
 
 // C++ : Tests unitaires
 
-//  Copyright (C) 2009-2011  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2024  CEA, EDF
 //
-//  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 "test_unit.hxx"
 
@@ -26,7 +26,6 @@
 #include "HexDocument.hxx"
 #include "HexElements.hxx"
 #include "HexBiCylinder.hxx"
-// #include "HexCrossElements.hxx"
 
 #include "HexHexa.hxx"
 // #include "HexQuad.hxx"
@@ -37,7 +36,7 @@ static Hex::Hex         mon_ex;
 static Hex::Document*   docu = NULL;
 static cpchar           case_name = "hexa";
 
-// ======================================================== get_document 
+// ======================================================== get_document
 Hex::Document* get_document ()
 {
    if (docu==NULL)
@@ -53,7 +52,7 @@ void save_file ()
    char filename[20];
 
    nbr_files ++;
-   sprintf (filename, "%s%02d.vtk", case_name, nbr_files); 
+   sprintf (filename, "%s%02d.vtk", case_name, nbr_files);
    docu->saveVtk (filename);
 }
 
@@ -67,61 +66,65 @@ Hex::Vertex* nearest (Hex::Elements* grid, Hex::Vertex* vertex)
     double       py = vertex->getY();
     double       pz = vertex->getZ();
     for (int nro=0 ; nro < nbre ; ++nro)
-        { 
+        {
         Hex::Vertex* v1 = grid->getVertex (nro);
-        double       d2 = Hex::carre(px-v1->getX()) + Hex::carre(py-v1->getY()) 
+        double       d2 = Hex::carre(px-v1->getX()) + Hex::carre(py-v1->getY())
                                                     + Hex::carre(pz-v1->getZ()) ;
         if (d2 < dmin)
-           { 
+           {
            result = v1;
            dmin   = d2;
            }
         }
 
-    cout << " nearest : " << vertex->getName() 
-         << " -> "        << result->getName() 
-         << " ( " << px << ",  " << py << ",  " << pz << ") " << endl; 
+    std::cout << " nearest : " << vertex->getName()
+         << " -> "        << result->getName()
+         << " ( " << px << ",  " << py << ",  " << pz << ") " << std::endl;
     return result;
 }
 
 // ======================================================== eplucher
-void eplucher (Hex::Document* doc, Hex::Elements* grid, string& radical)
+void eplucher (Hex::Document* doc, Hex::Elements* grid, std::string& radical)
 {
    int nbfic = 0;
    int nbre  = grid->countHexa();
-   for (int nro=nbre-1 ; nro >0 ; nro--) 
+   for (int nro=nbre-1 ; nro >0 ; nro--)
        {
        nbfic++;
        char name [32];
        sprintf (name, "%s%02d.vtk", radical.c_str(), nbfic);
        grid->saveVtk (name);
        doc->removeHexa (grid->getHexa(nro));
-       } 
+       }
 }
 // ======================================================== test_cartesian6
 int test_cartesian6 (int nbargs, cpchar tabargs[])
 {
    case_name = "cartesian_top";
+   Hex::Document* doc  = get_document ();
+
+/***********************
    const int size_x = 3;
    const int size_y = 4;
    const int size_z = 5;
 
-   Hex::Document* doc  = get_document ();
-
    Hex::Elements* grid1 = doc->makeCartesianTop (size_x, size_y, size_z);
    grid1->saveVtk ("makeCartesianTop.vtk");
    PutData (grid1->isValid());
    return HOK;
+***************************/
 
-   Hex::Vertex*   orig2 = doc->addVertex (10, 0, 0);
+   Hex::Vertex*   orig2 = 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);
-   double dx =1, dy=1, dz=1;
-   Hex::Elements* grid2 = doc->makeCartesianUni (orig2, vx, vy, vz, dx, dy, dz, 
-                                                        size_x, size_y, size_z);
+   int   nx = 2, ny=1, nz=2;
+   double dx =nx, dy=ny, dz=nz;
+   Hex::Elements* grid2 = doc->makeCartesianUni (orig2, vx, vy, vz, dx, dy, dz,
+                                                                    nx, ny, nz);
    grid2->saveVtk ("makeCartesianUni.vtk");
    PutData (grid2->isValid());
+   return HOK;
 
    Hex::Vertex*   orig3 = doc->addVertex (20, 0, 0);
    Hex::RealVector tx, ty, tz;
@@ -153,7 +156,7 @@ int test_cylinder60 (int nbargs, cpchar tabargs[])
    Hex::Vector*  vx   = doc->addVector (1, 0, 0);
    Hex::Vector*  vz   = doc->addVector (0, 0, 1);
    double rint =1, rext = 3, angle = 360, hauteur = 2;
-   Hex::Elements* grid3 = doc->makePipeUni (orig, vx, vz, 
+   Hex::Elements* grid3 = doc->makePipeUni (orig, vx, vz,
                                                 rint, rext, angle, hauteur,
                                                 size_x, size_y, size_z);
    grid3->saveVtk ("makeCylinderUni.vtk");
@@ -183,17 +186,17 @@ int test_cylinder_top (int nbargs, cpchar tabargs[])
 int test_cylinder6 (int nbargs, cpchar tabargs[])
 {
    case_name = "cylinders";
+   Hex::Document* doc   = get_document ();
+
+   /********************
    const int size_x = 3;
    const int size_y = 8;
    const int size_z = 2;
 
-   Hex::Document* doc   = get_document ();
-
-   /********************
    Hex::Elements* grid1 = doc->makeCylinderTop (size_x, size_y, size_z);
    grid1->saveVtk ("makeCylinderTop.vtk");
    PutData (grid1->isValid());
-   
+
 
    Hex::Elements* grid2 = doc->makePipeTop (size_x, size_y, size_z);
    grid2->saveVtk ("makePipeTop.vtk");
@@ -204,7 +207,7 @@ int test_cylinder6 (int nbargs, cpchar tabargs[])
    Hex::Vector*  vx    = doc->addVector (1, 0, 0);
    Hex::Vector*  vz    = doc->addVector (0, 0, 1);
    double rint =2, rext = 4, angle = 300, hauteur = 1;
-   Hex::Elements* grid3 = doc->makeCylinderUni (orig2, vx, vz, 
+   Hex::Elements* grid3 = doc->makeCylinderUni (orig2, vx, vz,
                                                 rint, rext, angle, hauteur,
                                                 2, 3, 2);
                                     //          size_x, size_y, size_z);
@@ -248,7 +251,7 @@ int test_spherical6 (int nbargs, cpchar tabargs[])
    PutData (nbhexas);
    for (int nro=3 ; nro<nbhexas ; nro +=3)
        grid1->getHexa(nro)->remove();
+
    grid1->saveVtk ("makeSphericalTop.vtk");
 
    Hex::Vertex*  orig2 = doc->addVertex (0, 0, 10);
@@ -265,7 +268,7 @@ int test_spherical6 (int nbargs, cpchar tabargs[])
 
    for (int nro=3 ; nro<nbhexas ; nro +=3)
        grid2->getHexa(nro)->remove();
+
    grid2->saveVtk ("makeSphericalUni.vtk");
    return HOK;
 }
@@ -283,14 +286,14 @@ int test_rind6 (int nbargs, cpchar tabargs[])
    PutData (grid1->isValid());
    if (NOT (grid1->isValid()))
        Hex::what ();
-   else 
+   else
        grid1->saveVtk ("makeSphereTop.vtk");
 
    Hex::Elements* grid2 = doc->makeRindTop (size_r, size_a, size_h);
    PutData (grid2->isValid());
    if (NOT (grid2->isValid()))
        Hex::what ();
-   else 
+   else
        grid2->saveVtk ("makeRindTop.vtk");
 
    Hex::Vertex* orig  = doc->addVertex (0, 0, 0);
@@ -302,41 +305,34 @@ int test_rind6 (int nbargs, cpchar tabargs[])
    double rext  = 10;
    double angle = 180;
 
-   Hex::Elements* grid3 = doc->makeSphereUni (orig, vx, vz, 
-                                              rtrou, rext, angle, vplan, 
+   Hex::Elements* grid3 = doc->makeSphereUni (orig, vx, vz,
+                                              rtrou, rext, angle, vplan,
                                               size_r, size_a, size_h);
    if (NOT (grid3->isValid()))
        Hex::what ();
-   else 
+   else
        grid3->saveVtk ("makeSphereUni.vtk");
 
-   Hex::Elements* grid4 = doc->makeRindUni (orig, vx, vz, 
-                                            rtrou, rext, rint, angle, vplan, 
+   Hex::Elements* grid4 = doc->makeRindUni (orig, vx, vz,
+                                            rtrou, rint, rext, angle, vplan,
                                             size_r, size_a, size_h);
    if (NOT (grid4->isValid()))
        Hex::what ();
-   else 
+   else
        grid4->saveVtk ("makeRindUni.vtk");
 
-   Hex::Elements* grid5 = doc->makePartSphere (orig, vx, vz, rext, rtrou, vplan,
-                                               angle, size_r, size_a, size_h);
-   if (NOT (grid5->isValid()))
-       Hex::what ();
-   else 
-       grid5->saveVtk ("makeSphereOld.vtk");
-
    Hex::RealVector trad, tang, tphi;
    double dr     = (rext-rtrou)/size_r;
    double dtheta = angle/size_a;
    double dphi   = 180.0/size_h;
    for (int nro=0 ; nro<=size_r ; nro++) trad.push_back (rtrou + nro*dr);
    for (int nro=0 ; nro<=size_a ; nro++) tang.push_back (        nro*dtheta);
-   for (int nro=0 ; nro<=size_h ; nro++) tphi.push_back (-90   + nro*dphi); 
+   for (int nro=0 ; nro<=size_h ; nro++) tphi.push_back (-90   + nro*dphi);
 
    Hex::Elements* grid6 = doc->makeSphere (orig, vx, vz, trad, tang, tphi);
    if (NOT (grid6->isValid()))
        Hex::what ();
-   else 
+   else
        grid6->saveVtk ("makeSphereNew.vtk");
 
    trad.clear ();
@@ -345,7 +341,7 @@ int test_rind6 (int nbargs, cpchar tabargs[])
    Hex::Elements* grid7 = doc->makeRind (orig, vx, vz, trad, tang, tphi);
    if (NOT (grid7->isValid()))
        Hex::what ();
-   else 
+   else
        grid7->saveVtk ("makeRindNew.vtk");
    return HOK;
 }
@@ -359,25 +355,25 @@ int test_pipes6 (int nbargs, cpchar tabargs[])
 
    for (int narg=1 ; narg<nbargs ; narg++)
        {
-       string arg = tabargs [narg];
+       std::string arg = tabargs [narg];
        if (arg=="-cyl")        pipe    = false;
        else if (arg=="-pipe")  pipe    = true;
        else if (arg=="-left")  t_left  = true;
        else if (arg=="-right") t_right = true;
-       else 
+       else
           {
-          cout << " Syntax : " << endl;
-          cout << " $ " << tabargs[0]  << " <args> " << endl;
-          cout << " avec args parmi :" << endl;
-          cout << " -cyl   : croisement de 2 cylindres " << endl;
-          cout << " -pipe  : croisement de 2 tuyaux "    << endl;
-          cout << " -left  : Forme en T, barre a gauche " << endl;
-          cout << " -right : Forme en T, barre a droite " << endl;
+          std::cout << " Syntax : " << std::endl;
+          std::cout << " $ " << tabargs[0]  << " <args> " << std::endl;
+          std::cout << " avec args parmi :" << std::endl;
+          std::cout << " -cyl   : croisement de 2 cylindres " << std::endl;
+          std::cout << " -pipe  : croisement de 2 tuyaux "    << std::endl;
+          std::cout << " -left  : Forme en T, barre a gauche " << std::endl;
+          std::cout << " -right : Forme en T, barre a droite " << std::endl;
           return HOK;
           }
        }
 
-   string radical = pipe ? "makePipes" : "makeCylinders";
+   std::string radical = pipe ? "makePipes" : "makeCylinders";
 
    double rext1 =  2*sqrt (2.0);
    double rext2 =  3*sqrt (2.0);
@@ -390,13 +386,13 @@ int test_pipes6 (int nbargs, cpchar tabargs[])
    if (t_left)
       {
       h1 = 10;
-      radical += "_L";  
+      radical += "_L";
       }
    else if (t_right)
       {
       xl1 = -2;
       h1   = 10;
-      radical += "_R";  
+      radical += "_R";
       }
 
    Hex::Document* doc  = get_document ();
@@ -407,7 +403,7 @@ int test_pipes6 (int nbargs, cpchar tabargs[])
    Hex::Vector* vz2   = doc->addVector ( 1, 0,  0);
 
    Hex::BiCylinder* grid1 = NULL;
-   if (pipe) 
+   if (pipe)
        grid1 = doc->makePipes (ori1, vz1, rint1, rext1, h1, ori2, vz2, rint2,
                                rext2, h2);
    else
@@ -494,6 +490,29 @@ int test_extrude6 (int nbargs, cpchar tabargs[])
    doc->saveVtk ("prisme3.vtk");
    return HOK;
 }
+// ======================================================== test_extrude7
+int test_extrude7 (int nbargs, cpchar tabargs[])
+{
+   const int nr = 2;
+   const int na = 8;
+   const int nh = 3;
+
+   Hex::Document* doc   = get_document ();
+   Hex::Elements* grid1 = doc->makeCylinderTop (nr, na, nh);
+
+   Hex::Quads tquads;
+   for (int k=0 ; k<nh ; k++)
+       {
+       Hex::Quad* quad = grid1->getQuadJK (nr, 0, k);
+       quad->setColor   (5);
+       tquads.push_back (quad);
+       }
+
+   doc->saveVtk ("grid0.vtk");
+   Hex::Elements* grid2 = doc->extrudeQuadsTop (tquads, 4);
+   doc->saveVtk ("grid1.vtk");
+   return HOK;
+}
 // ======================================================== test_revolution6
 int test_revolution6 (int nbargs, cpchar tabargs[])
 {
@@ -508,7 +527,7 @@ int test_revolution6 (int nbargs, cpchar tabargs[])
    Hex::Vertex* v4     = doc->addVertex (10, 0, 2);
    Hex::Quad* quad     = doc->addQuadVertices (v1, v2, v3, v4);
 
-   Hex::Elements* grid0 = doc->revolutionQuadUni  (quad, centre, vz, 180, 8);
+   doc->revolutionQuadUni  (quad, centre, vz, 180, 8);
    doc->saveVtk ("revolution1.vtk");
    return HOK;
 
@@ -589,7 +608,7 @@ int test_joint6 (int nbargs, cpchar tabargs[])
    Hex::what ();
    if (NOT joint->isValid ())
       return HERR;
-   
+
    doc->saveVtk ("jointQuad2.vtk");
    int nbr_joint_vertex =  joint->countVertex ();
    int nbr_surf_vertex  =  nbr_joint_vertex/(hauteur+1);
@@ -701,7 +720,7 @@ int test_monica (int nbargs, cpchar tabargs[])
    save_file ();
 
    Hex::Hexa* trou = plaque->getHexaIJK (1, 1, 0);
-   vector <Hex::Vertex*> tabv0, tabv1;
+   std::vector <Hex::Vertex*> tabv0, tabv1;
    for (int nv=0 ; nv<8 ; nv++)
        tabv1.push_back (trou->getVertex(nv));
 
@@ -710,18 +729,18 @@ int test_monica (int nbargs, cpchar tabargs[])
    Hex::what ();
    save_file ();
 
-   Hex::Elements* pipe = doc->makePipeUni (orig2, vxy, vz, 0.15, 0.5, 360, 3, 
+   Hex::Elements* pipe = doc->makePipeUni (orig2, vxy, vz, 0.15, 0.5, 360, 3,
                                            1, 4, 3);
    doc->dump ();
    Hex::what ();
    for (int nv=0 ; nv<8 ; nv++)
        tabv0.push_back (nearest (pipe, tabv1[nv]));
 
-   doc->setLevel (1); 
+   doc->setLevel (1);
    for (int nv=0 ; nv<8 ; nv++)
        {
        int ier = doc->mergeVertices (tabv0[nv], tabv1[nv]);
-       cout << " nro = " << nv << ", ier = " << ier << endl;
+       std::cout << " nro = " << nv << ", ier = " << ier << std::endl;
        Hex::what ();
        save_file ();
        }