Пример #1
0
    def xyplot_history(self, s, x, y):
        """
        Display curves of theoretical and computed results in a new viewport
        x='Reaction force: RF1 at Node 58 in NSET SET-NODE-BOTTOM'
        y='Spatial displacement: U1 at Node 574 in NSET SET-NODE-MIDDLE'

        """
        sName = self.myOdbDat.steps.keys()[s]

        x1 = xyPlot.XYDataFromHistory(
            odb=self.myOdbDat,
            outputVariableName=x,
            steps=(sName, ),
        )

        y1 = xyPlot.XYDataFromHistory(
            odb=self.myOdbDat,
            outputVariableName=y,
            steps=(sName, ),
        )

        xy1 = xyPlot.combine(x1, y1)
        # xy3.setValues(sourceDescription='combine ( "XYData-strain","XYData-stress" )')
        # session.xyDataObjects.changeKey(xy3.name, 'XYData-stress-strain')

        c1 = session.Curve(xyData=xy1)
        self.chart.setValues(curvesToPlot=(c1, ), )
        self.myVp.setValues(displayedObject=self.xyp)
        chartName = self.xyp.charts.keys()[0]
        self.chart = self.xyp.charts[chartName]
        self.chart.axes1[0].labelStyle.setValues(
            font='-*-verdana-medium-r-normal-*-*-240-*-*-p-*-*-*')
        self.chart.axes1[0].titleStyle.setValues(
            font='-*-arial-medium-r-normal-*-*-240-*-*-p-*-*-*')
        self.chart.axes2[0].titleStyle.setValues(
            font='-*-arial-medium-r-normal-*-*-240-*-*-p-*-*-*')
        self.chart.axes2[0].labelStyle.setValues(
            font='-*-verdana-medium-r-normal-*-*-240-*-*-p-*-*-*')

        #session.printOptions.setValues(vpDecorations=OFF, reduceColors=False)
        path_filename = '%s_XYplot_step-%s_x-%s_y-%s.png' % \
            (self.myOdbDat.name.replace('.odb',''), sName, x.split(':')[1].split(' ')[1], y.split(':')[1].split(' ')[1] )
        print(path_filename)
        # fname = self.myOdbDat.name.replace('.odb','')+'_XYplot_step-'+sName+'_'+x.split(':')[1].split(' ')[1]+'_'+y.split(':')[1].split(' ')[1]+'.png'
        #session.printToFile(fileName=fname, format=PNG, canvasObjects=(self.myVp, ))
        self.myVp.setValues(height=250, width=350)
        self.simple_png_save(path_filename)

        path_filename = path_filename.replace('png', 'avi')
        session.animationController.setValues(animationType=TIME_HISTORY,
                                              viewports=(self.myVp.name, ))
        session.animationController.animationOptions.setValues(
            xyShowSymbol=True, xySymbolSize=LARGE)
        session.animationController.play(duration=UNLIMITED)
        self.simple_avi_save(path_filename)
Пример #2
0
def xyUcolTop(modelName, column):
    '''
	Prints U2 at top of removed column in APM.

	modelName     = name of odb
	column      = name of column that is removed in APM
	printFormat = TIFF, PS, EPS, PNG, SVG
	stepName    = name of a step that exist in the model
	'''

    #Open ODB
    odb = func.open_odb(modelName)

    #Find correct node number and name of column
    nodeSet = odb.rootAssembly.instances['FRAME-1'].nodeSets['COLTOP']
    nodeNr = nodeSet.nodes[0].label
    u1Name ='Spatial displacement: U1 PI: FRAME-1 Node '+str(nodeNr)+\
     ' in NSET COLTOP'
    u2Name ='Spatial displacement: U2 PI: FRAME-1 Node '+str(nodeNr)+\
     ' in NSET COLTOP'
    u3Name ='Spatial displacement: U3 PI: FRAME-1 Node '+str(nodeNr)+\
     ' in NSET COLTOP'

    #Create XY-curve
    xyU1colTop = xyPlot.XYDataFromHistory(odb=odb,
                                          outputVariableName=u1Name,
                                          suppressQuery=True,
                                          name='U1colTop')
    xyU2colTop = xyPlot.XYDataFromHistory(odb=odb,
                                          outputVariableName=u2Name,
                                          suppressQuery=True,
                                          name='U2colTop')
    xyU3colTop = xyPlot.XYDataFromHistory(odb=odb,
                                          outputVariableName=u3Name,
                                          suppressQuery=True,
                                          name='U3colTop')

    #Plot
    func.XYplot(modelName,
                plotName='U1colTop',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU1colTop)
    func.XYplot(modelName,
                plotName='U2colTop',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU2colTop)
    func.XYplot(modelName,
                plotName='U3colTop',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU3colTop)
