Abaqus/Python фиксированные ограничения заполнения

Я работаю с Abaqus/Python для анализа методом конечных элементов. У меня следующая проблема: у меня есть 3D-область, состоящая из 2D-области, содержащей края, а также круговые сегменты, и которая экструдирована в третьем измерении. Теперь я хочу создать сетку этой области с ограничением, что должен использоваться только один элемент вдоль направления толщины. Следующий минимальный пример вытянутой четверти круга в коде Python:

from abaqus import *
from abaqusConstants import *
import __main__

# Sketch quarter circle
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', 
    sheetSize=50.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)

s.ArcByCenterEnds(center=(0.0, 0.0), point1=(0.0, 5.0), point2=(5.0, 0.0),
    direction=CLOCKWISE)
s.Line(point1=(0.0, 5.0), point2=(0.0, 0.0))
s.Line(point1=(0.0, 0.0), point2=(5.0, 0.0))


# Create part from sketch and extrusion in the depth
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,
    type=DEFORMABLE_BODY)
p.BaseSolidExtrude(sketch=s, depth=0.1)
s.unsetPrimaryObject()
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']

# Mesh
# Global seeds
p.seedPart(size=0.35, deviationFactor=0.1, minSizeFactor=0.1)
# 'fixed' seeding constraint: only one element in thickness direction
e = p.edges
pickedEdges = e.findAt(((5.0, 0.0, 0.025), ), ((0.0, 5.0, 0.025), ), 
    ((0.0, 0.0, 0.025), ))
p.seedEdgeByNumber(edges=pickedEdges, number=1, constraint=FIXED)

# Generate mesh
p.generateMesh()

В последней строке, когда я хочу сгенерировать сетку, домен не может быть сеткой, потому что «фиксированные» ограничения заполнения не могут быть соблюдены. Если я использую

p.generateMesh(seedConstraintOverride=ON)

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


person SoB    schedule 16.08.2017    source источник


Ответы (1)


Есть несколько способов сделать это. Один из вариантов — просто изменить технику сетки на sweep. Например, если ваша часть состоит из одной геометрической ячейки (как в вашем примере кода), вы можете использовать следующее:

part_cells = p.cells()
p.setMeshControls(regions=(part_cells[0],), technique=SWEEP)
p.generateMesh()

Вы должны указать аргумент ключевого слова region как последовательность объектов Region или Set. Обратите внимание, что если длина направления развертки меньше, чем глобальный начальный размер, вам не нужно указывать какие-либо ограничения краевого начального числа, и будет создан только один элемент.

person Matt P    schedule 17.08.2017
comment
Хочу снова поднять вопрос. Вы сказали, что есть несколько способов сделать это. Какие другие способы существуют вместо использования метода развертки сетки? - person SoB; 24.05.2018
comment
Оригинальный ответ сработал для вас? В зависимости от вашей модели и потребностей вы также можете попробовать: (1) создать сетку снизу вверх или (2) создать часть 2D-сетки и выдавить ее. Схожие концепции, разные инструменты для достижения цели. - person Matt P; 24.05.2018