From 65432bfbefa67374955d8ae5ddf0d6a044b09273 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Franck=20P=C3=A9rignon?= <franck.perignon@imag.fr>
Date: Wed, 29 May 2013 14:57:48 +0000
Subject: [PATCH] update printer for parallel output

---
 HySoP/hysop/operator/monitors/printer.py | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/HySoP/hysop/operator/monitors/printer.py b/HySoP/hysop/operator/monitors/printer.py
index 0b7ae2597..96ef3be66 100644
--- a/HySoP/hysop/operator/monitors/printer.py
+++ b/HySoP/hysop/operator/monitors/printer.py
@@ -30,12 +30,12 @@ class Printer(Monitoring):
         Monitoring.__init__(self, fields, frequency, name="Printer")
         ## output file name prefix
         if prefix is None:
-            self.prefix = './out_' + str(main_rank)
+            self.prefix = './out_'
         else:
-            self.prefix = prefix + str(main_rank)
+            self.prefix = prefix
         ## Extension for filename
         if ext is None:
-            self.ext = '.vtk'
+            self.ext = ''
         else:
             self.ext = ext
         self.input = fields
@@ -67,8 +67,10 @@ class Printer(Monitoring):
     def _build_vtk_dict(self):
         """Build a dictionary from fields to VTK image."""
         res = {}
+
         for f in self.variables:
             for df in f.discreteFields.values():
+                #ind = df.topology.mesh.iCompute
                 if f.isVector:
                     for d in xrange(len(df.data)):
                         if len(df.data[d].shape) == 2:
@@ -113,12 +115,22 @@ class Printer(Monitoring):
                     except AttributeError:
                         pass
             # Set output file name
-            filename = self.prefix + '_it_' + str(ite) + self.ext
+            filename = self.prefix + 'iter_' + str(ite)
+            filename += '_' + str(main_rank) + self.ext
             print "Print to file " + filename
             ## VTK output \todo: Need fix in 2D, getting an IOError.
             try:
-                orig = self.variables[0].discreteFields.values()[0].topology.mesh.global_start
-                evtk.imageToVTK(filename, origin=(orig[0], orig[1], orig[2]), pointData=self._build_vtk_dict())
+                #orig = self.variables[0].discreteFields.values()[0].topology.mesh.global_start
+                topo = self.variables[0].discreteFields.keys()[0]
+                orig = tuple([topo.mesh.origin[i]
+                              for i in xrange(topo.mesh.dim)])
+                coords = topo.mesh.coords
+                ind = topo.mesh.local_start
+                orig = tuple([topo.mesh.coords[i].flatten()[ind[i]]
+                              for i in xrange(topo.mesh.dim)])
+                spacing = tuple(topo.mesh.space_step)
+                evtk.imageToVTK(filename, origin=orig, spacing=spacing,
+                                pointData=self._build_vtk_dict()))
             except IOError:
                 if self.variables[0].domain.dimension == 2:
                     ## Standard output
-- 
GitLab