Пример #3
0
 def xplot_history(self, s, x):
     """plots the historys based on a list
     x = 'Reaction force: RF1 at Node 58 in NSET SET-NODE-BOTTOM'
     
     Building the input from info from the odb
     
     
     """
     sName = self.myOdbDat.steps.keys()[s]
     xy1 = xyPlot.XYDataFromHistory(
         odb=self.myOdbDat,
         outputVariableName=x,
         steps=(sName, ),
     )
     xy1 = butterworthFilter(xyData=xy1, cutoffFrequency=0.1)
     c1 = session.Curve(xyData=xy1)
     self.chart.setValues(curvesToPlot=(c1, ), )
     self.myVp.setValues(displayedObject=self.xyp)
     chartName = self.xyp.charts.keys()[0]
     self.chart = self.xyp.charts[chartName]
     path_filename = '%s_Xplot_step-%s_x-%s.png' % \
         (self.myOdbDat.name.replace('.odb',''), sName, x.split(':')[1].split(' ')[1])
     print(path_filename)
     # fname = self.myOdbDat.name.replace('.odb','')+'_Xplot_step-'+sName+'_'+x.split(':')[1].split(' ')[1]+'.png'
     #session.printToFile(fileName=fname, format=PNG, canvasObjects=(self.myVp, ))
     self.myVp.setValues(height=250, width=350)
     try:
         session.printToFile(path_filename, PNG, (self.myVp, ))
         print('%s saved' % path_filename)
     except:
         print('failed to save %s' % path_filename)
Пример #4
0
def viewPlot(plot):
    import section
    import regionToolset
    import displayGroupMdbToolset as dgm
    import part
    import material
    import assembly
    import step
    import interaction
    import load
    import mesh
    import optimization
    import job
    import sketch
    import visualization
    import xyPlot
    import displayGroupOdbToolset as dgo
    import connectorBehavior
    odb = session.odbs['E:/Abaqus/za duze/explosive_3D_DT_Air_H30_H03-ALE.odb']
    xy1 = xyPlot.XYDataFromHistory(odb=odb,
                                   outputVariableName=plot,
                                   suppressQuery=True,
                                   __linkedVpName__='Viewport: 1')
    c1 = session.Curve(xyData=xy1)
    xyp = session.xyPlots['XYPlot-1']
    chartName = xyp.charts.keys()[0]
    chart = xyp.charts[chartName]
    chart.setValues(curvesToPlot=(c1, ), )
    session.viewports['Viewport: 1'].setValues(displayedObject=xyp)
Пример #5
0
def xyCenterU2_colBaseR2(modelName, x, z):
    odb = func.open_odb(modelName)

    #=========== R2 at column base  ============#
    xyR2 = xyR2colBase(modelName, x, z)

    #=========== U2 at center slab  ============#
    xyU2 = xyPlot.XYDataFromHistory(
        odb=odb,
        outputVariableName=
        'Spatial displacement: U2 PI: SLAB-1 Node 25 in NSET CENTERSLAB',
    )
    func.XYplot(modelName,
                plotName='U2centerSlab',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU2)

    #=========== Force-Displacement  ============#
    xyRD = combine(-xyU2, xyR2)
    func.XYplot(modelName,
                plotName='forceDisp',
                xHead='Displacement [mm]',
                yHead='Force [N]',
                xyDat=xyRD)
