0

我使用 Abaqus 已经有一段时间了,但我对宏和 python 脚本不熟悉。对不起,如果已经问过这种问题,我确实在谷歌上搜索过,看看是否有类似的问题,但没有任何效果..

我的问题如下:

我在 Abaqus 中有一个模型,我用 2 个步骤进行了分析,并在其中创建了一条路径,我想为每一步的每一帧提取沿着这条路径的 Von Mises 应力值。理想情况下,我希望将其保存到 Excel 或 .txt 文件中,以便于进一步分析(例如在 Matlab 中)。

编辑:我解决了部分问题,我的宏工作并且我的所有数据都正确保存在 XY 数据管理器中。

现在我想将所有“Y”数据保存在一个 excel 或文本文件中,但我不知道如何做到这一点。我会继续挖掘,但如果有人有想法,我会接受!

这是 abaqusMacros.py 文件中的代码:

# -*- coding: mbcs -*-
# Do not delete the following import lines
from abaqus import *
from abaqusConstants import *
import __main__



def VonMises():
    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

    odbFile = session.openOdb(name='C:/Temp/Job-1.odb')
    stepsName = odbFile.steps.keys()
    for stepId in range(len(stepsName)):
            numberOfFrames = len(odbFile.steps.values()[stepId].frames)
            for frameId in range(numberOfFrames):
                    session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
                        variableLabel='S', outputPosition=INTEGRATION_POINT, refinement=(
                            INVARIANT, 'Mises'))
                    session.viewports['Viewport: 1'].odbDisplay.setFrame(step=stepId, frame=frameId)
                    pth = session.paths['Path-1']
                    session.XYDataFromPath(name='Step_'+str(stepId)+'_'+str(frameId), path=pth, includeIntersections=False, 
                        projectOntoMesh=False, pathStyle=PATH_POINTS, numIntervals=10, 
                        projectionTolerance=0, shape=DEFORMED, labelType=TRUE_DISTANCE)
4

3 回答 3

0

知道了 :

我将使用上面发布的代码,在这里重复:

# -*- coding: mbcs -*-
# Do not delete the following import lines
from abaqus import *
from abaqusConstants import *
import __main__



def VonMises():
    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

    odbFile = session.openOdb(name='C:/Temp/Job-1.odb')
    stepsName = odbFile.steps.keys()
    for stepId in range(len(stepsName)):
            numberOfFrames = len(odbFile.steps.values()[stepId].frames)
            for frameId in range(numberOfFrames):
                    session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
                        variableLabel='S', outputPosition=INTEGRATION_POINT, refinement=(
                            INVARIANT, 'Mises'))
                    session.viewports['Viewport: 1'].odbDisplay.setFrame(step=stepId, frame=frameId)
                    pth = session.paths['Path-1']
                    session.XYDataFromPath(name='Step_'+str(stepId)+'_'+str(frameId), path=pth, includeIntersections=False, 
                        projectOntoMesh=False, pathStyle=PATH_POINTS, numIntervals=10, 
                        projectionTolerance=0, shape=DEFORMED, labelType=TRUE_DISTANCE)

而且我刚刚在 Abaqus 上发现了“Excel Utilities”工具,这对于我想做的事情来说已经足够了。

谢谢大家的意见。

于 2015-01-24T14:40:02.120 回答
0

首先,你的函数VonMises只包含 import 语句,代码的其他部分没有正确缩进,所以它们在函数之外。

其次,该函数永远不会被调用。如果您使用“文件 > 运行脚本”运行脚本,那么您应该在文件末尾调用该函数。

有两件事似乎是明显的错误,但也有其他一些不好的事情。

另外,我没有看到在import __name__文件顶部写的意义,因为我真的怀疑你有一个模块名称__name__;Abaqus 使用的 Python 环境可能也没有。

还有一些其他的事情也可能会改进,但您应该首先尝试修复错误。

如果您收到来自 Abaqus 的实际错误消息(在窗口中或在 abaqus.rpy 文件中),将其发布在此处会很有帮助。

于 2015-01-23T18:08:13.607 回答
0

以下是提取 XY 数据的方法

from odbAccess import *        


odb = session.odbs['C:/Job-Directory/Job-1.odb']        
output = open('Result.dat', 'w')        

for i in range (0,Number-of-XYData-to-extract):        
    xy1 = odb.userData.xyDataObjects['XYData-'+str(i)]        
    for x in range (0,len(xy1)):        
        output.write ( str(xy1[x]) + "\n" )        
output.close()
于 2016-11-22T10:23:11.357 回答