mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
117 lines
4.7 KiB
Python
117 lines
4.7 KiB
Python
import sys
|
|
import os
|
|
import paraview
|
|
import paraview.simple as pvsimple
|
|
|
|
paraview.servermanager.misc.GlobalMapperProperties.GlobalImmediateModeRendering = 1
|
|
|
|
# trying to import the library where I can specify the global and subcontrollers
|
|
import vtkParallelCorePython
|
|
|
|
paraview.options.batch = True # this may not be necessary
|
|
paraview.simple._DisableFirstRenderCameraReset()
|
|
|
|
def CreateTimeCompartments(globalController, timeCompartmentSize):
|
|
if globalController.GetNumberOfProcesses() == 1:
|
|
print 'single process'
|
|
return
|
|
elif globalController.GetNumberOfProcesses() % timeCompartmentSize != 0:
|
|
print 'number of processes must be an integer multiple of time compartment size'
|
|
return
|
|
elif timeCompartmentSize == globalController.GetNumberOfProcesses():
|
|
return globalController
|
|
|
|
gid = globalController.GetLocalProcessId()
|
|
timeCompartmentGroupId = int (gid / timeCompartmentSize )
|
|
newController = globalController.PartitionController(timeCompartmentGroupId, gid % timeCompartmentSize)
|
|
# must unregister if the reference count is greater than 1
|
|
if newController.GetReferenceCount() > 1:
|
|
newController.UnRegister(None)
|
|
|
|
#print gid, ' of global comm is ', newController.GetLocalProcessId()
|
|
globalController.SetGlobalController(newController)
|
|
return newController
|
|
|
|
def CheckReader(reader):
|
|
if hasattr(reader, "FileName") == False:
|
|
print "ERROR: Don't know how to set file name for ", reader.SMProxy.GetXMLName()
|
|
sys.exit(-1)
|
|
|
|
if hasattr(reader, "TimestepValues") == False:
|
|
print "ERROR: ", reader.SMProxy.GetXMLName(), " doesn't have time information"
|
|
sys.exit(-1)
|
|
|
|
def CreateControllers(timeCompartmentSize):
|
|
pm = paraview.servermanager.vtkProcessModule.GetProcessModule()
|
|
globalController = pm.GetGlobalController()
|
|
if timeCompartmentSize > globalController.GetNumberOfProcesses():
|
|
timeCompartmentSize = globalController.GetNumberOfProcesses()
|
|
|
|
temporalController = CreateTimeCompartments(globalController, timeCompartmentSize)
|
|
return globalController, temporalController, timeCompartmentSize
|
|
|
|
def WriteImages(currentTimeStep, currentTime, views):
|
|
for view in views:
|
|
filename = view.tpFileName.replace("%t", str(currentTimeStep))
|
|
view.ViewTime = currentTime
|
|
pvsimple.WriteImage(filename, view, Magnification=view.tpMagnification)
|
|
|
|
def WriteFiles(currentTimeStep, currentTime, writers):
|
|
for writer in writers:
|
|
originalfilename = writer.FileName
|
|
fname = originalfilename.replace("%t", str(currentTimeStep))
|
|
writer.FileName = fname
|
|
writer.UpdatePipeline(currentTime)
|
|
writer.FileName = originalfilename
|
|
|
|
def IterateOverTimeSteps(globalController, timeCompartmentSize, timeSteps, writers, views):
|
|
numProcs = globalController.GetNumberOfProcesses()
|
|
numTimeCompartments = numProcs/timeCompartmentSize
|
|
tpp = len(timeSteps)/numTimeCompartments
|
|
remainder = len(timeSteps)%numTimeCompartments
|
|
timeCompartmentIndex = int(globalController.GetLocalProcessId()/timeCompartmentSize)
|
|
myStartTimeStep = tpp*timeCompartmentIndex
|
|
myEndTimeStep = myStartTimeStep+tpp
|
|
if timeCompartmentIndex < remainder:
|
|
myStartTimeStep = myStartTimeStep+timeCompartmentIndex
|
|
myEndTimeStep = myStartTimeStep+tpp+1
|
|
else:
|
|
myStartTimeStep = myStartTimeStep+remainder
|
|
myEndTimeStep = myStartTimeStep+tpp
|
|
|
|
for currentTimeStep in range(myStartTimeStep,myEndTimeStep):
|
|
#print globalController.GetLocalProcessId(), " is working on ", currentTimeStep
|
|
WriteImages(currentTimeStep, timeSteps[currentTimeStep], views)
|
|
WriteFiles(currentTimeStep, timeSteps[currentTimeStep], writers)
|
|
|
|
def CreateReader(ctor, fileInfo, **kwargs):
|
|
"Creates a reader, checks if it can be used, and sets the filenames"
|
|
import glob
|
|
files = glob.glob(fileInfo)
|
|
files.sort() # assume there is a logical ordering of the filenames that corresponds to time ordering
|
|
reader = ctor(FileName=files)
|
|
CheckReader(reader)
|
|
if kwargs:
|
|
pvsimple.SetProperties(reader, **kwargs)
|
|
return reader
|
|
|
|
def CreateWriter(ctor, filename, tp_writers):
|
|
writer = ctor()
|
|
return RegisterWriter(writer, filename, tp_writers)
|
|
|
|
def RegisterWriter(writer, filename, tp_writers):
|
|
writer.FileName = filename
|
|
tp_writers.append(writer)
|
|
return writer
|
|
|
|
def CreateView(proxy_ctor, filename, magnification, width, height, tp_views):
|
|
view = proxy_ctor()
|
|
return RegisterView(view, filename, magnification, width, height, tp_views)
|
|
|
|
def RegisterView(view, filename, magnification, width, height, tp_views):
|
|
view.add_attribute("tpFileName", filename)
|
|
view.add_attribute("tpMagnification", magnification)
|
|
tp_views.append(view)
|
|
view.ViewSize = [width, height]
|
|
return view
|