ABAQUS: разбиение сплошной модели сплайном с использованием скрипта Python - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь смоделировать интерфейс между трубой и ее покрытием. Насколько я могу судить, лучший способ сделать это - смоделировать одну трубку, а затем разделить ее на грани, используя эскиз, для простоты построения круга. Затем разделить ребро, созданное гранью раздела (я говорю «очень жаль») вдоль продольной оси, создав базовую ось. Это работает в графическом интерфейсе ABAQUS, а затем также работает в скрипте Python. Моя проблема заключается в том, что, когда я пытаюсь точнее воспроизвести профиль интерфейса покрытия, используя сплайн, следующий за уравнением, он не будет разделять грань. Если у кого-то есть идеи, как заставить сплайн разделить лицо, это было бы очень полезно. Я с нетерпением жду услышать ваши идеи. Это мой код пока ...

"""
modelAExample.py

"""

from abaqus import *

from abaqusConstants import *

backwardCompatibility.setValues(includeDeprecated=True, reportDeprecated=False)

import sketch

import part

myModel = mdb.Model(name='Model A')

mySketch = myModel.ConstrainedSketch(name='Sketch A', sheetSize=10.0)

Размеры трубки

Ro = 5e-3

Ri = 3.5e-3

origin = [0,0]

Outer_Edge = [Ro,0]

Inner_Edge = [Ri,0]

length = 0.4

Изготовление трубки

mySketch.CircleByCenterPerimeter((origin[0],origin[1]),(Inner_Edge[0],Inner_Edge[1]))

mySketch.CircleByCenterPerimeter((origin[0],origin[1]),(Outer_Edge[0],Outer_Edge[1]))

myPart = myModel.Part(name='Part A', dimensionality=THREE_D, type=DEFORMABLE_BODY)

myPart.BaseSolidExtrude(sketch=mySketch, depth=length)

myViewport = session.Viewport(name='Viewport for Model A', origin=(10, 10), width=150, height=100)

myViewport.setValues(displayedObject=myPart)

myViewport.partDisplay.setValues(renderStyle=SHADED)

p = mdb.models['Model A'].parts['Part A']

Параметры покрытия

Rn относится к радиусу границы раздела, а Ra - к поверхностной шероховатости

Coating_thickness = 1e-3

Rn = Ro - Coating_thickness

Ra = 10e-6

n = 13

Создание профиля сплайна

sp = myModel.ConstrainedSketch(name = 'mySketch2', sheetSize=10.0)

points = []

for i in range(360):
    theta = int(i)*pi/180
    L = Rn + Ra*sin(theta*n)
    x = L*cos(theta)
    y = L*sin(theta)
    points.append([x,y])

sp.Spline(points=points)

Выбор грани для разделения

f = p.faces
pickedFaces = f.findAt((0.9*Ro, 0.0, 0.0)) 

Разделение лица с помощью сплайн-эскиза

p.PartitionFaceBySketch(faces = pickedFaces, sketch = sp)
...