[cig-commits] r11733 - in cs/benchmark/cigma/trunk/src: . tests

luis at geodynamics.org luis at geodynamics.org
Wed Apr 2 11:01:59 PDT 2008


Author: luis
Date: 2008-04-02 11:01:59 -0700 (Wed, 02 Apr 2008)
New Revision: 11733

Added:
   cs/benchmark/cigma/trunk/src/FieldSet.cpp
   cs/benchmark/cigma/trunk/src/FieldSet.h
   cs/benchmark/cigma/trunk/src/tests/TestFieldSet.cpp
Modified:
   cs/benchmark/cigma/trunk/src/tests/Makefile
Log:
Added FieldSet container for predefined fields


Added: cs/benchmark/cigma/trunk/src/FieldSet.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/FieldSet.cpp	                        (rev 0)
+++ cs/benchmark/cigma/trunk/src/FieldSet.cpp	2008-04-02 18:01:59 UTC (rev 11733)
@@ -0,0 +1,69 @@
+#include <iostream>
+#include <cstdlib>
+#include <cassert>
+#include "FieldSet.h"
+#include "ZeroField.h"
+#include "GaleBenchmarkFields.h"
+
+using namespace std;
+using namespace cigma;
+
+// ---------------------------------------------------------------------------
+
+//
+// This method will initialize our FieldSet container with a
+// number of predefined fields. Others may be added
+//
+void FieldSet::initialize()
+{
+
+    ZeroField *zero = new ZeroField();
+    addField("zero", zero);
+
+    typedef gale::circular_inclusion::Pressure GCIPressure;
+    GCIPressure *pressure = new GCIPressure();
+    addField("gale.circular_inclusion.pressure", pressure);
+}
+
+
+// ---------------------------------------------------------------------------
+
+FieldSet::FieldSet()
+{
+}
+
+FieldSet::~FieldSet()
+{
+    FieldMap::iterator it;
+    for (it = fields.begin(); it != fields.end(); ++it)
+    {
+        Field *field = it->second;
+        if (field != 0)
+        {
+            delete field;
+        }
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+
+void FieldSet::addField(std::string name, Field *field)
+{
+    assert(field != 0);
+    fields[name] = field;
+}
+
+Field *FieldSet::getField(std::string name)
+{
+    Field *field = 0;
+    FieldMap::iterator it = fields.find(name);
+    if (it != fields.end())
+    {
+        field = it->second;
+    }
+    return field;
+}
+
+
+// ---------------------------------------------------------------------------

Added: cs/benchmark/cigma/trunk/src/FieldSet.h
===================================================================
--- cs/benchmark/cigma/trunk/src/FieldSet.h	                        (rev 0)
+++ cs/benchmark/cigma/trunk/src/FieldSet.h	2008-04-02 18:01:59 UTC (rev 11733)
@@ -0,0 +1,34 @@
+#ifndef __FIELD_SET_H__
+#define __FIELD_SET_H__
+
+#include <map>
+#include <string>
+#include "Field.h"
+
+namespace cigma
+{
+    class FieldSet;
+}
+
+class cigma::FieldSet
+{
+public:
+    typedef std::map<std::string,Field*> FieldMap;
+
+public:
+    FieldSet();
+    ~FieldSet();
+
+public:
+    void initialize();
+
+public:
+    void addField(std::string name, Field *field);
+    Field *getField(std::string name);
+
+public:
+    FieldMap fields;
+
+};
+
+#endif

Modified: cs/benchmark/cigma/trunk/src/tests/Makefile
===================================================================
--- cs/benchmark/cigma/trunk/src/tests/Makefile	2008-04-02 18:01:58 UTC (rev 11732)
+++ cs/benchmark/cigma/trunk/src/tests/Makefile	2008-04-02 18:01:59 UTC (rev 11733)
@@ -21,11 +21,12 @@
 	TestQuad.o \
 	TestTet.o \
 	TestHex.o \
+	TestCellVolume.o \
 	TestPoints.o \
+	TestTimer.o \
 	TestZeroField.o \
-	TestTimer.o \
+	TestFieldSet.o \
 	TestStringUtils.o \
-	TestCellVolume.o \
 
 
 TESTS = $(TESTOBJS:.o=.out)

Added: cs/benchmark/cigma/trunk/src/tests/TestFieldSet.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/tests/TestFieldSet.cpp	                        (rev 0)
+++ cs/benchmark/cigma/trunk/src/tests/TestFieldSet.cpp	2008-04-02 18:01:59 UTC (rev 11733)
@@ -0,0 +1,48 @@
+#include <iostream>
+#include <limits>
+#include <cassert>
+#include "../ZeroField.h"
+#include "../FieldSet.h"
+
+using namespace std;
+using namespace cigma;
+
+int main()
+{
+    Field *field;
+    double x[3];
+    double y[3];
+
+    FieldSet fieldset;
+    fieldset.initialize();
+    
+    /* try a known field */
+    field = fieldset.getField("zero");
+    ZeroField *zero = static_cast<ZeroField*>(field);
+    zero->set_shape(3,3);
+    x[0] = x[1] = x[2] = 0;
+    y[0] = y[1] = y[2] = numeric_limits<double>::quiet_NaN();
+    field->eval(x,y);
+    cout << "zero"
+         << "(" << x[0] << "," << x[1] << "," << x[2] << ") = "
+         << "(" << y[0] << "," << y[1] << "," << y[2] << ")"
+         << endl;
+
+    /* try gale's circular_inclusion benchmark */
+    field = fieldset.getField("gale.circular_inclusion.pressure");
+    x[0] = 0.5;
+    x[1] = 0.57;
+    y[0] = numeric_limits<double>::infinity();
+    field->eval(x,y);
+    cout << "pressure"
+         << "(" << x[0] << "," << x[1] << ") = "
+         << y[0]
+         << endl;
+
+    /* test a non-existent field */
+    field = fieldset.getField("foo");
+    assert(field == 0);
+
+
+    return 0;
+}



More information about the cig-commits mailing list