[cig-commits] r8912 - in cs/benchmark/cigma/trunk/src: . tests

luis at geodynamics.org luis at geodynamics.org
Wed Dec 19 12:01:46 PST 2007


Author: luis
Date: 2007-12-19 12:01:46 -0800 (Wed, 19 Dec 2007)
New Revision: 8912

Added:
   cs/benchmark/cigma/trunk/src/tests/TestVtkUgReader.cpp
Removed:
   cs/benchmark/cigma/trunk/src/tests/TestVtkReader1.cpp
   cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp
Modified:
   cs/benchmark/cigma/trunk/src/VtkUgReader.cpp
Log:
Fixes for VtkUgReader related to array datatypes

Modified: cs/benchmark/cigma/trunk/src/VtkUgReader.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/VtkUgReader.cpp	2007-12-19 20:01:31 UTC (rev 8911)
+++ cs/benchmark/cigma/trunk/src/VtkUgReader.cpp	2007-12-19 20:01:46 UTC (rev 8912)
@@ -1,9 +1,13 @@
+#include <iostream>
+#include <cstdlib>
+#include <cassert>
+
 #include "VtkUgReader.h"
+
 #include "vtkCellArray.h"
 #include "vtkPointData.h"
 #include "vtkDoubleArray.h"
 #include "vtkFloatArray.h"
-#include <cassert>
 
 
 // ---------------------------------------------------------------------------
@@ -37,17 +41,57 @@
 // ---------------------------------------------------------------------------
 
 void cigma::VtkUgReader::
+get_coordinates(double **coordinates, int *nno, int *nsd)
+{
+    assert(grid != 0);
+
+    vtkPoints *points = grid->GetPoints();
+    //points->PrintSelf(std::cout, 0);
+
+    int dims[2];
+    dims[0] = points->GetNumberOfPoints();
+    dims[1] = 3;
+
+    int size = dims[0] * dims[1];
+    int dataType = points->GetDataType();
+    double *coords = new double[size];
+
+    if (dataType == VTK_DOUBLE)
+    {
+        double *ptr = static_cast<double*>(points->GetVoidPointer(0));
+        for (int i = 0; i < size; i++)
+        {
+            coords[i] = ptr[i];
+        }
+    }
+    else if (dataType == VTK_FLOAT)
+    {
+        float *ptr = static_cast<float*>(points->GetVoidPointer(0));
+        for (int i = 0; i < size; i++)
+        {
+            coords[i] = ptr[i];
+        }
+    }
+    else
+    {
+        assert(false);
+    }
+
+    *coordinates = coords;
+    *nno = dims[0];
+    *nsd = dims[1];
+}
+
+void cigma::VtkUgReader::
 get_connectivity(int **connectivity, int *nel, int *ndofs)
 {
-    assert(reader != 0);
+    assert(grid != 0);
 
-    vtkCellArray *cellArray;
-    vtkIdType numCells;
-    vtkIdType *cellArrayPtr;
+    vtkCellArray *cellArray = grid->GetCells();
+    //cellArray->PrintSelf(std::cout, 0);
 
-    cellArray = grid->GetCells();
-    numCells = grid->GetNumberOfCells();
-    cellArrayPtr = cellArray->GetPointer();
+    vtkIdType numCells = grid->GetNumberOfCells();
+    vtkIdType *cellArrayPtr = cellArray->GetPointer();
 
     int dofs_per_elt = cellArrayPtr[0];
     int offset = dofs_per_elt + 1;
@@ -66,102 +110,66 @@
     *ndofs = dofs_per_elt;
 }
 
