// C++ : Tests unitaires
-// Copyright (C) 2009-2011 CEA/DEN, EDF R&D
+// Copyright (C) 2009-2014 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 "test_unit.hxx"
#include "HexDocument.hxx"
#include "HexElements.hxx"
#include "HexBiCylinder.hxx"
-// #include "HexCrossElements.hxx"
#include "HexHexa.hxx"
// #include "HexQuad.hxx"
static Hex::Document* docu = NULL;
static cpchar case_name = "hexa";
-// ======================================================== get_document
+// ======================================================== get_document
Hex::Document* get_document ()
{
if (docu==NULL)
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);
}
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;
+ cout << " nearest : " << vertex->getName()
+ << " -> " << result->getName()
+ << " ( " << px << ", " << py << ", " << pz << ") " << endl;
return result;
}
{
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;
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");
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");
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);
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);
for (int nro=3 ; nro<nbhexas ; nro +=3)
grid2->getHexa(nro)->remove();
-
+
grid2->saveVtk ("makeSphericalUni.vtk");
return HOK;
}
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);
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 ();
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;
}
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;
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 ();
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
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[])
{
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;
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);
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]);