1 引言
昨天晚上有位同学问了一个问题,如何实现在离散断裂网络DFN中计算RQD【Deere's RQD---现代岩体工程分类方法的基石 (Part II)】,他已经给出了计算思路,如下图所示:(1) 使用geometry生成钻孔;(2)计算钻孔与DFN之间的intersection;(3) 把钻孔分为三个计算分区:端部1[fracture.intersect.end1]、中部和段部2[fracture.intersect.end2],分别计算三个分区大于10cm的长度,然后即可得到RQD的值。
早上起来之后琢磨了这个问题,步骤(1)和(2)与他给的计算思路相同,但在计算每段长度上使用了与(3)和(4)不同的方法。我没有使用PFC,在UDEC中作了一个非常仓促的测试,但是代码应该基本上通用。下面简要说一下我的计算思路,供这位同学和其他感兴趣的同学参考使用。
2 RQD计算过程
(1) 生成钻孔:
geometry set 'borehole'
geometry edge create by-position (-1,0) (1,0)
上述代码产生一个长度2m的水平钻孔,我不记得在哪篇公 众 号文章中提到过,计算RQD的最大取样长度不应超过2m。
(2) 产生DFN
fracture generate fracture-count 50
使用默认的模板产生50条随机断裂。
(3) 计算相交点
fracture intersection compute ...
with-geometry 'borehole' intersection-set 'frac_bh'
钻孔与DFN共有7个交点。
[number_of_fracture_intersections = fracture.intersect.num]
(4) 计算交点之间的距离
与这位同学给出的思路稍有不同,我没打算分区,而是计划直接在代码中进行判断。使用
fracture.intersect.find( )获取交点的指针,然后使用fracture.intersect.pos1( )获取交点的坐标,由于纵坐标为0,因此只用comp.x()获取x坐标即可。通过两个点的坐标相减即可计算出两点之间的距离,然后判断长度dis是否大于0.1,如果大于0.1,那么把这个距离储存在数组map()中【FISH: 使用MAP数组实现loop foreach】,循环计算7个交点之间的距离,最后计算并判断最后一段距离。这个过程的代码如下图所示:
最后用大于10cm的长度总和sum除以钻孔长度2m,即可求出RQD的值。
3 结束语
上述过程简要概括了在DFN中计算钻孔的RQD,由于边写本文边敲代码,代码写得完全不规范,仅用于临时测试,但已经给出了具体思路和需要使用的函数,基本上免费回答了这位同学提出的问题。此外,FISH语言在数据储存和操作上不够灵活,以后将用Python重新写一个通用的计算RQD的程序,以适应不同的钻孔方向。与DFN相关的公 众 号文章 Top 20如下所示,供扩展阅读。