在Abaqus Macro(Python)中编写for循环

时间:2015-01-23 17:42:17

标签: python macros path abaqus

我已经使用Abaqus一段时间,但我是宏和python脚本的新手。对不起,如果已经提出这样的问题,我确实在google上搜索是否有类似的问题,但没有任何作用..

我的问题如下:

我在Abaqus中有一个模型,我已经用两个步骤进行了分析,我在其中创建了一条路径,我想为每个帧提取沿着这条路径的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)

3 个答案:

答案 0 :(得分:0)

首先,您的函数VonMises仅包含import语句,代码的其他部分未正确缩进,因此它们不在函数中。

其次,永远不会调用该函数。如果您使用'文件>运行脚本运行脚本',然后你应该调用文件末尾的函数。

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

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

还有一些其他方面可能会得到改进,但您应该首先尝试修复错误。

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

答案 1 :(得分: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”工具,足以满足我的目标。

感谢您的投入。

答案 2 :(得分: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()