☰
摩擦桩压拔试验数值模拟:PFC离散-连续耦合与网格法制样全解析
2026/10/15 6:12:46 网站建设 项目流程

摩擦桩的压/拔试验,如果只看结论,很多人以为就是把一个桩往土里压一压、往外拔一拔,把荷载–位移曲线画出来就完了。然而真正做数值模拟时你会发现,纯离散元算到后期颗粒数量爆炸、计算慢到怀疑人生;纯有限元又讲不清桩侧土体的应力重分布和局部破壤过程。于是PFC 6.0/7.0的离散–连续耦合就成了兼顾精度与算力的常规打法,配合划分网格法制样,刚好像样地把室内试验或现场静载试验在计算机里复现出来。这篇文章就把我在这类模拟里的完整思路、参数选取、版本差异和踩坑记录一次说清楚。

1. 摩擦桩问题为什么需要离散–连续耦合而非"一根筋"的纯模型

1.1 摩擦桩的受力本质决定了单一数值方法的局限

摩擦桩和端承桩最大的区别在于,它的承载力主要靠桩周土体沿桩侧的剪切抗力来提供。这个剪切过程不是简单的"摩擦系数乘以正应力"就能线性概括的:土颗粒会在桩侧形成一个很薄的剪切带,颗粒发生翻滚、重排列、局部破碎,剪胀效应导致桩侧有效应力随位移不断变化。端部区域更是如此,桩端土体在大位移下可能发生整体剪切破坏或局部冲剪破坏,应力路径极其复杂。

这些行为用连续介质方法描述时,往往依赖复杂的本构模型(比如硬化塑性与软化塑性的组合),而且参数标定困难,对网格敏感性很敏感。反过来,离散元能天然呈现这些细观行为,但代价是计算量巨大:一个真实尺寸的桩周土体,如果颗粒直径取 2 mm,三维模型动辄上千万颗粒,普通工作站根本跑不动。

1.2 三种方案的实用对照

我做过不少横向对比,这里把纯离散元、纯有限元和离散–连续耦合的定位列个表,方便大家按项目需求对号入座:

方案桩侧剪切带刻画计算规模边界条件处理推荐场景
纯离散元(PFC)好颗粒数量大、计算慢需要设人工边界,可能产生边界反射机理研究、小尺寸模型、参数标定
纯有限元(FDM/FEM)依赖本构模型计算快天然适合无限元/远场边界沉降预测、大规模群桩
离散–连续耦合近场细致、远场简洁介于两者之间耦合面需要精心处理单桩/群桩静载试验、桩土界面破坏分析

所以我会在客户项目里优先推荐耦合方案:靠近桩体的"近场"区域保留离散元,让颗粒真实地参与剪切带演化;远离桩体的"远场"用连续网格承接弹性响应,提供远场位移边界。PFC 6.0/7.0里实现这个过程有两条路,一条是外接连续介质求解器做联合仿真,另一条是直接用 7.0 自带的内嵌 zone 功能做耦合,第 4 章会详细拆。

提示:耦合不是万能的。如果你的目标只是估算单桩极限承载力的大概量级,纯有限元加一个好的接触面本构可能已经够用。离散–连续耦合的价值在于解释"为什么"——为什么侧阻是渐进发挥的、为什么拔桩后摩阻力衰减那么快。

2. 网格法制样:从颗粒均匀分布到可控孔隙率的关键流程

2.1 制样这一步为什么常被跳过

我见过不少新手拿到 PFC 的第一反应是:直接画个矩形区域,随机撒球,然后加载。结果算到一半发现试样里有大块空洞,或者局部孔隙率忽高忽低,桩侧摩阻力分布波谲云诡。更常见的是,用半径放大法生成的试样初始应力就很不均匀,伺服压了半天还是没达到目标围压。

