Как создать набор из списка наборов в Python? - PullRequest
0 голосов
/ 30 сентября 2018

В скрипте abaqus Python несколько копий имеют большое количество копий, каждая из которых имеет много волокон.В каждом волокне был выбран набор ребер: App1-1, App1-2, ..., App99-1, App99-2, ..., App99-88.Как создать новый набор, который будет содержать все или некоторые из этих наборов ребер?Спасибо.

Код:

allApps=[]
...
for i in range(Plies):
    ...
    for j in range (Fiber):
        appSet = Model.rootAssembly.Set(edges=
            Model.rootAssembly.instances['Part'+str(i+1)+'-'+str(1+j)].edges[0:0+1], 
            name='App'+str(i+1)+'-'+str(1+j))
        allApps.append(appSet)

Я могу предположить, что это должно быть примерно так:

Model.rootAssembly.Set(name='allAppEdges', edges=.?.Array(allApps))

, но я не уверен в этом, и у меня естьнет представления о правильном синтаксисе

1 Ответ

0 голосов
/ 01 октября 2018

Я проверил следующее на простой части, и это сработало для меня.Я думаю, что вы могли бы адаптировать это для достижения того, что вы пытаетесь сделать для вашей конкретной модели.Ключ типа part.EdgeArray.По любой причине Abaqus требует, чтобы ваши ребра были указаны в этом типе, а не в простом списке или кортеже.Документация Abaqus не ясна по этому поводу, и когда вы передадите список ребер, он потерпит неудачу с неопределенной ошибкой: Feature creation failed.

from abaqus import *
import part

mdl = mdb.models['Model-1']
inst = mdl.rootAssembly.instances['Part-1-1']

# Loop through all edges in the instance and add them to a list
my_edges = []
for e in inst.edges:
    my_edges.append(e)

# Create a new set with these edges
#mdl.rootAssembly.Set(name='my_edges', edges=my_edges) # This will fail because my_edges needs to be an EdgeArray
mdl.rootAssembly.Set(name='my_edges', edges=part.EdgeArray(my_edges))

Для других, которые могут оказаться здесь - доступны похожие типыдля вершин, граней и ячеек: part.VertexArray, part.FaceArray и part.CellArray.

...