From fe0560fca02fe4f7e0741c10194288a2b9e875fa Mon Sep 17 00:00:00 2001
From: Andy Bauer <@acbauer>
Date: Thu, 5 Apr 2018 14:49:16 +0200
Subject: [PATCH] ENH: add allinputsgridwriter.py as etc/ resource

---
 etc/allinputsgridwriter.py | 99 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)
 create mode 100644 etc/allinputsgridwriter.py

diff --git a/etc/allinputsgridwriter.py b/etc/allinputsgridwriter.py
new file mode 100644
index 0000000..88cdcdc
--- /dev/null
+++ b/etc/allinputsgridwriter.py
@@ -0,0 +1,99 @@
+from paraview.simple import *
+from paraview import coprocessing
+
+# The frequency to output everything
+outputfrequency = 5
+
+# ----------------------- CoProcessor definition -----------------------
+
+def CreateCoProcessor():
+  def _CreatePipeline(coprocessor, datadescription):
+    class Pipeline:
+      for i in range(datadescription.GetNumberOfInputDescriptions()):
+        inputdescription = datadescription.GetInputDescription(i)
+        name = datadescription.GetInputDescriptionName(i)
+        adaptorinput = coprocessor.CreateProducer(datadescription, name)
+        grid = adaptorinput.GetClientSideObject().GetOutputDataObject(0)
+        extension = None
+        if  grid.IsA('vtkImageData') or grid.IsA('vtkUniformGrid'):
+          writer = servermanager.writers.XMLPImageDataWriter(Input=adaptorinput)
+          extension = '.pvti'
+        elif  grid.IsA('vtkRectilinearGrid'):
+          writer = servermanager.writers.XMLPRectilinearGridWriter(Input=adaptorinput)
+          extension = '.pvtr'
+        elif  grid.IsA('vtkStructuredGrid'):
+          writer = servermanager.writers.XMLPStructuredGridWriter(Input=adaptorinput)
+          extension = '.pvts'
+        elif  grid.IsA('vtkPolyData'):
+          writer = servermanager.writers.XMLPPolyDataWriter(Input=adaptorinput)
+          extension = '.pvtp'
+        elif  grid.IsA('vtkUnstructuredGrid'):
+          writer = servermanager.writers.XMLPUnstructuredGridWriter(Input=adaptorinput)
+          extension = '.pvtu'
+        elif  grid.IsA('vtkUniformGridAMR'):
+          writer = servermanager.writers.XMLHierarchicalBoxDataWriter(Input=adaptorinput)
+          extension = '.vthb'
+        elif  grid.IsA('vtkMultiBlockDataSet'):
+          writer = servermanager.writers.XMLMultiBlockDataWriter(Input=adaptorinput)
+          extension = '.vtm'
+        else:
+          print("Don't know how to create a writer for a ", grid.GetClassName())
+
+        if extension:
+          coprocessor.RegisterWriter(writer, filename='insitu/'+name+'_%t'+extension, freq=outputfrequency)
+
+    return Pipeline()
+
+  class CoProcessor(coprocessing.CoProcessor):
+    def CreatePipeline(self, datadescription):
+      self.Pipeline = _CreatePipeline(self, datadescription)
+
+  return CoProcessor()
+
+#--------------------------------------------------------------
+# Global variables that will hold the pipeline for each timestep
+# Creating the CoProcessor object, doesn't actually create the ParaView pipeline.
+# It will be automatically setup when coprocessor.UpdateProducers() is called the
+# first time.
+coprocessor = CreateCoProcessor()
+
+#--------------------------------------------------------------
+# Enable Live-Visualizaton with ParaView
+coprocessor.EnableLiveVisualization(False)
+
+
+# ---------------------- Data Selection method ----------------------
+
+def RequestDataDescription(datadescription):
+    "Callback to populate the request for current timestep"
+    global coprocessor
+    if datadescription.GetForceOutput() == True or datadescription.GetTimeStep() % outputfrequency == 0:
+        # We are just going to request all fields and meshes from the simulation
+        # code/adaptor.
+        for i in range(datadescription.GetNumberOfInputDescriptions()):
+            datadescription.GetInputDescription(i).AllFieldsOn()
+            datadescription.GetInputDescription(i).GenerateMeshOn()
+        return
+
+    # setup requests for all inputs based on the requirements of the
+    # pipeline.
+    coprocessor.LoadRequestedData(datadescription)
+
+# ------------------------ Processing method ------------------------
+
+def DoCoProcessing(datadescription):
+    "Callback to do co-processing for current timestep"
+    global coprocessor
+
+    # Update the coprocessor by providing it the newly generated simulation data.
+    # If the pipeline hasn't been setup yet, this will setup the pipeline.
+    coprocessor.UpdateProducers(datadescription)
+
+    # Write output data, if appropriate.
+    coprocessor.WriteData(datadescription);
+
+    # Write image capture (Last arg: rescale lookup table), if appropriate.
+    coprocessor.WriteImages(datadescription, rescale_lookuptable=False)
+
+    # Live Visualization, if enabled.
+    coprocessor.DoLiveVisualization(datadescription, "localhost", 22222)
-- 
GitLab