划分网格法(也叫格点法、网格映射法)就是为了解决"均匀性"和"可控性"这两个问题。它的核心思想很简单:把目标土体区域划分成规则网格,每个网格单元内按照预设的粒径分布生成颗粒中心点,然后用随机扰动避免骨架过于规则化。这样颗粒在空间的分布密度可控,孔隙率的空间波动小,特别适合需要沿深度分层统计摩阻力的情况。

2.2 划分网格法的实操步骤

以三维摩擦桩模型为例,我常用的流程如下:

  1. 确定区域尺寸:桩周近场区取桩径的 5~8 倍,深度取桩长的 1.5~2 倍;这个范围既要保证剪切带完全发展,又不让远场边界过早影响应力状态。
  2. 确定粒径:先定 d50(中值粒径),再按级配区间生成。颗粒数估算可以用区域体积除以单颗粒平均体积再除以目标密实度,先粗估再微调。
  3. 划分网格:按网格间距等于 d50 的 1.5~2 倍来划分,每个单元生成一个颗粒,位置加 ±10% 的随机扰动。
  4. 压到目标孔隙率:生成后孔隙率往往偏高,用伺服边界逐步压密到目标值。
  5. 平衡试样:关闭重力或施加折减重力,先让系统在无重力条件下达到初始平衡,再施加目标围压。

我给出一个 PFC 7.0 风格的示意代码,重点是演示网格法的循环逻辑:

# PFC 7.0 网格法制样示意(伪代码,API 以实际版本为准) region_height = 2.0 # 区域高度 m region_width = 1.0 # 区域宽度 m grid_num_x = 50 grid_num_y = 100 dx = region_width / grid_num_x dy = region_height / grid_num_y d50 = 0.02 # 中值粒径 m import random random.seed(42) for i in range(grid_num_x): for j in range(grid_num_y): x = dx/2 + i * dx + random.uniform(-0.1, 0.1) * dx y = dy/2 + j * dy + random.uniform(-0.1, 0.1) * dy r = d50/2 * random.uniform(0.8, 1.2) ball.create((x, y, 0), radius=r)

如果你用的是 PFC 6.0,通常是用 FISH 写同样的循环,代码结构会类似,但函数名和 API 位置差异很大。PFC 7.0 对 Python 内建支持更好,我强烈建议新项目直接上 7.0,不要再用 6.0 写新脚本,后面会详谈。

2.3 制样参数标定中容易忽略的两个点

很多人在 d50 和孔隙率上很较真,却忽略了"颗粒刚度"和"初始摩擦系数"对标定结果的影响。摩擦桩模拟里,颗粒刚度决定土体宏观弹性模量,而这就直接决定桩在弹性阶段加载时,桩顶位移和实测曲线能不能对得上。我的经验是先用双轴试验或者三轴试验虚拟标定出一组参数(杨氏模量、峰值摩擦角、剪胀角),再正式建立桩模型,不要上来就调桩的接触参数。

第二点是"网格法生成后的孔隙率空间分布"验证。生成完颗粒后,建议用测量圆(measure circle)覆盖整个试样,逐一记录每个测点的孔隙率,画一个孔隙率云图。如果某些区域偏差超过 ±0.02,说明网格间距或随机扰动设置有问题。这个检查一分钟就能做,但能省掉后面调试摩阻力分布好几个小时。

3. 压桩与拔桩的模型搭建:桩体、接触与加载机制一次性说清

3.1 桩体建模的三种方案选择

在 PFC 6.0/7.0 里模拟桩,最常用的有三种方式:刚性墙体(wall)、刚性颗粒簇(clump)、连续区(zone)。选哪种,取决于你要分析桩体本身还是桩土界面:

建模方式优点缺点适用场景
wall 杆件/圆柱面简单、接触力统计方便无法考虑桩身弹性压缩只关心桩侧摩阻力的机理研究
clump 刚性簇桩端形状可自定义,模拟压桩过程稳定桩身仍是刚性,无法输出轴力沿深度的变化静压桩贯入过程
zone 连续介质桩身变形真实,能提取轴力、弯矩接触面设置复杂、计算量略大需要桩身内力分布的工程案例