-void cigma::VtkUgReader::
-get_coordinates(double **coordinates, int *nno, int *nsd)
-{
-    assert(reader != 0);
 
-    vtkPoints *points;
-    vtkPointData *pointData;
-    int pointDataDims[2];
-    vtkDoubleArray *vectors;
-    int vectorDims[2];
-
-    points = grid->GetPoints();
-    pointData = grid->GetPointData();
-    pointDataDims[0] = pointData->GetNumberOfTuples();
-    pointDataDims[1] = pointData->GetNumberOfComponents();
-
-    vectors = static_cast<vtkDoubleArray*>(pointData->GetVectors());
-    vectorDims[0] = vectors->GetNumberOfTuples();
-    vectorDims[1] = vectors->GetNumberOfComponents();
-
-    double *v = vectors->GetPointer(0);
-    double *coords = new double[vectorDims[0] * vectorDims[1]];
-
-    for (int n = 0; n < vectorDims[0]; ++n)
-    {
-        int offset = vectorDims[1] * n;
-        for (int i = 0; i < vectorDims[1]; ++i)
-        {
-            coords[offset + i] = v[offset + i];
-        }
-    }
-
-    *coordinates = coords;
-    *nno = vectorDims[0];
-    *nsd = vectorDims[1];
-}
-
 void cigma::VtkUgReader::
 get_vector_point_data(const char *name, double **vectors, int *num, int *dim)
 {
-    assert(reader != 0);
+    assert(grid != 0);
 
-    vtkPointData *pointData;
+    vtkPointData *pointData = grid->GetPointData();
+    //pointData->PrintSelf(std::cout, 0);
+
     vtkDataArray *dataArray;
-    vtkDoubleArray *vectorsArray;
-    double *v;
-
-    pointData = grid->GetPointData();
-
-    dataArray = 0;
-    if (name != 0)
+    if (name != 0) {
+        assert(pointData->HasArray(name) == 1);
         dataArray = pointData->GetVectors(name);
-    else
-        dataArray = pointData->GetVectors();
-    assert(dataArray != 0);
+    } else {
+        dataArray = pointData->GetScalars();
+    }
+    //dataArray->PrintSelf(std::cout, 0);
 
-    // XXX: how to tell type of array?
-    vectorsArray = static_cast<vtkDoubleArray*>(dataArray);
-    //vectorsArray->PrintSelf(std::cout, 0);
+    int dataType = dataArray->GetDataType();
+    assert(dataType == VTK_DOUBLE);
+    double *ptr = static_cast<double*>(dataArray->GetVoidPointer(0));
 
-    v = vectorsArray->GetPointer(0);
-    // XXX: copy?
+    // XXX: copy the data, or keep the reference?
+    // if dataType from the file is float, then we'd need to copy anyway
+    // perhaps we need a void pointer and a type
+    // new function signature would be
+    //  void get_vector_point_data(const char *name, void **vectors, int *num, int *dim, int *type)
 
-    *vectors = v;
-    *num = vectorsArray->GetNumberOfTuples();
-    *dim = vectorsArray->GetNumberOfComponents();
+    *vectors = ptr;
+    *num = dataArray->GetNumberOfTuples();
+    *dim = dataArray->GetNumberOfComponents();
 }
 
 void cigma::VtkUgReader::
 get_scalar_point_data(const char *name, double **scalars, int *num, int *dim)
 {
-    assert(reader != 0);
+    assert(grid != 0);
 
-    vtkPointData *pointData;
+    vtkPointData *pointData = grid->GetPointData();
+    //pointData->PrintSelf(std::cout, 0);
+
     vtkDataArray *dataArray;
-    vtkDoubleArray *scalarsArray;
-    double *s;
-
-    pointData = grid->GetPointData();
-
-    dataArray = 0;
-    if (name != 0)
+    if (name != 0) {
+        assert(pointData->HasArray(name) == 1);
         dataArray = pointData->GetScalars(name);
-    else
+    } else {
         dataArray = pointData->GetScalars();
-    assert(dataArray != 0);
+    }
+    //dataArray->PrintSelf(std::cout, 0);
 
-    // XXX: how to tell type of array?
-    scalarsArray = static_cast<vtkDoubleArray*>(dataArray);
-    //scalarsArray->PrintSelf(std::cout, 0);
 
-    s = scalarsArray->GetPointer(0);
+    int dataType = dataArray->GetDataType();
+    assert(dataType == VTK_DOUBLE);
+    double *ptr = static_cast<double*>(dataArray->GetVoidPointer(0));
 
-    *scalars = s;
-    *num = scalarsArray->GetNumberOfTuples();
-    *dim = scalarsArray->GetNumberOfComponents();
+    // XXX: see comment in get_vector_point_data()
+
+    *scalars = ptr;
+    *num = dataArray->GetNumberOfTuples();
+    *dim = dataArray->GetNumberOfComponents();
 }
 
 // ---------------------------------------------------------------------------

