[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