CMG STARS热采与泡沫模拟:数据体构建与避坑指南
简介这是一份CMG数模软件SRS模块的入门教程PPT聚焦油藏数值模拟中的热采与泡沫模拟场景适合石油工程相关专业学生、科研人员及现场工程师快速上手。内容从STARS模块的关键字设置入手系统梳理了输入输出控制、网格与油藏定义、流体组分定义、岩石流体特性、初始条件及井定义等数据体构成并结合氮气及氮气泡沫压水锥数值模拟案例讲解模型建立、运行和结果后处理要点。整套资源共1个pptx文件压缩包大小5.48MB便于直接查看学习目前已有825人学习。通过该教程可以清晰了解SRS模块的模拟流程、常用关键字含义以及油藏热采模型从数据准备到结果分析的完整路径有助于降低上手门槛并为实际项目建模提供参考。1. 从SRS到STARS这份热采与泡沫模拟入门资源能解决什么拿到这份PPT资料的人多半会有个疑问标题写着“CMG数模软件SRS模块”翻到第二页看到的却是满屏的STARS关键字。SRS不是笔误而是不少人对CMG数模软件里STARS模块的通俗叫法。STARS是热采与添加剂模拟模块常用于稠油蒸汽吞吐、蒸汽驱、氮气泡沫压水锥、化学剂驱替等场景。这份入门教程的价值在于把数据体Dataset的七个区块从关键字到填法完整串了一遍并且对泡沫模拟给出了从组分定义到注入参数的完整链路。适合刚接触数值模拟、被关键字和单位制绕晕的新手也适合从黑油模拟转向热采模拟、想快速建立建模思路的工程师。2. STARS数据体七区块先看懂关键字再动手写数据体STARS的数据体就是一个带大量星号关键字的文本档案看起来吓人实际上是按固定顺序堆叠的。第一层是输入输出控制第二层是网格与油藏定义第三层是流体与组分定义第四层是岩石流体特性第五层是初始条件第六层是数值方法控制第七层是井与动态数据。很多新手拿到模板后直接在中间加井位、改渗透率却忽略了头部的单位制控制结果算出来的注入量差了百万倍还不知道问题在哪。2.1 INPUT/OUTPUT CONTROL单位制与输出频率是第一个分水岭数据体文件头部的INUNIT和OUTUNIT决定了整个算例的单位体系。STARS常用的是SISI制和FIELD矿场制FIELD制下压力单位是psi、温度单位是华氏度而SI制下压力是kPa、温度是摄氏度。从模板复制数据体时最容易翻车的地方就在这里模板里是FIELD你只改了网格和井参数就提交运行输出的压力和温度全部对不上现场实测。OUT文件写入频率WPRN和SR2结果写入频率WSRF也是新手容易忽略的。*WPRN决定打印到.out文本文件的迭代信息详略*WSRF决定写二进制结果文件SR2文件的频率。如果你要跑一个几百口井、几十万网格的热采模型WSRF FREQ设成1意味着每个时间步都写完整结果磁盘很快就满了但设得太大又会导致想看中间过程时结果缺失。我一般前期用粗网格调试时把WSRF FREQ设成10或20确认模型没问题再加密网格、加密输出。一个典型的数据体头部长这样-- 数据体头部的输入输出控制段 *TITLE1 FOAM FLOOD PRELIMINARY MODEL *TITLE2 SECTOR MODEL - X WELL GROUP *INUNIT SI *OUTUNIT SI *MAXERROR 20 *WPRN ITER 10 *WSRF FREQ 10 *WSRF RST 1 *RESTART 1 *MAXSTEPS 5000这段里面*MAXERROR 20表示最多允许20个错误就终止运行防止数据体有大量错误时白跑几个小时*MAXSTEPS 5000是最大时间步数限制避免模型不收敛时无限迭代下去。WSRF RST 1和RESTART 1配合使用表示定期写重启文件这样算到一半断电或者磁盘满了不用从头再跑直接从最近的重启点接着算。这几个关键字说起来简单但实际项目里很多人就是忘了配重启文件导致一次崩溃损失几天计算时间。INPUT/OUTPUT CONTROL段落里还有一个容易混淆的选项OUTSRFF。它控制SR2文件里存哪些结果场默认是常规的饱和度、压力、温度场。如果你要分析泡沫组分浓度或化学反应产物分布必须在OUTSRFF里显式加上这些组分否则后处理时找不到对应结果又要重跑一遍。2.2 GRID AND RESERVOIR DEFINITION网格方向、深度与无效网格网格定义是数据体里信息量最大的段落也是最容易出错的部分。STARS用GRID声明网格类型用DI、*DJ、*DK三个关键字分别声明I、J、K三个方向的网格步长。这里有个工程经验I、J方向并不天然对应地质模型的X、Y方向从角点网格或地质建模软件导出的数据必须确认I方向与X轴的对应关系否则井位坐标会全部错位模拟出来的饱和度场就像镜像翻转一样。DTOP定义网格顶部深度DEPTH定义网格中心深度PAYDEPTH定义油层中部深度。对于水平或近水平油藏用DTOP加DI、DK就可以对于带倾角的油藏要配合DIP关键字逐层给倾角数据。很多新手把DTOP当成每个网格的深度逐层给数据其实DTOP通常只需要给第一层的顶深其余层会按DK自动累加。无效网格的处理也在这个段落里。*NULL CON 1表示1号岩石类型全部无效*PVCUTOFF是孔隙体积截断值当某个网格的孔隙体积小于该值时自动置为无效网格。这个参数在实际项目中非常有用可以让模型自动剔除那些孔隙度极小、对流动没有贡献的网格节省计算量。一个简化的网格定义片段-- 网格与油藏定义段 *GRID CART *DI CON 25.0 *DJ CON 25.0 *DK CON 5.0 *DTOP 1500.0 *POR CON 0.30 *PERMI CON 1500.0 *PERMJ CON 1500.0 *PERMK CON 300.0 *NULL CON 1 *PVCUTOFF 5.0E-5 *END-GRID*POR CON 0.30表示所有网格孔隙度都为0.30*PERMI、*PERMJ、PERMK分别给I、J、K三个方向的渗透率。垂直渗透率PERMK通常比水平渗透率低一个数量级这个比例关系对热采模拟尤其重要蒸汽超覆现象就是垂向渗透率与重力平衡的结果。如果你手头有小层数据表或等值线图应该把这些值分区域赋值而不是全模型一个常数——常数网格只能用来调试代码逻辑不能用来做开发方案。2.3 FLUID AND COMPONENT DEFINITIONS组分与K值是热采控制方程的地基流体组分定义是STARS与黑油模拟器最大的区别。黑油模拟只有油、气、水三相而STARS允许你自定义多个组分比如水、表活剂、溶解气、氮气、泡沫液膜等。组分定义用MODEL开头后面跟组分总数、相总数、水相组分总数、油相组分总数。组分的物性参数包括摩尔质量CMM、质量密度MASSDEN、临界压力PCRIT、临界温度*TCRIT这些参数直接参与闪蒸计算和物性计算。PPT中的一个标准六组分例子是这样写的-- 流体与组分定义段 *MODEL 6 6 4 2 *COMPNAME WATER SURFACT OIL SOL_GAS N2 LAMELLA *CMM 0.018 0.308 0.4 0.018 0.028 0.018 *MASSDEN 1000.0 1137.0 965.0 14.46 *PCRIT 22048.0 992.8 1475.5 4544.0 3394.0 3394.0 *TCRIT 374.0 527.0 434.0 -82.72 -147.0 -147.0六个组分分别是水、表活剂、油、溶解气、氮气和泡沫液膜LAMELLA。注意*CMM的单位是kg/mol水的摩尔质量0.018 kg/mol对应18 g/mol*MASSDEN的单位是kg/m³表活剂质量密度1137 kg/m³是通过原液密度换算出来的这个换算过程在泡沫模拟章节会详细展开。*PCRIT单位是kPa*TCRIT单位是摄氏度填表时千万不要把温度填成开尔文否则临界性质全部错乱。热采模型里还有一个经常被跳过的参数是流体焓系数CPL1到CPL4、CPG1到CPG4。焓系数决定蒸汽在不同温度下的热焓直接影响蒸汽干度和热损失计算。PPT里专门提到如果做热采而不给焓系数蒸汽的注入热量会被严重低估。此外固相组分需要给SOLID_DEN和SOLID_CP这是焦炭沉积和燃烧反应模拟时必须要用的火烧油层模型里这两个参数缺一不可。3. 泡沫模拟四个关键设置组分、相渗插值、吸附与注入参数泡沫模拟是STARS模块里最具特色也最容易做错的部分。STARS并不把泡沫当成单独的相来模拟而是把气泡和液膜看作一种稳定的分散组分这个分散组分存在于气相或液相中。泡沫的所有特征——吸附特性、封堵孔道的特性、非线性粘度特性、扩散传播——都是通过分散组分的参数来描述的。理解了这一点再看PPT里那一堆泡沫关键字就不会晕了。3.1 发泡剂密度换算从原液密度到MASSDEN的完整推导泡沫模拟第一步是确定表活剂组分的物性参数。PPT里给了一个经典例题发泡剂原液密度为1.044 g/cm³有效浓度为35%发泡剂摩尔质量为0.308 kg/mol水的摩尔质量为0.018 kg/mol。让你求纯发泡剂的质量密度*MASSDEN。很多人在这一步直接用1.044乘以35%得到0.3654 g/cm³这是错的。原液是“表活剂水”的混合溶液35%是表活剂在溶液中的质量分数不是体积分数。正确思路是利用体积叠加关系单位体积原液中表活剂占的体积加上水占的体积等于1。写成公式就是1 / 原液密度 表活剂质量分数 / 纯表活剂密度 水质量分数 / 水的密度用Python把这个换算写出来# 发泡剂原液物性换算 rho_solution 1.044 * 1000 # 原液密度1.044 g/cm3 - 1044 kg/m3 w_surf 0.35 # 有效浓度质量分数 w_water 1 - w_surf # 水的质量分数 rho_water 1000.0 # 水的密度kg/m3 # 体积叠加关系求纯表活剂密度 # w_surf/rho_surf w_water/rho_water 1/rho_solution rho_surf w_surf / (1.0/rho_solution - w_water/rho_water) print(纯发泡剂质量密度: %.1f kg/m3 % rho_surf) # 摩尔密度 质量密度 / 摩尔质量 MW_surf 0.308 # 表活剂摩尔质量kg/mol MOLDEN_surf rho_surf / MW_surf print(纯发泡剂摩尔密度: %.1f mol/m3 % MOLDEN_surf)运行这个脚本会得到纯发泡剂质量密度约1137 kg/m³正好是上一章*MASSDEN数据表里表活剂那列的数值。摩尔密度约3691.6 mol/m³。这个换算的工程背景是矿场上拿到的表活剂通常是稀释好的原液而STARS数据体里要填的是纯组分的物性不是原液的物性。如果直接把原液密度填进去表活剂组分的质量就会偏大导致注入浓度、吸附量等所有参数全部失真。**提示**这个换算默认忽略表活剂与水混合时的体积收缩效应。对大多数矿场用的表面活性剂体系这个误差在可接受范围内但如果做的是高浓度表活剂段的精细实验模拟需要用实验测定的混合密度数据来修正。3.2 相渗内插DDTRAPW/DDTRAPN与高、低界面张力相渗的插值逻辑表活剂进入油藏后会大幅降低油水界面张力界面张力降低又会导致毛细管力减小、残余油饱和度降低、相对渗透率曲线趋于直线。STARS中处理这个现象的方式是在一个岩石类型里定义两套相渗端点高界面张力对应无表活剂时的常规相渗曲线低界面张力对应高表活剂浓度时的极限相渗曲线然后用插值函数按界面张力大小在两者之间插值。PPT里给出的插值参数是DDTRAPW和DDTRAPN其中*DDTRAPW控制水-油相对渗透率随界面张力的插值*DDTRAPN控制气-液相渗随界面张力的插值。插值所需的输入包括插值组分*INCOMP、界面张力数据*IFTTABLE、泡沫插值函数*FMSURF以及两套相渗表SWTT和SSLT。示意性的相渗端点设置如下-- 岩石流体特性段中的相渗插值设置 *ROCKFLUID *RPT 1 *INCOMP SURFACT *IFTTABLE -- 界面张力随表活剂浓度的变化 0.0 35.0 0.001 5.0 0.01 1.0 *DDTRAPW -- 高界面张力无表活剂时的油水相渗表 *SWTT *SW *KRW *KROW 0.25 0.0 0.9 0.40 0.03 0.6 0.60 0.10 0.3 1.00 0.50 0.0 -- 低界面张力高表活剂浓度时的油水相渗表 *SLT *SW *KRW *KROW 0.15 0.0 1.0 0.40 0.10 0.7 0.60 0.25 0.4 1.00 0.85 0.0这里*IFTTABLE给出了界面张力从35 mN/m降到1 mN/m的过程*DDTRAPW在高界面张力相渗表和低界面张力相渗表之间做线性或对数插值。注意低界面张力相渗表的残余油饱和度从0.25降到了0.15水相相对渗透率端点从0.5升到了0.85这就是表活剂驱提高采收率的核心机理在数值模型里的体现。实际项目中这两套相渗表来自室内实验的驱替测试。如果你只有常规相渗数据而没有低界面张力相渗数据可以先用“残余油饱和度降低一半、相渗曲线变直”的规律构造一套初始估计值跑通模型后再用实验数据校准。不要因为这个参数看起来复杂就直接放弃泡沫模拟选项那是把STARS最核心的功能白白浪费了。3.3 泡沫特征与吸附参数FMMOB、FMCAP、ADMAXT的物理意义与实际取值泡沫在STARS中通过影响气相的相对渗透率来实现“封堵”效果。具体来说泡沫液膜以分散组分如LAMELLA的形式存在当气相想流动时液膜会堵塞孔隙喉道导致气相相对渗透率成倍下降。泡沫阻力因子*FMMOB就是控制这个下降幅度的关键参数。*FMMOB取50意味着气相相对渗透率降为原来的1/50取200则降为1/200。矿场泡沫驱模拟中*FMMOB常见的取值区间是50到200具体数值需要用岩心泡沫驱替实验的历史拟合来校准。泡沫并不是在任何条件下都能稳定存在的。*FMSURF是形成泡沫所需的最低表活剂浓度低于这个浓度泡沫不生成*FMCAP是临界毛管压力毛管压力超过这个值液膜破裂、泡沫消失FMOIL是临界含油率含油饱和度太高时泡沫会被油相“杀死”。这三个参数一起构成了泡沫稳定存在的相态边界。实际设置时需要注意如果模型里含油饱和度本来就高于FMOIL泡沫会在油区附近全部消泡模拟出来的泡沫前缘会明显滞后于实验观察到的现象。吸附参数是另一个容易出问题的地方。表活剂在岩石表面会吸附ADMAXT是最大吸附量单位是每单位岩石体积吸附的摩尔数ADRT是吸附速率。实际油藏中表活剂吸附量可达几毫克每克岩石这意味着注入的表活剂有一部分被岩石“吃掉”了必须提高注入浓度来补偿吸附损耗。PPT中给出的参数设置建议是先按室内静态吸附实验得到的吸附等温线设置ADSLANG和ADMAXT然后通过历史拟合微调。一个常见的坑是忘记设置吸附参数导致表活剂推进过快、泡沫段塞过早突破生产曲线失真。3.4 注入井参数蒸汽干度、注入浓度与井控制泡沫模拟的最后一个关键设置在注入井上。注泡沫通常分三段前段注表活剂溶液建立泡沫段塞中段注氮气或烟道气形成泡沫后段注水驱替泡沫前缘向前推进。在STARS中注入井用*INJECTOR定义*INCOMP指定注入流体的组分摩尔分数*STINTW指定注入蒸汽温度*QUAL指定蒸汽干度。一个注氮气泡沫的注入井数据体片段-- 注入井定义与注入参数 *INJECTOR INJ1 *INCOMP WATER 0.997 SURFACT 0.003 N2 0.0 *TINJW 200.0 *QUAL 0.0 *OPERATE DIFF 5.0E-5 *WELL 1 *PERF *GEO INJ1 *LAYER 1 1 1 1 1*INCOMP后面的数字是注入流体各组分的摩尔分数。这里给的是水和表活剂两组分实际注入时通常同时注入氮气*INCOMP里要加上N2的摩尔分数。TINJW是注入温度QUAL是蒸汽干度注冷泡沫时QUAL为0注蒸汽泡沫时QUAL取0.7到0.8。*OPERATE DIFF 5.0E-5表示井底压差控制模式下最大注入压差为50 kPa防止注入压力超过地层破裂压力。注入浓度的换算必须单独说一句。现场通常给出的是表活剂在注入水中的质量浓度如0.3%而*INCOMP需要的是摩尔分数。两者之间的换算要用表活剂和水的摩尔质量来折算0.3%质量分数对应的摩尔分数大约是0.0017。直接把质量分数当成摩尔分数填进去会导致实际注入的表活剂量比设计量少一个数量级泡沫根本形不成。4. 热采模型从建立到运行初始条件、井定义与后处理泡沫模拟只是STARS能力的一部分大部分应用场景还是稠油热采蒸汽吞吐、蒸汽驱、SAGD。PPT把这部分安排在了泡沫模拟之后从初始条件讲起再到井定义、生产动态设置最后是运行与后处理。这几个环节环环相扣任何一个环节出错都会让前面所有工作白费。4.1 初始条件垂直平衡、参考压力与温度场初始条件段用*INITIAL开头*VERTICAL声明垂直平衡初始化。垂直平衡的含义是模型在初始条件下处于重力-毛管力平衡状态压力和饱和度随深度自然分布。REFPRES和REFDEPTH给参考压力及参考深度其余网格的压力按流体静压力自动计算。*TEMP给初始温度场热采模型中这个参数必须与实际油藏温度一致否则蒸汽注入后的热损失计算全部偏大。饱和度初始化有两种方式直接给各网格的饱和度值或者给油水界面、油气界面的深度。*SW、*SO、*SG分别给水、油、气饱和度*DWOC给油水界面深度*DGOC给油气界面深度。原油油藏通常用界面深度方式初始化界面深度以上的网格含油以下网格含水。如果界面的设定与地质储量报告不一致计算出的原始地质储量就会偏差很大。一个典型的热采模型初始条件设置-- 初始条件段 *INITIAL *VERTICAL *REFPRES 15000.0 *REFDEPTH 1500.0 *TEMP 45.0 *DWOC 1650.0 *DGOC 1450.0 *SW *EQUIL *SO *EQUIL *SG *EQUIL*SW *EQUIL表示水的饱和度按垂向平衡自动计算油、气饱和度同理。TEMP 45.0是原始油藏温度单位是摄氏度。热采模型里TEMP填错是致命的——如果你把45°C填成45K蒸汽注入温度200°C和油藏温度的温差会偏差近200摄氏度热损失和加热半径完全失真。初始条件段还有一个容易被忽略的点对于泡沫模拟初始时油藏中不应该有表活剂和泡沫液膜组分。如果从其他算例复制数据体要检查是否有残留的组分初始浓度赋值否则模型一开始就带着高浓度表活剂注入压力、含水率等指标全部异常。这个问题在第5章的避坑部分会专门展开。4.2 井定义与射孔WELL、OPERATE、PERF的关键顺序STARS中井定义的关键字顺序非常重要必须先定义井名和井类型再设置操作条件最后射孔。井定义段从RUN开始用WELL声明井名*PRODUCER声明生产井*INJECTOR声明注入井。*OPERATE设置工作制度生产井可用定液量、定油量或定井底流压控制注入井可用定注入量或定注入压力控制。蒸汽吞吐模型还有一个特殊阶段焖井。焖井阶段不需要注入也不需要生产只需要让井关闭一段时间模拟热量扩散。STARS中使用*SHUTIN命令将井关闭按时间步继续推进等焖井结束后再恢复生产。这个逻辑看似简单实际操作时很多新手把焖井阶段的井底流压设成0导致模型在焖井期间持续回流模拟出的生产动态严重偏离实际。井筒几何参数*GEOMETRY对热采模拟的影响也很显著。*GEOMETRY K 0.15 0.0 表示井筒半径为0.15米、表皮系数为0后续还需要给定井筒传热系数来计算井筒热损失。实际项目中井筒热损失参数需要与矿场的井口温度和井底温度测试数据做匹配否则注入蒸汽到达井底时的干度可能与设计值相差很大。4.3 运行与结果后处理OUT文件里看什么、SR2文件里查什么模型运行后会产生两类结果文件.out文本文件和SR2二进制文件。.out文件记录了每步的迭代信息、物质平衡误差、警告和错误信息SR2文件保存了压力场、温度场、饱和度场等动态结果供可视化后处理软件读取。判断一个模型是否算“成功”不是看程序有没有跑完而是看.out文件里的物质平衡误差和收敛行为。检查.out文件的基本操作# 快速扫描 out 文件中的警告与错误 grep -E WARNING|ERROR model.out | head -30 # 查看物质平衡汇总 grep -A 5 MATERIAL BALANCE model.out | tail -30grep输出中如果ERROR行数超过*MAXERROR设置的值程序会提前终止如果只有少数WARNING通常不影响结果。物质平衡误差是更重要的指标STARS默认的物质平衡容差在1e-5量级但工程上物质平衡误差小于0.1%就认为可以接受。如果误差持续增大通常是时间步长过大或网格太粗造成的。SR2文件的后处理通常在可视化软件中完成。需要重点检查的场包括温度场蒸汽腔扩展范围、含油饱和度场热驱波及效率、压力场注入井周边压力响应以及泡沫组分浓度场泡沫前缘推进位置。对于氮气泡沫压水锥模拟还要关注含水率随时间的变化曲线上是否出现了泡沫段塞到达生产井时的含水率下降台阶。5. 避坑指南STARS建模与运行中的六个高频问题STARS模块的参数体系庞大真正跑起来之后出问题的位置高度集中。我把实际项目中遇到最多的问题整理成六条按“现象、原因、解决”的方式列出来这些坑基本覆盖了从建模到运行的主要环节。5.1 建模与数据准备阶段三个高频坑坑一单位制混用导致注入量差百万倍现象是模型能跑通但注入井的累积注入量、产出液量等指标和矿场报表对不上甚至差出几个数量级。原因多半是数据体头部写的是*INUNIT SI但后面某个区块的密度、深度数据是从FIELD单位模板里直接复制过来的。比如深度填了英尺压力填了psi而单位制声明的是SI模型内部换算后网格深度和压力全部错乱。解决方法是建模完成后花10分钟做一次单位自查检查深度数据是否在几百到几千米量级、压力是否在几千到几万kPa量级、密度是否在几百到一千多kg/m³量级。发现任何一位数偏离这个范围先查单位制再看数据本身。这个习惯能避免绝大多数单位制陷阱。坑二网格方向与地质模型不一致导致井位错位现象是井的定义坐标看起来没问题但后处理中井的轨迹明显偏离了地质模型中的实际位置饱和度场看起来像是镜像翻转。原因通常是*DI、*DJ方向与地质建模软件导出的X、Y方向没有对应起来。角点网格导出时I方向可能对应X方向也可能对应Y方向不同软件处理方式不同。解决方法是建模前画一个很小的网格几何做方向标定在一个粗网格模型里定义一口井看井落在哪个网格块再和地质模型的坐标对比。确认方向一致后再进行大规模数据导入。我一般会在模型正式计算前先跑一个1到2个时间步的诊断算例检查井位、网格体积和初始储量确认无误后再跑完整模型。坑三泡沫组分初始化不为零导致泡沫“凭空出现”现象是注泡沫模拟的初始阶段注入压力异常偏高或者含水率曲线一开始就异常下降仿佛油藏里本来就有泡沫。原因是从其他泡沫算例复制数据体时初始条件段残留了表活剂或LAMELLA组分的浓度赋值新建模型没有将这些值清零。解决方法是检查初始条件段和组分定义段确认表活剂和LAMELLA的初始浓度为零。具体做法是在*INITIAL段显式写出所有组分的初始摩尔分数不写就可能沿用上一个算例的残留数据。这个坑特别隐蔽因为.out文件不会报错只有查看初始组分的分布云图时才能发现异常。5.2 运行与收敛控制阶段三个高频坑坑四迭代不收敛时盲目缩小DTMAX现象是模型运行中时间步反复被截断迭代次数持续飙升日志里频繁出现不收敛的提示。很多人的第一反应是把*DTMAX从10改成0.1结果模型倒是能算过去但计算量暴增一个原本几小时的算例变成几天都跑不完。实际上不收敛的原因多数不在时间步长而在物性和控制参数。正确排查顺序是先检查NORM设置是否过严NORM的默认值是每一时间步内压力的最大允许变化量设得太小会让模拟器频繁截断时间步再检查NEWTONCYC是否过小牛顿迭代次数不够就无法在单个时间步内收敛最后看AIM自适应隐式选项是否开启没有开启时全显式计算在热采模型中很容易发散。这些都检查过后才轮到调整*DTMAX。坑五重启文件没配置导致算例白跑现象是算例跑了三天剩最后一步时机器断电或磁盘写满整个算例从头开始重新计算。原因很简单数据体里没有写WSRF RST和RESTART模拟器从头到尾只保留一份输出文件没有保存任何中间状态。解决方法是任何超过12小时的算例都必须配置重启机制。数据体头部加WSRF RST 1让模拟器按固定时间间隔写入重启文件再加RESTART 1让模拟器在重启时读取最近的存档点。配置一次成本极低但能省下大量重复计算时间。我的习惯是所有正式方案算例都设成每5个时间步写一次重启文件即便出问题最多丢失几分钟的计算进度。坑六相渗插值端点不全导致泡沫不起作用现象是最气人的注泡沫算例和注纯气算例的生产曲线几乎重合泡沫阻力完全没有体现。原因是相渗插值设置不完整*DDTRAPW定义了插值函数但高界面张力相渗表和低界面张力相渗表只给了一套插值没有终点可插模拟器只能退回到同一套相渗。解决方法是检查SWTT和SLT两套相渗表是否都给了数据并且高低界面张力端点之间的差异是否合理。还有一个隐藏参数FMSURF如果设置了泡沫最低浓度但注入浓度远低于该值泡沫也永远不会生成。排查时先确认注入浓度大于FMSURF再确认两套相渗表都有效最后看*FMMOB是否给成了默认值1——*FMMOB等于1意味着泡沫阻力因子为1气相渗透率没有被任何折减泡沫自然不起作用。6. 结果验证三板斧OUT文件诊断、SR2后处理与粗化校验模型算完不等于结果能用。我拿到任何STARS算例的最终结果都会先做三件事诊断OUT文件、检查SR2关键场、用粗化模型交叉验证。做完这三步才有底气把模拟结果拿到方案讨论会上去讲。第一板斧是OUT文件的收敛性体检。从.out文件中抽取“MATERIAL BALANCE”段落检查累计物质平衡误差是否小于0.1%。同时统计每条警告的出现次数特别关注与负饱和度、负压缩性相关的警告。用一行命令就能完成大部分检查# 汇总输出文件中的警告条目及出现次数 grep WARNING model.out | sort | uniq -c | sort -rn | head -10如果热力学警告出现几十次说明有局部网格的物性超出了有效范围要定位到具体网格和时间步去查。第二板斧是SR2后处理的关键场检查。泡沫模拟案例至少要看下面这几个场。检查对象后处理中看什么判断标准温度场蒸汽腔纵向扩展范围蒸汽腔前缘与射孔段对应形态对称含油饱和度热驱波及区含油饱和度下降幅度蒸汽腔波及区So明显下降冷凝带可见泡沫组分浓度泡沫前缘推进距离前缘到达生产井前含水率上升放缓压力场注入井周围压力响应泡沫段塞期间注入压力升高但未超破裂压力后处理中最有价值的是把含油饱和度场和泡沫浓度场叠加显示能直观看出泡沫段塞是否有效封堵了高渗条带让后续注入流体转向低渗区域。如果泡沫前缘推进速度过快多半是吸附参数设小了或者泡沫阻力因子偏低。第三板斧是网格粗化交叉验证。细节网格跑出来的结果如果和粗网格结果趋势矛盾要先怀疑细网格模型的数值问题而不是直接相信细网格更准。我的习惯是把同一模型在20×20的粗网格上跑一遍调整参数观察响应趋势确认物性和相对渗透率取值合理后再上细网格做最终计算。粗网格跑一个算例可能只需要20分钟细网格要跑三天但粗网格已经把大部分参数错误过滤掉了。有一个让我印象深刻的教训某次接手一个氮气泡沫压水锥模拟项目直接细网格跑了三天出来含水率曲线和矿场实际动态完全相反查了两天才发现是初始表活剂浓度没有清零模型一开始就带着泡沫在跑。从那以后我每次建模都强制走一遍固定流程单位制检查、初始化浓度清零、OUT文件物质平衡验证、粗网格先行。这套流程帮我挡掉了至少一半的无效计算。希望帮到你。本文还有配套的精品资源点击获取