Пример #6
0
def viewPlot2(plot, odbName):
    import section
    import regionToolset
    import displayGroupMdbToolset as dgm
    import part
    import material
    import assembly
    import step
    import interaction
    import load
    import mesh
    import optimization
    import job
    import sketch
    import visualization
    import xyPlot
    import displayGroupOdbToolset as dgo
    import connectorBehavior
    o7 = session.odbs[odbName]
    session.viewports['Viewport: 1'].setValues(displayedObject=o7)
    odb = session.odbs[odbName]
    xy1 = xyPlot.XYDataFromHistory(odb=odb,
                                   outputVariableName=plot,
                                   suppressQuery=True,
                                   __linkedVpName__='Viewport: 1')
    c1 = session.Curve(xyData=xy1)
    xyp = session.XYPlot('XYPlot-1')
    chartName = xyp.charts.keys()[0]
    chart = xyp.charts[chartName]
    chart.setValues(curvesToPlot=(c1, ), )
    session.viewports['Viewport: 1'].setValues(displayedObject=xyp)
    session.mdbData.summary()
Пример #7
0
def xyR2colBase(modelName, x, z):

    odb = func.open_odb(modelName)

    steps = tuple(odb.steps.keys())
    lst = []

    nodeLst = []
    for node in odb.rootAssembly.instances['FRAME-1'].nodeSets['COLBOT'].nodes:
        nodeLst.append(node.label)

    for nodeNr in nodeLst:
        varName='Reaction force: RF2 PI: FRAME-1 Node '+str(nodeNr)+\
         ' in NSET COLBOT'
        lst.append(
            xyPlot.XYDataFromHistory(
                odb=odb,
                outputVariableName=varName,
                steps=steps,
            ))

    tpl = tuple(lst)
    xyR2 = sum(tpl)

    func.XYplot(modelName,
                plotName='R2colBase',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR2)

    return xyR2
Пример #8
0
def Eigenvalues():
    import section
    import regionToolset
    import displayGroupMdbToolset as dgm
    import part
    import material
    import assembly
    import step
    import interaction
    import load
    import mesh
    import optimization
    import job
    import sketch
    import visualization
    import xyPlot
    import displayGroupOdbToolset as dgo
    import connectorBehavior
    odb = session.odbs['C:/temp/Job-2.odb']
    xy1 = xyPlot.XYDataFromHistory(odb=odb, 
        outputVariableName='Eigenvalue: EIGVAL for Whole Model', 
        suppressQuery=True, __linkedVpName__='Viewport: 1')
    c1 = session.Curve(xyData=xy1)
    xyp = session.xyPlots['XYPlot-1']
    chartName = xyp.charts.keys()[0]
    chart = xyp.charts[chartName]
    chart.setValues(curvesToPlot=(c1, ), )
    session.viewports['Viewport: 1'].setValues(displayedObject=xyp)
Пример #9
0
def xyForceDisp(modelName, x, z):
    odb = func.open_odb(modelName)

    #=========== R2 at column base  ============#
    #Create xy data for each col base
    alph = map(chr, range(65, 65 + x))  #Start at 97 for lower case letters
    numb = map(str, range(1, z + 1))
    count = 0
    lst = []
    for a in alph:
        for n in numb:
            count = count + 1
            inst = 'COLUMN_' + a + n + "-1"
            name = 'Reaction force: RF2 PI: ' + inst + ' Node 1'
            lst.append(
                xyPlot.XYDataFromHistory(odb=odb, outputVariableName=name))
    tpl = tuple(lst)
    #Compine all to one xyData
    xyR2 = sum(tpl)
    #Plot
    func.XYplot(modelName,
                plotName='R2colBase',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR2)

    #=========== U2 at center slab  ============#

    xyU2 = xyPlot.XYDataFromHistory(
        odb=odb,
        outputVariableName=
        'Spatial displacement: U2 PI: SLAB_A1-1 Node 61 in NSET CENTERSLAB',
        name='xyU2')
    func.XYplot(modelName,
                plotName='U2centerSlab',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU2)

    #=========== Force-Displacement  ============#
    xyRD = combine(-xyU2, xyR2)
    func.XYplot(modelName,
                plotName='forceDisp',
                xHead='Displacement [mm]',
                yHead='Force [N]',
                xyDat=xyRD)
