Поверхность Abaqus getSequenceFromMask

Я пишу скрипт в Abaqus, где я раздавливаю круг и квадрат вырезанным кругом (как сыр). Мне нужно поставить контакт между частями, поэтому мне нужен Surface.

менеджер макросов генерирует:

s1 = a.instances['kolo-1'].edges
side1Edges1 = s1.getSequenceFromMask(mask=('[#1 ]', ), )
a.Surface(side1Edges=side1Edges1 , name='kolkoSurf')

Проблема в следующем: getSequenceFromMask(mask=('[#1]', ), ) Как получить это #1? Могу ли я заменить его? Я мало искал, и были некоторые идеи для использования: «найти», «лицо», «КООРДЫ», но я не могу справиться с этим. Помогите мне, пожалуйста. Я мечтаю получить простой пример, как извлечь эту поверхность с помощью X, Y или любого другого.

БР, Вонман


person Cenarius    schedule 14.11.2017    source источник


Ответы (3)


Вы записали указанный выше журнал с помощью диспетчера макросов с параметрами журнала по умолчанию. Поэтому переменная side1Edges1 определяется в вашем журнале с помощью getSequenceFromMask()-метода. Этот метод представляет собой запись выбора, который вы сделали, щелкнув графический интерфейс во время записи. Это означает, что вы щелкнули графический интерфейс, чтобы выбрать ребро, и результатом является getSequenceFromMask()-метод, воздействующий на s1, который представляет собой набор всех ребер экземпляра 'kolo-1'.

Согласно Abaqus Scripting Reference Guide 6.14 - 7.2.2, метод getSequenceFromMask() очень эффективен, когда задействовано большое количество объектов. Однако это не очень полезно, если вы пытаетесь настроить файл журнала, чтобы выбрать другой элемент геометрии для работы. Есть два решения:

  1. Решение: вставьте команду

    session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)
    

    в командную строку Abaqus в нижней части Abaqus CAE, чтобы установить для элементов replayGeometry и recoverGeometry объекта JournalOptions значение COORDINATE и повторить запись журнала. В большинстве случаев вы можете не щелкать графический интерфейс снова, выполнив свой старый журнал после выполнения команды выше. Затем вы можете сохранить свой проект, желательно с новым именем, и использовать только что созданный журнал. В новом журнале команда getSequenceFromMask(mask=('[#1 ]', ), ) будет заменена выбором, основанным на координатах, чтобы представить записанный вами графический интерфейс. Затем вы можете изменить координаты, чтобы настроить файл журнала и выбрать ребро, которое вы хотите использовать на последующих этапах моделирования.

  2. Решение: определите side1Edges1, используя переменные, которые вы определили с нуля в предыдущих строках вашего скрипта Python. Я рекомендую использовать файл журнала в качестве шаблона, в котором все события кликов должны быть заменены хорошо известными переменными, определенными вами. Например, определите список точек myPoints = [(0,0), (0,1) ], используя свою собственную логику, а затем используйте эти точки в качестве аргументов методов, например. myLine = mySketch.Line(point1=myPoints[0], point2=myPoints[1]), создавая новые переменные, такие как myLine, для использования на последующих этапах моделирования.

Чтобы получить базовое представление о рабочем процессе моделирования с использованием Abaqus Python API, я могу порекомендовать Пури, Г. М., 2011. Скрипты Python для Abaqus: учись на примерах, 1-е издание, также вряд ли доступно в большинстве университетов.

Может оказаться полезным ознакомиться с Руководством по тестированию Abaqus, так как некоторые новые тесты содержат скрипты Python (например, Fracture Mechanics).

person JulianBauer    schedule 14.11.2017
comment
Вроде такой константы COORDINATES в Abaqus 6.14 нет. Но COORDINATE работает нормально. - person peremeykin; 04.03.2018
comment
@JKepler Спасибо, я исправил свой ответ, изменив «КООРДИНАТЫ» на «КООРДИНАТЫ». - person JulianBauer; 04.03.2018

Я полагаю, вы создаете поверхность на основе края. Есть много способов сделать это, самый простой из них

Создайте набор на основе сборки ("setName") тех ребер, для которых вы хотите создать поверхность.

instance=mdb.rootAssembly.instances["InstanceName"]
set_for_surface=instance.sets["setName"].edges
assembly.Surface(side1Edges=set_for_surface, name="surf_name")

Посмотрите на findAt() или выберите область с помощью ограничительной рамки «getBoundingBox()». См. этот ТАК ответ, что несколько похоже.

Изменить: если набор представляет собой набор на основе сборки, доступ к нему осуществляется непосредственно из сборки, а не из экземпляра. Затем используйте ту же процедуру.

mdb.rootAssembly.sets['Set_name'].edges
person Anbu    schedule 16.11.2017

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

p = mdb.models['Model-1'].parts['Part-1']
e = p.edges
edges = e.getByBoundingBox(x1,y1,z1,x2,y2,z2)
p.Set(edges=edges, name='AllPartSet')

x, y и z — две координаты для создания коробки.

person Akash Bhuwal    schedule 05.02.2021