简介CMG数模软件SRS模块使用入门教程以一份PPT课件形式呈现面向油藏数值模拟工程师与石油工程专业学生旨在帮助初学者快速理解SRSSTARS模块的模拟逻辑与操作要点。课件内容系统覆盖软件简介、STARS模块主要关键字如输入输出文件名控制、网格和油藏定义、流体组分定义、岩石流体特性、初始条件、数值方法控制及井定义等、所需数据的准备与处理、油藏热采模型的建立与运行、结果后处理并专门给出氮气及氮气泡沫压水锥数值模拟案例涵盖泡沫过程模拟的关键思路。资源共1个pptx演示文稿文件压缩包大小5.48MB结构紧凑、侧重概念串联便于对照软件界面边看边学。已有825人学习读者可以借此快速掌握SRS模块从数据准备、模型搭建到结果分析的整体工作流为后续独立开展热采或泡沫模拟打下基础。1. SRS模块是CMG里哪个环节先搞清楚它解决什么历史拟合做完那一刻很多油藏工程师刚松一口气就撞上更难的追问甲方问你这模型预测的五年产量有几成把握确定性模型只能给一条曲线给不出区间。CMG数模软件里的SRS模块就是解决这个的中文语境下叫随机油藏模拟工程落地由CMOST调度批量算例完成。SRS做的事可以概括成一句话把模型里靠不住的地质、流体参数设成带范围和分布的不确定变量采样生成一批算例跑完再把产量曲线汇总成概率分布输出P10、P50、P90三条预测线。有了这个区间开发方案的产量承诺才有置信度经济评价的风险折减才有依据。这篇教程适合两类人会跑CMG单算例、想跨到概率预测的油藏工程师以及想用SRS出方案报告的研究生。下面按“备什么、怎么搭、参数怎么给、结果怎么读、哪里翻车”展开每步给可直接照做的参数。2. SRS跑之前模型基线、参数清单和输出指标很多新手拿到SRS第一件事就是往CMOST里塞参数盼着跑出来一条漂亮的P10-P90曲线。我见过太多这样的案例模型本身没收敛参数清单堆了十几个变量跑完的龙卷风图完全没法解释。SRS不是点击就出图的按钮它是一台榨汁机放进去的是烂苹果出来的不可能是好果汁。所以在按“运行”之前三件事必须定下来基线模型能不能站住、哪些参数值得设为不确定变量、用什么指标衡量结果。2.1 基线模型三项检查收敛、储量与历史拟合SRS里的每一个算例都是在这个基线模型上乘一个扰动系数生成的。基线模型带病所有算例都会带着同一个病灶而且SRS的大批量运行会把问题放大本来单个算例勉强跑完的病态网格在100个算例里可能直接崩掉三成。所以基线检查不是走过场我一般按三个层次查。第一项是数值收敛。用模型中后段一天的实际生产制度跑完一个完整算例打开日志文件查三件事有没有负饱和度、压力有没有越界、时间步有没有频繁回退。CMG日志里时间步反复缩短又回退通常意味着数值网格有问题这类模型在SRS批量运行里会成批失败。第二项是储量匹配。把模型的STOIIP或GIIP与地质建模的量版对比偏差一般控制在5%以内。这一步常被跳过因为默认建模阶段已经对过。但实际上从地质模型粗化到模拟网格储量损失5%到10%很常见。SRS参数里如果还有孔隙度乘子、含油饱和度储量偏差会被再次放大预测曲线的区间宽度会失真。第三项是历史拟合。SRS做不确定性分两种场景历史拟合之前评估模型不确定性历史拟合之后做预测风险分析。绝大多数人碰到的是后一种。此时区块级历史拟合至少要达到趋势一致、产油和含水率总体偏差在可接受范围内否则SRS输出的P50曲线会偏离实测数据甲方一眼就能发现。检查项和及格线整理成下面这张表直接对着打勾就行。检查项做法及格线数值收敛用实际生产制度跑通算例查日志无负饱和度时间步不反复回退储量匹配模拟储量对比地质建模量版偏差5%以内历史拟合至少完成区块级拟合产油、含水趋势一致总体偏差10%以内2.2 不确定性参数清单地质、流体、动态三类怎么列参数清单是SRS方案里最容易被做极端的一步。新手倾向多列觉得变量越全越科学结果算例数爆炸、结果解释困难熟手倾向少列只留自己熟悉的那几个结果区间过窄、预测过度自信。我一般控制在6到10个参数按三个类别分好。地质类参数包括孔隙度乘子、水平渗透率乘子、垂向渗透率乘子、净毛比、含水饱和度。这类参数在模型文件里通常以乘子形式作用在整层或某个区域注意渗透率一定要分方向因为水平与垂向渗透率对产量的影响机制完全不同合并成一个变量会掩盖真实的敏感性差异。流体类参数指相对渗透率曲线的端点值和Corey指数。端点值包括油相最大相对渗透率、水相最大相对渗透率决定两相流动的最终产液能力Corey指数决定过渡带形态。流体参数的取值范围必须来自岩心实验或PVT报告不能靠经验拍脑袋因为它们对含水率的影响极其敏感范围稍大含水率曲线直接失控。动态井类参数包括井指数乘子、表皮系数、定压生产时的井底压力。这类参数影响近井流动效率历史拟合阶段通常是主力调整对象。如果目标是评估未来预测的不确定性这类参数仍然要留但范围可以比地质类小一个量级。这里有一条关键原则相关性强的参数不要同时给大范围。孔隙度乘子与含水饱和度乘子同时大范围浮动可能组合出“高孔隙、高含水饱和度”这种对储量影响互相抵消但物理上别扭的组合。更好的做法是先做单参数敏感性扫描识别主控参数再把次要参数固定在基准值附近。类别典型参数表达方式常用范围参考地质孔隙度乘子无因次乘子0.91.1地质水平渗透率乘子无因次乘子0.52.0流体油相相对渗透率端点01基准值±20%流体Corey指数指数常见24基准值±30%动态井指数乘子无因次乘子0.81.22.3 输出指标怎么定累产油、含水率还是地层压力SRS每次运行都会输出海量结果但真正进入后续分析的一般就几样预测期末的区块累积产油量、某个关键时间点的含水率、区块平均压力。这几个指标对参数变化的敏感度差异很大。累产油对储量类参数敏感含水率对相对渗透率参数敏感地层压力对水体规模和传导率敏感。如果只定义累产油一个指标你会得到一个看起来不错的区间却说不清它到底被地质储量还是流动参数主导。在CMOST里定义输出指标时我的习惯是建两套一套是历史拟合阶段的误差目标函数模拟结果与实测数据做差另一套是预测阶段的输出指标取未来某个时间点的累积产量和含水率。这样SRS跑完一轮既能看参数对历史的主导作用又能看对未来的不确定性贡献一张龙卷风图把两件事都讲清楚。一个容易被忽略的细节是输出频率。SRS算例默认按模型自带的输出控制写结果文件如果原模型设置了每步都写重启文件100个算例能把磁盘撑爆。设置指标时顺便把输出频率改成按季度或半年输出预测阶段足够用了。提示SRS批量跑之前先拿基线模型单独跑一遍并确认输出全部正常。这一步能省掉后面一半的排障时间。3. 搭一个能跑的SRS最小闭环BUILDER导出、CMOST调度、Results回看SRS的算例流程不是黑匣子数据流很清晰BUILDER建的模型文件是输入CMOST负责生成参数组合并调度模拟器执行模拟器把每个算例的结果写回指定目录最后在Results里汇总可视化。我第一次在这条链路上卡了好几次主要是不清楚CMOST到底改了什么、不改什么。把最小闭环完整跑通一次后面就全顺了。3.1 从BUILDER导出模型先确认数据文件里的关键字BUILDER导出的模型数据文件是文本格式。SRS要作为不确定性参数的孔隙度、渗透率、相对渗透率曲线都以特定关键字存在这个文件里CMOST改的是关键字后面的值不动模型结构。所以做SRS之前先确认这些关键字在不在、拼写符不符合当前模拟器的规范。# 检查模型数据文件里的孔隙度、渗透率关键字是否存在 grep -ni ^PORO\|^PERMI\|^PERMJ model.dat | head -5 # 检查相对渗透率表关键字确认有可用的相渗数据 grep -ni ^KRO\|^KRW\|^SW model.dat | head -10 # 检查水体关键字水体对压力类指标影响很大 grep -ni aquifer\|water body model.dat | head -5这段检查的意义在于如果模型里没有独立的孔隙度分布而是通过区域乘子统一控制那SRS里对应的参数就应该设为区域乘子而不是全局孔隙度关键字。很多新手直接照教程在CMOST里添加孔隙度参数运行时却报关键字不存在第一轮就失败。另外CMG关键字识别不区分大小写但IMEX、GEM、STARS之间的关键字语法有差异换模拟器后数据文件要做相应转换这个坑在第5章会再提到。3.2 在CMOST里建SRS算例从导入到提交的六个步骤CMOST是SRS调度的执行引擎界面上的概念叫Study本质是个参数试验管理工具。我一般按六步走每一步对应一个必须想清楚的问题。第一步新建Study选择模拟器类型导入模型文件。这里要确认模拟器类型与模型文件匹配导入后CMOST会解析模型并列出所有可用关键字参数并做语法检查有错直接标红。第二步在参数列表里添加不确定性参数。这一步对应第2章讲的参数清单把参数映射到具体关键字。注意CMOST里参数名可以自定义建议用带语义的命名比如PermX_mult跑完以后看结果不用猜。第三步设置每个参数的取值范围、分布类型和相关性。范围的设定方法下一章细讲这里先记住一条范围是给CMOST做采样用的不是拍脑袋定的每个范围都要能说出来源。第四步定义目标指标。历史拟合场景选误差函数预测场景选未来节点的累积产量或含水率值。一个Study里可以建多个指标建议至少建两个一个对应历史拟合误差一个对应预测结果。第五步设置采样方法和算例数。新手直接用默认的拉丁超立方采样算例数先给50个做试跑确认链路通顺后再加到正式数量。第六步选择运行环境提交。单机多核、集群都支持按手头资源定。提交前确认输出频率已经调低不然结果文件会撑爆磁盘。设置项新手推荐值备注采样方法拉丁超立方覆盖均匀比纯随机稳定试跑算例数50先验证链路再加大正式算例数100300按单算例时长与资源预算定指标个数2个以上历史误差 预测指标输出频率季度或半年防止结果文件膨胀3.3 批量运算与进度监控别等跑完才发现失败算例提交后不能放着不管。CMOST界面会显示每个算例的状态但本地跑大算例时我习惯开一个终端窗口实时看目录避免界面卡顿耽误判断。# 每分钟刷新一次统计已完成的算例目录数量 watch -n 60 find cases -maxdepth 1 -type d -name case_* | wc -l # 抽查某个算例日志的末尾WARNING和ERROR是重点 tail -50 cases/case_037/model.log | grep -Ei error|warning|blocked看日志的意义是提前发现趋势性问题。如果前20个算例里已经有3个报同一个关键字错误后面80个大概率也错应该停掉批量任务回去修参数或模型而不是让几百个算例继续空跑。这个亏我吃过一次夜里批量跑了400个算例早上起来发现失败原因全是同一个相渗表引用错误一半算例白跑。3.4 第一轮跑完看什么完成率、目标函数与异常算例第一轮50个算例跑完后先别急着打开Results看曲线。按顺序做三件事看完成率、看目标函数分布、抽查异常算例。完成率低于80%先排查失败原因。目标函数分布如果呈现明显双峰说明参数空间里有某个参数把结果分成两个物理上不同的群体通常是水体参数或相对渗透率端点在某个临界值两侧行为突变。抽查异常算例时看它的参数组合是不是落在范围边缘如果大量失败算例集中在边缘说明范围定宽了下一轮要收窄。至于画P10/P50/P90曲线Results里可以直接加载多个算例的汇总文件做统计。这里有个细节统计结果基于你选中参与统计的算例集合如果混入失败算例的默认值曲线会被污染。统计前确认加入集合的每个算例都是正常完成的。4. SRS参数范围与分布结果靠不靠谱全看这一步SRS跑出来的区间宽度几乎完全由参数范围和分布决定。给窄了P10到P90区间窄得像一根线甲方会问“不确定性就这么点”给宽了区间宽到没有任何决策意义。参数范围设置是SRS里最像“玄学”的一步其实有方法可循。我见过太多人在这里靠感觉拍板结果整轮SRS变成自欺欺人的数字游戏。4.1 参数范围三种定法数据分位、单参数扫描、文献类比第一种是数据分位法最扎实。把岩心分析、测井解释的孔隙度和渗透率数据拿出来统计P10和P90分位值直接作为参数范围。比如某个层段测井解释渗透率P10是30毫达西、P90是300毫达西那渗透率乘子的范围就按这个倍数关系设定。这个方法的好处是每个范围都有数据支撑汇报时经得起问。第二种是单参数扫描法最实用。在基准值附近取±10%、±20%、±30%各跑一个算例看目标指标的变化幅度。如果±10%就能让累产油变化5%以上说明这个参数很敏感范围要谨慎如果±30%都看不出明显变化说明它不敏感可以考虑固定。这个方法也顺带回答了2.2节里“哪些参数值得保留”的问题。第三种是文献类比法用于冷门参数初期取值。同类油藏、类似开发方式公开发表的不确定性参数范围可以当起始值但必须在第一轮SRS跑完后用前两种方法修正。直接用文献值交差是最容易翻车的因为不同油藏的储层非均质性差异太大。三种方法不是三选一正确的姿势是组合先文献类比或数据分位定初值再用单参数扫描筛选和收窄最后才进入正式随机采样。4.2 分布类型怎么选均匀、三角还是对数正态参数范围定了之后还要回答一个问题在范围内怎么分布。这一步新手经常忽略直接用默认均匀分布结果P10和P90的预测区间往往偏宽因为均匀分布假设每个取值等概率这在真实储层里很少成立。均匀分布适合没有先验信息、只知道上下限的参数。三角分布适合知道最可能值的情况比如某个层的净毛比地质上判断大概率在0.75附近那用三角分布把众数设在0.75比均匀分布更接近真实。对数正态分布适合渗透率这类在数量级上波动的参数渗透率实测值通常服从对数正态直接用正态分布会出现负值这种物理上不可能的采样结果。渗透率的对数正态参数可以用简单计算从P10/P90反推import numpy as np p10, p90 50, 300 # 渗透率P10与P90单位mD # 对数正态分布下 ln(P10)mu-1.2816*sigmaln(P90)mu1.2816*sigma sigma (np.log(p90) - np.log(p10)) / (2 * 1.2816) mu np.log(p90) - 1.2816 * sigma print(fsigma{sigma:.3f}, mu{mu:.3f})这段代码算出的mu和sigma可以直接填进CMOST的对数正态分布参数里。注意如果油藏的渗透率跨度超过一个数量级对数正态几乎是必须的选择均匀分布会让低渗组合和高渗组合各占一半概率明显高估不确定性。分布类型适合场景注意点均匀只有上下限无先验信息尾部概率偏高区间偏宽三角知道最可能值众数要有数据支撑对数正态渗透率等数量级波动参数避免负采样值正态孔隙度等对称分布参数标准差不要超过均值一半4.3 采样策略与算例配比先敏感性后随机算例怎么采样、配多少个数直接决定SRS的总机时和结果可信度。我的建议是分两阶段。第一阶段做敏感性分析用实验设计方法生成少量算例比如Plackett-Burman或者部分因子设计算例数通常是参数数量的两倍左右。这一阶段的目的是筛选主控参数把不敏感参数固定下来同时检查参数范围有没有导致批量不收敛的极端组合。第二阶段做随机采样对筛选后的主控参数用拉丁超立方生成正式算例。拉丁超立方的特点是保证每个参数的全范围都被覆盖比纯随机采样收敛快尤其在算例数只有100左右时优势明显。正式算例数没有一个万能值我用过一条粗略的预算公式单算例运行时长×算例数可接受的总机时。单算例跑10分钟300个算例就是50小时一个晚上加一个白天能跑完可以接受单算例跑1小时300个就太多了建议降到100并接受略粗的分布。如果CMOST版本支持最好在参数之间设定相关性约束。比如渗透率与孔隙度在测井解释里常有正相关直接设一个相关系数可以避免采样出“高孔隙但超低渗透”这种物性上不成立的组合。相关性设在前采样结果落在物理合理区间内后面结果解读能省很多口舌。注意不同版本的CMG对CMOST界面布局差异较大但参数、分布、目标函数、采样这些核心概念是通用的。版本升级后先跑一轮50算例试跑别直接上量产。5. SRS使用避坑五个高频翻车点与处理办法这一章把我实际遇到过的、也最常见别人踩到的高频问题按“现象、原因、解决”写出来。每一条都是真金白银换来的经验对照着排查能省不少时间。5.1 算例成批不收敛完成率掉到六成现象100个算例跑了一半CMOST显示完成率只有六成剩下的全标Failed日志里大量时间步回退和饱和度越界报错。原因最常见的元凶是参数范围给太大。渗透率乘子范围给到0.1到10倍某些采样组合会让相邻网格传导率差异过大模拟器把时间步压到极小仍然无法收敛。另一个隐蔽原因模型初始化平衡在扰动后不再成立体系刚启动就报饱和度越界。解决先把范围收窄到0.5到2.0倍再用对数正态分布替代均匀分布避免极端尾部的采样组合。同时把模型里关键的收敛控制参数调松一档。收窄范围不是投机取巧而是让参数组合落在物理可接受的区间里这是SRS设计的一部分不是退让。5.2 龙卷风图全是渗透率其他参数没贡献现象敏感性分析出来的龙卷风图渗透率相关条带占了80%孔隙度、相渗端点几乎看不见看起来像只有渗透率重要。原因这多半是取值范围量纲不一致造成的假象。渗透率乘子范围给的是0.1到10倍孔隙度乘子只有0.95到1.05两个参数对产量的影响当然不在一个数量级。这不是真实的敏感性是范围设计的问题。解决把所有参数统一改成相对变化百分比比如都在±20%、±30%的相对尺度下重新跑一轮敏感性。如果此时孔隙度仍然不重要那它确实不重要可以固定为基准值减少正式随机采样的维度还能省机时。5.3 P50曲线和手工预测对不上现象SRS输出的P50曲线和当初用参数中值手工跑的单个算例差了10%以上用户第一反应是结果不可信。原因P50是结果的概率中值不是输入参数取中值时对应的输出。模型对参数是非线性的参数分布偏斜加上参数间的交互作用会让P50明显偏离“中间输入”的输出。很多新手把这个当Bug其实恰恰是SRS的价值所在——它告诉你中间输入不代表中间结果。解决不要拿手工中值对比。正确的验证方法是取出P50算例的参数组合回写模型单独跑一遍如果和CMOST的P50输出一致说明计算链路没问题如果不一致才需要检查CMOST代理模型是否有误差。5.4 预测期含水率出现平台震荡现象部分算例的含水率曲线在预测后段出现锯齿状平台震荡既不像真实动态也和邻井生产数据矛盾。原因参数组合里出现了物理上不合理的搭配。比如相对渗透率端点与Corey指数同时取极端值组合出过陡的过渡带加上输出节点太稀疏产生了数值振荡。另一个可能是井在预测期射孔层位变化与网格划分不匹配。解决把震荡算例的参数组合导出来定位是哪两个参数的同时极端取值导致的收窄对应范围或加相关性约束。如果是个别井的问题检查该井射孔和完井定义在扰动过程中有没有被意外改动。5.5 算例输出把磁盘写满现象跑到第300个算例时磁盘剩余空间归零整个批次中断前面几百个算例白跑。原因模型文件里设置了高频输出每个时间步都写重启文件和完整结果单个算例几个GB乘以300个算例轻松撑爆磁盘。解决批量运行前先跑一个算例du -sh看一下结果目录大小乘以算例数估算总量。预测期把输出频率改成按季度或半年关闭中间重启文件的保存。还可以分批发先跑100个验证稳定再放剩下200个风险摊开。6. 让SRS结果真正被采纳用P50算例反推新基准模型SRS跑完拿到P10/P50/P90三组曲线很多人直接贴进报告交差。但P50曲线只是一个统计结果它对应的算例才是有价值的资产。把P50算例的参数组合提取出来写回模型文件重新跑一遍你就得到一个经过成百上千次扰动验证的新基准模型。这个模型比最初的历史拟合模型更可信因为P50参数组合代表了在给定参数分布下最可能的地层状态。具体做法分四步。第一步在CMOST的结果列表里找到P50对应的算例记录它所有参数的取值。第二步把这些取值换算成乘子写回原始模型文件里对应的关键字另存为新文件千万别覆盖原模型。这里可以用脚本批量替换也可以直接在BUILDER里打开修改两种方式都行关键是保留原始模型作为对照。第三步用这个新模型单独跑一遍对比CMOST里P50算例的输出曲线两者一致说明链路无误、可以信任。第四步把新基准模型用于后续的开发方案计算、井位部署论证和经济评价。我自己养成的习惯是每个SRS项目都在固定目录里保留一份“P50回写”模型下一轮更新参数范围时直接在这个模型上迭代而不是回到最初的历史拟合模型。这样SRS就不只是一次性分析而是一套持续更新的模型管理流程。这个习惯帮我省过好几次返工有一口调整井的方案我直接拿P50模型验证省掉一整轮重新拟合的时间。如果你刚接触SRS先别追求算例数量和花哨的分布把第2章的基线检查、第3章的最小闭环、第4章的范围确定老老实实做一遍再跑一轮50算例试水比直接上500算例产出的结果更有说服力。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?