油气水综合判断:测井曲线交叉验证与Python实现
2026/9/18 15:11:03 网站建设 项目流程

简介:《油气水的综合判断》是一份面向油田地质研究、录井解释与测井评价人员的专业参考文档,聚焦如何从地质剖面中准确识别油、气、水层这一关键问题。文档系统介绍了利用钻时曲线、岩屑与岩心显示、气测异常、泥浆性能变化等录井资料进行定性判断的方法,同时阐述了含油饱和度、束缚水与可动水等测井解释核心概念,并针对低渗透与高渗透砂岩油气层容易出现的解释偏差给出了辨析思路。内容还涉及油、气、水层判断标准、综合录井仪参数变化特征及相渗透率对产液性质的影响,有助于现场人员避免漏掉油气层或误射水层,提升勘探开发决策的准确性。资源为docx格式,共1个文件,压缩包仅20KB,篇幅精炼、结构清晰,便于快速查阅与学习。这份资源已有51人浏览学习,适合地质录井、测井评价及油田开发相关岗位的初学者和一线技术人员作为入门与实操参考。

1. 油气水综合判断:给测井曲线找“合谋证据”而不是听单条曲线发言

单条电阻率曲线不能定油气水,这几乎是测井解释最贵的一课。高电阻率段既可能是油层、气层,也可能是高矿化度水层或致密干层;低电阻率段里又往往藏着泥质束缚水造成的低阻油层。油气水综合判断的真正含义,是把电阻率、声波时差、中子、密度和自然伽马放在同一口井、同一段储层里交叉验证——先定性分相,再定量算含油饱和度,最后用试油或地层测试数据一票否决。这套流程做顺了,是勘探井解释的基本功;做不顺,就是钻井队返工和储量计算误差的来源。下面从测井物理讲到能直接落地的脚本和参数,把这套判断逻辑完整拆开。

2. 油气水综合判断从测井物理开始:流体在曲线上的“指纹”怎么读

2.1 电阻率分相:能区分油水,却分不开油和气

电阻率测井是所有油气水判断的出发点。地层水的矿化度决定了它的导电性,一般纯水层的电阻率在 0.02~3 Ω·m 之间,矿化度越高数值越低;原油和天然气都不导电,所以油层和气层的电阻率普遍比水层高出一个数量级或更多。但这里有个天然缺陷:电阻率只能回答“孔隙里导电的液体多不多”,回答不了“不导电的到底是什么”。油和气的电阻率下限和上限区间几乎重叠,单看电阻率根本无法区分气层和油层。

还有两个常见干扰:其一是高矿化度水层,自由水电阻率低到零点零几欧姆米,但如果储层致密、孔隙度不到 5%,同样长度内导电水体积占比小,RT 照样可能抬到几十欧姆米,长得很像油气层;其二是泥质附加导电,泥质含量高的储层即使含油,电阻率也会往下压,误判为水层的概率非常大。所以电阻率必须和孔隙度类曲线配对使用,它提供的是第一层“水不水”的证据,不是最终结论。

2.2 中子—密度—声波的组合,才是气层的独有指纹

天然气在井筒里的物理效应非常独特,孔隙度测井中的反应几乎是“一对一”的。中子测井测得的是含氢指数,气层孔隙里的氢密度只有水的六成到七成,导致中子孔隙度读数明显偏低;密度测井测得的是体积密度,气的密度远低于油和水,同样体积内质量变轻,密度曲线数值下降,换算出的密度孔隙度变大;声波时差在气层中因为声速变慢而增大,严重时还会出现周波跳跃——这是现场最直观的气层信号。

把这三种响应组合起来看,习惯上定义一个气效应指标:中子孔隙度与密度孔隙度的差值,即 φn − φd。油层和含油水层里,中子与密度孔隙度基本接近或只有零点零几的正向差异;气层则因为“中子低、密度孔隙度大”出现明显的负向差异,经验判别线一般取 −0.04 v/v,越负说明气饱和度和含气丰度越高。需要说明的是,这个数值在不同岩性和压实程度下要微调,碎屑岩和碳酸盐岩的骨架参数不同,指示值也会有偏移。