Deleted: cs/benchmark/cigma/trunk/src/tests/TestVtkReader1.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/tests/TestVtkReader1.cpp	2007-12-19 20:01:31 UTC (rev 8911)
+++ cs/benchmark/cigma/trunk/src/tests/TestVtkReader1.cpp	2007-12-19 20:01:46 UTC (rev 8912)
@@ -1,253 +0,0 @@
-#include <iostream>
-#include <cassert>
-#include "vtkUnstructuredGridReader.h"
-#include "vtkUnstructuredGrid.h"
-#include "vtkCellArray.h"
-#include "vtkPointData.h"
-#include "vtkDoubleArray.h"
-#include "vtkFloatArray.h"
-
-// ---------------------------------------------------------------------------
-// This class is a wrapper around vtkUnstructuredGridReader
-
-class VtkReader
-{
-public:
-    VtkReader();
-    ~VtkReader();
-
-public:
-    void open(std::string filename);
-    void get_connectivity(int **connectivity, int *nel, int *ndofs);
-    void get_coordinates(double **coordinates, int *nno, int *nsd);
-    void get_vector_point_data(const char *name, double **vectors, int *num, int *dim);
-    void get_scalar_point_data(const char *name, double **scalars, int *num, int *dim);
-
-public:
-    vtkUnstructuredGridReader *reader;
-    vtkUnstructuredGrid *grid;
-};
-
-
-// ---------------------------------------------------------------------------
-
-VtkReader::VtkReader()
-{
-    reader = 0;
-    grid = 0;
-}
-
-VtkReader::~VtkReader()
-{
-    reader->Delete();
-}
-
-void VtkReader::open(std::string filename)
-{
-    reader = vtkUnstructuredGridReader::New();
-    reader->SetFileName(filename.c_str());
-    reader->Update();
-    //reader->PrintSelf(std::cout,0);
-
-    grid = reader->GetOutput();
-    //grid->PrintSelf(std::cout, 4);
-}
-
-
-void VtkReader::get_connectivity(int **connectivity, int *nel, int *ndofs)
-{
-    assert(reader != 0);
-
-    vtkCellArray *cellArray;
-    vtkIdType numCells;
-    vtkIdType *cellArrayPtr;
-
-    cellArray = grid->GetCells();
-    numCells = grid->GetNumberOfCells();
-    cellArrayPtr = cellArray->GetPointer();
-    int dofs_per_elt = cellArrayPtr[0];
-    int offset = dofs_per_elt + 1;
-    int *connect = new int[numCells * dofs_per_elt];
-    for (int e = 0; e < numCells; ++e)
-    {
-        for (int i = 1; i <= dofs_per_elt; ++i)
-            connect[dofs_per_elt * e + (i-1)] = cellArrayPtr[offset*e + i];
-    }
-
-    *connectivity = connect;
-    *nel = numCells;
-    *ndofs = dofs_per_elt;
-}
-
-
-void VtkReader::get_coordinates(double **coordinates, int *nno, int *nsd)
-{
-    vtkPoints *points;
-    vtkPointData *pointData;
-    int pointDataDims[2];
-    vtkDoubleArray *vectors;
-    int vectorDims[2];
-    
-    points = grid->GetPoints();
-    pointData = grid->GetPointData();
-    pointDataDims[0] = pointData->GetNumberOfTuples();
-    pointDataDims[1] = pointData->GetNumberOfComponents();
-    vectors = static_cast<vtkDoubleArray*>(pointData->GetVectors());
-    vectorDims[0] = vectors->GetNumberOfTuples();
-    vectorDims[1] = vectors->GetNumberOfComponents();
-
-    double *v = vectors->GetPointer(0);
-    double *coords = new double[vectorDims[0]*vectorDims[1]];
-    for (int n = 0; n < vectorDims[0]; ++n)
-    {
-        int offset = vectorDims[1] * n;
-        for (int i = 0; i < vectorDims[1]; ++i)
-        {
-            coords[offset + i] = v[offset + i];
-        }
-    }
-
-    *coordinates = coords;
-    *nno = vectorDims[0];
-    *nsd = vectorDims[1];
-}
-
-
-void VtkReader::get_vector_point_data(const char *name, double **vectors, int *num, int *dim)
-{
-    vtkPointData *pointData;
-    vtkDataArray *dataArray;
-    vtkDoubleArray *vectorsArray;
-    double *v;
-
-    pointData = grid->GetPointData();
-
-    dataArray = 0;
-    if (name != 0)
-        dataArray = pointData->GetVectors(name);
-    else
-        dataArray = pointData->GetVectors();
-    assert(dataArray != 0);
-
-    // XXX: how to tell type of array? (double vs. float)
-    vectorsArray = static_cast<vtkDoubleArray*>(dataArray);
-    //vectorsArray->PrintSelf(std::cout, 0);
-
-    v = vectorsArray->GetPointer(0);
-    
-    *vectors = v;
-    *num = vectorsArray->GetNumberOfTuples();
-    *dim = vectorsArray->GetNumberOfComponents();
-}
-
-
-void VtkReader::get_scalar_point_data(const char *name, double **scalars, int *num, int *dim)
-{
-    vtkPointData *pointData;
-    vtkDataArray *dataArray;
-    vtkDoubleArray *scalarsArray;
-    double *s;
-
-    pointData = grid->GetPointData();
-
-    dataArray = 0;
-    if (name != 0)
-        dataArray = pointData->GetScalars(name);
-    else
-        dataArray = pointData->GetScalars();
-    assert(dataArray != 0);
-
-    // XXX: how to tell type of array?
-    scalarsArray = static_cast<vtkDoubleArray*>(dataArray);
-    //scalarsArray->PrintSelf(std::cout, 0);
-
-    s = scalarsArray->GetPointer(0);
-
-    *scalars = s;
-    *num = scalarsArray->GetNumberOfTuples();
-    *dim = scalarsArray->GetNumberOfComponents();
-}
-
-
-// ---------------------------------------------------------------------------
-
-int main(void)
-{
-    std::string filename = "strikeslip_tet4_1000m_t0.vtk";
-    VtkReader *reader = new VtkReader();
-
-    int nel, ndofs;
-    int *connect;
-
-    int nno, nsd;
-    double *coords;
-
-    int disp_nno, disp_dim;
-    double *displacement;
-
-    int scalars_nno, scalars_dim;
-    double *scalars;
-
-
-    reader->open(filename);
-    reader->get_connectivity(&connect, &nel, &ndofs);
-    reader->get_coordinates(&coords, &nno, &nsd);
-
-    reader->get_vector_point_data("displacements_t0", &displacement, &disp_nno, &disp_dim);
-    assert(nno == disp_nno);
-    assert(nsd == 3);
-
-    reader->get_scalar_point_data(0, &scalars, &scalars_nno, &scalars_dim);
-    assert(nno = scalars_nno);
-    assert(scalars_dim == 4);
-
-
-    std::cout << "coords :: [ " << nno << " x " << nsd << " ]\n";
-    std::cout << "connect :: [ " << nel << " x " << ndofs << " ]\n";
-    std::cout << "displacement :: [ " << disp_nno << " x " << disp_dim << " ]\n";
-    std::cout << "scalars :: [ " << scalars_nno << " x " << scalars_dim << " ]\n";
-
-    /*
-    for (int i = 0; i < nno; i++)
-    {
-        for (int j = 0; j < nsd; j++)
-        {
-            std::cout << coords[nsd*i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < nel; i++)
-    {
-        for (int j = 0; j < ndofs; j++)
-        {
-            std::cout << connect[ndofs*i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < disp_nno; i++)
-    {
-        for (int j = 0; j < disp_dim; j++)
-        {
-            std::cout << displacement[disp_dim * i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < scalars_nno; i++)
-    {
-        for (int j = 0; j < scalars_dim; j++)
-        {
-            std::cout << scalars[scalars_dim * i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    delete reader;
-    return 0;
-}
-

Deleted: cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp	2007-12-19 20:01:31 UTC (rev 8911)
+++ cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp	2007-12-19 20:01:46 UTC (rev 8912)
@@ -1,85 +0,0 @@
-#include <iostream>
-#include <cassert>
-#include "../VtkUgReader.h"
-
-using namespace cigma;
-
-int main(void)
-{
-    std::string filename = "strikeslip_tet4_1000m_t0.vtk";
-    VtkUgReader *reader = new VtkUgReader();
-
-    int nel, ndofs;
-    int *connect;
-
-    int nno, nsd;
-    double *coords;
-
-    int disp_nno, disp_dim;
-    double *displacement;
-
-    int scalars_nno, scalars_dim;
-    double *scalars;
-
-    reader->open(filename);
-    reader->get_connectivity(&connect, &nel, &ndofs);
-    reader->get_coordinates(&coords, &nno, &nsd);
-
-    reader->get_vector_point_data("displacements_t0", &displacement, &disp_nno, &disp_dim);
-    assert(nno == disp_nno);
-    assert(nsd == 3);
-
-    reader->get_scalar_point_data(0, &scalars, &scalars_nno, &scalars_dim);
-    assert(nno = scalars_nno);
-    assert(scalars_dim == 4);
-
-
-    std::cout << "coords :: [ " << nno << " x " << nsd << " ]\n";
-    std::cout << "connect :: [ " << nel << " x " << ndofs << " ]\n";
-    std::cout << "displacement :: [ " << disp_nno << " x " << disp_dim << " ]\n";
-    std::cout << "scalars :: [ " << scalars_nno << " x " << scalars_dim << " ]\n";
-
-    /*
-    for (int i = 0; i < nno; i++)
-    {
-        for (int j = 0; j < nsd; j++)
-        {
-            std::cout << coords[nsd*i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < nel; i++)
-    {
-        for (int j = 0; j < ndofs; j++)
-        {
-            std::cout << connect[ndofs*i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < disp_nno; i++)
-    {
-        for (int j = 0; j < disp_dim; j++)
-        {
-            std::cout << displacement[disp_dim * i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-    /*
-    for (int i = 0; i < scalars_nno; i++)
-    {
-        for (int j = 0; j < scalars_dim; j++)
-        {
-            std::cout << scalars[scalars_dim * i + j] << " ";
-        }
-        std::cout << std::endl;
-    } // */
-
-
-    delete reader;
-    return 0;
-}

