PFC中流固耦合目前有两种方法,一种是使用PFC自带的CFD模块,这种方法建模简单计算快,但是只考虑了流体对颗粒的影响,没能考虑颗粒对流体的影响,所以一般称之为单向耦合。
今天介绍一种利用Python的Fipy库在PFC内实现双向流固耦合,即既考虑流体对颗粒的影响也考虑颗粒对流体的影响。本文使用的为PFC自带的darcy.py案例进行修改。
首先看几张效果图
PFC内生成的流体网格 | 流体的流速场 | 颗粒运动场 |
下面来看具体的实现过程
由于Fipy库的函数只能生成方形区域,而在实际应用中区域往往是不规则的,Fipy是支持从外部导入网格,但是却只支持导入Gmsh的网格。当我们满心欢喜的把Gmsh网格导入Fipy的时候,会遇见报错,提示Gmsh版本必须大于等于2.0。后面经过各种查找资料,我确认使用Gmsh划分网格这条路已经走不通了。万幸我们学校研究生课程有有限元的相关必修课,于是不得不捡起一年前学的Abques,利用Abques划分网格,之后通过Python的meshio库将Abques的inp文件转成Gmsh的msh文件,并通过可视化工具查看了导入Fipy中的效果图。
Abques单元 | Fipy单元 |
此外由于Fipy中单元节点编号混乱,我们不能直接将Fipy中的流体单元转化成PFC中的CFD单元,还需使用“是要早起的钻钻”大佬编写的MATLAB程序把Abques的节点坐标信息和网格节点编号信息转化成PFC可读取的文件。至此,我们的网格就成功生成。
目前已经可以实现粗粒土渗流实验数值模拟,基坑渗流模拟,再结合PFC其他案例还可以实现注浆模拟。大家可根据自己的需求自行修改代码。
如需全部代码也可私信联系我