Пример #10
0
def xyEnergyPlot(modelName):
	'''
	Prints External work, internal energy and kinetic energy for 
	whole model

	modelName     = name of odb
	'''

	#Open ODB
	odb = open_odb(modelName)

	#Internal Work
	xyIW = xyPlot.XYDataFromHistory(odb=odb, 
		outputVariableName='Internal energy: ALLIE for Whole Model', 
		suppressQuery=True, name='xyIW')
	XYplot(modelName, plotName='InternalWork',
		xHead='Time [s]', yHead='Work [mJ]', xyDat=xyIW)

	#Kinetic Energy
	xyKE = xyPlot.XYDataFromHistory(odb=odb, 
		outputVariableName='Kinetic energy: ALLKE for Whole Model', 
		suppressQuery=True, name='xyKE')
	XYplot(modelName, plotName='KineticEnergy',
		xHead='Time [s]', yHead='Work [mJ]', xyDat=xyKE)
Пример #11
0
def xyColBaseR2(modelName, x, z):
    odb = func.open_odb(modelName)

    #=========== Get xy data for each colBot  ============#
    alph = map(chr, range(65, 65 + x))  #Start at 97 for lower case letters
    numb = map(str, range(1, z + 1))
    count = 0
    lst = []
    for a in alph:
        for n in numb:
            count = count + 1
            inst = 'COLUMN_' + a + n + "-1"
            name = 'Reaction force: RF2 PI: ' + inst + ' Node 1'
            lst.append(
                xyPlot.XYDataFromHistory(odb=odb,
                                         name='R2colBot-' + a + n,
                                         outputVariableName=name))

    #=========== Individual columns  ============#
    for col in lst:
        func.XYplot(
            modelName,
            plotName=col.name[1:],  # "1:"" to not include "_" added by abaqus
            xHead='Time [s]',
            yHead='Force [N]',
            xyDat=col)

    #=========== Total force  ============#
    tpl = tuple(lst)
    #Compine all to one xyData
    xyR2 = sum(tpl)
    #Plot
    func.XYplot(modelName,
                plotName='R2colBot',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR2)
    lst = [[model + 'conWep', model + 'incidentWave'] for model in modelList]
    jobLst = []
    map(jobLst.extend, lst)

    #Itterate over jobs
    #RF1
    for job in jobLst:
        odb = func.open_odb(job)
        #Create names of history outputs
        xyNames = {}
        for name in names:
            xyNames[name] = 'Reaction force: RF1 PI: ' + name + ' Node 1'
        #Get xy data
        xyDic = {}
        for name, xyName in xyNames.iteritems():
            xyDic[name] = xyPlot.XYDataFromHistory(odb=odb,
                                                   outputVariableName=xyName)
        #Print xy data
        for name, xyDat in xyDic.iteritems():
            func.XYplot(modelName=job,
                        plotName='RF1-' + name.lower(),
                        xHead='Time [s]',
                        yHead='Force [N]',
                        xyDat=xyDat)
    #RF3
    for job in jobLst:
        odb = func.open_odb(job)
        #Create names of history outputs
        xyNames = {}
        for name in names:
            xyNames[name] = 'Reaction force: RF3 PI: ' + name + ' Node 1'
        #Get xy data
Пример #13
0
# PLotting
xyp = session.XYPlot(name='XYPlot-1')
## can be run multiple times but the line >>>session.xyPlots['XYPlot-1'] , can only be run once >>>ession.XYPlot('XYPlot-1')
chartName = xyp.charts.keys()[0]
chart = xyp.charts[chartName]
chart.legend.setValues(show=False)
chart.legend.titleStyle.setValues(
    font='-*-verdana-medium-r-normal-*-*-240-*-*-p-*-*-*')
chart.gridArea.style.setValues(fill=False)
xyp.title.style.setValues(font='-*-arial-medium-r-normal-*-*-240-*-*-p-*-*-*')

x = 'Strain energy: ALLSE for Whole Model'
sName = myOdb.steps.keys()[s]
xy1 = xyPlot.XYDataFromHistory(
    odb=myOdb,
    outputVariableName=x,
    steps=(sName, ),
)
c1 = session.Curve(xyData=xy1)
chart.setValues(curvesToPlot=(c1, ), )
myViewport.setValues(displayedObject=xyp)
chartName = xyp.charts.keys()[0]
chart = xyp.charts[chartName]
path_filename = '%s_Xplot_step-%s_x-%s' % \
    (myOdb.name.replace('.odb',''), sName, x.split(':')[1].split(' ')[1])