我做摩擦桩压/拔试验模拟时,如果目标是复现静载试验的 Q-s 曲线,通常用 zone 或者 clump;如果只为了研究桩侧剪切带的细观演化,用 wall 就够了。这里的关键是:无论选哪种,都要在桩土之间设置一个独立的接触组,方便后续统计切向力。

3.2 桩土界面接触参数:摩擦系数和刚度匹配

桩土界面我用的一直是线性接触模型(linear contact),不启用任何粘结。原因很简单:摩擦桩界面本来就不应该存在拉应力,拔桩阶段如果界面带 bond,桩会被"粘住",拔出来的峰值力严重偏大。

接触参数有三个核心值:法向刚度 kn、切向刚度 ks、摩擦系数 μ。其中 kn 和 ks 的取值要和颗粒刚度在同一个数量级,而不是越大越好。我见过很多案例把 kn 调到颗粒刚度的 100 倍,结果时间步急剧缩小,计算慢还不收敛。实践上推荐取颗粒等效刚度的 1~10 倍,再结合试算调整。摩擦系数 μ 则根据桩土界面材质,室内试验通常取 0.3~0.6;注意 PFC 里的 μ 是颗粒层面摩擦角的正切值,不要和宏观桩土界面摩擦角直接划等号,需要标定。

3.3 压桩与拔桩的加载机制差异

压桩和拔桩在 PFC 里最大的区别不是方向,而是桩端和桩侧接触状态的变化。

压桩时,桩端接触始终存在,端阻力随贯入不断增长;桩侧摩阻力则经历"弹性积累→局部滑移→残余稳定"的过程。拔桩时,桩端离开土体,一部分颗粒会回弹填补桩端留下的空隙,端阻力几乎瞬间消失,全部荷载由侧阻承担,并且随着上拔位移增大,桩周土体出现松动区,摩阻力会软化。

加载机制上,我推荐用"位移控制"而非"力控制"。具体做法是给桩体施加一个恒定的小速度向下或向上运动,同时记录桩顶反力。速度不是越大越好,需要满足准静态条件。最简单的判断标准:加载过程中系统动能占比稳定在一个很小值(比如总能量占比低于 1%),如果颗粒群一直处于剧烈振动状态,说明加载速度太快,要降速。

另外,模拟顺序也很讲究。钻孔灌注桩的模拟,我会先成孔,再放入桩体,然后重新平衡,再进行加载;静压桩则直接把桩压入颗粒体中,让颗粒在贯入过程中自然重排。这两种顺序得到的结果差异很大,要和试验工况对应起来,不要混用。

4. 耦合边界怎么搭:PFC 6.0与7.0的两种实现路径

4.1 外接耦合:PFC 6.0的经典玩法

在 PFC 6.0 时代,离散–连续耦合最成熟的操作是 PFC 与外部连续介质求解器联合仿真。思路是这样的:在连续介质求解器(比如常见的有限差分或有限元软件)中建立一个大范围土体网格,然后把靠近桩体的区域挖空,在孔洞边界生成一层 PFC 的墙体,这层墙体也叫"耦合面"或者 coupon。

之后每个计算步都做一次信息交换:PFC 把耦合面上颗粒对墙体的接触力汇总,施加到连续介质网格的节点上;连续介质求解器算出节点位移后,再反馈给墙体,墙体带着颗粒一起移动。这样颗粒区域和连续区域就"缝合"在一起了。用这种方案的好处是:远场网格可以很大,颗粒区域可以很小,计算规模可控,而且两个软件各自发挥强项。

但做外接耦合有个前提:两个程序之间的时间步要协调。离散元的时间步很小(微秒级),连续介质的时间步通常要大几个量级,如果强行统一时间步,连续介质每一步都要等颗粒区迭代很多次,效率很低。所以实际工程通常会让连续介质求解器在一个大时间步内多次调用 PFC 更新子步,也就是做"子循环",这个逻辑需要熟练的脚本控制能力。

4.2 内嵌 zone:PFC 7.0 的省心方案

