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

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


Author: luis
Date: 2008-12-09 18:13:59 -0800 (Tue, 09 Dec 2008)
New Revision: 13548

Modified:
   cs/cigma/trunk/src/core_compare_op.cpp
   cs/cigma/trunk/src/core_compare_op.h
Log:
Added details to exception message

Modified: cs/cigma/trunk/src/core_compare_op.cpp
===================================================================
--- cs/cigma/trunk/src/core_compare_op.cpp	2008-12-10 02:13:58 UTC (rev 13547)
+++ cs/cigma/trunk/src/core_compare_op.cpp	2008-12-10 02:13:59 UTC (rev 13548)
@@ -2,11 +2,14 @@
 #include "tri_logger.hpp"
 #include "Numeric.h"
 #include "fn_zero.h"
+#include "fn_one.h"
 
 #include <iostream>
 #include <iomanip>
 #include <cmath>
 #include <cassert>
+#include <string>
+#include <sstream>
 #include <boost/shared_ptr.hpp>
 
 using namespace std;
@@ -28,14 +31,23 @@
 
     if (!first)
     {
+        first = Function::NewFunction(first_info);
+
+        /*
         if (first_name != "")
         {
             first = Function::New(first_name.c_str());
         }
         else
         {
-            first = ReadField(first_info);
+            //first = ReadField(first_info);
+            shared_ptr<Field> field(new Field);
+            field->setDofsPath(first_info.p_field);
+            field->setMeshPath(first_info.mesh_info.p_mesh);
+            field->setCell(first_info.fe_info.q_info.cell_type_name); // XXX: inherit from mesh
+            first = field;
         }
+        // */
     }
     if (!first)
     {
@@ -46,14 +58,23 @@
 
     if (!second)
     {
+        second = Function::NewFunction(second_info);
+
+        /*
         if (second_name != "")
         {
             second = Function::New(second_name.c_str());
         }
         else
         {
-            second = ReadField(second_info);
+            //second = ReadField(second_info);
+            shared_ptr<Field> field(new Field);
+            field->setDofsPath(second_info.p_field);
+            field->setMeshPath(second_info.mesh_info.p_mesh);
+            field->setCell(second_info.fe_info.q_info.cell_type_name); // XXX: inherit from mesh?
+            second = field;
         }
+        // */
     }
     if (!second)
     {
@@ -63,8 +84,24 @@
 
     if (!domain)
     {
-        domain = ReadField(domain_info);
+        // XXX: check first and second for a mesh object and assign from there
+        //
+
+        domain = Field::NewField(domain_info);
+
+        /*
+        //domain = ReadField(domain_info);
+        shared_ptr<Field> field(new Field);
+        field->setMeshPath(domain_info.mesh_info.p_mesh);
+        field->setCell(domain_info.fe_info.q_info.cell_type_name);
+        domain = field;
+        */
     }
+    if (!domain)
+    {
+        string msg("Integration mesh not specified");
+        throw cigma::Exception("CompareOp::configure", msg);
+    }
     assert(domain);
     assert(domain->mesh);
     assert(domain->mesh->coords);
@@ -73,30 +110,47 @@
     assert(domain->fe->cell);
     assert(domain->fe->quadrature);
     
-    if (first_name == "zero")
+    if (first_info.fn_name == "zero")
     {
         ZeroFunction *fn = static_cast<ZeroFunction*>(&(*first));
         fn->setShape(second->n_dim(), second->n_rank());
     }
+    if (first_info.fn_name == "one")
+    {
+        UnitScalarFn *fn = static_cast<UnitScalarFn*>(&(*first));
+        fn->setDim(second->n_dim());
+    }
 
-    if (second_name == "zero")
+    if (second_info.fn_name == "zero")
     {
         ZeroFunction *fn = static_cast<ZeroFunction*>(&(*second));
         fn->setShape(first->n_dim(), first->n_rank());
     }
+    if (second_info.fn_name == "one")
+    {
+        UnitScalarFn *fn = static_cast<UnitScalarFn*>(&(*second));
+        fn->setDim(first->n_dim());
+    }
 
     if (first->n_dim() != second->n_dim())
     {
-        string msg("Dimension mismatch for domains of first and second functions");
-        throw cigma::Exception("CompareOp::configure", msg);
+        std::ostringstream stream;
+        stream << "Dimension mismatch for domains of first function (dim "
+               << first->n_dim() << ") and second function (dim "
+               << second->n_dim() << ")" << std::ends;
+        throw cigma::Exception("CompareOp::configure", stream.str());
     }
 
     if (first->n_rank() != second->n_rank())
     {
-        string msg("Rank mismatch for first and second functions");
-        throw cigma::Exception("CompareOp::configure", msg);
+        std::ostringstream stream;
+        stream << "Rank mismatch between first function (rank "
+               << first->n_rank() << ") and second function (rank "
+               << second->n_rank() << ")" << std::ends;
+        throw cigma::Exception("CompareOp::configure", stream.str());
     }
 
+    return;
 }
 
 int CompareOp::run()
@@ -112,6 +166,8 @@
     assert(domain->fe);
     assert(domain->fe->cell);
     assert(domain->fe->quadrature);
+    assert(domain->fe->jxw != 0);
+    assert(domain->fe->basis_tab != 0);
 
     // convenient references
     shared_ptr<MeshPart> mesh = domain->mesh;

Modified: cs/cigma/trunk/src/core_compare_op.h
===================================================================
--- cs/cigma/trunk/src/core_compare_op.h	2008-12-10 02:13:58 UTC (rev 13547)
+++ cs/cigma/trunk/src/core_compare_op.h	2008-12-10 02:13:59 UTC (rev 13548)
@@ -3,7 +3,7 @@
 
 #include <boost/shared_ptr.hpp>
 #include "core_base_op.h"
-#include "core_readers.h"
+#include "core_args.h"
 #include "Function.h"
 #include "Field.h"
 #include "Residuals.h"
@@ -26,11 +26,8 @@
 
 public:
 
-    std::string first_name;
-    std::string second_name;
-
-    FieldInfo first_info;
-    FieldInfo second_info;
+    FunctionInfo first_info;
+    FunctionInfo second_info;
     FieldInfo domain_info;
 
     boost::shared_ptr<Function> first;



More information about the CIG-COMMITS mailing list