[cig-commits] r13549 - cs/cigma/trunk/src

luis at geodynamics.org luis at geodynamics.org
Tue Dec 9 18:14:02 PST 2008


Author: luis
Date: 2008-12-09 18:14:02 -0800 (Tue, 09 Dec 2008)
New Revision: 13549

Modified:
   cs/cigma/trunk/src/core_eval_op.cpp
   cs/cigma/trunk/src/core_eval_op.h
Log:
Switched to Function::New factory method.

Also, match dimensions of "one" & "zero" functions

Modified: cs/cigma/trunk/src/core_eval_op.cpp
===================================================================
--- cs/cigma/trunk/src/core_eval_op.cpp	2008-12-10 02:13:59 UTC (rev 13548)
+++ cs/cigma/trunk/src/core_eval_op.cpp	2008-12-10 02:14:02 UTC (rev 13549)
@@ -1,11 +1,11 @@
 #include "core_eval_op.h"
 #include "core_readers.h"
+#include "fn_zero.h"
+#include "fn_one.h"
 #include "tri_logger.hpp"
-#include <boost/shared_ptr.hpp>
-#include "fn_zero.h"
 #include <iostream>
 #include <sstream>
-
+#include <boost/shared_ptr.hpp>
 using namespace std;
 using namespace cigma;
 using boost::shared_ptr;
@@ -25,15 +25,27 @@
 
     if (!function)
     {
-        function = Function::New(fn_name.c_str());
+        function = Function::NewFunction(fn_info);
+
+        /*
+        if (fn_name != "")
+        {
+            function = Function::New(fn_name.c_str());
+        }
+        else
+        {
+            //function = ReadField(field_info);
+            shared_ptr<Field> field(new Field);
+            field->setDofsPath(field_info.p_field);
+            field->setMeshPath(field_info.mesh_info.p_mesh);
+            field->setCell(field_info.fe_info.q_info.cell_type_name); // XXX: inherit from mesh?
+            function = field;
+        }
+        */
     }
     if (!function)
     {
-        //function = ReadField(field_info);
-    }
-    if (!function)
-    {
-        string msg("No function was specified");
+        string msg("Uninitialized function argument");
         throw cigma::Exception("EvalOp::configure", msg);
     }
 
@@ -42,25 +54,31 @@
         coords = ReadNodeCoordinates(nc_path);
         if (!coords)
         {
-            string msg("No points specified");
-            throw cigma::Exception("EvalOp::configure", msg);
+            std::ostringstream stream;
+            stream << "Failed to read points from path '" << nc_path << "'" << std::ends;
+            throw cigma::Exception("EvalOp::configure", stream.str());
         }
     }
 
-    if (fn_name == "zero")
+    if (fn_info.fn_name == "zero")
     {
         ZeroFunction *fn = static_cast<ZeroFunction*>(&(*function));
         fn->setShape(coords->n_dim(), 1);
     }
 
+    if (fn_info.fn_name == "one")
+    {
+        UnitScalarFn *fn = static_cast<UnitScalarFn*>(&(*function));
+        fn->setDim(coords->n_dim());
+    }
+
     if (coords->n_dim() != function->n_dim())
     {
-        ostringstream stream;
+        std::ostringstream stream;
         stream << "Dimension mismatch between"
                << " function domain (dim " << function->n_dim() << ")"
                << " and evaluation points (dim " << coords->n_dim() << ")"
                << std::ends;
-        string msg("Dimension mismatch for function domain and coordinates");
         throw cigma::Exception("EvalOp::configure", stream.str(), 3);
     }
 

Modified: cs/cigma/trunk/src/core_eval_op.h
===================================================================
--- cs/cigma/trunk/src/core_eval_op.h	2008-12-10 02:13:59 UTC (rev 13548)
+++ cs/cigma/trunk/src/core_eval_op.h	2008-12-10 02:14:02 UTC (rev 13549)
@@ -2,9 +2,10 @@
 #define __CIGMA_EVAL_OP_H__
 
 #include "core_base_op.h"
-#include "core_readers.h"
 #include "core_array.h"
+#include "core_args.h"
 #include "Function.h"
+#include "Field.h"
 #include "NodeCoordinates.h"
 
 namespace cigma
@@ -24,8 +25,9 @@
 
 public:
 
-    std::string fn_name;
-    FieldInfo field_info;
+    //std::string fn_name;
+    //FieldInfo field_info;
+    FunctionInfo fn_info;
     DataPath nc_path;
 
     boost::shared_ptr<Function> function;



More information about the CIG-COMMITS mailing list