try:
    myViewport.view.fitView()
    session.printToFile(path_filename + '.png', PNG, (myViewport, ))

    myViewport.view.fitView()
    session.animationController.setValues(
Пример #14
0
#for i_num in range(len(aa)):
del session.xyDataObjects[aa[i_num]]  
######################################################################################

######################################################################################
#RF1のデータ取り出し
# RF1, RF2, U1, U2中本君頑張ってください。
xy_tuple_load=[]
kk=step1.historyRegions.keys()
for tt in range(len(kk)):
    if "Node" in kk[tt]:
        if "R-BOBAN-1" in kk[tt]:
            new_kk=kk[tt].replace("Node ","").replace("."," Node ")
            try:
                xy = xyPlot.XYDataFromHistory(odb=odb, 
                    outputVariableName='Reaction force: RF1 PI: '+ str(new_kk), 
                    steps=('Step-1', 'Step-2', ),
                    suppressQuery=True) 
            except XypError:
                print("e")
            else:
                xy_tuple_load.append(xy) 

xy_sum = sum(xy_tuple_load)
session.XYData(name='load', objectToCopy=xy_sum ) 
#↓ここからはXYデータをテキストデータで出力するコード コピペで大丈夫
aa=session.xyDataObjects.keys()
aa_temp=[s for s in aa if "temp" in s]
for te_num in range(len(aa_temp)):
    del session.xyDataObjects[aa_temp[te_num]]
##csvファイルへ保存
aa=session.xyDataObjects.keys()
Пример #15
0
def xyShell(modelName):
    '''
	Prints xy data for displacment at mid col, forces at top
	and force-displacemnt
	'''

    #Open ODB
    odb = func.open_odb(modelName)

    #=========== Displament at mid col  ============#

    #Get node numbers
    sideNodeNr=odb.rootAssembly.instances['PART-1-1'].\
     nodeSets['MID-SIDE'].nodes[0].label
    # backNodeNr=odb.rootAssembly.instances['PART-1-1'].\
    # 	nodeSets['MID-BACK'].nodes[0].label
    # frontNodeNr=odb.rootAssembly.instances['PART-1-1'].\
    # 	nodeSets['MID-FRONT'].nodes[0].label

    #Create output names
    sideName= 'Spatial displacement: U1 PI: PART-1-1 Node '+str(sideNodeNr)+\
     ' in NSET MID-SIDE'
    # backName= 'Spatial displacement: U1 PI: PART-1-1 Node '+str(backNodeNr)+\
    # 	' in NSET MID-BACK'
    # frontName='Spatial displacement: U1 PI: PART-1-1 Node '+str(frontNodeNr)+\
    # 	' in NSET MID-FRONT'

    #Get xy data
    xyU1side = xyPlot.XYDataFromHistory(odb=odb,
                                        outputVariableName=sideName,
                                        name='U1midSide')
    # xyU1back = xyPlot.XYDataFromHistory(odb=odb,
    # 	outputVariableName=backName, name='U1midBack')
    # xyU1front = xyPlot.XYDataFromHistory(odb=odb,
    # 	outputVariableName=frontName, name='U1midFront')

    #Print to file
    func.XYplot(modelName,
                plotName='U1midSide',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU1side)
    # func.XYplot(modelName, plotName = 'U1midBack',
    # 	xHead='Time [s]', yHead='Displacement [mm]',
    # 	xyDat= xyU1back)
    # func.XYplot(modelName, plotName = 'U1midFront',
    # 	xHead='Time [s]', yHead='Displacement [mm]',
    # 	xyDat= xyU1front)

    #=========== R2 at top and bot  ============#
    #Get node numbers
    topNodeNr = []
    for nodes in odb.rootAssembly.instances['PART-1-1'].nodeSets['TOP'].nodes:
        topNodeNr.append(nodes.label)
    botNodeNr = []
    for nodes in odb.rootAssembly.instances['PART-1-1'].nodeSets['BOT'].nodes:
        botNodeNr.append(nodes.label)

    #Create output names
    topNames = []
    for nr in topNodeNr:
        topNames.append('Reaction force: RF1 PI: PART-1-1 Node ' + str(nr) +
                        ' in NSET TOP')
    botNames = []
    for nr in botNodeNr:
        botNames.append('Reaction force: RF1 PI: PART-1-1 Node ' + str(nr) +
                        ' in NSET BOT')

    #Get xy data
    xyTopLst = []
    for name in topNames:
        xyTopLst.append(
            xyPlot.XYDataFromHistory(odb=odb, outputVariableName=name))
    xyTopTup = tuple(xyTopLst)
    xyBotLst = []
    for name in botNames:
        xyBotLst.append(
            xyPlot.XYDataFromHistory(odb=odb, outputVariableName=name))
    xyBotTup = tuple(xyBotLst)

    xyR1Top = sum(xyTopTup)
    xyR1Bot = sum(xyBotTup)
    xyR1Tot = sum(xyR1Top, xyR1Bot)

    #Print to file
    func.XYplot(modelName,
                plotName='R1top',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR1Top)
    func.XYplot(modelName,
                plotName='R1bot',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR1Bot)
    func.XYplot(modelName,
                plotName='R1',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR1Tot)

    #=========== Force Displacement  ============#
    xyRU = combine(xyU1side, -xyR1Tot)
    func.XYplot(modelName,
                plotName='forceDisp',
                xHead='Displacment [mm]',
                yHead='Force [N]',
                xyDat=xyRU)
Пример #16
0
def xyBeam(modelName):

    #Open ODB
    odb = func.open_odb(modelName)

    #=========== Displacemnet  ============#
    #Get node numbers
    nodeNr = odb.rootAssembly.instances['COLUMN-1'].\
     nodeSets['COL-MID'].nodes[0].label

    #Create names
    name = 'Spatial displacement: U1 PI: COLUMN-1 Node '+\
     str(nodeNr)+' in NSET COL-MID'

    #Get xy data
    xyU1mid = xyPlot.XYDataFromHistory(odb=odb, outputVariableName=name)

    func.XYplot(modelName,
                plotName='U1mid',
                xHead='Time [s]',
                yHead='Displacement [mm]',
                xyDat=xyU1mid)

    #=========== Reaction Force  ============#
    #Get node numbers
    topNodeNr = odb.rootAssembly.instances['COLUMN-1'].\
     nodeSets['COL-TOP'].nodes[0].label
    baseNodeNr = odb.rootAssembly.instances['COLUMN-1'].\
     nodeSets['COL-BASE'].nodes[0].label

    #Create names
    topName = 'Reaction force: RF1 PI: COLUMN-1 Node '+\
     str(topNodeNr)+' in NSET COL-TOP'
    baseName = 'Reaction force: RF1 PI: COLUMN-1 Node '+\
     str(baseNodeNr)+' in NSET COL-BASE'

    #Get xy data
    xyR1top = xyPlot.XYDataFromHistory(odb=odb, outputVariableName=topName)
    xyR1base = xyPlot.XYDataFromHistory(odb=odb, outputVariableName=baseName)

    xyR1tot = sum(xyR1top, xyR1base)

    func.XYplot(modelName,
                plotName='R1',
                xHead='Time [s]',
                yHead='Force [N]',
                xyDat=xyR1tot)

    # #=========== Force-displacement  ============#
    # plotName='force-Disp'

    # rf1 = xyPlot.XYDataFromHistory(odb=odb,
    # 	outputVariableName='Reaction force: RF1 PI: COLUMN-1 Node 1 in NSET COL-BASE')
    # rf2 = xyPlot.XYDataFromHistory(odb=odb,
    # 	outputVariableName='Reaction force: RF1 PI: COLUMN-1 Node 3 in NSET COL-TOP')
    # u = xyPlot.XYDataFromHistory(odb=odb,
    # 	outputVariableName='Spatial displacement: U1 PI: COLUMN-1 Node 2 in NSET COL-MID')

    xyUR = combine(xyU1mid, -xyR1tot)

    func.XYplot(modelName,
                plotName='ForceDisp',
                xHead='Displacement [mm]',
                yHead='Force [N]',
                xyDat=xyUR)