COMSOL井壁稳定研究流固耦合案例应力集中分析井周孔压模拟。model.param().set(pw, 10[MPa], 井底流体压力); physics.create(fp, SinglePhaseFlow, geom); physics.feature(fp1).set(density, rho_water*exp((pw-p)/beta));这里把流体压缩性用指数关系简化了beta参数控制着压力变化灵敏度。实际跑模型时发现beta值哪怕差0.1井周应力分布就面目全非这玩意比女朋友的心思还难捉摸。重点来了——应力集中区总是出现在井眼45度方向。用这个后处理命令抓取应力极值max_stress mphglobal(model, max(solid.mises), dataset, dset1); disp([峰值应力:,num2str(max_stress/1e6),MPa]);但别被表面数值骗了真正要命的是有效应力。当孔隙压力开始跟岩石骨架较劲时传统的弹性假设会翻车。有次算例中孔隙压力梯度变化3%井壁位移直接飙了20倍吓得我赶紧检查是不是单位制搞错了。COMSOL井壁稳定研究流固耦合案例应力集中分析井周孔压模拟。网格划分有个小窍门在井周用边界层网格厚度设成井径的1/5。用这个序列生成各向异性网格mesh.automatic(true); mesh.feature(size).set(customizeOn, true); mesh.feature(size).set(hgrad, 1.3);这样处理后的计算效率提升40%还能抓住关键的应力梯度变化。不过要注意hgrad别超过1.5否则迭代收敛会变得像老牛拉破车。最后吐槽下流固耦合的迭代策略。用分离式求解器时试着把流体压力场作为固体变形的初始条件结果发现残差震荡得像心电图。后来改成弱耦合单步迭代收敛速度直接起飞——果然在数值计算里有时候差不多得了反而比死磕更高效。
井壁稳定性仿真一直是油气开采中的头疼问题。最近用COMSOL折腾了个流固耦合模型,发现岩石里的水真不是省油的灯。直接上干货——先看这段设置孔隙压力的代码
COMSOL井壁稳定研究流固耦合案例应力集中分析井周孔压模拟。model.param().set(pw, 10[MPa], 井底流体压力); physics.create(fp, SinglePhaseFlow, geom); physics.feature(fp1).set(density, rho_water*exp((pw-p)/beta));这里把流体压缩性用指数关系简化了beta参数控制着压力变化灵敏度。实际跑模型时发现beta值哪怕差0.1井周应力分布就面目全非这玩意比女朋友的心思还难捉摸。重点来了——应力集中区总是出现在井眼45度方向。用这个后处理命令抓取应力极值max_stress mphglobal(model, max(solid.mises), dataset, dset1); disp([峰值应力:,num2str(max_stress/1e6),MPa]);但别被表面数值骗了真正要命的是有效应力。当孔隙压力开始跟岩石骨架较劲时传统的弹性假设会翻车。有次算例中孔隙压力梯度变化3%井壁位移直接飙了20倍吓得我赶紧检查是不是单位制搞错了。COMSOL井壁稳定研究流固耦合案例应力集中分析井周孔压模拟。网格划分有个小窍门在井周用边界层网格厚度设成井径的1/5。用这个序列生成各向异性网格mesh.automatic(true); mesh.feature(size).set(customizeOn, true); mesh.feature(size).set(hgrad, 1.3);这样处理后的计算效率提升40%还能抓住关键的应力梯度变化。不过要注意hgrad别超过1.5否则迭代收敛会变得像老牛拉破车。最后吐槽下流固耦合的迭代策略。用分离式求解器时试着把流体压力场作为固体变形的初始条件结果发现残差震荡得像心电图。后来改成弱耦合单步迭代收敛速度直接起飞——果然在数值计算里有时候差不多得了反而比死磕更高效。