2.3 自然伽马和声波时差:排除泥岩和致密层

在正式判断油气水之前,储层与非储层的边界必须先用自然伽马和声波时差圈定。泥岩在自然伽马上普遍高值,在声波时差上表现为高时差段,在电阻率上则是低阻段;这三条组合可以快速删除泥岩段。致密灰岩或钙质砂岩则往往同时表现为低中子、低密度孔隙度、低伽马,电阻率也会异常升高,这是典型的干层“高阻陷阱”。

实际操作中我一般先用自然伽马做泥质含量曲线,再按研究区的储层下限(常用泥质含量小于 30%、孔隙度大于某个研究区下限)切出有效储层段,最后再在储层段内进行油气水判别。这样能保证交会图和饱和度计算不被泥岩点污染。

曲线类型油层气层水层泥岩
深电阻率 RT高(数倍于水层)高(通常更高)
声波时差 AC正常明显增大,可能有周波跳跃正常
中子孔隙度 CNL正常明显偏低正常偏高
密度 DEN正常或略低明显偏低正常偏高
φn − φd 指示接近 0显著负值接近 0 或略正正值

这组响应对应的是砂岩储层,如果是碳酸盐岩,骨架密度和声波时差基线要重新标定,但判断逻辑不变:先找气效应,再对比电阻率,最后核泥质含量。

3. 用 Python 把交会图和阿尔奇公式做成可复现的油气水判别脚本

3.1 读取 LAS 文件并建立计算工作台

现场测井数据最常见的载体是 LAS 格式。用 lasio 库可以一次性读取曲线头、深度表和所有测井曲线,比手工从文本里抠数据稳妥得多。先把泥岩和无效段滤掉,再计算孔隙度和饱和度,这样后续交会图上的点才具备地质意义。

import lasio import pandas as pd import numpy as np las = lasio.read("well_well.las") df = las.df() # 只保留研究层段且自然伽马较低的储层段,删除坏点 df = df[(df.index > 1500) & (df.index < 1700)] df = df.replace(-999.25, np.nan) df = df.dropna(subset=["RT", "AC", "CNL", "DEN", "GR"])

参数说明:LAS 文件里无效值一般记作 -999.25 或 -9999,读取后必须替换为 NaN;replace(-999.25, np.nan)前后的比对在商业数据里非常常见。自然伽马的单位是 API,深度是米,这些在曲线头里有元数据标注。这里我用RT表示深探测电阻率,AC是声波时差,CNL是中子孔隙度,DEN是密度,字段名以实际 LAS 为准,命名混乱时先统一映射。

3.2 计算密度孔隙度和气效应指标

中子孔隙度曲线在不同测井公司单位不同,有的是小数,有的是百分比;密度孔隙度则需要指定骨架密度和流体密度。砂岩地层一般取骨架密度 2.65 g/cm³,流体密度 1.0 g/cm³,压实程度偏低时可以把骨架密度降到 2.62~2.68 之间。

# 密度孔隙度:基于体积密度的标准换算 df["phi_d"] = (2.68 - df["DEN"]) / (2.68 - 1.02) # 中子孔隙度统一折算为小数 df["phi_n"] = np.where(df["CNL"] > 1, df["CNL"] / 100.0, df["CNL"]) # 气效应指示:负得越大,气层可能性越高 df["gas_index"] = df["phi_n"] - df["phi_d"]

参数说明:密度孔隙度公式里的分母是“骨架密度 − 流体密度”,分子是“骨架密度 − 实测体积密度”,物理含义是把体积密度变化折算成孔隙体积占比。流体密度取 1.02 而不是 1.0,是因为地层水中溶解了盐,密度略大于纯水,这个细节直接影响孔隙度的绝对值。np.where用来做单位归一,防止现场因测井序列的单位设置不一致导致计算结果整体漂移。

3.3 阿尔奇公式算含油饱和度并初步分类

