[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