1. 项目概述
最近在实验室用UDEC模拟岩石单轴压缩试验时,发现要准确绘制完整的应力应变曲线并不像想象中那么简单。经过多次调试和参数调整,终于摸索出一套稳定可靠的模拟方法。本文将分享一个经过实测验证的完整案例代码,并详细解析其中的关键实现细节。
岩石力学模拟是岩土工程领域的基础研究手段,而单轴压缩试验又是最经典的岩石力学特性测试方法。通过UDEC这款离散元分析软件,我们可以更直观地观察岩石试样在加载过程中的裂纹扩展和破坏模式。但要让模拟结果真实反映岩石的力学行为,需要特别注意边界条件设置、加载速率控制以及数据采集方式等关键环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心需求解析
2.1 应力应变曲线的完整获取
在UDEC中模拟单轴压缩试验时,完整的应力应变曲线应该包括以下四个典型阶段:
- 孔隙压密阶段(初始非线性段)
- 弹性变形阶段(近似直线段)
- 稳定破裂发展阶段(曲线开始偏离直线)
- 加速破裂阶段(峰值后曲线)
要准确捕捉这些阶段的变化,需要合理设置:
- 试样尺寸与网格划分
- 加载速率与时间步长
- 数据采样频率
- 边界条件约束方式
2.2 关键参数设置原则
根据岩石力学基本原理,模拟中需要特别注意以下参数的物理意义和取值范围:
| 参数类型 | 典型取值范围 | 物理意义 | 设置建议 |
|---|---|---|---|
| 弹性模量E | 10-100GPa | 反映岩石刚度 | 根据实测数据校准 |
| 泊松比ν | 0.1-0.3 | 横向变形能力 | 常见岩石取0.2 |
| 抗压强度σc | 20-300MPa | 峰值强度 | 控制试样破坏点 |
| 内摩擦角φ | 30-60° | 剪切阻力 | 影响破坏模式 |
| 粘结力c | 1-50MPa | 颗粒间结合力 | 控制裂纹扩展 |
3. 实现过程详解
3.1 模型建立与初始化
首先需要创建岩石试样的几何模型。建议采用标准圆柱体试样(直径50mm,高度100mm),通过以下FISH函数生成:
fish复制def create_sample
sample_h = 100 ; 试样高度(mm)
sample_d = 50 ; 试样直径(mm)
; 生成试样边界
command
gen circle rad @sample_d/2.0
block cut dip 90 dd 90 origin 0,0
block cut dip 0 dd 90 origin 0,0
block cut dip 90 dd 90 origin 0,@sample_h
block cut dip 0 dd 90 origin 0,@sample_h
endcommand
end
3.2 加载控制与数据采集
加载控制是获取准确曲线的关键。推荐采用位移控制方式,以0.01mm/s的速率加载,并通过以下代码实现数据采集:
fish复制def monitor_data
global stress_arr = vector(1000)
global strain_arr = vector(1000)
global count = 0
loop while mech_ratio < 1.0
; 计算轴向应力
sxx = block.stress.xx(1)
; 计算轴向应变
disp = block.displacement.y(1)
strain = disp / sample_h
; 存储数据
stress_arr(count) = sxx
strain_arr(count) = strain
count = count + 1
step 100 ; 每100步记录一次数据
endloop
end
3.3 完整案例代码
以下是经过验证的完整实现代码,包含模型创建、参数设置、加载控制和结果输出:
fish复制; 岩石单轴压缩试验模拟
def main
; 1. 试样创建
call create_sample
; 2. 材料参数设置
command
block property density 2600 young 60e9 poisson 0.25
block property cohesion 30e6 friction 45 tension 10e6
block contact model mohr
endcommand
; 3. 边界条件
command
block fix velocity range y 0 ; 底部固定
block fix velocity x range y 0 ; 防止水平滑动
block apply velocity-y -1e-5 range y 100 ; 顶部加载
endcommand
; 4. 平衡初始应力
command
solve elastic
block initialize stress 0 0 0
endcommand
; 5. 开始试验并监测数据
call monitor_data
; 6. 输出结果
call export_data
end
; 数据导出函数
def export_data
fopen 'stress_strain.dat' 1 1
loop i (1,count)
fprintf 1 '%e %e\n' strain_arr(i) stress_arr(i)
endloop
fclose 1
end
4. 关键操作技巧
4.1 网格尺寸优化
网格尺寸会显著影响计算结果。建议:
- 采用非均匀网格,中部加密(约1mm)
- 边界区域可适当放大(3-5mm)
- 总单元数控制在2000-5000之间
可通过以下FISH函数实现智能网格划分:
fish复制def smart_mesh
command
block densify seg 8 range pos-x -25,25 pos-y 40,60
block densify seg 4 range pos-x -25,25 pos-y 0,100
endcommand
end
4.2 阻尼系数设置
合适的阻尼系数有助于获得稳定的数值解:
- 静态问题推荐局部阻尼(local damping)
- 阻尼系数通常取0.7-1.0
- 可通过试算确定最优值
设置命令:
fish复制block mechanical damping local 0.8
4.3 时步控制策略
建议采用自适应时步控制:
fish复制block mechanical timestep auto
block mechanical timestep fix 1e-6
5. 常见问题排查
5.1 曲线异常波动
可能原因及解决方案:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 初始段波动大 | 接触面未充分平衡 | 增加elastic求解步数 |
| 峰值后震荡 | 阻尼系数过小 | 增大local damping值 |
| 曲线不连续 | 采样频率过低 | 减少monitor步长 |
5.2 数值不收敛问题
当出现不收敛警告时,可以尝试:
- 减小加载速率
- 调整接触刚度
- 检查材料参数合理性
- 增加阻尼系数
调试命令示例:
fish复制block contact property stiffness-normal 1e10 stiffness-shear 1e9
block mechanical damping local 1.0
6. 结果分析与验证
6.1 典型曲线特征
成功的模拟应呈现以下特征:
- 初始压密段约占总量程的5-10%
- 弹性段斜率对应实际弹性模量
- 峰值强度与实验数据误差<10%
- 峰后曲线呈现稳定下降趋势
6.2 参数敏感性分析
建议对以下参数进行敏感性测试:
- 弹性模量:±20%变化
- 内摩擦角:±10°变化
- 粘结力:±30%变化
- 抗拉强度:±50%变化
可通过批量脚本实现自动参数扫描:
fish复制def param_study
E_arr = vector(50e9,60e9,70e9)
phi_arr = vector(30,40,50)
loop i (1,3)
loop j (1,3)
command
block property young @E_arr(i)
block property friction @phi_arr(j)
solve
save '@E_arr(i)_@phi_arr(j).sav'
endcommand
endloop
endloop
end
在实际项目中,我发现UDEC的接触算法对峰后行为模拟尤为关键。采用Mohr-Coulomb模型时,适当降低峰后残余强度参数可以更好地模拟岩石的脆性破坏特征。此外,将试样划分为多个block(3-5个)能更真实地反映岩石的非均质性,但会增加约30%的计算时间。
