[cig-commits] r11689 - cs/benchmark/cigma/trunk/src
luis at geodynamics.org
luis at geodynamics.org
Tue Apr 1 01:40:08 PDT 2008
Author: luis
Date: 2008-04-01 01:40:08 -0700 (Tue, 01 Apr 2008)
New Revision: 11689
Modified:
cs/benchmark/cigma/trunk/src/ExtField.h
cs/benchmark/cigma/trunk/src/FE_Field.cpp
cs/benchmark/cigma/trunk/src/FE_Field.h
cs/benchmark/cigma/trunk/src/Field.cpp
cs/benchmark/cigma/trunk/src/Field.h
cs/benchmark/cigma/trunk/src/NullField.cpp
cs/benchmark/cigma/trunk/src/NullField.h
cs/benchmark/cigma/trunk/src/PointField.cpp
cs/benchmark/cigma/trunk/src/PointField.h
cs/benchmark/cigma/trunk/src/ZeroField.cpp
cs/benchmark/cigma/trunk/src/ZeroField.h
Log:
Return false from Field::eval() to indicate a domain error
Modified: cs/benchmark/cigma/trunk/src/ExtField.h
===================================================================
--- cs/benchmark/cigma/trunk/src/ExtField.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/ExtField.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -37,8 +37,8 @@
void close_library();
public:
- void eval(double *x, double *y);
- void eval(Points &domain, Points &range);
+ bool eval(double *x, double *y);
+ bool eval(Points &domain, Points &range);
public:
int dim;
Modified: cs/benchmark/cigma/trunk/src/FE_Field.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/FE_Field.cpp 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/FE_Field.cpp 2008-04-01 08:40:08 UTC (rev 11689)
@@ -1,9 +1,11 @@
#include <cassert>
#include "FE_Field.h"
+using namespace cigma;
+
// ---------------------------------------------------------------------------
-cigma::FE_Field::FE_Field()
+FE_Field::FE_Field()
{
dim = 0;
rank = 0;
@@ -12,13 +14,13 @@
dofHandler = 0;
}
-cigma::FE_Field::~FE_Field()
+FE_Field::~FE_Field()
{
}
// ---------------------------------------------------------------------------
-void cigma::FE_Field::get_cell_dofs(int cellIndex, double *cellDofs)
+void FE_Field::get_cell_dofs(int cellIndex, double *cellDofs)
{
assert(dofHandler != 0);
assert(meshPart != 0);
@@ -41,7 +43,7 @@
// ---------------------------------------------------------------------------
-void cigma::FE_Field::eval(double *point, double *value)
+bool FE_Field::eval(double *point, double *value)
{
assert(fe != 0);
assert(meshPart != 0);
@@ -54,7 +56,8 @@
int e;
bool found_cell = false;
found_cell = meshPart->find_cell(point, &e);
- assert(found_cell); // XXX: how to handle... throw exception?
+ if (!found_cell)
+ return false;
// use dofs as weights on the shape function values
const int ndofs = cell->n_nodes();
@@ -66,9 +69,11 @@
double uvw[3];
cell->xyz2uvw(point,uvw);
cell->interpolate(field_dofs, uvw, value, valdim);
+
+ return true;
}
-void cigma::FE_Field::tabulate_element(int e, double *values)
+void FE_Field::tabulate_element(int e, double *values)
{
assert(fe != 0);
assert(meshPart != 0);
Modified: cs/benchmark/cigma/trunk/src/FE_Field.h
===================================================================
--- cs/benchmark/cigma/trunk/src/FE_Field.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/FE_Field.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -29,7 +29,7 @@
FieldType getType() { return FE_FIELD; }
public:
- void eval(double *point, double *value);
+ bool eval(double *point, double *value);
public:
void set_quadrature_rule(QuadratureRule *rule);
Modified: cs/benchmark/cigma/trunk/src/Field.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/Field.cpp 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/Field.cpp 2008-04-01 08:40:08 UTC (rev 11689)
@@ -31,11 +31,16 @@
//
if (HdfExtension(fieldExt.c_str()))
{
- // make sure that fieldFile is an HDF5 file (use IsHdfFile())
+ //
+ // Make sure that fieldFile is an HDF5 file (use IsHdfFile())
// read attribute from fieldLoc to distinguish between FE_Field and PointField
// (use HdfAttr::get_string())
+ //
+ if (fieldExt == ".hdf5") // XXX: temporary hack for choosing PointField
+ {
+ return new PointField();
+ }
return new FE_Field();
- //return new PointField();
}
if (VtkExtension(fieldExt.c_str()))
@@ -61,15 +66,19 @@
// ---------------------------------------------------------------------------
-void Field::eval(Points &domain, Points &range)
+bool Field::eval(Points &domain, Points &range)
{
assert(domain.n_points() == range.n_points());
for (int i = 0; i < domain.n_points(); i++)
{
+ bool ret;
double *x = domain[i];
double *y = range[i];
- eval(x,y);
+ ret = eval(x,y);
+ if (ret)
+ return false;
}
+ return true;
}
// ---------------------------------------------------------------------------
Modified: cs/benchmark/cigma/trunk/src/Field.h
===================================================================
--- cs/benchmark/cigma/trunk/src/Field.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/Field.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -30,8 +30,8 @@
virtual FieldType getType() = 0;
public:
- virtual void eval(double *point, double *value) = 0;
- virtual void eval(Points &domain, Points &range);
+ virtual bool eval(double *point, double *value) = 0;
+ virtual bool eval(Points &domain, Points &range);
virtual ~Field();
};
Modified: cs/benchmark/cigma/trunk/src/NullField.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/NullField.cpp 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/NullField.cpp 2008-04-01 08:40:08 UTC (rev 11689)
@@ -4,5 +4,5 @@
NullField::NullField() {}
NullField::~NullField() {}
-void NullField::eval(double *point, double *value) {}
+bool NullField::eval(double *point, double *value) { return false; }
Modified: cs/benchmark/cigma/trunk/src/NullField.h
===================================================================
--- cs/benchmark/cigma/trunk/src/NullField.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/NullField.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -20,7 +20,7 @@
FieldType getType() { return NULL_FIELD; }
public:
- void eval(double *point, double *value);
+ bool eval(double *point, double *value);
};
Modified: cs/benchmark/cigma/trunk/src/PointField.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/PointField.cpp 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/PointField.cpp 2008-04-01 08:40:08 UTC (rev 11689)
@@ -1,15 +1,17 @@
#include <cassert>
#include "PointField.h"
+using namespace cigma;
+
// ---------------------------------------------------------------------------
-cigma::PointField::PointField()
+PointField::PointField()
{
points = new Points();
values = new Points();
}
-cigma::PointField::~PointField()
+PointField::~PointField()
{
delete points;
delete values;
@@ -17,22 +19,20 @@
// ---------------------------------------------------------------------------
-void cigma::PointField::
-set_points(double *pts, int npts, int nsd)
+void PointField::set_points(double *pts, int npts, int nsd)
{
points->set_data(pts, npts, nsd);
}
-void cigma::PointField::
-set_values(double *vals, int nvals, int rank)
+void PointField::set_values(double *vals, int nvals, int rank)
{
values->set_data(vals, nvals, rank);
}
+
// ---------------------------------------------------------------------------
-void cigma::PointField::
-eval(double *point, double *value)
+bool PointField::eval(double *point, double *value)
{
//* XXX: quick sanity check
static int checked = 0;
@@ -49,11 +49,18 @@
// Find index of closest point
int n;
points->find_ann_index(point, &n);
- assert(0 <= n);
- assert(n < points->n_points());
+
+ //assert(0 <= n);
+ //assert(n < points->n_points());
+ if ((0 <= n) || (n < points->n_points()))
+ {
+ return false;
+ }
// Retrieve corresponding value
value = (*values)[n];
+
+ return true;
}
// ---------------------------------------------------------------------------
Modified: cs/benchmark/cigma/trunk/src/PointField.h
===================================================================
--- cs/benchmark/cigma/trunk/src/PointField.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/PointField.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -28,10 +28,9 @@
public:
void set_points(double *pts, int npts, int nsd);
void set_values(double *vals, int nvals, int rank);
- void set_locator(Locator *locator);
public:
- void eval(double *point, double *value);
+ bool eval(double *point, double *value);
public:
Points *points;
Modified: cs/benchmark/cigma/trunk/src/ZeroField.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/ZeroField.cpp 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/ZeroField.cpp 2008-04-01 08:40:08 UTC (rev 11689)
@@ -14,11 +14,12 @@
}
-void ZeroField::eval(double *x, double *y)
+bool ZeroField::eval(double *x, double *y)
{
for (int i = 0; i < rank; i++)
{
y[i] = 0.0;
}
+ return true;
}
Modified: cs/benchmark/cigma/trunk/src/ZeroField.h
===================================================================
--- cs/benchmark/cigma/trunk/src/ZeroField.h 2008-04-01 08:40:07 UTC (rev 11688)
+++ cs/benchmark/cigma/trunk/src/ZeroField.h 2008-04-01 08:40:08 UTC (rev 11689)
@@ -14,7 +14,7 @@
~ZeroField();
public:
- void eval(double *point, double *value);
+ bool eval(double *point, double *value);
public:
int n_dim() { return dim; }
More information about the cig-commits
mailing list