Я пытаюсь смоделировать интерфейс между трубой и ее покрытием.
Насколько я могу судить, лучший способ сделать это - смоделировать одну трубку, а затем разделить ее на грани, используя эскиз, для простоты построения круга. Затем разделить ребро, созданное гранью раздела (я говорю «очень жаль») вдоль продольной оси, создав базовую ось. Это работает в графическом интерфейсе 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)