PFC 7.0 一个很重要的变化是支持在 PFC 内部直接创建连续介质单元(zone),并且颗粒可以和 zone 产生接触。这样就不需要再外接一个连续求解器了,整个模型都在同一个软件环境里,数据交换和脚本管理都方便很多。

内嵌 zone 的建模逻辑是:颗粒区域只覆盖桩周几倍桩径的范围,外围和桩底深处全部用 zone 网格填充。zone 和 zone 之间保持连续,zone 与 ball 之间通过接触模型传递力。在工程参数上,zone 的弹性模量可以用室内试验的土体弹性模量,没有太多玄学;注意 zone 网格尽量做规则六面体,尽量避免尖角,否则颗粒与 zone 的接触会不收敛。

我在 PFC 7.0 里常用这种做法:在颗粒区与 zone 区的交界处留一个渐变带,颗粒粒径从内到外略微增大,让离散元区域逐步过渡到连续元区域。这样做的好处是减小界面上的刚度和密度突变,避免出现虚假的波反射和应力集中。

4.3 两种方案的选型建议

如果你的项目只做单桩静载试验模拟,而且你手上正好有 PFC 7.0,我会直接推荐用内嵌 zone 的方案,理由有二:一是脚本和建模在一个软件里完成,排查问题方便;二是 7.0 对 zone 与 ball 的接触统计支持得不错,提取桩侧接触力比外接耦合更直接。

但如果你要做大型群桩或者有复杂的远场施工步序(开挖、支护、降水),外接耦合更灵活,因为连续介质求解器处理复杂边界条件的成熟度更高。6.0 和 7.0 在耦合能力上的差距主要体现在 7.0 原生支持内嵌 zone,而 6.0 做耦合基本只能走外接路线。

对比项PFC 6.0 外接耦合PFC 7.0 内嵌 zone
建模流程需两个软件配合,数据交换依赖脚本单软件完成
远场网格能力强,可做复杂边界相对基础
学习成本较高较低
适用项目群桩、复杂施工步序单桩、小范围机理研究

5. 荷载–位移曲线之外:侧摩阻力分布提取与尺寸效应核查

5.1 压桩与拔桩 Q-s 曲线的典型形态

做完加载模拟,最直观的输出就是桩顶荷载 Q 与桩顶位移 s 的关系曲线。压桩时,曲线前段近似线性,随后进入非线性段,最后趋于水平或缓慢上升,说明桩侧摩阻力已经接近极限,桩端阻力逐渐占主导。拔桩时曲线一般是先上升到一个峰值,然后快速软化,最终趋于残余强度。

需要注意的是,这些曲线只是宏观结果。真正能验证模型合理性的,是曲线背后的侧阻分布。比如压桩过程中,桩身上部摩阻力首先发挥,随着位移增大,摩阻力峰值向桩下部移动;拔桩时侧向应力因剪胀先增后减,摩阻力分布也在深度上发生重分布。这些细观行为直接决定了 Q-s 曲线的形状,而连续介质方法很难自动涌现出这种"渐进破坏"过程。

5.2 侧摩阻力沿深度的提取方法

提取侧摩阻力,我常用的方法有三种:

一是基于桩体接触力统计。如果桩体是用 wall 或 zone 建的,可以按深度区间把桩土接触面分成若干段,分别统计每段的总切向力,再除以该段外表面积,得到桩侧摩阻力随深度的分布。这是最直接、最常用的方法。

二是用测量圆切片。在桩周布置一排测量圆,记录每个深度区间的应力状态变化,间接换算局部摩阻力。这个方法适合研究"剪切带应力路径",但对于摩擦阻力的直接定量不如第一种直接。

三是追踪桩侧接触的滑动状态。把每个与桩面接触的颗粒的切向位移增量记录出来,看看哪些深度已经滑移、哪些还在弹性阶段。这个方法能帮助你判断模型是否处于"渐进破坏"状态,也是论文和报告中很有说服力的佐证。

5.3 尺寸效应核查:D/d50 是绕不过去的检查项

