From 28627250c608046189307e9935be8c729a639579 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Fri, 11 May 2018 14:55:47 +0200 Subject: [PATCH] CONFIG: update catalyst configuration files - relocated from etc/caseDicts/postProcessing/catalyst/ -> etc/caseDicts/insitu/catalyst/ - adjusted for unified catalyst function object --- .../catalyst/catalyst.cfg} | 2 +- .../insitu/catalyst/printChannels.py | 68 +++++ etc/caseDicts/insitu/catalyst/writeAll.py | 77 ++++++ etc/caseDicts/insitu/catalyst/writeMesh.py | 78 ++++++ etc/caseDicts/insitu/catalyst/writePatches.py | 78 ++++++ .../postProcessing/catalyst/area.cfg | 16 -- .../postProcessing/catalyst/cloud.cfg | 16 -- .../twoSimpleRotors/system/catalyst | 20 +- .../scripts/{overset.py => pressure.py} | 151 ++++++------ .../system/scripts/vorticity.py | 233 ++++++++++++++++++ .../scripts/{writeOverset.py => writeMesh.py} | 9 +- 11 files changed, 631 insertions(+), 117 deletions(-) rename etc/caseDicts/{postProcessing/catalyst/default.cfg => insitu/catalyst/catalyst.cfg} (91%) create mode 100644 etc/caseDicts/insitu/catalyst/printChannels.py create mode 100644 etc/caseDicts/insitu/catalyst/writeAll.py create mode 100644 etc/caseDicts/insitu/catalyst/writeMesh.py create mode 100644 etc/caseDicts/insitu/catalyst/writePatches.py delete mode 100644 etc/caseDicts/postProcessing/catalyst/area.cfg delete mode 100644 etc/caseDicts/postProcessing/catalyst/cloud.cfg rename tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/{overset.py => pressure.py} (52%) create mode 100644 tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/vorticity.py rename tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/{writeOverset.py => writeMesh.py} (91%) diff --git a/etc/caseDicts/postProcessing/catalyst/default.cfg b/etc/caseDicts/insitu/catalyst/catalyst.cfg similarity index 91% rename from etc/caseDicts/postProcessing/catalyst/default.cfg rename to etc/caseDicts/insitu/catalyst/catalyst.cfg index e9ace6b706c..f3defd4b902 100644 --- a/etc/caseDicts/postProcessing/catalyst/default.cfg +++ b/etc/caseDicts/insitu/catalyst/catalyst.cfg @@ -5,7 +5,7 @@ | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ -// Insitu processing of finiteVolume fields with ParaView Catalyst +// Insitu processing with ParaView Catalyst type catalyst; libs ("libcatalystFoam.so"); diff --git a/etc/caseDicts/insitu/catalyst/printChannels.py b/etc/caseDicts/insitu/catalyst/printChannels.py new file mode 100644 index 00000000000..b9f4e61753d --- /dev/null +++ b/etc/caseDicts/insitu/catalyst/printChannels.py @@ -0,0 +1,68 @@ +from paraview.simple import * +from paraview import coprocessing + +# The frequency to output everything +outputfrequency = 1 + +# Simply print out all channel names that our function object is producing + +# ----------------------- CoProcessor definition ----------------------- + +def CreateCoProcessor(): + def _CreatePipeline(coprocessor, datadescription): + class Pipeline: + for i in range(datadescription.GetNumberOfInputDescriptions()): + name = datadescription.GetInputDescriptionName(i) + input = coprocessor.CreateProducer(datadescription, name) + grid = input.GetClientSideObject().GetOutputDataObject(0) + print "Channel <" + name + "> is", grid.GetClassName() + + 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); diff --git a/etc/caseDicts/insitu/catalyst/writeAll.py b/etc/caseDicts/insitu/catalyst/writeAll.py new file mode 100644 index 00000000000..658ae6e5545 --- /dev/null +++ b/etc/caseDicts/insitu/catalyst/writeAll.py @@ -0,0 +1,77 @@ +from paraview.simple import * +from paraview import coprocessing + +# The frequency to output everything +outputfrequency = 5 + +# This is largely identical to the Catalyst allinputsgridwriter.py example +# but only handle vtkMultiBlockDataSet, since that is what we generate + +# ----------------------- CoProcessor definition ----------------------- + +def CreateCoProcessor(): + def _CreatePipeline(coprocessor, datadescription): + class Pipeline: + for i in range(datadescription.GetNumberOfInputDescriptions()): + name = datadescription.GetInputDescriptionName(i) + 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) diff --git a/etc/caseDicts/insitu/catalyst/writeMesh.py b/etc/caseDicts/insitu/catalyst/writeMesh.py new file mode 100644 index 00000000000..a8517e26bbc --- /dev/null +++ b/etc/caseDicts/insitu/catalyst/writeMesh.py @@ -0,0 +1,78 @@ +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) diff --git a/etc/caseDicts/insitu/catalyst/writePatches.py b/etc/caseDicts/insitu/catalyst/writePatches.py new file mode 100644 index 00000000000..404267de18e --- /dev/null +++ b/etc/caseDicts/insitu/catalyst/writePatches.py @@ -0,0 +1,78 @@ +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) diff --git a/etc/caseDicts/postProcessing/catalyst/area.cfg b/etc/caseDicts/postProcessing/catalyst/area.cfg deleted file mode 100644 index 2f6850f9953..00000000000 --- a/etc/caseDicts/postProcessing/catalyst/area.cfg +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -// Insitu processing of finiteArea fields with ParaView Catalyst - -type catalyst::area; -libs ("libcatalystFoam.so"); - -executeControl timeStep; -writeControl none; - -// ************************************************************************* // diff --git a/etc/caseDicts/postProcessing/catalyst/cloud.cfg b/etc/caseDicts/postProcessing/catalyst/cloud.cfg deleted file mode 100644 index d860e901a90..00000000000 --- a/etc/caseDicts/postProcessing/catalyst/cloud.cfg +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -// Insitu processing of lagrangian clouds with ParaView Catalyst - -type catalyst::cloud; -libs ("libcatalystFoam.so"); - -executeControl timeStep; -writeControl none; - -// ************************************************************************* // diff --git a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/catalyst b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/catalyst index 6c744b7a9d5..c70afe7d4e1 100644 --- a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/catalyst +++ b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/catalyst @@ -4,19 +4,23 @@ functions { catalyst { - #includeEtc "caseDicts/postProcessing/catalyst/default.cfg" - - mkdir "<case>/insitu"; - - // Selected fields (words or regex). Must have cellMask for overset! - fields ( cellMask U p ); + #includeEtc "caseDicts/insitu/catalyst/catalyst.cfg" scripts ( - "<system>/scripts/overset.py" - "<system>/scripts/writeOverset.py" + "<system>/scripts/pressure.py" + // "<system>/scripts/vorticity.py" + // "<etc>/caseDicts/insitu/catalyst/writeMesh.py" ); + inputs + { + region + { + // Selected fields (words or regex). + fields ( U p ); + } + } } } diff --git a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/overset.py b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/pressure.py similarity index 52% rename from tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/overset.py rename to tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/pressure.py index 2d95e8f8bf9..571bc31d020 100644 --- a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/overset.py +++ b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/pressure.py @@ -10,11 +10,13 @@ from paraview import coprocessing imageFileNamePadding=4 rescale_lookuptable=False + # ----------------------- CoProcessor definition ----------------------- def CreateCoProcessor(): def _CreatePipeline(coprocessor, datadescription): class Pipeline: + # state file generated using paraview version 5.5.0 # ---------------------------------------------------------------- # setup views used in the visualization @@ -27,16 +29,15 @@ def CreateCoProcessor(): # Create a new 'Render View' renderView1 = CreateView('RenderView') - renderView1.ViewSize = [1077, 763] + renderView1.ViewSize = [1091, 766] renderView1.AxesGrid = 'GridAxes3DActor' - renderView1.CenterOfRotation = [0.00784385809674859, 0.005000000004656613, 0.004999999888241291] + renderView1.CenterOfRotation = [0.009999999776482582, 0.004999999888241291, 0.004999999888241291] renderView1.StereoType = 0 - renderView1.CameraPosition = [0.0072242101003740155, 0.0002877833685303474, 0.035060283710920806] - renderView1.CameraFocalPoint = [0.00868966107678934, 0.004150999005211765, 0.0049322758242629034] - renderView1.CameraViewUp = [0.3542102656908786, 0.9252429122682538, 0.135869941401907] - renderView1.CameraParallelScale = 0.00787069031419879 + renderView1.CameraPosition = [0.009999999776482582, 0.004999999888241291, 0.04819751509880177] + renderView1.CameraFocalPoint = [0.009999999776482582, 0.004999999888241291, 0.004999999888241291] + renderView1.CameraParallelScale = 0.011180339637598877 renderView1.CameraParallelProjection = 1 - renderView1.Background = [0.32, 0.34, 0.43] + renderView1.Background = [0, 0, 0] # init the 'GridAxes3DActor' selected for 'AxesGrid' renderView1.AxesGrid.XTitleFontFile = '' @@ -50,7 +51,7 @@ def CreateCoProcessor(): # and provide it with information such as the filename to use, # how frequently to write the images, etc. coprocessor.RegisterView(renderView1, - filename='insitu/image_%t.png', freq=1, fittoscreen=0, magnification=1, width=1077, height=763, cinema={}) + filename='press_%t.png', freq=1, fittoscreen=0, magnification=1, width=1091, height=766, cinema={}) renderView1.ViewTime = datadescription.GetTime() # ---------------------------------------------------------------- @@ -62,89 +63,101 @@ def CreateCoProcessor(): # setup the data processing pipelines # ---------------------------------------------------------------- - # a producer from a simulation input - input1 = coprocessor.CreateProducer(datadescription, 'mesh') + # create a new 'XML MultiBlock Data Reader' + # create a producer from a simulation input + regionmesh = coprocessor.CreateProducer(datadescription, 'region/mesh') + + # create a new 'Slice' + slice1 = Slice(Input=regionmesh) + slice1.SliceType = 'Plane' + slice1.SliceOffsetValues = [0.0] - # cellMask [0,1] - threshold1 = Threshold(Input=input1) - threshold1.Scalars = ['CELLS', 'cellMask'] - threshold1.ThresholdRange = [0.9, 1.1] + # init the 'Plane' selected for 'SliceType' + slice1.SliceType.Origin = [0.01, 0.005, 0.005] + slice1.SliceType.Normal = [0.0, 0.0, 1.0] # ---------------------------------------------------------------- # setup the visualization in view 'renderView1' # ---------------------------------------------------------------- - # show data from threshold1 - threshold1Display = Show(threshold1, renderView1) - - # get color transfer function/color map for 'cellTypes' - cellTypesLUT = GetColorTransferFunction('cellTypes') - cellTypesLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 1.000244140625, 0.865003, 0.865003, 0.865003, 2.00048828125, 0.705882, 0.0156863, 0.14902] - cellTypesLUT.ScalarRangeInitialized = 1.0 + # show data from slice1 + slice1Display = Show(slice1, renderView1) - # get opacity transfer function/opacity map for 'cellTypes' - cellTypesPWF = GetOpacityTransferFunction('cellTypes') - cellTypesPWF.Points = [0.0, 0.0, 0.5, 0.0, 2.00048828125, 1.0, 0.5, 0.0] - cellTypesPWF.ScalarRangeInitialized = 1 + # get color transfer function/color map for 'p' + pLUT = GetColorTransferFunction('p') + pLUT.RGBPoints = [-0.2227432131767273, 0.231373, 0.298039, 0.752941, 0.0011433586478233337, 0.865003, 0.865003, 0.865003, 0.22502993047237396, 0.705882, 0.0156863, 0.14902] + pLUT.ScalarRangeInitialized = 1.0 # trace defaults for the display properties. - threshold1Display.Representation = 'Surface With Edges' - threshold1Display.ColorArrayName = ['CELLS', 'cellTypes'] - threshold1Display.LookupTable = cellTypesLUT - threshold1Display.OSPRayScaleArray = 'U' - threshold1Display.OSPRayScaleFunction = 'PiecewiseFunction' - threshold1Display.SelectOrientationVectors = 'None' - threshold1Display.ScaleFactor = 0.0019999999552965165 - threshold1Display.SelectScaleArray = 'None' - threshold1Display.GlyphType = 'Arrow' - threshold1Display.GlyphTableIndexArray = 'None' - threshold1Display.GaussianRadius = 9.999999776482583e-05 - threshold1Display.SetScaleArray = ['POINTS', 'U'] - threshold1Display.ScaleTransferFunction = 'PiecewiseFunction' - threshold1Display.OpacityArray = ['POINTS', 'U'] - threshold1Display.OpacityTransferFunction = 'PiecewiseFunction' - threshold1Display.DataAxesGrid = 'GridAxesRepresentation' - threshold1Display.SelectionCellLabelFontFile = '' - threshold1Display.SelectionPointLabelFontFile = '' - threshold1Display.PolarAxes = 'PolarAxesRepresentation' - threshold1Display.ScalarOpacityFunction = cellTypesPWF - threshold1Display.ScalarOpacityUnitDistance = 0.0017065741933059136 + slice1Display.Representation = 'Surface' + slice1Display.ColorArrayName = ['POINTS', 'p'] + slice1Display.LookupTable = pLUT + slice1Display.OSPRayScaleArray = 'U' + slice1Display.OSPRayScaleFunction = 'PiecewiseFunction' + slice1Display.SelectOrientationVectors = 'None' + slice1Display.ScaleFactor = 0.0019999999552965165 + slice1Display.SelectScaleArray = 'None' + slice1Display.GlyphType = 'Arrow' + slice1Display.GlyphTableIndexArray = 'None' + slice1Display.GaussianRadius = 9.999999776482583e-05 + slice1Display.SetScaleArray = ['POINTS', 'U'] + slice1Display.ScaleTransferFunction = 'PiecewiseFunction' + slice1Display.OpacityArray = ['POINTS', 'U'] + slice1Display.OpacityTransferFunction = 'PiecewiseFunction' + slice1Display.DataAxesGrid = 'GridAxesRepresentation' + slice1Display.SelectionCellLabelFontFile = '' + slice1Display.SelectionPointLabelFontFile = '' + slice1Display.PolarAxes = 'PolarAxesRepresentation' # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' - threshold1Display.ScaleTransferFunction.Points = [-0.2505497634410858, 0.0, 0.5, 0.0, 0.3270378112792969, 1.0, 0.5, 0.0] + slice1Display.ScaleTransferFunction.Points = [-0.2436095029115677, 0.0, 0.5, 0.0, 0.2753259241580963, 1.0, 0.5, 0.0] # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' - threshold1Display.OpacityTransferFunction.Points = [-0.2505497634410858, 0.0, 0.5, 0.0, 0.3270378112792969, 1.0, 0.5, 0.0] + slice1Display.OpacityTransferFunction.Points = [-0.2436095029115677, 0.0, 0.5, 0.0, 0.2753259241580963, 1.0, 0.5, 0.0] # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' - threshold1Display.DataAxesGrid.XTitleFontFile = '' - threshold1Display.DataAxesGrid.YTitleFontFile = '' - threshold1Display.DataAxesGrid.ZTitleFontFile = '' - threshold1Display.DataAxesGrid.XLabelFontFile = '' - threshold1Display.DataAxesGrid.YLabelFontFile = '' - threshold1Display.DataAxesGrid.ZLabelFontFile = '' + slice1Display.DataAxesGrid.XTitleFontFile = '' + slice1Display.DataAxesGrid.YTitleFontFile = '' + slice1Display.DataAxesGrid.ZTitleFontFile = '' + slice1Display.DataAxesGrid.XLabelFontFile = '' + slice1Display.DataAxesGrid.YLabelFontFile = '' + slice1Display.DataAxesGrid.ZLabelFontFile = '' # init the 'PolarAxesRepresentation' selected for 'PolarAxes' - threshold1Display.PolarAxes.PolarAxisTitleFontFile = '' - threshold1Display.PolarAxes.PolarAxisLabelFontFile = '' - threshold1Display.PolarAxes.LastRadialAxisTextFontFile = '' - threshold1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + slice1Display.PolarAxes.PolarAxisTitleFontFile = '' + slice1Display.PolarAxes.PolarAxisLabelFontFile = '' + slice1Display.PolarAxes.LastRadialAxisTextFontFile = '' + slice1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' # setup the color legend parameters for each legend in this view - # get color legend/bar for cellTypesLUT in view renderView1 - cellTypesLUTColorBar = GetScalarBar(cellTypesLUT, renderView1) - cellTypesLUTColorBar.Title = 'cellTypes' - cellTypesLUTColorBar.ComponentTitle = '' - cellTypesLUTColorBar.TitleFontFile = '' - cellTypesLUTColorBar.LabelFontFile = '' + # get color legend/bar for pLUT in view renderView1 + pLUTColorBar = GetScalarBar(pLUT, renderView1) + pLUTColorBar.Title = 'p' + pLUTColorBar.ComponentTitle = '' + pLUTColorBar.TitleFontFile = '' + pLUTColorBar.LabelFontFile = '' # set color bar visibility - cellTypesLUTColorBar.Visibility = 1 + pLUTColorBar.Visibility = 1 # show color legend - threshold1Display.SetScalarBarVisibility(renderView1, True) + slice1Display.SetScalarBarVisibility(renderView1, True) + # ---------------------------------------------------------------- + # setup color maps and opacity mapes used in the visualization + # note: the Get..() functions create a new object, if needed + # ---------------------------------------------------------------- + + # get opacity transfer function/opacity map for 'p' + pPWF = GetOpacityTransferFunction('p') + pPWF.Points = [-0.2227432131767273, 0.0, 0.5, 0.0, 0.22502993047237396, 1.0, 0.5, 0.0] + pPWF.ScalarRangeInitialized = 1 + + # ---------------------------------------------------------------- + # finally, restore active source + SetActiveSource(slice1) + # ---------------------------------------------------------------- return Pipeline() class CoProcessor(coprocessing.CoProcessor): @@ -152,8 +165,8 @@ def CreateCoProcessor(): self.Pipeline = _CreatePipeline(self, datadescription) coprocessor = CoProcessor() - # Frequencies at which the coprocessor updates. - freqs = {'mesh': [1, 1, 1]} + # these are the frequencies at which the coprocessor updates. + freqs = {'region/mesh': [1, 1, 1]} coprocessor.SetUpdateFrequencies(freqs) return coprocessor @@ -167,7 +180,7 @@ coprocessor = CreateCoProcessor() #-------------------------------------------------------------- # Enable Live-Visualizaton with ParaView and the update frequency -coprocessor.EnableLiveVisualization(True, 1) +coprocessor.EnableLiveVisualization(False, 1) # ---------------------- Data Selection method ---------------------- diff --git a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/vorticity.py b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/vorticity.py new file mode 100644 index 00000000000..743da938055 --- /dev/null +++ b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/vorticity.py @@ -0,0 +1,233 @@ + +from paraview.simple import * +from paraview import coprocessing + + +#-------------------------------------------------------------- +# Code generated from cpstate.py to create the CoProcessor. +# paraview version 5.5.0 + +#-------------------------------------------------------------- +# Global screenshot output options +imageFileNamePadding=4 +rescale_lookuptable=False + + +# ----------------------- CoProcessor definition ----------------------- + +def CreateCoProcessor(): + def _CreatePipeline(coprocessor, datadescription): + class Pipeline: + # state file generated using paraview version 5.5.0 + + # ---------------------------------------------------------------- + # setup views used in the visualization + # ---------------------------------------------------------------- + + # trace generated using paraview version 5.5.0 + + #### disable automatic camera reset on 'Show' + paraview.simple._DisableFirstRenderCameraReset() + + # Create a new 'Render View' + renderView1 = CreateView('RenderView') + renderView1.ViewSize = [1091, 766] + renderView1.AxesGrid = 'GridAxes3DActor' + renderView1.CenterOfRotation = [0.009999999776482582, 0.004999999888241291, 0.004999999888241291] + renderView1.StereoType = 0 + renderView1.CameraPosition = [0.009999999776482582, 0.004999999888241291, 0.05232050690623429] + renderView1.CameraFocalPoint = [0.009999999776482582, 0.004999999888241291, 0.004999999888241291] + renderView1.CameraParallelScale = 0.01224744844016408 + renderView1.CameraParallelProjection = 1 + renderView1.Background = [0, 0, 0] + + # init the 'GridAxes3DActor' selected for 'AxesGrid' + renderView1.AxesGrid.XTitleFontFile = '' + renderView1.AxesGrid.YTitleFontFile = '' + renderView1.AxesGrid.ZTitleFontFile = '' + renderView1.AxesGrid.XLabelFontFile = '' + renderView1.AxesGrid.YLabelFontFile = '' + renderView1.AxesGrid.ZLabelFontFile = '' + + # register the view with coprocessor + # and provide it with information such as the filename to use, + # how frequently to write the images, etc. + coprocessor.RegisterView(renderView1, + filename='vorticity_%t.png', freq=1, fittoscreen=0, magnification=1, width=1091, height=766, cinema={}) + renderView1.ViewTime = datadescription.GetTime() + + # ---------------------------------------------------------------- + # restore active view + SetActiveView(renderView1) + # ---------------------------------------------------------------- + + # ---------------------------------------------------------------- + # setup the data processing pipelines + # ---------------------------------------------------------------- + + # create a new 'XML MultiBlock Data Reader' + # create a producer from a simulation input + regionmesh = coprocessor.CreateProducer(datadescription, 'region/mesh') + + # create a new 'Slice' + slice1 = Slice(Input=regionmesh) + slice1.SliceType = 'Plane' + slice1.SliceOffsetValues = [0.0] + + # init the 'Plane' selected for 'SliceType' + slice1.SliceType.Origin = [0.01, 0.005, 0.005] + slice1.SliceType.Normal = [0.0, 0.0, 1.0] + + # create a new 'Stream Tracer' + streamTracer1 = StreamTracer(Input=slice1, + SeedType='High Resolution Line Source') + streamTracer1.Vectors = ['POINTS', 'U'] + streamTracer1.MaximumStreamlineLength = 0.019999999552965164 + + # init the 'High Resolution Line Source' selected for 'SeedType' + streamTracer1.SeedType.Point1 = [0.0, 0.0, 0.005] + streamTracer1.SeedType.Point2 = [0.02, 0.01, 0.005] + + # ---------------------------------------------------------------- + # setup the visualization in view 'renderView1' + # ---------------------------------------------------------------- + + # show data from streamTracer1 + streamTracer1Display = Show(streamTracer1, renderView1) + + # get color transfer function/color map for 'Vorticity' + vorticityLUT = GetColorTransferFunction('Vorticity') + vorticityLUT.RGBPoints = [0.0, 0.229806, 0.298718, 0.753683, 37.5, 0.303869, 0.406535, 0.844959, 75.0, 0.383013, 0.509419, 0.917388, 112.5, 0.466667, 0.604563, 0.968155, 150.0, 0.552953, 0.688929, 0.995376, 187.5, 0.639176, 0.7596, 0.998151, 225.0, 0.722193, 0.813953, 0.976575, 262.5, 0.798692, 0.849786, 0.931689, 300.0, 0.865395, 0.86541, 0.865396, 337.5, 0.924128, 0.827385, 0.774508, 375.0, 0.958853, 0.769768, 0.678008, 412.5, 0.969954, 0.694267, 0.579375, 450.0, 0.958003, 0.602842, 0.481776, 487.50000000000006, 0.923945, 0.497309, 0.38797, 525.0, 0.869187, 0.378313, 0.300267, 562.5, 0.795632, 0.241284, 0.220526, 600.0, 0.705673, 0.0155562, 0.150233] + vorticityLUT.ColorSpace = 'Lab' + vorticityLUT.ScalarRangeInitialized = 1.0 + + # trace defaults for the display properties. + streamTracer1Display.Representation = 'Surface' + streamTracer1Display.ColorArrayName = ['POINTS', 'Vorticity'] + streamTracer1Display.LookupTable = vorticityLUT + streamTracer1Display.OSPRayScaleArray = 'AngularVelocity' + streamTracer1Display.OSPRayScaleFunction = 'PiecewiseFunction' + streamTracer1Display.SelectOrientationVectors = 'Normals' + streamTracer1Display.ScaleFactor = 0.001999993808567524 + streamTracer1Display.SelectScaleArray = 'AngularVelocity' + streamTracer1Display.GlyphType = 'Arrow' + streamTracer1Display.GlyphTableIndexArray = 'AngularVelocity' + streamTracer1Display.GaussianRadius = 9.99996904283762e-05 + streamTracer1Display.SetScaleArray = ['POINTS', 'AngularVelocity'] + streamTracer1Display.ScaleTransferFunction = 'PiecewiseFunction' + streamTracer1Display.OpacityArray = ['POINTS', 'AngularVelocity'] + streamTracer1Display.OpacityTransferFunction = 'PiecewiseFunction' + streamTracer1Display.DataAxesGrid = 'GridAxesRepresentation' + streamTracer1Display.SelectionCellLabelFontFile = '' + streamTracer1Display.SelectionPointLabelFontFile = '' + streamTracer1Display.PolarAxes = 'PolarAxesRepresentation' + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + streamTracer1Display.ScaleTransferFunction.Points = [-1.1626180405813291e-11, 0.0, 0.5, 0.0, 1.7840937690112886e-11, 1.0, 0.5, 0.0] + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + streamTracer1Display.OpacityTransferFunction.Points = [-1.1626180405813291e-11, 0.0, 0.5, 0.0, 1.7840937690112886e-11, 1.0, 0.5, 0.0] + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + streamTracer1Display.DataAxesGrid.XTitleFontFile = '' + streamTracer1Display.DataAxesGrid.YTitleFontFile = '' + streamTracer1Display.DataAxesGrid.ZTitleFontFile = '' + streamTracer1Display.DataAxesGrid.XLabelFontFile = '' + streamTracer1Display.DataAxesGrid.YLabelFontFile = '' + streamTracer1Display.DataAxesGrid.ZLabelFontFile = '' + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + streamTracer1Display.PolarAxes.PolarAxisTitleFontFile = '' + streamTracer1Display.PolarAxes.PolarAxisLabelFontFile = '' + streamTracer1Display.PolarAxes.LastRadialAxisTextFontFile = '' + streamTracer1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + + # setup the color legend parameters for each legend in this view + + # get color legend/bar for vorticityLUT in view renderView1 + vorticityLUTColorBar = GetScalarBar(vorticityLUT, renderView1) + vorticityLUTColorBar.Title = 'Vorticity' + vorticityLUTColorBar.ComponentTitle = 'Magnitude' + vorticityLUTColorBar.TitleFontFile = '' + vorticityLUTColorBar.LabelFontFile = '' + + # set color bar visibility + vorticityLUTColorBar.Visibility = 1 + + # show color legend + streamTracer1Display.SetScalarBarVisibility(renderView1, True) + + # ---------------------------------------------------------------- + # setup color maps and opacity mapes used in the visualization + # note: the Get..() functions create a new object, if needed + # ---------------------------------------------------------------- + + # get opacity transfer function/opacity map for 'Vorticity' + vorticityPWF = GetOpacityTransferFunction('Vorticity') + vorticityPWF.Points = [0.0, 0.0, 0.5, 0.0, 600.0, 1.0, 0.5, 0.0] + vorticityPWF.ScalarRangeInitialized = 1 + + # ---------------------------------------------------------------- + # finally, restore active source + SetActiveSource(streamTracer1) + # ---------------------------------------------------------------- + return Pipeline() + + class CoProcessor(coprocessing.CoProcessor): + def CreatePipeline(self, datadescription): + self.Pipeline = _CreatePipeline(self, datadescription) + + coprocessor = CoProcessor() + # these are the frequencies at which the coprocessor updates. + freqs = {'region/mesh': [1, 1, 1]} + coprocessor.SetUpdateFrequencies(freqs) + return coprocessor + + +#-------------------------------------------------------------- +# Global variable 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 and the update frequency +coprocessor.EnableLiveVisualization(True, 1) + +# ---------------------- Data Selection method ---------------------- + +def RequestDataDescription(datadescription): + "Callback to populate the request for current timestep" + global coprocessor + if datadescription.GetForceOutput() == True: + # 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=rescale_lookuptable, + image_quality=0, padding_amount=imageFileNamePadding) + + # Live Visualization, if enabled. + coprocessor.DoLiveVisualization(datadescription, "localhost", 22222) diff --git a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeOverset.py b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeMesh.py similarity index 91% rename from tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeOverset.py rename to tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeMesh.py index ba083271fcb..fa5889ddde3 100644 --- a/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeOverset.py +++ b/tutorials/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/scripts/writeMesh.py @@ -18,13 +18,8 @@ def CreateCoProcessor(): # a producer from a simulation input input1 = coprocessor.CreateProducer(datadescription, 'mesh') - # cellMask [0,1] - threshold1 = Threshold(Input=input1) - threshold1.Scalars = ['CELLS', 'cellMask'] - threshold1.ThresholdRange = [0.9, 1.1] - - writer1 = servermanager.writers.XMLMultiBlockDataWriter(Input=threshold1) - coprocessor.RegisterWriter(writer1, filename='insitu/overset_%t.vtm', freq=1, paddingamount=0) + writer1 = servermanager.writers.XMLMultiBlockDataWriter(Input=input1) + coprocessor.RegisterWriter(writer1, filename='insitu/mesh_%t.vtm', freq=1, paddingamount=0) return Pipeline() -- GitLab