0

I am trying to do harmonic analysis using abaqus scripting. Everytime I run the code below, I get 'KeyError: XYPlot-1'. Any help would be greatly appreciated. TIA

# -*- coding: mbcs -*-
# Do not delete the following import lines
from abaqus import *
from abaqusConstants import *
import __main__

def Macro1():
    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
    s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=1.0)
    g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
    s.setPrimaryObject(option=STANDALONE)
    s.Line(point1=(0.0, 0.0), point2=(0.235000000051223, 0.0))
    s.HorizontalConstraint(entity=g[2], addUndoState=False)
    s.ObliqueDimension(vertex1=v[0], vertex2=v[1], textPoint=(0.140255361795425, 
        0.0583333373069763), value=0.985)
    session.viewports['Viewport: 1'].view.setValues(nearPlane=0.686013, 
        farPlane=1.19961, width=1.74884, height=0.832297, cameraPosition=(
        0.0144624, 0.0330418, 0.942809), cameraTarget=(0.0144624, 0.0330418, 
        0))
    p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR, 
        type=DEFORMABLE_BODY)
    p = mdb.models['Model-1'].parts['Part-1']
    p.BaseWire(sketch=s)
    s.unsetPrimaryObject()
    p = mdb.models['Model-1'].parts['Part-1']
    session.viewports['Viewport: 1'].setValues(displayedObject=p)
    del mdb.models['Model-1'].sketches['__profile__']
    session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=ON, 
        engineeringFeatures=ON)
    session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
        referenceRepresentation=OFF)
    mdb.models['Model-1'].Material(name='Stainless Steel', 
        description='Creating of Material Properties for Stainless Steel 304')
    mdb.models['Model-1'].materials['Stainless Steel'].Density(table=((7930.0, 
        ), ))
    mdb.models['Model-1'].materials['Stainless Steel'].Elastic(table=((
        200000000000.0, 0.31), ))
    mdb.models['Model-1'].PipeProfile(name='Profile-1', r=0.008, t=0.0015)
    mdb.models['Model-1'].BeamSection(name='Tube Section', 
        integration=DURING_ANALYSIS, poissonRatio=0.0, profile='Profile-1', 
        material='Stainless Steel', temperatureVar=LINEAR, 
        consistentMassMatrix=False)
    p = mdb.models['Model-1'].parts['Part-1']
    e = p.edges
    edges = e.getSequenceFromMask(mask=('[#1 ]', ), )
    region = p.Set(edges=edges, name='Set-1')
    p = mdb.models['Model-1'].parts['Part-1']
    p.SectionAssignment(region=region, sectionName='Tube Section', offset=0.0, 
        offsetType=MIDDLE_SURFACE, offsetField='', 
        thicknessAssignment=FROM_SECTION)
    p = mdb.models['Model-1'].parts['Part-1']
    e = p.edges
    edges = e.getSequenceFromMask(mask=('[#1 ]', ), )
    region=p.Set(edges=edges, name='Set-2')
    p = mdb.models['Model-1'].parts['Part-1']
    p.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0, 
        -1.0))
    a = mdb.models['Model-1'].rootAssembly
    session.viewports['Viewport: 1'].setValues(displayedObject=a)
    a1 = mdb.models['Model-1'].rootAssembly
    a1.DatumCsysByDefault(CARTESIAN)
    p = mdb.models['Model-1'].parts['Part-1']
    a1.Instance(name='Part-1-1', part=p, dependent=OFF)
    session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=OFF, 
        engineeringFeatures=OFF)
    session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
        referenceRepresentation=ON)
    p = mdb.models['Model-1'].parts['Part-1']
    session.viewports['Viewport: 1'].setValues(displayedObject=p)
    p = mdb.models['Model-1'].parts['Part-1']
    e = p.edges
    pickedEdges = e.getSequenceFromMask(mask=('[#1 ]', ), )
    p.PartitionEdgeByParam(edges=pickedEdges, parameter=0.5)
    a1 = mdb.models['Model-1'].rootAssembly
    a1.regenerate()
    a = mdb.models['Model-1'].rootAssembly
    session.viewports['Viewport: 1'].setValues(displayedObject=a)
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(
        adaptiveMeshConstraints=ON)
    mdb.models['Model-1'].StaticStep(name='Modes', previous='Initial', 
        description='Finding the frequencies fro all the Modal Shapes')
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Modes')
    del mdb.models['Model-1'].steps['Modes']
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Initial')
    mdb.models['Model-1'].FrequencyStep(name='Modes', previous='Initial', 
        description='Finding Frequencies of all Mode Shapes', numEigen=20)
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Modes')
    mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(variables=(
        'U', 'E'))
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON, 
        predefinedFields=ON, connectors=ON, adaptiveMeshConstraints=OFF)
    a = mdb.models['Model-1'].rootAssembly
    v1 = a.instances['Part-1-1'].vertices
    verts1 = v1.getSequenceFromMask(mask=('[#1 ]', ), )
    region = a.Set(vertices=verts1, name='Set-1')
    mdb.models['Model-1'].EncastreBC(name='BC-1', createStepName='Modes', 
        region=region, localCsys=None)
    mdb.models['Model-1'].boundaryConditions.changeKey(fromName='BC-1', 
        toName='Left_Edge_Fixed')
    a = mdb.models['Model-1'].rootAssembly
    v1 = a.instances['Part-1-1'].vertices
    verts1 = v1.getSequenceFromMask(mask=('[#4 ]', ), )
    region = a.Set(vertices=verts1, name='Set-2')
    mdb.models['Model-1'].EncastreBC(name='BC-2', createStepName='Modes', 
        region=region, localCsys=None)
    mdb.models['Model-1'].boundaryConditions.changeKey(fromName='BC-2', 
        toName='Right_Edge_Fixed')
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=ON, loads=OFF, 
        bcs=OFF, predefinedFields=OFF, connectors=OFF)
    session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues(
        meshTechnique=ON)
    a = mdb.models['Model-1'].rootAssembly
    e1 = a.instances['Part-1-1'].edges
    pickedEdges = e1.getSequenceFromMask(mask=('[#3 ]', ), )
    a.seedEdgeByNumber(edges=pickedEdges, number=20, constraint=FINER)
    a = mdb.models['Model-1'].rootAssembly
    partInstances =(a.instances['Part-1-1'], )
    a.generateMesh(regions=partInstances)
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=OFF)
    session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues(
        meshTechnique=OFF)
    mdb.Job(name='Mode_Job', model='Model-1', 
        description='Job to find the mode shapes and frequencies', 
        type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, 
        memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
        explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 
        modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', 
        scratch='', resultsFormat=ODB)
    mdb.jobs['Mode_Job'].submit(consistencyChecking=OFF)
    session.mdbData.summary()
    o3 = session.openOdb(name='C:/ABAQUS/Simulations/Scripting/Mode_Job.odb')
    session.viewports['Viewport: 1'].setValues(displayedObject=o3)
    session.viewports['Viewport: 1'].makeCurrent()
    session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
        DEFORMED, ))
    session.linkedViewportCommands.setValues(_highlightLinkedViewports=False)
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/Mode_Job.odb']
    session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('U', 
        NODAL, ((COMPONENT, 'U2'), )), ), nodePick=(('PART-1-1', 1, ('[#2 ]', 
        )), ), )
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/Mode_Job.odb']
    xyList = xyPlot.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=((
        'U', NODAL, ((COMPONENT, 'U2'), )), ), nodePick=(('PART-1-1', 1, (
        '[#2 ]', )), ), )
    xyp = session.xyPlots['XYPlot-1']
    chartName = xyp.charts.keys()[0]
    chart = xyp.charts[chartName]
    curveList = session.curveSet(xyData=xyList)
    chart.setValues(curvesToPlot=curveList)
    session.charts[chartName].autoColor(lines=True, symbols=True)
    session.viewports['Viewport: 1'].setValues(displayedObject=xyp)
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/Mode_Job.odb']
    session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('U', 
        NODAL, ((COMPONENT, 'U2'), )), ), nodePick=(('PART-1-1', 1, ('[#2 ]', 
        )), ), )
    p = mdb.models['Model-1'].parts['Part-1']
    session.viewports['Viewport: 1'].setValues(displayedObject=p)
    a = mdb.models['Model-1'].rootAssembly
    session.viewports['Viewport: 1'].setValues(displayedObject=a)
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(
        adaptiveMeshConstraints=ON)
    mdb.models['Model-1'].SteadyStateModalStep(name='FRF', previous='Modes', 
        description='FRF of the tube', frequencyRange=((0.0, 750.0, 50, 3.0), 
        ), directDamping=((1, 5, 0.06), ))
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='FRF')
    mdb.models['Model-1'].FieldOutputRequest(name='F-Output-FRF', 
        createStepName='FRF', variables=('S', 'MISESMAX', 'E', 'U', 'TU', 'TA', 
        'RT'))
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON, 
        predefinedFields=ON, connectors=ON, adaptiveMeshConstraints=OFF)
    a = mdb.models['Model-1'].rootAssembly
    v1 = a.instances['Part-1-1'].vertices
    verts1 = v1.getSequenceFromMask(mask=('[#2 ]', ), )
    region = a.Set(vertices=verts1, name='Set-4')
    mdb.models['Model-1'].ConcentratedForce(name='Applied Load', 
        createStepName='FRF', region=region, cf2=-12.5+0j, 
        distributionType=UNIFORM, field='', localCsys=None)
    session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=OFF, bcs=OFF, 
        predefinedFields=OFF, connectors=OFF)
    mdb.Job(name='FRF_Job', model='Model-1', description='Job to find FRF', 
        type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, 
        memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
        explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 
        modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', 
        scratch='', resultsFormat=ODB)
    mdb.jobs['FRF_Job'].submit(consistencyChecking=OFF)
    session.mdbData.summary()
    o3 = session.openOdb(name='C:/ABAQUS/Simulations/Scripting/FRF_Job.odb')
    session.viewports['Viewport: 1'].setValues(displayedObject=o3)
    session.viewports['Viewport: 1'].makeCurrent()
    session.linkedViewportCommands.setValues(_highlightLinkedViewports=False)
    odbName=session.viewports[session.currentViewportName].odbDisplay.name
    session.odbData[odbName].setValues(activeFrames=(('FRF', ('0:-1', )), ))
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/FRF_Job.odb']
    session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('U', 
        NODAL, ((COMPONENT, 'U2'), )), ), numericForm=REAL, nodePick=((
        'PART-1-1', 1, ('[#2 ]', )), ), )
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/FRF_Job.odb']
    xyList = xyPlot.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=((
        'U', NODAL, ((COMPONENT, 'U2'), )), ), numericForm=REAL, nodePick=((
        'PART-1-1', 1, ('[#2 ]', )), ), )
    xyp = session.xyPlots['XYPlot-1']
    chartName = xyp.charts.keys()[0]
    chart = xyp.charts[chartName]
    curveList = session.curveSet(xyData=xyList)
    chart.setValues(curvesToPlot=curveList)
    session.charts[chartName].autoColor(lines=True, symbols=True)
    session.viewports['Viewport: 1'].setValues(displayedObject=xyp)
    odb = session.odbs['C:/ABAQUS/Simulations/Scripting/FRF_Job.odb']
    session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('U', 
        NODAL, ((COMPONENT, 'U2'), )), ), numericForm=REAL, nodePick=((
        'PART-1-1', 1, ('[#2 ]', )), ), )
Macro1()

Any additional information on how I can do a for loop to do various iterations for different Young's Modulus, Poisson's Ratio and Density will also be greatly appreciated.

DcV001
  • 1
  • 1

1 Answers1

0

Welcome to Stack Overflow. In python sense, it means that the Key XYPlot-1 is not found.

  1. Python commands in the macro executes without waiting for the abaqus job to complete. My recommendation would be either split the into two, one creates and run the analysis and the second one to read the odb and produce the plots you're looking for. Or, use wait for completion before continuing to other parts of the script specifically Francisco Cruz answer.
  2. I strongly recommend you to use session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE) at the top of the script after all the import statements to avoid issues associated with masks generated by macros, read JulianBauer's answer here.
  3. Regarding how to iterate for different material properties, have a look at Scripting parametric studies in the documentation. Plate penetration by a projectile example in the documentation is beginner friendly example I could find.
Anbu
  • 108
  • 2
  • 9