1 引言
相同的数据在二维模型中生成的DFN与在三维模型中生成的DFN结果是完全不一样的。原因是
block to-udec origin 0,25,0 dip 90 dip-direction 0
下图所示的是相同数据生成的300条断裂2D 和3D DFN模型。这个笔记简要讨论了二维模型和三维模型倾角近似等效的方法,也许这种方法并不具有实际意义。
2 等效方法
对于一个生成的3D DFN模型,我们可以求出这个模型中所有断裂的平均倾角,这可以通过编写一个简单的FISH程序来实现,对fracture.list进行遍历,把每条断裂的倾角相加,再除以断裂总数,就可以得到整个模型断裂的平均倾角,例如得出的平均倾角为54°。
相同的模型在2D中运行,为了与3D模型得出的倾角相同,第一个过滤准则是只保留那些倾角小于90°(fracture.dip(frac)<90)的断裂,第二个过滤准则是保留那些倾角在54°左右的断裂,一个更精确的方法是在3D中求出倾角的平均值和标准偏差,然后在2D中使用这个值。这样就可以在2D中作出一个仅倾角近似3D的DFN模型。
3 断裂数目
在生成2D DFN的过程中,为了与3D生成的断裂数目相同,需要用到断裂数目的判断方法。有三个不同层次的判断断裂数目的函数。dfn.num返回整个模型的DFN数目,不是断裂数目;dfn.fracturenum(PNT)返回指定DFN内的断裂数目; fracture.num返回整个模型的总断裂数。
4 UDEC的一个小Bug
在试验上述模型的过程中,无意中发现了UDEC的一个小bug, 当取出一条断裂的倾角时,计算本身没有问题,但在FISH变量的显示面板中,无论如何改变断裂的ID,那个值始终不变。
[fp = fracture.find(5)]
[fdip = fracture.dip(fp)]
[io.out(fdip)]
我相信这是软件的一个Bug, 但为啥显示的是这条断裂的倾角,而不是其它断裂的倾角,目前还不知道是啥原因。
5 UDEC不能使用先进的遍历算法
在上述试验过程中,也发现UDEC目前还不能使用新的遍历算法,只能使用loop foreach。
define find_dip
sum = 0
loop foreach fp fracture.list
fdip = fracture.dip(fp)
io.out(fdip)
sum = sum + fdip
end_loop
新的循环算法只使用一句代码,目前在3DEC,FLAC3D和PFC 7.0 中能够使用,但还没有改进到UDEC中。
[fdip = fracture.dip(::fracture.list)]
6 3DEC新的改进(7.00.144)
刚刚看到3DEC 7.00.144 (12/02/2021)出来了,简要描述新版的改进之处。
(1) 增加了range jmodel 命令。我怎么记得早期的版本就有这个命令呢。
(2)增加了使用FISH函数获取有限元高斯点的数据,这个功能是为了从外部有限元程序导入网格。
(3) 修正了在所有自由度不固定的情况下用刚性块求解的问题。
(4) 修正了DFN与几何体相交的计算。
(5) 修正了block dynamic eigen命令。
(6) 修正了命令转换工具。
(7) 修正了删除已开挖和填充的块。
(8) 修正了子接触绘图命令。
(9) 修正了block.face.next fish函数。