在3DEC中,子接触(subcontacts)是块体之间接触面相互作用的离散点,子接触是在模型中两个块体相互接触的地方创建的,每个接触面会自动划分为若干个点,这些点称为子接触。子接触用于表示计算力和位移的位置,每个子接触可以跟踪不同的破坏状态,例如剪切或拉伸,使模型能够评估块体在加载和变形时的响应。
(1) 顶点到面(Vertex-to-Face):将一个块体的顶点与另一个块的面连接起来。
(2) 边到边(Edge-to-Edge):连接相互作用块体之间的边。
子接触在计算力学行为,如滑动、拉伸和压缩中不可缺少,这些行为依据定义的力学模型(例如Mohr-Coulomb、节理模型)进行,这使得在各种载荷条件下模拟复杂的块体相互作用成为可能,接触类型决定了在相互作用块体之间如何计算力和位移。在模拟过程中,子接触的状态可以根据加载条件和分配给块体的属性而动态变化,从而实现对块体行为的全面分析。
4. block contact generate-subcontacts命令
对于刚性块,必须在指定节理属性之前使用block contact generate-subcontacts命令生成子接触。此命令对块曲面进行三角化,并在三角形顶点处添加子接触。每个接触必须有多个子接触来抵抗块体旋转。默认情况下,面将被三角化以生成最小数量的子接触。在执行此命令之前,可以使用block face triangulate命令增加子接触的数量。
block contact generate-subcontacts
block contact prop stiffness-norm=1e9 stiffness-shear=1e9 friction=89
当模型使用的是可变形块,并且块体被划分成单元(block zone generate)时,将自动生成子接触(Subcontacts)。并且已给出块区域生成命令来创建区域,则此步骤不是必需的。
(1) 一般情况下,在单元生成结束时会自动产生子接触,但如果单元生成失败,则需要在分配节理属性之前手动执行此操作,使用下面的命令产生子接触
block contact generate-subcontacts
(2) 当进行充填模拟时,使用下面的命令在充填块体和开挖块体之间产生子接触
model cycle 0
block face triangulate命令的作用是对刚性块的面进行三角化,以增加面上的顶点数。如果未提供关键字,则创建最小数量的三角形。可以附带3个关键字:
(1) edge-max f 将最大边长度设置为 f (maximum edge length)。这个值设置的太小的化,会出现错误信息:buffer overflow in UCP (increase NVMAX1)[缓冲区溢出];设置的大的化,会出现错误信息:Error in csetfadj, face not found in block 31[找不到面]
(2) radial 向所有面添加一个中心顶点。
(3) radial-8 向所有面添加中心顶点和中边缘顶点。
在《Calculation of Natural Frequencies and Modes of Vibration》中,为了更准确地表示弯曲行为,在模型中的刚性块之间添加了子接触,通过block face triangulate radial-8命令实现,该命令在两个刚性块之间添加一个中心顶点和4个中边缘顶点,总共有9个点接触。这改进了弯矩的计算(参看Lemos 2007)。
block face triangulate radial-8
block contact gen-sub
; --- properties ---
block prop dens 2500
block contact jmodel assign el
block contact prop stiffness-normal 1e9 stiffness-shear .4e9
6. block update命令
在大位移运行中(model large-strain on),当相关的顶点穿过了另一个块体的面边界时,程序自动重新定位每个子接触,默认情况下,子接触点的位置和权重每10个时步更新一次,同时检测新的子接触和子接触类型。如果删除一个块体,则重新分配子接触,以确保相邻状态之间的平稳过渡,详细论述参看《Background - the 3D Distinct Element Method》。
block update命令用来设置循环期间的更新频率。有3个关键字:
(1) common-plane i 设置每 i个循环更新公共面位置(默认值为10)。
(2) subcontact i 设置每i个循环搜索新的子接触(默认值为 100)。
(3) face-normal i 设置为每 i 个循环更新面的法向(默认值为每10个循环更新一次)。
如果不想更新子接触,使用命令block update subcontact 0,参看《Finite Element Dam》。降低subcontact i的值,可能解决块体fall through的问题。另一方面,也可以尝试减小时步。
7. 绘制子接触
在3DEC中,节理破坏与子接触相关,不过由于子接触是以点而不是以线表示,因此需要采用FISH函数首先对接触进行分组,然后根据组名绘制节理的破坏,使用的FISH函数包括:
(1) block.contact.list
(2) block.contact.subcontact
(3) block.subcontact.state
(4) block.contact.group
8. 结束语
本文讨论了3DEC的子接触,block contact generate-subcontacts命令用于生成刚性块体的子接触,必须在指定节理属性之前使用。block face triangulate命令用于对刚性块表面进行三角化以增加顶点数。block update命令用于在循环期间设置更新频率。这些命令可用于提高计算精度和排除一些错误信息。最后,通过子接触的FISH函数可以绘制其破坏状态。