阿尔奇公式是砂泥岩储层最常用的饱和度模型,形式为:

[ S_w = \left( \frac{a \cdot R_w}{\phi^m \cdot R_t} \right)^{1/n} ]

式中 a 是岩性系数,m 是胶结指数,n 是饱和度指数,Rw 是地层水电阻率。这些参数通常来自区域岩电实验,在没有实测数据时,砂岩常取 a=1.0、m=2.0、n=2.0,Rw 用试水资料或 SP 曲线反演。

a, m, n = 1.0, 2.0, 2.0 rw = 0.30 # 地层水电阻率,单位 Ω·m,来自区域试水资料 df["sw"] = ((a * rw) / (df["phi_d"] ** m * df["RT"])) ** (1 / n) # 综合分类:先看气效应,再看饱和度 def classify(row): if row["sw"] > 0.6: return "水层" if row["sw"] <= 0.6 and row["gas_index"] < -0.04: return "气层" if row["sw"] <= 0.6 and row["gas_index"] >= -0.04: return "油层" return "需要复核" df["fluid_class"] = df.apply(classify, axis=1)

分类逻辑说明:含油饱和度门槛取 0.6,即 Sw 低于 60% 认为孔隙中烃类占优势;气效应指标取 −0.04,低于该值优先判为气层。这两个阈值只是典型工区起步值,实际应用一定要结合试油标定调整。这里的fluid_class列的每一条记录都会生成一个可追溯的标签,方便后续和试油结论做多口井横向对比。

3.4 画交会图把判断结果可视化

交会图可以快速发现分类逻辑的边界是否正确。常用的是 RT 与密度孔隙度的半对数交会图,颜色映射gas_index值,点位上能直接看到气层、油层、水层在坐标系里的分离程度。

import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8, 7)) sc = ax.scatter( df["RT"], df["phi_d"], c=df["gas_index"], cmap="coolwarm", s=10 ) ax.set_xscale("log") ax.set_xlabel("深电阻率 RT / Ω·m") ax.set_ylabel("密度孔隙度 / v/v") ax.set_title("RT-密度孔隙度交会图,颜色为气效应指标") plt.colorbar(sc, label="φn - φd") plt.show()

坐标轴说明:水平方向用对数刻度是因为电阻率跨了好几个数量级,线性刻度会把低阻点全挤在左边;颜色越偏蓝色说明气效应越强。如果图上气层点(蓝色)和水层点(红色)没有明显分片,就要回头检查泥质校正和 Rw 取值是否正确。

4. 油气水综合判断的完整工作流:从参数准备到试油验证

4.1 开工前先把同类参数表列全,别把 Rw 的错带进结果

油气水综合判断的每个定量环节都依赖参数,其中最敏感的是地层水电阻率 Rw、胶结指数 m 和饱和度指数 n。Rw 可以从邻近井的试水化验数据换算,也可以在 SP 曲线上利用静自然电位公式反演;m 和 n 在未做岩电实验时用经验值,但要记录在报告里,方便后续评审时调整。

第一手资料要包括:目的层段深度、自然伽马测井值、深中浅电阻率、声波时差、中子孔隙度、密度、井径(判断垮塌井段)、泥浆和滤液参数。井径异常段要把对应深度上的曲线打上标记,因为扩径会直接拉低密度和中子读数,造成假气效应。

4.2 四步走的综合判断顺序

第一步是单曲线扫描。在有效储层段内把电阻率、声波时差、中子和密度按深度拉成四道,先凭肉眼找“气层显示段”和“油层显示段”的异常响应。第二步做交会图分区,把 AC─RT、DEN─CNL 和 φn─φd 分析放在一起,三种流体的点群分布基本定型。第三步用阿尔奇公式计算含水饱和度,把定性分区升级为定量分类,同一深度上分类结果要能相互解释。第四步把解释结论与区域地质图、附近井的试油结果对齐,如果井上的油气界面位置与构造图存在大矛盾,优先怀疑测井解释出的电阻率受侵入影响。

