通过Python脚本创建作业时Abaqus错误:未定义的作业类型名称

0 投票
1 回答
27 浏览
提问于 2025-04-14 16:34

我正在尝试通过一个Python脚本来创建Abaqus的作业。问题是,Abaqus不识别作业类型。它总是返回这个错误信息:

NameError: name 'ANALYSIS' is not defined

如果不定义类型,它可以正常创建作业,但就是不接受任何类型。

这是我导入的模块:

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
import SymbolicConstant
import abaqusConstants

这是我实际使用的命令:

p1 = mdb.models[n].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=p1)
job=mdb.Job(name=n, model=n, description='', 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,numThreadsPerMpiProcess=1, multiprocessingMode=DEFAULT, numCpus=4,numDomains=4, numGPUs=0)

我尝试了多种作业类型。我还尝试通过录制宏脚本来创建命令,然后运行那个宏,但还是不行。唯一能创建作业的方法就是不指定类型。

1 个回答

0

通常,像 ANALYSIS 这样的常量都是在 abaqusConstants 这个 Abaqus 模块里定义的。
你已经导入了 abaqusConstants 模块,但你在使用这个模块里定义的常量。要使用这些常量,你需要引用这个模块。简单来说,你可以这样做:

import abaqusConstants

# Use the constant from abaqusConstants using .(dot) notation
ana_type = abaqusConstants.ANALYSIS

或者
你也可以用更简单的方法:

from abaqusConstants import *

# No need to give the reference to the module using .(dot) notation
# as you have directly imported all the constants in the current namespace directly
ana_type = ANALYSIS

这个选项,如你所见,使用起来很方便,因为有时候 Abaqus API 的命令会很长。在你的代码中,你也用了很多常量,比如 ANALYSISPERCENTAGESINGLEOFF 等等。所以,如果你使用引用(第一种方法),命令会变得更长。

你可以按照下面的方式修改你的代码(改动只在导入语句上):

from caeModules import *
import regionToolset
import displayGroupMdbToolset as dgm
import xyPlot
import displayGroupOdbToolset as dgo
from abaqusConstants import *

p1 = mdb.models[n].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=p1)
job=mdb.Job(name=n, model=n, description='', 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, numThreadsPerMpiProcess=1,
            multiprocessingMode=DEFAULT, numCpus=4, numDomains=4, numGPUs=0)

撰写回答