簡體   English   中英

在Abaqus宏(Python)中編寫for循環

[英]Write a for loop in Abaqus Macro (Python)

我已經使用Abaqus一段時間了,但是我是宏和python腳本的新手。 很抱歉,如果您已經問過這種問題,我確實在Google上進行了搜索,看看是否存在類似的問題,但是沒有任何效果。

我的問題如下:

我在Abaqus中有一個模型,我用2個步驟進行了分析,並在其中創建了一條路徑,我想針對每個步驟的每一幀沿此路徑提取馮·米塞斯應力值。 理想情況下,我希望將其保存到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)

首先,您的函數VonMises僅包含import語句,代碼的其他部分未正確縮進,因此它們不在函數之外。

第二,該函數永遠不會被調用。 如果使用“文件>運行腳本”運行腳本,則應在文件末尾調用該函數。

有兩件事看似很明顯的錯誤,但也有其他一些不好的事情。

另外,我看不到在文件頂部寫import __name__ ,因為我真的懷疑您是否具有模塊名稱__name__ Abaqus使用的Python環境可能也不是。

還有一些其他方面可能會得到改進,但是您應該首先嘗試修復錯誤。

如果您收到來自Abaqus的實際錯誤消息(在窗口或abaqus.rpy文件中),則將其張貼在此處會很有幫助。

得到它了 :

我將使用上面發布的代碼,在此重復:

# -*- 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”工具,足以滿足我的需求。

謝謝大家的投入。

這是提取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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM