[cig-commits] r13752 - cs/cigma/trunk/src
luis at geodynamics.org
luis at geodynamics.org
Wed Dec 17 02:33:08 PST 2008
Author: luis
Date: 2008-12-17 02:33:08 -0800 (Wed, 17 Dec 2008)
New Revision: 13752
Modified:
cs/cigma/trunk/src/Field.cpp
Log:
Improved factory method Field::NewField()
We avoid opening the file multiple times when given a VTK file.
Modified: cs/cigma/trunk/src/Field.cpp
===================================================================
--- cs/cigma/trunk/src/Field.cpp 2008-12-17 10:33:06 UTC (rev 13751)
+++ cs/cigma/trunk/src/Field.cpp 2008-12-17 10:33:08 UTC (rev 13752)
@@ -4,6 +4,10 @@
#include <cassert>
#include <string>
#include <sstream>
+
+#include "io_file_reader.h"
+#include "io_vtk_reader.h"
+
using namespace std;
using namespace cigma;
using boost::shared_ptr;
@@ -14,15 +18,36 @@
shared_ptr<Field> Field::NewField(const FieldInfo& field_info)
{
TRI_LOG_STR("Field::NewField()");
-
shared_ptr<Field> field;
if (field_info)
{
+ TRI_LOG(field_info);
+
field = shared_ptr<Field>(new Field);
- field->dofs = DofHandler::New(field_info.p_field);
- field->mesh = MeshPart::New(field_info.mesh_info);
- field->fe = FE::New(field_info.fe_info);
+
+ if (field_info.p_field.is_vtk_file())
+ {
+ string filename = field_info.p_field.filename();
+ string location = field_info.p_field.location();
+
+ // XXX: move these methods up the hierarchy to FileReader
+ shared_ptr<FileReader> reader = FileReader::New(filename, "r");
+ VtkReader* vtk = static_cast<VtkReader*>(&(*reader));
+
+ field->mesh = vtk->getMesh();
+ field->fe = vtk->getFE();
+ if (location != "")
+ {
+ field->dofs = vtk->getDofs(location.c_str());
+ }
+ }
+ else
+ {
+ field->mesh = MeshPart::New(field_info.mesh_info);
+ field->fe = FE::New(field_info.fe_info);
+ field->dofs = DofHandler::New(field_info.p_field);
+ }
}
return field;
@@ -32,8 +57,6 @@
Field::Field()
{
- //mesh = shared_ptr<MeshPart>(new MeshPart);
- //dofs = shared_ptr<DofHandler>(new DofHandler);
}
Field::~Field()
More information about the CIG-COMMITS
mailing list