1. 引言
在3DEC的背景下,Faceblocks本质上是一个在3DEC模型每个外部面上创建的二维三角形块体,它用于促进块体之间的接触检测和力计算。Faceblocks允许更复杂的几何形状,尤其是在处理凹形(concave)块时,因为它们通过在相互作用过程中仅集中于faceblocks进行计算,从而提高了计算的效率,而不是对整个块体进行计算。当导入复杂的块体几何形状(Importing and Merging),特别是那些可能不是凸形(convex)的块时,Faceblocks会自动添加,以确保块体之间的接触检测正常工作。添加Faceblocks会增加一些内存和计算开销,但显著提高了计算的准确性和效率。总之,Faceblocks在处理3DEC模拟中复杂块的相互作用时至关重要,确保有关力和接触的计算是有效的。
要在3DEC中有效使用Faceblocks,按照以下步骤操作:
(1) 创建模型:首先创建块体模型,最常用的通过'block create'命令并配合各种选项,生成所需形状的块体。
block create brick
block create drum
block create polyhedron
block create group
block create prism
block create tetrahedron
block create tunnel
block create wall
(2) 启用合并:如果几何体是包含凹形特征的复杂形状,则在创建块体之前使用'block merge-start'命令,这将允许后续将块体合并成为单元。在执行此命令后,所有随后创建的四面体块将被转化为单元,并在共享相同组名称的情况下合并为一个单一的块。组槽名称可以通过's1'指定。如果没有指定槽,则使用默认槽。如果块在指定的槽中没有被分配组名称,则它们将不会被合并。可以使用关键字'Exclude'来排除一个或多个组的合并,并提供组名称(如's1 s2 …')。
(3) 生成块:在几何上定义完块后,使用'block zone generate'生成单元。如果块体是非凸的,则会在这些块的每个三角形面上自动创建faceblocks,以便促进接触和力计算。
(4) 完成合并:在创建完所有块和单元后,使用'block merge-finish'命令完成合并过程,这将确保faceblocks为接触检测适当设置。在完成创建要合并为单元的块后执行该命令将为每个暴露的块面添加faceblock。
(5) 利用FISH函数:可以编写FISH脚本与Faceblocks进行交互。例如,可以使用 'fblock'命令查询Faceblock的特定属性,这增强了有效分析和操作模型的能力。
fblock.contact(FB_PNT)
fblock.excavated(FB_PNT)
fblock.face(FB_PNT)
fblock.find(INT)
fblock.fromindex(FB_IND)
fblock.gplist(FB_PNT)
fblock.group(<,STR/IND>)
fblock.group.remove(,STR/IND<,STR/IND>)
fblock.head
fblock.hidden(FB_PNT)
fblock.hostblock(FB_PNT)
fblock.hostface(FB_PNT)
fblock.index(FB_PNT)
fblock.isgroup(,STR/IND<,STR/IND>)
fblock.list
fblock.next(FB_PNT)
fblock.pos(FB_PNT)
(6) 可视化和分析:在用Faceblocks设置模型后,渲染模型以可视化结构,并检查是否存在任何差异或需要调整的地方。
通过将Faceblocks集成到建模过程中,可以显著提高3DEC模拟中接触交互的计算效率和准确性。
如上所述,将块体转化为单元时,会在组间的每个三角形面上添加faceblock,以便进行接触检测和力计算。这样,就可以创建具有凹面块的模型。此外,merge块体方法比join块体方法运行速度快。如下图所示从Griddle中导入的块体合并后只有3个块体,每个块体包含众多单元。
block merge-start
program call 'Griddle-coarse'
block merge-finish
block contact generate-subcontacts