嗨,,
我很确定我们可以使用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"):
Nodestr = argList[i]
节点= int (Nodestr)
elif (argList[i][:2] == "-v"):
Var = argList[i]
elif (argList[i][:2] == "-h"):
打印__doc__
退出(0)
if not (odbName):
打印' **错误**输出数据库名称不提供'
退出(1)
如果节点= = 0:
打印' **ERROR**节点标签不提供'
getNodeHist (odbName节点,Var)
你好,
这相当简单。
学习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脚本。我该怎么做呢?
谢谢你在这个问题上给我提示。非常感谢!
评论
嗨,艾伦,我碰巧
嗨,亚伦,
我碰巧写了一些代码,可能就是你想要的那种。请将以下代码保存到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)
你好,天气很好
你好,
这相当简单。
学习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脚本。我该怎么做呢?
谢谢你在这个问题上给我提示。非常感谢!
亚伦