用户登录

你在这里

通过Python从Abaqus/Explicit分析中获得载荷-位移曲线

南湖的画

嗨,,

我很确定我们可以使用Python从Abaqus odb结果文件读取位移和加载certin节点集,然后绘制X-Y数据(这就是我所需要的)。为了找到一个好的解决办法,我已经挣扎了整整一个星期。我在那里有很多资源,但什么都没有解决。所以,我想知道是否有人知道如何解决这个问题,甚至分享给我一个链接。我真的很感激!

谢谢。

亚伦

评论

范阳的照片

嗨,亚伦,

我碰巧写了一些代码,可能就是你想要的那种。请将以下代码保存到XX.py文件中,并以如下方式执行该文件:

abaqus python XX.py -o *。odb -n nodeLabel -v variableName >文件名

”“”

NodeField.py

作者:Fan Yang Dec2011 at Utoronto

代码提取指定节点的值

输出数据库的字段输出变量。

使用方法:abaqus python NodeField.py -odb odbName .py

-node节点-var(可选)Var

要求:

1.-odb:输出数据库的名称。

2.-node:节点标签

3.-var:要提取的变量的名称。

如果不提供该参数,

默认的位移输出将被处理。

4.-help:打印用法

”“”

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

从odbAccess导入*

从sys导入argv,退出

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

def rightTrim(输入,后缀):

If (input.find(suffix) == -1):

输入=输入+后缀

返回输入

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

def getNodeHist (odbName、节点Var):

"""打印节点变量Var(可选)的值

”“”

打开输出数据库""" "

提取变量%s为节点%d' %(Var, node)

odb = openOdb(odbName)

assembly = odb.rootAssembly

如果Var:

变量= Var

其他:

变量= ' U '

打印默认位移输出

对于odb.steps.values()中的step:

打印'处理步骤:',Step .name

打印% 6 s % 10 s % 14年代“%(“框架”,“时间”,“值”)

对于step.frames中的frame:

isVarPresent = 0

Vardata = 0。

lendata = 0

incFrame = -1

valFrame = 0。

allFields = frame.fieldOutputs

如果(allFields.has_key(变量)):

isVarPresent = 1

VarSet = allFields[变量]

VarSet.values中的VarValue:

如果(VarValue。nodeLabel == Node):

Vardata = VarValue.data

lendata = len(Vardata)

incFrame = frame.incrementNumber

valFrame = frame.frameValue

如果lendata = = 1:

打印“% 6 d % 10 f ' % (incFrame valFrame)的% 14.7 e % Vardata [0]

elif lendata = = 2:

打印“% 6 d % 10 f ' % (incFrame valFrame), % 14.7 e % 14.7 e ' % (Vardata [0], Vardata [1])

elif lendata = = 3:

打印“% 6 d % 10 f ' % (incFrame valFrame), ' % 14.7 e % 14.7 e % 14.7 e % (Vardata [0], Vardata [1], Vardata [2])

"""退出程序前关闭输出数据库""" "

odb.close ()

#==================================================================

#它是一个r t

如果__name__ == '__main__':

odbName =无

节点= 0

Var =无

argList = argv

argc = len(argList)

我= 0

While (i < argc):

if (argList[i][:2] == "-o"):

I += 1

name = argList[i]

odbName = rightTrim(name,".odb")

elif (argList[i][:2] == "-n"):

I += 1

Nodestr = argList[i]

节点= int (Nodestr)

elif (argList[i][:2] == "-v"):

I += 1

Var = argList[i]

elif (argList[i][:2] == "-h"):

打印__doc__

退出(0)

I += 1

if not (odbName):

打印' **错误**输出数据库名称不提供'

打印__doc__

退出(1)

如果节点= = 0:

打印' **ERROR**节点标签不提供'

打印__doc__

退出(1)

getNodeHist (odbName节点,Var)

brunda的照片

你好,

这相当简单。

学习ABAQUS的python脚本的一个简单方法是阅读*。Rpy文件在你的odb文件夹。您在ABAQUS visualization模块中所做的任何操作都存储在该文件中。您可以阅读该文件以了解如何获取和绘制数据。如果有问题请告诉我

使用这个来获取节点集'ALL NODES'的节点位移和力

从abaquusconstants导入*
从odbAccess导入*
从数学导入*
导入系统

路径=“< >”
odbfile = ' * .odb '
outputfile = ' * .dat '
odb = openOdb (' % s / % s ' %(路径,odbfile))
File1 = open('%s/%s'%(path,outputfile),'w')

#-------------------------------------------------------------------------------
framelen = len (odb.steps[“步骤1”].frames)
= odb.rootAssembly节点。nodeSets['所有节点']

#位移

disp =会话。xyDataListFromField(odb=odb, outputPosition= node, variable=(('U', node, ((COMPONENT, 'U1'), (COMPONENT, 'U2'),)),), nodeSets=(' ALL NODES',))

力=会话。xyDataListFromField(odb=odb, outputPosition= nodeal, variable=(('RF', nodeal, ((COMPONENT, 'RF1'), (COMPONENT, 'RF2'),)), nodeSets=(' ALL NODES',))

您可以将数据写入ITO .dat文件,并在matlab中使用“dlmread”打开它并绘制数据

南湖的画

哇。看起来很简单。对于您在这里提供的代码,是否意味着“disp”和“force”将被写入dat。文件吗?如果我只对一个特定的集合(称为“V_dis”)感兴趣U3,对一个名为“V_rea”的集合(称为“V_rea”)感兴趣RF3。我该怎么修改呢?

另外,如果我想在我的Matlab代码中运行这一部分来调用abaqus,请运行这个Python脚本。我该怎么做呢?

谢谢你在这个问题上给我提示。非常感谢!

亚伦

订阅“通过Abaqus/ Python显式分析获得载荷-位移曲线”评论

最近的评论

更多的评论

辛迪加

订阅辛迪加