[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