[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