comsol 二氧化碳气体CO2注入地层封存,两相流,包含温度变化,地层力学,地层分层
2026/4/6 0:00:37 网站建设 项目流程
comsol 二氧化碳气体CO2注入地层封存两相流包含温度变化地层力学地层分层地下二氧化碳封存这活儿真不是简单把气体塞进地底就完事了。最近在COMSOL里折腾了个包含温度场、两相流、地层变形、多层地质结构的模型掉了几撮头发之后算是摸出点门道。先说说两相流这茬。地底原本就有咸水层CO₂进去之后得考虑两种流体打架的情况。建模时用达西定律模块搞了个变饱和度的设定model.physics(dl).feature(dl1).set(saturation_curve, [[0.2, 0.0], [0.8, 1.0]]) # 水相相对渗透率曲线 model.physics(dl).feature(dl2).set(saturation_curve, [[0.2, 1.0], [0.8, 0.0]]) # CO₂相对渗透率曲线这段代码直接决定两种流体怎么抢地盘。注意拐点设置得不对的话模拟结果会出现流体突然卡在某个区域死活不动的bug跟堵车似的。温度变化这块更有意思。CO₂注入时温度比地层低约20℃热应力直接让岩石开裂。用非等温多孔介质模块时发现个坑——热膨胀系数必须用张量形式% 各向异性热膨胀系数 thermal_expansion [1.2e-5, 1.2e-5, 2.3e-5]; // 垂向膨胀更明显 material1.set(alpha, thermal_expansion);这参数要是设成各向同性后期应力云图就跟实际勘测数据对不上号。特别是页岩夹层的位置应力集中区域能差出十几米。comsol 二氧化碳气体CO2注入地层封存两相流包含温度变化地层力学地层分层地层分层处理最考验耐心。不同岩性的渗透率能差三个数量级用COMSOL的选择功能玩套娃// 定义层位选择器 SelectionLayer1 model.selection().create(Layer1); SelectionLayer1.set(new String[]{z 1500 z 1530}); model.material(shale).selection().named(Layer1);这里z坐标的分层阈值必须精确到米级有次手滑把1530写成153结果模拟出的CO₂羽流直接穿墙到不该存在的层位整得像科幻片里的穿帮镜头。力学模块和流场耦合时得注意时间步长策略。建议先用分离式求解器跑通流程再用全耦合优化精度。有个隐藏技巧把固体力学方程的求解器容差调到1e-4既能省30%计算时间又不明显影响结果准确性。最后来个骚操作——用参数化扫描同时跑多组注入压力。记得在批处理前加个内存清理脚本不然连续跑五组以上会爆内存for pressure in [8, 10, 12]: # MPa model.param.set(p0, str(pressure)) model.mesh() model.solve() model.save(fcase_{pressure}MPa) model.clearSolutions() # 关键避免内存堆积这套流程跑下来基本上能把CO₂在地层里怎么窜、岩石怎么变形、温度场怎么影响封存效率这些事儿整明白。不过还是要提醒实际工程中得拿着模拟结果再去跟地球物理勘探数据死磕毕竟地层这玩意儿比女朋友的心思还难琢磨。

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

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

立即咨询