[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