[cig-commits] r9253 - short/3D/PyLith/trunk/libsrc/meshio
brad at geodynamics.org
brad at geodynamics.org
Wed Feb 6 08:48:26 PST 2008
Author: brad
Date: 2008-02-06 08:48:25 -0800 (Wed, 06 Feb 2008)
New Revision: 9253
Modified:
short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc
short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh
Log:
Fixed enforcing 3-D fields for vectors. Added check to make sure vertex and cell headers are written only once.
Modified: short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc 2008-02-06 04:11:37 UTC (rev 9252)
+++ short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc 2008-02-06 16:48:25 UTC (rev 9253)
@@ -25,7 +25,9 @@
pylith::meshio::DataWriterVTK::DataWriterVTK(void) :
_filename("output.vtk"),
_timeFormat("%f"),
- _viewer(0)
+ _viewer(0),
+ _wroteVertexHeader(false),
+ _wroteCellHeader(false)
{ // constructor
} // constructor
@@ -44,7 +46,9 @@
DataWriter(w),
_filename(w._filename),
_timeFormat(w._timeFormat),
- _viewer(0)
+ _viewer(0),
+ _wroteVertexHeader(w._wroteVertexHeader),
+ _wroteCellHeader(w._wroteCellHeader)
{ // copy constructor
} // copy constructor
@@ -95,6 +99,9 @@
err = VTKViewer::writeElements(mesh, label, labelId, _viewer);
if (err)
throw std::runtime_error("Could not write topology.");
+
+ _wroteVertexHeader = false;
+ _wroteCellHeader = false;
} catch (const std::exception& err) {
std::ostringstream msg;
msg << "Error while preparing for writing data to VTK file "
@@ -119,6 +126,8 @@
pylith::meshio::DataWriterVTK::closeTimeStep(void)
{ // closeTimeStep
PetscViewerDestroy(_viewer); _viewer = 0;
+ _wroteVertexHeader = false;
+ _wroteCellHeader = false;
} // closeTimeStep
// ----------------------------------------------------------------------
@@ -143,14 +152,22 @@
labelName = "depth";
}
const ALE::Obj<Mesh::numbering_type>& numbering = mesh->getFactory()->getNumbering(mesh, labelName, 0);
- const int fiberDim = (fieldType != VECTOR_FIELD) ?
- field->getFiberDimension(*mesh->getLabelStratum(labelName, 0)->begin()) : 3;
- // Should only print this once
- err = PetscViewerASCIIPrintf(_viewer, "POINT_DATA %d\n", numbering->getGlobalSize());
- if (err)
- throw std::runtime_error("Could not write VTK point data header.");
- VTKViewer::writeField(field, name, fiberDim, numbering, _viewer, fiberDim);
+ const int fiberDim =
+ field->getFiberDimension(*mesh->getLabelStratum(labelName, 0)->begin());
+ const int enforceDim = (fieldType != VECTOR_FIELD) ? fiberDim : 3;
+
+ if (!_wroteVertexHeader) {
+ err = PetscViewerASCIIPrintf(_viewer, "POINT_DATA %d\n",
+ numbering->getGlobalSize());
+ if (err)
+ throw std::runtime_error("Could not write VTK point data header.");
+ _wroteVertexHeader = true;
+ } // if
+
+ VTKViewer::writeField(field, name, fiberDim, numbering, _viewer,
+ enforceDim);
+
} catch (const std::exception& err) {
std::ostringstream msg;
msg << "Error while writing field '" << name << "' at time "
@@ -186,15 +203,24 @@
labelName = "depth";
}
- const ALE::Obj<Mesh::numbering_type>& numbering = mesh->getFactory()->getNumbering(mesh, labelName, mesh->depth());
- const int fiberDim = (fieldType != VECTOR_FIELD) ?
- field->getFiberDimension(*mesh->getLabelStratum(labelName, mesh->depth())->begin()) : 3;
+ const ALE::Obj<Mesh::numbering_type>& numbering =
+ mesh->getFactory()->getNumbering(mesh, labelName, mesh->depth());
+ const int fiberDim =
+ field->getFiberDimension(*mesh->getLabelStratum(labelName,
+ mesh->depth())->begin());
+ const int enforceDim = (fieldType != VECTOR_FIELD) ? fiberDim : 3;
- // Should only print this once
- err = PetscViewerASCIIPrintf(_viewer, "CELL_DATA %d\n", numbering->getGlobalSize());
- if (err)
- throw std::runtime_error("Could not write VTK point data header.");
- VTKViewer::writeField(field, name, fiberDim, numbering, _viewer, fiberDim);
+ if (!_wroteCellHeader) {
+ err = PetscViewerASCIIPrintf(_viewer, "CELL_DATA %d\n",
+ numbering->getGlobalSize());
+ if (err)
+ throw std::runtime_error("Could not write VTK point data header.");
+ _wroteCellHeader = true;
+ } // if
+
+ VTKViewer::writeField(field, name, fiberDim, numbering, _viewer,
+ enforceDim);
+
} catch (const std::exception& err) {
std::ostringstream msg;
msg << "Error while writing field '" << name << "' at time "
Modified: short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh 2008-02-06 04:11:37 UTC (rev 9252)
+++ short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh 2008-02-06 16:48:25 UTC (rev 9253)
@@ -125,6 +125,9 @@
PetscViewer _viewer; ///< Output file
+ bool _wroteVertexHeader; ///< True if wrote header for vertex data.
+ bool _wroteCellHeader; ///< True if wrote header for cell data
+
}; // DataWriterVTK
#include "DataWriterVTK.icc" // inline methods
More information about the cig-commits
mailing list