二维DFN计算RQD的修正方法---软件问题还是方法有误?

二维DFN计算RQD的修正方法---软件问题还是方法有误?的图1

1 引言

在【答复同学提问---如何在离散断裂网络DFN中计算RQD指标】中描述了在二维DFN中计算RQD的方法和步骤,当时由于时间仓促,没有仔细检查代码,回头验证时才发现这个代码不能正确计算出RQD值,出错原因不在那段代码的思路和算法,而是UDEC软件本身引起的数据问题。本文首先讨论了出现的这个百思不得其解的问题,然后给出了一种临时解决办法。

2 出现的问题

计算RQD的基本思路为:(1)求出钻孔线与DFN的交点;(2) 计算交点之间的长度,包括钻孔起点与终点;(3) 累加两点之间距离大于0.1m的长度, 然后除以钻孔线总长度即可得到RQD值。

二维DFN计算RQD的修正方法---软件问题还是方法有误?的图2

按照这种思路,后一点的坐标顺序减去前一个点的坐标,就可得到两点之间的距离。然而问题就出现在这儿,交点坐标本应该按照从左到右的顺序依次排列,但在某些点不知什么原因出现了顺序颠倒,至今没有查找出出现这个问题的原因。开始以为是UDEC软件的问题,结果在PFC中测试发现存在同样的问题。具体问题表现在:

(1) 断裂数N=20时,有1个交点,钻孔坐标值域[-1,0.26,1],Ok;

(2) 断裂数N=30时,有3个交点,钻孔坐标值域[-1,-0.46,0.11,0.27,1], OK;

(3) 断裂数N=40时,有5个交点,钻孔坐标值域[-1,-0.54,-0.21,-0.46, 0.11,0.27,1]; 开始出现问题了,-0.46本来应该排在-0.21的前面,这样才能进行正确的顺序递减,但不清楚软件为啥把这个顺序颠倒了;

(4) 断裂数N=80时,有9个交点,钻孔坐标值域为

[-1,-0.82,-0.61,-0.53,

-0.21,-0.46,

0.11,0.26,

0.85,0.72,1]

可以看出,在这种情形下,出现了两处顺序排列颠倒的地方。先前的代码由于没有意识到这个问题,认为顺序自动由小到大排列,导致不能得出正确的结果。

3 解决方法

解决方法其实很简单,即在计算交点之间的长度之前,把程序自动求出的交点列表进行排序,由小到大顺序排列,然后再进行计算,为此对代码作了如下修正:

(1) 使用了Itasca Python模块(RQD-Calculation.py),尽管用FISH也能完成这个任务,但我使用Python更顺手一些;

(2) 用list函数代替了原代码的map函数,使得数据操作更方便;

(3) 代码改在PFC中运行,但在UDEC中运行应该也一样。

这是一个为了特定存在问题的解决方案,但究竟是软件本身引起的问题,还是使用的方法有误,至今我想不出原因。Anyway, 问题解决了。

4 代码验证

现在,经过修正的代码能够正确地计算出RQD的值。

二维DFN计算RQD的修正方法---软件问题还是方法有误?的图3

5 主要函数

RQD-Calculation.py使用的主要函数包括:

(1) fracture.intersect.num

(2) fracture.intersect.find

(3) fracture.intersect.pos1

(4) comp.x

(5) list.seq

(6) list.append

(7) list.sort

(8) it.fish.get

(1条)
默认 最新
写的太有用了!请问有没有连通率的相关模拟或代码?
评论 点赞
点赞 评论 1 收藏 1
关注