首页/文章/ 详情

PFC2D itasca.dfn无属性的解决方法

9月前浏览3370

1. 问题的提出

有同学报告说PFC2D不能使用itasca.dfn,会出现itasca模块没有dfn属性的错误信息。他使用的版本为PFC2D V7.00.159,为了验证这个错误信息,使用PFC2D V9.00.164进行了试验,结果发现确实会产生同样的错误信息,如下图所示。

2. 解决方法

起初以为这可能是PFC2D的一个bug或者是由于某种技术原因故意去掉了这个功能,实际情况是在PFC2D启动时没有自动加载这个模块,解决方法是通过菜单Tools>Plugins打开Plugins窗口,选择"Engine>module",加载module2ddfnpython009.dll即可。

不过确实不明白为啥不在PFC2D启动时自动加载这个module,或许是故意设计的,或许是不小心漏掉的。
另一种变换的解决方法是先用FISH语言获取变量,例如:

[dfn_num = dfn.num]

然后,如果要在Python中使用这个变量,使用fish.get函数获得,例如:


total_dfn_number = it.fish.get('dfn_num')


3. DFN FISH函数
DFN模拟可分为两个层次:DFN在DFN水平上操作,Fracture用来操作DFN内的断裂。下面简要讨论了DFN层次上的操作函数。

在7.0版本中,DFN FISH共有22个函数;在9.0版本中去掉了与group相关的3个函数,这3个函数分别是dfn.group,dfn.group.remove和dfn.isgroup。此外UDEC没有如下三个函数:

  • dfn.contact.list(D_PNT<,INT>); 

  • dfn.contact.list.all(D_PNT<,INT>);

  • dfn.prop(D_PNT,STR)

下面按照函数的功能以及传递的参数值对DFN FISH函数进行了分类。这样的分类比直接按照字典顺序给出更容易理解和掌握。当产生一个DFN后,便可以使用这些函数对DFN进行操作。


fracture generate dfn 'p1' fracture-count 100

(1) 寻找指针

UDEC和3DEC的数据都是以链表结构储存的,因此为了操作DFN中的数据,首先需要获得DFN的指针,指针通过dfn.find(ad)函数获取,ad为DFN的名称或者ID, ID的索引从1开始。


(2) 不需传递参数的断裂类型,ID和数量

有三个函数不需要任何传递参数,它们是:

[1] dfn.maxid 获得最大的DFN ID值。当模型有多个DFN组成时可以获取最大的ID值,如果只有一个DFN,那么返回值是1.

[2] dfn.num 获取模型中DFN断裂的总数量。在实际建模时,这个函数比较有用,可以用来查看模型的规模。

[3] dfn.typeid  获取DFN的类型号。类型ID可以用来唯一地识别DFN FISH的指针,并将其与任何其他类型的FISH指针区分开来。这个函数的返回值是整形。


(3) 不需传递参数的列表

还有一个不需要传递任何参数的函数是dfn.list,这个函数用来获取全局的DFN列表。使用loop foreach结构迭代该列表。


(4) 不需要指针的函数

有两个函数需要传递参数但不需要指针,第一个函数是上面提到的dfn.find,需要传递的参数或者是DFN名称,或者是DFN ID,第二个函数是dfn.create(<ID>,<s>),这个函数用来在FISH内创建一个DFN。这个DFN是空的,它的dominance值被设置为下一个可用的dominance(参见fracture contact-model命令和dfn.dominance)。这两个值都可以不填写,系统会赋默认值。如果不指定ID或s,则选择下一个可用的ID,名称设置为dfnXX,其中XX为ID。


(5) 仅使用指针的函数

下面这些函数必须并且唯一传递的参数是DFN指针。

[1] dfn.delete(D_PNT): 删除一个DFN, 使用这个命令后,所有的断裂和相应的交叉点都被删除。

[2] dfn.fracturelist(D_PNT): 获得指定的DFN的断裂列表。使用loop foreach结构迭代该列表。从架构上看,dfn.list处在这个函数的上层。

[3] dfn.dominance(D_PNT): 获取/设置DFN的dominance。参看(4)的说明以及(fracture contact-model)命令。这个函数是双向的,既可以获取也可以赋值。

[4] dfn.id(D_PNT): 获取指定的DFN ID, 如果只有一个DFN,那么ID=1.

[5] dfn.name(D_PNT): 获取DFN的名称。

[6] dfn.fracturenum(D_PNT): 获取指定DFN的断裂数量,dfn.num获取的是整个模型的断裂数量。

[7] dfn.template(D_PNT):   获取用于生成此DFN的断裂模板。如果在生成后有任何断裂被修改,返回值将是0。


(6) 使用指针和其它参数的函数

下面这些函数必须使用指针,但可以传递其它的参数。

[1] dfn.contactmap(D_PNT<,INT>): 获取与一个指定DFN相关的活动接触。可选择的接触类型ID用来过滤返回的接触。 

[2] dfn.contactmap.all(D_PNT<,INT>):与上面的函数类似,获取与一个指定DFN相关的所有接触,包括那些不活动的接触。 

[3] dfn.extra(D_PNT<,INT>):双向函数,获取或设置一个DFN的额外变量。

[4] dfn.group(D_PNT<,STR>): 双向函数,获取或设置DFN组名。返回值是字符串,如果没有设置组名,那么返回值是"Null"。

[5] dfn.group.remove(D_PNT,STR):移除DFN组, 指定的组名将从所有组槽中删除。

[6] dfn.isgroup(D_PNT,STR<,STR>):指出DFN组的状态。

来源:计算岩土力学
ACT断裂UGpythonUMPFC试验
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-01-12
最近编辑:9月前
计算岩土力学
传播岩土工程教育理念、工程分析...
获赞 143粉丝 1036文章 1776课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