[cig-commits] r13158 - in cs/cigma/trunk: src tests/libcigma

luis at geodynamics.org luis at geodynamics.org
Wed Oct 29 15:11:16 PDT 2008


Author: luis
Date: 2008-10-29 15:11:15 -0700 (Wed, 29 Oct 2008)
New Revision: 13158

Modified:
   cs/cigma/trunk/src/NodeCoordinates.cpp
   cs/cigma/trunk/src/NodeCoordinates.h
   cs/cigma/trunk/src/nc_array.cpp
   cs/cigma/trunk/src/nc_array.h
   cs/cigma/trunk/src/py_NodeCoordinates.cpp
   cs/cigma/trunk/src/py_NodeCoordinates.h
   cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.cpp
   cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.h
Log:
Updated nc_array

Simplifed the NodeCoordinates API, by moving the allocation
functionality to &NodeCoordinates::reinit, and removing
the &NodeCoordinates::getPointOffset.

Also, added the nc_array(int,int) constructor.

Modified: cs/cigma/trunk/src/NodeCoordinates.cpp
===================================================================
--- cs/cigma/trunk/src/NodeCoordinates.cpp	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/NodeCoordinates.cpp	2008-10-29 22:11:15 UTC (rev 13158)
@@ -1,10 +1,7 @@
-#include "NodeCoordinates.h"
 #include <iostream>
-
+#include "NodeCoordinates.h"
 using namespace cigma;
 
-// ----------------------------------------------------------------------------
-
 NodeCoordinates::NodeCoordinates()
 {
     //std::cout << "Calling NodeCoordinates()" << std::endl;

Modified: cs/cigma/trunk/src/NodeCoordinates.h
===================================================================
--- cs/cigma/trunk/src/NodeCoordinates.h	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/NodeCoordinates.h	2008-10-29 22:11:15 UTC (rev 13158)
@@ -16,16 +16,16 @@
     NodeCoordinates();
     virtual ~NodeCoordinates();
 
-    virtual void setCoordinates(double *coords, int nno, int nsd) = 0;
-    virtual void setCoordinates(float *coords, int nno, int nsd) = 0;
+    virtual void reinit(int nno, int nsd) = 0;
+    virtual void setCoordinates(double *coords) = 0;
+    virtual void setCoordinates(float *coords) = 0;
 
     virtual int n_points() const = 0;
     virtual int n_dim() const = 0;
-
     virtual double getPoint(int i, int j) const = 0;
-    virtual double* getPointOffset(int i) = 0;
+    virtual void getBoundingBox(double *minpt, double *maxpt) = 0;
 
-    /* XXX: add locator interface */
+    /* XXX: locator interface? */
 };
 
 #endif

Modified: cs/cigma/trunk/src/nc_array.cpp
===================================================================
--- cs/cigma/trunk/src/nc_array.cpp	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/nc_array.cpp	2008-10-29 22:11:15 UTC (rev 13158)
@@ -1,5 +1,6 @@
+#include <cassert>
 #include "nc_array.h"
-
+#include "Numeric.h"
 using namespace cigma;
 
 nc_array::nc_array()
@@ -9,8 +10,17 @@
     coords = 0;
 }
 
+nc_array::nc_array(int nno, int nsd)
+{
+    this->nno = nno;
+    this->nsd = nsd;
+    this->coords = new double[nno*nsd];
+}
+
 nc_array::~nc_array()
 {
+    nno = 0;
+    nsd = 0;
     if (coords != 0)
     {
         delete [] coords;
@@ -18,36 +28,41 @@
     }
 }
 
-void nc_array::setCoordinates(double *coords, int nno, int nsd)
+void nc_array::reinit(int nno, int nsd)
 {
-    this->nno = nno;
-    this->nsd = nsd;
     if (this->coords != 0)
     {
         delete [] this->coords;
     }
+    this->nno = nno;
+    this->nsd = nsd;
     this->coords = new double[nno*nsd];
+}
 
-    /* Copy data */
+void nc_array::setCoordinates(double *coords)
+{
+    assert(nno > 0);
+    assert(nsd > 0);
+    assert(this->coords != 0);
     for (int n = 0; n < nno*nsd; n++)
     {
         this->coords[n] = coords[n];
     }
 }
 
-void nc_array::setCoordinates(float *coords, int nno, int nsd)
+void nc_array::setCoordinates(float *coords)
 {
-    this->nno = nno;
-    this->nsd = nsd;
-    if (this->coords != 0)
-    {
-        delete [] this->coords;
-    }
-    this->coords = new double[nno*nsd];
-
-    /* Copy data */
+    assert(nno > 0);
+    assert(nsd > 0);
+    assert(this->coords != 0);
     for (int n = 0; n < nno*nsd; n++)
     {
         this->coords[n] = coords[n];
     }
 }