做 PFC 模拟的人都知道尺寸效应:颗粒太大,桩侧摩阻力的离散性会很大;颗粒太小,算力又爆炸。我自己的检查标准是桩径 D 与中值粒径 d50 的比值。工程尺度的桩径按 0.6~0.8 m 算,颗粒 d50 取 2~5 mm,D/d50 大约在 120~400 之间,尺寸效应基本可以忽略。但如果做室内小比例模型试验,桩径可能只有 20~30 mm,d50 还是取 1~2 mm,D/d50 只有 10~20,这时候结果的可信度就要打问号了。

如果 D/d50 不足 20,我的建议是优先细化桩周第一圈颗粒,而不是整体缩小粒径。具体做法是把桩周一定范围内(约 2~3 倍桩径)的颗粒细化,外围颗粒保持较大粒径,中间用粒径过渡带衔接。这样可以保住桩侧剪切带的细观精度,又不至于让全局颗粒数失控。

6. 版本迁移与典型故障排查:从PFC 6.0到7.0的真实坑位

6.1 脚本迁移的三个高频不兼容点

我从 6.0 迁到 7.0 时,遇到最频繁的问题集中在三处:一是 Python 接口的变化,6.0 时代的很多内置命令流到了 7.0 被重新组织,函数名不同,参数位置也不同,旧脚本不能直接套用;二是接触模型的命名和定义方式有调整,特别是 zone 与 ball 接触的引入,让接触属性体系的逻辑更统一,但也要求你重新理解接触组;三是求值器(measure logic)和绘图 API 的变化,想直接复用 6.0 里的后处理脚本基本要重写。

迁移的正确姿势不是"一键升级",而是先建一个最小模型(比如一个单轴压缩标定模型),把颗粒生成、伺服、加载、后处理四段流程分别验证通过,再带着完整脚本迁移。我见过太多人直接把 6.0 试算好的大模型塞进 7.0,结果报了几百个错,根本不知道从哪查起。

6.2 计算慢的排查链路

如果模拟跑到中后期越来越慢,先别急着换机器。按这个顺序排查:

  • 先看颗粒数是否因为桩贯入发生了颗粒溢出或新颗粒自动生成,排除意外增加;
  • 再查时间步是否被极小粒径颗粒拖累,PFC 的时间步由最小颗粒刚度决定,如果生成了个别极小颗粒,时间步会陡降,这种颗粒可以直接删除或放大;
  • 最后检查耦合面/ZONE 区的刚度是否过高,zone 刚度与颗粒刚度的比值不要超过 10 倍,否则高频振动会让时间步进一步变小。

6.3 收敛性差:从加载速度到阻尼参数的排序

模型不收敛,也就是不平衡力比值长期降不下来,我一般按以下顺序处理:先降低加载速度,这是最容易被忽视的原因;其次检查摩擦系数是否设置过大,导致颗粒接触后锁死;如果还不行,就加局部阻尼或者粘滞阻尼,把高频振荡能量耗散掉;最后一步才去动刚度参数。

摩擦桩模拟里,"拔桩阶段不收敛"是非常经典的问题。原因通常是桩端离开土体后,颗粒瞬间失去约束,应力重分布剧烈。我的做法是拔桩初期把速度设为压桩速度的 1/5,并且在桩端下方保留一个低强度 zone 过渡区,让应力逐步释放,而不是突变。

提示:无论装哪个版本,建模前都先跑一遍官方手册里的单桩耦合示例,确认本机环境和脚本没问题,再开始自己的模型。这十分钟能省掉后面至少两小时的排查时间。

回头再看这个题目,摩擦桩压/拔试验模拟的核心竞争力不在软件操作,而在三个环节的耦合判断:制样方法决定初始应力场,桩土界面参数决定侧阻发挥规律,耦合边界决定远场响应是否可信。我个人体会,先把制样和参数标定做扎实,再用最小模型验证一遍,最后才上完整的三维模型,是效率最高、坑最少的一条路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询