#### import the simple module from the paraview
from paraview.simple import *
import glob, re, os

def CreateCellSelection(ids):
    source = IDSelectionSource()
    source.FieldType = "CELL"
    sids = []
    for i in ids:
        sids.append(0) #proc-id
        sids.append(i) #cell-id
    source.IDs = sids
    return source

path = 'C:\\Users\\John\\Box Sync\\paraview\\'

files = ['SteadyState_out.e', 'FinalCycle_out.e' ]
reader = []

for idx, fl in enumerate(files):
 reader.append(ExodusIIReader(FileName=path+fl))
 reader[idx].GenerateObjectIdCellArray = 1
 reader[idx].GenerateGlobalElementIdArray = 1
 reader[idx].ElementVariables = reader[idx].ElementVariables.Available
 reader[idx].PointVariables = reader[idx].PointVariables.Available
 reader[idx].ElementBlocks = reader[idx].ElementBlocks.Available

temporalShift = []

for idx, r in enumerate(reader):
 temporalShift.append(TemporalShiftScale(Input=r))
 temporalShift[idx].PreShift = -r.TimestepValues[0]

squareDiff = ProgrammableFilter(Input=temporalShift)

script = ""

for var in reader[0].ElementVariables:
 script=script + "output.CellData.append((inputs[0].CellData['" + var + "'] - inputs[1].CellData['" + var + "'])**2 , '" + var + "')\n"

squareDiff.Script=script
squareDiff.UpdatePipeline()

integrateVariables = IntegrateVariables(Input=squareDiff)

selection = CreateCellSelection(ids=[0])
integrateSqrVarOverSpace = PlotSelectionOverTime(Input=integrateVariables, Selection=selection)
integrateSqrVarOverSpace.OnlyReportSelectionStatistics = 0
integrateSqrVarOverSpace.UpdatePipeline()