4.3 用试油数据回标定分类阈值

试油是最后的裁判。把每口井的试油层段和测井解释结果做一张对照表,统计解释准确率,重点看误判的类型和深度分布。以下代码演示了如何用试油标签重新计算分类阈值:

# 试油结论:oil / gas / water / dry result_map = {"油层": "oil", "气层": "gas", "水层": "water", "干层": "dry"} df["test_result"] = df["fluid_class"].map(result_map) # 统计每个试油层的平均 Sw 和 gas_index,作为重新定界的依据 summary = df[df["test_result"].notna()].groupby("test_result")[["sw", "gas_index"]].mean() print(summary)

回标定的作用是发现阈值偏差:如果水层的平均 Sw 到了 0.45,说明 0.6 的判别线偏宽,应当下调;如果气层的 gas_index 均值为 −0.02,说明当前阈值太保守,可能是高泥质含量做了正补偿。这种定量回代比凭经验改阈值可靠得多。

4.4 常见误判场景与校验手段

井壁垮塌造成密度和中子读数异常降低,最容易在交会图上形成“伪气层”。规避方法是始终带着井径曲线做判断,凡是井径显著大于钻头直径的井段,不计入交会图,只在文中说明。气体侵入泥浆造成的次生气显示也可能抬高电阻率,这类假象需要在现场记录里查天然气录井数据,如果有连续气测异常而测井解释定水层,要反向验证录井数据的真实性。

高凝油或稠油层内的气效应也不同于自由气层。稠油的黏度高,受压实作用影响,中子—密度组合分离不显著,单靠阈值容易分到油层里,实际可能是气顶与稠油过渡带。遇上这类情况,要加看 MDT 或 RFT 的压力梯度和流体取样记录,压力梯度是判断气油水量最直接的证据链。

5. 油气水综合判断容易翻车的三个场景和一套防御做法

5.1 低阻油层:泥质附加导电让油气“隐形”

低阻油层是高含水率误判的重灾区。泥质含量高时,黏土矿物表面阳离子交换产生的导电性会让电阻率比油层应有值低 50% 甚至更多,油层的 RT 长得和水层一模一样。防御做法是引入泥质校正的饱和度公式,最常用的是印度尼西亚公式或双水模型;如果只有阿尔奇公式可用,就必须在储层段内把 φn − φd 与 RT 放在一张图上,优先找“低阻但气效应偏负”的点群,这些点往往是隐蔽气层。

5.2 气顶和油水过渡带:分类边界不能一刀切

气顶段内的油气水界面通常不是平的,重力分异会让气顶之上是纯气,气顶之下是指数递减的油水过渡带。单纯按 Sw≤0.6 判油层、Sw 0.6~0.8 判含油水层,在过渡带里必然要和实际矛盾。好在过渡带的电阻率、密度和中子变化是渐变的,解释时直接用连续分类:把 Sw 分档(<0.3 纯油/气层,0.3~0.6 油水同层,0.6~0.9 含油水层),每档给出对应解释建议,不做三值硬判。

5.3 数据版本管理:判断结论必须能回放

测井解释结果常因参数调整而改变,不同版本的解释文件混在同事机器里,最后报告里的油气水结论只能追溯难度非常大的旧图层。配合脚本做版本回放能省掉大量复查时间:

df.to_csv(f"interpretation_v1_sw.csv", index=False)

记录内容包括处理时间、参数表、井名、曲线来源和解释分类列。当试油结果回来需要微调分类阈值时,直接加载历史版本输出做对比,哪里变了、为什么变一目了然。

最后一层防御是所有判断结论都写死一个复核条件:测井解释结论、试油结论和构造位置三者必须形成闭环。构造低部位解释成油层,试油出水,就要反思是不是高矿化度水层的电阻率陷阱;构造高部位解释成水层,就要怀疑是不是泥质校正过度。这套“三角互验”做下来,油气水综合判断的准确率通常能稳定在 80% 以上。

本文还有配套的精品资源,点击获取

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

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

立即咨询