2016-07-28 194 views
0

我的目标是在一个参数化模型的长矩形区域上获得过渡映射的四边形网格划分。最终网格可以被视为如下:通过脚本在ABAQUS中使用Sketch划分面部的更快方法

Transition Mapped Quad Meshing

我能实现该最终输出网格的唯一途径是在脸上用草图,然后分区,使用关于相应边缘足够网格控制和播种。出于这个原因,我开始与在这样的几何结构的左手侧生成块:

Single block created by partioning the face with sketch

此后,“for”循环中从左侧运行Python脚本被用来长方形脸最右边的结束和最终划分脸看起来是这样的:

Final geometry ready to be meshed

所以,我想在三个方面这样做。

选项1:在左侧使用findAt放置草绘器窗口,然后生成该块并使用“for”循环将草绘器窗口的坐标系原点逐渐向右逐渐增加到最右边最右边。换句话说,块相对于原点的位置始终保持相同,因此,当原点从左向右移动时,块随之移动。所以我必须按照所需块的数量打开和关闭“带素描的分区面”。选项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) 
+0

也许表明你的代码的一个例子将是有益的。 – agentp

+0

您可以在一幅草图中制作所有线条,然后一次分割?不需要多个步骤。此外,从大到小的混乱网格有什么不对?它不一定像你所展示的那样整洁。 – will

+0

@威尔:这是一个非常有用的提示。我会尝试一下。非常感谢..关于转型,这实际上是我的主管想要的,因为以前的模型是由另一个具有相同转变的人生成的。 –

回答

0

看来你不必重复在ABAQUS素描草图,你可以使用线性阵列复制的过程/复制最初的草图(第一阻止在左侧)。这可能会使整个过程更加简单。谢谢。

问候, 王龙杰

+0

这是一个非常有价值的建议,与我一直在做的事情截然不同。我会试试看。非常感谢.. –