[cig-commits] r9210 - cs/benchmark/cigma/trunk/src
luis at geodynamics.org
luis at geodynamics.org
Fri Feb 1 12:52:05 PST 2008
Author: luis
Date: 2008-02-01 12:52:04 -0800 (Fri, 01 Feb 2008)
New Revision: 9210
Modified:
cs/benchmark/cigma/trunk/src/HdfReader.cpp
cs/benchmark/cigma/trunk/src/HdfReader.h
cs/benchmark/cigma/trunk/src/Reader.h
cs/benchmark/cigma/trunk/src/TextReader.cpp
cs/benchmark/cigma/trunk/src/TextReader.h
cs/benchmark/cigma/trunk/src/VtkReader.cpp
cs/benchmark/cigma/trunk/src/VtkReader.h
Log:
Improvements to cigma::Reader and related classes
* Added virtual methods to provide a uniform interface for loading
coordinates and connectivity information from a mesh file
* Fixed typo in VtkReader::get_vector_point_data()
Modified: cs/benchmark/cigma/trunk/src/HdfReader.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/HdfReader.cpp 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/HdfReader.cpp 2008-02-01 20:52:04 UTC (rev 9210)
@@ -38,30 +38,33 @@
// ---------------------------------------------------------------------------
void cigma::HdfReader::
-get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd)
+get_dataset(const char *loc, double **data, int *num, int *dim)
{
int rank;
hid_t type_id;
- hid_t coords_id;
+ hid_t dataset_id;
herr_t status;
+ int ierr;
- coords_id = h5io_dset_open(file_id, loc, &type_id, &rank, NULL, NULL);
+ dataset_id = h5io_dset_open(file_id, loc, &type_id, &rank, NULL, NULL);
assert(H5Tget_class(type_id) == H5T_FLOAT);
- assert(coords_id >= 0);
+ assert(dataset_id >= 0);
assert(rank == 2);
- status = H5Dclose(coords_id);
- if (status < 0)
- {
- // XXX: emit warning
- }
+ status = H5Dclose(dataset_id);
+ assert(status >= 0); // XXX: emit warning?
- int ierr;
ierr = h5io_dset_read2(file_id, loc, H5T_NATIVE_DOUBLE,
- (void **)coordinates, nno, nsd);
+ (void **)data, num, dim);
assert(ierr >= 0);
}
void cigma::HdfReader::
+get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd)
+{
+ get_dataset(loc, coordinates, nno, nsd);
+}
+
+void cigma::HdfReader::
get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs)
{
int rank;
@@ -84,30 +87,7 @@
(void **)connectivity, nel, ndofs);
}
-void cigma::HdfReader::
-get_dataset(const char *loc, double **data, int *num, int *dim)
-{
- int rank;
- hid_t type_id;
- hid_t dataset_id;
- herr_t status;
- dataset_id = h5io_dset_open(file_id, loc, &type_id, &rank, NULL, NULL);
- assert(H5Tget_class(type_id) == H5T_FLOAT);
- assert(dataset_id >= 0);
- assert(rank == 2);
- status = H5Dclose(dataset_id);
- if (status < 0)
- {
- // XXX: emit warning
- }
-
- int ierr;
- ierr = h5io_dset_read2(file_id, loc, H5T_NATIVE_DOUBLE,
- (void **)data, num, dim);
-}
-
-
// ---------------------------------------------------------------------------
void cigma::HdfReader::
Modified: cs/benchmark/cigma/trunk/src/HdfReader.h
===================================================================
--- cs/benchmark/cigma/trunk/src/HdfReader.h 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/HdfReader.h 2008-02-01 20:52:04 UTC (rev 9210)
@@ -31,9 +31,9 @@
void close();
public:
+ void get_dataset(const char *loc, double **data, int *num, int *dim);
void get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd);
void get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs);
- void get_dataset(const char *loc, double **data, int *num, int *dim);
public:
void get_quadrature(Quadrature *quadrature, const char *loc);
Modified: cs/benchmark/cigma/trunk/src/Reader.h
===================================================================
--- cs/benchmark/cigma/trunk/src/Reader.h 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/Reader.h 2008-02-01 20:52:04 UTC (rev 9210)
@@ -26,6 +26,11 @@
virtual ReaderType getType() = 0;
virtual void open(std::string filename) = 0;
virtual void close() = 0;
+
+public:
+ virtual void get_dataset(const char *loc, double **data, int *num, int *dim) = 0;
+ virtual void get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd) = 0;
+ virtual void get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs) = 0;
};
#endif
Modified: cs/benchmark/cigma/trunk/src/TextReader.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/TextReader.cpp 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/TextReader.cpp 2008-02-01 20:52:04 UTC (rev 9210)
@@ -101,19 +101,20 @@
// ---------------------------------------------------------------------------
-void cigma::TextReader::get_connectivity(int **connectivity, int *nel, int *ndofs)
+void cigma::TextReader::get_dataset(const char *loc, double **data, int *num, int *dim)
{
- read_imat(fp, connectivity, nel, ndofs);
+ read_dmat(fp, data, num, dim);
}
-void cigma::TextReader::get_coordinates(double **coordinates, int *nno, int *nsd)
+void cigma::TextReader::get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs)
{
- read_dmat(fp, coordinates, nno, nsd);
+ read_imat(fp, connectivity, nel, ndofs);
}
-void cigma::TextReader::get_dofs(double **dofs, int *num, int *ndim)
+void cigma::TextReader::get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd)
{
- read_dmat(fp, dofs, num, ndim);
+ read_dmat(fp, coordinates, nno, nsd);
}
+
// ---------------------------------------------------------------------------
Modified: cs/benchmark/cigma/trunk/src/TextReader.h
===================================================================
--- cs/benchmark/cigma/trunk/src/TextReader.h 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/TextReader.h 2008-02-01 20:52:04 UTC (rev 9210)
@@ -25,9 +25,9 @@
void close();
public:
- void get_connectivity(int **connectivity, int *nel, int *ndofs);
- void get_coordinates(double **coordinates, int *nno, int *nsd);
- void get_dofs(double **dofs, int *nno, int *ndim);
+ void get_dataset(const char *loc, double **data, int *num, int *dim);
+ void get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd);
+ void get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs);
public:
FILE *fp;
Modified: cs/benchmark/cigma/trunk/src/VtkReader.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/VtkReader.cpp 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/VtkReader.cpp 2008-02-01 20:52:04 UTC (rev 9210)
@@ -72,6 +72,73 @@
// ---------------------------------------------------------------------------
void cigma::VtkReader::
+get_dataset(const char *loc, double **data, int *num, int *dim)
+{
+ assert(grid != 0);
+ assert(loc != 0);
+
+ int size = 0;
+ int dims[2] = {0, 0};
+ double *array = 0;
+
+ vtkPointData *pointData = grid->GetPointData();
+
+ if (pointData->HasArray(loc) == 1)
+ {
+ vtkDataArray *dataArray = pointData->GetArray(loc);
+ assert(dataArray != 0);
+
+ dims[0] = dataArray->GetNumberOfTuples();
+ dims[1] = dataArray->GetNumberOfComponents();
+
+ size = dims[0] * dims[1];
+ array = new double[size];
+
+ int dataType = dataArray->GetDataType();
+
+ if (dataType == VTK_DOUBLE)
+ {
+ double *ptr = static_cast<double*>(dataArray->GetVoidPointer(0));
+ for (int i = 0; i < size; i++)
+ {
+ array[i] = ptr[i];
+ }
+ }
+ else if (dataType == VTK_FLOAT)
+ {
+ float *ptr = static_cast<float*>(dataArray->GetVoidPointer(0));
+ for (int i = 0; i < size; i++)
+ {
+ array[i] = ptr[i];
+ }
+ }
+ else
+ {
+ assert(false);
+ }
+ }
+
+ *data = array;
+ *num = dims[0];
+ *dim = dims[1];
+}
+
+void cigma::VtkReader::
+get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd)
+{
+ get_coordinates(coordinates, nno, nsd);
+}
+
+void cigma::VtkReader::
+get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs)
+{
+ get_connectivity(connectivity, nel, ndofs);
+}
+
+
+// ---------------------------------------------------------------------------
+
+void cigma::VtkReader::
get_coordinates(double **coordinates, int *nno, int *nsd)
{
assert(grid != 0);
@@ -141,7 +208,6 @@
*ndofs = dofs_per_elt;
}
-
void cigma::VtkReader::
get_vector_point_data(const char *name, double **vectors, int *num, int *dim)
{
@@ -155,7 +221,7 @@
assert(pointData->HasArray(name) == 1);
dataArray = pointData->GetVectors(name);
} else {
- dataArray = pointData->GetScalars();
+ dataArray = pointData->GetVectors();
}
//dataArray->PrintSelf(std::cout, 0);
@@ -203,4 +269,5 @@
*dim = dataArray->GetNumberOfComponents();
}
+
// ---------------------------------------------------------------------------
Modified: cs/benchmark/cigma/trunk/src/VtkReader.h
===================================================================
--- cs/benchmark/cigma/trunk/src/VtkReader.h 2008-02-01 20:52:03 UTC (rev 9209)
+++ cs/benchmark/cigma/trunk/src/VtkReader.h 2008-02-01 20:52:04 UTC (rev 9210)
@@ -62,6 +62,11 @@
void close();
public:
+ void get_dataset(const char *loc, double **data, int *num, int *dim);
+ void get_coordinates(const char *loc, double **coordinates, int *nno, int *nsd);
+ void get_connectivity(const char *loc, int **connectivity, int *nel, int *ndofs);
+
+public:
void get_coordinates(double **coordinates, int *nno, int *nsd);
void get_connectivity(int **connectivity, int *nel, int *ndofs);
void get_vector_point_data(const char *name, double **vectors, int *num, int *dim);
More information about the cig-commits
mailing list