Copied: cs/benchmark/cigma/trunk/src/tests/TestVtkUgReader.cpp (from rev 8911, cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp)
===================================================================
--- cs/benchmark/cigma/trunk/src/tests/TestVtkReader2.cpp	2007-12-19 20:01:31 UTC (rev 8911)
+++ cs/benchmark/cigma/trunk/src/tests/TestVtkUgReader.cpp	2007-12-19 20:01:46 UTC (rev 8912)
@@ -0,0 +1,62 @@
+#include <iostream>
+#include <cstdlib>
+#include <cassert>
+#include "../TextWriter.h"
+#include "../VtkUgReader.h"
+
+using namespace cigma;
+
+int main(void)
+{
+    TextWriter *writer = new TextWriter();
+    writer->fp = stdout;
+
+
+    VtkUgReader *reader = new VtkUgReader();
+    std::string filename = "strikeslip_tet4_1000m_t0.vtk";
+    reader->open(filename);
+
+
+    double *coords;
+    int nno, nsd;
+    reader->get_coordinates(&coords, &nno, &nsd);
+    assert(nsd == 3);
+    std::cout << "coords :: [ " << nno << " x " << nsd << " ]\n";
+    //writer->write_coordinates(coords, 10, nsd);
+
+
+
+    int *connect;
+    int nel, ndofs;
+    reader->get_connectivity(&connect, &nel, &ndofs);
+    assert(ndofs == 4);
+    std::cout << "connect :: [ " << nel << " x " << ndofs << " ]\n";
+    //writer->write_connectivity(connect, 10, ndofs);
+
+
+    double *displacement;
+    int disp_nno, disp_dim;
+    reader->get_vector_point_data("displacements_t0", &displacement, &disp_nno, &disp_dim);
+    assert(disp_nno = nno);
+    assert(disp_dim == 3);
+    std::cout << "displacement :: [ " << disp_nno << " x " << disp_dim << " ]\n";
+    //writer->write_dofs(displacement, 10, 3);
+
+
+    double *scalars;
+    int scalars_nno, scalars_dim;
+    reader->get_scalar_point_data(0, &scalars, &scalars_nno, &scalars_dim);
+    assert(scalars_nno == nno);
+    assert(scalars_dim == 4);
+    std::cout << "scalars :: [ " << scalars_nno << " x " << scalars_dim << " ]\n";
+    //writer->write_dofs(scalars, 10, scalars_dim);
+
+
+    delete reader;
+
+    writer->fp = NULL;
+    delete writer;
+
+
+    return 0;
+}



More information about the cig-commits mailing list