Как прочитать усредненное узловое напряжение из файла abaqus odb с помощью скрипта Python?
Я знаю, как читать значение стресса элемента или элемента (невостребованного) с помощью скрипта Python.
field = stressField.getSubset(region=topCenter,position=INTEGRATION_POINT, elementType = 'CAX4')
Но я хочу усредненные значения напряжения в узлах. К вашему сведению, мой odb не содержит данных о положении узлов для напряжения (то есть, позиция =NODAL).
1 ответ
Это одна из тех вещей, которые намного более громоздки, чем должны быть. вам нужно создать xydata:
session.xyDataListFromField(odb=odb,
outputPosition=ELEMENT_NODAL,
variable=(( 'S', INTEGRATION_POINT), ),
elementSets=('PART-1-1.SETNAME', ))
это создает словарь с объектами для каждого узла каждого элемента и каждого компонента напряжения (т. е. огромного). К сожалению, словарь содержит громоздкие строки дескриптора, например:
session.xyDataObjects['S:S11 PI:PART-1-1 E: 15 N:2'].data
дает 11 компонент стресса узла 2, связанного с элементом 15. Чтобы использовать данные в скрипте, вам нужно либо создать строки, либо выполнить цикл по словарю и проанализировать positionDescription
для каждого объекта.
Редактировать: если вы хотите, чтобы среднее значение в узле было практически таким же. Ты сделаешь:
session.xyDataListFromField(odb=odb,
outputPosition=NODAL,
variable=(( 'S', INTEGRATION_POINT), ),
nodeSets=('PART-1-1.SETNAME', ))
и объекты словаря имеют следующие ключи:
session.xyDataObjects['S:S11 (Avg: 75%) PI:PART-1-1 N:2'].data
обратите внимание, что вы можете выдать несколько session.xyDataListFromField
звонки и все данные поступают в xyDataObjects
(Например, если вы хотите стресс и напряжение, вы можете обрабатывать оба сразу.)
Для полноты, если вы хотите только определенный компонент (ы), вы можете запросить как:
variable=(( 'S', INTEGRATION_POINT,((COMPONENT, 'S11'),)), )