SUBMODULE: updates for catalyst

- SIGFPE handling, cmake configuration

CONFIG: adjust for simplified Catalyst channel naming

- no sub-channels, select volField output based in the
  (internal | boundary) dictionary switches instead
This commit is contained in:
Mark Olesen
2018-06-24 15:50:50 +02:00
parent 3d22c5c265
commit d9568a4b56
7 changed files with 15 additions and 166 deletions

View File

@ -4,6 +4,9 @@ from paraview import coprocessing
# The frequency to output everything
outputfrequency = 5
# Padding for files
fileNamePadding = 0
# This is largely identical to the Catalyst allinputsgridwriter.py example
# but only handle vtkMultiBlockDataSet, since that is what we generate
@ -18,7 +21,7 @@ def CreateCoProcessor():
grid = input.GetClientSideObject().GetOutputDataObject(0)
if grid.IsA('vtkMultiBlockDataSet'):
writer = servermanager.writers.XMLMultiBlockDataWriter(Input=input)
coprocessor.RegisterWriter(writer, filename=name+'_%t.vtm', freq=outputfrequency)
coprocessor.RegisterWriter(writer, filename=name+'_%t.vtm', freq=outputfrequency, paddingamount=fileNamePadding)
return Pipeline()

View File

@ -1,78 +0,0 @@
from paraview.simple import *
from paraview import coprocessing
# The frequency to output everything
outputfrequency = 5
# As per writeAll, but only for "/mesh" sub-channels.
# ----------------------- CoProcessor definition -----------------------
def CreateCoProcessor():
def _CreatePipeline(coprocessor, datadescription):
class Pipeline:
for i in range(datadescription.GetNumberOfInputDescriptions()):
name = datadescription.GetInputDescriptionName(i)
if not name.endswith('/mesh'):
continue
input = coprocessor.CreateProducer(datadescription, name)
grid = input.GetClientSideObject().GetOutputDataObject(0)
if grid.IsA('vtkMultiBlockDataSet'):
writer = servermanager.writers.XMLMultiBlockDataWriter(Input=input)
coprocessor.RegisterWriter(writer, filename=name+'_%t.vtm', 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)

View File

@ -1,78 +0,0 @@
from paraview.simple import *
from paraview import coprocessing
# The frequency to output everything
outputfrequency = 5
# As per writeAll, but only for "/patches" sub-channels.
# ----------------------- CoProcessor definition -----------------------
def CreateCoProcessor():
def _CreatePipeline(coprocessor, datadescription):
class Pipeline:
for i in range(datadescription.GetNumberOfInputDescriptions()):
name = datadescription.GetInputDescriptionName(i)
if not name.endswith('/patches'):
continue
input = coprocessor.CreateProducer(datadescription, name)
grid = input.GetClientSideObject().GetOutputDataObject(0)
if grid.IsA('vtkMultiBlockDataSet'):
writer = servermanager.writers.XMLMultiBlockDataWriter(Input=input)
coprocessor.RegisterWriter(writer, filename=name+'_%t.vtm', 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)

View File

@ -8,13 +8,16 @@ catalyst
(
"<system>/scripts/pressure.py"
// "<system>/scripts/vorticity.py"
// "<etc>/caseDicts/insitu/catalyst/writeMesh.py"
// "<etc>/caseDicts/insitu/catalyst/writeAll.py"
);
inputs
{
region
{
// No boundary, otherwise we have funny lines in the slice.
boundary false;
// Selected fields (words or regex).
fields ( U p );
}

View File

@ -65,10 +65,10 @@ def CreateCoProcessor():
# create a new 'XML MultiBlock Data Reader'
# create a producer from a simulation input
regionmesh = coprocessor.CreateProducer(datadescription, 'region/mesh')
region = coprocessor.CreateProducer(datadescription, 'region')
# create a new 'Slice'
slice1 = Slice(Input=regionmesh)
slice1 = Slice(Input=region)
slice1.SliceType = 'Plane'
slice1.SliceOffsetValues = [0.0]
@ -166,7 +166,7 @@ def CreateCoProcessor():
coprocessor = CoProcessor()
# these are the frequencies at which the coprocessor updates.
freqs = {'region/mesh': [1, 1, 1]}
freqs = {'region': [1, 1, 1]}
coprocessor.SetUpdateFrequencies(freqs)
return coprocessor

View File

@ -1,4 +1,3 @@
from paraview.simple import *
from paraview import coprocessing
@ -67,10 +66,10 @@ def CreateCoProcessor():
# create a new 'XML MultiBlock Data Reader'
# create a producer from a simulation input
regionmesh = coprocessor.CreateProducer(datadescription, 'region/mesh')
region = coprocessor.CreateProducer(datadescription, 'region')
# create a new 'Slice'
slice1 = Slice(Input=regionmesh)
slice1 = Slice(Input=region)
slice1.SliceType = 'Plane'
slice1.SliceOffsetValues = [0.0]
@ -179,7 +178,7 @@ def CreateCoProcessor():
coprocessor = CoProcessor()
# these are the frequencies at which the coprocessor updates.
freqs = {'region/mesh': [1, 1, 1]}
freqs = {'region': [1, 1, 1]}
coprocessor.SetUpdateFrequencies(freqs)
return coprocessor