[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