From 3200aecba699c8e59507f03125ec70ace4f71853 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Franck=20P=C3=A9rignon?= <franck.perignon@imag.fr>
Date: Fri, 7 Mar 2014 15:21:09 +0000
Subject: [PATCH] allow xmf output every time step

---
 HySoP/hysop/operator/monitors/printer.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/HySoP/hysop/operator/monitors/printer.py b/HySoP/hysop/operator/monitors/printer.py
index 28dc1b7c8..17aed421f 100644
--- a/HySoP/hysop/operator/monitors/printer.py
+++ b/HySoP/hysop/operator/monitors/printer.py
@@ -25,7 +25,7 @@ class Printer(Monitoring):
     Print field(s) values on a given topo, in HDF5 or VTK format.
     """
     def __init__(self, variables, topo, prefix=None,
-                 frequency=1, formattype=None, task_id=None):
+                 frequency=1, formattype=None, task_id=None, xmfalways=False):
         """
         Create a results printer for given fields, prefix
         prefix (relative path) and an output frequency.
@@ -35,6 +35,8 @@ class Printer(Monitoring):
         @param prefix output file name. Default is None ==> no output.
         Full or relative path.
         @param formattype : output file format, default=vtk.
+        @param xmfalways : true if xmf output must be done every time
+        an hdf5 file is created
         """
         Monitoring.__init__(self, variables, topo, task_id=task_id)
         assert frequency > 0
@@ -86,6 +88,8 @@ class Printer(Monitoring):
             self._get_filename = lambda i: self.prefix + \
                 "_{0:05d}".format(i) + '.h5'
             self.step = self._step_HDF5
+            if xmfalways:
+                self.step = self._step_HDF5_XMF
         elif self.formattype == DATA:
             self._get_filename = lambda i: self.prefix + \
                 "_{0}_{1:05d}.dat".format(self.topo.rank, i)
@@ -117,7 +121,7 @@ class Printer(Monitoring):
             self.step(simulation)
             self._count += 1
 
-    def finalize(self):
+    def createXMFFile(self):
         if self.formattype == HDF5 and self.topo.rank == self.io_rank:
             # Write the xmf file driving all h5 files.
             # Writing only one file
@@ -139,6 +143,9 @@ class Printer(Monitoring):
             f.write(" </Domain>\n")
             f.write("</Xdmf>\n")
             f.close()
+
+    def finalize(self):
+        self.createXMFFile()
         Monitoring.finalize(self)
 
     def _build_vtk_dict(self):
@@ -217,6 +224,10 @@ class Printer(Monitoring):
 
         f.close()
 
+    def _step_HDF5_XMF(self, simu):
+        self._step_HDF5(simu)
+        self.createXMFFile()
+
     def _step_DATA(self, simu):
         f = open(self._get_filename(self._count), 'w')
         shape = self.topo.mesh.resolution
-- 
GitLab