Как экспортировать выходные данные поля и координаты узла с помощью Abaqus/Scripting?

С помощью Abaqus я пытаюсь экспортировать координаты узла и значение CSDMG в каждом узле моей модели воздействия, чтобы перестроить ее с помощью Python. Однако моя программа, похоже, не извлекает значение CSDMG рассматриваемого узла. Значение, извлеченное из моей программы Python, отличается от значения, экспортированного из Abaqus/Viewer. Из Abaqus/Viewer Из программы Python

Моя программа:

for node in instance.nodes:
    inc.append(i)
    Noeud.append(node.label)
    CoordX.append(node.coordinates[0])
    CoordY.append(node.coordinates[1])
    CoordZ.append(node.coordinates[2])
    CSDMG.append(lastFrame.fieldOutputs['CSDMG General_Contact_Domain'].values[node.label].data)
    i=i+1

Я предполагаю, что предпоследняя строка считывает значение CSDMG на другом узле, чем «node.label». Что вы порекомендуете для улучшения моего кода?


person Alban Robin    schedule 26.11.2020    source источник


Ответы (1)


Когда вы получаете доступ к значениям вывода поля, атрибут values действует как список FieldValue объектов. Поскольку атрибут values работает как список, индексы представляют собой обычные индексы списка, начинающиеся с 0. Индексы являются не метками узлов.

Abaqus сохраняет результаты вывода полей, отсортированные по меткам в порядке возрастания. Если у вас есть только один экземпляр, то порядок результатов вывода поля соответствует порядку узлов внутри экземпляра. В этом случае вы можете получить доступ к значениям одно за другим, используя последовательный индекс:

for i, node in enumerate(instance.nodes):
    inc.append(i)
    Noeud.append(node.label)
    CoordX.append(node.coordinates[0])
    CoordY.append(node.coordinates[1])
    CoordZ.append(node.coordinates[2])
    CSDMG.append(lastFrame.fieldOutputs['CSDMG General_Contact_Domain'].values[i].data)

Также обратите внимание, что я заменил ваше ручное увеличение i встроенной функцией enumerate.

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

field_output = lastFrame.fieldOutputs['CSDMG General_Contact_Domain'].getSubset(region=instance)

for i, node in enumerate(instance.nodes):
    inc.append(i)
    Noeud.append(node.label)
    CoordX.append(node.coordinates[0])
    CoordY.append(node.coordinates[1])
    CoordZ.append(node.coordinates[2])
    CSDMG.append(field_output .values[i].data)
person hgazibara    schedule 26.11.2020
comment
Оно работает ! Большое спасибо ! - person Alban Robin; 27.11.2020