1

我是论坛的新手。我不是专家级程序员,但我需要在 python 中编写脚本,以便在没有 GUI 的情况下使用 Abaqus 运行有限元模拟。模拟运行良好,但是当我尝试生成包含结果的文本文件时,出现以下错误提示

文件“C:/...my_scrypt.py,第 208 行,在 INTEGRATION_POINT),)) 没有活动实体。没有生成报告

这是脚本:

(197)    from odbAccess import *
(198)    from abaqusConstants import *
(199)    from odbMaterial import *
(200)    from odbSection import *
(201)    
(202)    o1 = session.openOdb(name='C:/Temp/Job-1.odb')
(203)    odb = session.odbs['C:/Temp/Job-1.odb'].steps['apply_load']
(204)    session.writeFieldReport(fileName='C:/Temp/abaqus.rpt', append=ON, 
(205)        sortItem='Element Label', odb=odb, step=0, frame=1, 
(206)        outputPosition=INTEGRATION_POINT, variable=(('PEMAG', 
(207)        INTEGRATION_POINT), ('PRESSONLY', INTEGRATION_POINT), ('S', 
(208)        INTEGRATION_POINT), ))

谢谢你的帮助

4

2 回答 2

1

当我开始使用 Python 编程时,这也是我的第一行代码,它运行良好。但是,现在我正在扩展我的代码,因此我开始遇到与您描述的相同的错误:“没有活动实体。没有生成报告”。

在您的情况下,您使用的是现有的视口,称为“视口:1”,但是,在创建新视口时,您必须使该视口成为当前视口。这是我用来创建 myViewport 的以下代码:

myViewport = session.Viewport(name=ViewportName, origin=(0, -100),width=250, height=150)
myViewport.odbDisplay.commonOptions.setValues(visibleEdges=FREE,deformationScaling=UNIFORM,uniformScaleFactor=(1))

# Open the output database and associate it with the viewport.
# Then set the plot state to CONTOURS_ON_DEF

try: myOdb = visualization.openOdb(path=odbNames)
except (AbaqusException), value:  print ('Error:', value)

myViewport.setValues(displayedObject=myOdb)
myViewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF,))

myViewport.viewportAnnotationOptions.setValues(triad=OFF,title=OFF,state=OFF,compass=OFF, legendDecimalPlaces=2,legendNumberFormat=FIXED)
myViewport.odbDisplay.basicOptions.setValues(coordSystemDisplay=OFF, renderBeamProfiles=ON)

myViewport.view.rotate(xAngle=90,yAngle=90,zAngle=0)
myViewport.view.rotate(xAngle=90,yAngle=90,zAngle=0)
myViewport.view.rotate(xAngle=0, yAngle=0, zAngle=180)
#        myViewport.view.rotate(mode=TOTAL)
myViewport.view.pan(xFraction=0.1) # yFraction for vertical panning
myViewport.view.setValues(projection=PARALLEL)
myViewport.makeCurrent() #This makes the viewport current
于 2019-01-22T09:04:11.027 回答
1

非常感谢各位的帮助。这是工作代码:

from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *

o1 = session.openOdb(name='C:/Temp/Job-1.odb')
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
session.viewports['Viewport: 1'].odbDisplay.setFrame(step=0, frame=1)
odb = session.odbs['C:/Temp/Job-1.odb']
session.fieldReportOptions.setValues(columnLayout=SEPARATE_TABLES)
session.writeFieldReport(fileName='C:/Temp/abaqus.rpt', append=OFF, 
    sortItem='Element Label', odb=odb, step=0, frame=1, 
    outputPosition=INTEGRATION_POINT, variable=(('PEMAG', 
    INTEGRATION_POINT), ('PRESSONLY', INTEGRATION_POINT), ('S', 
    INTEGRATION_POINT), ))
于 2016-03-08T09:03:37.247 回答