> EquationSystems::allgather() is actually a second step up in
> sophistication from where VTK output is - it gathers geometry data and
> degree of freedom numbering in the case of a distributed mesh.  The
> gathering (and sadly, the decimation of higher-order solutions) of
> vector data happens in EquationSystems::build_vector();

Oh, I see. Well, it would certainly be preferable to have also the
higher order components written. From that point of view, I might be
better for me not to use the existing procedure from ExodusII, but
address the VTK output independently. I'll look into this soon.

In the meantime, below is a patch that fixes two rather serious bugs
in VTK output (unrelated to parallelism), and removes annoying
debugging output leftovers from the original contributor.

The first bug fixed is this one:
http://sourceforge.net/tracker/?func=detail&aid=3140652&group_id=71130&atid=530254
The second one was that the values ranges were printed only in single
precision instead of double, which causes trouble in third-party VTK
readers such as in Paraview.

Roman



Index: src/mesh/vtk_io.C
===================================================================
--- src/mesh/vtk_io.C   (revision 4198)
+++ src/mesh/vtk_io.C   (working copy)
@@ -317,11 +317,11 @@

                                std::string name = sys.variable_name(j);

-                               vtkFloatArray *data = vtkFloatArray::New();
+                               vtkDoubleArray *data = vtkDoubleArray::New();

                                data->SetName(name.c_str());

-                               data->SetNumberOfValues(sys.solution->size());
+                               data->SetNumberOfValues(n_nodes);

                                for(unsigned int k=0;k<n_nodes;++k){

@@ -601,16 +601,12 @@
                * we only use Unstructured grids
                */
          _vtk_grid = vtkUnstructuredGrid::New();
-         vtkXMLPUnstructuredGridWriter* writer= 
vtkXMLPUnstructuredGridWriter::New();
-         libMesh::out<<"get points "<<std::endl;
+         vtkXMLPUnstructuredGridWriter* writer=
vtkXMLPUnstructuredGridWriter::New();
          vtkPoints* pnts = nodes_to_vtk((const MeshBase&)es.get_mesh());
          _vtk_grid->SetPoints(pnts);
        
-         int * types = new int[es.get_mesh().n_active_elem()];
-         libMesh::out<<"get cells"<<std::endl;
+         int * types = new int[es.get_mesh().n_active_elem()];
          vtkCellArray* cells = cells_to_vtk((const MeshBase&)es.get_mesh(), 
types);
-
-         libMesh::out<<"set cells"<<std::endl;
          _vtk_grid->SetCells(types,cells);
        
          // I'd like to write out meshdata, but this requires some coding, in
@@ -618,8 +614,7 @@
          //   const MeshData& md = es.get_mesh_data();
          //   if(es.has_mesh_data())
          //      meshdata_to_vtk(md,_vtk_grid);
-         //   libmesh_assert (soln.size() ==mesh.n_nodes()*names.size());
-         libMesh::out<<"write solution"<<std::endl;
+         //   libmesh_assert (soln.size() ==mesh.n_nodes()*names.size());
          solution_to_vtk(es,_vtk_grid);

 //#ifdef DEBUG

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to