Написать цикл в Abaqus Macro (Python)

Я уже давно пользуюсь Abaqus, но я новичок в макросах и скриптах на python. Извините, если такой вопрос уже задавался, я выполнил поиск в Google, чтобы увидеть, была ли подобная проблема, но ничего не работает..

Моя проблема заключается в следующем:

У меня есть модель в Abaqus, я выполнил анализ с 2 шагами, и я создал в нем путь, и я хотел бы извлечь значение напряжения Фон Мизеса вдоль этого пути для каждого кадра каждого шага. В идеале я хотел бы сохранить его в файл Excel или.txt для более простого анализа (например, в Matlab).

Изменить: Я решил часть проблемы, мой макрос работает, и все мои данные правильно сохранены в диспетчере XY-Data.

Теперь я хотел бы сохранить все данные "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 ответа

Прежде всего, ваша функция VonMises содержит только операторы импорта, остальные части кода не имеют правильного отступа, поэтому они находятся за пределами функции.

Во-вторых, функция никогда не вызывается. Если вы запускаете ваш скрипт, используя "Файл> Выполнить скрипт", вам следует вызвать функцию в конце вашего файла.

Две вещи кажутся очевидными ошибками, но есть и другие плохие вещи.

Кроме того, я не вижу смысла писать import __name__ в верхней части вашего файла, потому что я действительно сомневаюсь, что у вас есть имя модуля __name__; Среда Python, используемая Abaqus, вероятно, тоже этого не делает.

Есть и другие вещи, которые могут быть улучшены, но вы должны сначала попытаться исправить ошибки.

Если вы получили реальное сообщение об ошибке от Abaqus (либо в окне, либо в файле abaqus.rpy), было бы полезно, если бы вы разместили его здесь.

Вот как вы извлекаете 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()

Понял:

Я буду использовать код, размещенный выше, повторяется здесь:

# -*- 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)

И я только что обнаружил инструмент "Excel Utilities" на Abaqus, которого достаточно для того, что я хочу сделать.

Спасибо всем за ваш вклад.

Другие вопросы по тегам