+
+void nc_array::getBoundingBox(double *minpt, double *maxpt)
+{
+    cigma::minmax(coords, nno, nsd, minpt, maxpt);
+}
+

Modified: cs/cigma/trunk/src/nc_array.h
===================================================================
--- cs/cigma/trunk/src/nc_array.h	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/nc_array.h	2008-10-29 22:11:15 UTC (rev 13158)
@@ -2,29 +2,30 @@
 #define __NC_ARRAY_H__
 
 #include "NodeCoordinates.h"
-#include "Locator.h"
-#include "Common.h"
+//#include "Locator.h"
 
 class nc_array : public cigma::NodeCoordinates
 {
 public:
     nc_array();
+    nc_array(int nno, int nsd);
     ~nc_array();
 
+    void reinit(int nno, int nsd);
+    void setCoordinates(double *coords);
+    void setCoordinates(float *coords);
+
     int n_points() const;
     int n_dim() const;
+    double getPoint(int i, int j) const;
+    void getBoundingBox(double *minpt, double *maxpt);
 
-    double getPoint(int i, int j) const;
     double *getPointOffset(int i);
 
-    void setCoordinates(double *coords, int nno, int nsd);
-    void setCoordinates(float *coords, int nno, int nsd);
-
 public:
     int nno;
     int nsd;
     double *coords;     // XXX: replace double by CoordType
-    cigma::Locator *locator;
 };
 
 inline int nc_array::n_points() const

Modified: cs/cigma/trunk/src/py_NodeCoordinates.cpp
===================================================================
--- cs/cigma/trunk/src/py_NodeCoordinates.cpp	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/py_NodeCoordinates.cpp	2008-10-29 22:11:15 UTC (rev 13158)
@@ -6,34 +6,39 @@
 
 // ----------------------------------------------------------------------------
 
-int pyNodeCoordinates::n_points() const
+/*
+void pyNodeCoordinates::reinit(int nno, int nsd)
 {
-    return this->get_override("n_points")();
+    this->get_override("reinit")(nno, nsd);
 }
 
-int pyNodeCoordinates::n_dim() const
+void pyNodeCoordinates::setCoordinates(double *coords)
 {
-    return this->get_override("n_dim")();
 }
 
-double pyNodeCoordinates::getPoint(int i, int j) const
+void pyNodeCoordinates::setCoordinates(float *coords)
 {
-    return this->get_override("getPoint")(i, j);
 }
 
-double* pyNodeCoordinates::getPointOffset(int i)
+int pyNodeCoordinates::n_points() const
 {
-    return 0;
+    return this->get_override("n_points")();
 }
 
-void pyNodeCoordinates::setCoordinates(double *coords, int nno, int nsd)
+int pyNodeCoordinates::n_dim() const
 {
+    return this->get_override("n_dim")();
 }
 
-void pyNodeCoordinates::setCoordinates(float *coords, int nno, int nsd)
+double pyNodeCoordinates::getPoint(int i, int j) const
 {
+    return this->get_override("getPoint")(i, j);
 }
 
+void pyNodeCoordinates::getBoundingBox(double *minpt, double *maxpt)
+{
+}
+*/
 
 // ----------------------------------------------------------------------------
 
@@ -52,7 +57,7 @@
 
     this->nno = npts;
     this->nsd = nsd;
-    this->coords = (double *)numpy_util::data(this->data);
+    this->coords = (double *) numpy_util::data(this->data);
 }
 
 
@@ -117,11 +122,14 @@
     using namespace cigma;
     using namespace boost::python;
 
+    /* XXX: don't really need pyNodeCoordinates (we only created it
+     * to figure out virtual methods in boost.python)
+     *
     class_<pyNodeCoordinates, boost::noncopyable>("NodeCoordinates")
         .def("n_points", pure_virtual(&NodeCoordinates::n_points))
         .def("n_dim", pure_virtual(&NodeCoordinates::n_dim))
         .def("getPoint", pure_virtual(&NodeCoordinates::getPoint))
-        ;
+        ; // */
 
     typedef py_nc_array nc;
     class_<py_nc_array, boost::noncopyable>("nc_array", init<int,int>())

Modified: cs/cigma/trunk/src/py_NodeCoordinates.h
===================================================================
--- cs/cigma/trunk/src/py_NodeCoordinates.h	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/src/py_NodeCoordinates.h	2008-10-29 22:11:15 UTC (rev 13158)
@@ -2,22 +2,23 @@
 #define __PY_NODE_COORDINATES_H__
 
 #include "numpy_util.h"
-#include "Common.h"
-#include "Locator.h"
 #include "NodeCoordinates.h"
 #include "nc_array.h"
+//#include "Locator.h"
 
+/*
 struct pyNodeCoordinates : cigma::NodeCoordinates, boost::python::wrapper<cigma::NodeCoordinates>
 {
+    void reinit(int nno, int nsd);
+    void setCoordinates(double *coords);
+    void setCoordinates(float *coords);
+
     int n_points() const;
     int n_dim() const;
     double getPoint(int i, int j) const;
+    void getBoundingBox(double *minpt, double *maxpt);
+}; // */
 
-    double* getPointOffset(int i);
-    void setCoordinates(double *coords, int nno, int nsd);
-    void setCoordinates(float *coords, int nno, int nsd);
-};
-
 struct py_nc_array : nc_array
 {
     py_nc_array();

Modified: cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.cpp
===================================================================
--- cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.cpp	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.cpp	2008-10-29 22:11:15 UTC (rev 13158)
@@ -1,20 +1,18 @@
 #include "NodeCoordinatesTest.h"
+using namespace libcigma;
+
 #include <boost/smart_ptr.hpp>
-#include "Exception.h"
+using boost::shared_ptr;
 
+#include "Exception.h"
 #include "NodeCoordinates.h"
 #include "nc_array.h"
-
-
-using namespace libcigma;
-
 using namespace cigma;
-using boost::shared_ptr;
 
 
-NodeCoordinatesTest::NodeCoordinatesTest() {}
-NodeCoordinatesTest::~NodeCoordinatesTest() {}
+const double delta = 1e-8;
 
+
 void NodeCoordinatesTest::test_nc_array()
 {
     int i,j;
@@ -22,9 +20,7 @@
     const int nno = 8;
     const int nsd = 3;
 
-    int node_number_map[nno] = { 0, 1, 2, 3, 4, 5, 6, 7 };
-
-    double _coords[nno*nsd] = {
+    double coords[nno*nsd] = {
         -1.0, -1.0, -1.0,
         +1.0, -1.0, -1.0,
         +1.0, +1.0, -1.0,
@@ -35,39 +31,33 @@
         -1.0, +1.0, +1.0
     };
 
-    /* XXX: test nc_array */
+    int node_number_map[nno] = { 0, 1, 2, 3, 4, 5, 6, 7 };
 
-    double *m_coords = new double[nno * nsd];
+    shared_ptr<nc_array> nc(new nc_array(nno, nsd));
+    nc->setCoordinates(coords);
+
+    // test dimensions
+    CPPUNIT_ASSERT_EQUAL(nc->n_points(), nno);
+    CPPUNIT_ASSERT_EQUAL(nc->n_dim(), nsd);
+
+    // test getter
     for (i = 0; i < nno; i++)
     {
         for (j = 0; j < nsd; j++)
         {
-            int k = i*nsd + j;
-            m_coords[k] = _coords[k];
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(nc->getPoint(i,j), coords[i*nsd+j], delta);
         }
     }
 
-    const double delta = 1e-6;
-    shared_ptr<nc_array> coords(new nc_array());
-    coords->setCoordinates(m_coords, nno, nsd);
+    // test offset
     for (i = 0; i < nno; i++)
     {
+        double *pt = nc->getPointOffset(i);
         for (j = 0; j < nsd; j++)
         {
-            CPPUNIT_ASSERT_DOUBLES_EQUAL(
-                coords->getPoint(i,j),
-                _coords[i*nsd+j], 
-                delta);
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(pt[j], coords[i*nsd + j], delta);
         }
     }
-    for (i = 0; i < nno; i++)
-    {
-        double *pt = coords->getPointOffset(i);
-        for (j = 0; j < nsd; j++)
-        {
-            CPPUNIT_ASSERT_DOUBLES_EQUAL(pt[j], _coords[i*nsd + j], delta);
-        }
-    }
 
     return;
 }

Modified: cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.h
===================================================================
--- cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.h	2008-10-29 22:11:14 UTC (rev 13157)
+++ cs/cigma/trunk/tests/libcigma/NodeCoordinatesTest.h	2008-10-29 22:11:15 UTC (rev 13158)
@@ -13,8 +13,8 @@
         CPPUNIT_TEST_SUITE_END();
 
     public:
-        NodeCoordinatesTest();
-        ~NodeCoordinatesTest();
+        NodeCoordinatesTest() {}
+        ~NodeCoordinatesTest() {}
         void test_nc_array();
     };
 }



More information about the CIG-COMMITS mailing list