[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