使用脚本

时间:2016-07-28 01:48:05

标签: python scripting abaqus

我的目标是在长矩形区域上获得转换映射四边形网格,这是一个参数化模型。最终的网格可以看作如下:

Transition Mapped Quad Meshing

我能够实现这个最终输出网格的唯一方法是使用草图分割面部,然后使用适当的网格控制并在相应边缘上进行种子设定。出于这个原因,我开始在几何体的左侧生成一个块,如下所示:

Single block created by partioning the face with sketch

此后,在Python脚本中使用了一个“for”循环,从矩形面的左侧到最右端,最后的分区面看起来像这样:

Final geometry ready to be meshed

所以,我尝试过三种方式。

选项1:使用左侧的findAt放置草绘器窗口,然后生成块并使用“for”循环将草绘器窗口坐标系的原点向右逐渐推送到右侧最重要的一面。换句话说,块相对于原点的位置总是保持相同,因此,当原点从左向右移动时,块随之移动。所以我不得不打开和关闭“Partition Face with Sketch”和所需的块数一样多次。

选项2:“草绘器”窗口的原点保持在同一位置(即0.0,0.0,0.0),并且块以递增方式向右推动。与选项1相比,此处块相对于原点的相对位置在每个增量上改变。此处,“分区面与草图”打开并关闭所需的块数。

选项3:我只打开了一次“带草图的分区面”并且原点停留在同一个地方。然后我用“for”循环绘制所有这些水平和垂直线,得到最后的分区面。

所有这些方法都很完美,但非常耗时。这些方法中的每一种都需要大约8-12分钟来完成所有块的生成,因此不适合进行收敛性研究。

任何人都可以提出更好的解决方案,让整个过程更快,比如3-4分钟左右?真的很感激。提前谢谢。

编辑:这是代码人员:

# The arguments of the function "block" are the x and y coordinates of the  
# 4 corners of the rectangle where the blocks have to be generated in.
def block(x_left, x_right, y_top, y_bottom):

    # Opens the sketcher window
    p = mdb.models['TDCB'].parts['Part_TDCB']
    f, e, d = p.faces, p.edges, p.datums
    t = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(x_left + ((x_right - x_left) / 3), y_bottom + ((y_top - y_bottom) / 3), 0.0), 
    normal=(0.0, 0.0, 1.0)), sketchPlaneSide=SIDE1, origin=(x_left, y_bottom, 0.0))             
    s = mdb.models['TDCB'].ConstrainedSketch(name='__profile__', sheetSize=500.00, 
    gridSpacing=12.00, transform=t)
    g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints
    s.setPrimaryObject(option=SUPERIMPOSE)
    p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)


    # The following block generates the first couple of horizontal lines 
    s.Line(point1=(block_width, 0.0), point2=(block_width, y_top))  # Line No.1

    s.Line(point1=(0.0, y_coord[-2]), point2=(block_width, y_coord[-2]))  # Line No.2

    s.Line(point1=(0.0, y_coord[-3]), point2=(block_width, y_coord[-3]))  # Line No.3

    s.Line(point1=(0.0, y_coord[-4]), point2=(block_width, y_coord[-4]))  # Line No.4

    s.Line(point1=(0.0, y_coord[-5]), point2=(block_width, y_coord[-5]))  # Line No.5

    s.Line(point1=(0.0, y_coord[-6]), point2=(block_width, y_coord[-6]))  # Line No.6

    # Closes the sketcher window
    p = mdb.models['TDCB'].parts['Part_TDCB']
    f = p.faces
    pickedFaces = f.findAt((x_left + ((x_right - x_left) / 3), y_bottom + ((y_top - y_bottom) / 3), 0.0))                     
    e1, d2 = p.edges, p.datums
    p.PartitionFaceBySketch(faces=pickedFaces, sketch=s)
    s.unsetPrimaryObject()
    del mdb.models['TDCB'].sketches['__profile__']    

    return

# Finally the blocks are generated using a "for" loop
for i in range(total_blocks):
    block(x_left, x_right, y_top, y_bottom)

1 个答案:

答案 0 :(得分:0)

看起来你不必像在ABAQUS Sketch中那样迭代草图绘制过程,你可以使用线性模式来复制/复制初始草图(左侧的第一个块)。这可能使整个过程更容易。感谢。

此致 龙杰