【问题标题】:Abaqus Scripting KeyErrorAbaqus 脚本 KeyError
【发布时间】:2020-05-23 15:48:20
【问题描述】:

我正在尝试使用 abaqus 脚本进行谐波分析。每次我运行下面的代码时,我都会得到“KeyError:XYPlot-1”。任何帮助将不胜感激。 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()

任何关于如何执行 for 循环以针对不同杨氏模量、泊松比和密度进行各种迭代的其他信息也将不胜感激。

【问题讨论】:

    标签: python abaqus


    【解决方案1】:

    欢迎来到 Stack Overflow。在 python 意义上,这意味着没有找到 Key XYPlot-1

    1. 宏中的 Python 命令无需等待 abaqus 作业完成即可执行。我的建议是将其一分为二,一个创建并运行分析,另一个读取 odb 并生成您正在寻找的图。或者,use wait for completion before continuing to other parts of the script 特别是 Francisco Cruz 的回答。
    2. 我强烈建议您在所有导入语句之后在脚本顶部使用session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE),以避免与宏生成的掩码相关的问题read JulianBauer's answer here
    3. 关于如何迭代不同的材料属性,请查看文档中的脚本参数研究。文档中的弹丸穿透板示例是我能找到的初学者友好示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多